<?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>90567</bug_id>
          
          <creation_ts>2012-07-04 09:42:35 -0700</creation_ts>
          <short_desc>Make GC3D and E3D more maintainable for GLES platforms</short_desc>
          <delta_ts>2012-07-10 23:29:43 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>90943</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joshua Netterfield">jnetterfield</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>efidler</cc>
    
    <cc>fpizlo</cc>
    
    <cc>gustavo</cc>
    
    <cc>kbr</cc>
    
    <cc>ossy</cc>
    
    <cc>philn</cc>
    
    <cc>rakuco</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>663033</commentid>
    <comment_count>0</comment_count>
    <who name="Joshua Netterfield">jnetterfield</who>
    <bug_when>2012-07-04 09:42:35 -0700</bug_when>
    <thetext>The current structure of GraphicsContext3DOpenGL* and Extensions3DOpenGL makes improvements to GLES-specific code difficult.

Extensions3DOpenGL should be split into Extensions3DOpenGLCommon, Extensions3DOpenGLES, and Extensions3DOpenGL mirroring the structure of GC3D.

GraphicsContext3DOpenGLCommon should contain as much code as possible while limiting the amount of &quot;#if&quot;s</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663077</commentid>
    <comment_count>1</comment_count>
      <attachid>150826</attachid>
    <who name="Joshua Netterfield">jnetterfield</who>
    <bug_when>2012-07-04 11:23:41 -0700</bug_when>
    <thetext>Created attachment 150826
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663082</commentid>
    <comment_count>2</comment_count>
      <attachid>150826</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-04 11:49:07 -0700</bug_when>
    <thetext>Comment on attachment 150826
Patch

Attachment 150826 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13131874</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663091</commentid>
    <comment_count>3</comment_count>
      <attachid>150826</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-07-04 12:10:48 -0700</bug_when>
    <thetext>Comment on attachment 150826
Patch

Attachment 150826 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/13136799</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663173</commentid>
    <comment_count>4</comment_count>
      <attachid>150844</attachid>
    <who name="Joshua Netterfield">jnetterfield</who>
    <bug_when>2012-07-04 14:45:07 -0700</bug_when>
    <thetext>Created attachment 150844
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663175</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-04 14:48:58 -0700</bug_when>
    <thetext>Attachment 150844 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/platform/graphics/cairo/GraphicsContext3DCairo.cpp:37:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663180</commentid>
    <comment_count>6</comment_count>
      <attachid>150848</attachid>
    <who name="Joshua Netterfield">jnetterfield</who>
    <bug_when>2012-07-04 14:59:26 -0700</bug_when>
    <thetext>Created attachment 150848
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663184</commentid>
    <comment_count>7</comment_count>
      <attachid>150848</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-07-04 15:11:10 -0700</bug_when>
    <thetext>Comment on attachment 150848
Patch

Attachment 150848 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/13134880</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663621</commentid>
    <comment_count>8</comment_count>
      <attachid>150956</attachid>
    <who name="Joshua Netterfield">jnetterfield</who>
    <bug_when>2012-07-05 10:33:58 -0700</bug_when>
    <thetext>Created attachment 150956
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663633</commentid>
    <comment_count>9</comment_count>
      <attachid>150956</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-07-05 10:45:45 -0700</bug_when>
    <thetext>Comment on attachment 150956
Patch

Attachment 150956 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/13154067</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663660</commentid>
    <comment_count>10</comment_count>
      <attachid>150965</attachid>
    <who name="Joshua Netterfield">jnetterfield</who>
    <bug_when>2012-07-05 11:21:00 -0700</bug_when>
    <thetext>Created attachment 150965
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663665</commentid>
    <comment_count>11</comment_count>
      <attachid>150966</attachid>
    <who name="Joshua Netterfield">jnetterfield</who>
    <bug_when>2012-07-05 11:40:03 -0700</bug_when>
    <thetext>Created attachment 150966
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663675</commentid>
    <comment_count>12</comment_count>
      <attachid>150969</attachid>
    <who name="Joshua Netterfield">jnetterfield</who>
    <bug_when>2012-07-05 11:58:19 -0700</bug_when>
    <thetext>Created attachment 150969
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663681</commentid>
    <comment_count>13</comment_count>
      <attachid>150969</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-07-05 12:33:18 -0700</bug_when>
    <thetext>Comment on attachment 150969
Patch

Attachment 150969 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/13155041</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663692</commentid>
    <comment_count>14</comment_count>
      <attachid>150974</attachid>
    <who name="Joshua Netterfield">jnetterfield</who>
    <bug_when>2012-07-05 12:52:39 -0700</bug_when>
    <thetext>Created attachment 150974
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663703</commentid>
    <comment_count>15</comment_count>
      <attachid>150976</attachid>
    <who name="Joshua Netterfield">jnetterfield</who>
    <bug_when>2012-07-05 13:19:50 -0700</bug_when>
    <thetext>Created attachment 150976
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663706</commentid>
    <comment_count>16</comment_count>
      <attachid>150977</attachid>
    <who name="Joshua Netterfield">jnetterfield</who>
    <bug_when>2012-07-05 13:30:02 -0700</bug_when>
    <thetext>Created attachment 150977
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663720</commentid>
    <comment_count>17</comment_count>
      <attachid>150977</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-07-05 14:04:41 -0700</bug_when>
    <thetext>Comment on attachment 150977
Patch

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

Looks good in general, can be cleaned up a bit more.

&gt; Source/WebCore/platform/graphics/opengl/Extensions3DOpenGLCommon.h:2
&gt; + * Copyright (C) 2011 Google Inc. All rights reserved.

Should be RIM copyright I think.

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:185
&gt; +

No need for empty line.

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:267
&gt; +

Ditto.

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:277
&gt; +

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663721</commentid>
    <comment_count>18</comment_count>
      <attachid>150982</attachid>
    <who name="Joshua Netterfield">jnetterfield</who>
    <bug_when>2012-07-05 14:06:34 -0700</bug_when>
    <thetext>Created attachment 150982
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664217</commentid>
    <comment_count>19</comment_count>
      <attachid>150982</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-07-06 11:59:48 -0700</bug_when>
    <thetext>Comment on attachment 150982
Patch

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

This patch looks fine to me overall; I&apos;ll leave it to Rob or someone who works on one of the other affected ports to r+ it. One comment.

&gt; Source/WebCore/platform/graphics/OpenGLESShims.h:2
&gt; + * Copyright (C) 2012 Research In Motion Limited. All rights reserved.

This file should use the two-clause BSD license in Source/WebKit/LICENSE.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664875</commentid>
    <comment_count>20</comment_count>
      <attachid>151250</attachid>
    <who name="Joshua Netterfield">jnetterfield</who>
    <bug_when>2012-07-09 08:20:50 -0700</bug_when>
    <thetext>Created attachment 151250
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664894</commentid>
    <comment_count>21</comment_count>
      <attachid>151250</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-07-09 08:42:48 -0700</bug_when>
    <thetext>Comment on attachment 151250
Patch

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

Looks good, but needs the ChangeLog fix.

&gt; Source/WebCore/ChangeLog:868
&gt; +2012-07-04  Joshua Netterfield  &lt;jnetterfield@rim.com&gt;

Update date and make sure this is top of the ChangeLog.

&gt; Source/WebCore/platform/graphics/opengl/Extensions3DOpenGLES.h:2
&gt; + * Copyright (C) 2011 Google Inc. All rights reserved.

Could this use RIM copyright?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664896</commentid>
    <comment_count>22</comment_count>
      <attachid>151255</attachid>
    <who name="Joshua Netterfield">jnetterfield</who>
    <bug_when>2012-07-09 08:46:27 -0700</bug_when>
    <thetext>Created attachment 151255
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664926</commentid>
    <comment_count>23</comment_count>
      <attachid>151255</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-07-09 09:51:18 -0700</bug_when>
    <thetext>Comment on attachment 151255
Patch

LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>664998</commentid>
    <comment_count>24</comment_count>
      <attachid>151255</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-09 11:00:30 -0700</bug_when>
    <thetext>Comment on attachment 151255
Patch

Clearing flags on attachment: 151255

Committed r122116: &lt;http://trac.webkit.org/changeset/122116&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665000</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-09 11:00:42 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665022</commentid>
    <comment_count>26</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-07-09 11:32:25 -0700</bug_when>
    <thetext>Mac build fix landed in http://trac.webkit.org/changeset/122119.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665123</commentid>
    <comment_count>27</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-09 13:34:43 -0700</bug_when>
    <thetext>This broke five WebGL tests on Mac:

http://build.webkit.org/results/Apple%20Lion%20Debug%20WK1%20(Tests)/r122124%20(759)/results.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665137</commentid>
    <comment_count>28</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-09 13:54:16 -0700</bug_when>
    <thetext>Reopening because it broke tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665162</commentid>
    <comment_count>29</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-09 14:15:36 -0700</bug_when>
    <thetext>Rolled out in http://trac.webkit.org/changeset/122156</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665876</commentid>
    <comment_count>30</comment_count>
      <attachid>151485</attachid>
    <who name="Joshua Netterfield">jnetterfield</who>
    <bug_when>2012-07-10 10:51:15 -0700</bug_when>
    <thetext>Created attachment 151485
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665919</commentid>
    <comment_count>31</comment_count>
      <attachid>151485</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-07-10 11:49:25 -0700</bug_when>
    <thetext>Comment on attachment 151485
Patch

Looks great, and Joshua verified on OS X SL that the fast/canvas/webgl tests pass with this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665965</commentid>
    <comment_count>32</comment_count>
      <attachid>151485</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-10 12:52:54 -0700</bug_when>
    <thetext>Comment on attachment 151485
Patch

Clearing flags on attachment: 151485

Committed r122250: &lt;http://trac.webkit.org/changeset/122250&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665967</commentid>
    <comment_count>33</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-10 12:53:01 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>666401</commentid>
    <comment_count>34</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-07-10 23:29:43 -0700</bug_when>
    <thetext>(In reply to comment #32)
&gt; (From update of attachment 151485 [details])
&gt; Clearing flags on attachment: 151485
&gt; 
&gt; Committed r122250: &lt;http://trac.webkit.org/changeset/122250&gt;

It broke USE(3D_GRAPHICS)=1 and ENABLE(WEBGL)=0 builds - https://bugs.webkit.org/show_bug.cgi?id=90943

Could you check and fix it please?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150826</attachid>
            <date>2012-07-04 11:23:41 -0700</date>
            <delta_ts>2012-07-04 14:45:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90567-20120704142319.patch</filename>
            <type>text/plain</type>
            <size>58572</size>
            <attacher name="Joshua Netterfield">jnetterfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxODU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTYwZTg0OGZjNmI4Zjdm
NDU1ZTBhY2YyZjE3ZThiOTU4YmFlNjk5YS4uMDBhOTBkMzk0ODQ3OGFjNzBhNTU4YWRhOWE1YjU2
NjJlODQ0M2NiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk0IEBACisyMDEyLTA3LTA0ICBKb3No
dWEgTmV0dGVyZmllbGQgIDxqbmV0dGVyZmllbGRAcmltLmNvbT4KKyAgICAgICAgTWFrZSBHQzNE
IGFuZCBFM0QgbW9yZSBtYWludGFpbmFibGUgZm9yIEdMRVMgcGxhdGZvcm1zCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDU2NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY2xlYW5zIHVw
IGNvZGUgZm9yIFdlYkdMIG9uIE9wZW5HTEVTIHBsYXRmb3JtcyB3aGljaCB1c2UgCisgICAgICAg
IEdyYXBoaWNzQ29udGV4dDNET3BlbkdMKiBhbmQgRXh0ZW5zaW9uczNET3BlbkdMKi4gQWx0aG91
Z2gKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wgd2FzIGFscmVhZHkgc3BsaXQgaW50
byBHcmFwaGljc0NvbnRleHQzRE9wZW5HTCwKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0RPcGVu
R0xDb21tb24sIGFuZCAgR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUywgdGhpcyBwYXRjaAorICAg
ICAgICBpcyBhbiBhdHRlbXB0IHRvIHJlZmFjdG9yIHRoaXMgY29kZSBpbiBhIHdheSB0aGF0IHdp
bGwgaGVscCBCbGFja0JlcnJ5IGFuZAorICAgICAgICBvdGhlciB0ZWFtcyBzdXBwb3J0IFdlYkdM
IG9uIG1vYmlsZSBwbGF0Zm9ybXMgd2l0aCBhcyBsaXR0bGUgdXNlIG9mCisgICAgICAgIOKAnCNJ
RiBVU0UoT1BFTkdMX0VTXzIp4oCdIGluIGNvbW1vbiBjb2RlIGFzIHBvc3NpYmxlLiBBbHNvIGlu
Y2x1ZGVkIGlzIHRoZQorICAgICAgICBzZXBhcmF0aW9uIG9mIEV4dGVuc2lvbnMzRE9wZW5HTCBp
bnRvIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbiwKKyAgICAgICAgRXh0ZW5zaW9uczNET3BlbkdM
LCBhbmQgRXh0ZW5zaW9uczNET3BlbkdMRVMgYXMgd2VsbCBhcyB0aGUgaW50cm9kdWN0aW9uCisg
ICAgICAgIG9mIE9wZW5HTEVTU2hpbXMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBjcmVhdGVk
IGluIGxhcmdlIHBhcnQgYnkgSm9uYXRoYW4gRmVsZHN0ZWluLgorCisgICAgICAgIE5vIG5ldyB0
ZXN0czogbm8gbmV3IGJlaGF2aW91ci4KKworICAgICAgICAqIFBsYXRmb3JtQmxhY2tCZXJyeS5j
bWFrZTogUmVjb2duaXplIEJsYWNrQmVycnkgYXMgT1BFTkdMIEVTLCBhZGQgbmV3IGZpbGVzIHRv
IGJ1aWxkCisgICAgICAgICogVGFyZ2V0LnByaTogQWRkIG5ldyBFeHRlbnNpb25zM0RPcGVuR0wq
IHRvIFdlYkdMIGJ1aWxkcworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dDNELmg6IEFkZCB2YWxpZGF0ZURlcHRoU3RlbmNpbCwgbWFrZSBzeXN0ZW1BbGxvd3NNdWx0
aXNhbXBsaW5nT25BVElDYXJkcyBhIGEgbWVtYmVyIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvT3BlbkdMRVNTaGltcy5oOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNw
cDogTW92ZSBjb2RlIHRvIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbiB3aGVyZSBwb3NzaWJsZQor
ICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpFeHRlbnNpb25zM0RPcGVuR0wp
OiBSZWZsZWN0IHRoYXQgaXQgaXMgbm93IGluaGVyaXRzIEV4dGVuc2lvbnMzRENvbW1vbgorICAg
ICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpzdXBwb3J0c0V4dGVuc2lvbik6IENv
bnRhaW5zIE9wZW5HTCBzcGVjaWZpYyBjb2RlIGZyb20gc3VwcG9ydHMKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpnZXRFeHRlbnNpb25z
KTogUmV0dXJucyBhIGxpc3Qgb2YgZXh0ZW5zaW9ucworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaDogUmVtb3ZlIGZ1bmN0aW9ucyBub3cgaW4g
RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEV4
dGVuc2lvbnMzRE9wZW5HTCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4
dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0xDb21tb246OkV4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbik6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0xDb21tb246
On5FeHRlbnNpb25zM0RPcGVuR0xDb21tb24pOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9u
czNET3BlbkdMQ29tbW9uOjpzdXBwb3J0cyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25z
M0RPcGVuR0xDb21tb246OmVuc3VyZUVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uOjppc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uOjpnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKToKKyAgICAgICAg
KFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6Z2V0VHJhbnNsYXRlZFNoYWRlclNv
dXJjZUFOR0xFKTogRXhpc3RlZCBiZWZvcmUsIGJ1dCBkaWQgbm90aGluZy4gTm93IGRvZXMgd2hh
dCBpcyBzYXlzIGl0IGRvZXMuCisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0xD
b21tb246OmluaXRpYWxpemVBdmFpbGFibGVFeHRlbnNpb25zKTogTW92ZWQgZnJvbSBFeHRlbnNp
b25zM0RPcGVuR0w6OnN1cHBvcnRzCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmguCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5H
TEVTOjpFeHRlbnNpb25zM0RPcGVuR0xFUyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25z
M0RPcGVuR0xFUzo6fkV4dGVuc2lvbnMzRE9wZW5HTEVTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4
dGVuc2lvbnMzRE9wZW5HTEVTOjpmcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HKToK
KyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTEVTOjpyZW5kZXJidWZmZXJTdG9y
YWdlTXVsdGlzYW1wbGVJTUcpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdM
RVM6OmNyZWF0ZVZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMz
RE9wZW5HTEVTOjpkZWxldGVWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRl
bnNpb25zM0RPcGVuR0xFUzo6aXNWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbnNpb25zM0RPcGVuR0xFUzo6YmluZFZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNv
cmU6OkV4dGVuc2lvbnMzRE9wZW5HTEVTOjpzdXBwb3J0c0V4dGVuc2lvbik6IENvbnRhaW5zIE9w
ZW5HTEVTIHNwZWNpZmljIGNvZGUgZnJvbSBzdXBwb3J0cworICAgICAgICAoV2ViQ29yZTo6RXh0
ZW5zaW9uczNET3BlbkdMRVM6OmdldEV4dGVuc2lvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmguCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEV4dGVuc2lvbnMzRE9wZW5HTEVTKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRl
cyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpzeXN0ZW1BbGxvd3NNdWx0aXNhbXBsaW5nT25BVElDYXJkcyk6IE5vdyBhIG1lbWJlciBmdW5j
dGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25z
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RP
cGVuR0xDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZh
bGlkYXRlRGVwdGhTdGVuY2lsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmxpbmVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bGlu
a1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBpeGVsU3Rv
cmVpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwb2x5Z29uT2Zmc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVCdWZmZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29t
cGlsZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHNB
bmRDb252ZXJ0VG9CR1JBSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzeXN0ZW1BbGxvd3NNdWx0aXNhbXBsaW5nT25B
VElDYXJkcyk6IE5vdyBhIG1lbWJlciBmdW5jdGlvbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcik6
CisKIDIwMTItMDctMDQgIFZzZXZvbG9kIFZsYXNvdiAgPHZzZXZpa0BjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgV2ViIEluc3BlY3RvcjogVUlTb3VyY2VDb2RlIHNob3VsZCB0YWtlIGNhcmUgb2Yg
YWRkaW5nIHJldmlzaW9uIGFmdGVyIGNvbW1pdHRpbmcgd29ya2luZyBjb3B5LgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlIGIvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlCmluZGV4IDI5NDA5NTg2MzZlYTUyMjMzMGJlMjdh
YmU4MzA2NDE2MzVmMGYwZDUuLjRjZWE4NzEyNzA4OGVmOGJmOTYxYzU1YTAxN2YxYWZkMTNjY2Rh
MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UKQEAgLTIxOCw2ICsy
MTgsNyBAQCBpZiAoRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQogRU5ESUYgKCkKIAog
aWYgKEVOQUJMRV9XRUJHTCkKKyAgICBBRERfREVGSU5JVElPTlMgKC1EV1RGX1VTRV9PUEVOR0xf
RVNfMj0xKQogICAgIExJU1QoQVBQRU5EIFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwogICAg
ICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1IgogICAgICAgICAiJHtX
RUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsIgpAQCAtMjI1LDYgKzIyNiwxMSBA
QCBpZiAoRU5BQkxFX1dFQkdMKQogICAgIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0RyYXdpbmdCdWZmZXJCbGFja0JlcnJ5
LmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0dyYXBoaWNzQ29udGV4
dDNEQmxhY2tCZXJyeS5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBo
aWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKKyAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmNwcAorICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuY3BwCiAgICAgKQogRU5E
SUYgKCkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9X
ZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggNTlkNTgxMzJiMDU1ZTMzNTJkYzhjNDUyZmE0MjExZWY3
MjBkYWQ2Ny4uM2M3ZTdiY2E1NTFmNTMyZmM0NTZlMzUwNGVmYTY4OTU5NzcxOTI2MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJn
ZXQucHJpCkBAIC0zOTU1LDE1ICszOTU1LDE5IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9X
RUJHTD0xKSB7CiAKICAgICBjb250YWlucyhRVF9DT05GSUcsIG9wZW5nbCkgfCBjb250YWlucyhR
VF9DT05GSUcsIG9wZW5nbGVzMikgewogICAgICAgICAhY29udGFpbnMoUVRfQ09ORklHLCBvcGVu
Z2xlczIpIHsKLSAgICAgICAgICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAorICAgICAgICAgICAgU09VUkNFUyArPSBcCisg
ICAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RP
cGVuR0wuY3BwIFwKKyAgICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRl
bnNpb25zM0RPcGVuR0wuY3BwCiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBTT1VSQ0VT
ICs9IHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNw
cAorICAgICAgICAgICAgU09VUkNFUyArPSBcCisgICAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAgXAorICAgICAgICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmNwcAogICAg
ICAgICB9CiAKICAgICAgICAgSEVBREVSUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0
ZW5zaW9uczNET3BlbkdMLmgKIAogICAgICAgICBTT1VSQ0VTICs9IFwKLSAgICAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwIFwKKyAgICAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3Bw
IFwKICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQz
RE9wZW5HTENvbW1vbi5jcHAKIAogICAgICAgICBBTkdMRV9ESVIgPSAkJHJlcGxhY2UoUFdELCAi
V2ViQ29yZSIsICJUaGlyZFBhcnR5L0FOR0xFIikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCmluZGV4IGRiZDlkZmVkZTAxM2E0
Y2FmMzMyNDYzYWQzMmZjNGUxNTI4MjY0NjcuLmJkMjRjNjM2ODA2OGNiZjYzNzYzOGRjNzMxNjEz
NGY0Zjc4NzAyN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNELmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0M0QuaApAQCAtMjAsNyArMjAsNyBAQAogICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQog
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogCiAjaWZuZGVmIEdyYXBoaWNzQ29udGV4dDNEX2gKQEAgLTkxLDE0ICs5MSwxMiBAQCBj
b25zdCBQbGF0Zm9ybTNET2JqZWN0IE51bGxQbGF0Zm9ybTNET2JqZWN0ID0gMDsKICNpbmNsdWRl
IDxDb3JlR3JhcGhpY3MvQ0dDb250ZXh0Lmg+CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKEJMQUNL
QkVSUlkpCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNv
cmUgewogY2xhc3MgRHJhd2luZ0J1ZmZlcjsKIGNsYXNzIEV4dGVuc2lvbnMzRDsKLSNpZiBQTEFU
Rk9STShNQUMpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVG
TCkKKyNpZiBVU0UoT1BFTkdMX0VTXzIpCitjbGFzcyBFeHRlbnNpb25zM0RPcGVuR0xFUzsKKyNl
bHNlCiBjbGFzcyBFeHRlbnNpb25zM0RPcGVuR0w7CiAjZW5kaWYKICNpZiBQTEFURk9STShRVCkK
QEAgLTkyNCw2ICs5MjIsNyBAQCBwdWJsaWM6CiAgICAgLy8gaW4gcGFydGljdWxhciBzdGVuY2ls
IGFuZCBhbnRpYWxpYXMsIGFuZCBkZXRlcm1pbmUgd2hpY2ggY291bGQgb3IKICAgICAvLyBjb3Vs
ZCBub3QgYmUgaG9ub3JlZCBiYXNlZCBvbiB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBPcGVuR0wK
ICAgICAvLyBpbXBsZW1lbnRhdGlvbi4KKyAgICB2b2lkIHZhbGlkYXRlRGVwdGhTdGVuY2lsKGNv
bnN0IGNoYXIqIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbik7CiAgICAgdm9pZCB2YWxpZGF0
ZUF0dHJpYnV0ZXMoKTsKIAogICAgIC8vIFJlYWQgcmVuZGVyaW5nIHJlc3VsdHMgaW50byBhIHBp
eGVsIGFycmF5IHdpdGggdGhlIHNhbWUgZm9ybWF0IGFzIHRoZQpAQCAtOTU1LDE2ICs5NTQsMzAg
QEAgcHVibGljOgogICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50
cnk+IG1fc2hhZGVyU291cmNlTWFwOwogCiAgICAgQU5HTEVXZWJLaXRCcmlkZ2UgbV9jb21waWxl
cjsKKyNlbmRpZgogCisjaWYgUExBVEZPUk0oUVQpICYmIGRlZmluZWQoUVRfT1BFTkdMX0VTXzIp
CisgICAgZnJpZW5kIGNsYXNzIEV4dGVuc2lvbnMzRFF0OworICAgIE93blB0cjxFeHRlbnNpb25z
M0RRdD4gbV9leHRlbnNpb25zOworI2VsaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKKyAgICBmcmll
bmQgY2xhc3MgRXh0ZW5zaW9uczNET3BlbkdMRVM7CisgICAgT3duUHRyPEV4dGVuc2lvbnMzRE9w
ZW5HTEVTPiBtX2V4dGVuc2lvbnM7CisjZWxzZQogICAgIGZyaWVuZCBjbGFzcyBFeHRlbnNpb25z
M0RPcGVuR0w7CiAgICAgT3duUHRyPEV4dGVuc2lvbnMzRE9wZW5HTD4gbV9leHRlbnNpb25zOwor
I2VuZGlmCisgICAgZnJpZW5kIGNsYXNzIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjsKIAogICAg
IEF0dHJpYnV0ZXMgbV9hdHRyczsKICAgICBWZWN0b3I8VmVjdG9yPGZsb2F0PiA+IG1fdmVydGV4
QXJyYXk7CiAKLSAgICBHQzNEdWludCBtX3RleHR1cmUsIG1fY29tcG9zaXRvclRleHR1cmU7Cisg
ICAgR0MzRHVpbnQgbV90ZXh0dXJlOworI2lmICFQTEFURk9STShCTEFDS0JFUlJZKQorICAgIEdD
M0R1aW50IG1fY29tcG9zaXRvclRleHR1cmU7CisjZW5kaWYKICAgICBHQzNEdWludCBtX2ZibzsK
LSNpZiBVU0UoT1BFTkdMX0VTXzIpCisKKyNpZiAhUExBVEZPUk0oQkxBQ0tCRVJSWSkKICAgICBH
QzNEdWludCBtX2RlcHRoQnVmZmVyOwogICAgIEdDM0R1aW50IG1fc3RlbmNpbEJ1ZmZlcjsKICNl
bmRpZgpAQCAtOTg1LDEwICs5OTgsMTEgQEAgcHVibGljOgogCiAgICAgLy8gRXJyb3JzIHJhaXNl
ZCBieSBzeW50aGVzaXplR0xFcnJvcigpLgogICAgIExpc3RIYXNoU2V0PEdDM0RlbnVtPiBtX3N5
bnRoZXRpY0Vycm9yczsKLSNlbmRpZgogCiAgICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTsKICAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlPiBtX3ByaXZh
dGU7CisKKyAgICBib29sIHN5c3RlbUFsbG93c011bHRpc2FtcGxpbmdPbkFUSUNhcmRzKCk7IAog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvT3BlbkdMRVNTaGltcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvT3BlbkdMRVNTaGltcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVkYjkxOTMzZjg1YmMwNjFj
YzljODUyNTRkYzM0ZjA5YzI5M2E4MDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9PcGVuR0xFU1NoaW1zLmgKQEAgLTAsMCArMSw1NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIE9wZW5HTEVTU2hp
bXNfaAorI2RlZmluZSBPcGVuR0xFU1NoaW1zX2gKKworI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkp
CisjZGVmaW5lIGdsQmluZEZyYW1lYnVmZmVyRVhUIGdsQmluZEZyYW1lYnVmZmVyCisjZGVmaW5l
IGdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRAorI2RlZmlu
ZSBnbEJpbmRSZW5kZXJidWZmZXJFWFQgZ2xCaW5kUmVuZGVyYnVmZmVyCisjZGVmaW5lIGdsUmVu
ZGVyYnVmZmVyU3RvcmFnZUVYVCBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UKKyNkZWZpbmUgZ2xGcmFt
ZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVCBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyCisjZGVmaW5l
IEdMX1JFTkRFUkJVRkZFUl9FWFQgR0xfUkVOREVSQlVGRkVSCisjZGVmaW5lIEdMX1NURU5DSUxf
QVRUQUNITUVOVF9FWFQgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UCisjZGVmaW5lIGdsQ2hlY2tGcmFt
ZWJ1ZmZlclN0YXR1c0VYVCBnbENoZWNrRnJhbWVidWZmZXJTdGF0dXMKKyNkZWZpbmUgZ2xEZWxl
dGVGcmFtZWJ1ZmZlcnNFWFQgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMKKyNkZWZpbmUgZ2xEZWxldGVS
ZW5kZXJidWZmZXJzRVhUIGdsRGVsZXRlUmVuZGVyYnVmZmVycworI2RlZmluZSBnbEdlblJlbmRl
cmJ1ZmZlcnNFWFQgZ2xHZW5SZW5kZXJidWZmZXJzCisjZGVmaW5lIGdsR2VuRnJhbWVidWZmZXJz
RVhUIGdsR2VuRnJhbWVidWZmZXJzCisjZGVmaW5lIGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50
UGFyYW1ldGVyaXZFWFQgZ2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdgorI2Rl
ZmluZSBnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2RVhUIGdsR2V0UmVuZGVyYnVmZmVyUGFy
YW1ldGVyaXYKKyNkZWZpbmUgZ2xJc1JlbmRlcmJ1ZmZlckVYVCBnbElzUmVuZGVyYnVmZmVyCisj
ZGVmaW5lIGdsSXNGcmFtZWJ1ZmZlckVYVCBnbElzRnJhbWVidWZmZXIKKyNkZWZpbmUgZ2xHZW5l
cmF0ZU1pcG1hcEVYVCBnbEdlbmVyYXRlTWlwbWFwCisjZGVmaW5lIEdMX0NPTE9SX0FUVEFDSE1F
TlQwX0VYVCBHTF9DT0xPUl9BVFRBQ0hNRU5UMAorI2RlZmluZSBHTF9ERVBUSF9BVFRBQ0hNRU5U
X0VYVCBHTF9ERVBUSF9BVFRBQ0hNRU5UCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRF
X0VYVCBHTF9GUkFNRUJVRkZFUl9DT01QTEVURQorI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9FWFQg
R0xfRlJBTUVCVUZGRVIKKyNkZWZpbmUgR0xfREVQVEgyNF9TVEVOQ0lMOF9FWFQgR0xfREVQVEgy
NF9TVEVOQ0lMOF9PRVMKKyNkZWZpbmUgR0xfUkdCQTggR0xfUkdCQThfT0VTCisjZGVmaW5lIEdM
X1JHQjggR0xfUkdCOF9PRVMKKyNkZWZpbmUgR0xfUkVBRF9GUkFNRUJVRkZFUl9FWFQgMHg4Q0E4
CisjZGVmaW5lIEdMX0RSQVdfRlJBTUVCVUZGRVJfRVhUIDB4OENBOQorI2RlZmluZSBGUkFNRUJV
RkZFUl9JTkNPTVBMRVRFX01VTFRJU0FNUExFX0VYVCAweDkxMzQKKyNkZWZpbmUgR0xfTUFYX1NB
TVBMRVNfRVhUIDB4OEQ1NworI2VuZGlmIC8vIFBMQVRGT1JNKEJMQUNLQkVSUlkpCisKKyNlbmRp
ZiAvLyBPcGVuR0xFU1NoaW1zX2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcAppbmRleCA0
YWEzNDFjMzI2YzczNTdiMTEwYzk4M2QwMzljY2Q3YmMzMzE2NjEyLi5iYmU3N2JiNzk4NTRjOTIz
N2U4Y2I2NzA2Yzk3NDY1OTk1NjJiOTAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcApA
QCAtNDIsNyArNDIsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBFeHRlbnNpb25zM0RPcGVu
R0w6OkV4dGVuc2lvbnMzRE9wZW5HTChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKLSAgICA6
IG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zKGZhbHNlKQorICAgIDogRXh0ZW5zaW9u
czNET3BlbkdMQ29tbW9uKGNvbnRleHQpCisgICAgLCBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0
ZW5zaW9ucyhmYWxzZSkKICAgICAsIG1fY29udGV4dChjb250ZXh0KQogewogfQpAQCAtNTEsOTEg
KzUyLDYgQEAgRXh0ZW5zaW9uczNET3BlbkdMOjp+RXh0ZW5zaW9uczNET3BlbkdMKCkKIHsKIH0K
IAotYm9vbCBFeHRlbnNpb25zM0RPcGVuR0w6OnN1cHBvcnRzKGNvbnN0IFN0cmluZyYgbmFtZSkK
LXsKLSAgICAvLyBOb3RlIG9uIHN1cHBvcnQgZm9yIEJHUkE6Ci0gICAgLy8KLSAgICAvLyBGb3Ig
T3BlbkdMIEVTMi4wLCByZXF1aXJlcyBjaGVja2luZyBmb3IKLSAgICAvLyBHTF9FWFRfdGV4dHVy
ZV9mb3JtYXRfQkdSQTg4ODggYW5kIEdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3JhLgotICAgIC8vIEZv
ciBkZXNrdG9wIEdMLCBCR1JBIGhhcyBiZWVuIHN1cHBvcnRlZCBzaW5jZSBPcGVuR0wgMS4yLgot
ICAgIC8vCi0gICAgLy8gSG93ZXZlciwgbm90ZSB0aGF0IHRoZSBHTCBFUzIgZXh0ZW5zaW9uIHJl
cXVpcmVzIHRoZQotICAgIC8vIGludGVybmFsRm9ybWF0IHRvIGdsVGV4SW1hZ2UyRCgpIGJlIEdM
X0JHUkEsIHdoaWxlIGRlc2t0b3AgR0wKLSAgICAvLyB3aWxsIG5vdCBhY2NlcHQgR0xfQkdSQSAo
bXVzdCBiZSBHTF9SR0JBKSwgc28gdGhpcyBtdXN0IGJlCi0gICAgLy8gY2hlY2tlZCBvbiBlYWNo
IHBsYXRmb3JtLiBEZXNrdG9wIEdMIG9mZmVycyBuZWl0aGVyCi0gICAgLy8gR0xfRVhUX3RleHR1
cmVfZm9ybWF0X0JHUkE4ODg4IG9yIEdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3JhLCBzbwotICAgIC8v
IHRyZWF0IHRoZW0gYXMgdW5zdXBwb3J0ZWQgaGVyZS4KLSAgICBpZiAoIW1faW5pdGlhbGl6ZWRB
dmFpbGFibGVFeHRlbnNpb25zKSB7Ci0gICAgICAgIFN0cmluZyBleHRlbnNpb25zU3RyaW5nKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KDo6Z2xHZXRTdHJpbmcoR0xfRVhURU5TSU9OUykp
KTsKLSAgICAgICAgVmVjdG9yPFN0cmluZz4gYXZhaWxhYmxlRXh0ZW5zaW9uczsKLSAgICAgICAg
ZXh0ZW5zaW9uc1N0cmluZy5zcGxpdCgiICIsIGF2YWlsYWJsZUV4dGVuc2lvbnMpOwotICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGF2YWlsYWJsZUV4dGVuc2lvbnMuc2l6ZSgpOyArK2kp
Ci0gICAgICAgICAgICBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuYWRkKGF2YWlsYWJsZUV4dGVuc2lv
bnNbaV0pOwotICAgICAgICBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucyA9IHRydWU7
Ci0gICAgfQotICAgIAotICAgIC8vIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQgYW5kIEdMX0FO
R0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIGFyZSAiZmFrZSIuIFRoZXkgYXJlIGltcGxlbWVu
dGVkIHVzaW5nIG90aGVyCi0gICAgLy8gZXh0ZW5zaW9ucy4gSW4gcGFydGljdWxhciBHTF9FWFRf
ZnJhbWVidWZmZXJfYmxpdCBhbmQgR0xfRVhUX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlCi0gICAg
aWYgKG5hbWUgPT0gIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQiKQotICAgICAgICByZXR1cm4g
bV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9FWFRfZnJhbWVidWZmZXJfYmxpdCIp
OwotICAgIGlmIChuYW1lID09ICJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpCi0g
ICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0VYVF9mcmFt
ZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpOwotCi0gICAgLy8gRGVza3RvcCBHTCBhbHdheXMgc3VwcG9y
dHMgR0xfT0VTX3JnYjhfcmdiYTguCi0gICAgaWYgKG5hbWUgPT0gIkdMX09FU19yZ2I4X3JnYmE4
IikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBJZiBHTF9BUkJfdGV4dHVyZV9mbG9h
dCBpcyBhdmFpbGFibGUgdGhlbiB3ZSByZXBvcnQgR0xfT0VTX3RleHR1cmVfZmxvYXQgYW5kCi0g
ICAgLy8gR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdCBhcyBhdmFpbGFibGUuCi0gICAgaWYgKG5h
bWUgPT0gIkdMX09FU190ZXh0dXJlX2Zsb2F0IiB8fCBuYW1lID09ICJHTF9PRVNfdGV4dHVyZV9o
YWxmX2Zsb2F0IikKLSAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlu
cygiR0xfQVJCX3RleHR1cmVfZmxvYXQiKTsKLSAgICAKLSAgICAvLyBHTF9PRVNfdmVydGV4X2Fy
cmF5X29iamVjdAotICAgIGlmIChuYW1lID09ICJHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdCIp
Ci0gICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0FQUExF
X3ZlcnRleF9hcnJheV9vYmplY3QiKTsKLQotICAgIC8vIERlc2t0b3AgR0wgYWx3YXlzIHN1cHBv
cnRzIHRoZSBzdGFuZGFyZCBkZXJpdmF0aXZlIGZ1bmN0aW9ucwotICAgIGlmIChuYW1lID09ICJH
TF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
IGlmIChuYW1lID09ICJHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKQotICAgICAg
ICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9FWFRfdGV4dHVyZV9m
aWx0ZXJfYW5pc290cm9waWMiKTsKLQotICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMu
Y29udGFpbnMobmFtZSk7Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uczNET3BlbkdMOjplbnN1cmVFbmFi
bGVkKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JN
KFFUKSB8fCBQTEFURk9STShHVEspCi0gICAgaWYgKG5hbWUgPT0gIkdMX09FU19zdGFuZGFyZF9k
ZXJpdmF0aXZlcyIpIHsKLSAgICAgICAgLy8gRW5hYmxlIHN1cHBvcnQgaW4gQU5HTEUgKGlmIG5v
dCBlbmFibGVkIGFscmVhZHkpCi0gICAgICAgIEFOR0xFV2ViS2l0QnJpZGdlJiBjb21waWxlciA9
IG1fY29udGV4dC0+bV9jb21waWxlcjsKLSAgICAgICAgU2hCdWlsdEluUmVzb3VyY2VzIEFOR0xF
UmVzb3VyY2VzID0gY29tcGlsZXIuZ2V0UmVzb3VyY2VzKCk7Ci0gICAgICAgIGlmICghQU5HTEVS
ZXNvdXJjZXMuT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzKSB7Ci0gICAgICAgICAgICBBTkdMRVJl
c291cmNlcy5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgPSAxOwotICAgICAgICAgICAgY29tcGls
ZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsKLSAgICAgICAgfQotICAgIH0KLSNlbHNl
Ci0gICAgQVNTRVJUX1VOVVNFRChuYW1lLCBzdXBwb3J0cyhuYW1lKSk7Ci0jZW5kaWYKLX0KLQot
Ym9vbCBFeHRlbnNpb25zM0RPcGVuR0w6OmlzRW5hYmxlZChjb25zdCBTdHJpbmcmIG5hbWUpCi17
Ci0jaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RLKQotICAg
IGlmIChuYW1lID09ICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSB7Ci0gICAgICAgIEFO
R0xFV2ViS2l0QnJpZGdlJiBjb21waWxlciA9IG1fY29udGV4dC0+bV9jb21waWxlcjsKLSAgICAg
ICAgcmV0dXJuIGNvbXBpbGVyLmdldFJlc291cmNlcygpLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZl
czsKLSAgICB9Ci0jZW5kaWYKLSAgICByZXR1cm4gc3VwcG9ydHMobmFtZSk7Ci19Ci0KLWludCBF
eHRlbnNpb25zM0RPcGVuR0w6OmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKQotewotICAgIHJl
dHVybiBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I7Ci19CiAKIHZvaWQgRXh0ZW5zaW9uczNE
T3BlbkdMOjpibGl0RnJhbWVidWZmZXIobG9uZyBzcmNYMCwgbG9uZyBzcmNZMCwgbG9uZyBzcmNY
MSwgbG9uZyBzcmNZMSwgbG9uZyBkc3RYMCwgbG9uZyBkc3RZMCwgbG9uZyBkc3RYMSwgbG9uZyBk
c3RZMSwgdW5zaWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nIGZpbHRlcikKIHsKQEAgLTE5
NCwxOSArMTEwLDQ5IEBAIHZvaWQgRXh0ZW5zaW9uczNET3BlbkdMOjpiaW5kVmVydGV4QXJyYXlP
RVMoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKICNlbmRpZgogfQogCi1TdHJpbmcgRXh0ZW5zaW9u
czNET3BlbkdMOjpnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoUGxhdGZvcm0zRE9iamVj
dCBzaGFkZXIpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNoYWRlcik7Ci0gICAgcmV0dXJuICIiOwot
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbiBhbmQgYWRkIEdMX0FOR0xFX3Ry
YW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSBpbiBzdXBwb3J0cygpLgotfQotCiB2b2lkIEV4dGVuc2lv
bnMzRE9wZW5HTDo6Y29weVRleHR1cmVDSFJPTUlVTShHQzNEZW51bSwgUGxhdGZvcm0zRE9iamVj
dCwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGludCwgR0MzRGVudW0pCiB7CiAgICAgLy8gRklYTUU6
IGltcGxlbWVudCB0aGlzIGZ1bmN0aW9uIGFuZCBhZGQgR0xfQ0hST01JVU1fY29weV90ZXh0dXJl
IGluIHN1cHBvcnRzKCkuCiAgICAgcmV0dXJuOwogfQogCitib29sIEV4dGVuc2lvbnMzRE9wZW5H
TDo6c3VwcG9ydHNFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIC8vIEdMX0FO
R0xFX2ZyYW1lYnVmZmVyX2JsaXQgYW5kIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxl
IGFyZSAiZmFrZSIuIFRoZXkgYXJlIGltcGxlbWVudGVkIHVzaW5nIG90aGVyCisgICAgLy8gZXh0
ZW5zaW9ucy4gSW4gcGFydGljdWxhciBHTF9FWFRfZnJhbWVidWZmZXJfYmxpdCBhbmQgR0xfRVhU
X2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlCisgICAgaWYgKG5hbWUgPT0gIkdMX0FOR0xFX2ZyYW1l
YnVmZmVyX2JsaXQiKQorICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRh
aW5zKCJHTF9FWFRfZnJhbWVidWZmZXJfYmxpdCIpOworICAgIGlmIChuYW1lID09ICJHTF9BTkdM
RV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpCisgICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4
dGVuc2lvbnMuY29udGFpbnMoIkdMX0VYVF9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpOworCisg
ICAgLy8gRGVza3RvcCBHTCBhbHdheXMgc3VwcG9ydHMgR0xfT0VTX3JnYjhfcmdiYTguCisgICAg
aWYgKG5hbWUgPT0gIkdMX09FU19yZ2I4X3JnYmE4IikKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICAvLyBJZiBHTF9BUkJfdGV4dHVyZV9mbG9hdCBpcyBhdmFpbGFibGUgdGhlbiB3ZSByZXBv
cnQgR0xfT0VTX3RleHR1cmVfZmxvYXQgYW5kCisgICAgLy8gR0xfT0VTX3RleHR1cmVfaGFsZl9m
bG9hdCBhcyBhdmFpbGFibGUuCisgICAgaWYgKG5hbWUgPT0gIkdMX09FU190ZXh0dXJlX2Zsb2F0
IiB8fCBuYW1lID09ICJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IikKKyAgICAgICAgcmV0dXJu
IG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfQVJCX3RleHR1cmVfZmxvYXQiKTsK
KworICAgIC8vIEdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0CisgICAgaWYgKG5hbWUgPT0gIkdM
X09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikKKyAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0
ZW5zaW9ucy5jb250YWlucygiR0xfQVBQTEVfdmVydGV4X2FycmF5X29iamVjdCIpOworCisgICAg
Ly8gRGVza3RvcCBHTCBhbHdheXMgc3VwcG9ydHMgdGhlIHN0YW5kYXJkIGRlcml2YXRpdmUgZnVu
Y3Rpb25zCisgICAgaWYgKG5hbWUgPT0gIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKG5hbWUgPT0gIkdMX0VYVF90ZXh0dXJlX2Zp
bHRlcl9hbmlzb3Ryb3BpYyIpCisgICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMu
Y29udGFpbnMoIkdMX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpOworCisgICAgcmV0
dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucyhuYW1lKTsKK30KKworU3RyaW5nIEV4
dGVuc2lvbnMzRE9wZW5HTDo6Z2V0RXh0ZW5zaW9ucygpCit7CisgICAgcmV0dXJuIFN0cmluZyhy
ZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPig6OmdsR2V0U3RyaW5nKEdMX0VYVEVOU0lPTlMp
KSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJH
TCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9F
eHRlbnNpb25zM0RPcGVuR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaAppbmRleCAyYjJkMzBhMDkwZTU0ZmNhMWQwNjQ2MmFl
NzFkZDdlYzg3MmI1NDRjLi5hMjc4OWJkY2NjMDVkZWE0ZDZkZjliM2I0YzQ3NzdmN2IxOWVhMTIy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0
ZW5zaW9uczNET3BlbkdMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIEV4
dGVuc2lvbnMzRE9wZW5HTF9oCiAjZGVmaW5lIEV4dGVuc2lvbnMzRE9wZW5HTF9oCiAKLSNpbmNs
dWRlICJFeHRlbnNpb25zM0QuaCIKKyNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0xDb21tb24u
aCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KQEAgLTM0LDE1ICszNCwxMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNz
IEV4dGVuc2lvbnMzRE9wZW5HTCA6IHB1YmxpYyBFeHRlbnNpb25zM0QgeworY2xhc3MgRXh0ZW5z
aW9uczNET3BlbkdMIDogcHVibGljIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbiB7CiBwdWJsaWM6
CiAgICAgdmlydHVhbCB+RXh0ZW5zaW9uczNET3BlbkdMKCk7CiAKICAgICAvLyBFeHRlbnNpb25z
M0QgbWV0aG9kcy4KLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHMoY29uc3QgU3RyaW5nJik7Ci0g
ICAgdmlydHVhbCB2b2lkIGVuc3VyZUVuYWJsZWQoY29uc3QgU3RyaW5nJik7Ci0gICAgdmlydHVh
bCBib29sIGlzRW5hYmxlZChjb25zdCBTdHJpbmcmKTsKLSAgICB2aXJ0dWFsIGludCBnZXRHcmFw
aGljc1Jlc2V0U3RhdHVzQVJCKCk7CiAgICAgdmlydHVhbCB2b2lkIGJsaXRGcmFtZWJ1ZmZlcihs
b25nIHNyY1gwLCBsb25nIHNyY1kwLCBsb25nIHNyY1gxLCBsb25nIHNyY1kxLCBsb25nIGRzdFgw
LCBsb25nIGRzdFkwLCBsb25nIGRzdFgxLCBsb25nIGRzdFkxLCB1bnNpZ25lZCBsb25nIG1hc2ss
IHVuc2lnbmVkIGxvbmcgZmlsdGVyKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyYnVmZmVyU3Rv
cmFnZU11bHRpc2FtcGxlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHNhbXBs
ZXMsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVu
c2lnbmVkIGxvbmcgaGVpZ2h0KTsKICAgICAKQEAgLTUwLDE0ICs0NiwxNiBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIGRlbGV0ZVZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpOwog
ICAgIHZpcnR1YWwgR0MzRGJvb2xlYW4gaXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0
KTsKICAgICB2aXJ0dWFsIHZvaWQgYmluZFZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3Qp
OwotICAgIHZpcnR1YWwgU3RyaW5nIGdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShQbGF0
Zm9ybTNET2JqZWN0KTsKICAgICB2aXJ0dWFsIHZvaWQgY29weVRleHR1cmVDSFJPTUlVTShHQzNE
ZW51bSwgUGxhdGZvcm0zRE9iamVjdCwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGludCwgR0MzRGVu
dW0pOwogCi1wcml2YXRlOgorcHJvdGVjdGVkOgogICAgIC8vIFRoaXMgY2xhc3Mgb25seSBuZWVk
cyB0byBiZSBpbnN0YW50aWF0ZWQgYnkgR3JhcGhpY3NDb250ZXh0M0QgaW1wbGVtZW50YXRpb25z
LgogICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKICAgICBFeHRlbnNpb25zM0RP
cGVuR0woR3JhcGhpY3NDb250ZXh0M0QqKTsKIAorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0V4
dGVuc2lvbihjb25zdCBXVEY6OlN0cmluZyYpOworICAgIHZpcnR1YWwgU3RyaW5nIGdldEV4dGVu
c2lvbnMoKTsKKwogICAgIGJvb2wgbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnM7CiAg
ICAgSGFzaFNldDxTdHJpbmc+IG1fYXZhaWxhYmxlRXh0ZW5zaW9uczsKICAgICAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RP
cGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjliZmZlNWI3MDgyNjJh
N2RhMjhkNDIzYzhlYzg1YTc1YzYxMTVjMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3Bw
CkBAIC0wLDAgKzEsMTU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2lmIEVOQUJMRShXRUJHTCkKKyNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0xD
b21tb24uaCIKKworI2luY2x1ZGUgIkFOR0xFV2ViS2l0QnJpZGdlLmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0M0QuaCIKKworI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCisjaW5jbHVkZSA8
QmxhY2tCZXJyeVBsYXRmb3JtTG9nLmg+CisjZW5kaWYKKworI2lmIFVTRShPUEVOR0xfRVNfMikK
KyNpbmNsdWRlICJPcGVuR0xFU1NoaW1zLmgiCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjaW5j
bHVkZSA8R0xFUzIvZ2wyZXh0Lmg+CisjZWxpZiBQTEFURk9STShNQUMpCisjaW5jbHVkZSA8T3Bl
bkdML2dsLmg+CisjZWxpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkgfHwgUExBVEZP
Uk0oUVQpCisjaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0V4dGVuc2lvbnMzRE9wZW5HTENv
bW1vbjo6RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
KQorICAgIDogbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnMoZmFsc2UpCisgICAgLCBt
X2NvbnRleHQoY29udGV4dCkKK3sKK30KKworRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjp+RXh0
ZW5zaW9uczNET3BlbkdMQ29tbW9uKCkKK3sKK30KKworYm9vbCBFeHRlbnNpb25zM0RPcGVuR0xD
b21tb246OnN1cHBvcnRzKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAoIW1faW5pdGlh
bGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zKQorICAgICAgICBpbml0aWFsaXplQXZhaWxhYmxlRXh0
ZW5zaW9ucygpOworCisgICAgcmV0dXJuIHN1cHBvcnRzRXh0ZW5zaW9uKG5hbWUpOworfQorCit2
b2lkIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6ZW5zdXJlRW5hYmxlZChjb25zdCBTdHJpbmcm
IG5hbWUpCit7CisgICAgaWYgKG5hbWUgPT0gIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIp
IHsKKyAgICAgICAgLy8gRW5hYmxlIHN1cHBvcnQgaW4gQU5HTEUgKGlmIG5vdCBlbmFibGVkIGFs
cmVhZHkpCisgICAgICAgIEFOR0xFV2ViS2l0QnJpZGdlJiBjb21waWxlciA9IG1fY29udGV4dC0+
bV9jb21waWxlcjsKKyAgICAgICAgU2hCdWlsdEluUmVzb3VyY2VzIEFOR0xFUmVzb3VyY2VzID0g
Y29tcGlsZXIuZ2V0UmVzb3VyY2VzKCk7CisgICAgICAgIGlmICghQU5HTEVSZXNvdXJjZXMuT0VT
X3N0YW5kYXJkX2Rlcml2YXRpdmVzKSB7CisgICAgICAgICAgICBBTkdMRVJlc291cmNlcy5PRVNf
c3RhbmRhcmRfZGVyaXZhdGl2ZXMgPSAxOworICAgICAgICAgICAgY29tcGlsZXIuc2V0UmVzb3Vy
Y2VzKEFOR0xFUmVzb3VyY2VzKTsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBFeHRlbnNp
b25zM0RPcGVuR0xDb21tb246OmlzRW5hYmxlZChjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAg
aWYgKG5hbWUgPT0gIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpIHsKKyAgICAgICAgQU5H
TEVXZWJLaXRCcmlkZ2UmIGNvbXBpbGVyID0gbV9jb250ZXh0LT5tX2NvbXBpbGVyOworICAgICAg
ICByZXR1cm4gY29tcGlsZXIuZ2V0UmVzb3VyY2VzKCkuT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVz
OworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydHMobmFtZSk7Cit9CisKK2ludCBFeHRlbnNpb25z
M0RPcGVuR0xDb21tb246OmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKQoreworICAgIHJldHVy
biBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I7Cit9CisKK1N0cmluZyBFeHRlbnNpb25zM0RP
cGVuR0xDb21tb246OmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShQbGF0Zm9ybTNET2Jq
ZWN0IHNoYWRlcikKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICBpbnQgR0xzaGFkZXJUeXBl
OworICAgIEFOR0xFU2hhZGVyVHlwZSBzaGFkZXJUeXBlOworCisgICAgQU5HTEVXZWJLaXRCcmlk
Z2UmIGNvbXBpbGVyID0gbV9jb250ZXh0LT5tX2NvbXBpbGVyOworCisgICAgbV9jb250ZXh0LT5n
ZXRTaGFkZXJpdihzaGFkZXIsIEdyYXBoaWNzQ29udGV4dDNEOjpTSEFERVJfVFlQRSwgJkdMc2hh
ZGVyVHlwZSk7CisKKyAgICBpZiAoR0xzaGFkZXJUeXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpW
RVJURVhfU0hBREVSKQorICAgICAgICBzaGFkZXJUeXBlID0gU0hBREVSX1RZUEVfVkVSVEVYOwor
ICAgIGVsc2UgaWYgKEdMc2hhZGVyVHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRf
U0hBREVSKQorICAgICAgICBzaGFkZXJUeXBlID0gU0hBREVSX1RZUEVfRlJBR01FTlQ7CisgICAg
ZWxzZQorICAgICAgICByZXR1cm4gIiI7IC8vIEludmFsaWQgc2hhZGVyIHR5cGUuCisKKyAgICBI
YXNoTWFwPFBsYXRmb3JtM0RPYmplY3QsIEdyYXBoaWNzQ29udGV4dDNEOjpTaGFkZXJTb3VyY2VF
bnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fY29udGV4dC0+bV9zaGFkZXJTb3VyY2VNYXAuZmlu
ZChzaGFkZXIpOworCisgICAgaWYgKHJlc3VsdCA9PSBtX2NvbnRleHQtPm1fc2hhZGVyU291cmNl
TWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gIiI7CisKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6
U2hhZGVyU291cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT5zZWNvbmQ7CisKKyAgICBTdHJpbmcg
dHJhbnNsYXRlZFNoYWRlclNvdXJjZTsKKyAgICBTdHJpbmcgc2hhZGVySW5mb0xvZzsKKworICAg
IGJvb2wgaXNWYWxpZCA9IGNvbXBpbGVyLnZhbGlkYXRlU2hhZGVyU291cmNlKGVudHJ5LnNvdXJj
ZS51dGY4KCkuZGF0YSgpLCBzaGFkZXJUeXBlLCB0cmFuc2xhdGVkU2hhZGVyU291cmNlLCBzaGFk
ZXJJbmZvTG9nKTsKKworICAgIGVudHJ5LmxvZyA9IHNoYWRlckluZm9Mb2c7CisgICAgZW50cnku
aXNWYWxpZCA9IGlzVmFsaWQ7CisKKyAgICBpZiAoIWlzVmFsaWQpCisgICAgICAgIHJldHVybiAi
IjsKKworI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCisgICAgLy8gT3VyIGhhcmR3YXJlIHJlYWxs
eSBsaWtlcyBiZWluZyB0b2xkIHdoYXQgcHJlY2lzaW9uIHRvIGhhdmUgKGkuZS4sIHdpdGggInBy
ZWNpc2lvbiAqIGZsb2F0IikKKyAgICAvLyBBTkdMRSBzdHJpcHMgdGhpcyBpbmZvcm1hdGlvbi4K
KyAgICBpZiAoZW50cnkuc291cmNlLmNvbnRhaW5zKCJwcmVjaXNpb24gbG93cCBmbG9hdCIpKQor
ICAgICAgICB0cmFuc2xhdGVkU2hhZGVyU291cmNlPSJwcmVjaXNpb24gbG93cCBmbG9hdDtcbiIr
dHJhbnNsYXRlZFNoYWRlclNvdXJjZTsKKyAgICBlbHNlIGlmIChlbnRyeS5zb3VyY2UuY29udGFp
bnMoInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0IikpCisgICAgICAgIHRyYW5zbGF0ZWRTaGFkZXJT
b3VyY2U9InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuIit0cmFuc2xhdGVkU2hhZGVyU291cmNl
OworICAgIGVsc2UKKyAgICAgICAgdHJhbnNsYXRlZFNoYWRlclNvdXJjZT0icHJlY2lzaW9uIGhp
Z2hwIGZsb2F0O1xuIit0cmFuc2xhdGVkU2hhZGVyU291cmNlOworI2VuZGlmCisgICAgcmV0dXJu
IHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uczNET3BlbkdMQ29t
bW9uOjppbml0aWFsaXplQXZhaWxhYmxlRXh0ZW5zaW9ucygpCit7CisgICAgU3RyaW5nIGV4dGVu
c2lvbnNTdHJpbmcgPSBnZXRFeHRlbnNpb25zKCk7CisgICAgVmVjdG9yPFN0cmluZz4gYXZhaWxh
YmxlRXh0ZW5zaW9uczsKKyAgICBleHRlbnNpb25zU3RyaW5nLnNwbGl0KCIgIiwgYXZhaWxhYmxl
RXh0ZW5zaW9ucyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhdmFpbGFibGVFeHRlbnNp
b25zLnNpemUoKTsgKytpKQorICAgICAgICBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuYWRkKGF2YWls
YWJsZUV4dGVuc2lvbnNbaV0pOworICAgIG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25z
ID0gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KFdFQkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkw
MTgzOWU2ZTNlNGI5NWExZTU2NmNkMTFmOGEyN2Q2OWJlYjM5ZTUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3Bl
bkdMQ29tbW9uLmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRXh0ZW5zaW9uczNE
T3BlbkdMQ29tbW9uX2gKKyNkZWZpbmUgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uX2gKKworI2lu
Y2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIK
KyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2gu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBFeHRlbnNpb25zM0RPcGVuR0xDb21t
b24gOiBwdWJsaWMgRXh0ZW5zaW9uczNEIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5FeHRlbnNp
b25zM0RPcGVuR0xDb21tb24oKTsKKworICAgIC8vIEV4dGVuc2lvbnMzRCBtZXRob2RzLgorICAg
IHZpcnR1YWwgYm9vbCBzdXBwb3J0cyhjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZW5zdXJlRW5hYmxlZChjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNFbmFibGVk
KGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgaW50IGdldEdyYXBoaWNzUmVzZXRTdGF0dXNB
UkIoKTsKKworICAgIHZpcnR1YWwgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVWZXJ0ZXhBcnJheU9F
UygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0z
RE9iamVjdCkgPSAwOworICAgIHZpcnR1YWwgR0MzRGJvb2xlYW4gaXNWZXJ0ZXhBcnJheU9FUyhQ
bGF0Zm9ybTNET2JqZWN0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJpbmRWZXJ0ZXhBcnJheU9F
UyhQbGF0Zm9ybTNET2JqZWN0KSA9IDA7CisKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRUcmFuc2xh
dGVkU2hhZGVyU291cmNlQU5HTEUoUGxhdGZvcm0zRE9iamVjdCk7CisKK3Byb3RlY3RlZDoKKyAg
ICBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24oR3JhcGhpY3NDb250ZXh0M0QqKTsKKworICAgIHZp
cnR1YWwgdm9pZCBpbml0aWFsaXplQXZhaWxhYmxlRXh0ZW5zaW9ucygpOworICAgIHZpcnR1YWwg
Ym9vbCBzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCBT
dHJpbmcgZ2V0RXh0ZW5zaW9ucygpID0gMDsKKworICAgIGJvb2wgbV9pbml0aWFsaXplZEF2YWls
YWJsZUV4dGVuc2lvbnM7CisgICAgSGFzaFNldDxTdHJpbmc+IG1fYXZhaWxhYmxlRXh0ZW5zaW9u
czsKKworICAgIC8vIFdlYWsgcG9pbnRlciBiYWNrIHRvIEdyYXBoaWNzQ29udGV4dDNECisgICAg
R3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbl9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdM
RVMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lv
bnMzRE9wZW5HTEVTLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YzY1MDcxNWVlZTIyM2E5ZDA3NzBjZGQyNjFk
MTQxNTIxYzNmMmE3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmNwcApAQCAtMCwwICsxLDE0OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgRU5BQkxF
KFdFQkdMKQorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTEVTLmgiCisKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgPEVHTC9lZ2wuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitFeHRlbnNpb25zM0RPcGVuR0xF
Uzo6RXh0ZW5zaW9uczNET3BlbkdMRVMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAg
OiBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24oY29udGV4dCkKKyAgICAsIG1fc3VwcG9ydHNPRVN2
ZXJ0ZXhBcnJheU9iamVjdChmYWxzZSkKKyAgICAsIG1fc3VwcG9ydHNJTUdNdWx0aXNhbXBsZWRS
ZW5kZXJUb1RleHR1cmUoZmFsc2UpCisgICAgLCBtX2dsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0
aXNhbXBsZUlNRygwKQorICAgICwgbV9nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlN
RygwKQorICAgICwgbV9nbEJpbmRWZXJ0ZXhBcnJheU9FUygwKQorICAgICwgbV9nbERlbGV0ZVZl
cnRleEFycmF5c09FUygwKQorICAgICwgbV9nbEdlblZlcnRleEFycmF5c09FUygwKQorICAgICwg
bV9nbElzVmVydGV4QXJyYXlPRVMoMCkKK3sKK30KKworRXh0ZW5zaW9uczNET3BlbkdMRVM6On5F
eHRlbnNpb25zM0RPcGVuR0xFUygpCit7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uczNET3BlbkdMRVM6
OmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcodW5zaWduZWQgbG9uZyB0YXJnZXQs
IHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIHVuc2ln
bmVkIGludCB0ZXh0dXJlLCBpbnQgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcykKK3sKKyAg
ICBpZiAobV9nbEZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcpCisgICAgICAgIG1f
Z2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HKHRhcmdldCwgYXR0YWNobWVudCwg
dGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCwgc2FtcGxlcyk7CisgICAgZWxzZQorICAgICAgICBt
X2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKK30KKwor
dm9pZCBFeHRlbnNpb25zM0RPcGVuR0xFUzo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxl
SU1HKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHNhbXBsZXMsIHVuc2lnbmVk
IGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcg
aGVpZ2h0KQoreworICAgIGlmIChtX2dsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1H
KQorICAgICAgICBtX2dsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HKHRhcmdldCwg
c2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgIGVsc2UKKyAgICAg
ICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cit9
CisKK1BsYXRmb3JtM0RPYmplY3QgRXh0ZW5zaW9uczNET3BlbkdMRVM6OmNyZWF0ZVZlcnRleEFy
cmF5T0VTKCkKK3sKKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
IChtX2dsR2VuVmVydGV4QXJyYXlzT0VTKSB7CisgICAgICAgIEdMdWludCBhcnJheSA9IDA7Cisg
ICAgICAgIG1fZ2xHZW5WZXJ0ZXhBcnJheXNPRVMoMSwgJmFycmF5KTsKKyAgICAgICAgcmV0dXJu
IGFycmF5OworICAgIH0KKworICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgIHJldHVybiAwOworfQorCit2b2lkIEV4dGVuc2lvbnMzRE9w
ZW5HTEVTOjpkZWxldGVWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQorewor
ICAgIGlmICghYXJyYXkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgaWYgKG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMpCisgICAg
ICAgIG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMoMSwgJmFycmF5KTsKKyAgICBlbHNlCisgICAg
ICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
fQorCitHQzNEYm9vbGVhbiBFeHRlbnNpb25zM0RPcGVuR0xFUzo6aXNWZXJ0ZXhBcnJheU9FUyhQ
bGF0Zm9ybTNET2JqZWN0IGFycmF5KQoreworICAgIGlmICghYXJyYXkpCisgICAgICAgIHJldHVy
biBHTF9GQUxTRTsKKworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKG1fZ2xJc1ZlcnRleEFycmF5T0VTKQorICAgICAgICByZXR1cm4gbV9nbElzVmVydGV4QXJy
YXlPRVMoYXJyYXkpOworCisgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEV4dGVuc2lvbnMz
RE9wZW5HTEVTOjpiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKK3sK
KyAgICBpZiAoIWFycmF5KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmIChtX2dsQmluZFZlcnRleEFycmF5T0VTKQorICAgICAg
ICBtX2dsQmluZFZlcnRleEFycmF5T0VTKGFycmF5KTsKKyAgICBlbHNlCisgICAgICAgIG1fY29u
dGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworfQorCisKK2Jv
b2wgRXh0ZW5zaW9uczNET3BlbkdMRVM6OnN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYg
bmFtZSkKK3sKKyAgICBpZiAobV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKG5hbWUpKSB7
CisgICAgICAgIGlmIChuYW1lID09ICJHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdCIgJiYgIW1f
c3VwcG9ydHNPRVN2ZXJ0ZXhBcnJheU9iamVjdCkgeworICAgICAgICAgICAgbV9nbEJpbmRWZXJ0
ZXhBcnJheU9FUyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xCSU5EVkVSVEVYQVJSQVlPRVNQUk9D
PihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xCaW5kVmVydGV4QXJyYXlPRVMiKSk7CisgICAgICAgICAg
ICBtX2dsR2VuVmVydGV4QXJyYXlzT0VTID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTEdFTlZFUlRF
WEFSUkFZU09FU1BST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbEdlblZlcnRleEFycmF5c09FUyIp
KTsKKyAgICAgICAgICAgIG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMgPSByZWludGVycHJldF9j
YXN0PFBGTkdMREVMRVRFVkVSVEVYQVJSQVlTT0VTUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImds
RGVsZXRlVmVydGV4QXJyYXlzT0VTIikpOworICAgICAgICAgICAgbV9nbElzVmVydGV4QXJyYXlP
RVMgPSByZWludGVycHJldF9jYXN0PFBGTkdMSVNWRVJURVhBUlJBWU9FU1BST0M+KGVnbEdldFBy
b2NBZGRyZXNzKCJnbElzVmVydGV4QXJyYXlPRVMiKSk7CisgICAgICAgICAgICBtX3N1cHBvcnRz
T0VTdmVydGV4QXJyYXlPYmplY3QgPSB0cnVlOworICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0g
IkdMX0lNR19tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiICYmICFtX3N1cHBvcnRzSU1H
TXVsdGlzYW1wbGVkUmVuZGVyVG9UZXh0dXJlKSB7CisgICAgICAgICAgICBtX2dsRnJhbWVidWZm
ZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xGUkFNRUJV
RkZFUlRFWFRVUkUyRE1VTFRJU0FNUExFSU1HUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsRnJh
bWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRyIpKTsKKyAgICAgICAgICAgIG1fZ2xSZW5k
ZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUcgPSByZWludGVycHJldF9jYXN0PFBGTkdMUkVO
REVSQlVGRkVSU1RPUkFHRU1VTFRJU0FNUExFSU1HUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImds
UmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HIikpOworICAgICAgICAgICAgbV9zdXBw
b3J0c0lNR011bHRpc2FtcGxlZFJlbmRlclRvVGV4dHVyZSA9IHRydWU7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitTdHJp
bmcgRXh0ZW5zaW9uczNET3BlbkdMRVM6OmdldEV4dGVuc2lvbnMoKQoreworICAgIHJldHVybiBT
dHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhHTF9FWFRF
TlNJT05TKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkwMjIyY2E0
ZDdhOTRhMDhjMmY5NzU2MTRiZjJiYzYwZTAwMWUwOTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMu
aApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBFeHRlbnNpb25zM0RPcGVuR0xFU19o
CisjZGVmaW5lIEV4dGVuc2lvbnMzRE9wZW5HTEVTX2gKKworI2luY2x1ZGUgIkV4dGVuc2lvbnMz
RE9wZW5HTENvbW1vbi5oIgorCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjaW5jbHVkZSA8R0xF
UzIvZ2wyZXh0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRXh0ZW5zaW9uczNE
T3BlbkdMRVMgOiBwdWJsaWMgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uIHsKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIH5FeHRlbnNpb25zM0RPcGVuR0xFUygpOworCisgICAgdmlydHVhbCB2b2lkIGZy
YW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVu
c2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIHVuc2lnbmVk
IGludCB0ZXh0dXJlLCBpbnQgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcyk7CisgICAgdmly
dHVhbCB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRyh1bnNpZ25lZCBsb25n
IHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9y
bWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7CisKKyAgICB2
aXJ0dWFsIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlVmVydGV4QXJyYXlPRVMoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCk7CisgICAgdmly
dHVhbCBHQzNEYm9vbGVhbiBpc1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpOworICAg
IHZpcnR1YWwgdm9pZCBiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCk7CisKK3By
b3RlY3RlZDoKKyAgICAvLyBUaGlzIGNsYXNzIG9ubHkgbmVlZHMgdG8gYmUgaW5zdGFudGlhdGVk
IGJ5IEdyYXBoaWNzQ29udGV4dDNEIGltcGxlbWVudGF0aW9ucy4KKyAgICBmcmllbmQgY2xhc3Mg
R3JhcGhpY3NDb250ZXh0M0Q7CisgICAgRXh0ZW5zaW9uczNET3BlbkdMRVMoR3JhcGhpY3NDb250
ZXh0M0QqKTsKKworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBTdHJp
bmcmKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRFeHRlbnNpb25zKCk7CisKKyAgICBib29sIG1f
c3VwcG9ydHNPRVN2ZXJ0ZXhBcnJheU9iamVjdDsKKyAgICBib29sIG1fc3VwcG9ydHNJTUdNdWx0
aXNhbXBsZWRSZW5kZXJUb1RleHR1cmU7CisKKyAgICBQRk5HTEZSQU1FQlVGRkVSVEVYVFVSRTJE
TVVMVElTQU1QTEVJTUdQUk9DIG1fZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1H
OworICAgIFBGTkdMUkVOREVSQlVGRkVSU1RPUkFHRU1VTFRJU0FNUExFSU1HUFJPQyBtX2dsUmVu
ZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HOworICAgIFBGTkdMQklORFZFUlRFWEFSUkFZ
T0VTUFJPQyBtX2dsQmluZFZlcnRleEFycmF5T0VTOworICAgIFBGTkdMREVMRVRFVkVSVEVYQVJS
QVlTT0VTUFJPQyBtX2dsRGVsZXRlVmVydGV4QXJyYXlzT0VTOworICAgIFBGTkdMR0VOVkVSVEVY
QVJSQVlTT0VTUFJPQyBtX2dsR2VuVmVydGV4QXJyYXlzT0VTOworICAgIFBGTkdMSVNWRVJURVhB
UlJBWU9FU1BST0MgbV9nbElzVmVydGV4QXJyYXlPRVM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFeHRlbnNpb25zM0RPcGVuR0xFU19oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RP
cGVuR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBo
aWNzQ29udGV4dDNET3BlbkdMLmNwcAppbmRleCAzZjQ3YjZlMjFlYjI1NTI0M2VlZWE0YmYzMTk4
NTNhYmJmNzZhMmRjLi41ZjAwNTA1OTljNmFiNmI0MTMyMDMyNTgwYTU0MGEzYzI2ZTcyOWI1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0M0RPcGVuR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKQEAgLTM0LDYgKzM0LDExIEBA
CiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAKKyNp
bmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8Y3N0cmluZz4KKyNpbmNsdWRlIDx3dGYvVW51
c2VkUGFyYW0uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKICNpZiBQTEFURk9S
TShNQUMpCiAjaW5jbHVkZSA8T3BlbkdML2dsLmg+CiAjZWxpZiBQTEFURk9STShHVEspIHx8IFBM
QVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oUVQpCkBAIC00Nyw2ICs1MiwzMiBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzQW5kQ29udmVydFRvQkdSQUlmTmVjZXNzYXJ5KGludCB4
LCBpbnQgeSwgaW50CiAgICAgOjpnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgR0xf
QkdSQSwgR0xfVU5TSUdORURfSU5UXzhfOF84XzhfUkVWLCBwaXhlbHMpOwogfQogCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZUF0dHJpYnV0ZXMoKQoreworICAgIEV4dGVuc2lvbnMz
RCogZXh0ZW5zaW9ucyA9IGdldEV4dGVuc2lvbnMoKTsKKyAgICBpZiAobV9hdHRycy5zdGVuY2ls
KSB7CisgICAgICAgIGNvbnN0IGNoYXIqIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbiA9IGlz
R0xFUzJDb21wbGlhbnQoKSA/ICJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiIDogIkdMX0VY
VF9wYWNrZWRfZGVwdGhfc3RlbmNpbCI7CisgICAgICAgIGlmIChleHRlbnNpb25zLT5zdXBwb3J0
cyhwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pKSB7CisgICAgICAgICAgICBleHRlbnNpb25z
LT5lbnN1cmVFbmFibGVkKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbik7CisgICAgICAgICAg
ICAvLyBGb3JjZSBkZXB0aCBpZiBzdGVuY2lsIGlzIHRydWUuCisgICAgICAgICAgICBtX2F0dHJz
LmRlcHRoID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2F0dHJzLnN0ZW5j
aWwgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAg
IGJvb2wgaXNWYWxpZFZlbmRvciA9IHRydWU7CisgICAgICAgIC8vIEN1cnJlbnRseSBpbiBNYWMg
d2Ugb25seSB0dXJuIG9uIGFudGlhbGlhcyBpZiB2ZW5kb3IgaXMgTlZJRElBLAorICAgICAgICAv
LyBvciBpZiBBVEkgYW5kIG9uIDEwLjcuMiBhbmQgYWJvdmUuCisgICAgICAgIGNvbnN0IGNoYXIq
IHZlbmRvciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KDo6Z2xHZXRTdHJpbmcoR0xf
VkVORE9SKSk7CisgICAgICAgIGlmICghdmVuZG9yIHx8ICghc3RkOjpzdHJzdHIodmVuZG9yLCAi
TlZJRElBIikgJiYgIShzdGQ6OnN0cnN0cih2ZW5kb3IsICJBVEkiKSAmJiBzeXN0ZW1BbGxvd3NN
dWx0aXNhbXBsaW5nT25BVElDYXJkcygpKSkpCisgICAgICAgICAgICBpc1ZhbGlkVmVuZG9yID0g
ZmFsc2U7CisgICAgICAgIGlmICghaXNWYWxpZFZlbmRvciB8fCAhZXh0ZW5zaW9ucy0+c3VwcG9y
dHMoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIikgfHwgaXNHTEVTMkNvbXBsaWFu
dCgpKQorICAgICAgICAgICAgbV9hdHRycy5hbnRpYWxpYXMgPSBmYWxzZTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVfZnJhbWVi
dWZmZXJfbXVsdGlzYW1wbGUiKTsKKyAgICB9Cit9CisKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6
OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAgICAgY29uc3QgaW50IHdpZHRo
ID0gc2l6ZS53aWR0aCgpOwpAQCAtMTUxLDYgKzE4Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoY29uc3QgSW50UmVjdCYgcmVjdCkK
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0KQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCiAgICAgc3dpdGNoIChpbnRl
cm5hbGZvcm1hdCkgewogICAgIGNhc2UgREVQVEhfU1RFTkNJTDoKICAgICAgICAgaW50ZXJuYWxm
b3JtYXQgPSBHTF9ERVBUSDI0X1NURU5DSUw4X0VYVDsKQEAgLTIzMiw2ICsyNjQsNyBAQCBib29s
IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBs
ZXZlbCwgR0MzRGVudW0gaW50ZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworCiAgICAgR0MzRGVudW0gb3BlbkdMSW50ZXJuYWxGb3JtYXQg
PSBpbnRlcm5hbGZvcm1hdDsKICAgICBpZiAodHlwZSA9PSBHTF9GTE9BVCkgewogICAgICAgICBp
ZiAoZm9ybWF0ID09IEdMX1JHQkEpCkBAIC0yNDEsNiArMjc0LDcgQEAgYm9vbCBHcmFwaGljc0Nv
bnRleHQzRDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rl
bnVtIGludGUKICAgICB9CiAKICAgICA6OmdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBvcGVu
R0xJbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBp
eGVscyk7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjU2LDYgKzI5MCwzMyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRlcHRoKEdDM0RjbGFtcGYgZGVwdGgpCiAgICAgOjpn
bENsZWFyRGVwdGgoZGVwdGgpOwogfQogCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpzeXN0ZW1B
bGxvd3NNdWx0aXNhbXBsaW5nT25BVElDYXJkcygpCit7CisjaWYgUExBVEZPUk0oTUFDKQorI2lm
ICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdf
T05fTElPTikKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKKyAgICBzdGF0aWMgU0ludDMyIHZlcnNpb247CisgICAgaWYgKCF2ZXJzaW9uKSB7Cisg
ICAgICAgIGlmIChHZXN0YWx0KGdlc3RhbHRTeXN0ZW1WZXJzaW9uLCAmdmVyc2lvbikgIT0gbm9F
cnIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIC8vIFNlZSBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc5MjIgZm9yIG1vcmUgZGV0YWlscwor
ICAgIHJldHVybiB2ZXJzaW9uID49IDB4MTA3MjsKKyNlbmRpZiAvLyBTTk9XX0xFT1BBUkQgYW5k
IExJT04KKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykK
K30KKworRXh0ZW5zaW9uczNEKiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXh0ZW5zaW9ucygpCit7
CisgICAgaWYgKCFtX2V4dGVuc2lvbnMpCisgICAgICAgIG1fZXh0ZW5zaW9ucyA9IGFkb3B0UHRy
KG5ldyBFeHRlbnNpb25zM0RPcGVuR0wodGhpcykpOworICAgIHJldHVybiBtX2V4dGVuc2lvbnMu
Z2V0KCk7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9w
ZW5HTENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCmluZGV4IDQyOWZjNTFjOTA0NmM0NGE1
MGVmZWNlMTI5Y2JmMzFmNjBkOTk3NWUuLjc2MmUzOWYwOWRhYTk2ZjVjMGRhNzM0ODQwOTQxODQ1
YWRlYTliZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9u
LmNwcApAQCAtMzAsNyArMzAsMTIgQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgi
CiAKKyNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCisjaWYgVVNFKE9QRU5HTF9F
U18yKQorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTEVTLmgiCisjZWxzZQogI2luY2x1ZGUg
IkV4dGVuc2lvbnMzRE9wZW5HTC5oIgorI2VuZGlmCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJJbWFnZURhdGEuaCIKQEAg
LTQ5LDM5ICs1NCwyNCBAQAogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBVU0UoT1BFTkdM
X0VTXzIpCisjaW5jbHVkZSAiT3BlbkdMRVNTaGltcy5oIgorI2VsaWYgUExBVEZPUk0oTUFDKQog
I2luY2x1ZGUgPE9wZW5HTC9nbC5oPgogI2VsaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShF
RkwpIHx8IFBMQVRGT1JNKFFUKQogI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCiAjZW5kaWYKIAot
bmFtZXNwYWNlIFdlYkNvcmUgeworI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCisjaW5jbHVkZSA8
QmxhY2tCZXJyeVBsYXRmb3JtTG9nLmg+CisjZW5kaWYKIAotc3RhdGljIGJvb2wgc3lzdGVtQWxs
b3dzTXVsdGlzYW1wbGluZ09uQVRJQ2FyZHMoKQotewotI2lmIFBMQVRGT1JNKE1BQykKLSNpZiAh
ZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09O
X0xJT04pCi0gICAgcmV0dXJuIHRydWU7Ci0jZWxzZQotICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7Ci0gICAgc3RhdGljIFNJbnQzMiB2ZXJzaW9uOwotICAgIGlmICghdmVyc2lvbikgewotICAg
ICAgICBpZiAoR2VzdGFsdChnZXN0YWx0U3lzdGVtVmVyc2lvbiwgJnZlcnNpb24pICE9IG5vRXJy
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAvLyBTZWUgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3OTIyIGZvciBtb3JlIGRldGFpbHMKLSAg
ICByZXR1cm4gdmVyc2lvbiA+PSAweDEwNzI7Ci0jZW5kaWYgLy8gU05PV19MRU9QQVJEIGFuZCBM
SU9OCi0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZiAvLyBQTEFURk9STShNQUMpCi19
CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRl
QXR0cmlidXRlcygpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZURlcHRoU3RlbmNp
bChjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pCiB7CiAgICAgRXh0ZW5z
aW9uczNEKiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOwogICAgIGlmIChtX2F0dHJzLnN0
ZW5jaWwpIHsKLSAgICAgICAgY29uc3QgY2hhciogcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9u
ID0gaXNHTEVTMkNvbXBsaWFudCgpID8gIkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCIgOiAi
R0xfRVhUX3BhY2tlZF9kZXB0aF9zdGVuY2lsIjsKICAgICAgICAgaWYgKGV4dGVuc2lvbnMtPnN1
cHBvcnRzKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbikpIHsKICAgICAgICAgICAgIGV4dGVu
c2lvbnMtPmVuc3VyZUVuYWJsZWQocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKTsKICAgICAg
ICAgICAgIC8vIEZvcmNlIGRlcHRoIGlmIHN0ZW5jaWwgaXMgdHJ1ZS4KQEAgLTQzOSwzNiArNDI5
LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm0zRE9i
amVjdCBzaGFkZXIpCiAgICAgQVNTRVJUKHNoYWRlcik7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CiAKLSAgICBpbnQgR0xzaGFkZXJUeXBlOwotICAgIEFOR0xFU2hhZGVyVHlwZSBzaGFkZXJU
eXBlOwotCi0gICAgZ2xHZXRTaGFkZXJpdihzaGFkZXIsIFNIQURFUl9UWVBFLCAmR0xzaGFkZXJU
eXBlKTsKLSAgICAKLSAgICBpZiAoR0xzaGFkZXJUeXBlID09IFZFUlRFWF9TSEFERVIpCi0gICAg
ICAgIHNoYWRlclR5cGUgPSBTSEFERVJfVFlQRV9WRVJURVg7Ci0gICAgZWxzZSBpZiAoR0xzaGFk
ZXJUeXBlID09IEZSQUdNRU5UX1NIQURFUikKLSAgICAgICAgc2hhZGVyVHlwZSA9IFNIQURFUl9U
WVBFX0ZSQUdNRU5UOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuOyAvLyBJbnZhbGlkIHNoYWRl
ciB0eXBlLgotCi0gICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRy
eT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAg
ICBTdHJpbmcgdHJhbnNsYXRlZFNoYWRlclNvdXJjZSA9IG1fZXh0ZW5zaW9ucy0+Z2V0VHJhbnNs
YXRlZFNoYWRlclNvdXJjZUFOR0xFKHNoYWRlcik7CiAKLSAgICBpZiAocmVzdWx0ID09IG1fc2hh
ZGVyU291cmNlTWFwLmVuZCgpKQorICAgIGlmICghdHJhbnNsYXRlZFNoYWRlclNvdXJjZS5sZW5n
dGgoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU2hhZGVyU291cmNlRW50cnkmIGVudHJ5ID0g
cmVzdWx0LT5zZWNvbmQ7Ci0KLSAgICBTdHJpbmcgdHJhbnNsYXRlZFNoYWRlclNvdXJjZTsKLSAg
ICBTdHJpbmcgc2hhZGVySW5mb0xvZzsKLQotICAgIGJvb2wgaXNWYWxpZCA9IG1fY29tcGlsZXIu
dmFsaWRhdGVTaGFkZXJTb3VyY2UoZW50cnkuc291cmNlLnV0ZjgoKS5kYXRhKCksIHNoYWRlclR5
cGUsIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UsIHNoYWRlckluZm9Mb2cpOwotCi0gICAgZW50cnku
bG9nID0gc2hhZGVySW5mb0xvZzsKLSAgICBlbnRyeS5pc1ZhbGlkID0gaXNWYWxpZDsKLQotICAg
IGlmICghaXNWYWxpZCkKLSAgICAgICAgcmV0dXJuOyAvLyBTaGFkZXIgZGlkbid0IHZhbGlkYXRl
LCBkb24ndCBtb3ZlIGZvcndhcmQgd2l0aCBjb21waWxpbmcgdHJhbnNsYXRlZCBzb3VyY2UuCi0K
ICAgICBpbnQgdHJhbnNsYXRlZFNoYWRlckxlbmd0aCA9IHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2Uu
bGVuZ3RoKCk7CiAKICAgICBjb25zdCBDU3RyaW5nJiB0cmFuc2xhdGVkU2hhZGVyQ1N0cmluZyA9
IHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UudXRmOCgpOwpAQCAtODAxLDE4ICs3NjYsNjEgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2kKICAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKICAgICAgICAgOjpnbEZsdXNoKCk7
CiAgICAgfQorICAgIC8vIEN1cnJlbnRseSBvbmx5IGZvcm1hdD1SR0JBLCB0eXBlPVVOU0lHTkVE
X0JZVEUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBzcGVjaWZpY2F0aW9uOiBodHRwOi8vd3d3Lmtocm9u
b3Mub3JnL3JlZ2lzdHJ5L3dlYmdsL3NwZWNzL2xhdGVzdC8KKyAgICAvLyBJZiB0aGlzIGV2ZXIg
Y2hhbmdlcywgdGhpcyBjb2RlIHdpbGwgbmVlZCB0byBiZSB1cGRhdGVkLgorCisgICAgLy8gQ2Fs
Y3VsYXRlIHRoZSBzdHJpZGVzIG9mIG91ciBkYXRhIGFuZCBjYW52YXMKKyAgICB1bnNpZ25lZCBp
bnQgZm9ybWF0U2l6ZSA9IDQ7IC8vIFJHQkEgVU5TSUdORURfQllURQorICAgIHVuc2lnbmVkIGlu
dCBkYXRhU3RyaWRlID0gd2lkdGggKiBmb3JtYXRTaXplOworICAgIHVuc2lnbmVkIGludCBjYW52
YXNTdHJpZGUgPSBtX2N1cnJlbnRXaWR0aCAqIGZvcm1hdFNpemU7CisKKyAgICAvLyBJZiB3ZSBh
cmUgdXNpbmcgYSBwYWNrIGFsaWdubWVudCBvZiA4LCB0aGVuIHdlIG5lZWQgdG8gYWxpZ24gb3Vy
IHN0cmlkZXMgdG8gOCBieXRlIGJvdW5kYXJpZXMKKyAgICAvLyBTZWU6IGh0dHA6Ly9lbi53aWtp
cGVkaWEub3JnL3dpa2kvRGF0YV9zdHJ1Y3R1cmVfYWxpZ25tZW50IChjb21wdXRpbmcgcGFkZGlu
ZykKKyAgICBpbnQgcGFja0FsaWdubWVudDsKKyAgICBnbEdldEludGVnZXJ2KEdMX1BBQ0tfQUxJ
R05NRU5ULCAmcGFja0FsaWdubWVudCk7CisgICAgaWYgKDggPT0gcGFja0FsaWdubWVudCkgewor
ICAgICAgICBkYXRhU3RyaWRlID0gKGRhdGFTdHJpZGUgKyA3KSAmIH43OworICAgICAgICBjYW52
YXNTdHJpZGUgPSAoY2FudmFzU3RyaWRlICsgNykgJiB+NzsKKyAgICB9CisKKyAgICB1bnNpZ25l
ZCBjaGFyKiBjYW52YXNEYXRhID0gbmV3IHVuc2lnbmVkIGNoYXJbY2FudmFzU3RyaWRlICogbV9j
dXJyZW50SGVpZ2h0XTsKKyAgICA6OmdsUmVhZFBpeGVscygwLCAwLCBtX2N1cnJlbnRXaWR0aCwg
bV9jdXJyZW50SGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNhbnZhc0RhdGEpOworCisgICAgLy8gSWYg
d2UgZmFpbGVkIHRvIHJlYWQgb3VyIGNhbnZhcyBkYXRhIGR1ZSB0byBhIEdMIGVycm9yLCBkb24n
dCBjb250aW51ZQorICAgIGludCBlcnJvciA9IGdsR2V0RXJyb3IoKTsKKyAgICBpZiAoR0xfTk9f
RVJST1IgIT0gZXJyb3IpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gQ2xlYXIgb3VyIGRhdGEgaW4gY2FzZSBzb21l
IG9mIGl0IGxpZXMgb3V0c2lkZSB0aGUgYm91bmRzIG9mIG91ciBjYW52YXMKKyAgICAvLyBUT0RP
OiBkb24ndCBkbyB0aGlzIGlmIGFsbCBvZiB0aGUgZGF0YSBsaWVzIGluc2lkZSB0aGUgYm91bmRz
IG9mIHRoZSBjYW52YXMKKyAgICBtZW1zZXQoZGF0YSwgMCwgZGF0YVN0cmlkZSAqIGhlaWdodCk7
CisKKyAgICAvLyBDYWxjdWxhdGUgdGhlIGludGVyc2VjdGlvbiBvZiBvdXIgY2FudmFzIGFuZCBk
YXRhIGJvdW5kcworICAgIEludFJlY3QgZGF0YVJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7Cisg
ICAgSW50UmVjdCBjYW52YXNSZWN0KDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWln
aHQpOworICAgIEludFJlY3Qgbm9uWmVyb0RhdGFSZWN0ID0gaW50ZXJzZWN0aW9uKGRhdGFSZWN0
LCBjYW52YXNSZWN0KTsKKworICAgIHVuc2lnbmVkIGludCB4RGF0YU9mZnNldCA9IHggPCAwID8g
LXggKiBmb3JtYXRTaXplIDogMDsKKyAgICB1bnNpZ25lZCBpbnQgeURhdGFPZmZzZXQgPSB5IDwg
MCA/IC15ICogZGF0YVN0cmlkZSA6IDA7CisgICAgdW5zaWduZWQgaW50IHhDYW52YXNPZmZzZXQg
PSBub25aZXJvRGF0YVJlY3QueCgpICogZm9ybWF0U2l6ZTsKKyAgICB1bnNpZ25lZCBpbnQgeUNh
bnZhc09mZnNldCA9IG5vblplcm9EYXRhUmVjdC55KCkgKiBjYW52YXNTdHJpZGU7CisgICAgdW5z
aWduZWQgY2hhciogZHN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRhdGEpICsgeERh
dGFPZmZzZXQgKyB5RGF0YU9mZnNldDsKKyAgICB1bnNpZ25lZCBjaGFyKiBzcmMgPSBjYW52YXNE
YXRhICsgeENhbnZhc09mZnNldCArIHlDYW52YXNPZmZzZXQ7CisgICAgZm9yIChpbnQgcm93ID0g
MDsgcm93IDwgbm9uWmVyb0RhdGFSZWN0LmhlaWdodCgpOyByb3crKykgeworICAgICAgICBtZW1j
cHkoZHN0LCBzcmMsIG5vblplcm9EYXRhUmVjdC53aWR0aCgpICogZm9ybWF0U2l6ZSk7CisgICAg
ICAgIGRzdCArPSBkYXRhU3RyaWRlOworICAgICAgICBzcmMgKz0gY2FudmFzU3RyaWRlOworICAg
IH0KKworICAgIGRlbGV0ZSBbXSBjYW52YXNEYXRhOwogICAgIDo6Z2xSZWFkUGl4ZWxzKHgsIHks
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7CisKICAgICBpZiAobV9hdHRycy5h
bnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQogICAgICAgICA6Omds
QmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0
aXNhbXBsZUZCTyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJD
b21waWxlcigpCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgaXMgbm90IGltcGxlbWVudGVkIG9uIGRl
c2t0b3AgT3BlbkdMLiBXZSBuZWVkIHRvIGhhdmUgaWZkZWZzIGZvciB0aGUgZGlmZmVyZW50IEdM
IHZhcmlhbnRzLgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNhbXBsZUNvdmVyYWdlKEdDM0RjbGFt
cGYgdmFsdWUsIEdDM0Rib29sZWFuIGludmVydCkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKQEAgLTEzODYsMTMgKzEzOTQsNiBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpsYXllckNv
bXBvc2l0ZWQoKSBjb25zdAogICAgIHJldHVybiBtX2xheWVyQ29tcG9zaXRlZDsKIH0KIAotRXh0
ZW5zaW9uczNEKiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXh0ZW5zaW9ucygpCi17Ci0gICAgaWYg
KCFtX2V4dGVuc2lvbnMpCi0gICAgICAgIG1fZXh0ZW5zaW9ucyA9IGFkb3B0UHRyKG5ldyBFeHRl
bnNpb25zM0RPcGVuR0wodGhpcykpOwotICAgIHJldHVybiBtX2V4dGVuc2lvbnMuZ2V0KCk7Ci19
Ci0KIH0KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHQzRE9wZW5HTEVTLmNwcAppbmRleCBiMWJkMWRjNTZjYTZmZDkyODNkYjJkYWUxMjM4M2NlMjJm
Yzk0MzAyLi4zYjQ0YTI0NmVmMTMwNGMwNDkxNmE4YzEzNTkwNDYxY2VhM2YyODQwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0M0RPcGVuR0xFUy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCkBAIC0yOSw5MyArMjksMjkgQEAK
ICNpZiBFTkFCTEUoV0VCR0wpCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotCi0j
aW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMLmgiCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3Bl
bkdMRVMuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2lu
Y2x1ZGUgIkxheWVyV2ViS2l0VGhyZWFkLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
LQotI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpCi0jaW5jbHVkZSAiT3BlbkdMU2hp
bXMuaCIKLSNlbmRpZgorI2luY2x1ZGUgIk9wZW5HTEVTU2hpbXMuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzQW5kQ29udmVydFRv
QkdSQUlmTmVjZXNzYXJ5KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1bnNp
Z25lZCBjaGFyKiBwaXhlbHMpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVy
Q29tcGlsZXIoKQogewotICAgIGNvbnN0IGludCB0b3RhbEJ5dGVzID0gbV9jdXJyZW50V2lkdGgg
KiBtX2N1cnJlbnRIZWlnaHQgKiA0OwotICAgIDo6Z2xSZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBo
ZWlnaHQsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscyk7Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQpCi0gICAgICAgIHN0ZDo6c3dhcChwaXhlbHNb
aV0sIHBpeGVsc1tpICsgMl0pOyAvLyBDb252ZXJ0IHRvIEJHUkEuCisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgOjpnbFJlbGVhc2VTaGFkZXJDb21waWxlcigpOwogfQogCi1ib29sIEdy
YXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlRkJPcyhjb25zdCBJbnRTaXplJiBzaXplKQordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVsc0FuZENvbnZlcnRUb0JHUkFJZk5lY2Vzc2FyeShp
bnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgdW5zaWduZWQgY2hhciogcGl4ZWxz
KQogewotICAgIGNvbnN0IGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsKLSAgICBjb25zdCBpbnQg
aGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsKLSAgICBHTHVpbnQgY29sb3JGb3JtYXQgPSAwLCBwaXhl
bERhdGFUeXBlID0gMDsKLSAgICBpZiAobV9hdHRycy5hbHBoYSkgewotICAgICAgICBtX2ludGVy
bmFsQ29sb3JGb3JtYXQgPSBHTF9SR0JBOwotICAgICAgICBjb2xvckZvcm1hdCA9IEdMX1JHQkE7
Ci0gICAgICAgIHBpeGVsRGF0YVR5cGUgPSBHTF9VTlNJR05FRF9CWVRFOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIG1faW50ZXJuYWxDb2xvckZvcm1hdCA9IEdMX1JHQjsKLSAgICAgICAgY29sb3JG
b3JtYXQgPSBHTF9SR0I7Ci0gICAgICAgIHBpeGVsRGF0YVR5cGUgPSBHTF9VTlNJR05FRF9TSE9S
VF81XzZfNTsKLSAgICB9Ci0KLSAgICAvLyBXZSBkb24ndCBhbGxvdyB0aGUgbG9naWMgd2hlcmUg
c3RlbmNpbCBpcyByZXF1aXJlZCBhbmQgZGVwdGggaXMgbm90LgotICAgIC8vIFNlZSBHcmFwaGlj
c0NvbnRleHQzRDo6dmFsaWRhdGVBdHRyaWJ1dGVzLgotICAgIGJvb2wgc3VwcG9ydFBhY2tlZERl
cHRoU3RlbmNpbEJ1ZmZlciA9IChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkgJiYg
Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7
Ci0KLSAgICAvLyBSZXNpemUgcmVndWxhciBGQk8uCi0gICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9
IGZhbHNlOwotICAgIGlmIChtX2JvdW5kRkJPICE9IG1fZmJvKSB7Ci0gICAgICAgIG11c3RSZXN0
b3JlRkJPID0gdHJ1ZTsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICB9Ci0KLSAgICA6OmdsQmluZFRleHR1
cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKLSAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhU
VVJFXzJELCAwLCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGNvbG9y
Rm9ybWF0LCBwaXhlbERhdGFUeXBlLCAwKTsKLSAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkRF
WFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09M
T1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSwgMCk7Ci0KLSAgICA6Omds
QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0gICAgOjpn
bFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgbV9pbnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0
aCwgaGVpZ2h0LCAwLCBjb2xvckZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgMCk7Ci0gICAgOjpn
bEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOwotCi0gICAgLy8gV2UgZG9uJ3Qgc3VwcG9y
dCBhbnRpYWxpYXNpbmcgeWV0LiBTZWUgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0cmli
dXRlcy4KLSAgICBBU1NFUlQoIW1fYXR0cnMuYW50aWFsaWFzKTsKLQotICAgIGlmIChtX2F0dHJz
LnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkgewotICAgICAgICAvLyBVc2UgYSAyNCBiaXQgZGVw
dGggYnVmZmVyIHdoZXJlIHdlIGtub3cgd2UgaGF2ZSBpdC4KLSAgICAgICAgaWYgKHN1cHBvcnRQ
YWNrZWREZXB0aFN0ZW5jaWxCdWZmZXIpIHsKLSAgICAgICAgICAgIDo6Z2xCaW5kVGV4dHVyZShH
TF9URVhUVVJFXzJELCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgICAgICA6OmdsVGV4
SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJ
TCwgd2lkdGgsIGhlaWdodCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUwsIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfMjRfOCwgMCk7Ci0gICAgICAgICAgICBpZiAo
bV9hdHRycy5zdGVuY2lsKQotICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUy
RChHTF9GUkFNRUJVRkZFUiwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5ULCBHTF9URVhUVVJFXzJELCBt
X2RlcHRoU3RlbmNpbEJ1ZmZlciwgMCk7Ci0gICAgICAgICAgICBpZiAobV9hdHRycy5kZXB0aCkK
LSAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIs
IEdMX0RFUFRIX0FUVEFDSE1FTlQsIEdMX1RFWFRVUkVfMkQsIG1fZGVwdGhTdGVuY2lsQnVmZmVy
LCAwKTsKLSAgICAgICAgICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpIHsKLSAgICAg
ICAgICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6UkVO
REVSQlVGRkVSLCBtX3N0ZW5jaWxCdWZmZXIpOwotICAgICAgICAgICAgICAgIDo6Z2xSZW5kZXJi
dWZmZXJTdG9yYWdlRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIEdMX1NURU5D
SUxfSU5ERVg4LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZm
ZXJSZW5kZXJidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGlj
c0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVS
QlVGRkVSLCBtX3N0ZW5jaWxCdWZmZXIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KG1fYXR0cnMuZGVwdGgpIHsKLSAgICAgICAgICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVY
VChHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX2RlcHRoQnVmZmVyKTsKLSAgICAg
ICAgICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZUVYVChHcmFwaGljc0NvbnRleHQzRDo6
UkVOREVSQlVGRkVSLCBHTF9ERVBUSF9DT01QT05FTlQxNiwgd2lkdGgsIGhlaWdodCk7Ci0gICAg
ICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQsIEdy
YXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fZGVwdGhCdWZmZXIpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0
M0Q6OlJFTkRFUkJVRkZFUiwgMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGdsQ2hlY2tG
cmFtZWJ1ZmZlclN0YXR1c0VYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpICE9IEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgewotICAgICAgICAvLyBGSVhN
RTogY2xlYW51cAotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIDo6Z2xSZWFkUGl4ZWxz
KHgsIHksIHdpZHRoLCBoZWlnaHQsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscyk7
CisgICAgaW50IHRvdGFsQnl0ZXMgPSB3aWR0aCAqIGhlaWdodCAqIDQ7CisgICAgaWYgKGlzR0xF
UzJDb21wbGlhbnQoKSkgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsQnl0ZXM7
IGkgKz0gNCkKKyAgICAgICAgICAgIHN0ZDo6c3dhcChwaXhlbHNbaV0sIHBpeGVsc1tpICsgMl0p
OyAvLyBDb252ZXJ0IHRvIEJHUkEuCiAgICAgfQotCi0gICAgcmV0dXJuIG11c3RSZXN0b3JlRkJP
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVj
ZXNzYXJ5KGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC0xNTYsNiArOTIsMTcgQEAgYm9vbCBHcmFw
aGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RlbnVtIGludGUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dmFsaWRhdGVBdHRyaWJ1dGVzKCkKK3sKKyAgICB2YWxpZGF0ZURlcHRoU3RlbmNpbCgi
R0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7CisKKyAgICBpZiAobV9hdHRycy5hbnRpYWxp
YXMpIHsKKyAgICAgICAgRXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygp
OworICAgICAgICBpZiAoIWV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9JTUdfbXVsdGlzYW1wbGVk
X3JlbmRlcl90b190ZXh0dXJlIikpCisgICAgICAgICAgICBtX2F0dHJzLmFudGlhbGlhcyA9IGZh
bHNlOworICAgIH0KK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhSYW5nZShHQzNE
Y2xhbXBmIHpOZWFyLCBHQzNEY2xhbXBmIHpGYXIpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CkBAIC0xNjgsNiArMTE1LDE5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyRGVw
dGgoR0MzRGNsYW1wZiBkZXB0aCkKICAgICA6OmdsQ2xlYXJEZXB0aGYoZGVwdGgpOwogfQogCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK0V4dGVuc2lvbnMzRCogR3JhcGhpY3NDb250ZXh0M0Q6
OmdldEV4dGVuc2lvbnMoKQoreworICAgIGlmICghbV9leHRlbnNpb25zKQorICAgICAgICBtX2V4
dGVuc2lvbnMgPSBhZG9wdFB0cihuZXcgRXh0ZW5zaW9uczNET3BlbkdMRVModGhpcykpOworICAg
IHJldHVybiBtX2V4dGVuc2lvbnMuZ2V0KCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6
OnN5c3RlbUFsbG93c011bHRpc2FtcGxpbmdPbkFUSUNhcmRzKCkKK3sKKyAgICByZXR1cm4gZmFs
c2U7IC8vIG5vdCBhcHBsaWNhYmxlCit9CisKK30KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNz
Q29udGV4dDNEUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3Jh
cGhpY3NDb250ZXh0M0RRdC5jcHAKaW5kZXggNzBkM2YyNGFmYTU1NDJhNjhhMTI0MWQzODFjM2Nl
OTM0ODc4MTg4NS4uMDY3NjkyMWMxMWY4MGZkYzVmYTg0ODM5YWRmZmY1M2IxMzBhZmFiYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250
ZXh0M0RRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3Jh
cGhpY3NDb250ZXh0M0RRdC5jcHAKQEAgLTk4LDYgKzk4LDEzIEBAIGJvb2wgR3JhcGhpY3NDb250
ZXh0M0Q6OmlzR0xFUzJDb21wbGlhbnQoKSBjb25zdAogI2VuZGlmCiB9CiAKKyNpZiAhVVNFKE9Q
RU5HTF9FU18yKQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVy
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorI2VuZGlmCisKIEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0LCBIb3N0V2luZG93KiBob3N0V2luZG93KQogICAgIDogbV9jb250ZXh0KGNvbnRleHQp
CiAgICAgLCBtX2hvc3RXaW5kb3coaG9zdFdpbmRvdykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150844</attachid>
            <date>2012-07-04 14:45:07 -0700</date>
            <delta_ts>2012-07-04 14:59:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90567-20120704174444.patch</filename>
            <type>text/plain</type>
            <size>61767</size>
            <attacher name="Joshua Netterfield">jnetterfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxODY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODFjZDc4MDliMjVmNjhk
YjA3MTcxZmU3N2UyMmI0ZjhkMjVkNTU2NC4uZjVjYTliYzYwOWJhOTgxOTIyNjk0OTM2ODVmZTk2
MTQ3NzE3NjM1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk0IEBACisyMDEyLTA3LTA0ICBKb3No
dWEgTmV0dGVyZmllbGQgIDxqbmV0dGVyZmllbGRAcmltLmNvbT4KKyAgICAgICAgTWFrZSBHQzNE
IGFuZCBFM0QgbW9yZSBtYWludGFpbmFibGUgZm9yIEdMRVMgcGxhdGZvcm1zCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDU2NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY2xlYW5zIHVw
IGNvZGUgZm9yIFdlYkdMIG9uIE9wZW5HTEVTIHBsYXRmb3JtcyB3aGljaCB1c2UgCisgICAgICAg
IEdyYXBoaWNzQ29udGV4dDNET3BlbkdMKiBhbmQgRXh0ZW5zaW9uczNET3BlbkdMKi4gQWx0aG91
Z2gKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wgd2FzIGFscmVhZHkgc3BsaXQgaW50
byBHcmFwaGljc0NvbnRleHQzRE9wZW5HTCwKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0RPcGVu
R0xDb21tb24sIGFuZCAgR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUywgdGhpcyBwYXRjaAorICAg
ICAgICBpcyBhbiBhdHRlbXB0IHRvIHJlZmFjdG9yIHRoaXMgY29kZSBpbiBhIHdheSB0aGF0IHdp
bGwgaGVscCBCbGFja0JlcnJ5IGFuZAorICAgICAgICBvdGhlciB0ZWFtcyBzdXBwb3J0IFdlYkdM
IG9uIG1vYmlsZSBwbGF0Zm9ybXMgd2l0aCBhcyBsaXR0bGUgdXNlIG9mCisgICAgICAgIOKAnCNJ
RiBVU0UoT1BFTkdMX0VTXzIp4oCdIGluIGNvbW1vbiBjb2RlIGFzIHBvc3NpYmxlLiBBbHNvIGlu
Y2x1ZGVkIGlzIHRoZQorICAgICAgICBzZXBhcmF0aW9uIG9mIEV4dGVuc2lvbnMzRE9wZW5HTCBp
bnRvIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbiwKKyAgICAgICAgRXh0ZW5zaW9uczNET3BlbkdM
LCBhbmQgRXh0ZW5zaW9uczNET3BlbkdMRVMgYXMgd2VsbCBhcyB0aGUgaW50cm9kdWN0aW9uCisg
ICAgICAgIG9mIE9wZW5HTEVTU2hpbXMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBjcmVhdGVk
IGluIGxhcmdlIHBhcnQgYnkgSm9uYXRoYW4gRmVsZHN0ZWluLgorCisgICAgICAgIE5vIG5ldyB0
ZXN0czogbm8gbmV3IGJlaGF2aW91ci4KKworICAgICAgICAqIFBsYXRmb3JtQmxhY2tCZXJyeS5j
bWFrZTogUmVjb2duaXplIEJsYWNrQmVycnkgYXMgT1BFTkdMIEVTLCBhZGQgbmV3IGZpbGVzIHRv
IGJ1aWxkCisgICAgICAgICogVGFyZ2V0LnByaTogQWRkIG5ldyBFeHRlbnNpb25zM0RPcGVuR0wq
IHRvIFdlYkdMIGJ1aWxkcworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dDNELmg6IEFkZCB2YWxpZGF0ZURlcHRoU3RlbmNpbCwgbWFrZSBzeXN0ZW1BbGxvd3NNdWx0
aXNhbXBsaW5nT25BVElDYXJkcyBhIGEgbWVtYmVyIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvT3BlbkdMRVNTaGltcy5oOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNw
cDogTW92ZSBjb2RlIHRvIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbiB3aGVyZSBwb3NzaWJsZQor
ICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpFeHRlbnNpb25zM0RPcGVuR0wp
OiBSZWZsZWN0IHRoYXQgaXQgaXMgbm93IGluaGVyaXRzIEV4dGVuc2lvbnMzRENvbW1vbgorICAg
ICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpzdXBwb3J0c0V4dGVuc2lvbik6IENv
bnRhaW5zIE9wZW5HTCBzcGVjaWZpYyBjb2RlIGZyb20gc3VwcG9ydHMKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpnZXRFeHRlbnNpb25z
KTogUmV0dXJucyBhIGxpc3Qgb2YgZXh0ZW5zaW9ucworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaDogUmVtb3ZlIGZ1bmN0aW9ucyBub3cgaW4g
RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEV4
dGVuc2lvbnMzRE9wZW5HTCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4
dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0xDb21tb246OkV4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbik6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0xDb21tb246
On5FeHRlbnNpb25zM0RPcGVuR0xDb21tb24pOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9u
czNET3BlbkdMQ29tbW9uOjpzdXBwb3J0cyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25z
M0RPcGVuR0xDb21tb246OmVuc3VyZUVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uOjppc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uOjpnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKToKKyAgICAgICAg
KFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6Z2V0VHJhbnNsYXRlZFNoYWRlclNv
dXJjZUFOR0xFKTogRXhpc3RlZCBiZWZvcmUsIGJ1dCBkaWQgbm90aGluZy4gTm93IGRvZXMgd2hh
dCBpcyBzYXlzIGl0IGRvZXMuCisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0xD
b21tb246OmluaXRpYWxpemVBdmFpbGFibGVFeHRlbnNpb25zKTogTW92ZWQgZnJvbSBFeHRlbnNp
b25zM0RPcGVuR0w6OnN1cHBvcnRzCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmguCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5H
TEVTOjpFeHRlbnNpb25zM0RPcGVuR0xFUyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25z
M0RPcGVuR0xFUzo6fkV4dGVuc2lvbnMzRE9wZW5HTEVTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4
dGVuc2lvbnMzRE9wZW5HTEVTOjpmcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HKToK
KyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTEVTOjpyZW5kZXJidWZmZXJTdG9y
YWdlTXVsdGlzYW1wbGVJTUcpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdM
RVM6OmNyZWF0ZVZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMz
RE9wZW5HTEVTOjpkZWxldGVWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRl
bnNpb25zM0RPcGVuR0xFUzo6aXNWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbnNpb25zM0RPcGVuR0xFUzo6YmluZFZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNv
cmU6OkV4dGVuc2lvbnMzRE9wZW5HTEVTOjpzdXBwb3J0c0V4dGVuc2lvbik6IENvbnRhaW5zIE9w
ZW5HTEVTIHNwZWNpZmljIGNvZGUgZnJvbSBzdXBwb3J0cworICAgICAgICAoV2ViQ29yZTo6RXh0
ZW5zaW9uczNET3BlbkdMRVM6OmdldEV4dGVuc2lvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmguCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEV4dGVuc2lvbnMzRE9wZW5HTEVTKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRl
cyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpzeXN0ZW1BbGxvd3NNdWx0aXNhbXBsaW5nT25BVElDYXJkcyk6IE5vdyBhIG1lbWJlciBmdW5j
dGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25z
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RP
cGVuR0xDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZh
bGlkYXRlRGVwdGhTdGVuY2lsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmxpbmVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bGlu
a1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBpeGVsU3Rv
cmVpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwb2x5Z29uT2Zmc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVCdWZmZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29t
cGlsZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHNB
bmRDb252ZXJ0VG9CR1JBSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzeXN0ZW1BbGxvd3NNdWx0aXNhbXBsaW5nT25B
VElDYXJkcyk6IE5vdyBhIG1lbWJlciBmdW5jdGlvbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcik6
CisKIDIwMTItMDctMDQgIEpvaG4gTWVsbG9yICA8am9obm1lQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBUZXh0IEF1dG9zaXppbmc6IEFkZCBiYXNpYyBmcmFtZXdvcmsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCmluZGV4IGRlN2JjYzY0ZjM5ZWJkYTM2Yjc3NDY5MzIxYjlhMGRjODkwZWJm
ODguLmM5ZTgzOTQ0N2FlNTNjMmNlMGNjZDJiNzI5MmE0Y2I2MjY5MGRhZGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNjA1NCw2ICs2MDU0LDcgQEAgd2ViY29yZV9zb3VyY2Vz
ICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9PcGVuR0xTaGltcy5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL09wZW5HTFNoaW1zLmggXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wu
Y3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9u
czNET3BlbkdMQ29tbW9uLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21t
b24uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21h
a2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UKaW5kZXggNTE2OWE1
ZGQ1OTczYzdiMGUyODhkYTIxMjMxOTQ3MTg2NTMwZWE4MS4uNTg3ZWRlM2QwNjkwODAzNzNiZWQy
YTMxMjI1MmE1NTc5MjFkY2ZjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1C
bGFja0JlcnJ5LmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQmxhY2tCZXJyeS5j
bWFrZQpAQCAtMjE4LDYgKzIxOCw3IEBAIGlmIChFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJB
TUUpCiBFTkRJRiAoKQogCiBpZiAoRU5BQkxFX1dFQkdMKQorICAgIEFERF9ERUZJTklUSU9OUyAo
LURXVEZfVVNFX09QRU5HTF9FU18yPTEpCiAgICAgTElTVChBUFBFTkQgV2ViQ29yZV9JTkNMVURF
X0RJUkVDVE9SSUVTCiAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUiCiAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wiCkBA
IC0yMjUsNiArMjI2LDExIEBAIGlmIChFTkFCTEVfV0VCR0wpCiAgICAgTElTVChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRHJhd2lu
Z0J1ZmZlckJsYWNrQmVycnkuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvR3JhcGhpY3NDb250ZXh0M0RCbGFja0JlcnJ5LmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCisgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAorICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNw
cAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMu
Y3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQz
RC5jcHAKICAgICApCiBFTkRJRiAoKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJn
ZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCA2NjVmMDNkMTFjNTkwMThj
NzViOWZhNjE0OWU3MjlkZTQ5ZjJiMjlkLi40Y2U2Y2Y2NmUyOWU5OGNlY2U4NWVjYjA0YjVkYTAw
YzkyMzZhODk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTM5NTUsMTUgKzM5NTUsMTkgQEAgY29udGFpbnMo
REVGSU5FUywgRU5BQkxFX1dFQkdMPTEpIHsKIAogICAgIGNvbnRhaW5zKFFUX0NPTkZJRywgb3Bl
bmdsKSB8IGNvbnRhaW5zKFFUX0NPTkZJRywgb3BlbmdsZXMyKSB7CiAgICAgICAgICFjb250YWlu
cyhRVF9DT05GSUcsIG9wZW5nbGVzMikgewotICAgICAgICAgICAgU09VUkNFUyArPSBwbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCisgICAgICAgICAg
ICBTT1VSQ0VTICs9IFwKKyAgICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAgXAorICAgICAgICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAKICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dDNET3BlbkdMRVMuY3BwCisgICAgICAgICAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNw
cCBcCisgICAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNE
T3BlbkdMRVMuY3BwCiAgICAgICAgIH0KIAogICAgICAgICBIRUFERVJTICs9IHBsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaAogCiAgICAgICAgIFNPVVJDRVMgKz0g
XAotICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5H
TC5jcHAgXAorICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMz
RE9wZW5HTENvbW1vbi5jcHAgXAogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAogCiAgICAgICAgIEFOR0xFX0RJUiA9
ICQkcmVwbGFjZShQV0QsICJXZWJDb3JlIiwgIlRoaXJkUGFydHkvQU5HTEUiKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCmluZGV4IGNiMTAxMmU3NzY4NWNkOTA4OTY5MjI0YmFhYWYwMTEwNGQxOWQ2OWMuLmYxN2Ew
NDAwOTFmMjlkMzE3MzQ4NWVjNzYyNmE4MWNiNjhkN2VjY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAg
LTM4MDcsNiArMzgwNyw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dl
YlRpbGVkTGF5ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYlRp
bGVkTGF5ZXIubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRl
bnNpb25zM0RPcGVuR0wuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xD
b21tb24uY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNELmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQzRC5oCmluZGV4IGRiZDlkZmVkZTAxM2E0Y2FmMzMyNDYzYWQzMmZjNGUx
NTI4MjY0NjcuLjE2ZDEyZjE2M2JkNWQxZTA5ZjMxMTUyZWRkYTFiMmI2NWUyMmVhNGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNE
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
M0QuaApAQCAtMjAsNyArMjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaWZuZGVmIEdy
YXBoaWNzQ29udGV4dDNEX2gKQEAgLTkxLDE0ICs5MSwxMiBAQCBjb25zdCBQbGF0Zm9ybTNET2Jq
ZWN0IE51bGxQbGF0Zm9ybTNET2JqZWN0ID0gMDsKICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dD
b250ZXh0Lmg+CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCi0jaW5jbHVkZSA8
R0xFUzIvZ2wyLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRHJhd2lu
Z0J1ZmZlcjsKIGNsYXNzIEV4dGVuc2lvbnMzRDsKLSNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRG
T1JNKEdUSykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkKKyNpZiBVU0UoT1BFTkdM
X0VTXzIpCitjbGFzcyBFeHRlbnNpb25zM0RPcGVuR0xFUzsKKyNlbHNlCiBjbGFzcyBFeHRlbnNp
b25zM0RPcGVuR0w7CiAjZW5kaWYKICNpZiBQTEFURk9STShRVCkKQEAgLTkyNCw2ICs5MjIsNyBA
QCBwdWJsaWM6CiAgICAgLy8gaW4gcGFydGljdWxhciBzdGVuY2lsIGFuZCBhbnRpYWxpYXMsIGFu
ZCBkZXRlcm1pbmUgd2hpY2ggY291bGQgb3IKICAgICAvLyBjb3VsZCBub3QgYmUgaG9ub3JlZCBi
YXNlZCBvbiB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBPcGVuR0wKICAgICAvLyBpbXBsZW1lbnRh
dGlvbi4KKyAgICB2b2lkIHZhbGlkYXRlRGVwdGhTdGVuY2lsKGNvbnN0IGNoYXIqIHBhY2tlZERl
cHRoU3RlbmNpbEV4dGVuc2lvbik7CiAgICAgdm9pZCB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKIAog
ICAgIC8vIFJlYWQgcmVuZGVyaW5nIHJlc3VsdHMgaW50byBhIHBpeGVsIGFycmF5IHdpdGggdGhl
IHNhbWUgZm9ybWF0IGFzIHRoZQpAQCAtOTU1LDE2ICs5NTQsMzAgQEAgcHVibGljOgogICAgIEhh
c2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+IG1fc2hhZGVyU291cmNl
TWFwOwogCiAgICAgQU5HTEVXZWJLaXRCcmlkZ2UgbV9jb21waWxlcjsKKyNlbmRpZgogCisjaWYg
UExBVEZPUk0oUVQpICYmIGRlZmluZWQoUVRfT1BFTkdMX0VTXzIpCisgICAgZnJpZW5kIGNsYXNz
IEV4dGVuc2lvbnMzRFF0OworICAgIE93blB0cjxFeHRlbnNpb25zM0RRdD4gbV9leHRlbnNpb25z
OworI2VsaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKKyAgICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9u
czNET3BlbkdMRVM7CisgICAgT3duUHRyPEV4dGVuc2lvbnMzRE9wZW5HTEVTPiBtX2V4dGVuc2lv
bnM7CisjZWxpZiAhUExBVEZPUk0oQ0hST01JVU0pCiAgICAgZnJpZW5kIGNsYXNzIEV4dGVuc2lv
bnMzRE9wZW5HTDsKICAgICBPd25QdHI8RXh0ZW5zaW9uczNET3BlbkdMPiBtX2V4dGVuc2lvbnM7
CisjZW5kaWYKKyAgICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOwogCiAg
ICAgQXR0cmlidXRlcyBtX2F0dHJzOwogICAgIFZlY3RvcjxWZWN0b3I8ZmxvYXQ+ID4gbV92ZXJ0
ZXhBcnJheTsKIAotICAgIEdDM0R1aW50IG1fdGV4dHVyZSwgbV9jb21wb3NpdG9yVGV4dHVyZTsK
KyAgICBHQzNEdWludCBtX3RleHR1cmU7CisjaWYgIVBMQVRGT1JNKEJMQUNLQkVSUlkpCisgICAg
R0MzRHVpbnQgbV9jb21wb3NpdG9yVGV4dHVyZTsKKyNlbmRpZgogICAgIEdDM0R1aW50IG1fZmJv
OwotI2lmIFVTRShPUEVOR0xfRVNfMikKKworI2lmICFQTEFURk9STShCTEFDS0JFUlJZKQogICAg
IEdDM0R1aW50IG1fZGVwdGhCdWZmZXI7CiAgICAgR0MzRHVpbnQgbV9zdGVuY2lsQnVmZmVyOwog
I2VuZGlmCkBAIC05ODUsMTAgKzk5OCwxMSBAQCBwdWJsaWM6CiAKICAgICAvLyBFcnJvcnMgcmFp
c2VkIGJ5IHN5bnRoZXNpemVHTEVycm9yKCkuCiAgICAgTGlzdEhhc2hTZXQ8R0MzRGVudW0+IG1f
c3ludGhldGljRXJyb3JzOwotI2VuZGlmCiAKICAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOwogICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQzRFByaXZhdGU+IG1fcHJp
dmF0ZTsKKworICAgIGJvb2wgc3lzdGVtQWxsb3dzTXVsdGlzYW1wbGluZ09uQVRJQ2FyZHMoKTsg
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9PcGVuR0xFU1NoaW1zLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9PcGVuR0xFU1NoaW1zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWRiOTE5MzNmODViYzA2
MWNjOWM4NTI1NGRjMzRmMDljMjkzYTgwOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL09wZW5HTEVTU2hpbXMuaApAQCAtMCwwICsxLDU0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgT3BlbkdMRVNT
aGltc19oCisjZGVmaW5lIE9wZW5HTEVTU2hpbXNfaAorCisjaWYgUExBVEZPUk0oQkxBQ0tCRVJS
WSkKKyNkZWZpbmUgZ2xCaW5kRnJhbWVidWZmZXJFWFQgZ2xCaW5kRnJhbWVidWZmZXIKKyNkZWZp
bmUgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVCBnbEZyYW1lYnVmZmVyVGV4dHVyZTJECisjZGVm
aW5lIGdsQmluZFJlbmRlcmJ1ZmZlckVYVCBnbEJpbmRSZW5kZXJidWZmZXIKKyNkZWZpbmUgZ2xS
ZW5kZXJidWZmZXJTdG9yYWdlRVhUIGdsUmVuZGVyYnVmZmVyU3RvcmFnZQorI2RlZmluZSBnbEZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIKKyNkZWZp
bmUgR0xfUkVOREVSQlVGRkVSX0VYVCBHTF9SRU5ERVJCVUZGRVIKKyNkZWZpbmUgR0xfU1RFTkNJ
TF9BVFRBQ0hNRU5UX0VYVCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQKKyNkZWZpbmUgZ2xDaGVja0Zy
YW1lYnVmZmVyU3RhdHVzRVhUIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1cworI2RlZmluZSBnbERl
bGV0ZUZyYW1lYnVmZmVyc0VYVCBnbERlbGV0ZUZyYW1lYnVmZmVycworI2RlZmluZSBnbERlbGV0
ZVJlbmRlcmJ1ZmZlcnNFWFQgZ2xEZWxldGVSZW5kZXJidWZmZXJzCisjZGVmaW5lIGdsR2VuUmVu
ZGVyYnVmZmVyc0VYVCBnbEdlblJlbmRlcmJ1ZmZlcnMKKyNkZWZpbmUgZ2xHZW5GcmFtZWJ1ZmZl
cnNFWFQgZ2xHZW5GcmFtZWJ1ZmZlcnMKKyNkZWZpbmUgZ2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1l
bnRQYXJhbWV0ZXJpdkVYVCBnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2Cisj
ZGVmaW5lIGdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXZFWFQgZ2xHZXRSZW5kZXJidWZmZXJQ
YXJhbWV0ZXJpdgorI2RlZmluZSBnbElzUmVuZGVyYnVmZmVyRVhUIGdsSXNSZW5kZXJidWZmZXIK
KyNkZWZpbmUgZ2xJc0ZyYW1lYnVmZmVyRVhUIGdsSXNGcmFtZWJ1ZmZlcgorI2RlZmluZSBnbEdl
bmVyYXRlTWlwbWFwRVhUIGdsR2VuZXJhdGVNaXBtYXAKKyNkZWZpbmUgR0xfQ09MT1JfQVRUQUNI
TUVOVDBfRVhUIEdMX0NPTE9SX0FUVEFDSE1FTlQwCisjZGVmaW5lIEdMX0RFUFRIX0FUVEFDSE1F
TlRfRVhUIEdMX0RFUFRIX0FUVEFDSE1FTlQKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQ09NUExF
VEVfRVhUIEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0VY
VCBHTF9GUkFNRUJVRkZFUgorI2RlZmluZSBHTF9ERVBUSDI0X1NURU5DSUw4X0VYVCBHTF9ERVBU
SDI0X1NURU5DSUw4X09FUworI2RlZmluZSBHTF9SR0JBOCBHTF9SR0JBOF9PRVMKKyNkZWZpbmUg
R0xfUkdCOCBHTF9SR0I4X09FUworI2RlZmluZSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCAweDhD
QTgKKyNkZWZpbmUgR0xfRFJBV19GUkFNRUJVRkZFUl9FWFQgMHg4Q0E5CisjZGVmaW5lIEZSQU1F
QlVGRkVSX0lOQ09NUExFVEVfTVVMVElTQU1QTEVfRVhUIDB4OTEzNAorI2RlZmluZSBHTF9NQVhf
U0FNUExFU19FWFQgMHg4RDU3CisjZW5kaWYgLy8gUExBVEZPUk0oQkxBQ0tCRVJSWSkKKworI2Vu
ZGlmIC8vIE9wZW5HTEVTU2hpbXNfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3Bw
CmluZGV4IGFjMjkyZDM3NTE1NzkyZWNhMzIyOWU2ZjY3Mzg4ZWIyOGU1MWUwOTYuLmYyMzAzZTM5
YTgzMjJjNjliMDYwMGVmYjA1ZmIzYTllNTdmNzU3ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4
dDNEQ2Fpcm8uY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJPcGVuR0xTaGltcy5o
IgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0
Q2Fpcm8uaCIKICNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgogI2luY2x1ZGUgIlNoYWRlckxhbmcu
aCIKQEAgLTE0Niw2ICsxNDcsMTEgQEAgR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRl
eHQzRCgpCiAgICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVyc0VYVCgxLCAmbV9mYm8pOwogfQogCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0
YShJbWFnZSogaW1hZ2UsIHVuc2lnbmVkIGludCBmb3JtYXQsIHVuc2lnbmVkIGludCB0eXBlLCBi
b29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsIFZl
Y3Rvcjx1aW50OF90PiYgb3V0cHV0VmVjdG9yKQogewogICAgIGlmICghaW1hZ2UpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzQ29u
dGV4dDNEQ2x1dHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0
dGVyL0dyYXBoaWNzQ29udGV4dDNEQ2x1dHRlci5jcHAKaW5kZXggY2EwZmZkYzJiY2I5ZDg5Mzg2
YjE1ZDQ4YzMyMzhlYjNlZjliMDk1NC4uN2UyMmY3MjJkNGJkMzUzZDMzMWJkYzYwNzc1ZTdkNzFh
YTA1ZTUxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1
dHRlci9HcmFwaGljc0NvbnRleHQzRENsdXR0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NDb250ZXh0M0RDbHV0dGVyLmNwcApAQCAt
NTYsNiArNTYsMTEgQEAgR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCgpCiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFz
ZVNoYWRlckNvbXBpbGVyKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCiBib29sIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdlLCB1bnNpZ25lZCBpbnQg
Zm9ybWF0LCB1bnNpZ25lZCBpbnQgdHlwZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGln
bm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlLCBWZWN0b3I8dWludDhfdD4mIG91dHB1dFZlY3RvcikK
IHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcAppbmRl
eCA0YWEzNDFjMzI2YzczNTdiMTEwYzk4M2QwMzljY2Q3YmMzMzE2NjEyLi5iYmU3N2JiNzk4NTRj
OTIzN2U4Y2I2NzA2Yzk3NDY1OTk1NjJiOTAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNw
cApAQCAtNDIsNyArNDIsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBFeHRlbnNpb25zM0RP
cGVuR0w6OkV4dGVuc2lvbnMzRE9wZW5HTChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKLSAg
ICA6IG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zKGZhbHNlKQorICAgIDogRXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uKGNvbnRleHQpCisgICAgLCBtX2luaXRpYWxpemVkQXZhaWxhYmxl
RXh0ZW5zaW9ucyhmYWxzZSkKICAgICAsIG1fY29udGV4dChjb250ZXh0KQogewogfQpAQCAtNTEs
OTEgKzUyLDYgQEAgRXh0ZW5zaW9uczNET3BlbkdMOjp+RXh0ZW5zaW9uczNET3BlbkdMKCkKIHsK
IH0KIAotYm9vbCBFeHRlbnNpb25zM0RPcGVuR0w6OnN1cHBvcnRzKGNvbnN0IFN0cmluZyYgbmFt
ZSkKLXsKLSAgICAvLyBOb3RlIG9uIHN1cHBvcnQgZm9yIEJHUkE6Ci0gICAgLy8KLSAgICAvLyBG
b3IgT3BlbkdMIEVTMi4wLCByZXF1aXJlcyBjaGVja2luZyBmb3IKLSAgICAvLyBHTF9FWFRfdGV4
dHVyZV9mb3JtYXRfQkdSQTg4ODggYW5kIEdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3JhLgotICAgIC8v
IEZvciBkZXNrdG9wIEdMLCBCR1JBIGhhcyBiZWVuIHN1cHBvcnRlZCBzaW5jZSBPcGVuR0wgMS4y
LgotICAgIC8vCi0gICAgLy8gSG93ZXZlciwgbm90ZSB0aGF0IHRoZSBHTCBFUzIgZXh0ZW5zaW9u
IHJlcXVpcmVzIHRoZQotICAgIC8vIGludGVybmFsRm9ybWF0IHRvIGdsVGV4SW1hZ2UyRCgpIGJl
IEdMX0JHUkEsIHdoaWxlIGRlc2t0b3AgR0wKLSAgICAvLyB3aWxsIG5vdCBhY2NlcHQgR0xfQkdS
QSAobXVzdCBiZSBHTF9SR0JBKSwgc28gdGhpcyBtdXN0IGJlCi0gICAgLy8gY2hlY2tlZCBvbiBl
YWNoIHBsYXRmb3JtLiBEZXNrdG9wIEdMIG9mZmVycyBuZWl0aGVyCi0gICAgLy8gR0xfRVhUX3Rl
eHR1cmVfZm9ybWF0X0JHUkE4ODg4IG9yIEdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3JhLCBzbwotICAg
IC8vIHRyZWF0IHRoZW0gYXMgdW5zdXBwb3J0ZWQgaGVyZS4KLSAgICBpZiAoIW1faW5pdGlhbGl6
ZWRBdmFpbGFibGVFeHRlbnNpb25zKSB7Ci0gICAgICAgIFN0cmluZyBleHRlbnNpb25zU3RyaW5n
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KDo6Z2xHZXRTdHJpbmcoR0xfRVhURU5TSU9O
UykpKTsKLSAgICAgICAgVmVjdG9yPFN0cmluZz4gYXZhaWxhYmxlRXh0ZW5zaW9uczsKLSAgICAg
ICAgZXh0ZW5zaW9uc1N0cmluZy5zcGxpdCgiICIsIGF2YWlsYWJsZUV4dGVuc2lvbnMpOwotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGF2YWlsYWJsZUV4dGVuc2lvbnMuc2l6ZSgpOyAr
K2kpCi0gICAgICAgICAgICBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuYWRkKGF2YWlsYWJsZUV4dGVu
c2lvbnNbaV0pOwotICAgICAgICBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucyA9IHRy
dWU7Ci0gICAgfQotICAgIAotICAgIC8vIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQgYW5kIEdM
X0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIGFyZSAiZmFrZSIuIFRoZXkgYXJlIGltcGxl
bWVudGVkIHVzaW5nIG90aGVyCi0gICAgLy8gZXh0ZW5zaW9ucy4gSW4gcGFydGljdWxhciBHTF9F
WFRfZnJhbWVidWZmZXJfYmxpdCBhbmQgR0xfRVhUX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlCi0g
ICAgaWYgKG5hbWUgPT0gIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQiKQotICAgICAgICByZXR1
cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9FWFRfZnJhbWVidWZmZXJfYmxp
dCIpOwotICAgIGlmIChuYW1lID09ICJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIp
Ci0gICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0VYVF9m
cmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpOwotCi0gICAgLy8gRGVza3RvcCBHTCBhbHdheXMgc3Vw
cG9ydHMgR0xfT0VTX3JnYjhfcmdiYTguCi0gICAgaWYgKG5hbWUgPT0gIkdMX09FU19yZ2I4X3Jn
YmE4IikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBJZiBHTF9BUkJfdGV4dHVyZV9m
bG9hdCBpcyBhdmFpbGFibGUgdGhlbiB3ZSByZXBvcnQgR0xfT0VTX3RleHR1cmVfZmxvYXQgYW5k
Ci0gICAgLy8gR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdCBhcyBhdmFpbGFibGUuCi0gICAgaWYg
KG5hbWUgPT0gIkdMX09FU190ZXh0dXJlX2Zsb2F0IiB8fCBuYW1lID09ICJHTF9PRVNfdGV4dHVy
ZV9oYWxmX2Zsb2F0IikKLSAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250
YWlucygiR0xfQVJCX3RleHR1cmVfZmxvYXQiKTsKLSAgICAKLSAgICAvLyBHTF9PRVNfdmVydGV4
X2FycmF5X29iamVjdAotICAgIGlmIChuYW1lID09ICJHTF9PRVNfdmVydGV4X2FycmF5X29iamVj
dCIpCi0gICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0FQ
UExFX3ZlcnRleF9hcnJheV9vYmplY3QiKTsKLQotICAgIC8vIERlc2t0b3AgR0wgYWx3YXlzIHN1
cHBvcnRzIHRoZSBzdGFuZGFyZCBkZXJpdmF0aXZlIGZ1bmN0aW9ucwotICAgIGlmIChuYW1lID09
ICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIGlmIChuYW1lID09ICJHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKQotICAg
ICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9FWFRfdGV4dHVy
ZV9maWx0ZXJfYW5pc290cm9waWMiKTsKLQotICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lv
bnMuY29udGFpbnMobmFtZSk7Ci19Ci0KLXZvaWQgRXh0ZW5zaW9uczNET3BlbkdMOjplbnN1cmVF
bmFibGVkKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRG
T1JNKFFUKSB8fCBQTEFURk9STShHVEspCi0gICAgaWYgKG5hbWUgPT0gIkdMX09FU19zdGFuZGFy
ZF9kZXJpdmF0aXZlcyIpIHsKLSAgICAgICAgLy8gRW5hYmxlIHN1cHBvcnQgaW4gQU5HTEUgKGlm
IG5vdCBlbmFibGVkIGFscmVhZHkpCi0gICAgICAgIEFOR0xFV2ViS2l0QnJpZGdlJiBjb21waWxl
ciA9IG1fY29udGV4dC0+bV9jb21waWxlcjsKLSAgICAgICAgU2hCdWlsdEluUmVzb3VyY2VzIEFO
R0xFUmVzb3VyY2VzID0gY29tcGlsZXIuZ2V0UmVzb3VyY2VzKCk7Ci0gICAgICAgIGlmICghQU5H
TEVSZXNvdXJjZXMuT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzKSB7Ci0gICAgICAgICAgICBBTkdM
RVJlc291cmNlcy5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgPSAxOwotICAgICAgICAgICAgY29t
cGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsKLSAgICAgICAgfQotICAgIH0KLSNl
bHNlCi0gICAgQVNTRVJUX1VOVVNFRChuYW1lLCBzdXBwb3J0cyhuYW1lKSk7Ci0jZW5kaWYKLX0K
LQotYm9vbCBFeHRlbnNpb25zM0RPcGVuR0w6OmlzRW5hYmxlZChjb25zdCBTdHJpbmcmIG5hbWUp
Ci17Ci0jaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RLKQot
ICAgIGlmIChuYW1lID09ICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSB7Ci0gICAgICAg
IEFOR0xFV2ViS2l0QnJpZGdlJiBjb21waWxlciA9IG1fY29udGV4dC0+bV9jb21waWxlcjsKLSAg
ICAgICAgcmV0dXJuIGNvbXBpbGVyLmdldFJlc291cmNlcygpLk9FU19zdGFuZGFyZF9kZXJpdmF0
aXZlczsKLSAgICB9Ci0jZW5kaWYKLSAgICByZXR1cm4gc3VwcG9ydHMobmFtZSk7Ci19Ci0KLWlu
dCBFeHRlbnNpb25zM0RPcGVuR0w6OmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKQotewotICAg
IHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I7Ci19CiAKIHZvaWQgRXh0ZW5zaW9u
czNET3BlbkdMOjpibGl0RnJhbWVidWZmZXIobG9uZyBzcmNYMCwgbG9uZyBzcmNZMCwgbG9uZyBz
cmNYMSwgbG9uZyBzcmNZMSwgbG9uZyBkc3RYMCwgbG9uZyBkc3RZMCwgbG9uZyBkc3RYMSwgbG9u
ZyBkc3RZMSwgdW5zaWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nIGZpbHRlcikKIHsKQEAg
LTE5NCwxOSArMTEwLDQ5IEBAIHZvaWQgRXh0ZW5zaW9uczNET3BlbkdMOjpiaW5kVmVydGV4QXJy
YXlPRVMoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKICNlbmRpZgogfQogCi1TdHJpbmcgRXh0ZW5z
aW9uczNET3BlbkdMOjpnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoUGxhdGZvcm0zRE9i
amVjdCBzaGFkZXIpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNoYWRlcik7Ci0gICAgcmV0dXJuICIi
OwotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbiBhbmQgYWRkIEdMX0FOR0xF
X3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSBpbiBzdXBwb3J0cygpLgotfQotCiB2b2lkIEV4dGVu
c2lvbnMzRE9wZW5HTDo6Y29weVRleHR1cmVDSFJPTUlVTShHQzNEZW51bSwgUGxhdGZvcm0zRE9i
amVjdCwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGludCwgR0MzRGVudW0pCiB7CiAgICAgLy8gRklY
TUU6IGltcGxlbWVudCB0aGlzIGZ1bmN0aW9uIGFuZCBhZGQgR0xfQ0hST01JVU1fY29weV90ZXh0
dXJlIGluIHN1cHBvcnRzKCkuCiAgICAgcmV0dXJuOwogfQogCitib29sIEV4dGVuc2lvbnMzRE9w
ZW5HTDo6c3VwcG9ydHNFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIC8vIEdM
X0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQgYW5kIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2Ft
cGxlIGFyZSAiZmFrZSIuIFRoZXkgYXJlIGltcGxlbWVudGVkIHVzaW5nIG90aGVyCisgICAgLy8g
ZXh0ZW5zaW9ucy4gSW4gcGFydGljdWxhciBHTF9FWFRfZnJhbWVidWZmZXJfYmxpdCBhbmQgR0xf
RVhUX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlCisgICAgaWYgKG5hbWUgPT0gIkdMX0FOR0xFX2Zy
YW1lYnVmZmVyX2JsaXQiKQorICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNv
bnRhaW5zKCJHTF9FWFRfZnJhbWVidWZmZXJfYmxpdCIpOworICAgIGlmIChuYW1lID09ICJHTF9B
TkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpCisgICAgICAgIHJldHVybiBtX2F2YWlsYWJs
ZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0VYVF9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpOwor
CisgICAgLy8gRGVza3RvcCBHTCBhbHdheXMgc3VwcG9ydHMgR0xfT0VTX3JnYjhfcmdiYTguCisg
ICAgaWYgKG5hbWUgPT0gIkdMX09FU19yZ2I4X3JnYmE4IikKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICAvLyBJZiBHTF9BUkJfdGV4dHVyZV9mbG9hdCBpcyBhdmFpbGFibGUgdGhlbiB3ZSBy
ZXBvcnQgR0xfT0VTX3RleHR1cmVfZmxvYXQgYW5kCisgICAgLy8gR0xfT0VTX3RleHR1cmVfaGFs
Zl9mbG9hdCBhcyBhdmFpbGFibGUuCisgICAgaWYgKG5hbWUgPT0gIkdMX09FU190ZXh0dXJlX2Zs
b2F0IiB8fCBuYW1lID09ICJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IikKKyAgICAgICAgcmV0
dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfQVJCX3RleHR1cmVfZmxvYXQi
KTsKKworICAgIC8vIEdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0CisgICAgaWYgKG5hbWUgPT0g
IkdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikKKyAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxl
RXh0ZW5zaW9ucy5jb250YWlucygiR0xfQVBQTEVfdmVydGV4X2FycmF5X29iamVjdCIpOworCisg
ICAgLy8gRGVza3RvcCBHTCBhbHdheXMgc3VwcG9ydHMgdGhlIHN0YW5kYXJkIGRlcml2YXRpdmUg
ZnVuY3Rpb25zCisgICAgaWYgKG5hbWUgPT0gIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKG5hbWUgPT0gIkdMX0VYVF90ZXh0dXJl
X2ZpbHRlcl9hbmlzb3Ryb3BpYyIpCisgICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lv
bnMuY29udGFpbnMoIkdMX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpOworCisgICAg
cmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucyhuYW1lKTsKK30KKworU3RyaW5n
IEV4dGVuc2lvbnMzRE9wZW5HTDo6Z2V0RXh0ZW5zaW9ucygpCit7CisgICAgcmV0dXJuIFN0cmlu
ZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPig6OmdsR2V0U3RyaW5nKEdMX0VYVEVOU0lP
TlMpKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShX
RUJHTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9FeHRlbnNpb25zM0RPcGVuR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaAppbmRleCAyYjJkMzBhMDkwZTU0ZmNhMWQwNjQ2
MmFlNzFkZDdlYzg3MmI1NDRjLi5hMjc4OWJkY2NjMDVkZWE0ZDZkZjliM2I0YzQ3NzdmN2IxOWVh
MTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
RXh0ZW5zaW9uczNET3BlbkdMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVm
IEV4dGVuc2lvbnMzRE9wZW5HTF9oCiAjZGVmaW5lIEV4dGVuc2lvbnMzRE9wZW5HTF9oCiAKLSNp
bmNsdWRlICJFeHRlbnNpb25zM0QuaCIKKyNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0xDb21t
b24uaCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KQEAgLTM0LDE1ICszNCwxMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIEV4dGVuc2lvbnMzRE9wZW5HTCA6IHB1YmxpYyBFeHRlbnNpb25zM0QgeworY2xhc3MgRXh0
ZW5zaW9uczNET3BlbkdMIDogcHVibGljIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbiB7CiBwdWJs
aWM6CiAgICAgdmlydHVhbCB+RXh0ZW5zaW9uczNET3BlbkdMKCk7CiAKICAgICAvLyBFeHRlbnNp
b25zM0QgbWV0aG9kcy4KLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHMoY29uc3QgU3RyaW5nJik7
Ci0gICAgdmlydHVhbCB2b2lkIGVuc3VyZUVuYWJsZWQoY29uc3QgU3RyaW5nJik7Ci0gICAgdmly
dHVhbCBib29sIGlzRW5hYmxlZChjb25zdCBTdHJpbmcmKTsKLSAgICB2aXJ0dWFsIGludCBnZXRH
cmFwaGljc1Jlc2V0U3RhdHVzQVJCKCk7CiAgICAgdmlydHVhbCB2b2lkIGJsaXRGcmFtZWJ1ZmZl
cihsb25nIHNyY1gwLCBsb25nIHNyY1kwLCBsb25nIHNyY1gxLCBsb25nIHNyY1kxLCBsb25nIGRz
dFgwLCBsb25nIGRzdFkwLCBsb25nIGRzdFgxLCBsb25nIGRzdFkxLCB1bnNpZ25lZCBsb25nIG1h
c2ssIHVuc2lnbmVkIGxvbmcgZmlsdGVyKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyYnVmZmVy
U3RvcmFnZU11bHRpc2FtcGxlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHNh
bXBsZXMsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgs
IHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKICAgICAKQEAgLTUwLDE0ICs0NiwxNiBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3Qp
OwogICAgIHZpcnR1YWwgR0MzRGJvb2xlYW4gaXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2Jq
ZWN0KTsKICAgICB2aXJ0dWFsIHZvaWQgYmluZFZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmpl
Y3QpOwotICAgIHZpcnR1YWwgU3RyaW5nIGdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShQ
bGF0Zm9ybTNET2JqZWN0KTsKICAgICB2aXJ0dWFsIHZvaWQgY29weVRleHR1cmVDSFJPTUlVTShH
QzNEZW51bSwgUGxhdGZvcm0zRE9iamVjdCwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGludCwgR0Mz
RGVudW0pOwogCi1wcml2YXRlOgorcHJvdGVjdGVkOgogICAgIC8vIFRoaXMgY2xhc3Mgb25seSBu
ZWVkcyB0byBiZSBpbnN0YW50aWF0ZWQgYnkgR3JhcGhpY3NDb250ZXh0M0QgaW1wbGVtZW50YXRp
b25zLgogICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKICAgICBFeHRlbnNpb25z
M0RPcGVuR0woR3JhcGhpY3NDb250ZXh0M0QqKTsKIAorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0
c0V4dGVuc2lvbihjb25zdCBXVEY6OlN0cmluZyYpOworICAgIHZpcnR1YWwgU3RyaW5nIGdldEV4
dGVuc2lvbnMoKTsKKwogICAgIGJvb2wgbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnM7
CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fYXZhaWxhYmxlRXh0ZW5zaW9uczsKICAgICAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25z
M0RPcGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjliZmZlNWI3MDgy
NjJhN2RhMjhkNDIzYzhlYzg1YTc1YzYxMTVjMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24u
Y3BwCkBAIC0wLDAgKzEsMTU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2lmIEVOQUJMRShXRUJHTCkKKyNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVu
R0xDb21tb24uaCIKKworI2luY2x1ZGUgIkFOR0xFV2ViS2l0QnJpZGdlLmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0M0QuaCIKKworI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCisjaW5jbHVk
ZSA8QmxhY2tCZXJyeVBsYXRmb3JtTG9nLmg+CisjZW5kaWYKKworI2lmIFVTRShPUEVOR0xfRVNf
MikKKyNpbmNsdWRlICJPcGVuR0xFU1NoaW1zLmgiCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Cisj
aW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+CisjZWxpZiBQTEFURk9STShNQUMpCisjaW5jbHVkZSA8
T3BlbkdML2dsLmg+CisjZWxpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkgfHwgUExB
VEZPUk0oUVQpCisjaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0V4dGVuc2lvbnMzRE9wZW5H
TENvbW1vbjo6RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uKEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0KQorICAgIDogbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnMoZmFsc2UpCisgICAg
LCBtX2NvbnRleHQoY29udGV4dCkKK3sKK30KKworRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjp+
RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uKCkKK3sKK30KKworYm9vbCBFeHRlbnNpb25zM0RPcGVu
R0xDb21tb246OnN1cHBvcnRzKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAoIW1faW5p
dGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zKQorICAgICAgICBpbml0aWFsaXplQXZhaWxhYmxl
RXh0ZW5zaW9ucygpOworCisgICAgcmV0dXJuIHN1cHBvcnRzRXh0ZW5zaW9uKG5hbWUpOworfQor
Cit2b2lkIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6ZW5zdXJlRW5hYmxlZChjb25zdCBTdHJp
bmcmIG5hbWUpCit7CisgICAgaWYgKG5hbWUgPT0gIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZl
cyIpIHsKKyAgICAgICAgLy8gRW5hYmxlIHN1cHBvcnQgaW4gQU5HTEUgKGlmIG5vdCBlbmFibGVk
IGFscmVhZHkpCisgICAgICAgIEFOR0xFV2ViS2l0QnJpZGdlJiBjb21waWxlciA9IG1fY29udGV4
dC0+bV9jb21waWxlcjsKKyAgICAgICAgU2hCdWlsdEluUmVzb3VyY2VzIEFOR0xFUmVzb3VyY2Vz
ID0gY29tcGlsZXIuZ2V0UmVzb3VyY2VzKCk7CisgICAgICAgIGlmICghQU5HTEVSZXNvdXJjZXMu
T0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzKSB7CisgICAgICAgICAgICBBTkdMRVJlc291cmNlcy5P
RVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgPSAxOworICAgICAgICAgICAgY29tcGlsZXIuc2V0UmVz
b3VyY2VzKEFOR0xFUmVzb3VyY2VzKTsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBFeHRl
bnNpb25zM0RPcGVuR0xDb21tb246OmlzRW5hYmxlZChjb25zdCBTdHJpbmcmIG5hbWUpCit7Cisg
ICAgaWYgKG5hbWUgPT0gIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpIHsKKyAgICAgICAg
QU5HTEVXZWJLaXRCcmlkZ2UmIGNvbXBpbGVyID0gbV9jb250ZXh0LT5tX2NvbXBpbGVyOworICAg
ICAgICByZXR1cm4gY29tcGlsZXIuZ2V0UmVzb3VyY2VzKCkuT0VTX3N0YW5kYXJkX2Rlcml2YXRp
dmVzOworICAgIH0KKyAgICByZXR1cm4gc3VwcG9ydHMobmFtZSk7Cit9CisKK2ludCBFeHRlbnNp
b25zM0RPcGVuR0xDb21tb246OmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKQoreworICAgIHJl
dHVybiBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I7Cit9CisKK1N0cmluZyBFeHRlbnNpb25z
M0RPcGVuR0xDb21tb246OmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShQbGF0Zm9ybTNE
T2JqZWN0IHNoYWRlcikKK3sKKyAgICBBU1NFUlQoc2hhZGVyKTsKKyAgICBpbnQgR0xzaGFkZXJU
eXBlOworICAgIEFOR0xFU2hhZGVyVHlwZSBzaGFkZXJUeXBlOworCisgICAgQU5HTEVXZWJLaXRC
cmlkZ2UmIGNvbXBpbGVyID0gbV9jb250ZXh0LT5tX2NvbXBpbGVyOworCisgICAgbV9jb250ZXh0
LT5nZXRTaGFkZXJpdihzaGFkZXIsIEdyYXBoaWNzQ29udGV4dDNEOjpTSEFERVJfVFlQRSwgJkdM
c2hhZGVyVHlwZSk7CisKKyAgICBpZiAoR0xzaGFkZXJUeXBlID09IEdyYXBoaWNzQ29udGV4dDNE
OjpWRVJURVhfU0hBREVSKQorICAgICAgICBzaGFkZXJUeXBlID0gU0hBREVSX1RZUEVfVkVSVEVY
OworICAgIGVsc2UgaWYgKEdMc2hhZGVyVHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6RlJBR01F
TlRfU0hBREVSKQorICAgICAgICBzaGFkZXJUeXBlID0gU0hBREVSX1RZUEVfRlJBR01FTlQ7Cisg
ICAgZWxzZQorICAgICAgICByZXR1cm4gIiI7IC8vIEludmFsaWQgc2hhZGVyIHR5cGUuCisKKyAg
ICBIYXNoTWFwPFBsYXRmb3JtM0RPYmplY3QsIEdyYXBoaWNzQ29udGV4dDNEOjpTaGFkZXJTb3Vy
Y2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fY29udGV4dC0+bV9zaGFkZXJTb3VyY2VNYXAu
ZmluZChzaGFkZXIpOworCisgICAgaWYgKHJlc3VsdCA9PSBtX2NvbnRleHQtPm1fc2hhZGVyU291
cmNlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gIiI7CisKKyAgICBHcmFwaGljc0NvbnRleHQz
RDo6U2hhZGVyU291cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT5zZWNvbmQ7CisKKyAgICBTdHJp
bmcgdHJhbnNsYXRlZFNoYWRlclNvdXJjZTsKKyAgICBTdHJpbmcgc2hhZGVySW5mb0xvZzsKKwor
ICAgIGJvb2wgaXNWYWxpZCA9IGNvbXBpbGVyLnZhbGlkYXRlU2hhZGVyU291cmNlKGVudHJ5LnNv
dXJjZS51dGY4KCkuZGF0YSgpLCBzaGFkZXJUeXBlLCB0cmFuc2xhdGVkU2hhZGVyU291cmNlLCBz
aGFkZXJJbmZvTG9nKTsKKworICAgIGVudHJ5LmxvZyA9IHNoYWRlckluZm9Mb2c7CisgICAgZW50
cnkuaXNWYWxpZCA9IGlzVmFsaWQ7CisKKyAgICBpZiAoIWlzVmFsaWQpCisgICAgICAgIHJldHVy
biAiIjsKKworI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCisgICAgLy8gT3VyIGhhcmR3YXJlIHJl
YWxseSBsaWtlcyBiZWluZyB0b2xkIHdoYXQgcHJlY2lzaW9uIHRvIGhhdmUgKGkuZS4sIHdpdGgg
InByZWNpc2lvbiAqIGZsb2F0IikKKyAgICAvLyBBTkdMRSBzdHJpcHMgdGhpcyBpbmZvcm1hdGlv
bi4KKyAgICBpZiAoZW50cnkuc291cmNlLmNvbnRhaW5zKCJwcmVjaXNpb24gbG93cCBmbG9hdCIp
KQorICAgICAgICB0cmFuc2xhdGVkU2hhZGVyU291cmNlPSJwcmVjaXNpb24gbG93cCBmbG9hdDtc
biIrdHJhbnNsYXRlZFNoYWRlclNvdXJjZTsKKyAgICBlbHNlIGlmIChlbnRyeS5zb3VyY2UuY29u
dGFpbnMoInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0IikpCisgICAgICAgIHRyYW5zbGF0ZWRTaGFk
ZXJTb3VyY2U9InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuIit0cmFuc2xhdGVkU2hhZGVyU291
cmNlOworICAgIGVsc2UKKyAgICAgICAgdHJhbnNsYXRlZFNoYWRlclNvdXJjZT0icHJlY2lzaW9u
IGhpZ2hwIGZsb2F0O1xuIit0cmFuc2xhdGVkU2hhZGVyU291cmNlOworI2VuZGlmCisgICAgcmV0
dXJuIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uczNET3BlbkdM
Q29tbW9uOjppbml0aWFsaXplQXZhaWxhYmxlRXh0ZW5zaW9ucygpCit7CisgICAgU3RyaW5nIGV4
dGVuc2lvbnNTdHJpbmcgPSBnZXRFeHRlbnNpb25zKCk7CisgICAgVmVjdG9yPFN0cmluZz4gYXZh
aWxhYmxlRXh0ZW5zaW9uczsKKyAgICBleHRlbnNpb25zU3RyaW5nLnNwbGl0KCIgIiwgYXZhaWxh
YmxlRXh0ZW5zaW9ucyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhdmFpbGFibGVFeHRl
bnNpb25zLnNpemUoKTsgKytpKQorICAgICAgICBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuYWRkKGF2
YWlsYWJsZUV4dGVuc2lvbnNbaV0pOworICAgIG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNp
b25zID0gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjkwMTgzOWU2ZTNlNGI5NWExZTU2NmNkMTFmOGEyN2Q2OWJlYjM5ZTUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNE
T3BlbkdMQ29tbW9uLmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRXh0ZW5zaW9u
czNET3BlbkdMQ29tbW9uX2gKKyNkZWZpbmUgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uX2gKKwor
I2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0Qu
aCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hh
c2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBFeHRlbnNpb25zM0RPcGVuR0xD
b21tb24gOiBwdWJsaWMgRXh0ZW5zaW9uczNEIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5FeHRl
bnNpb25zM0RPcGVuR0xDb21tb24oKTsKKworICAgIC8vIEV4dGVuc2lvbnMzRCBtZXRob2RzLgor
ICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0cyhjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZW5zdXJlRW5hYmxlZChjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNFbmFi
bGVkKGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgaW50IGdldEdyYXBoaWNzUmVzZXRTdGF0
dXNBUkIoKTsKKworICAgIHZpcnR1YWwgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVWZXJ0ZXhBcnJh
eU9FUygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZv
cm0zRE9iamVjdCkgPSAwOworICAgIHZpcnR1YWwgR0MzRGJvb2xlYW4gaXNWZXJ0ZXhBcnJheU9F
UyhQbGF0Zm9ybTNET2JqZWN0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJpbmRWZXJ0ZXhBcnJh
eU9FUyhQbGF0Zm9ybTNET2JqZWN0KSA9IDA7CisKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRUcmFu
c2xhdGVkU2hhZGVyU291cmNlQU5HTEUoUGxhdGZvcm0zRE9iamVjdCk7CisKK3Byb3RlY3RlZDoK
KyAgICBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24oR3JhcGhpY3NDb250ZXh0M0QqKTsKKworICAg
IHZpcnR1YWwgdm9pZCBpbml0aWFsaXplQXZhaWxhYmxlRXh0ZW5zaW9ucygpOworICAgIHZpcnR1
YWwgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBTdHJpbmcmKSA9IDA7CisgICAgdmlydHVh
bCBTdHJpbmcgZ2V0RXh0ZW5zaW9ucygpID0gMDsKKworICAgIGJvb2wgbV9pbml0aWFsaXplZEF2
YWlsYWJsZUV4dGVuc2lvbnM7CisgICAgSGFzaFNldDxTdHJpbmc+IG1fYXZhaWxhYmxlRXh0ZW5z
aW9uczsKKworICAgIC8vIFdlYWsgcG9pbnRlciBiYWNrIHRvIEdyYXBoaWNzQ29udGV4dDNECisg
ICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbl9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3Bl
bkdMRVMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVu
c2lvbnMzRE9wZW5HTEVTLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YzY1MDcxNWVlZTIyM2E5ZDA3NzBjZGQy
NjFkMTQxNTIxYzNmMmE3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmNwcApAQCAtMCwwICsxLDE0
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgRU5B
QkxFKFdFQkdMKQorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTEVTLmgiCisKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgPEVHTC9lZ2wuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitFeHRlbnNpb25zM0RPcGVu
R0xFUzo6RXh0ZW5zaW9uczNET3BlbkdMRVMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisg
ICAgOiBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24oY29udGV4dCkKKyAgICAsIG1fc3VwcG9ydHNP
RVN2ZXJ0ZXhBcnJheU9iamVjdChmYWxzZSkKKyAgICAsIG1fc3VwcG9ydHNJTUdNdWx0aXNhbXBs
ZWRSZW5kZXJUb1RleHR1cmUoZmFsc2UpCisgICAgLCBtX2dsRnJhbWVidWZmZXJUZXh0dXJlMkRN
dWx0aXNhbXBsZUlNRygwKQorICAgICwgbV9nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBs
ZUlNRygwKQorICAgICwgbV9nbEJpbmRWZXJ0ZXhBcnJheU9FUygwKQorICAgICwgbV9nbERlbGV0
ZVZlcnRleEFycmF5c09FUygwKQorICAgICwgbV9nbEdlblZlcnRleEFycmF5c09FUygwKQorICAg
ICwgbV9nbElzVmVydGV4QXJyYXlPRVMoMCkKK3sKK30KKworRXh0ZW5zaW9uczNET3BlbkdMRVM6
On5FeHRlbnNpb25zM0RPcGVuR0xFUygpCit7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uczNET3BlbkdM
RVM6OmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIHVu
c2lnbmVkIGludCB0ZXh0dXJlLCBpbnQgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcykKK3sK
KyAgICBpZiAobV9nbEZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcpCisgICAgICAg
IG1fZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HKHRhcmdldCwgYXR0YWNobWVu
dCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCwgc2FtcGxlcyk7CisgICAgZWxzZQorICAgICAg
ICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKK30K
Kwordm9pZCBFeHRlbnNpb25zM0RPcGVuR0xFUzo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2Ft
cGxlSU1HKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHNhbXBsZXMsIHVuc2ln
bmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxv
bmcgaGVpZ2h0KQoreworICAgIGlmIChtX2dsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxl
SU1HKQorICAgICAgICBtX2dsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HKHRhcmdl
dCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgIGVsc2UKKyAg
ICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgRXh0ZW5zaW9uczNET3BlbkdMRVM6OmNyZWF0ZVZlcnRl
eEFycmF5T0VTKCkKK3sKKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmIChtX2dsR2VuVmVydGV4QXJyYXlzT0VTKSB7CisgICAgICAgIEdMdWludCBhcnJheSA9IDA7
CisgICAgICAgIG1fZ2xHZW5WZXJ0ZXhBcnJheXNPRVMoMSwgJmFycmF5KTsKKyAgICAgICAgcmV0
dXJuIGFycmF5OworICAgIH0KKworICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgIHJldHVybiAwOworfQorCit2b2lkIEV4dGVuc2lvbnMz
RE9wZW5HTEVTOjpkZWxldGVWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQor
eworICAgIGlmICghYXJyYXkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4dC0+bWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMpCisg
ICAgICAgIG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMoMSwgJmFycmF5KTsKKyAgICBlbHNlCisg
ICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworfQorCitHQzNEYm9vbGVhbiBFeHRlbnNpb25zM0RPcGVuR0xFUzo6aXNWZXJ0ZXhBcnJheU9F
UyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQoreworICAgIGlmICghYXJyYXkpCisgICAgICAgIHJl
dHVybiBHTF9GQUxTRTsKKworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKG1fZ2xJc1ZlcnRleEFycmF5T0VTKQorICAgICAgICByZXR1cm4gbV9nbElzVmVydGV4
QXJyYXlPRVMoYXJyYXkpOworCisgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEV4dGVuc2lv
bnMzRE9wZW5HTEVTOjpiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkK
K3sKKyAgICBpZiAoIWFycmF5KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmIChtX2dsQmluZFZlcnRleEFycmF5T0VTKQorICAg
ICAgICBtX2dsQmluZFZlcnRleEFycmF5T0VTKGFycmF5KTsKKyAgICBlbHNlCisgICAgICAgIG1f
Y29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworfQorCisK
K2Jvb2wgRXh0ZW5zaW9uczNET3BlbkdMRVM6OnN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IFN0cmlu
ZyYgbmFtZSkKK3sKKyAgICBpZiAobV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKG5hbWUp
KSB7CisgICAgICAgIGlmIChuYW1lID09ICJHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdCIgJiYg
IW1fc3VwcG9ydHNPRVN2ZXJ0ZXhBcnJheU9iamVjdCkgeworICAgICAgICAgICAgbV9nbEJpbmRW
ZXJ0ZXhBcnJheU9FUyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xCSU5EVkVSVEVYQVJSQVlPRVNQ
Uk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xCaW5kVmVydGV4QXJyYXlPRVMiKSk7CisgICAgICAg
ICAgICBtX2dsR2VuVmVydGV4QXJyYXlzT0VTID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTEdFTlZF
UlRFWEFSUkFZU09FU1BST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbEdlblZlcnRleEFycmF5c09F
UyIpKTsKKyAgICAgICAgICAgIG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMgPSByZWludGVycHJl
dF9jYXN0PFBGTkdMREVMRVRFVkVSVEVYQVJSQVlTT0VTUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3Mo
ImdsRGVsZXRlVmVydGV4QXJyYXlzT0VTIikpOworICAgICAgICAgICAgbV9nbElzVmVydGV4QXJy
YXlPRVMgPSByZWludGVycHJldF9jYXN0PFBGTkdMSVNWRVJURVhBUlJBWU9FU1BST0M+KGVnbEdl
dFByb2NBZGRyZXNzKCJnbElzVmVydGV4QXJyYXlPRVMiKSk7CisgICAgICAgICAgICBtX3N1cHBv
cnRzT0VTdmVydGV4QXJyYXlPYmplY3QgPSB0cnVlOworICAgICAgICB9IGVsc2UgaWYgKG5hbWUg
PT0gIkdMX0lNR19tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiICYmICFtX3N1cHBvcnRz
SU1HTXVsdGlzYW1wbGVkUmVuZGVyVG9UZXh0dXJlKSB7CisgICAgICAgICAgICBtX2dsRnJhbWVi
dWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xGUkFN
RUJVRkZFUlRFWFRVUkUyRE1VTFRJU0FNUExFSU1HUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImds
RnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRyIpKTsKKyAgICAgICAgICAgIG1fZ2xS
ZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUcgPSByZWludGVycHJldF9jYXN0PFBGTkdM
UkVOREVSQlVGRkVSU1RPUkFHRU1VTFRJU0FNUExFSU1HUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3Mo
ImdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HIikpOworICAgICAgICAgICAgbV9z
dXBwb3J0c0lNR011bHRpc2FtcGxlZFJlbmRlclRvVGV4dHVyZSA9IHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitT
dHJpbmcgRXh0ZW5zaW9uczNET3BlbkdMRVM6OmdldEV4dGVuc2lvbnMoKQoreworICAgIHJldHVy
biBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhHTF9F
WFRFTlNJT05TKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkwMjIy
Y2E0ZDdhOTRhMDhjMmY5NzU2MTRiZjJiYzYwZTAwMWUwOTUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdM
RVMuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBFeHRlbnNpb25zM0RPcGVuR0xF
U19oCisjZGVmaW5lIEV4dGVuc2lvbnMzRE9wZW5HTEVTX2gKKworI2luY2x1ZGUgIkV4dGVuc2lv
bnMzRE9wZW5HTENvbW1vbi5oIgorCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjaW5jbHVkZSA8
R0xFUzIvZ2wyZXh0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRXh0ZW5zaW9u
czNET3BlbkdMRVMgOiBwdWJsaWMgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uIHsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIH5FeHRlbnNpb25zM0RPcGVuR0xFUygpOworCisgICAgdmlydHVhbCB2b2lk
IGZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcodW5zaWduZWQgbG9uZyB0YXJnZXQs
IHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIHVuc2ln
bmVkIGludCB0ZXh0dXJlLCBpbnQgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcyk7CisgICAg
dmlydHVhbCB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRyh1bnNpZ25lZCBs
b25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFs
Zm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7CisKKyAg
ICB2aXJ0dWFsIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlVmVydGV4QXJyYXlPRVMoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCk7CisgICAg
dmlydHVhbCBHQzNEYm9vbGVhbiBpc1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpOwor
ICAgIHZpcnR1YWwgdm9pZCBiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCk7CisK
K3Byb3RlY3RlZDoKKyAgICAvLyBUaGlzIGNsYXNzIG9ubHkgbmVlZHMgdG8gYmUgaW5zdGFudGlh
dGVkIGJ5IEdyYXBoaWNzQ29udGV4dDNEIGltcGxlbWVudGF0aW9ucy4KKyAgICBmcmllbmQgY2xh
c3MgR3JhcGhpY3NDb250ZXh0M0Q7CisgICAgRXh0ZW5zaW9uczNET3BlbkdMRVMoR3JhcGhpY3ND
b250ZXh0M0QqKTsKKworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBT
dHJpbmcmKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRFeHRlbnNpb25zKCk7CisKKyAgICBib29s
IG1fc3VwcG9ydHNPRVN2ZXJ0ZXhBcnJheU9iamVjdDsKKyAgICBib29sIG1fc3VwcG9ydHNJTUdN
dWx0aXNhbXBsZWRSZW5kZXJUb1RleHR1cmU7CisKKyAgICBQRk5HTEZSQU1FQlVGRkVSVEVYVFVS
RTJETVVMVElTQU1QTEVJTUdQUk9DIG1fZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxl
SU1HOworICAgIFBGTkdMUkVOREVSQlVGRkVSU1RPUkFHRU1VTFRJU0FNUExFSU1HUFJPQyBtX2ds
UmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HOworICAgIFBGTkdMQklORFZFUlRFWEFS
UkFZT0VTUFJPQyBtX2dsQmluZFZlcnRleEFycmF5T0VTOworICAgIFBGTkdMREVMRVRFVkVSVEVY
QVJSQVlTT0VTUFJPQyBtX2dsRGVsZXRlVmVydGV4QXJyYXlzT0VTOworICAgIFBGTkdMR0VOVkVS
VEVYQVJSQVlTT0VTUFJPQyBtX2dsR2VuVmVydGV4QXJyYXlzT0VTOworICAgIFBGTkdMSVNWRVJU
RVhBUlJBWU9FU1BST0MgbV9nbElzVmVydGV4QXJyYXlPRVM7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFeHRlbnNpb25zM0RPcGVuR0xFU19oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
M0RPcGVuR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dy
YXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAppbmRleCAzZjQ3YjZlMjFlYjI1NTI0M2VlZWE0YmYz
MTk4NTNhYmJmNzZhMmRjLi41ZjAwNTA1OTljNmFiNmI0MTMyMDMyNTgwYTU0MGEzYzI2ZTcyOWI1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3Jh
cGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKQEAgLTM0LDYgKzM0LDEx
IEBACiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAK
KyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8Y3N0cmluZz4KKyNpbmNsdWRlIDx3dGYv
VW51c2VkUGFyYW0uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKICNpZiBQTEFU
Rk9STShNQUMpCiAjaW5jbHVkZSA8T3BlbkdML2dsLmg+CiAjZWxpZiBQTEFURk9STShHVEspIHx8
IFBMQVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oUVQpCkBAIC00Nyw2ICs1MiwzMiBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzQW5kQ29udmVydFRvQkdSQUlmTmVjZXNzYXJ5KGlu
dCB4LCBpbnQgeSwgaW50CiAgICAgOjpnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwg
R0xfQkdSQSwgR0xfVU5TSUdORURfSU5UXzhfOF84XzhfUkVWLCBwaXhlbHMpOwogfQogCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZUF0dHJpYnV0ZXMoKQoreworICAgIEV4dGVuc2lv
bnMzRCogZXh0ZW5zaW9ucyA9IGdldEV4dGVuc2lvbnMoKTsKKyAgICBpZiAobV9hdHRycy5zdGVu
Y2lsKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbiA9
IGlzR0xFUzJDb21wbGlhbnQoKSA/ICJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiIDogIkdM
X0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCI7CisgICAgICAgIGlmIChleHRlbnNpb25zLT5zdXBw
b3J0cyhwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pKSB7CisgICAgICAgICAgICBleHRlbnNp
b25zLT5lbnN1cmVFbmFibGVkKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbik7CisgICAgICAg
ICAgICAvLyBGb3JjZSBkZXB0aCBpZiBzdGVuY2lsIGlzIHRydWUuCisgICAgICAgICAgICBtX2F0
dHJzLmRlcHRoID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2F0dHJzLnN0
ZW5jaWwgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7CisgICAg
ICAgIGJvb2wgaXNWYWxpZFZlbmRvciA9IHRydWU7CisgICAgICAgIC8vIEN1cnJlbnRseSBpbiBN
YWMgd2Ugb25seSB0dXJuIG9uIGFudGlhbGlhcyBpZiB2ZW5kb3IgaXMgTlZJRElBLAorICAgICAg
ICAvLyBvciBpZiBBVEkgYW5kIG9uIDEwLjcuMiBhbmQgYWJvdmUuCisgICAgICAgIGNvbnN0IGNo
YXIqIHZlbmRvciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KDo6Z2xHZXRTdHJpbmco
R0xfVkVORE9SKSk7CisgICAgICAgIGlmICghdmVuZG9yIHx8ICghc3RkOjpzdHJzdHIodmVuZG9y
LCAiTlZJRElBIikgJiYgIShzdGQ6OnN0cnN0cih2ZW5kb3IsICJBVEkiKSAmJiBzeXN0ZW1BbGxv
d3NNdWx0aXNhbXBsaW5nT25BVElDYXJkcygpKSkpCisgICAgICAgICAgICBpc1ZhbGlkVmVuZG9y
ID0gZmFsc2U7CisgICAgICAgIGlmICghaXNWYWxpZFZlbmRvciB8fCAhZXh0ZW5zaW9ucy0+c3Vw
cG9ydHMoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIikgfHwgaXNHTEVTMkNvbXBs
aWFudCgpKQorICAgICAgICAgICAgbV9hdHRycy5hbnRpYWxpYXMgPSBmYWxzZTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVfZnJh
bWVidWZmZXJfbXVsdGlzYW1wbGUiKTsKKyAgICB9Cit9CisKIGJvb2wgR3JhcGhpY3NDb250ZXh0
M0Q6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAgICAgY29uc3QgaW50IHdp
ZHRoID0gc2l6ZS53aWR0aCgpOwpAQCAtMTUxLDYgKzE4Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoY29uc3QgSW50UmVjdCYgcmVj
dCkKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0KQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCiAgICAgc3dpdGNoIChp
bnRlcm5hbGZvcm1hdCkgewogICAgIGNhc2UgREVQVEhfU1RFTkNJTDoKICAgICAgICAgaW50ZXJu
YWxmb3JtYXQgPSBHTF9ERVBUSDI0X1NURU5DSUw4X0VYVDsKQEAgLTIzMiw2ICsyNjQsNyBAQCBi
b29sIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGVudW0gaW50ZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworCiAgICAgR0MzRGVudW0gb3BlbkdMSW50ZXJuYWxGb3Jt
YXQgPSBpbnRlcm5hbGZvcm1hdDsKICAgICBpZiAodHlwZSA9PSBHTF9GTE9BVCkgewogICAgICAg
ICBpZiAoZm9ybWF0ID09IEdMX1JHQkEpCkBAIC0yNDEsNiArMjc0LDcgQEAgYm9vbCBHcmFwaGlj
c0NvbnRleHQzRDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RlbnVtIGludGUKICAgICB9CiAKICAgICA6OmdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBv
cGVuR0xJbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUs
IHBpeGVscyk7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjU2LDYgKzI5MCwzMyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRlcHRoKEdDM0RjbGFtcGYgZGVwdGgpCiAgICAg
OjpnbENsZWFyRGVwdGgoZGVwdGgpOwogfQogCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpzeXN0
ZW1BbGxvd3NNdWx0aXNhbXBsaW5nT25BVElDYXJkcygpCit7CisjaWYgUExBVEZPUk0oTUFDKQor
I2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJ
TkdfT05fTElPTikKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKyAgICBzdGF0aWMgU0ludDMyIHZlcnNpb247CisgICAgaWYgKCF2ZXJzaW9uKSB7
CisgICAgICAgIGlmIChHZXN0YWx0KGdlc3RhbHRTeXN0ZW1WZXJzaW9uLCAmdmVyc2lvbikgIT0g
bm9FcnIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIC8vIFNlZSBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc5MjIgZm9yIG1vcmUgZGV0YWls
cworICAgIHJldHVybiB2ZXJzaW9uID49IDB4MTA3MjsKKyNlbmRpZiAvLyBTTk9XX0xFT1BBUkQg
YW5kIExJT04KKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmIC8vIFBMQVRGT1JNKE1B
QykKK30KKworRXh0ZW5zaW9uczNEKiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXh0ZW5zaW9ucygp
Cit7CisgICAgaWYgKCFtX2V4dGVuc2lvbnMpCisgICAgICAgIG1fZXh0ZW5zaW9ucyA9IGFkb3B0
UHRyKG5ldyBFeHRlbnNpb25zM0RPcGVuR0wodGhpcykpOworICAgIHJldHVybiBtX2V4dGVuc2lv
bnMuZ2V0KCk7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQz
RE9wZW5HTENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCmluZGV4IDQyOWZjNTFjOTA0NmM0
NGE1MGVmZWNlMTI5Y2JmMzFmNjBkOTk3NWUuLjc2MmUzOWYwOWRhYTk2ZjVjMGRhNzM0ODQwOTQx
ODQ1YWRlYTliZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29t
bW9uLmNwcApAQCAtMzAsNyArMzAsMTIgQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNE
LmgiCiAKKyNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCisjaWYgVVNFKE9QRU5H
TF9FU18yKQorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTEVTLmgiCisjZWxzZQogI2luY2x1
ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTC5oIgorI2VuZGlmCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJJbWFnZURhdGEuaCIK
QEAgLTQ5LDM5ICs1NCwyNCBAQAogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBVU0UoT1BF
TkdMX0VTXzIpCisjaW5jbHVkZSAiT3BlbkdMRVNTaGltcy5oIgorI2VsaWYgUExBVEZPUk0oTUFD
KQogI2luY2x1ZGUgPE9wZW5HTC9nbC5oPgogI2VsaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9S
TShFRkwpIHx8IFBMQVRGT1JNKFFUKQogI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCiAjZW5kaWYK
IAotbmFtZXNwYWNlIFdlYkNvcmUgeworI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCisjaW5jbHVk
ZSA8QmxhY2tCZXJyeVBsYXRmb3JtTG9nLmg+CisjZW5kaWYKIAotc3RhdGljIGJvb2wgc3lzdGVt
QWxsb3dzTXVsdGlzYW1wbGluZ09uQVRJQ2FyZHMoKQotewotI2lmIFBMQVRGT1JNKE1BQykKLSNp
ZiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5H
X09OX0xJT04pCi0gICAgcmV0dXJuIHRydWU7Ci0jZWxzZQotICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7Ci0gICAgc3RhdGljIFNJbnQzMiB2ZXJzaW9uOwotICAgIGlmICghdmVyc2lvbikgewot
ICAgICAgICBpZiAoR2VzdGFsdChnZXN0YWx0U3lzdGVtVmVyc2lvbiwgJnZlcnNpb24pICE9IG5v
RXJyKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAvLyBTZWUgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3OTIyIGZvciBtb3JlIGRldGFpbHMK
LSAgICByZXR1cm4gdmVyc2lvbiA+PSAweDEwNzI7Ci0jZW5kaWYgLy8gU05PV19MRU9QQVJEIGFu
ZCBMSU9OCi0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZiAvLyBQTEFURk9STShNQUMp
Ci19CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlk
YXRlQXR0cmlidXRlcygpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZURlcHRoU3Rl
bmNpbChjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pCiB7CiAgICAgRXh0
ZW5zaW9uczNEKiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOwogICAgIGlmIChtX2F0dHJz
LnN0ZW5jaWwpIHsKLSAgICAgICAgY29uc3QgY2hhciogcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5z
aW9uID0gaXNHTEVTMkNvbXBsaWFudCgpID8gIkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCIg
OiAiR0xfRVhUX3BhY2tlZF9kZXB0aF9zdGVuY2lsIjsKICAgICAgICAgaWYgKGV4dGVuc2lvbnMt
PnN1cHBvcnRzKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbikpIHsKICAgICAgICAgICAgIGV4
dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKTsKICAg
ICAgICAgICAgIC8vIEZvcmNlIGRlcHRoIGlmIHN0ZW5jaWwgaXMgdHJ1ZS4KQEAgLTQzOSwzNiAr
NDI5LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm0z
RE9iamVjdCBzaGFkZXIpCiAgICAgQVNTRVJUKHNoYWRlcik7CiAgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CiAKLSAgICBpbnQgR0xzaGFkZXJUeXBlOwotICAgIEFOR0xFU2hhZGVyVHlwZSBzaGFk
ZXJUeXBlOwotCi0gICAgZ2xHZXRTaGFkZXJpdihzaGFkZXIsIFNIQURFUl9UWVBFLCAmR0xzaGFk
ZXJUeXBlKTsKLSAgICAKLSAgICBpZiAoR0xzaGFkZXJUeXBlID09IFZFUlRFWF9TSEFERVIpCi0g
ICAgICAgIHNoYWRlclR5cGUgPSBTSEFERVJfVFlQRV9WRVJURVg7Ci0gICAgZWxzZSBpZiAoR0xz
aGFkZXJUeXBlID09IEZSQUdNRU5UX1NIQURFUikKLSAgICAgICAgc2hhZGVyVHlwZSA9IFNIQURF
Ul9UWVBFX0ZSQUdNRU5UOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuOyAvLyBJbnZhbGlkIHNo
YWRlciB0eXBlLgotCi0gICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJTb3VyY2VF
bnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsK
KyAgICBTdHJpbmcgdHJhbnNsYXRlZFNoYWRlclNvdXJjZSA9IG1fZXh0ZW5zaW9ucy0+Z2V0VHJh
bnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKHNoYWRlcik7CiAKLSAgICBpZiAocmVzdWx0ID09IG1f
c2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgIGlmICghdHJhbnNsYXRlZFNoYWRlclNvdXJjZS5s
ZW5ndGgoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU2hhZGVyU291cmNlRW50cnkmIGVudHJ5
ID0gcmVzdWx0LT5zZWNvbmQ7Ci0KLSAgICBTdHJpbmcgdHJhbnNsYXRlZFNoYWRlclNvdXJjZTsK
LSAgICBTdHJpbmcgc2hhZGVySW5mb0xvZzsKLQotICAgIGJvb2wgaXNWYWxpZCA9IG1fY29tcGls
ZXIudmFsaWRhdGVTaGFkZXJTb3VyY2UoZW50cnkuc291cmNlLnV0ZjgoKS5kYXRhKCksIHNoYWRl
clR5cGUsIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UsIHNoYWRlckluZm9Mb2cpOwotCi0gICAgZW50
cnkubG9nID0gc2hhZGVySW5mb0xvZzsKLSAgICBlbnRyeS5pc1ZhbGlkID0gaXNWYWxpZDsKLQot
ICAgIGlmICghaXNWYWxpZCkKLSAgICAgICAgcmV0dXJuOyAvLyBTaGFkZXIgZGlkbid0IHZhbGlk
YXRlLCBkb24ndCBtb3ZlIGZvcndhcmQgd2l0aCBjb21waWxpbmcgdHJhbnNsYXRlZCBzb3VyY2Uu
Ci0KICAgICBpbnQgdHJhbnNsYXRlZFNoYWRlckxlbmd0aCA9IHRyYW5zbGF0ZWRTaGFkZXJTb3Vy
Y2UubGVuZ3RoKCk7CiAKICAgICBjb25zdCBDU3RyaW5nJiB0cmFuc2xhdGVkU2hhZGVyQ1N0cmlu
ZyA9IHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UudXRmOCgpOwpAQCAtODAxLDE4ICs3NjYsNjEgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2kKICAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKICAgICAgICAgOjpnbEZsdXNo
KCk7CiAgICAgfQorICAgIC8vIEN1cnJlbnRseSBvbmx5IGZvcm1hdD1SR0JBLCB0eXBlPVVOU0lH
TkVEX0JZVEUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBzcGVjaWZpY2F0aW9uOiBodHRwOi8vd3d3Lmto
cm9ub3Mub3JnL3JlZ2lzdHJ5L3dlYmdsL3NwZWNzL2xhdGVzdC8KKyAgICAvLyBJZiB0aGlzIGV2
ZXIgY2hhbmdlcywgdGhpcyBjb2RlIHdpbGwgbmVlZCB0byBiZSB1cGRhdGVkLgorCisgICAgLy8g
Q2FsY3VsYXRlIHRoZSBzdHJpZGVzIG9mIG91ciBkYXRhIGFuZCBjYW52YXMKKyAgICB1bnNpZ25l
ZCBpbnQgZm9ybWF0U2l6ZSA9IDQ7IC8vIFJHQkEgVU5TSUdORURfQllURQorICAgIHVuc2lnbmVk
IGludCBkYXRhU3RyaWRlID0gd2lkdGggKiBmb3JtYXRTaXplOworICAgIHVuc2lnbmVkIGludCBj
YW52YXNTdHJpZGUgPSBtX2N1cnJlbnRXaWR0aCAqIGZvcm1hdFNpemU7CisKKyAgICAvLyBJZiB3
ZSBhcmUgdXNpbmcgYSBwYWNrIGFsaWdubWVudCBvZiA4LCB0aGVuIHdlIG5lZWQgdG8gYWxpZ24g
b3VyIHN0cmlkZXMgdG8gOCBieXRlIGJvdW5kYXJpZXMKKyAgICAvLyBTZWU6IGh0dHA6Ly9lbi53
aWtpcGVkaWEub3JnL3dpa2kvRGF0YV9zdHJ1Y3R1cmVfYWxpZ25tZW50IChjb21wdXRpbmcgcGFk
ZGluZykKKyAgICBpbnQgcGFja0FsaWdubWVudDsKKyAgICBnbEdldEludGVnZXJ2KEdMX1BBQ0tf
QUxJR05NRU5ULCAmcGFja0FsaWdubWVudCk7CisgICAgaWYgKDggPT0gcGFja0FsaWdubWVudCkg
eworICAgICAgICBkYXRhU3RyaWRlID0gKGRhdGFTdHJpZGUgKyA3KSAmIH43OworICAgICAgICBj
YW52YXNTdHJpZGUgPSAoY2FudmFzU3RyaWRlICsgNykgJiB+NzsKKyAgICB9CisKKyAgICB1bnNp
Z25lZCBjaGFyKiBjYW52YXNEYXRhID0gbmV3IHVuc2lnbmVkIGNoYXJbY2FudmFzU3RyaWRlICog
bV9jdXJyZW50SGVpZ2h0XTsKKyAgICA6OmdsUmVhZFBpeGVscygwLCAwLCBtX2N1cnJlbnRXaWR0
aCwgbV9jdXJyZW50SGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNhbnZhc0RhdGEpOworCisgICAgLy8g
SWYgd2UgZmFpbGVkIHRvIHJlYWQgb3VyIGNhbnZhcyBkYXRhIGR1ZSB0byBhIEdMIGVycm9yLCBk
b24ndCBjb250aW51ZQorICAgIGludCBlcnJvciA9IGdsR2V0RXJyb3IoKTsKKyAgICBpZiAoR0xf
Tk9fRVJST1IgIT0gZXJyb3IpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gQ2xlYXIgb3VyIGRhdGEgaW4gY2FzZSBz
b21lIG9mIGl0IGxpZXMgb3V0c2lkZSB0aGUgYm91bmRzIG9mIG91ciBjYW52YXMKKyAgICAvLyBU
T0RPOiBkb24ndCBkbyB0aGlzIGlmIGFsbCBvZiB0aGUgZGF0YSBsaWVzIGluc2lkZSB0aGUgYm91
bmRzIG9mIHRoZSBjYW52YXMKKyAgICBtZW1zZXQoZGF0YSwgMCwgZGF0YVN0cmlkZSAqIGhlaWdo
dCk7CisKKyAgICAvLyBDYWxjdWxhdGUgdGhlIGludGVyc2VjdGlvbiBvZiBvdXIgY2FudmFzIGFu
ZCBkYXRhIGJvdW5kcworICAgIEludFJlY3QgZGF0YVJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7
CisgICAgSW50UmVjdCBjYW52YXNSZWN0KDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRI
ZWlnaHQpOworICAgIEludFJlY3Qgbm9uWmVyb0RhdGFSZWN0ID0gaW50ZXJzZWN0aW9uKGRhdGFS
ZWN0LCBjYW52YXNSZWN0KTsKKworICAgIHVuc2lnbmVkIGludCB4RGF0YU9mZnNldCA9IHggPCAw
ID8gLXggKiBmb3JtYXRTaXplIDogMDsKKyAgICB1bnNpZ25lZCBpbnQgeURhdGFPZmZzZXQgPSB5
IDwgMCA/IC15ICogZGF0YVN0cmlkZSA6IDA7CisgICAgdW5zaWduZWQgaW50IHhDYW52YXNPZmZz
ZXQgPSBub25aZXJvRGF0YVJlY3QueCgpICogZm9ybWF0U2l6ZTsKKyAgICB1bnNpZ25lZCBpbnQg
eUNhbnZhc09mZnNldCA9IG5vblplcm9EYXRhUmVjdC55KCkgKiBjYW52YXNTdHJpZGU7CisgICAg
dW5zaWduZWQgY2hhciogZHN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRhdGEpICsg
eERhdGFPZmZzZXQgKyB5RGF0YU9mZnNldDsKKyAgICB1bnNpZ25lZCBjaGFyKiBzcmMgPSBjYW52
YXNEYXRhICsgeENhbnZhc09mZnNldCArIHlDYW52YXNPZmZzZXQ7CisgICAgZm9yIChpbnQgcm93
ID0gMDsgcm93IDwgbm9uWmVyb0RhdGFSZWN0LmhlaWdodCgpOyByb3crKykgeworICAgICAgICBt
ZW1jcHkoZHN0LCBzcmMsIG5vblplcm9EYXRhUmVjdC53aWR0aCgpICogZm9ybWF0U2l6ZSk7Cisg
ICAgICAgIGRzdCArPSBkYXRhU3RyaWRlOworICAgICAgICBzcmMgKz0gY2FudmFzU3RyaWRlOwor
ICAgIH0KKworICAgIGRlbGV0ZSBbXSBjYW52YXNEYXRhOwogICAgIDo6Z2xSZWFkUGl4ZWxzKHgs
IHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7CisKICAgICBpZiAobV9hdHRy
cy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQogICAgICAgICA6
OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9t
dWx0aXNhbXBsZUZCTyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFk
ZXJDb21waWxlcigpCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgaXMgbm90IGltcGxlbWVudGVkIG9u
IGRlc2t0b3AgT3BlbkdMLiBXZSBuZWVkIHRvIGhhdmUgaWZkZWZzIGZvciB0aGUgZGlmZmVyZW50
IEdMIHZhcmlhbnRzLgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNhbXBsZUNvdmVyYWdlKEdDM0Rj
bGFtcGYgdmFsdWUsIEdDM0Rib29sZWFuIGludmVydCkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKQEAgLTEzODYsMTMgKzEzOTQsNiBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpsYXll
ckNvbXBvc2l0ZWQoKSBjb25zdAogICAgIHJldHVybiBtX2xheWVyQ29tcG9zaXRlZDsKIH0KIAot
RXh0ZW5zaW9uczNEKiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXh0ZW5zaW9ucygpCi17Ci0gICAg
aWYgKCFtX2V4dGVuc2lvbnMpCi0gICAgICAgIG1fZXh0ZW5zaW9ucyA9IGFkb3B0UHRyKG5ldyBF
eHRlbnNpb25zM0RPcGVuR0wodGhpcykpOwotICAgIHJldHVybiBtX2V4dGVuc2lvbnMuZ2V0KCk7
Ci19Ci0KIH0KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVT
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHQzRE9wZW5HTEVTLmNwcAppbmRleCBiMWJkMWRjNTZjYTZmZDkyODNkYjJkYWUxMjM4M2Nl
MjJmYzk0MzAyLi4zYjQ0YTI0NmVmMTMwNGMwNDkxNmE4YzEzNTkwNDYxY2VhM2YyODQwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0M0RPcGVuR0xFUy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCkBAIC0yOSw5MyArMjksMjkg
QEAKICNpZiBFTkFCTEUoV0VCR0wpCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgot
Ci0jaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMLmgiCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNE
T3BlbkdMRVMuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgor
I2luY2x1ZGUgIkxheWVyV2ViS2l0VGhyZWFkLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKLQotI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpCi0jaW5jbHVkZSAiT3BlbkdM
U2hpbXMuaCIKLSNlbmRpZgorI2luY2x1ZGUgIk9wZW5HTEVTU2hpbXMuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzQW5kQ29udmVy
dFRvQkdSQUlmTmVjZXNzYXJ5KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1
bnNpZ25lZCBjaGFyKiBwaXhlbHMpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hh
ZGVyQ29tcGlsZXIoKQogewotICAgIGNvbnN0IGludCB0b3RhbEJ5dGVzID0gbV9jdXJyZW50V2lk
dGggKiBtX2N1cnJlbnRIZWlnaHQgKiA0OwotICAgIDo6Z2xSZWFkUGl4ZWxzKHgsIHksIHdpZHRo
LCBoZWlnaHQsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscyk7Ci0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQpCi0gICAgICAgIHN0ZDo6c3dhcChwaXhl
bHNbaV0sIHBpeGVsc1tpICsgMl0pOyAvLyBDb252ZXJ0IHRvIEJHUkEuCisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgOjpnbFJlbGVhc2VTaGFkZXJDb21waWxlcigpOwogfQogCi1ib29s
IEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlRkJPcyhjb25zdCBJbnRTaXplJiBzaXplKQordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVsc0FuZENvbnZlcnRUb0JHUkFJZk5lY2Vzc2Fy
eShpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgdW5zaWduZWQgY2hhciogcGl4
ZWxzKQogewotICAgIGNvbnN0IGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsKLSAgICBjb25zdCBp
bnQgaGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsKLSAgICBHTHVpbnQgY29sb3JGb3JtYXQgPSAwLCBw
aXhlbERhdGFUeXBlID0gMDsKLSAgICBpZiAobV9hdHRycy5hbHBoYSkgewotICAgICAgICBtX2lu
dGVybmFsQ29sb3JGb3JtYXQgPSBHTF9SR0JBOwotICAgICAgICBjb2xvckZvcm1hdCA9IEdMX1JH
QkE7Ci0gICAgICAgIHBpeGVsRGF0YVR5cGUgPSBHTF9VTlNJR05FRF9CWVRFOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIG1faW50ZXJuYWxDb2xvckZvcm1hdCA9IEdMX1JHQjsKLSAgICAgICAgY29s
b3JGb3JtYXQgPSBHTF9SR0I7Ci0gICAgICAgIHBpeGVsRGF0YVR5cGUgPSBHTF9VTlNJR05FRF9T
SE9SVF81XzZfNTsKLSAgICB9Ci0KLSAgICAvLyBXZSBkb24ndCBhbGxvdyB0aGUgbG9naWMgd2hl
cmUgc3RlbmNpbCBpcyByZXF1aXJlZCBhbmQgZGVwdGggaXMgbm90LgotICAgIC8vIFNlZSBHcmFw
aGljc0NvbnRleHQzRDo6dmFsaWRhdGVBdHRyaWJ1dGVzLgotICAgIGJvb2wgc3VwcG9ydFBhY2tl
ZERlcHRoU3RlbmNpbEJ1ZmZlciA9IChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkg
JiYgZ2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2ls
Iik7Ci0KLSAgICAvLyBSZXNpemUgcmVndWxhciBGQk8uCi0gICAgYm9vbCBtdXN0UmVzdG9yZUZC
TyA9IGZhbHNlOwotICAgIGlmIChtX2JvdW5kRkJPICE9IG1fZmJvKSB7Ci0gICAgICAgIG11c3RS
ZXN0b3JlRkJPID0gdHJ1ZTsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICB9Ci0KLSAgICA6OmdsQmluZFRl
eHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKLSAgICA6OmdsVGV4SW1hZ2UyRChHTF9U
RVhUVVJFXzJELCAwLCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGNv
bG9yRm9ybWF0LCBwaXhlbERhdGFUeXBlLCAwKTsKLSAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJl
MkRFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6
Q09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSwgMCk7Ci0KLSAgICA6
OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0gICAg
OjpnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgbV9pbnRlcm5hbENvbG9yRm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCAwLCBjb2xvckZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgMCk7Ci0gICAg
OjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOwotCi0gICAgLy8gV2UgZG9uJ3Qgc3Vw
cG9ydCBhbnRpYWxpYXNpbmcgeWV0LiBTZWUgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0
cmlidXRlcy4KLSAgICBBU1NFUlQoIW1fYXR0cnMuYW50aWFsaWFzKTsKLQotICAgIGlmIChtX2F0
dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkgewotICAgICAgICAvLyBVc2UgYSAyNCBiaXQg
ZGVwdGggYnVmZmVyIHdoZXJlIHdlIGtub3cgd2UgaGF2ZSBpdC4KLSAgICAgICAgaWYgKHN1cHBv
cnRQYWNrZWREZXB0aFN0ZW5jaWxCdWZmZXIpIHsKLSAgICAgICAgICAgIDo6Z2xCaW5kVGV4dHVy
ZShHTF9URVhUVVJFXzJELCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgICAgICA6Omds
VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RF
TkNJTCwgd2lkdGgsIGhlaWdodCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUws
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfMjRfOCwgMCk7Ci0gICAgICAgICAgICBp
ZiAobV9hdHRycy5zdGVuY2lsKQotICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1
cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5ULCBHTF9URVhUVVJFXzJE
LCBtX2RlcHRoU3RlbmNpbEJ1ZmZlciwgMCk7Ci0gICAgICAgICAgICBpZiAobV9hdHRycy5kZXB0
aCkKLSAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZG
RVIsIEdMX0RFUFRIX0FUVEFDSE1FTlQsIEdMX1RFWFRVUkVfMkQsIG1fZGVwdGhTdGVuY2lsQnVm
ZmVyLCAwKTsKLSAgICAgICAgICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpIHsKLSAg
ICAgICAgICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6
UkVOREVSQlVGRkVSLCBtX3N0ZW5jaWxCdWZmZXIpOwotICAgICAgICAgICAgICAgIDo6Z2xSZW5k
ZXJidWZmZXJTdG9yYWdlRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIEdMX1NU
RU5DSUxfSU5ERVg4LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgICAgICAgICA6OmdsRnJhbWVi
dWZmZXJSZW5kZXJidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFw
aGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQzRDo6UkVO
REVSQlVGRkVSLCBtX3N0ZW5jaWxCdWZmZXIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
aWYgKG1fYXR0cnMuZGVwdGgpIHsKLSAgICAgICAgICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZl
ckVYVChHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX2RlcHRoQnVmZmVyKTsKLSAg
ICAgICAgICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZUVYVChHcmFwaGljc0NvbnRleHQz
RDo6UkVOREVSQlVGRkVSLCBHTF9ERVBUSF9DT01QT05FTlQxNiwgd2lkdGgsIGhlaWdodCk7Ci0g
ICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQs
IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fZGVwdGhCdWZmZXIpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR3JhcGhpY3NDb250
ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGdsQ2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1c0VYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgewotICAgICAgICAvLyBG
SVhNRTogY2xlYW51cAotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIDo6Z2xSZWFkUGl4
ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVs
cyk7CisgICAgaW50IHRvdGFsQnl0ZXMgPSB3aWR0aCAqIGhlaWdodCAqIDQ7CisgICAgaWYgKGlz
R0xFUzJDb21wbGlhbnQoKSkgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsQnl0
ZXM7IGkgKz0gNCkKKyAgICAgICAgICAgIHN0ZDo6c3dhcChwaXhlbHNbaV0sIHBpeGVsc1tpICsg
Ml0pOyAvLyBDb252ZXJ0IHRvIEJHUkEuCiAgICAgfQotCi0gICAgcmV0dXJuIG11c3RSZXN0b3Jl
RkJPOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lm
TmVjZXNzYXJ5KGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC0xNTYsNiArOTIsMTcgQEAgYm9vbCBH
cmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RlbnVtIGludGUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dmFsaWRhdGVBdHRyaWJ1dGVzKCkKK3sKKyAgICB2YWxpZGF0ZURlcHRoU3RlbmNp
bCgiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7CisKKyAgICBpZiAobV9hdHRycy5hbnRp
YWxpYXMpIHsKKyAgICAgICAgRXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9u
cygpOworICAgICAgICBpZiAoIWV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9JTUdfbXVsdGlzYW1w
bGVkX3JlbmRlcl90b190ZXh0dXJlIikpCisgICAgICAgICAgICBtX2F0dHJzLmFudGlhbGlhcyA9
IGZhbHNlOworICAgIH0KK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhSYW5nZShH
QzNEY2xhbXBmIHpOZWFyLCBHQzNEY2xhbXBmIHpGYXIpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CkBAIC0xNjgsNiArMTE1LDE5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFy
RGVwdGgoR0MzRGNsYW1wZiBkZXB0aCkKICAgICA6OmdsQ2xlYXJEZXB0aGYoZGVwdGgpOwogfQog
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK0V4dGVuc2lvbnMzRCogR3JhcGhpY3NDb250ZXh0
M0Q6OmdldEV4dGVuc2lvbnMoKQoreworICAgIGlmICghbV9leHRlbnNpb25zKQorICAgICAgICBt
X2V4dGVuc2lvbnMgPSBhZG9wdFB0cihuZXcgRXh0ZW5zaW9uczNET3BlbkdMRVModGhpcykpOwor
ICAgIHJldHVybiBtX2V4dGVuc2lvbnMuZ2V0KCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0
M0Q6OnN5c3RlbUFsbG93c011bHRpc2FtcGxpbmdPbkFUSUNhcmRzKCkKK3sKKyAgICByZXR1cm4g
ZmFsc2U7IC8vIG5vdCBhcHBsaWNhYmxlCit9CisKK30KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJH
TCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBo
aWNzQ29udGV4dDNEUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
R3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKaW5kZXggNzBkM2YyNGFmYTU1NDJhNjhhMTI0MWQzODFj
M2NlOTM0ODc4MTg4NS4uMDY3NjkyMWMxMWY4MGZkYzVmYTg0ODM5YWRmZmY1M2IxMzBhZmFiYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3ND
b250ZXh0M0RRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
R3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKQEAgLTk4LDYgKzk4LDEzIEBAIGJvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OmlzR0xFUzJDb21wbGlhbnQoKSBjb25zdAogI2VuZGlmCiB9CiAKKyNpZiAhVVNF
KE9QRU5HTF9FU18yKQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBp
bGVyKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorI2VuZGlmCisKIEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0LCBIb3N0V2luZG93KiBob3N0V2luZG93KQogICAgIDogbV9jb250ZXh0KGNvbnRl
eHQpCiAgICAgLCBtX2hvc3RXaW5kb3coaG9zdFdpbmRvdykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150848</attachid>
            <date>2012-07-04 14:59:26 -0700</date>
            <delta_ts>2012-07-05 10:33:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90567-20120704175903.patch</filename>
            <type>text/plain</type>
            <size>61221</size>
            <attacher name="Joshua Netterfield">jnetterfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxODY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODFjZDc4MDliMjVmNjhk
YjA3MTcxZmU3N2UyMmI0ZjhkMjVkNTU2NC4uZjVjYTliYzYwOWJhOTgxOTIyNjk0OTM2ODVmZTk2
MTQ3NzE3NjM1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk0IEBACisyMDEyLTA3LTA0ICBKb3No
dWEgTmV0dGVyZmllbGQgIDxqbmV0dGVyZmllbGRAcmltLmNvbT4KKyAgICAgICAgTWFrZSBHQzNE
IGFuZCBFM0QgbW9yZSBtYWludGFpbmFibGUgZm9yIEdMRVMgcGxhdGZvcm1zCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDU2NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY2xlYW5zIHVw
IGNvZGUgZm9yIFdlYkdMIG9uIE9wZW5HTEVTIHBsYXRmb3JtcyB3aGljaCB1c2UgCisgICAgICAg
IEdyYXBoaWNzQ29udGV4dDNET3BlbkdMKiBhbmQgRXh0ZW5zaW9uczNET3BlbkdMKi4gQWx0aG91
Z2gKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wgd2FzIGFscmVhZHkgc3BsaXQgaW50
byBHcmFwaGljc0NvbnRleHQzRE9wZW5HTCwKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0RPcGVu
R0xDb21tb24sIGFuZCAgR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUywgdGhpcyBwYXRjaAorICAg
ICAgICBpcyBhbiBhdHRlbXB0IHRvIHJlZmFjdG9yIHRoaXMgY29kZSBpbiBhIHdheSB0aGF0IHdp
bGwgaGVscCBCbGFja0JlcnJ5IGFuZAorICAgICAgICBvdGhlciB0ZWFtcyBzdXBwb3J0IFdlYkdM
IG9uIG1vYmlsZSBwbGF0Zm9ybXMgd2l0aCBhcyBsaXR0bGUgdXNlIG9mCisgICAgICAgIOKAnCNJ
RiBVU0UoT1BFTkdMX0VTXzIp4oCdIGluIGNvbW1vbiBjb2RlIGFzIHBvc3NpYmxlLiBBbHNvIGlu
Y2x1ZGVkIGlzIHRoZQorICAgICAgICBzZXBhcmF0aW9uIG9mIEV4dGVuc2lvbnMzRE9wZW5HTCBp
bnRvIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbiwKKyAgICAgICAgRXh0ZW5zaW9uczNET3BlbkdM
LCBhbmQgRXh0ZW5zaW9uczNET3BlbkdMRVMgYXMgd2VsbCBhcyB0aGUgaW50cm9kdWN0aW9uCisg
ICAgICAgIG9mIE9wZW5HTEVTU2hpbXMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBjcmVhdGVk
IGluIGxhcmdlIHBhcnQgYnkgSm9uYXRoYW4gRmVsZHN0ZWluLgorCisgICAgICAgIE5vIG5ldyB0
ZXN0czogbm8gbmV3IGJlaGF2aW91ci4KKworICAgICAgICAqIFBsYXRmb3JtQmxhY2tCZXJyeS5j
bWFrZTogUmVjb2duaXplIEJsYWNrQmVycnkgYXMgT1BFTkdMIEVTLCBhZGQgbmV3IGZpbGVzIHRv
IGJ1aWxkCisgICAgICAgICogVGFyZ2V0LnByaTogQWRkIG5ldyBFeHRlbnNpb25zM0RPcGVuR0wq
IHRvIFdlYkdMIGJ1aWxkcworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dDNELmg6IEFkZCB2YWxpZGF0ZURlcHRoU3RlbmNpbCwgbWFrZSBzeXN0ZW1BbGxvd3NNdWx0
aXNhbXBsaW5nT25BVElDYXJkcyBhIGEgbWVtYmVyIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvT3BlbkdMRVNTaGltcy5oOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNw
cDogTW92ZSBjb2RlIHRvIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbiB3aGVyZSBwb3NzaWJsZQor
ICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpFeHRlbnNpb25zM0RPcGVuR0wp
OiBSZWZsZWN0IHRoYXQgaXQgaXMgbm93IGluaGVyaXRzIEV4dGVuc2lvbnMzRENvbW1vbgorICAg
ICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpzdXBwb3J0c0V4dGVuc2lvbik6IENv
bnRhaW5zIE9wZW5HTCBzcGVjaWZpYyBjb2RlIGZyb20gc3VwcG9ydHMKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpnZXRFeHRlbnNpb25z
KTogUmV0dXJucyBhIGxpc3Qgb2YgZXh0ZW5zaW9ucworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaDogUmVtb3ZlIGZ1bmN0aW9ucyBub3cgaW4g
RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEV4
dGVuc2lvbnMzRE9wZW5HTCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4
dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0xDb21tb246OkV4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbik6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0xDb21tb246
On5FeHRlbnNpb25zM0RPcGVuR0xDb21tb24pOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9u
czNET3BlbkdMQ29tbW9uOjpzdXBwb3J0cyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25z
M0RPcGVuR0xDb21tb246OmVuc3VyZUVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uOjppc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uOjpnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKToKKyAgICAgICAg
KFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6Z2V0VHJhbnNsYXRlZFNoYWRlclNv
dXJjZUFOR0xFKTogRXhpc3RlZCBiZWZvcmUsIGJ1dCBkaWQgbm90aGluZy4gTm93IGRvZXMgd2hh
dCBpcyBzYXlzIGl0IGRvZXMuCisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0xD
b21tb246OmluaXRpYWxpemVBdmFpbGFibGVFeHRlbnNpb25zKTogTW92ZWQgZnJvbSBFeHRlbnNp
b25zM0RPcGVuR0w6OnN1cHBvcnRzCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmguCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5H
TEVTOjpFeHRlbnNpb25zM0RPcGVuR0xFUyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25z
M0RPcGVuR0xFUzo6fkV4dGVuc2lvbnMzRE9wZW5HTEVTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4
dGVuc2lvbnMzRE9wZW5HTEVTOjpmcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HKToK
KyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTEVTOjpyZW5kZXJidWZmZXJTdG9y
YWdlTXVsdGlzYW1wbGVJTUcpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdM
RVM6OmNyZWF0ZVZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMz
RE9wZW5HTEVTOjpkZWxldGVWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRl
bnNpb25zM0RPcGVuR0xFUzo6aXNWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbnNpb25zM0RPcGVuR0xFUzo6YmluZFZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNv
cmU6OkV4dGVuc2lvbnMzRE9wZW5HTEVTOjpzdXBwb3J0c0V4dGVuc2lvbik6IENvbnRhaW5zIE9w
ZW5HTEVTIHNwZWNpZmljIGNvZGUgZnJvbSBzdXBwb3J0cworICAgICAgICAoV2ViQ29yZTo6RXh0
ZW5zaW9uczNET3BlbkdMRVM6OmdldEV4dGVuc2lvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmguCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEV4dGVuc2lvbnMzRE9wZW5HTEVTKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRl
cyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpzeXN0ZW1BbGxvd3NNdWx0aXNhbXBsaW5nT25BVElDYXJkcyk6IE5vdyBhIG1lbWJlciBmdW5j
dGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25z
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RP
cGVuR0xDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZh
bGlkYXRlRGVwdGhTdGVuY2lsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmxpbmVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bGlu
a1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBpeGVsU3Rv
cmVpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwb2x5Z29uT2Zmc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVCdWZmZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29t
cGlsZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHNB
bmRDb252ZXJ0VG9CR1JBSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzeXN0ZW1BbGxvd3NNdWx0aXNhbXBsaW5nT25B
VElDYXJkcyk6IE5vdyBhIG1lbWJlciBmdW5jdGlvbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcik6
CisKIDIwMTItMDctMDQgIEpvaG4gTWVsbG9yICA8am9obm1lQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBUZXh0IEF1dG9zaXppbmc6IEFkZCBiYXNpYyBmcmFtZXdvcmsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCmluZGV4IGRlN2JjYzY0ZjM5ZWJkYTM2Yjc3NDY5MzIxYjlhMGRjODkwZWJm
ODguLmM5ZTgzOTQ0N2FlNTNjMmNlMGNjZDJiNzI5MmE0Y2I2MjY5MGRhZGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNjA1NCw2ICs2MDU0LDcgQEAgd2ViY29yZV9zb3VyY2Vz
ICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9PcGVuR0xTaGltcy5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL09wZW5HTFNoaW1zLmggXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wu
Y3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9u
czNET3BlbkdMQ29tbW9uLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21t
b24uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21h
a2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UKaW5kZXggNTE2OWE1
ZGQ1OTczYzdiMGUyODhkYTIxMjMxOTQ3MTg2NTMwZWE4MS4uNTg3ZWRlM2QwNjkwODAzNzNiZWQy
YTMxMjI1MmE1NTc5MjFkY2ZjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1C
bGFja0JlcnJ5LmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQmxhY2tCZXJyeS5j
bWFrZQpAQCAtMjE4LDYgKzIxOCw3IEBAIGlmIChFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJB
TUUpCiBFTkRJRiAoKQogCiBpZiAoRU5BQkxFX1dFQkdMKQorICAgIEFERF9ERUZJTklUSU9OUyAo
LURXVEZfVVNFX09QRU5HTF9FU18yPTEpCiAgICAgTElTVChBUFBFTkQgV2ViQ29yZV9JTkNMVURF
X0RJUkVDVE9SSUVTCiAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUiCiAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wiCkBA
IC0yMjUsNiArMjI2LDExIEBAIGlmIChFTkFCTEVfV0VCR0wpCiAgICAgTElTVChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRHJhd2lu
Z0J1ZmZlckJsYWNrQmVycnkuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvR3JhcGhpY3NDb250ZXh0M0RCbGFja0JlcnJ5LmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCisgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAorICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNw
cAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMu
Y3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQz
RC5jcHAKICAgICApCiBFTkRJRiAoKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJn
ZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCA2NjVmMDNkMTFjNTkwMThj
NzViOWZhNjE0OWU3MjlkZTQ5ZjJiMjlkLi40Y2U2Y2Y2NmUyOWU5OGNlY2U4NWVjYjA0YjVkYTAw
YzkyMzZhODk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTM5NTUsMTUgKzM5NTUsMTkgQEAgY29udGFpbnMo
REVGSU5FUywgRU5BQkxFX1dFQkdMPTEpIHsKIAogICAgIGNvbnRhaW5zKFFUX0NPTkZJRywgb3Bl
bmdsKSB8IGNvbnRhaW5zKFFUX0NPTkZJRywgb3BlbmdsZXMyKSB7CiAgICAgICAgICFjb250YWlu
cyhRVF9DT05GSUcsIG9wZW5nbGVzMikgewotICAgICAgICAgICAgU09VUkNFUyArPSBwbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCisgICAgICAgICAg
ICBTT1VSQ0VTICs9IFwKKyAgICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAgXAorICAgICAgICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAKICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dDNET3BlbkdMRVMuY3BwCisgICAgICAgICAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNw
cCBcCisgICAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNE
T3BlbkdMRVMuY3BwCiAgICAgICAgIH0KIAogICAgICAgICBIRUFERVJTICs9IHBsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaAogCiAgICAgICAgIFNPVVJDRVMgKz0g
XAotICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5H
TC5jcHAgXAorICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMz
RE9wZW5HTENvbW1vbi5jcHAgXAogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAogCiAgICAgICAgIEFOR0xFX0RJUiA9
ICQkcmVwbGFjZShQV0QsICJXZWJDb3JlIiwgIlRoaXJkUGFydHkvQU5HTEUiKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCmluZGV4IGNiMTAxMmU3NzY4NWNkOTA4OTY5MjI0YmFhYWYwMTEwNGQxOWQ2OWMuLmYxN2Ew
NDAwOTFmMjlkMzE3MzQ4NWVjNzYyNmE4MWNiNjhkN2VjY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAg
LTM4MDcsNiArMzgwNyw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dl
YlRpbGVkTGF5ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYlRp
bGVkTGF5ZXIubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRl
bnNpb25zM0RPcGVuR0wuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xD
b21tb24uY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNELmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQzRC5oCmluZGV4IGRiZDlkZmVkZTAxM2E0Y2FmMzMyNDYzYWQzMmZjNGUx
NTI4MjY0NjcuLjE2ZDEyZjE2M2JkNWQxZTA5ZjMxMTUyZWRkYTFiMmI2NWUyMmVhNGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNE
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
M0QuaApAQCAtMjAsNyArMjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaWZuZGVmIEdy
YXBoaWNzQ29udGV4dDNEX2gKQEAgLTkxLDE0ICs5MSwxMiBAQCBjb25zdCBQbGF0Zm9ybTNET2Jq
ZWN0IE51bGxQbGF0Zm9ybTNET2JqZWN0ID0gMDsKICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dD
b250ZXh0Lmg+CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCi0jaW5jbHVkZSA8
R0xFUzIvZ2wyLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRHJhd2lu
Z0J1ZmZlcjsKIGNsYXNzIEV4dGVuc2lvbnMzRDsKLSNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRG
T1JNKEdUSykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkKKyNpZiBVU0UoT1BFTkdM
X0VTXzIpCitjbGFzcyBFeHRlbnNpb25zM0RPcGVuR0xFUzsKKyNlbHNlCiBjbGFzcyBFeHRlbnNp
b25zM0RPcGVuR0w7CiAjZW5kaWYKICNpZiBQTEFURk9STShRVCkKQEAgLTkyNCw2ICs5MjIsNyBA
QCBwdWJsaWM6CiAgICAgLy8gaW4gcGFydGljdWxhciBzdGVuY2lsIGFuZCBhbnRpYWxpYXMsIGFu
ZCBkZXRlcm1pbmUgd2hpY2ggY291bGQgb3IKICAgICAvLyBjb3VsZCBub3QgYmUgaG9ub3JlZCBi
YXNlZCBvbiB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBPcGVuR0wKICAgICAvLyBpbXBsZW1lbnRh
dGlvbi4KKyAgICB2b2lkIHZhbGlkYXRlRGVwdGhTdGVuY2lsKGNvbnN0IGNoYXIqIHBhY2tlZERl
cHRoU3RlbmNpbEV4dGVuc2lvbik7CiAgICAgdm9pZCB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKIAog
ICAgIC8vIFJlYWQgcmVuZGVyaW5nIHJlc3VsdHMgaW50byBhIHBpeGVsIGFycmF5IHdpdGggdGhl
IHNhbWUgZm9ybWF0IGFzIHRoZQpAQCAtOTU1LDE2ICs5NTQsMzAgQEAgcHVibGljOgogICAgIEhh
c2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+IG1fc2hhZGVyU291cmNl
TWFwOwogCiAgICAgQU5HTEVXZWJLaXRCcmlkZ2UgbV9jb21waWxlcjsKKyNlbmRpZgogCisjaWYg
UExBVEZPUk0oUVQpICYmIGRlZmluZWQoUVRfT1BFTkdMX0VTXzIpCisgICAgZnJpZW5kIGNsYXNz
IEV4dGVuc2lvbnMzRFF0OworICAgIE93blB0cjxFeHRlbnNpb25zM0RRdD4gbV9leHRlbnNpb25z
OworI2VsaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKKyAgICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9u
czNET3BlbkdMRVM7CisgICAgT3duUHRyPEV4dGVuc2lvbnMzRE9wZW5HTEVTPiBtX2V4dGVuc2lv
bnM7CisjZWxpZiAhUExBVEZPUk0oQ0hST01JVU0pCiAgICAgZnJpZW5kIGNsYXNzIEV4dGVuc2lv
bnMzRE9wZW5HTDsKICAgICBPd25QdHI8RXh0ZW5zaW9uczNET3BlbkdMPiBtX2V4dGVuc2lvbnM7
CisjZW5kaWYKKyAgICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOwogCiAg
ICAgQXR0cmlidXRlcyBtX2F0dHJzOwogICAgIFZlY3RvcjxWZWN0b3I8ZmxvYXQ+ID4gbV92ZXJ0
ZXhBcnJheTsKIAotICAgIEdDM0R1aW50IG1fdGV4dHVyZSwgbV9jb21wb3NpdG9yVGV4dHVyZTsK
KyAgICBHQzNEdWludCBtX3RleHR1cmU7CisjaWYgIVBMQVRGT1JNKEJMQUNLQkVSUlkpCisgICAg
R0MzRHVpbnQgbV9jb21wb3NpdG9yVGV4dHVyZTsKKyNlbmRpZgogICAgIEdDM0R1aW50IG1fZmJv
OwotI2lmIFVTRShPUEVOR0xfRVNfMikKKworI2lmICFQTEFURk9STShCTEFDS0JFUlJZKQogICAg
IEdDM0R1aW50IG1fZGVwdGhCdWZmZXI7CiAgICAgR0MzRHVpbnQgbV9zdGVuY2lsQnVmZmVyOwog
I2VuZGlmCkBAIC05ODUsMTAgKzk5OCwxMSBAQCBwdWJsaWM6CiAKICAgICAvLyBFcnJvcnMgcmFp
c2VkIGJ5IHN5bnRoZXNpemVHTEVycm9yKCkuCiAgICAgTGlzdEhhc2hTZXQ8R0MzRGVudW0+IG1f
c3ludGhldGljRXJyb3JzOwotI2VuZGlmCiAKICAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOwogICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQzRFByaXZhdGU+IG1fcHJp
dmF0ZTsKKworICAgIGJvb2wgc3lzdGVtQWxsb3dzTXVsdGlzYW1wbGluZ09uQVRJQ2FyZHMoKTsg
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9PcGVuR0xFU1NoaW1zLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9PcGVuR0xFU1NoaW1zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWRiOTE5MzNmODViYzA2
MWNjOWM4NTI1NGRjMzRmMDljMjkzYTgwOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL09wZW5HTEVTU2hpbXMuaApAQCAtMCwwICsxLDU0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgT3BlbkdMRVNT
aGltc19oCisjZGVmaW5lIE9wZW5HTEVTU2hpbXNfaAorCisjaWYgUExBVEZPUk0oQkxBQ0tCRVJS
WSkKKyNkZWZpbmUgZ2xCaW5kRnJhbWVidWZmZXJFWFQgZ2xCaW5kRnJhbWVidWZmZXIKKyNkZWZp
bmUgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVCBnbEZyYW1lYnVmZmVyVGV4dHVyZTJECisjZGVm
aW5lIGdsQmluZFJlbmRlcmJ1ZmZlckVYVCBnbEJpbmRSZW5kZXJidWZmZXIKKyNkZWZpbmUgZ2xS
ZW5kZXJidWZmZXJTdG9yYWdlRVhUIGdsUmVuZGVyYnVmZmVyU3RvcmFnZQorI2RlZmluZSBnbEZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIKKyNkZWZp
bmUgR0xfUkVOREVSQlVGRkVSX0VYVCBHTF9SRU5ERVJCVUZGRVIKKyNkZWZpbmUgR0xfU1RFTkNJ
TF9BVFRBQ0hNRU5UX0VYVCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQKKyNkZWZpbmUgZ2xDaGVja0Zy
YW1lYnVmZmVyU3RhdHVzRVhUIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1cworI2RlZmluZSBnbERl
bGV0ZUZyYW1lYnVmZmVyc0VYVCBnbERlbGV0ZUZyYW1lYnVmZmVycworI2RlZmluZSBnbERlbGV0
ZVJlbmRlcmJ1ZmZlcnNFWFQgZ2xEZWxldGVSZW5kZXJidWZmZXJzCisjZGVmaW5lIGdsR2VuUmVu
ZGVyYnVmZmVyc0VYVCBnbEdlblJlbmRlcmJ1ZmZlcnMKKyNkZWZpbmUgZ2xHZW5GcmFtZWJ1ZmZl
cnNFWFQgZ2xHZW5GcmFtZWJ1ZmZlcnMKKyNkZWZpbmUgZ2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1l
bnRQYXJhbWV0ZXJpdkVYVCBnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2Cisj
ZGVmaW5lIGdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXZFWFQgZ2xHZXRSZW5kZXJidWZmZXJQ
YXJhbWV0ZXJpdgorI2RlZmluZSBnbElzUmVuZGVyYnVmZmVyRVhUIGdsSXNSZW5kZXJidWZmZXIK
KyNkZWZpbmUgZ2xJc0ZyYW1lYnVmZmVyRVhUIGdsSXNGcmFtZWJ1ZmZlcgorI2RlZmluZSBnbEdl
bmVyYXRlTWlwbWFwRVhUIGdsR2VuZXJhdGVNaXBtYXAKKyNkZWZpbmUgR0xfQ09MT1JfQVRUQUNI
TUVOVDBfRVhUIEdMX0NPTE9SX0FUVEFDSE1FTlQwCisjZGVmaW5lIEdMX0RFUFRIX0FUVEFDSE1F
TlRfRVhUIEdMX0RFUFRIX0FUVEFDSE1FTlQKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQ09NUExF
VEVfRVhUIEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0VY
VCBHTF9GUkFNRUJVRkZFUgorI2RlZmluZSBHTF9ERVBUSDI0X1NURU5DSUw4X0VYVCBHTF9ERVBU
SDI0X1NURU5DSUw4X09FUworI2RlZmluZSBHTF9SR0JBOCBHTF9SR0JBOF9PRVMKKyNkZWZpbmUg
R0xfUkdCOCBHTF9SR0I4X09FUworI2RlZmluZSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCAweDhD
QTgKKyNkZWZpbmUgR0xfRFJBV19GUkFNRUJVRkZFUl9FWFQgMHg4Q0E5CisjZGVmaW5lIEZSQU1F
QlVGRkVSX0lOQ09NUExFVEVfTVVMVElTQU1QTEVfRVhUIDB4OTEzNAorI2RlZmluZSBHTF9NQVhf
U0FNUExFU19FWFQgMHg4RDU3CisjZW5kaWYgLy8gUExBVEZPUk0oQkxBQ0tCRVJSWSkKKworI2Vu
ZGlmIC8vIE9wZW5HTEVTU2hpbXNfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3Bw
CmluZGV4IGFjMjkyZDM3NTE1NzkyZWNhMzIyOWU2ZjY3Mzg4ZWIyOGU1MWUwOTYuLmZkMWRhZDA5
ZjAxMWI3NmM5ZTU5ZTQ4NTM5YWM5YzAzZGFhZGIzNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4
dDNEQ2Fpcm8uY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3Bl
bkdMLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCiAjaW5jbHVkZSAi
SW1hZ2UuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIk9wZW5HTFNo
aW1zLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlICJSZWZQ
dHJDYWlyby5oIgpAQCAtMTQ2LDYgKzE0NywxMSBAQCBHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBo
aWNzQ29udGV4dDNEKCkKICAgICA6OmdsRGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZtX2Zibyk7
CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
SW1hZ2VEYXRhKEltYWdlKiBpbWFnZSwgdW5zaWduZWQgaW50IGZvcm1hdCwgdW5zaWduZWQgaW50
IHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJv
ZmlsZSwgVmVjdG9yPHVpbnQ4X3Q+JiBvdXRwdXRWZWN0b3IpCiB7CiAgICAgaWYgKCFpbWFnZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3Jh
cGhpY3NDb250ZXh0M0RDbHV0dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NsdXR0ZXIvR3JhcGhpY3NDb250ZXh0M0RDbHV0dGVyLmNwcAppbmRleCBjYTBmZmRjMmJj
YjlkODkzODZiMTVkNDhjMzIzOGViM2VmOWIwOTU0Li43ZTIyZjcyMmQ0YmQzNTNkMzMxYmRjNjA3
NzVlN2Q3MWFhMDVlNTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jbHV0dGVyL0dyYXBoaWNzQ29udGV4dDNEQ2x1dHRlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0NvbnRleHQzRENsdXR0ZXIu
Y3BwCkBAIC01Niw2ICs1NiwxMSBAQCBHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4
dDNEKCkKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
IGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFnZSogaW1hZ2UsIHVuc2ln
bmVkIGludCBmb3JtYXQsIHVuc2lnbmVkIGludCB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEs
IGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsIFZlY3Rvcjx1aW50OF90PiYgb3V0cHV0
VmVjdG9yKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wu
Y3BwCmluZGV4IDRhYTM0MWMzMjZjNzM1N2IxMTBjOTgzZDAzOWNjZDdiYzMzMTY2MTIuLmJiZTc3
YmI3OTg1NGM5MjM3ZThjYjY3MDZjOTc0NjU5OTU2MmI5MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RP
cGVuR0wuY3BwCkBAIC00Miw3ICs0Miw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEV4dGVu
c2lvbnMzRE9wZW5HTDo6RXh0ZW5zaW9uczNET3BlbkdMKEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0KQotICAgIDogbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnMoZmFsc2UpCisgICAg
OiBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24oY29udGV4dCkKKyAgICAsIG1faW5pdGlhbGl6ZWRB
dmFpbGFibGVFeHRlbnNpb25zKGZhbHNlKQogICAgICwgbV9jb250ZXh0KGNvbnRleHQpCiB7CiB9
CkBAIC01MSw5MSArNTIsNiBAQCBFeHRlbnNpb25zM0RPcGVuR0w6On5FeHRlbnNpb25zM0RPcGVu
R0woKQogewogfQogCi1ib29sIEV4dGVuc2lvbnMzRE9wZW5HTDo6c3VwcG9ydHMoY29uc3QgU3Ry
aW5nJiBuYW1lKQotewotICAgIC8vIE5vdGUgb24gc3VwcG9ydCBmb3IgQkdSQToKLSAgICAvLwot
ICAgIC8vIEZvciBPcGVuR0wgRVMyLjAsIHJlcXVpcmVzIGNoZWNraW5nIGZvcgotICAgIC8vIEdM
X0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCBhbmQgR0xfRVhUX3JlYWRfZm9ybWF0X2JncmEu
Ci0gICAgLy8gRm9yIGRlc2t0b3AgR0wsIEJHUkEgaGFzIGJlZW4gc3VwcG9ydGVkIHNpbmNlIE9w
ZW5HTCAxLjIuCi0gICAgLy8KLSAgICAvLyBIb3dldmVyLCBub3RlIHRoYXQgdGhlIEdMIEVTMiBl
eHRlbnNpb24gcmVxdWlyZXMgdGhlCi0gICAgLy8gaW50ZXJuYWxGb3JtYXQgdG8gZ2xUZXhJbWFn
ZTJEKCkgYmUgR0xfQkdSQSwgd2hpbGUgZGVza3RvcCBHTAotICAgIC8vIHdpbGwgbm90IGFjY2Vw
dCBHTF9CR1JBIChtdXN0IGJlIEdMX1JHQkEpLCBzbyB0aGlzIG11c3QgYmUKLSAgICAvLyBjaGVj
a2VkIG9uIGVhY2ggcGxhdGZvcm0uIERlc2t0b3AgR0wgb2ZmZXJzIG5laXRoZXIKLSAgICAvLyBH
TF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODggb3IgR0xfRVhUX3JlYWRfZm9ybWF0X2JncmEs
IHNvCi0gICAgLy8gdHJlYXQgdGhlbSBhcyB1bnN1cHBvcnRlZCBoZXJlLgotICAgIGlmICghbV9p
bml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnMpIHsKLSAgICAgICAgU3RyaW5nIGV4dGVuc2lv
bnNTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhHTF9F
WFRFTlNJT05TKSkpOwotICAgICAgICBWZWN0b3I8U3RyaW5nPiBhdmFpbGFibGVFeHRlbnNpb25z
OwotICAgICAgICBleHRlbnNpb25zU3RyaW5nLnNwbGl0KCIgIiwgYXZhaWxhYmxlRXh0ZW5zaW9u
cyk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXZhaWxhYmxlRXh0ZW5zaW9ucy5z
aXplKCk7ICsraSkKLSAgICAgICAgICAgIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5hZGQoYXZhaWxh
YmxlRXh0ZW5zaW9uc1tpXSk7Ci0gICAgICAgIG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNp
b25zID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgLy8gR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxp
dCBhbmQgR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUgYXJlICJmYWtlIi4gVGhleSBh
cmUgaW1wbGVtZW50ZWQgdXNpbmcgb3RoZXIKLSAgICAvLyBleHRlbnNpb25zLiBJbiBwYXJ0aWN1
bGFyIEdMX0VYVF9mcmFtZWJ1ZmZlcl9ibGl0IGFuZCBHTF9FWFRfZnJhbWVidWZmZXJfbXVsdGlz
YW1wbGUKLSAgICBpZiAobmFtZSA9PSAiR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCIpCi0gICAg
ICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0VYVF9mcmFtZWJ1
ZmZlcl9ibGl0Iik7Ci0gICAgaWYgKG5hbWUgPT0gIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRp
c2FtcGxlIikKLSAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygi
R0xfRVhUX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIik7Ci0KLSAgICAvLyBEZXNrdG9wIEdMIGFs
d2F5cyBzdXBwb3J0cyBHTF9PRVNfcmdiOF9yZ2JhOC4KLSAgICBpZiAobmFtZSA9PSAiR0xfT0VT
X3JnYjhfcmdiYTgiKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIElmIEdMX0FSQl90
ZXh0dXJlX2Zsb2F0IGlzIGF2YWlsYWJsZSB0aGVuIHdlIHJlcG9ydCBHTF9PRVNfdGV4dHVyZV9m
bG9hdCBhbmQKLSAgICAvLyBHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IGFzIGF2YWlsYWJsZS4K
LSAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3RleHR1cmVfZmxvYXQiIHx8IG5hbWUgPT0gIkdMX09F
U190ZXh0dXJlX2hhbGZfZmxvYXQiKQotICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNp
b25zLmNvbnRhaW5zKCJHTF9BUkJfdGV4dHVyZV9mbG9hdCIpOwotICAgIAotICAgIC8vIEdMX09F
U192ZXJ0ZXhfYXJyYXlfb2JqZWN0Ci0gICAgaWYgKG5hbWUgPT0gIkdMX09FU192ZXJ0ZXhfYXJy
YXlfb2JqZWN0IikKLSAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlu
cygiR0xfQVBQTEVfdmVydGV4X2FycmF5X29iamVjdCIpOwotCi0gICAgLy8gRGVza3RvcCBHTCBh
bHdheXMgc3VwcG9ydHMgdGhlIHN0YW5kYXJkIGRlcml2YXRpdmUgZnVuY3Rpb25zCi0gICAgaWYg
KG5hbWUgPT0gIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgaWYgKG5hbWUgPT0gIkdMX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3Bp
YyIpCi0gICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0VY
VF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpOwotCi0gICAgcmV0dXJuIG1fYXZhaWxhYmxl
RXh0ZW5zaW9ucy5jb250YWlucyhuYW1lKTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RPcGVuR0w6
OmVuc3VyZUVuYWJsZWQoY29uc3QgU3RyaW5nJiBuYW1lKQotewotI2lmIFBMQVRGT1JNKE1BQykg
fHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKLSAgICBpZiAobmFtZSA9PSAiR0xfT0VT
X3N0YW5kYXJkX2Rlcml2YXRpdmVzIikgewotICAgICAgICAvLyBFbmFibGUgc3VwcG9ydCBpbiBB
TkdMRSAoaWYgbm90IGVuYWJsZWQgYWxyZWFkeSkKLSAgICAgICAgQU5HTEVXZWJLaXRCcmlkZ2Um
IGNvbXBpbGVyID0gbV9jb250ZXh0LT5tX2NvbXBpbGVyOwotICAgICAgICBTaEJ1aWx0SW5SZXNv
dXJjZXMgQU5HTEVSZXNvdXJjZXMgPSBjb21waWxlci5nZXRSZXNvdXJjZXMoKTsKLSAgICAgICAg
aWYgKCFBTkdMRVJlc291cmNlcy5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMpIHsKLSAgICAgICAg
ICAgIEFOR0xFUmVzb3VyY2VzLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA9IDE7Ci0gICAgICAg
ICAgICBjb21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOwotICAgICAgICB9Ci0g
ICAgfQotI2Vsc2UKLSAgICBBU1NFUlRfVU5VU0VEKG5hbWUsIHN1cHBvcnRzKG5hbWUpKTsKLSNl
bmRpZgotfQotCi1ib29sIEV4dGVuc2lvbnMzRE9wZW5HTDo6aXNFbmFibGVkKGNvbnN0IFN0cmlu
ZyYgbmFtZSkKLXsKLSNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKFFUKSB8fCBQTEFURk9S
TShHVEspCi0gICAgaWYgKG5hbWUgPT0gIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpIHsK
LSAgICAgICAgQU5HTEVXZWJLaXRCcmlkZ2UmIGNvbXBpbGVyID0gbV9jb250ZXh0LT5tX2NvbXBp
bGVyOwotICAgICAgICByZXR1cm4gY29tcGlsZXIuZ2V0UmVzb3VyY2VzKCkuT0VTX3N0YW5kYXJk
X2Rlcml2YXRpdmVzOwotICAgIH0KLSNlbmRpZgotICAgIHJldHVybiBzdXBwb3J0cyhuYW1lKTsK
LX0KLQotaW50IEV4dGVuc2lvbnMzRE9wZW5HTDo6Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigp
Ci17Ci0gICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUjsKLX0KIAogdm9pZCBF
eHRlbnNpb25zM0RPcGVuR0w6OmJsaXRGcmFtZWJ1ZmZlcihsb25nIHNyY1gwLCBsb25nIHNyY1kw
LCBsb25nIHNyY1gxLCBsb25nIHNyY1kxLCBsb25nIGRzdFgwLCBsb25nIGRzdFkwLCBsb25nIGRz
dFgxLCBsb25nIGRzdFkxLCB1bnNpZ25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcgZmlsdGVy
KQogewpAQCAtMTk0LDE5ICsxMTAsNDkgQEAgdm9pZCBFeHRlbnNpb25zM0RPcGVuR0w6OmJpbmRW
ZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQogI2VuZGlmCiB9CiAKLVN0cmlu
ZyBFeHRlbnNpb25zM0RPcGVuR0w6OmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShQbGF0
Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICBVTlVTRURfUEFSQU0oc2hhZGVyKTsKLSAgICBy
ZXR1cm4gIiI7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGlzIGZ1bmN0aW9uIGFuZCBhZGQg
R0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlIGluIHN1cHBvcnRzKCkuCi19Ci0KIHZv
aWQgRXh0ZW5zaW9uczNET3BlbkdMOjpjb3B5VGV4dHVyZUNIUk9NSVVNKEdDM0RlbnVtLCBQbGF0
Zm9ybTNET2JqZWN0LCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEaW50LCBHQzNEZW51bSkKIHsKICAg
ICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24gYW5kIGFkZCBHTF9DSFJPTUlVTV9j
b3B5X3RleHR1cmUgaW4gc3VwcG9ydHMoKS4KICAgICByZXR1cm47CiB9CiAKK2Jvb2wgRXh0ZW5z
aW9uczNET3BlbkdMOjpzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpCit7Cisg
ICAgLy8gR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCBhbmQgR0xfQU5HTEVfZnJhbWVidWZmZXJf
bXVsdGlzYW1wbGUgYXJlICJmYWtlIi4gVGhleSBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgb3RoZXIK
KyAgICAvLyBleHRlbnNpb25zLiBJbiBwYXJ0aWN1bGFyIEdMX0VYVF9mcmFtZWJ1ZmZlcl9ibGl0
IGFuZCBHTF9FWFRfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUKKyAgICBpZiAobmFtZSA9PSAiR0xf
QU5HTEVfZnJhbWVidWZmZXJfYmxpdCIpCisgICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVu
c2lvbnMuY29udGFpbnMoIkdMX0VYVF9mcmFtZWJ1ZmZlcl9ibGl0Iik7CisgICAgaWYgKG5hbWUg
PT0gIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIikKKyAgICAgICAgcmV0dXJuIG1f
YXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfRVhUX2ZyYW1lYnVmZmVyX211bHRpc2Ft
cGxlIik7CisKKyAgICAvLyBEZXNrdG9wIEdMIGFsd2F5cyBzdXBwb3J0cyBHTF9PRVNfcmdiOF9y
Z2JhOC4KKyAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3JnYjhfcmdiYTgiKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIC8vIElmIEdMX0FSQl90ZXh0dXJlX2Zsb2F0IGlzIGF2YWlsYWJsZSB0
aGVuIHdlIHJlcG9ydCBHTF9PRVNfdGV4dHVyZV9mbG9hdCBhbmQKKyAgICAvLyBHTF9PRVNfdGV4
dHVyZV9oYWxmX2Zsb2F0IGFzIGF2YWlsYWJsZS4KKyAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3Rl
eHR1cmVfZmxvYXQiIHx8IG5hbWUgPT0gIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQiKQorICAg
ICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9BUkJfdGV4dHVy
ZV9mbG9hdCIpOworCisgICAgLy8gR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QKKyAgICBpZiAo
bmFtZSA9PSAiR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKQorICAgICAgICByZXR1cm4gbV9h
dmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9BUFBMRV92ZXJ0ZXhfYXJyYXlfb2JqZWN0
Iik7CisKKyAgICAvLyBEZXNrdG9wIEdMIGFsd2F5cyBzdXBwb3J0cyB0aGUgc3RhbmRhcmQgZGVy
aXZhdGl2ZSBmdW5jdGlvbnMKKyAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2
YXRpdmVzIikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAobmFtZSA9PSAiR0xfRVhU
X3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIikKKyAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxl
RXh0ZW5zaW9ucy5jb250YWlucygiR0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7
CisKKyAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKG5hbWUpOworfQor
CitTdHJpbmcgRXh0ZW5zaW9uczNET3BlbkdMOjpnZXRFeHRlbnNpb25zKCkKK3sKKyAgICByZXR1
cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KDo6Z2xHZXRTdHJpbmcoR0xf
RVhURU5TSU9OUykpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8g
RU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oCmluZGV4IDJiMmQzMGEwOTBlNTRm
Y2ExZDA2NDYyYWU3MWRkN2VjODcyYjU0NGMuLmEyNzg5YmRjY2MwNWRlYTRkNmRmOWIzYjRjNDc3
N2Y3YjE5ZWExMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmgKQEAgLTI2LDcgKzI2LDcgQEAK
ICNpZm5kZWYgRXh0ZW5zaW9uczNET3BlbkdMX2gKICNkZWZpbmUgRXh0ZW5zaW9uczNET3BlbkdM
X2gKIAotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbi5oIgogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgpAQCAtMzQsMTUgKzM0LDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgRXh0ZW5zaW9uczNET3BlbkdMIDogcHVibGljIEV4dGVuc2lvbnMzRCB7Citj
bGFzcyBFeHRlbnNpb25zM0RPcGVuR0wgOiBwdWJsaWMgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9u
IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5FeHRlbnNpb25zM0RPcGVuR0woKTsKIAogICAgIC8v
IEV4dGVuc2lvbnMzRCBtZXRob2RzLgotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0cyhjb25zdCBT
dHJpbmcmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZW5zdXJlRW5hYmxlZChjb25zdCBTdHJpbmcmKTsK
LSAgICB2aXJ0dWFsIGJvb2wgaXNFbmFibGVkKGNvbnN0IFN0cmluZyYpOwotICAgIHZpcnR1YWwg
aW50IGdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKTsKICAgICB2aXJ0dWFsIHZvaWQgYmxpdEZy
YW1lYnVmZmVyKGxvbmcgc3JjWDAsIGxvbmcgc3JjWTAsIGxvbmcgc3JjWDEsIGxvbmcgc3JjWTEs
IGxvbmcgZHN0WDAsIGxvbmcgZHN0WTAsIGxvbmcgZHN0WDEsIGxvbmcgZHN0WTEsIHVuc2lnbmVk
IGxvbmcgbWFzaywgdW5zaWduZWQgbG9uZyBmaWx0ZXIpOwogICAgIHZpcnR1YWwgdm9pZCByZW5k
ZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVk
IGxvbmcgc2FtcGxlcywgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9u
ZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpOwogICAgIApAQCAtNTAsMTQgKzQ2LDE2IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0z
RE9iamVjdCk7CiAgICAgdmlydHVhbCBHQzNEYm9vbGVhbiBpc1ZlcnRleEFycmF5T0VTKFBsYXRm
b3JtM0RPYmplY3QpOwogICAgIHZpcnR1YWwgdm9pZCBiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZv
cm0zRE9iamVjdCk7Ci0gICAgdmlydHVhbCBTdHJpbmcgZ2V0VHJhbnNsYXRlZFNoYWRlclNvdXJj
ZUFOR0xFKFBsYXRmb3JtM0RPYmplY3QpOwogICAgIHZpcnR1YWwgdm9pZCBjb3B5VGV4dHVyZUNI
Uk9NSVVNKEdDM0RlbnVtLCBQbGF0Zm9ybTNET2JqZWN0LCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNE
aW50LCBHQzNEZW51bSk7CiAKLXByaXZhdGU6Citwcm90ZWN0ZWQ6CiAgICAgLy8gVGhpcyBjbGFz
cyBvbmx5IG5lZWRzIHRvIGJlIGluc3RhbnRpYXRlZCBieSBHcmFwaGljc0NvbnRleHQzRCBpbXBs
ZW1lbnRhdGlvbnMuCiAgICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogICAgIEV4
dGVuc2lvbnMzRE9wZW5HTChHcmFwaGljc0NvbnRleHQzRCopOwogCisgICAgdmlydHVhbCBib29s
IHN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IFdURjo6U3RyaW5nJik7CisgICAgdmlydHVhbCBTdHJp
bmcgZ2V0RXh0ZW5zaW9ucygpOworCiAgICAgYm9vbCBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0
ZW5zaW9uczsKICAgICBIYXNoU2V0PFN0cmluZz4gbV9hdmFpbGFibGVFeHRlbnNpb25zOwogICAg
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4
dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZTQ2
OGQ1NGQ3ZGMzYWEyNDQ3Zjc1YTQ4MjllNDRhYmMwMzlmZjYxCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5H
TENvbW1vbi5jcHAKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQkdMKQorI2luY2x1ZGUgIkV4dGVuc2lv
bnMzRE9wZW5HTENvbW1vbi5oIgorCisjaW5jbHVkZSAiQU5HTEVXZWJLaXRCcmlkZ2UuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorCisjaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkK
KyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1Mb2cuaD4KKyNlbmRpZgorCisjaWYgVVNFKE9Q
RU5HTF9FU18yKQorI2luY2x1ZGUgIk9wZW5HTEVTU2hpbXMuaCIKKyNpbmNsdWRlIDxHTEVTMi9n
bDIuaD4KKyNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KKyNlbGlmIFBMQVRGT1JNKE1BQykKKyNp
bmNsdWRlIDxPcGVuR0wvZ2wuaD4KKyNlbGlmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZM
KSB8fCBQTEFURk9STShRVCkKKyNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgorI2VuZGlmCisKKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRXh0ZW5zaW9u
czNET3BlbkdMQ29tbW9uOjpFeHRlbnNpb25zM0RPcGVuR0xDb21tb24oR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQpCisgICAgOiBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucyhmYWxz
ZSkKKyAgICAsIG1fY29udGV4dChjb250ZXh0KQoreworfQorCitFeHRlbnNpb25zM0RPcGVuR0xD
b21tb246On5FeHRlbnNpb25zM0RPcGVuR0xDb21tb24oKQoreworfQorCitib29sIEV4dGVuc2lv
bnMzRE9wZW5HTENvbW1vbjo6c3VwcG9ydHMoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlm
ICghbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnMpCisgICAgICAgIGluaXRpYWxpemVB
dmFpbGFibGVFeHRlbnNpb25zKCk7CisKKyAgICByZXR1cm4gc3VwcG9ydHNFeHRlbnNpb24obmFt
ZSk7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjplbnN1cmVFbmFibGVkKGNv
bnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3N0YW5kYXJkX2Rl
cml2YXRpdmVzIikgeworICAgICAgICAvLyBFbmFibGUgc3VwcG9ydCBpbiBBTkdMRSAoaWYgbm90
IGVuYWJsZWQgYWxyZWFkeSkKKyAgICAgICAgQU5HTEVXZWJLaXRCcmlkZ2UmIGNvbXBpbGVyID0g
bV9jb250ZXh0LT5tX2NvbXBpbGVyOworICAgICAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgQU5HTEVS
ZXNvdXJjZXMgPSBjb21waWxlci5nZXRSZXNvdXJjZXMoKTsKKyAgICAgICAgaWYgKCFBTkdMRVJl
c291cmNlcy5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMpIHsKKyAgICAgICAgICAgIEFOR0xFUmVz
b3VyY2VzLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA9IDE7CisgICAgICAgICAgICBjb21waWxl
ci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOworICAgICAgICB9CisgICAgfQorfQorCiti
b29sIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6aXNFbmFibGVkKGNvbnN0IFN0cmluZyYgbmFt
ZSkKK3sKKyAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikgewor
ICAgICAgICBBTkdMRVdlYktpdEJyaWRnZSYgY29tcGlsZXIgPSBtX2NvbnRleHQtPm1fY29tcGls
ZXI7CisgICAgICAgIHJldHVybiBjb21waWxlci5nZXRSZXNvdXJjZXMoKS5PRVNfc3RhbmRhcmRf
ZGVyaXZhdGl2ZXM7CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0cyhuYW1lKTsKK30KKworaW50
IEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpCit7
CisgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUjsKK30KKworU3RyaW5nIEV4
dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKFBs
YXRmb3JtM0RPYmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChzaGFkZXIpOworICAgIGludCBH
THNoYWRlclR5cGU7CisgICAgQU5HTEVTaGFkZXJUeXBlIHNoYWRlclR5cGU7CisKKyAgICBBTkdM
RVdlYktpdEJyaWRnZSYgY29tcGlsZXIgPSBtX2NvbnRleHQtPm1fY29tcGlsZXI7CisKKyAgICBt
X2NvbnRleHQtPmdldFNoYWRlcml2KHNoYWRlciwgR3JhcGhpY3NDb250ZXh0M0Q6OlNIQURFUl9U
WVBFLCAmR0xzaGFkZXJUeXBlKTsKKworICAgIGlmIChHTHNoYWRlclR5cGUgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlZFUlRFWF9TSEFERVIpCisgICAgICAgIHNoYWRlclR5cGUgPSBTSEFERVJfVFlQ
RV9WRVJURVg7CisgICAgZWxzZSBpZiAoR0xzaGFkZXJUeXBlID09IEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFHTUVOVF9TSEFERVIpCisgICAgICAgIHNoYWRlclR5cGUgPSBTSEFERVJfVFlQRV9GUkFH
TUVOVDsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiAiIjsgLy8gSW52YWxpZCBzaGFkZXIgdHlw
ZS4KKworICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlNo
YWRlclNvdXJjZUVudHJ5Pjo6aXRlcmF0b3IgcmVzdWx0ID0gbV9jb250ZXh0LT5tX3NoYWRlclNv
dXJjZU1hcC5maW5kKHNoYWRlcik7CisKKyAgICBpZiAocmVzdWx0ID09IG1fY29udGV4dC0+bV9z
aGFkZXJTb3VyY2VNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiAiIjsKKworICAgIEdyYXBoaWNz
Q29udGV4dDNEOjpTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnNlY29uZDsKKwor
ICAgIFN0cmluZyB0cmFuc2xhdGVkU2hhZGVyU291cmNlOworICAgIFN0cmluZyBzaGFkZXJJbmZv
TG9nOworCisgICAgYm9vbCBpc1ZhbGlkID0gY29tcGlsZXIudmFsaWRhdGVTaGFkZXJTb3VyY2Uo
ZW50cnkuc291cmNlLnV0ZjgoKS5kYXRhKCksIHNoYWRlclR5cGUsIHRyYW5zbGF0ZWRTaGFkZXJT
b3VyY2UsIHNoYWRlckluZm9Mb2cpOworCisgICAgZW50cnkubG9nID0gc2hhZGVySW5mb0xvZzsK
KyAgICBlbnRyeS5pc1ZhbGlkID0gaXNWYWxpZDsKKworICAgIGlmICghaXNWYWxpZCkKKyAgICAg
ICAgcmV0dXJuICIiOworCisgICAgcmV0dXJuIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7Cit9CisK
K3ZvaWQgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjppbml0aWFsaXplQXZhaWxhYmxlRXh0ZW5z
aW9ucygpCit7CisgICAgU3RyaW5nIGV4dGVuc2lvbnNTdHJpbmcgPSBnZXRFeHRlbnNpb25zKCk7
CisgICAgVmVjdG9yPFN0cmluZz4gYXZhaWxhYmxlRXh0ZW5zaW9uczsKKyAgICBleHRlbnNpb25z
U3RyaW5nLnNwbGl0KCIgIiwgYXZhaWxhYmxlRXh0ZW5zaW9ucyk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBhdmFpbGFibGVFeHRlbnNpb25zLnNpemUoKTsgKytpKQorICAgICAgICBtX2F2
YWlsYWJsZUV4dGVuc2lvbnMuYWRkKGF2YWlsYWJsZUV4dGVuc2lvbnNbaV0pOworICAgIG1faW5p
dGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zID0gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkwMTgzOWU2ZTNlNGI5NWExZTU2NmNkMTFmOGEyN2Q2
OWJlYjM5ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmgKQEAgLTAsMCArMSw3MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uX2gKKyNkZWZpbmUgRXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uX2gKKworI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24gOiBwdWJsaWMgRXh0ZW5zaW9uczNEIHsKK3B1
YmxpYzoKKyAgICB2aXJ0dWFsIH5FeHRlbnNpb25zM0RPcGVuR0xDb21tb24oKTsKKworICAgIC8v
IEV4dGVuc2lvbnMzRCBtZXRob2RzLgorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0cyhjb25zdCBT
dHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5zdXJlRW5hYmxlZChjb25zdCBTdHJpbmcmKTsK
KyAgICB2aXJ0dWFsIGJvb2wgaXNFbmFibGVkKGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwg
aW50IGdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKTsKKworICAgIHZpcnR1YWwgUGxhdGZvcm0z
RE9iamVjdCBjcmVhdGVWZXJ0ZXhBcnJheU9FUygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVs
ZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCkgPSAwOworICAgIHZpcnR1YWwgR0Mz
RGJvb2xlYW4gaXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KSA9IDA7CisKKyAg
ICB2aXJ0dWFsIFN0cmluZyBnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoUGxhdGZvcm0z
RE9iamVjdCk7CisKK3Byb3RlY3RlZDoKKyAgICBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24oR3Jh
cGhpY3NDb250ZXh0M0QqKTsKKworICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplQXZhaWxhYmxl
RXh0ZW5zaW9ucygpOworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBT
dHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0RXh0ZW5zaW9ucygpID0gMDsKKwor
ICAgIGJvb2wgbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnM7CisgICAgSGFzaFNldDxT
dHJpbmc+IG1fYXZhaWxhYmxlRXh0ZW5zaW9uczsKKworICAgIC8vIFdlYWsgcG9pbnRlciBiYWNr
IHRvIEdyYXBoaWNzQ29udGV4dDNECisgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEV4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45
YzY1MDcxNWVlZTIyM2E5ZDA3NzBjZGQyNjFkMTQxNTIxYzNmMmE3Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9w
ZW5HTEVTLmNwcApAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaWYgRU5BQkxFKFdFQkdMKQorI2luY2x1ZGUgIkV4dGVuc2lvbnMz
RE9wZW5HTEVTLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUg
PEVHTC9lZ2wuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitFeHRlbnNpb25zM0RPcGVuR0xFUzo6RXh0ZW5zaW9uczNET3BlbkdMRVMoR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAgOiBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24oY29u
dGV4dCkKKyAgICAsIG1fc3VwcG9ydHNPRVN2ZXJ0ZXhBcnJheU9iamVjdChmYWxzZSkKKyAgICAs
IG1fc3VwcG9ydHNJTUdNdWx0aXNhbXBsZWRSZW5kZXJUb1RleHR1cmUoZmFsc2UpCisgICAgLCBt
X2dsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRygwKQorICAgICwgbV9nbFJlbmRl
cmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRygwKQorICAgICwgbV9nbEJpbmRWZXJ0ZXhBcnJh
eU9FUygwKQorICAgICwgbV9nbERlbGV0ZVZlcnRleEFycmF5c09FUygwKQorICAgICwgbV9nbEdl
blZlcnRleEFycmF5c09FUygwKQorICAgICwgbV9nbElzVmVydGV4QXJyYXlPRVMoMCkKK3sKK30K
KworRXh0ZW5zaW9uczNET3BlbkdMRVM6On5FeHRlbnNpb25zM0RPcGVuR0xFUygpCit7Cit9CisK
K3ZvaWQgRXh0ZW5zaW9uczNET3BlbkdMRVM6OmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1w
bGVJTUcodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5z
aWduZWQgbG9uZyB0ZXh0YXJnZXQsIHVuc2lnbmVkIGludCB0ZXh0dXJlLCBpbnQgbGV2ZWwsIHVu
c2lnbmVkIGxvbmcgc2FtcGxlcykKK3sKKyAgICBpZiAobV9nbEZyYW1lYnVmZmVyVGV4dHVyZTJE
TXVsdGlzYW1wbGVJTUcpCisgICAgICAgIG1fZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2Ft
cGxlSU1HKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCwgc2Ft
cGxlcyk7CisgICAgZWxzZQorICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKK30KKwordm9pZCBFeHRlbnNpb25zM0RPcGVuR0xFUzo6cmVu
ZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNp
Z25lZCBsb25nIHNhbXBsZXMsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVk
IGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQoreworICAgIGlmIChtX2dsUmVuZGVy
YnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HKQorICAgICAgICBtX2dsUmVuZGVyYnVmZmVyU3Rv
cmFnZU11bHRpc2FtcGxlSU1HKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRo
LCBoZWlnaHQpOworICAgIGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgRXh0ZW5zaW9u
czNET3BlbkdMRVM6OmNyZWF0ZVZlcnRleEFycmF5T0VTKCkKK3sKKyAgICBtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmIChtX2dsR2VuVmVydGV4QXJyYXlzT0VTKSB7Cisg
ICAgICAgIEdMdWludCBhcnJheSA9IDA7CisgICAgICAgIG1fZ2xHZW5WZXJ0ZXhBcnJheXNPRVMo
MSwgJmFycmF5KTsKKyAgICAgICAgcmV0dXJuIGFycmF5OworICAgIH0KKworICAgIG1fY29udGV4
dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgIHJldHVybiAw
OworfQorCit2b2lkIEV4dGVuc2lvbnMzRE9wZW5HTEVTOjpkZWxldGVWZXJ0ZXhBcnJheU9FUyhQ
bGF0Zm9ybTNET2JqZWN0IGFycmF5KQoreworICAgIGlmICghYXJyYXkpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKG1fZ2xE
ZWxldGVWZXJ0ZXhBcnJheXNPRVMpCisgICAgICAgIG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMo
MSwgJmFycmF5KTsKKyAgICBlbHNlCisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworfQorCitHQzNEYm9vbGVhbiBFeHRlbnNpb25zM0RP
cGVuR0xFUzo6aXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQoreworICAg
IGlmICghYXJyYXkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIG1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKG1fZ2xJc1ZlcnRleEFycmF5T0VTKQorICAg
ICAgICByZXR1cm4gbV9nbElzVmVydGV4QXJyYXlPRVMoYXJyYXkpOworCisgICAgbV9jb250ZXh0
LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCit2b2lkIEV4dGVuc2lvbnMzRE9wZW5HTEVTOjpiaW5kVmVydGV4QXJyYXlPRVMo
UGxhdGZvcm0zRE9iamVjdCBhcnJheSkKK3sKKyAgICBpZiAoIWFycmF5KQorICAgICAgICByZXR1
cm47CisKKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmIChtX2ds
QmluZFZlcnRleEFycmF5T0VTKQorICAgICAgICBtX2dsQmluZFZlcnRleEFycmF5T0VTKGFycmF5
KTsKKyAgICBlbHNlCisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworfQorCisKK2Jvb2wgRXh0ZW5zaW9uczNET3BlbkdMRVM6OnN1cHBv
cnRzRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAobV9hdmFpbGFibGVF
eHRlbnNpb25zLmNvbnRhaW5zKG5hbWUpKSB7CisgICAgICAgIGlmIChuYW1lID09ICJHTF9PRVNf
dmVydGV4X2FycmF5X29iamVjdCIgJiYgIW1fc3VwcG9ydHNPRVN2ZXJ0ZXhBcnJheU9iamVjdCkg
eworICAgICAgICAgICAgbV9nbEJpbmRWZXJ0ZXhBcnJheU9FUyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
UEZOR0xCSU5EVkVSVEVYQVJSQVlPRVNQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xCaW5kVmVy
dGV4QXJyYXlPRVMiKSk7CisgICAgICAgICAgICBtX2dsR2VuVmVydGV4QXJyYXlzT0VTID0gcmVp
bnRlcnByZXRfY2FzdDxQRk5HTEdFTlZFUlRFWEFSUkFZU09FU1BST0M+KGVnbEdldFByb2NBZGRy
ZXNzKCJnbEdlblZlcnRleEFycmF5c09FUyIpKTsKKyAgICAgICAgICAgIG1fZ2xEZWxldGVWZXJ0
ZXhBcnJheXNPRVMgPSByZWludGVycHJldF9jYXN0PFBGTkdMREVMRVRFVkVSVEVYQVJSQVlTT0VT
UFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsRGVsZXRlVmVydGV4QXJyYXlzT0VTIikpOworICAg
ICAgICAgICAgbV9nbElzVmVydGV4QXJyYXlPRVMgPSByZWludGVycHJldF9jYXN0PFBGTkdMSVNW
RVJURVhBUlJBWU9FU1BST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbElzVmVydGV4QXJyYXlPRVMi
KSk7CisgICAgICAgICAgICBtX3N1cHBvcnRzT0VTdmVydGV4QXJyYXlPYmplY3QgPSB0cnVlOwor
ICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gIkdMX0lNR19tdWx0aXNhbXBsZWRfcmVuZGVyX3Rv
X3RleHR1cmUiICYmICFtX3N1cHBvcnRzSU1HTXVsdGlzYW1wbGVkUmVuZGVyVG9UZXh0dXJlKSB7
CisgICAgICAgICAgICBtX2dsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRyA9IHJl
aW50ZXJwcmV0X2Nhc3Q8UEZOR0xGUkFNRUJVRkZFUlRFWFRVUkUyRE1VTFRJU0FNUExFSU1HUFJP
Qz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlN
RyIpKTsKKyAgICAgICAgICAgIG1fZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUcg
PSByZWludGVycHJldF9jYXN0PFBGTkdMUkVOREVSQlVGRkVSU1RPUkFHRU1VTFRJU0FNUExFSU1H
UFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxl
SU1HIikpOworICAgICAgICAgICAgbV9zdXBwb3J0c0lNR011bHRpc2FtcGxlZFJlbmRlclRvVGV4
dHVyZSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitTdHJpbmcgRXh0ZW5zaW9uczNET3BlbkdMRVM6OmdldEV4
dGVuc2lvbnMoKQoreworICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBj
aGFyKj4oOjpnbEdldFN0cmluZyhHTF9FWFRFTlNJT05TKSkpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVu
R0xFUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjkwMjIyY2E0ZDdhOTRhMDhjMmY5NzU2MTRiZjJiYzYwZTAwMWUw
OTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBFeHRlbnNpb25zM0RPcGVuR0xFU19oCisjZGVmaW5lIEV4dGVuc2lvbnMzRE9wZW5HTEVT
X2gKKworI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oIgorCisjaW5jbHVkZSA8
R0xFUzIvZ2wyLmg+CisjaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgRXh0ZW5zaW9uczNET3BlbkdMRVMgOiBwdWJsaWMgRXh0ZW5zaW9uczNE
T3BlbkdMQ29tbW9uIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5FeHRlbnNpb25zM0RPcGVuR0xF
UygpOworCisgICAgdmlydHVhbCB2b2lkIGZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJ
TUcodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWdu
ZWQgbG9uZyB0ZXh0YXJnZXQsIHVuc2lnbmVkIGludCB0ZXh0dXJlLCBpbnQgbGV2ZWwsIHVuc2ln
bmVkIGxvbmcgc2FtcGxlcyk7CisgICAgdmlydHVhbCB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2VN
dWx0aXNhbXBsZUlNRyh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVz
LCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNp
Z25lZCBsb25nIGhlaWdodCk7CisKKyAgICB2aXJ0dWFsIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRl
VmVydGV4QXJyYXlPRVMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlVmVydGV4QXJyYXlPRVMo
UGxhdGZvcm0zRE9iamVjdCk7CisgICAgdmlydHVhbCBHQzNEYm9vbGVhbiBpc1ZlcnRleEFycmF5
T0VTKFBsYXRmb3JtM0RPYmplY3QpOworICAgIHZpcnR1YWwgdm9pZCBiaW5kVmVydGV4QXJyYXlP
RVMoUGxhdGZvcm0zRE9iamVjdCk7CisKK3Byb3RlY3RlZDoKKyAgICAvLyBUaGlzIGNsYXNzIG9u
bHkgbmVlZHMgdG8gYmUgaW5zdGFudGlhdGVkIGJ5IEdyYXBoaWNzQ29udGV4dDNEIGltcGxlbWVu
dGF0aW9ucy4KKyAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CisgICAgRXh0ZW5z
aW9uczNET3BlbkdMRVMoR3JhcGhpY3NDb250ZXh0M0QqKTsKKworICAgIHZpcnR1YWwgYm9vbCBz
dXBwb3J0c0V4dGVuc2lvbihjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRF
eHRlbnNpb25zKCk7CisKKyAgICBib29sIG1fc3VwcG9ydHNPRVN2ZXJ0ZXhBcnJheU9iamVjdDsK
KyAgICBib29sIG1fc3VwcG9ydHNJTUdNdWx0aXNhbXBsZWRSZW5kZXJUb1RleHR1cmU7CisKKyAg
ICBQRk5HTEZSQU1FQlVGRkVSVEVYVFVSRTJETVVMVElTQU1QTEVJTUdQUk9DIG1fZ2xGcmFtZWJ1
ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HOworICAgIFBGTkdMUkVOREVSQlVGRkVSU1RPUkFH
RU1VTFRJU0FNUExFSU1HUFJPQyBtX2dsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1H
OworICAgIFBGTkdMQklORFZFUlRFWEFSUkFZT0VTUFJPQyBtX2dsQmluZFZlcnRleEFycmF5T0VT
OworICAgIFBGTkdMREVMRVRFVkVSVEVYQVJSQVlTT0VTUFJPQyBtX2dsRGVsZXRlVmVydGV4QXJy
YXlzT0VTOworICAgIFBGTkdMR0VOVkVSVEVYQVJSQVlTT0VTUFJPQyBtX2dsR2VuVmVydGV4QXJy
YXlzT0VTOworICAgIFBGTkdMSVNWRVJURVhBUlJBWU9FU1BST0MgbV9nbElzVmVydGV4QXJyYXlP
RVM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFeHRlbnNpb25z
M0RPcGVuR0xFU19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAppbmRleCAz
ZjQ3YjZlMjFlYjI1NTI0M2VlZWE0YmYzMTk4NTNhYmJmNzZhMmRjLi41ZjAwNTA1OTljNmFiNmI0
MTMyMDMyNTgwYTU0MGEzYzI2ZTcyOWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9w
ZW5HTC5jcHAKQEAgLTM0LDYgKzM0LDExIEBACiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8
Y3N0cmluZz4KKyNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKICNpZiBQTEFURk9STShNQUMpCiAjaW5jbHVkZSA8T3BlbkdML2dsLmg+
CiAjZWxpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oUVQpCkBA
IC00Nyw2ICs1MiwzMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzQW5kQ29u
dmVydFRvQkdSQUlmTmVjZXNzYXJ5KGludCB4LCBpbnQgeSwgaW50CiAgICAgOjpnbFJlYWRQaXhl
bHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgR0xfQkdSQSwgR0xfVU5TSUdORURfSU5UXzhfOF84Xzhf
UkVWLCBwaXhlbHMpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZUF0dHJp
YnV0ZXMoKQoreworICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IGdldEV4dGVuc2lvbnMo
KTsKKyAgICBpZiAobV9hdHRycy5zdGVuY2lsKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIHBhY2tl
ZERlcHRoU3RlbmNpbEV4dGVuc2lvbiA9IGlzR0xFUzJDb21wbGlhbnQoKSA/ICJHTF9PRVNfcGFj
a2VkX2RlcHRoX3N0ZW5jaWwiIDogIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCI7CisgICAg
ICAgIGlmIChleHRlbnNpb25zLT5zdXBwb3J0cyhwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24p
KSB7CisgICAgICAgICAgICBleHRlbnNpb25zLT5lbnN1cmVFbmFibGVkKHBhY2tlZERlcHRoU3Rl
bmNpbEV4dGVuc2lvbik7CisgICAgICAgICAgICAvLyBGb3JjZSBkZXB0aCBpZiBzdGVuY2lsIGlz
IHRydWUuCisgICAgICAgICAgICBtX2F0dHJzLmRlcHRoID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBtX2F0dHJzLnN0ZW5jaWwgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKG1f
YXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAgIGJvb2wgaXNWYWxpZFZlbmRvciA9IHRydWU7Cisg
ICAgICAgIC8vIEN1cnJlbnRseSBpbiBNYWMgd2Ugb25seSB0dXJuIG9uIGFudGlhbGlhcyBpZiB2
ZW5kb3IgaXMgTlZJRElBLAorICAgICAgICAvLyBvciBpZiBBVEkgYW5kIG9uIDEwLjcuMiBhbmQg
YWJvdmUuCisgICAgICAgIGNvbnN0IGNoYXIqIHZlbmRvciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgY2hhcio+KDo6Z2xHZXRTdHJpbmcoR0xfVkVORE9SKSk7CisgICAgICAgIGlmICghdmVuZG9y
IHx8ICghc3RkOjpzdHJzdHIodmVuZG9yLCAiTlZJRElBIikgJiYgIShzdGQ6OnN0cnN0cih2ZW5k
b3IsICJBVEkiKSAmJiBzeXN0ZW1BbGxvd3NNdWx0aXNhbXBsaW5nT25BVElDYXJkcygpKSkpCisg
ICAgICAgICAgICBpc1ZhbGlkVmVuZG9yID0gZmFsc2U7CisgICAgICAgIGlmICghaXNWYWxpZFZl
bmRvciB8fCAhZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRp
c2FtcGxlIikgfHwgaXNHTEVTMkNvbXBsaWFudCgpKQorICAgICAgICAgICAgbV9hdHRycy5hbnRp
YWxpYXMgPSBmYWxzZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZXh0ZW5zaW9ucy0+ZW5z
dXJlRW5hYmxlZCgiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKTsKKyAgICB9Cit9
CisKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNp
emUpCiB7CiAgICAgY29uc3QgaW50IHdpZHRoID0gc2l6ZS53aWR0aCgpOwpAQCAtMTUxLDYgKzE4
Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNl
c3NhcnkoY29uc3QgSW50UmVjdCYgcmVjdCkKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRl
cmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQogewogICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworCiAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkgewogICAgIGNhc2UgREVQVEhf
U1RFTkNJTDoKICAgICAgICAgaW50ZXJuYWxmb3JtYXQgPSBHTF9ERVBUSDI0X1NURU5DSUw4X0VY
VDsKQEAgLTIzMiw2ICsyNjQsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCiAgICAgR0Mz
RGVudW0gb3BlbkdMSW50ZXJuYWxGb3JtYXQgPSBpbnRlcm5hbGZvcm1hdDsKICAgICBpZiAodHlw
ZSA9PSBHTF9GTE9BVCkgewogICAgICAgICBpZiAoZm9ybWF0ID09IEdMX1JHQkEpCkBAIC0yNDEs
NiArMjc0LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGUKICAgICB9CiAKICAgICA6OmdsVGV4
SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBvcGVuR0xJbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdo
dCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApAQCAtMjU2LDYgKzI5MCwzMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRlcHRo
KEdDM0RjbGFtcGYgZGVwdGgpCiAgICAgOjpnbENsZWFyRGVwdGgoZGVwdGgpOwogfQogCitib29s
IEdyYXBoaWNzQ29udGV4dDNEOjpzeXN0ZW1BbGxvd3NNdWx0aXNhbXBsaW5nT25BVElDYXJkcygp
Cit7CisjaWYgUExBVEZPUk0oTUFDKQorI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVP
UEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTElPTikKKyAgICByZXR1cm4gdHJ1ZTsKKyNl
bHNlCisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBzdGF0aWMgU0ludDMyIHZlcnNp
b247CisgICAgaWYgKCF2ZXJzaW9uKSB7CisgICAgICAgIGlmIChHZXN0YWx0KGdlc3RhbHRTeXN0
ZW1WZXJzaW9uLCAmdmVyc2lvbikgIT0gbm9FcnIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Nzc5MjIgZm9yIG1vcmUgZGV0YWlscworICAgIHJldHVybiB2ZXJzaW9uID49IDB4MTA3MjsK
KyNlbmRpZiAvLyBTTk9XX0xFT1BBUkQgYW5kIExJT04KKyNlbHNlCisgICAgcmV0dXJuIGZhbHNl
OworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKK30KKworRXh0ZW5zaW9uczNEKiBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0RXh0ZW5zaW9ucygpCit7CisgICAgaWYgKCFtX2V4dGVuc2lvbnMpCisgICAg
ICAgIG1fZXh0ZW5zaW9ucyA9IGFkb3B0UHRyKG5ldyBFeHRlbnNpb25zM0RPcGVuR0wodGhpcykp
OworICAgIHJldHVybiBtX2V4dGVuc2lvbnMuZ2V0KCk7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVO
QUJMRShXRUJHTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24u
Y3BwCmluZGV4IDQyOWZjNTFjOTA0NmM0NGE1MGVmZWNlMTI5Y2JmMzFmNjBkOTk3NWUuLjc2MmUz
OWYwOWRhYTk2ZjVjMGRhNzM0ODQwOTQxODQ1YWRlYTliZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENv
bW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dy
YXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcApAQCAtMzAsNyArMzAsMTIgQEAKIAogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAKKyNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdD
b250ZXh0LmgiCisjaWYgVVNFKE9QRU5HTF9FU18yKQorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9w
ZW5HTEVTLmgiCisjZWxzZQogI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTC5oIgorI2VuZGlm
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIK
ICNpbmNsdWRlICJJbWFnZURhdGEuaCIKQEAgLTQ5LDM5ICs1NCwyNCBAQAogI2luY2x1ZGUgPHd0
Zi9VbnVzZWRQYXJhbS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAotI2lmIFBM
QVRGT1JNKE1BQykKKyNpZiBVU0UoT1BFTkdMX0VTXzIpCisjaW5jbHVkZSAiT3BlbkdMRVNTaGlt
cy5oIgorI2VsaWYgUExBVEZPUk0oTUFDKQogI2luY2x1ZGUgPE9wZW5HTC9nbC5oPgogI2VsaWYg
UExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpIHx8IFBMQVRGT1JNKFFUKQogI2luY2x1ZGUg
Ik9wZW5HTFNoaW1zLmgiCiAjZW5kaWYKIAotbmFtZXNwYWNlIFdlYkNvcmUgeworI2lmIFBMQVRG
T1JNKEJMQUNLQkVSUlkpCisjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtTG9nLmg+CisjZW5k
aWYKIAotc3RhdGljIGJvb2wgc3lzdGVtQWxsb3dzTXVsdGlzYW1wbGluZ09uQVRJQ2FyZHMoKQot
ewotI2lmIFBMQVRGT1JNKE1BQykKLSNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BB
UkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xJT04pCi0gICAgcmV0dXJuIHRydWU7Ci0jZWxz
ZQotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgc3RhdGljIFNJbnQzMiB2ZXJzaW9u
OwotICAgIGlmICghdmVyc2lvbikgewotICAgICAgICBpZiAoR2VzdGFsdChnZXN0YWx0U3lzdGVt
VmVyc2lvbiwgJnZlcnNpb24pICE9IG5vRXJyKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTc3OTIyIGZvciBtb3JlIGRldGFpbHMKLSAgICByZXR1cm4gdmVyc2lvbiA+PSAweDEwNzI7Ci0j
ZW5kaWYgLy8gU05PV19MRU9QQVJEIGFuZCBMSU9OCi0jZWxzZQotICAgIHJldHVybiBmYWxzZTsK
LSNlbmRpZiAvLyBQTEFURk9STShNQUMpCi19CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRlcygpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp2YWxpZGF0ZURlcHRoU3RlbmNpbChjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5j
aWxFeHRlbnNpb24pCiB7CiAgICAgRXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0gZ2V0RXh0ZW5z
aW9ucygpOwogICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpIHsKLSAgICAgICAgY29uc3QgY2hhciog
cGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uID0gaXNHTEVTMkNvbXBsaWFudCgpID8gIkdMX09F
U19wYWNrZWRfZGVwdGhfc3RlbmNpbCIgOiAiR0xfRVhUX3BhY2tlZF9kZXB0aF9zdGVuY2lsIjsK
ICAgICAgICAgaWYgKGV4dGVuc2lvbnMtPnN1cHBvcnRzKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVu
c2lvbikpIHsKICAgICAgICAgICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQocGFja2VkRGVw
dGhTdGVuY2lsRXh0ZW5zaW9uKTsKICAgICAgICAgICAgIC8vIEZvcmNlIGRlcHRoIGlmIHN0ZW5j
aWwgaXMgdHJ1ZS4KQEAgLTQzOSwzNiArNDI5LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCiAgICAgQVNTRVJUKHNoYWRl
cik7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAKLSAgICBpbnQgR0xzaGFkZXJUeXBlOwot
ICAgIEFOR0xFU2hhZGVyVHlwZSBzaGFkZXJUeXBlOwotCi0gICAgZ2xHZXRTaGFkZXJpdihzaGFk
ZXIsIFNIQURFUl9UWVBFLCAmR0xzaGFkZXJUeXBlKTsKLSAgICAKLSAgICBpZiAoR0xzaGFkZXJU
eXBlID09IFZFUlRFWF9TSEFERVIpCi0gICAgICAgIHNoYWRlclR5cGUgPSBTSEFERVJfVFlQRV9W
RVJURVg7Ci0gICAgZWxzZSBpZiAoR0xzaGFkZXJUeXBlID09IEZSQUdNRU5UX1NIQURFUikKLSAg
ICAgICAgc2hhZGVyVHlwZSA9IFNIQURFUl9UWVBFX0ZSQUdNRU5UOwotICAgIGVsc2UKLSAgICAg
ICAgcmV0dXJuOyAvLyBJbnZhbGlkIHNoYWRlciB0eXBlLgotCi0gICAgSGFzaE1hcDxQbGF0Zm9y
bTNET2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVy
U291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBTdHJpbmcgdHJhbnNsYXRlZFNoYWRlclNvdXJj
ZSA9IG1fZXh0ZW5zaW9ucy0+Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKHNoYWRlcik7
CiAKLSAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgIGlmICgh
dHJhbnNsYXRlZFNoYWRlclNvdXJjZS5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
U2hhZGVyU291cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT5zZWNvbmQ7Ci0KLSAgICBTdHJpbmcg
dHJhbnNsYXRlZFNoYWRlclNvdXJjZTsKLSAgICBTdHJpbmcgc2hhZGVySW5mb0xvZzsKLQotICAg
IGJvb2wgaXNWYWxpZCA9IG1fY29tcGlsZXIudmFsaWRhdGVTaGFkZXJTb3VyY2UoZW50cnkuc291
cmNlLnV0ZjgoKS5kYXRhKCksIHNoYWRlclR5cGUsIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UsIHNo
YWRlckluZm9Mb2cpOwotCi0gICAgZW50cnkubG9nID0gc2hhZGVySW5mb0xvZzsKLSAgICBlbnRy
eS5pc1ZhbGlkID0gaXNWYWxpZDsKLQotICAgIGlmICghaXNWYWxpZCkKLSAgICAgICAgcmV0dXJu
OyAvLyBTaGFkZXIgZGlkbid0IHZhbGlkYXRlLCBkb24ndCBtb3ZlIGZvcndhcmQgd2l0aCBjb21w
aWxpbmcgdHJhbnNsYXRlZCBzb3VyY2UuCi0KICAgICBpbnQgdHJhbnNsYXRlZFNoYWRlckxlbmd0
aCA9IHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UubGVuZ3RoKCk7CiAKICAgICBjb25zdCBDU3RyaW5n
JiB0cmFuc2xhdGVkU2hhZGVyQ1N0cmluZyA9IHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UudXRmOCgp
OwpAQCAtODAxLDE4ICs3NjYsNjEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVs
cyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2kKICAgICAgICAg
OjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1f
ZmJvKTsKICAgICAgICAgOjpnbEZsdXNoKCk7CiAgICAgfQorICAgIC8vIEN1cnJlbnRseSBvbmx5
IGZvcm1hdD1SR0JBLCB0eXBlPVVOU0lHTkVEX0JZVEUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBzcGVj
aWZpY2F0aW9uOiBodHRwOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L3dlYmdsL3NwZWNzL2xh
dGVzdC8KKyAgICAvLyBJZiB0aGlzIGV2ZXIgY2hhbmdlcywgdGhpcyBjb2RlIHdpbGwgbmVlZCB0
byBiZSB1cGRhdGVkLgorCisgICAgLy8gQ2FsY3VsYXRlIHRoZSBzdHJpZGVzIG9mIG91ciBkYXRh
IGFuZCBjYW52YXMKKyAgICB1bnNpZ25lZCBpbnQgZm9ybWF0U2l6ZSA9IDQ7IC8vIFJHQkEgVU5T
SUdORURfQllURQorICAgIHVuc2lnbmVkIGludCBkYXRhU3RyaWRlID0gd2lkdGggKiBmb3JtYXRT
aXplOworICAgIHVuc2lnbmVkIGludCBjYW52YXNTdHJpZGUgPSBtX2N1cnJlbnRXaWR0aCAqIGZv
cm1hdFNpemU7CisKKyAgICAvLyBJZiB3ZSBhcmUgdXNpbmcgYSBwYWNrIGFsaWdubWVudCBvZiA4
LCB0aGVuIHdlIG5lZWQgdG8gYWxpZ24gb3VyIHN0cmlkZXMgdG8gOCBieXRlIGJvdW5kYXJpZXMK
KyAgICAvLyBTZWU6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGF0YV9zdHJ1Y3R1cmVf
YWxpZ25tZW50IChjb21wdXRpbmcgcGFkZGluZykKKyAgICBpbnQgcGFja0FsaWdubWVudDsKKyAg
ICBnbEdldEludGVnZXJ2KEdMX1BBQ0tfQUxJR05NRU5ULCAmcGFja0FsaWdubWVudCk7CisgICAg
aWYgKDggPT0gcGFja0FsaWdubWVudCkgeworICAgICAgICBkYXRhU3RyaWRlID0gKGRhdGFTdHJp
ZGUgKyA3KSAmIH43OworICAgICAgICBjYW52YXNTdHJpZGUgPSAoY2FudmFzU3RyaWRlICsgNykg
JiB+NzsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBjaGFyKiBjYW52YXNEYXRhID0gbmV3IHVuc2ln
bmVkIGNoYXJbY2FudmFzU3RyaWRlICogbV9jdXJyZW50SGVpZ2h0XTsKKyAgICA6OmdsUmVhZFBp
eGVscygwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCBmb3JtYXQsIHR5cGUs
IGNhbnZhc0RhdGEpOworCisgICAgLy8gSWYgd2UgZmFpbGVkIHRvIHJlYWQgb3VyIGNhbnZhcyBk
YXRhIGR1ZSB0byBhIEdMIGVycm9yLCBkb24ndCBjb250aW51ZQorICAgIGludCBlcnJvciA9IGds
R2V0RXJyb3IoKTsKKyAgICBpZiAoR0xfTk9fRVJST1IgIT0gZXJyb3IpIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoZXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8g
Q2xlYXIgb3VyIGRhdGEgaW4gY2FzZSBzb21lIG9mIGl0IGxpZXMgb3V0c2lkZSB0aGUgYm91bmRz
IG9mIG91ciBjYW52YXMKKyAgICAvLyBUT0RPOiBkb24ndCBkbyB0aGlzIGlmIGFsbCBvZiB0aGUg
ZGF0YSBsaWVzIGluc2lkZSB0aGUgYm91bmRzIG9mIHRoZSBjYW52YXMKKyAgICBtZW1zZXQoZGF0
YSwgMCwgZGF0YVN0cmlkZSAqIGhlaWdodCk7CisKKyAgICAvLyBDYWxjdWxhdGUgdGhlIGludGVy
c2VjdGlvbiBvZiBvdXIgY2FudmFzIGFuZCBkYXRhIGJvdW5kcworICAgIEludFJlY3QgZGF0YVJl
Y3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgSW50UmVjdCBjYW52YXNSZWN0KDAsIDAsIG1f
Y3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQpOworICAgIEludFJlY3Qgbm9uWmVyb0RhdGFS
ZWN0ID0gaW50ZXJzZWN0aW9uKGRhdGFSZWN0LCBjYW52YXNSZWN0KTsKKworICAgIHVuc2lnbmVk
IGludCB4RGF0YU9mZnNldCA9IHggPCAwID8gLXggKiBmb3JtYXRTaXplIDogMDsKKyAgICB1bnNp
Z25lZCBpbnQgeURhdGFPZmZzZXQgPSB5IDwgMCA/IC15ICogZGF0YVN0cmlkZSA6IDA7CisgICAg
dW5zaWduZWQgaW50IHhDYW52YXNPZmZzZXQgPSBub25aZXJvRGF0YVJlY3QueCgpICogZm9ybWF0
U2l6ZTsKKyAgICB1bnNpZ25lZCBpbnQgeUNhbnZhc09mZnNldCA9IG5vblplcm9EYXRhUmVjdC55
KCkgKiBjYW52YXNTdHJpZGU7CisgICAgdW5zaWduZWQgY2hhciogZHN0ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcio+KGRhdGEpICsgeERhdGFPZmZzZXQgKyB5RGF0YU9mZnNldDsKKyAgICB1
bnNpZ25lZCBjaGFyKiBzcmMgPSBjYW52YXNEYXRhICsgeENhbnZhc09mZnNldCArIHlDYW52YXNP
ZmZzZXQ7CisgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgbm9uWmVyb0RhdGFSZWN0LmhlaWdo
dCgpOyByb3crKykgeworICAgICAgICBtZW1jcHkoZHN0LCBzcmMsIG5vblplcm9EYXRhUmVjdC53
aWR0aCgpICogZm9ybWF0U2l6ZSk7CisgICAgICAgIGRzdCArPSBkYXRhU3RyaWRlOworICAgICAg
ICBzcmMgKz0gY2FudmFzU3RyaWRlOworICAgIH0KKworICAgIGRlbGV0ZSBbXSBjYW52YXNEYXRh
OwogICAgIDo6Z2xSZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwg
ZGF0YSk7CisKICAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211
bHRpc2FtcGxlRkJPKQogICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCi17Ci0gICAgLy8gRklYTUU6IFRo
aXMgaXMgbm90IGltcGxlbWVudGVkIG9uIGRlc2t0b3AgT3BlbkdMLiBXZSBuZWVkIHRvIGhhdmUg
aWZkZWZzIGZvciB0aGUgZGlmZmVyZW50IEdMIHZhcmlhbnRzLgotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnNhbXBsZUNvdmVyYWdlKEdDM0RjbGFtcGYgdmFsdWUsIEdDM0Rib29sZWFuIGludmVydCkK
IHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKQEAgLTEzODYsMTMgKzEzOTQsNiBAQCBib29s
IEdyYXBoaWNzQ29udGV4dDNEOjpsYXllckNvbXBvc2l0ZWQoKSBjb25zdAogICAgIHJldHVybiBt
X2xheWVyQ29tcG9zaXRlZDsKIH0KIAotRXh0ZW5zaW9uczNEKiBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0RXh0ZW5zaW9ucygpCi17Ci0gICAgaWYgKCFtX2V4dGVuc2lvbnMpCi0gICAgICAgIG1fZXh0
ZW5zaW9ucyA9IGFkb3B0UHRyKG5ldyBFeHRlbnNpb25zM0RPcGVuR0wodGhpcykpOwotICAgIHJl
dHVybiBtX2V4dGVuc2lvbnMuZ2V0KCk7Ci19Ci0KIH0KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJH
TCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAppbmRleCBiMWJkMWRj
NTZjYTZmZDkyODNkYjJkYWUxMjM4M2NlMjJmYzk0MzAyLi4zYjQ0YTI0NmVmMTMwNGMwNDkxNmE4
YzEzNTkwNDYxY2VhM2YyODQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdM
RVMuY3BwCkBAIC0yOSw5MyArMjksMjkgQEAKICNpZiBFTkFCTEUoV0VCR0wpCiAKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQzRC5oIgotCi0jaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMLmgi
CisjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMRVMuaCIKICNpbmNsdWRlICJJbnRSZWN0Lmgi
CiAjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIkxheWVyV2ViS2l0VGhyZWFkLmgiCiAj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLQotI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZP
Uk0oUVQpCi0jaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKLSNlbmRpZgorI2luY2x1ZGUgIk9wZW5H
TEVTU2hpbXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpyZWFkUGl4ZWxzQW5kQ29udmVydFRvQkdSQUlmTmVjZXNzYXJ5KGludCB4LCBpbnQgeSwg
aW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBjaGFyKiBwaXhlbHMpCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQogewotICAgIGNvbnN0IGludCB0
b3RhbEJ5dGVzID0gbV9jdXJyZW50V2lkdGggKiBtX2N1cnJlbnRIZWlnaHQgKiA0OwotICAgIDo6
Z2xSZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZ
VEUsIHBpeGVscyk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQp
Ci0gICAgICAgIHN0ZDo6c3dhcChwaXhlbHNbaV0sIHBpeGVsc1tpICsgMl0pOyAvLyBDb252ZXJ0
IHRvIEJHUkEuCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFJlbGVhc2VTaGFk
ZXJDb21waWxlcigpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlRkJPcyhj
b25zdCBJbnRTaXplJiBzaXplKQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVsc0Fu
ZENvbnZlcnRUb0JHUkFJZk5lY2Vzc2FyeShpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhl
aWdodCwgdW5zaWduZWQgY2hhciogcGl4ZWxzKQogewotICAgIGNvbnN0IGludCB3aWR0aCA9IHNp
emUud2lkdGgoKTsKLSAgICBjb25zdCBpbnQgaGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsKLSAgICBH
THVpbnQgY29sb3JGb3JtYXQgPSAwLCBwaXhlbERhdGFUeXBlID0gMDsKLSAgICBpZiAobV9hdHRy
cy5hbHBoYSkgewotICAgICAgICBtX2ludGVybmFsQ29sb3JGb3JtYXQgPSBHTF9SR0JBOwotICAg
ICAgICBjb2xvckZvcm1hdCA9IEdMX1JHQkE7Ci0gICAgICAgIHBpeGVsRGF0YVR5cGUgPSBHTF9V
TlNJR05FRF9CWVRFOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1faW50ZXJuYWxDb2xvckZvcm1h
dCA9IEdMX1JHQjsKLSAgICAgICAgY29sb3JGb3JtYXQgPSBHTF9SR0I7Ci0gICAgICAgIHBpeGVs
RGF0YVR5cGUgPSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNTsKLSAgICB9Ci0KLSAgICAvLyBXZSBk
b24ndCBhbGxvdyB0aGUgbG9naWMgd2hlcmUgc3RlbmNpbCBpcyByZXF1aXJlZCBhbmQgZGVwdGgg
aXMgbm90LgotICAgIC8vIFNlZSBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVBdHRyaWJ1dGVz
LgotICAgIGJvb2wgc3VwcG9ydFBhY2tlZERlcHRoU3RlbmNpbEJ1ZmZlciA9IChtX2F0dHJzLnN0
ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkgJiYgZ2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xf
T0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7Ci0KLSAgICAvLyBSZXNpemUgcmVndWxhciBGQk8u
Ci0gICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOwotICAgIGlmIChtX2JvdW5kRkJPICE9
IG1fZmJvKSB7Ci0gICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKLSAgICAgICAgOjpnbEJp
bmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsK
LSAgICB9Ci0KLSAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsK
LSAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBtX2ludGVybmFsQ29sb3JGb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBwaXhlbERhdGFUeXBlLCAwKTsKLSAg
ICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQs
IG1fdGV4dHVyZSwgMCk7Ci0KLSAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9j
b21wb3NpdG9yVGV4dHVyZSk7Ci0gICAgOjpnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwg
bV9pbnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBjb2xvckZvcm1hdCwgR0xf
VU5TSUdORURfQllURSwgMCk7Ci0gICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDAp
OwotCi0gICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBhbnRpYWxpYXNpbmcgeWV0LiBTZWUgR3JhcGhp
Y3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRlcy4KLSAgICBBU1NFUlQoIW1fYXR0cnMuYW50
aWFsaWFzKTsKLQotICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkgewot
ICAgICAgICAvLyBVc2UgYSAyNCBiaXQgZGVwdGggYnVmZmVyIHdoZXJlIHdlIGtub3cgd2UgaGF2
ZSBpdC4KLSAgICAgICAgaWYgKHN1cHBvcnRQYWNrZWREZXB0aFN0ZW5jaWxCdWZmZXIpIHsKLSAg
ICAgICAgICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2RlcHRoU3RlbmNpbEJ1
ZmZlcik7Ci0gICAgICAgICAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBHcmFw
aGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTCwgd2lkdGgsIGhlaWdodCwgMCwgR3JhcGhpY3ND
b250ZXh0M0Q6OkRFUFRIX1NURU5DSUwsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRf
MjRfOCwgMCk7Ci0gICAgICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsKQotICAgICAgICAgICAg
ICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfU1RFTkNJTF9B
VFRBQ0hNRU5ULCBHTF9URVhUVVJFXzJELCBtX2RlcHRoU3RlbmNpbEJ1ZmZlciwgMCk7Ci0gICAg
ICAgICAgICBpZiAobV9hdHRycy5kZXB0aCkKLSAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZm
ZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0RFUFRIX0FUVEFDSE1FTlQsIEdMX1RFWFRV
UkVfMkQsIG1fZGVwdGhTdGVuY2lsQnVmZmVyLCAwKTsKLSAgICAgICAgICAgIDo6Z2xCaW5kVGV4
dHVyZShHTF9URVhUVVJFXzJELCAwKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlm
IChtX2F0dHJzLnN0ZW5jaWwpIHsKLSAgICAgICAgICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZl
ckVYVChHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX3N0ZW5jaWxCdWZmZXIpOwot
ICAgICAgICAgICAgICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlRVhUKEdyYXBoaWNzQ29udGV4
dDNEOjpSRU5ERVJCVUZGRVIsIEdMX1NURU5DSUxfSU5ERVg4LCB3aWR0aCwgaGVpZ2h0KTsKLSAg
ICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5U
LCBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX3N0ZW5jaWxCdWZmZXIpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG1fYXR0cnMuZGVwdGgpIHsKLSAgICAgICAgICAg
ICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVG
RkVSLCBtX2RlcHRoQnVmZmVyKTsKLSAgICAgICAgICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3Rv
cmFnZUVYVChHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBHTF9ERVBUSF9DT01QT05F
TlQxNiwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVu
ZGVyYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250
ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIs
IG1fZGVwdGhCdWZmZXIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgOjpnbEJpbmRSZW5k
ZXJidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgMCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgaWYgKGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVChHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVIpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9D
T01QTEVURSkgewotICAgICAgICAvLyBGSVhNRTogY2xlYW51cAotICAgICAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIDo6Z2xSZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIEdMX1JHQkEs
IEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscyk7CisgICAgaW50IHRvdGFsQnl0ZXMgPSB3aWR0aCAq
IGhlaWdodCAqIDQ7CisgICAgaWYgKGlzR0xFUzJDb21wbGlhbnQoKSkgeworICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHRvdGFsQnl0ZXM7IGkgKz0gNCkKKyAgICAgICAgICAgIHN0ZDo6c3dh
cChwaXhlbHNbaV0sIHBpeGVsc1tpICsgMl0pOyAvLyBDb252ZXJ0IHRvIEJHUkEuCiAgICAgfQot
Ci0gICAgcmV0dXJuIG11c3RSZXN0b3JlRkJPOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KGNvbnN0IEludFJlY3QmIHJlY3QpCkBA
IC0xNTYsNiArOTIsMTcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGUKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVBdHRyaWJ1dGVzKCkKK3sK
KyAgICB2YWxpZGF0ZURlcHRoU3RlbmNpbCgiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7
CisKKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAgRXh0ZW5zaW9uczNEKiBl
eHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOworICAgICAgICBpZiAoIWV4dGVuc2lvbnMtPnN1
cHBvcnRzKCJHTF9JTUdfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIikpCisgICAgICAg
ICAgICBtX2F0dHJzLmFudGlhbGlhcyA9IGZhbHNlOworICAgIH0KK30KKwogdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6ZGVwdGhSYW5nZShHQzNEY2xhbXBmIHpOZWFyLCBHQzNEY2xhbXBmIHpGYXIp
CiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CkBAIC0xNjgsNiArMTE1LDE5IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyRGVwdGgoR0MzRGNsYW1wZiBkZXB0aCkKICAgICA6Omds
Q2xlYXJEZXB0aGYoZGVwdGgpOwogfQogCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK0V4dGVu
c2lvbnMzRCogR3JhcGhpY3NDb250ZXh0M0Q6OmdldEV4dGVuc2lvbnMoKQoreworICAgIGlmICgh
bV9leHRlbnNpb25zKQorICAgICAgICBtX2V4dGVuc2lvbnMgPSBhZG9wdFB0cihuZXcgRXh0ZW5z
aW9uczNET3BlbkdMRVModGhpcykpOworICAgIHJldHVybiBtX2V4dGVuc2lvbnMuZ2V0KCk7Cit9
CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnN5c3RlbUFsbG93c011bHRpc2FtcGxpbmdPbkFU
SUNhcmRzKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7IC8vIG5vdCBhcHBsaWNhYmxlCit9CisKK30K
IAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKaW5kZXggNzBk
M2YyNGFmYTU1NDJhNjhhMTI0MWQzODFjM2NlOTM0ODc4MTg4NS4uMDY3NjkyMWMxMWY4MGZkYzVm
YTg0ODM5YWRmZmY1M2IxMzBhZmFiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKQEAgLTk4LDYg
Kzk4LDEzIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJDb21wbGlhbnQoKSBjb25z
dAogI2VuZGlmCiB9CiAKKyNpZiAhVVNFKE9QRU5HTF9FU18yKQordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorI2VuZGlmCisKIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBIb3N0V2luZG93KiBob3N0V2luZG93
KQogICAgIDogbV9jb250ZXh0KGNvbnRleHQpCiAgICAgLCBtX2hvc3RXaW5kb3coaG9zdFdpbmRv
dykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150956</attachid>
            <date>2012-07-05 10:33:58 -0700</date>
            <delta_ts>2012-07-05 11:20:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90567-20120705133335.patch</filename>
            <type>text/plain</type>
            <size>63643</size>
            <attacher name="Joshua Netterfield">jnetterfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxODY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODFjZDc4MDliMjVmNjhk
YjA3MTcxZmU3N2UyMmI0ZjhkMjVkNTU2NC4uZjVjYTliYzYwOWJhOTgxOTIyNjk0OTM2ODVmZTk2
MTQ3NzE3NjM1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk0IEBACisyMDEyLTA3LTA0ICBKb3No
dWEgTmV0dGVyZmllbGQgIDxqbmV0dGVyZmllbGRAcmltLmNvbT4KKyAgICAgICAgTWFrZSBHQzNE
IGFuZCBFM0QgbW9yZSBtYWludGFpbmFibGUgZm9yIEdMRVMgcGxhdGZvcm1zCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDU2NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY2xlYW5zIHVw
IGNvZGUgZm9yIFdlYkdMIG9uIE9wZW5HTEVTIHBsYXRmb3JtcyB3aGljaCB1c2UgCisgICAgICAg
IEdyYXBoaWNzQ29udGV4dDNET3BlbkdMKiBhbmQgRXh0ZW5zaW9uczNET3BlbkdMKi4gQWx0aG91
Z2gKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wgd2FzIGFscmVhZHkgc3BsaXQgaW50
byBHcmFwaGljc0NvbnRleHQzRE9wZW5HTCwKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0RPcGVu
R0xDb21tb24sIGFuZCAgR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUywgdGhpcyBwYXRjaAorICAg
ICAgICBpcyBhbiBhdHRlbXB0IHRvIHJlZmFjdG9yIHRoaXMgY29kZSBpbiBhIHdheSB0aGF0IHdp
bGwgaGVscCBCbGFja0JlcnJ5IGFuZAorICAgICAgICBvdGhlciB0ZWFtcyBzdXBwb3J0IFdlYkdM
IG9uIG1vYmlsZSBwbGF0Zm9ybXMgd2l0aCBhcyBsaXR0bGUgdXNlIG9mCisgICAgICAgIOKAnCNJ
RiBVU0UoT1BFTkdMX0VTXzIp4oCdIGluIGNvbW1vbiBjb2RlIGFzIHBvc3NpYmxlLiBBbHNvIGlu
Y2x1ZGVkIGlzIHRoZQorICAgICAgICBzZXBhcmF0aW9uIG9mIEV4dGVuc2lvbnMzRE9wZW5HTCBp
bnRvIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbiwKKyAgICAgICAgRXh0ZW5zaW9uczNET3BlbkdM
LCBhbmQgRXh0ZW5zaW9uczNET3BlbkdMRVMgYXMgd2VsbCBhcyB0aGUgaW50cm9kdWN0aW9uCisg
ICAgICAgIG9mIE9wZW5HTEVTU2hpbXMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBjcmVhdGVk
IGluIGxhcmdlIHBhcnQgYnkgSm9uYXRoYW4gRmVsZHN0ZWluLgorCisgICAgICAgIE5vIG5ldyB0
ZXN0czogbm8gbmV3IGJlaGF2aW91ci4KKworICAgICAgICAqIFBsYXRmb3JtQmxhY2tCZXJyeS5j
bWFrZTogUmVjb2duaXplIEJsYWNrQmVycnkgYXMgT1BFTkdMIEVTLCBhZGQgbmV3IGZpbGVzIHRv
IGJ1aWxkCisgICAgICAgICogVGFyZ2V0LnByaTogQWRkIG5ldyBFeHRlbnNpb25zM0RPcGVuR0wq
IHRvIFdlYkdMIGJ1aWxkcworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dDNELmg6IEFkZCB2YWxpZGF0ZURlcHRoU3RlbmNpbCwgbWFrZSBzeXN0ZW1BbGxvd3NNdWx0
aXNhbXBsaW5nT25BVElDYXJkcyBhIGEgbWVtYmVyIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvT3BlbkdMRVNTaGltcy5oOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNw
cDogTW92ZSBjb2RlIHRvIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbiB3aGVyZSBwb3NzaWJsZQor
ICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpFeHRlbnNpb25zM0RPcGVuR0wp
OiBSZWZsZWN0IHRoYXQgaXQgaXMgbm93IGluaGVyaXRzIEV4dGVuc2lvbnMzRENvbW1vbgorICAg
ICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpzdXBwb3J0c0V4dGVuc2lvbik6IENv
bnRhaW5zIE9wZW5HTCBzcGVjaWZpYyBjb2RlIGZyb20gc3VwcG9ydHMKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpnZXRFeHRlbnNpb25z
KTogUmV0dXJucyBhIGxpc3Qgb2YgZXh0ZW5zaW9ucworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaDogUmVtb3ZlIGZ1bmN0aW9ucyBub3cgaW4g
RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEV4
dGVuc2lvbnMzRE9wZW5HTCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4
dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0xDb21tb246OkV4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbik6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0xDb21tb246
On5FeHRlbnNpb25zM0RPcGVuR0xDb21tb24pOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9u
czNET3BlbkdMQ29tbW9uOjpzdXBwb3J0cyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25z
M0RPcGVuR0xDb21tb246OmVuc3VyZUVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uOjppc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uOjpnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKToKKyAgICAgICAg
KFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6Z2V0VHJhbnNsYXRlZFNoYWRlclNv
dXJjZUFOR0xFKTogRXhpc3RlZCBiZWZvcmUsIGJ1dCBkaWQgbm90aGluZy4gTm93IGRvZXMgd2hh
dCBpcyBzYXlzIGl0IGRvZXMuCisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0xD
b21tb246OmluaXRpYWxpemVBdmFpbGFibGVFeHRlbnNpb25zKTogTW92ZWQgZnJvbSBFeHRlbnNp
b25zM0RPcGVuR0w6OnN1cHBvcnRzCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmguCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5H
TEVTOjpFeHRlbnNpb25zM0RPcGVuR0xFUyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25z
M0RPcGVuR0xFUzo6fkV4dGVuc2lvbnMzRE9wZW5HTEVTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4
dGVuc2lvbnMzRE9wZW5HTEVTOjpmcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HKToK
KyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTEVTOjpyZW5kZXJidWZmZXJTdG9y
YWdlTXVsdGlzYW1wbGVJTUcpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdM
RVM6OmNyZWF0ZVZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMz
RE9wZW5HTEVTOjpkZWxldGVWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRl
bnNpb25zM0RPcGVuR0xFUzo6aXNWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbnNpb25zM0RPcGVuR0xFUzo6YmluZFZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNv
cmU6OkV4dGVuc2lvbnMzRE9wZW5HTEVTOjpzdXBwb3J0c0V4dGVuc2lvbik6IENvbnRhaW5zIE9w
ZW5HTEVTIHNwZWNpZmljIGNvZGUgZnJvbSBzdXBwb3J0cworICAgICAgICAoV2ViQ29yZTo6RXh0
ZW5zaW9uczNET3BlbkdMRVM6OmdldEV4dGVuc2lvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmguCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEV4dGVuc2lvbnMzRE9wZW5HTEVTKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRl
cyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpzeXN0ZW1BbGxvd3NNdWx0aXNhbXBsaW5nT25BVElDYXJkcyk6IE5vdyBhIG1lbWJlciBmdW5j
dGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25z
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RP
cGVuR0xDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZh
bGlkYXRlRGVwdGhTdGVuY2lsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmxpbmVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bGlu
a1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBpeGVsU3Rv
cmVpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwb2x5Z29uT2Zmc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVCdWZmZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29t
cGlsZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHNB
bmRDb252ZXJ0VG9CR1JBSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzeXN0ZW1BbGxvd3NNdWx0aXNhbXBsaW5nT25B
VElDYXJkcyk6IE5vdyBhIG1lbWJlciBmdW5jdGlvbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcik6
CisKIDIwMTItMDctMDQgIEpvaG4gTWVsbG9yICA8am9obm1lQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBUZXh0IEF1dG9zaXppbmc6IEFkZCBiYXNpYyBmcmFtZXdvcmsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCmluZGV4IGRlN2JjYzY0ZjM5ZWJkYTM2Yjc3NDY5MzIxYjlhMGRjODkwZWJm
ODguLmM5ZTgzOTQ0N2FlNTNjMmNlMGNjZDJiNzI5MmE0Y2I2MjY5MGRhZGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNjA1NCw2ICs2MDU0LDcgQEAgd2ViY29yZV9zb3VyY2Vz
ICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9PcGVuR0xTaGltcy5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL09wZW5HTFNoaW1zLmggXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wu
Y3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9u
czNET3BlbkdMQ29tbW9uLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21t
b24uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21h
a2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UKaW5kZXggNTE2OWE1
ZGQ1OTczYzdiMGUyODhkYTIxMjMxOTQ3MTg2NTMwZWE4MS4uNTg3ZWRlM2QwNjkwODAzNzNiZWQy
YTMxMjI1MmE1NTc5MjFkY2ZjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1C
bGFja0JlcnJ5LmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQmxhY2tCZXJyeS5j
bWFrZQpAQCAtMjE4LDYgKzIxOCw3IEBAIGlmIChFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJB
TUUpCiBFTkRJRiAoKQogCiBpZiAoRU5BQkxFX1dFQkdMKQorICAgIEFERF9ERUZJTklUSU9OUyAo
LURXVEZfVVNFX09QRU5HTF9FU18yPTEpCiAgICAgTElTVChBUFBFTkQgV2ViQ29yZV9JTkNMVURF
X0RJUkVDVE9SSUVTCiAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUiCiAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wiCkBA
IC0yMjUsNiArMjI2LDExIEBAIGlmIChFTkFCTEVfV0VCR0wpCiAgICAgTElTVChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRHJhd2lu
Z0J1ZmZlckJsYWNrQmVycnkuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvR3JhcGhpY3NDb250ZXh0M0RCbGFja0JlcnJ5LmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCisgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAorICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNw
cAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMu
Y3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQz
RC5jcHAKICAgICApCiBFTkRJRiAoKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJn
ZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCA2NjVmMDNkMTFjNTkwMThj
NzViOWZhNjE0OWU3MjlkZTQ5ZjJiMjlkLi40Y2U2Y2Y2NmUyOWU5OGNlY2U4NWVjYjA0YjVkYTAw
YzkyMzZhODk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTM5NTUsMTUgKzM5NTUsMTkgQEAgY29udGFpbnMo
REVGSU5FUywgRU5BQkxFX1dFQkdMPTEpIHsKIAogICAgIGNvbnRhaW5zKFFUX0NPTkZJRywgb3Bl
bmdsKSB8IGNvbnRhaW5zKFFUX0NPTkZJRywgb3BlbmdsZXMyKSB7CiAgICAgICAgICFjb250YWlu
cyhRVF9DT05GSUcsIG9wZW5nbGVzMikgewotICAgICAgICAgICAgU09VUkNFUyArPSBwbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCisgICAgICAgICAg
ICBTT1VSQ0VTICs9IFwKKyAgICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAgXAorICAgICAgICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAKICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dDNET3BlbkdMRVMuY3BwCisgICAgICAgICAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNw
cCBcCisgICAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNE
T3BlbkdMRVMuY3BwCiAgICAgICAgIH0KIAogICAgICAgICBIRUFERVJTICs9IHBsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaAogCiAgICAgICAgIFNPVVJDRVMgKz0g
XAotICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5H
TC5jcHAgXAorICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMz
RE9wZW5HTENvbW1vbi5jcHAgXAogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAogCiAgICAgICAgIEFOR0xFX0RJUiA9
ICQkcmVwbGFjZShQV0QsICJXZWJDb3JlIiwgIlRoaXJkUGFydHkvQU5HTEUiKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCmluZGV4IGNiMTAxMmU3NzY4NWNkOTA4OTY5MjI0YmFhYWYwMTEwNGQxOWQ2OWMuLmYxN2Ew
NDAwOTFmMjlkMzE3MzQ4NWVjNzYyNmE4MWNiNjhkN2VjY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAg
LTM4MDcsNiArMzgwNyw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dl
YlRpbGVkTGF5ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYlRp
bGVkTGF5ZXIubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRl
bnNpb25zM0RPcGVuR0wuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xD
b21tb24uY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCAzYjgzM2VmYTE3NDdmNThlN2E3ODIxM2U2N2M5YTE1ZTNhYjliYzlh
Li43Y2ZhNDVhNzEyNWI1ODE1OWE2NWVkNTJlOGY1ZGI2MDZmZTA0NjVjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC04MjMxLDYg
KzgyMzEsOCBAQAogCQk0NDI5QUIwNzBDQjg0RjgxMDA3NjQ3QzUgLyogRE9NVGV4dEV2ZW50SW50
ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVRleHRFdmVudElu
dGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0MzExQ0Q0MTJFNEUyMkQw
MDBBOEQxOSAvKiBET01Eb2N1bWVudEZyYWdtZW50UHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBET01Eb2N1bWVudEZyYWdtZW50UHJpdmF0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0NDMxMUNENTEyRTRFMjJEMDAwQThEMTkgLyogRE9NRG9jdW1l
bnRQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTURvY3VtZW50
UHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NDUwQkMzNDE1QTVFOUNB
MDBERDE2MjIgLyogRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ0NTBCQzM1MTVBNUU5Q0EwMEREMTYyMiAvKiBFeHRl
bnNpb25zM0RPcGVuR0xDb21tb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTQ0OEEyOUJEMEE0NkQ5Q0IwMDMwNzU5RiAvKiBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQ4QTI5QkUwQTQ2RDlDQjAwMzA3NTlG
IC8qIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTQ0OEFEMjdBMEE0ODEzNzkwMDIzRDE3OSAvKiBKU0hUTUxPcHRpb25z
Q29sbGVjdGlvbkN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbkN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0yMTY0Myw2ICsyMTY0NSw4IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQk2RTY3
RDJBNDEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmNwcCAqLywKIAkJCQk2
RTY3RDJBNTEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmggKi8sCisJCQkJ
NDQ1MEJDMzQxNUE1RTlDQTAwREQxNjIyIC8qIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAg
Ki8sCisJCQkJNDQ1MEJDMzUxNUE1RTlDQTAwREQxNjIyIC8qIEV4dGVuc2lvbnMzRE9wZW5HTENv
bW1vbi5oICovLAogCQkJCUZCQzIyMERFMTIzN0ZCRUIwMEJDRjc4OCAvKiBHcmFwaGljc0NvbnRl
eHQzRE9wZW5HTC5jcHAgKi8sCiAJCQkJOTZBQkE0MjIxNEJDQjgwRTAwRDU2MjA0IC8qIEdyYXBo
aWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcCAqLywKIAkJCSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAppbmRleCBkYmQ5
ZGZlZGUwMTNhNGNhZjMzMjQ2M2FkMzJmYzRlMTUyODI2NDY3Li4xNmQxMmYxNjNiZDVkMWUwOWYz
MTE1MmVkZGExYjJiNjVlMjJlYTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKQEAgLTIwLDcgKzIwLDcgQEAKICAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAgKi8KIAogI2lmbmRlZiBHcmFwaGljc0NvbnRleHQzRF9oCkBAIC05MSwxNCAr
OTEsMTIgQEAgY29uc3QgUGxhdGZvcm0zRE9iamVjdCBOdWxsUGxhdGZvcm0zRE9iamVjdCA9IDA7
CiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQ29udGV4dC5oPgogI2VuZGlmCiAKLSNpZiBQTEFU
Rk9STShCTEFDS0JFUlJZKQotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotI2VuZGlmCi0KIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIGNsYXNzIERyYXdpbmdCdWZmZXI7CiBjbGFzcyBFeHRlbnNpb25zM0Q7
Ci0jaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFFUKSB8fCBQ
TEFURk9STShFRkwpCisjaWYgVVNFKE9QRU5HTF9FU18yKQorY2xhc3MgRXh0ZW5zaW9uczNET3Bl
bkdMRVM7CisjZWxzZQogY2xhc3MgRXh0ZW5zaW9uczNET3BlbkdMOwogI2VuZGlmCiAjaWYgUExB
VEZPUk0oUVQpCkBAIC05MjQsNiArOTIyLDcgQEAgcHVibGljOgogICAgIC8vIGluIHBhcnRpY3Vs
YXIgc3RlbmNpbCBhbmQgYW50aWFsaWFzLCBhbmQgZGV0ZXJtaW5lIHdoaWNoIGNvdWxkIG9yCiAg
ICAgLy8gY291bGQgbm90IGJlIGhvbm9yZWQgYmFzZWQgb24gdGhlIGNhcGFiaWxpdGllcyBvZiB0
aGUgT3BlbkdMCiAgICAgLy8gaW1wbGVtZW50YXRpb24uCisgICAgdm9pZCB2YWxpZGF0ZURlcHRo
U3RlbmNpbChjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pOwogICAgIHZv
aWQgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7CiAKICAgICAvLyBSZWFkIHJlbmRlcmluZyByZXN1bHRz
IGludG8gYSBwaXhlbCBhcnJheSB3aXRoIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGUKQEAgLTk1NSwx
NiArOTU0LDMwIEBAIHB1YmxpYzoKICAgICBIYXNoTWFwPFBsYXRmb3JtM0RPYmplY3QsIFNoYWRl
clNvdXJjZUVudHJ5PiBtX3NoYWRlclNvdXJjZU1hcDsKIAogICAgIEFOR0xFV2ViS2l0QnJpZGdl
IG1fY29tcGlsZXI7CisjZW5kaWYKIAorI2lmIFBMQVRGT1JNKFFUKSAmJiBkZWZpbmVkKFFUX09Q
RU5HTF9FU18yKQorICAgIGZyaWVuZCBjbGFzcyBFeHRlbnNpb25zM0RRdDsKKyAgICBPd25QdHI8
RXh0ZW5zaW9uczNEUXQ+IG1fZXh0ZW5zaW9uczsKKyNlbGlmIFBMQVRGT1JNKEJMQUNLQkVSUlkp
CisgICAgZnJpZW5kIGNsYXNzIEV4dGVuc2lvbnMzRE9wZW5HTEVTOworICAgIE93blB0cjxFeHRl
bnNpb25zM0RPcGVuR0xFUz4gbV9leHRlbnNpb25zOworI2VsaWYgIVBMQVRGT1JNKENIUk9NSVVN
KQogICAgIGZyaWVuZCBjbGFzcyBFeHRlbnNpb25zM0RPcGVuR0w7CiAgICAgT3duUHRyPEV4dGVu
c2lvbnMzRE9wZW5HTD4gbV9leHRlbnNpb25zOworI2VuZGlmCisgICAgZnJpZW5kIGNsYXNzIEV4
dGVuc2lvbnMzRE9wZW5HTENvbW1vbjsKIAogICAgIEF0dHJpYnV0ZXMgbV9hdHRyczsKICAgICBW
ZWN0b3I8VmVjdG9yPGZsb2F0PiA+IG1fdmVydGV4QXJyYXk7CiAKLSAgICBHQzNEdWludCBtX3Rl
eHR1cmUsIG1fY29tcG9zaXRvclRleHR1cmU7CisgICAgR0MzRHVpbnQgbV90ZXh0dXJlOworI2lm
ICFQTEFURk9STShCTEFDS0JFUlJZKQorICAgIEdDM0R1aW50IG1fY29tcG9zaXRvclRleHR1cmU7
CisjZW5kaWYKICAgICBHQzNEdWludCBtX2ZibzsKLSNpZiBVU0UoT1BFTkdMX0VTXzIpCisKKyNp
ZiAhUExBVEZPUk0oQkxBQ0tCRVJSWSkKICAgICBHQzNEdWludCBtX2RlcHRoQnVmZmVyOwogICAg
IEdDM0R1aW50IG1fc3RlbmNpbEJ1ZmZlcjsKICNlbmRpZgpAQCAtOTg1LDEwICs5OTgsMTEgQEAg
cHVibGljOgogCiAgICAgLy8gRXJyb3JzIHJhaXNlZCBieSBzeW50aGVzaXplR0xFcnJvcigpLgog
ICAgIExpc3RIYXNoU2V0PEdDM0RlbnVtPiBtX3N5bnRoZXRpY0Vycm9yczsKLSNlbmRpZgogCiAg
ICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTsKICAgICBPd25QdHI8R3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlPiBtX3ByaXZhdGU7CisKKyAgICBib29sIHN5c3RlbUFsbG93
c011bHRpc2FtcGxpbmdPbkFUSUNhcmRzKCk7IAogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvT3BlbkdMRVNT
aGltcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvT3BlbkdMRVNTaGltcy5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmVkYjkxOTMzZjg1YmMwNjFjYzljODUyNTRkYzM0ZjA5YzI5M2E4MDkKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9PcGVuR0xF
U1NoaW1zLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKKyAqLworCisjaWZuZGVmIE9wZW5HTEVTU2hpbXNfaAorI2RlZmluZSBPcGVuR0xFU1NoaW1z
X2gKKworI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCisjZGVmaW5lIGdsQmluZEZyYW1lYnVmZmVy
RVhUIGdsQmluZEZyYW1lYnVmZmVyCisjZGVmaW5lIGdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQg
Z2xGcmFtZWJ1ZmZlclRleHR1cmUyRAorI2RlZmluZSBnbEJpbmRSZW5kZXJidWZmZXJFWFQgZ2xC
aW5kUmVuZGVyYnVmZmVyCisjZGVmaW5lIGdsUmVuZGVyYnVmZmVyU3RvcmFnZUVYVCBnbFJlbmRl
cmJ1ZmZlclN0b3JhZ2UKKyNkZWZpbmUgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVCBnbEZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyCisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9FWFQgR0xfUkVO
REVSQlVGRkVSCisjZGVmaW5lIEdMX1NURU5DSUxfQVRUQUNITUVOVF9FWFQgR0xfU1RFTkNJTF9B
VFRBQ0hNRU5UCisjZGVmaW5lIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVCBnbENoZWNrRnJh
bWVidWZmZXJTdGF0dXMKKyNkZWZpbmUgZ2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQgZ2xEZWxldGVG
cmFtZWJ1ZmZlcnMKKyNkZWZpbmUgZ2xEZWxldGVSZW5kZXJidWZmZXJzRVhUIGdsRGVsZXRlUmVu
ZGVyYnVmZmVycworI2RlZmluZSBnbEdlblJlbmRlcmJ1ZmZlcnNFWFQgZ2xHZW5SZW5kZXJidWZm
ZXJzCisjZGVmaW5lIGdsR2VuRnJhbWVidWZmZXJzRVhUIGdsR2VuRnJhbWVidWZmZXJzCisjZGVm
aW5lIGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXZFWFQgZ2xHZXRGcmFtZWJ1
ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdgorI2RlZmluZSBnbEdldFJlbmRlcmJ1ZmZlclBhcmFt
ZXRlcml2RVhUIGdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYKKyNkZWZpbmUgZ2xJc1JlbmRl
cmJ1ZmZlckVYVCBnbElzUmVuZGVyYnVmZmVyCisjZGVmaW5lIGdsSXNGcmFtZWJ1ZmZlckVYVCBn
bElzRnJhbWVidWZmZXIKKyNkZWZpbmUgZ2xHZW5lcmF0ZU1pcG1hcEVYVCBnbEdlbmVyYXRlTWlw
bWFwCisjZGVmaW5lIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCBHTF9DT0xPUl9BVFRBQ0hNRU5U
MAorI2RlZmluZSBHTF9ERVBUSF9BVFRBQ0hNRU5UX0VYVCBHTF9ERVBUSF9BVFRBQ0hNRU5UCisj
ZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFX0VYVCBHTF9GUkFNRUJVRkZFUl9DT01QTEVU
RQorI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9FWFQgR0xfRlJBTUVCVUZGRVIKKyNkZWZpbmUgR0xf
REVQVEgyNF9TVEVOQ0lMOF9FWFQgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMKKyNkZWZpbmUgR0xf
UkdCQTggR0xfUkdCQThfT0VTCisjZGVmaW5lIEdMX1JHQjggR0xfUkdCOF9PRVMKKyNkZWZpbmUg
R0xfUkVBRF9GUkFNRUJVRkZFUl9FWFQgMHg4Q0E4CisjZGVmaW5lIEdMX0RSQVdfRlJBTUVCVUZG
RVJfRVhUIDB4OENBOQorI2RlZmluZSBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01VTFRJU0FNUExF
X0VYVCAweDkxMzQKKyNkZWZpbmUgR0xfTUFYX1NBTVBMRVNfRVhUIDB4OEQ1NworI2VuZGlmIC8v
IFBMQVRGT1JNKEJMQUNLQkVSUlkpCisKKyNlbmRpZiAvLyBPcGVuR0xFU1NoaW1zX2gKKwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0M0RDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcAppbmRleCBhYzI5MmQzNzUxNTc5MmVjYTMyMjll
NmY2NzM4OGViMjhlNTFlMDk2Li5mZDFkYWQwOWYwMTFiNzZjOWU1OWU0ODUzOWFjOWMwM2RhYWRi
MzZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
cmFwaGljc0NvbnRleHQzRENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcApAQCAtMzMsNiArMzMsNyBA
QAogI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZS5oIgogI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKICNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29u
dGV4dENhaXJvLmgiCiAjaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKQEAgLTE0Niw2ICsxNDcsMTEg
QEAgR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCgpCiAgICAgOjpnbERlbGV0
ZUZyYW1lYnVmZmVyc0VYVCgxLCAmbV9mYm8pOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
IGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFnZSogaW1hZ2UsIHVuc2ln
bmVkIGludCBmb3JtYXQsIHVuc2lnbmVkIGludCB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEs
IGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsIFZlY3Rvcjx1aW50OF90PiYgb3V0cHV0
VmVjdG9yKQogewogICAgIGlmICghaW1hZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzQ29udGV4dDNEQ2x1dHRlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzQ29udGV4dDNE
Q2x1dHRlci5jcHAKaW5kZXggY2EwZmZkYzJiY2I5ZDg5Mzg2YjE1ZDQ4YzMyMzhlYjNlZjliMDk1
NC4uN2UyMmY3MjJkNGJkMzUzZDMzMWJkYzYwNzc1ZTdkNzFhYTA1ZTUxZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0NvbnRleHQz
RENsdXR0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0
ZXIvR3JhcGhpY3NDb250ZXh0M0RDbHV0dGVyLmNwcApAQCAtNTYsNiArNTYsMTEgQEAgR3JhcGhp
Y3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCgpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsK
IH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJ
bWFnZURhdGEoSW1hZ2UqIGltYWdlLCB1bnNpZ25lZCBpbnQgZm9ybWF0LCB1bnNpZ25lZCBpbnQg
dHlwZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9m
aWxlLCBWZWN0b3I8dWludDhfdD4mIG91dHB1dFZlY3RvcikKIHsKICAgICBub3RJbXBsZW1lbnRl
ZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcAppbmRleCA0YWEzNDFjMzI2YzczNTdiMTEw
Yzk4M2QwMzljY2Q3YmMzMzE2NjEyLi5iYmU3N2JiNzk4NTRjOTIzN2U4Y2I2NzA2Yzk3NDY1OTk1
NjJiOTAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcApAQCAtNDIsNyArNDIsOCBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBFeHRlbnNpb25zM0RPcGVuR0w6OkV4dGVuc2lvbnMzRE9w
ZW5HTChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKLSAgICA6IG1faW5pdGlhbGl6ZWRBdmFp
bGFibGVFeHRlbnNpb25zKGZhbHNlKQorICAgIDogRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uKGNv
bnRleHQpCisgICAgLCBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucyhmYWxzZSkKICAg
ICAsIG1fY29udGV4dChjb250ZXh0KQogewogfQpAQCAtNTEsOTEgKzUyLDYgQEAgRXh0ZW5zaW9u
czNET3BlbkdMOjp+RXh0ZW5zaW9uczNET3BlbkdMKCkKIHsKIH0KIAotYm9vbCBFeHRlbnNpb25z
M0RPcGVuR0w6OnN1cHBvcnRzKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICAvLyBOb3RlIG9u
IHN1cHBvcnQgZm9yIEJHUkE6Ci0gICAgLy8KLSAgICAvLyBGb3IgT3BlbkdMIEVTMi4wLCByZXF1
aXJlcyBjaGVja2luZyBmb3IKLSAgICAvLyBHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgg
YW5kIEdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3JhLgotICAgIC8vIEZvciBkZXNrdG9wIEdMLCBCR1JB
IGhhcyBiZWVuIHN1cHBvcnRlZCBzaW5jZSBPcGVuR0wgMS4yLgotICAgIC8vCi0gICAgLy8gSG93
ZXZlciwgbm90ZSB0aGF0IHRoZSBHTCBFUzIgZXh0ZW5zaW9uIHJlcXVpcmVzIHRoZQotICAgIC8v
IGludGVybmFsRm9ybWF0IHRvIGdsVGV4SW1hZ2UyRCgpIGJlIEdMX0JHUkEsIHdoaWxlIGRlc2t0
b3AgR0wKLSAgICAvLyB3aWxsIG5vdCBhY2NlcHQgR0xfQkdSQSAobXVzdCBiZSBHTF9SR0JBKSwg
c28gdGhpcyBtdXN0IGJlCi0gICAgLy8gY2hlY2tlZCBvbiBlYWNoIHBsYXRmb3JtLiBEZXNrdG9w
IEdMIG9mZmVycyBuZWl0aGVyCi0gICAgLy8gR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4
IG9yIEdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3JhLCBzbwotICAgIC8vIHRyZWF0IHRoZW0gYXMgdW5z
dXBwb3J0ZWQgaGVyZS4KLSAgICBpZiAoIW1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25z
KSB7Ci0gICAgICAgIFN0cmluZyBleHRlbnNpb25zU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgY2hhcio+KDo6Z2xHZXRTdHJpbmcoR0xfRVhURU5TSU9OUykpKTsKLSAgICAgICAgVmVjdG9y
PFN0cmluZz4gYXZhaWxhYmxlRXh0ZW5zaW9uczsKLSAgICAgICAgZXh0ZW5zaW9uc1N0cmluZy5z
cGxpdCgiICIsIGF2YWlsYWJsZUV4dGVuc2lvbnMpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGF2YWlsYWJsZUV4dGVuc2lvbnMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBtX2F2
YWlsYWJsZUV4dGVuc2lvbnMuYWRkKGF2YWlsYWJsZUV4dGVuc2lvbnNbaV0pOwotICAgICAgICBt
X2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucyA9IHRydWU7Ci0gICAgfQotICAgIAotICAg
IC8vIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQgYW5kIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX211
bHRpc2FtcGxlIGFyZSAiZmFrZSIuIFRoZXkgYXJlIGltcGxlbWVudGVkIHVzaW5nIG90aGVyCi0g
ICAgLy8gZXh0ZW5zaW9ucy4gSW4gcGFydGljdWxhciBHTF9FWFRfZnJhbWVidWZmZXJfYmxpdCBh
bmQgR0xfRVhUX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlCi0gICAgaWYgKG5hbWUgPT0gIkdMX0FO
R0xFX2ZyYW1lYnVmZmVyX2JsaXQiKQotICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNp
b25zLmNvbnRhaW5zKCJHTF9FWFRfZnJhbWVidWZmZXJfYmxpdCIpOwotICAgIGlmIChuYW1lID09
ICJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpCi0gICAgICAgIHJldHVybiBtX2F2
YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0VYVF9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBs
ZSIpOwotCi0gICAgLy8gRGVza3RvcCBHTCBhbHdheXMgc3VwcG9ydHMgR0xfT0VTX3JnYjhfcmdi
YTguCi0gICAgaWYgKG5hbWUgPT0gIkdMX09FU19yZ2I4X3JnYmE4IikKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICAvLyBJZiBHTF9BUkJfdGV4dHVyZV9mbG9hdCBpcyBhdmFpbGFibGUgdGhl
biB3ZSByZXBvcnQgR0xfT0VTX3RleHR1cmVfZmxvYXQgYW5kCi0gICAgLy8gR0xfT0VTX3RleHR1
cmVfaGFsZl9mbG9hdCBhcyBhdmFpbGFibGUuCi0gICAgaWYgKG5hbWUgPT0gIkdMX09FU190ZXh0
dXJlX2Zsb2F0IiB8fCBuYW1lID09ICJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IikKLSAgICAg
ICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfQVJCX3RleHR1cmVf
ZmxvYXQiKTsKLSAgICAKLSAgICAvLyBHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdAotICAgIGlm
IChuYW1lID09ICJHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdCIpCi0gICAgICAgIHJldHVybiBt
X2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0FQUExFX3ZlcnRleF9hcnJheV9vYmpl
Y3QiKTsKLQotICAgIC8vIERlc2t0b3AgR0wgYWx3YXlzIHN1cHBvcnRzIHRoZSBzdGFuZGFyZCBk
ZXJpdmF0aXZlIGZ1bmN0aW9ucwotICAgIGlmIChuYW1lID09ICJHTF9PRVNfc3RhbmRhcmRfZGVy
aXZhdGl2ZXMiKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChuYW1lID09ICJHTF9F
WFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKQotICAgICAgICByZXR1cm4gbV9hdmFpbGFi
bGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMi
KTsKLQotICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMobmFtZSk7Ci19
Ci0KLXZvaWQgRXh0ZW5zaW9uczNET3BlbkdMOjplbnN1cmVFbmFibGVkKGNvbnN0IFN0cmluZyYg
bmFtZSkKLXsKLSNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShH
VEspCi0gICAgaWYgKG5hbWUgPT0gIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpIHsKLSAg
ICAgICAgLy8gRW5hYmxlIHN1cHBvcnQgaW4gQU5HTEUgKGlmIG5vdCBlbmFibGVkIGFscmVhZHkp
Ci0gICAgICAgIEFOR0xFV2ViS2l0QnJpZGdlJiBjb21waWxlciA9IG1fY29udGV4dC0+bV9jb21w
aWxlcjsKLSAgICAgICAgU2hCdWlsdEluUmVzb3VyY2VzIEFOR0xFUmVzb3VyY2VzID0gY29tcGls
ZXIuZ2V0UmVzb3VyY2VzKCk7Ci0gICAgICAgIGlmICghQU5HTEVSZXNvdXJjZXMuT0VTX3N0YW5k
YXJkX2Rlcml2YXRpdmVzKSB7Ci0gICAgICAgICAgICBBTkdMRVJlc291cmNlcy5PRVNfc3RhbmRh
cmRfZGVyaXZhdGl2ZXMgPSAxOwotICAgICAgICAgICAgY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFO
R0xFUmVzb3VyY2VzKTsKLSAgICAgICAgfQotICAgIH0KLSNlbHNlCi0gICAgQVNTRVJUX1VOVVNF
RChuYW1lLCBzdXBwb3J0cyhuYW1lKSk7Ci0jZW5kaWYKLX0KLQotYm9vbCBFeHRlbnNpb25zM0RP
cGVuR0w6OmlzRW5hYmxlZChjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0jaWYgUExBVEZPUk0oTUFD
KSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RLKQotICAgIGlmIChuYW1lID09ICJHTF9P
RVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSB7Ci0gICAgICAgIEFOR0xFV2ViS2l0QnJpZGdlJiBj
b21waWxlciA9IG1fY29udGV4dC0+bV9jb21waWxlcjsKLSAgICAgICAgcmV0dXJuIGNvbXBpbGVy
LmdldFJlc291cmNlcygpLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlczsKLSAgICB9Ci0jZW5kaWYK
LSAgICByZXR1cm4gc3VwcG9ydHMobmFtZSk7Ci19Ci0KLWludCBFeHRlbnNpb25zM0RPcGVuR0w6
OmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKQotewotICAgIHJldHVybiBHcmFwaGljc0NvbnRl
eHQzRDo6Tk9fRVJST1I7Ci19CiAKIHZvaWQgRXh0ZW5zaW9uczNET3BlbkdMOjpibGl0RnJhbWVi
dWZmZXIobG9uZyBzcmNYMCwgbG9uZyBzcmNZMCwgbG9uZyBzcmNYMSwgbG9uZyBzcmNZMSwgbG9u
ZyBkc3RYMCwgbG9uZyBkc3RZMCwgbG9uZyBkc3RYMSwgbG9uZyBkc3RZMSwgdW5zaWduZWQgbG9u
ZyBtYXNrLCB1bnNpZ25lZCBsb25nIGZpbHRlcikKIHsKQEAgLTE5NCwxOSArMTEwLDQ5IEBAIHZv
aWQgRXh0ZW5zaW9uczNET3BlbkdMOjpiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVj
dCBhcnJheSkKICNlbmRpZgogfQogCi1TdHJpbmcgRXh0ZW5zaW9uczNET3BlbkdMOjpnZXRUcmFu
c2xhdGVkU2hhZGVyU291cmNlQU5HTEUoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKHNoYWRlcik7Ci0gICAgcmV0dXJuICIiOwotICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQgdGhpcyBmdW5jdGlvbiBhbmQgYWRkIEdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3Nv
dXJjZSBpbiBzdXBwb3J0cygpLgotfQotCiB2b2lkIEV4dGVuc2lvbnMzRE9wZW5HTDo6Y29weVRl
eHR1cmVDSFJPTUlVTShHQzNEZW51bSwgUGxhdGZvcm0zRE9iamVjdCwgUGxhdGZvcm0zRE9iamVj
dCwgR0MzRGludCwgR0MzRGVudW0pCiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGlzIGZ1
bmN0aW9uIGFuZCBhZGQgR0xfQ0hST01JVU1fY29weV90ZXh0dXJlIGluIHN1cHBvcnRzKCkuCiAg
ICAgcmV0dXJuOwogfQogCitib29sIEV4dGVuc2lvbnMzRE9wZW5HTDo6c3VwcG9ydHNFeHRlbnNp
b24oY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIC8vIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX2Js
aXQgYW5kIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIGFyZSAiZmFrZSIuIFRoZXkg
YXJlIGltcGxlbWVudGVkIHVzaW5nIG90aGVyCisgICAgLy8gZXh0ZW5zaW9ucy4gSW4gcGFydGlj
dWxhciBHTF9FWFRfZnJhbWVidWZmZXJfYmxpdCBhbmQgR0xfRVhUX2ZyYW1lYnVmZmVyX211bHRp
c2FtcGxlCisgICAgaWYgKG5hbWUgPT0gIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQiKQorICAg
ICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9FWFRfZnJhbWVi
dWZmZXJfYmxpdCIpOworICAgIGlmIChuYW1lID09ICJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0
aXNhbXBsZSIpCisgICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMo
IkdMX0VYVF9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpOworCisgICAgLy8gRGVza3RvcCBHTCBh
bHdheXMgc3VwcG9ydHMgR0xfT0VTX3JnYjhfcmdiYTguCisgICAgaWYgKG5hbWUgPT0gIkdMX09F
U19yZ2I4X3JnYmE4IikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBJZiBHTF9BUkJf
dGV4dHVyZV9mbG9hdCBpcyBhdmFpbGFibGUgdGhlbiB3ZSByZXBvcnQgR0xfT0VTX3RleHR1cmVf
ZmxvYXQgYW5kCisgICAgLy8gR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdCBhcyBhdmFpbGFibGUu
CisgICAgaWYgKG5hbWUgPT0gIkdMX09FU190ZXh0dXJlX2Zsb2F0IiB8fCBuYW1lID09ICJHTF9P
RVNfdGV4dHVyZV9oYWxmX2Zsb2F0IikKKyAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5z
aW9ucy5jb250YWlucygiR0xfQVJCX3RleHR1cmVfZmxvYXQiKTsKKworICAgIC8vIEdMX09FU192
ZXJ0ZXhfYXJyYXlfb2JqZWN0CisgICAgaWYgKG5hbWUgPT0gIkdMX09FU192ZXJ0ZXhfYXJyYXlf
b2JqZWN0IikKKyAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygi
R0xfQVBQTEVfdmVydGV4X2FycmF5X29iamVjdCIpOworCisgICAgLy8gRGVza3RvcCBHTCBhbHdh
eXMgc3VwcG9ydHMgdGhlIHN0YW5kYXJkIGRlcml2YXRpdmUgZnVuY3Rpb25zCisgICAgaWYgKG5h
bWUgPT0gIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgaWYgKG5hbWUgPT0gIkdMX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIp
CisgICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0VYVF90
ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpOworCisgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0
ZW5zaW9ucy5jb250YWlucyhuYW1lKTsKK30KKworU3RyaW5nIEV4dGVuc2lvbnMzRE9wZW5HTDo6
Z2V0RXh0ZW5zaW9ucygpCit7CisgICAgcmV0dXJuIFN0cmluZyhyZWludGVycHJldF9jYXN0PGNv
bnN0IGNoYXIqPig6OmdsR2V0U3RyaW5nKEdMX0VYVEVOU0lPTlMpKSk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RP
cGVuR0wuaAppbmRleCAyYjJkMzBhMDkwZTU0ZmNhMWQwNjQ2MmFlNzFkZDdlYzg3MmI1NDRjLi5h
Mjc4OWJkY2NjMDVkZWE0ZDZkZjliM2I0YzQ3NzdmN2IxOWVhMTIyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMz
RE9wZW5HTC5oCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIEV4dGVuc2lvbnMzRE9wZW5HTF9o
CiAjZGVmaW5lIEV4dGVuc2lvbnMzRE9wZW5HTF9oCiAKLSNpbmNsdWRlICJFeHRlbnNpb25zM0Qu
aCIKKyNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0xDb21tb24uaCIKIAogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KQEAgLTM0LDE1ICsz
NCwxMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEV4dGVuc2lvbnMzRE9wZW5H
TCA6IHB1YmxpYyBFeHRlbnNpb25zM0QgeworY2xhc3MgRXh0ZW5zaW9uczNET3BlbkdMIDogcHVi
bGljIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+RXh0
ZW5zaW9uczNET3BlbkdMKCk7CiAKICAgICAvLyBFeHRlbnNpb25zM0QgbWV0aG9kcy4KLSAgICB2
aXJ0dWFsIGJvb2wgc3VwcG9ydHMoY29uc3QgU3RyaW5nJik7Ci0gICAgdmlydHVhbCB2b2lkIGVu
c3VyZUVuYWJsZWQoY29uc3QgU3RyaW5nJik7Ci0gICAgdmlydHVhbCBib29sIGlzRW5hYmxlZChj
b25zdCBTdHJpbmcmKTsKLSAgICB2aXJ0dWFsIGludCBnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJC
KCk7CiAgICAgdmlydHVhbCB2b2lkIGJsaXRGcmFtZWJ1ZmZlcihsb25nIHNyY1gwLCBsb25nIHNy
Y1kwLCBsb25nIHNyY1gxLCBsb25nIHNyY1kxLCBsb25nIGRzdFgwLCBsb25nIGRzdFkwLCBsb25n
IGRzdFgxLCBsb25nIGRzdFkxLCB1bnNpZ25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcgZmls
dGVyKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKHVu
c2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHNhbXBsZXMsIHVuc2lnbmVkIGxvbmcg
aW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0
KTsKICAgICAKQEAgLTUwLDE0ICs0NiwxNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRl
bGV0ZVZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpOwogICAgIHZpcnR1YWwgR0MzRGJv
b2xlYW4gaXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KTsKICAgICB2aXJ0dWFsIHZv
aWQgYmluZFZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpOwotICAgIHZpcnR1YWwgU3Ry
aW5nIGdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShQbGF0Zm9ybTNET2JqZWN0KTsKICAg
ICB2aXJ0dWFsIHZvaWQgY29weVRleHR1cmVDSFJPTUlVTShHQzNEZW51bSwgUGxhdGZvcm0zRE9i
amVjdCwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGludCwgR0MzRGVudW0pOwogCi1wcml2YXRlOgor
cHJvdGVjdGVkOgogICAgIC8vIFRoaXMgY2xhc3Mgb25seSBuZWVkcyB0byBiZSBpbnN0YW50aWF0
ZWQgYnkgR3JhcGhpY3NDb250ZXh0M0QgaW1wbGVtZW50YXRpb25zLgogICAgIGZyaWVuZCBjbGFz
cyBHcmFwaGljc0NvbnRleHQzRDsKICAgICBFeHRlbnNpb25zM0RPcGVuR0woR3JhcGhpY3NDb250
ZXh0M0QqKTsKIAorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBXVEY6
OlN0cmluZyYpOworICAgIHZpcnR1YWwgU3RyaW5nIGdldEV4dGVuc2lvbnMoKTsKKwogICAgIGJv
b2wgbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnM7CiAgICAgSGFzaFNldDxTdHJpbmc+
IG1fYXZhaWxhYmxlRXh0ZW5zaW9uczsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5H
TENvbW1vbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGU0NjhkNTRkN2RjM2FhMjQ0N2Y3NWE0ODI5ZTQ0YWJj
MDM5ZmY2MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwCkBAIC0wLDAgKzEsMTQ3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJM
RShXRUJHTCkKKyNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0xDb21tb24uaCIKKworI2luY2x1
ZGUgIkFOR0xFV2ViS2l0QnJpZGdlLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIK
KworI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCisjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3Jt
TG9nLmg+CisjZW5kaWYKKworI2lmIFVTRShPUEVOR0xfRVNfMikKKyNpbmNsdWRlICJPcGVuR0xF
U1NoaW1zLmgiCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjaW5jbHVkZSA8R0xFUzIvZ2wyZXh0
Lmg+CisjZWxpZiBQTEFURk9STShNQUMpCisjaW5jbHVkZSA8T3BlbkdML2dsLmg+CisjZWxpZiBQ
TEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oUVQpCisjaW5jbHVkZSAi
T3BlbkdMU2hpbXMuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6RXh0ZW5zaW9uczNE
T3BlbkdMQ29tbW9uKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQorICAgIDogbV9pbml0aWFs
aXplZEF2YWlsYWJsZUV4dGVuc2lvbnMoZmFsc2UpCisgICAgLCBtX2NvbnRleHQoY29udGV4dCkK
K3sKK30KKworRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjp+RXh0ZW5zaW9uczNET3BlbkdMQ29t
bW9uKCkKK3sKK30KKworYm9vbCBFeHRlbnNpb25zM0RPcGVuR0xDb21tb246OnN1cHBvcnRzKGNv
bnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAoIW1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRl
bnNpb25zKQorICAgICAgICBpbml0aWFsaXplQXZhaWxhYmxlRXh0ZW5zaW9ucygpOworCisgICAg
cmV0dXJuIHN1cHBvcnRzRXh0ZW5zaW9uKG5hbWUpOworfQorCit2b2lkIEV4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbjo6ZW5zdXJlRW5hYmxlZChjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgaWYg
KG5hbWUgPT0gIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpIHsKKyAgICAgICAgLy8gRW5h
YmxlIHN1cHBvcnQgaW4gQU5HTEUgKGlmIG5vdCBlbmFibGVkIGFscmVhZHkpCisgICAgICAgIEFO
R0xFV2ViS2l0QnJpZGdlJiBjb21waWxlciA9IG1fY29udGV4dC0+bV9jb21waWxlcjsKKyAgICAg
ICAgU2hCdWlsdEluUmVzb3VyY2VzIEFOR0xFUmVzb3VyY2VzID0gY29tcGlsZXIuZ2V0UmVzb3Vy
Y2VzKCk7CisgICAgICAgIGlmICghQU5HTEVSZXNvdXJjZXMuT0VTX3N0YW5kYXJkX2Rlcml2YXRp
dmVzKSB7CisgICAgICAgICAgICBBTkdMRVJlc291cmNlcy5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2
ZXMgPSAxOworICAgICAgICAgICAgY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2Vz
KTsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBFeHRlbnNpb25zM0RPcGVuR0xDb21tb246
OmlzRW5hYmxlZChjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgaWYgKG5hbWUgPT0gIkdMX09F
U19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpIHsKKyAgICAgICAgQU5HTEVXZWJLaXRCcmlkZ2UmIGNv
bXBpbGVyID0gbV9jb250ZXh0LT5tX2NvbXBpbGVyOworICAgICAgICByZXR1cm4gY29tcGlsZXIu
Z2V0UmVzb3VyY2VzKCkuT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzOworICAgIH0KKyAgICByZXR1
cm4gc3VwcG9ydHMobmFtZSk7Cit9CisKK2ludCBFeHRlbnNpb25zM0RPcGVuR0xDb21tb246Omdl
dEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKQoreworICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQz
RDo6Tk9fRVJST1I7Cit9CisKK1N0cmluZyBFeHRlbnNpb25zM0RPcGVuR0xDb21tb246OmdldFRy
YW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKK3sKKyAg
ICBBU1NFUlQoc2hhZGVyKTsKKyAgICBpbnQgR0xzaGFkZXJUeXBlOworICAgIEFOR0xFU2hhZGVy
VHlwZSBzaGFkZXJUeXBlOworCisgICAgQU5HTEVXZWJLaXRCcmlkZ2UmIGNvbXBpbGVyID0gbV9j
b250ZXh0LT5tX2NvbXBpbGVyOworCisgICAgbV9jb250ZXh0LT5nZXRTaGFkZXJpdihzaGFkZXIs
IEdyYXBoaWNzQ29udGV4dDNEOjpTSEFERVJfVFlQRSwgJkdMc2hhZGVyVHlwZSk7CisKKyAgICBp
ZiAoR0xzaGFkZXJUeXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSKQorICAg
ICAgICBzaGFkZXJUeXBlID0gU0hBREVSX1RZUEVfVkVSVEVYOworICAgIGVsc2UgaWYgKEdMc2hh
ZGVyVHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSKQorICAgICAgICBz
aGFkZXJUeXBlID0gU0hBREVSX1RZUEVfRlJBR01FTlQ7CisgICAgZWxzZQorICAgICAgICByZXR1
cm4gIiI7IC8vIEludmFsaWQgc2hhZGVyIHR5cGUuCisKKyAgICBIYXNoTWFwPFBsYXRmb3JtM0RP
YmplY3QsIEdyYXBoaWNzQ29udGV4dDNEOjpTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJl
c3VsdCA9IG1fY29udGV4dC0+bV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOworCisgICAg
aWYgKHJlc3VsdCA9PSBtX2NvbnRleHQtPm1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAg
ICByZXR1cm4gIiI7CisKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6U2hhZGVyU291cmNlRW50cnkm
IGVudHJ5ID0gcmVzdWx0LT5zZWNvbmQ7CisKKyAgICBTdHJpbmcgdHJhbnNsYXRlZFNoYWRlclNv
dXJjZTsKKyAgICBTdHJpbmcgc2hhZGVySW5mb0xvZzsKKworICAgIGJvb2wgaXNWYWxpZCA9IGNv
bXBpbGVyLnZhbGlkYXRlU2hhZGVyU291cmNlKGVudHJ5LnNvdXJjZS51dGY4KCkuZGF0YSgpLCBz
aGFkZXJUeXBlLCB0cmFuc2xhdGVkU2hhZGVyU291cmNlLCBzaGFkZXJJbmZvTG9nKTsKKworICAg
IGVudHJ5LmxvZyA9IHNoYWRlckluZm9Mb2c7CisgICAgZW50cnkuaXNWYWxpZCA9IGlzVmFsaWQ7
CisKKyAgICBpZiAoIWlzVmFsaWQpCisgICAgICAgIHJldHVybiAiIjsKKworICAgIHJldHVybiB0
cmFuc2xhdGVkU2hhZGVyU291cmNlOworfQorCit2b2lkIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1v
bjo6aW5pdGlhbGl6ZUF2YWlsYWJsZUV4dGVuc2lvbnMoKQoreworICAgIFN0cmluZyBleHRlbnNp
b25zU3RyaW5nID0gZ2V0RXh0ZW5zaW9ucygpOworICAgIFZlY3RvcjxTdHJpbmc+IGF2YWlsYWJs
ZUV4dGVuc2lvbnM7CisgICAgZXh0ZW5zaW9uc1N0cmluZy5zcGxpdCgiICIsIGF2YWlsYWJsZUV4
dGVuc2lvbnMpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXZhaWxhYmxlRXh0ZW5zaW9u
cy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9hdmFpbGFibGVFeHRlbnNpb25zLmFkZChhdmFpbGFi
bGVFeHRlbnNpb25zW2ldKTsKKyAgICBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucyA9
IHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShX
RUJHTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MDE4
MzllNmUzZTRiOTVhMWU1NjZjZDExZjhhMjdkNjliZWIzOWU1Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5H
TENvbW1vbi5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEV4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbl9oCisjZGVmaW5lIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbl9oCisKKyNpbmNs
dWRlICJFeHRlbnNpb25zM0QuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9u
IDogcHVibGljIEV4dGVuc2lvbnMzRCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+RXh0ZW5zaW9u
czNET3BlbkdMQ29tbW9uKCk7CisKKyAgICAvLyBFeHRlbnNpb25zM0QgbWV0aG9kcy4KKyAgICB2
aXJ0dWFsIGJvb2wgc3VwcG9ydHMoY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIGVu
c3VyZUVuYWJsZWQoY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCBib29sIGlzRW5hYmxlZChj
b25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIGludCBnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJC
KCk7CisKKyAgICB2aXJ0dWFsIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlVmVydGV4QXJyYXlPRVMo
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RP
YmplY3QpID0gMDsKKyAgICB2aXJ0dWFsIEdDM0Rib29sZWFuIGlzVmVydGV4QXJyYXlPRVMoUGxh
dGZvcm0zRE9iamVjdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBiaW5kVmVydGV4QXJyYXlPRVMo
UGxhdGZvcm0zRE9iamVjdCkgPSAwOworCisgICAgdmlydHVhbCBTdHJpbmcgZ2V0VHJhbnNsYXRl
ZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRmb3JtM0RPYmplY3QpOworCitwcm90ZWN0ZWQ6CisgICAg
RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uKEdyYXBoaWNzQ29udGV4dDNEKik7CisKKyAgICB2aXJ0
dWFsIHZvaWQgaW5pdGlhbGl6ZUF2YWlsYWJsZUV4dGVuc2lvbnMoKTsKKyAgICB2aXJ0dWFsIGJv
b2wgc3VwcG9ydHNFeHRlbnNpb24oY29uc3QgU3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwgU3Ry
aW5nIGdldEV4dGVuc2lvbnMoKSA9IDA7CisKKyAgICBib29sIG1faW5pdGlhbGl6ZWRBdmFpbGFi
bGVFeHRlbnNpb25zOworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2F2YWlsYWJsZUV4dGVuc2lvbnM7
CisKKyAgICAvLyBXZWFrIHBvaW50ZXIgYmFjayB0byBHcmFwaGljc0NvbnRleHQzRAorICAgIEdy
YXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFeHRlbnNpb25zM0RPcGVuR0xDb21tb25faApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVT
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25z
M0RPcGVuR0xFUy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWM2NTA3MTVlZWUyMjNhOWQwNzcwY2RkMjYxZDE0
MTUyMWMzZjJhNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5jcHAKQEAgLTAsMCArMSwxNDggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmIEVOQUJMRShX
RUJHTCkKKyNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0xFUy5oIgorCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlIDxFR0wvZWdsLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRXh0ZW5zaW9uczNET3BlbkdMRVM6
OkV4dGVuc2lvbnMzRE9wZW5HTEVTKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQorICAgIDog
RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uKGNvbnRleHQpCisgICAgLCBtX3N1cHBvcnRzT0VTdmVy
dGV4QXJyYXlPYmplY3QoZmFsc2UpCisgICAgLCBtX3N1cHBvcnRzSU1HTXVsdGlzYW1wbGVkUmVu
ZGVyVG9UZXh0dXJlKGZhbHNlKQorICAgICwgbV9nbEZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlz
YW1wbGVJTUcoMCkKKyAgICAsIG1fZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUco
MCkKKyAgICAsIG1fZ2xCaW5kVmVydGV4QXJyYXlPRVMoMCkKKyAgICAsIG1fZ2xEZWxldGVWZXJ0
ZXhBcnJheXNPRVMoMCkKKyAgICAsIG1fZ2xHZW5WZXJ0ZXhBcnJheXNPRVMoMCkKKyAgICAsIG1f
Z2xJc1ZlcnRleEFycmF5T0VTKDApCit7Cit9CisKK0V4dGVuc2lvbnMzRE9wZW5HTEVTOjp+RXh0
ZW5zaW9uczNET3BlbkdMRVMoKQoreworfQorCit2b2lkIEV4dGVuc2lvbnMzRE9wZW5HTEVTOjpm
cmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1
bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgdGV4dGFyZ2V0LCB1bnNpZ25l
ZCBpbnQgdGV4dHVyZSwgaW50IGxldmVsLCB1bnNpZ25lZCBsb25nIHNhbXBsZXMpCit7CisgICAg
aWYgKG1fZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HKQorICAgICAgICBtX2ds
RnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRyh0YXJnZXQsIGF0dGFjaG1lbnQsIHRl
eHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwsIHNhbXBsZXMpOworICAgIGVsc2UKKyAgICAgICAgbV9j
b250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cit9CisKK3Zv
aWQgRXh0ZW5zaW9uczNET3BlbkdMRVM6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlN
Ryh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBs
b25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhl
aWdodCkKK3sKKyAgICBpZiAobV9nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRykK
KyAgICAgICAgbV9nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRyh0YXJnZXQsIHNh
bXBsZXMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBlbHNlCisgICAgICAg
IG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworfQor
CitQbGF0Zm9ybTNET2JqZWN0IEV4dGVuc2lvbnMzRE9wZW5HTEVTOjpjcmVhdGVWZXJ0ZXhBcnJh
eU9FUygpCit7CisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
bV9nbEdlblZlcnRleEFycmF5c09FUykgeworICAgICAgICBHTHVpbnQgYXJyYXkgPSAwOworICAg
ICAgICBtX2dsR2VuVmVydGV4QXJyYXlzT0VTKDEsICZhcnJheSk7CisgICAgICAgIHJldHVybiBh
cnJheTsKKyAgICB9CisKKyAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBFeHRlbnNpb25zM0RPcGVu
R0xFUzo6ZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKK3sKKyAg
ICBpZiAoIWFycmF5KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIGlmIChtX2dsRGVsZXRlVmVydGV4QXJyYXlzT0VTKQorICAgICAg
ICBtX2dsRGVsZXRlVmVydGV4QXJyYXlzT0VTKDEsICZhcnJheSk7CisgICAgZWxzZQorICAgICAg
ICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKK30K
KworR0MzRGJvb2xlYW4gRXh0ZW5zaW9uczNET3BlbkdMRVM6OmlzVmVydGV4QXJyYXlPRVMoUGxh
dGZvcm0zRE9iamVjdCBhcnJheSkKK3sKKyAgICBpZiAoIWFycmF5KQorICAgICAgICByZXR1cm4g
R0xfRkFMU0U7CisKKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlm
IChtX2dsSXNWZXJ0ZXhBcnJheU9FUykKKyAgICAgICAgcmV0dXJuIG1fZ2xJc1ZlcnRleEFycmF5
T0VTKGFycmF5KTsKKworICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBFeHRlbnNpb25zM0RP
cGVuR0xFUzo6YmluZFZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCit7Cisg
ICAgaWYgKCFhcnJheSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBpZiAobV9nbEJpbmRWZXJ0ZXhBcnJheU9FUykKKyAgICAgICAg
bV9nbEJpbmRWZXJ0ZXhBcnJheU9FUyhhcnJheSk7CisgICAgZWxzZQorICAgICAgICBtX2NvbnRl
eHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKK30KKworCitib29s
IEV4dGVuc2lvbnMzRE9wZW5HTEVTOjpzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5h
bWUpCit7CisgICAgaWYgKG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucyhuYW1lKSkgewor
ICAgICAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiICYmICFtX3N1
cHBvcnRzT0VTdmVydGV4QXJyYXlPYmplY3QpIHsKKyAgICAgICAgICAgIG1fZ2xCaW5kVmVydGV4
QXJyYXlPRVMgPSByZWludGVycHJldF9jYXN0PFBGTkdMQklORFZFUlRFWEFSUkFZT0VTUFJPQz4o
ZWdsR2V0UHJvY0FkZHJlc3MoImdsQmluZFZlcnRleEFycmF5T0VTIikpOworICAgICAgICAgICAg
bV9nbEdlblZlcnRleEFycmF5c09FUyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xHRU5WRVJURVhB
UlJBWVNPRVNQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xHZW5WZXJ0ZXhBcnJheXNPRVMiKSk7
CisgICAgICAgICAgICBtX2dsRGVsZXRlVmVydGV4QXJyYXlzT0VTID0gcmVpbnRlcnByZXRfY2Fz
dDxQRk5HTERFTEVURVZFUlRFWEFSUkFZU09FU1BST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbERl
bGV0ZVZlcnRleEFycmF5c09FUyIpKTsKKyAgICAgICAgICAgIG1fZ2xJc1ZlcnRleEFycmF5T0VT
ID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTElTVkVSVEVYQVJSQVlPRVNQUk9DPihlZ2xHZXRQcm9j
QWRkcmVzcygiZ2xJc1ZlcnRleEFycmF5T0VTIikpOworICAgICAgICAgICAgbV9zdXBwb3J0c09F
U3ZlcnRleEFycmF5T2JqZWN0ID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIGlmIChuYW1lID09ICJH
TF9JTUdfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIiAmJiAhbV9zdXBwb3J0c0lNR011
bHRpc2FtcGxlZFJlbmRlclRvVGV4dHVyZSkgeworICAgICAgICAgICAgbV9nbEZyYW1lYnVmZmVy
VGV4dHVyZTJETXVsdGlzYW1wbGVJTUcgPSByZWludGVycHJldF9jYXN0PFBGTkdMRlJBTUVCVUZG
RVJURVhUVVJFMkRNVUxUSVNBTVBMRUlNR1BST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbEZyYW1l
YnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUciKSk7CisgICAgICAgICAgICBtX2dsUmVuZGVy
YnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTFJFTkRF
UkJVRkZFUlNUT1JBR0VNVUxUSVNBTVBMRUlNR1BST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbFJl
bmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRyIpKTsKKyAgICAgICAgICAgIG1fc3VwcG9y
dHNJTUdNdWx0aXNhbXBsZWRSZW5kZXJUb1RleHR1cmUgPSB0cnVlOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworU3RyaW5n
IEV4dGVuc2lvbnMzRE9wZW5HTEVTOjpnZXRFeHRlbnNpb25zKCkKK3sKKyAgICByZXR1cm4gU3Ry
aW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KDo6Z2xHZXRTdHJpbmcoR0xfRVhURU5T
SU9OUykpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KFdFQkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MDIyMmNhNGQ3
YTk0YTA4YzJmOTc1NjE0YmYyYmM2MGUwMDFlMDk1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmgK
QEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRXh0ZW5zaW9uczNET3BlbkdMRVNfaAor
I2RlZmluZSBFeHRlbnNpb25zM0RPcGVuR0xFU19oCisKKyNpbmNsdWRlICJFeHRlbnNpb25zM0RP
cGVuR0xDb21tb24uaCIKKworI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2luY2x1ZGUgPEdMRVMy
L2dsMmV4dC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEV4dGVuc2lvbnMzRE9w
ZW5HTEVTIDogcHVibGljIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbiB7CitwdWJsaWM6CisgICAg
dmlydHVhbCB+RXh0ZW5zaW9uczNET3BlbkdMRVMoKTsKKworICAgIHZpcnR1YWwgdm9pZCBmcmFt
ZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNp
Z25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgdGV4dGFyZ2V0LCB1bnNpZ25lZCBp
bnQgdGV4dHVyZSwgaW50IGxldmVsLCB1bnNpZ25lZCBsb25nIHNhbXBsZXMpOworICAgIHZpcnR1
YWwgdm9pZCByZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUcodW5zaWduZWQgbG9uZyB0
YXJnZXQsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcywgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1h
dCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpOworCisgICAgdmly
dHVhbCBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVZlcnRleEFycmF5T0VTKCk7CisgICAgdmlydHVh
bCB2b2lkIGRlbGV0ZVZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpOworICAgIHZpcnR1
YWwgR0MzRGJvb2xlYW4gaXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KTsKKyAgICB2
aXJ0dWFsIHZvaWQgYmluZFZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpOworCitwcm90
ZWN0ZWQ6CisgICAgLy8gVGhpcyBjbGFzcyBvbmx5IG5lZWRzIHRvIGJlIGluc3RhbnRpYXRlZCBi
eSBHcmFwaGljc0NvbnRleHQzRCBpbXBsZW1lbnRhdGlvbnMuCisgICAgZnJpZW5kIGNsYXNzIEdy
YXBoaWNzQ29udGV4dDNEOworICAgIEV4dGVuc2lvbnMzRE9wZW5HTEVTKEdyYXBoaWNzQ29udGV4
dDNEKik7CisKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNFeHRlbnNpb24oY29uc3QgU3RyaW5n
Jik7CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0RXh0ZW5zaW9ucygpOworCisgICAgYm9vbCBtX3N1
cHBvcnRzT0VTdmVydGV4QXJyYXlPYmplY3Q7CisgICAgYm9vbCBtX3N1cHBvcnRzSU1HTXVsdGlz
YW1wbGVkUmVuZGVyVG9UZXh0dXJlOworCisgICAgUEZOR0xGUkFNRUJVRkZFUlRFWFRVUkUyRE1V
TFRJU0FNUExFSU1HUFJPQyBtX2dsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRzsK
KyAgICBQRk5HTFJFTkRFUkJVRkZFUlNUT1JBR0VNVUxUSVNBTVBMRUlNR1BST0MgbV9nbFJlbmRl
cmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRzsKKyAgICBQRk5HTEJJTkRWRVJURVhBUlJBWU9F
U1BST0MgbV9nbEJpbmRWZXJ0ZXhBcnJheU9FUzsKKyAgICBQRk5HTERFTEVURVZFUlRFWEFSUkFZ
U09FU1BST0MgbV9nbERlbGV0ZVZlcnRleEFycmF5c09FUzsKKyAgICBQRk5HTEdFTlZFUlRFWEFS
UkFZU09FU1BST0MgbV9nbEdlblZlcnRleEFycmF5c09FUzsKKyAgICBQRk5HTElTVkVSVEVYQVJS
QVlPRVNQUk9DIG1fZ2xJc1ZlcnRleEFycmF5T0VTOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRXh0ZW5zaW9uczNET3BlbkdMRVNfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3Bl
bkdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHQzRE9wZW5HTC5jcHAKaW5kZXggM2Y0N2I2ZTIxZWIyNTUyNDNlZWVhNGJmMzE5ODUz
YWJiZjc2YTJkYy4uNWYwMDUwNTk5YzZhYjZiNDEzMjAzMjU4MGE1NDBhM2MyNmU3MjliNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dDNET3BlbkdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCkBAIC0zNCw2ICszNCwxMSBAQAog
I2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogCisjaW5j
bHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8d3RmL1VudXNl
ZFBhcmFtLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCiAjaWYgUExBVEZPUk0o
TUFDKQogI2luY2x1ZGUgPE9wZW5HTC9nbC5oPgogI2VsaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFU
Rk9STShFRkwpIHx8IFBMQVRGT1JNKFFUKQpAQCAtNDcsNiArNTIsMzIgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6cmVhZFBpeGVsc0FuZENvbnZlcnRUb0JHUkFJZk5lY2Vzc2FyeShpbnQgeCwg
aW50IHksIGludAogICAgIDo6Z2xSZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIEdMX0JH
UkEsIEdMX1VOU0lHTkVEX0lOVF84XzhfOF84X1JFViwgcGl4ZWxzKTsKIH0KIAordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dmFsaWRhdGVBdHRyaWJ1dGVzKCkKK3sKKyAgICBFeHRlbnNpb25zM0Qq
IGV4dGVuc2lvbnMgPSBnZXRFeHRlbnNpb25zKCk7CisgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkg
eworICAgICAgICBjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24gPSBpc0dM
RVMyQ29tcGxpYW50KCkgPyAiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsIiA6ICJHTF9FWFRf
cGFja2VkX2RlcHRoX3N0ZW5jaWwiOworICAgICAgICBpZiAoZXh0ZW5zaW9ucy0+c3VwcG9ydHMo
cGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKSkgeworICAgICAgICAgICAgZXh0ZW5zaW9ucy0+
ZW5zdXJlRW5hYmxlZChwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pOworICAgICAgICAgICAg
Ly8gRm9yY2UgZGVwdGggaWYgc3RlbmNpbCBpcyB0cnVlLgorICAgICAgICAgICAgbV9hdHRycy5k
ZXB0aCA9IHRydWU7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9hdHRycy5zdGVuY2ls
ID0gZmFsc2U7CisgICAgfQorICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgeworICAgICAgICBi
b29sIGlzVmFsaWRWZW5kb3IgPSB0cnVlOworICAgICAgICAvLyBDdXJyZW50bHkgaW4gTWFjIHdl
IG9ubHkgdHVybiBvbiBhbnRpYWxpYXMgaWYgdmVuZG9yIGlzIE5WSURJQSwKKyAgICAgICAgLy8g
b3IgaWYgQVRJIGFuZCBvbiAxMC43LjIgYW5kIGFib3ZlLgorICAgICAgICBjb25zdCBjaGFyKiB2
ZW5kb3IgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPig6OmdsR2V0U3RyaW5nKEdMX1ZF
TkRPUikpOworICAgICAgICBpZiAoIXZlbmRvciB8fCAoIXN0ZDo6c3Ryc3RyKHZlbmRvciwgIk5W
SURJQSIpICYmICEoc3RkOjpzdHJzdHIodmVuZG9yLCAiQVRJIikgJiYgc3lzdGVtQWxsb3dzTXVs
dGlzYW1wbGluZ09uQVRJQ2FyZHMoKSkpKQorICAgICAgICAgICAgaXNWYWxpZFZlbmRvciA9IGZh
bHNlOworICAgICAgICBpZiAoIWlzVmFsaWRWZW5kb3IgfHwgIWV4dGVuc2lvbnMtPnN1cHBvcnRz
KCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpIHx8IGlzR0xFUzJDb21wbGlhbnQo
KSkKKyAgICAgICAgICAgIG1fYXR0cnMuYW50aWFsaWFzID0gZmFsc2U7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQoIkdMX0FOR0xFX2ZyYW1lYnVm
ZmVyX211bHRpc2FtcGxlIik7CisgICAgfQorfQorCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpy
ZXNoYXBlRkJPcyhjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIGNvbnN0IGludCB3aWR0aCA9
IHNpemUud2lkdGgoKTsKQEAgLTE1MSw2ICsxODIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KGNvbnN0IEludFJlY3QmIHJlY3QpCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKwogICAgIHN3aXRjaCAoaW50ZXJu
YWxmb3JtYXQpIHsKICAgICBjYXNlIERFUFRIX1NURU5DSUw6CiAgICAgICAgIGludGVybmFsZm9y
bWF0ID0gR0xfREVQVEgyNF9TVEVOQ0lMOF9FWFQ7CkBAIC0yMzIsNiArMjY0LDcgQEAgYm9vbCBH
cmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RlbnVtIGludGUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKwogICAgIEdDM0RlbnVtIG9wZW5HTEludGVybmFsRm9ybWF0ID0g
aW50ZXJuYWxmb3JtYXQ7CiAgICAgaWYgKHR5cGUgPT0gR0xfRkxPQVQpIHsKICAgICAgICAgaWYg
KGZvcm1hdCA9PSBHTF9SR0JBKQpAQCAtMjQxLDYgKzI3NCw3IEBAIGJvb2wgR3JhcGhpY3NDb250
ZXh0M0Q6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51
bSBpbnRlCiAgICAgfQogCiAgICAgOjpnbFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgb3BlbkdM
SW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhl
bHMpOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTI1Niw2ICsyOTAsMzMgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6Y2xlYXJEZXB0aChHQzNEY2xhbXBmIGRlcHRoKQogICAgIDo6Z2xD
bGVhckRlcHRoKGRlcHRoKTsKIH0KIAorYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6c3lzdGVtQWxs
b3dzTXVsdGlzYW1wbGluZ09uQVRJQ2FyZHMoKQoreworI2lmIFBMQVRGT1JNKE1BQykKKyNpZiAh
ZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09O
X0xJT04pCisgICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CisgICAgc3RhdGljIFNJbnQzMiB2ZXJzaW9uOworICAgIGlmICghdmVyc2lvbikgeworICAg
ICAgICBpZiAoR2VzdGFsdChnZXN0YWx0U3lzdGVtVmVyc2lvbiwgJnZlcnNpb24pICE9IG5vRXJy
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAvLyBTZWUgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3OTIyIGZvciBtb3JlIGRldGFpbHMKKyAg
ICByZXR1cm4gdmVyc2lvbiA+PSAweDEwNzI7CisjZW5kaWYgLy8gU05PV19MRU9QQVJEIGFuZCBM
SU9OCisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCit9
CisKK0V4dGVuc2lvbnMzRCogR3JhcGhpY3NDb250ZXh0M0Q6OmdldEV4dGVuc2lvbnMoKQorewor
ICAgIGlmICghbV9leHRlbnNpb25zKQorICAgICAgICBtX2V4dGVuc2lvbnMgPSBhZG9wdFB0cihu
ZXcgRXh0ZW5zaW9uczNET3BlbkdMKHRoaXMpKTsKKyAgICByZXR1cm4gbV9leHRlbnNpb25zLmdl
dCgpOworfQorCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVu
R0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dy
YXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAppbmRleCA0MjlmYzUxYzkwNDZjNDRhNTBl
ZmVjZTEyOWNiZjMxZjYwZDk5NzVlLi43NjJlMzlmMDlkYWE5NmY1YzBkYTczNDg0MDk0MTg0NWFk
ZWE5YmYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5j
cHAKQEAgLTMwLDcgKzMwLDEyIEBACiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgog
CisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgorI2lmIFVTRShPUEVOR0xfRVNf
MikKKyNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0xFUy5oIgorI2Vsc2UKICNpbmNsdWRlICJF
eHRlbnNpb25zM0RPcGVuR0wuaCIKKyNlbmRpZgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCkBAIC00
OSwzOSArNTQsMjQgQEAKICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgVVNFKE9QRU5HTF9F
U18yKQorI2luY2x1ZGUgIk9wZW5HTEVTU2hpbXMuaCIKKyNlbGlmIFBMQVRGT1JNKE1BQykKICNp
bmNsdWRlIDxPcGVuR0wvZ2wuaD4KICNlbGlmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZM
KSB8fCBQTEFURk9STShRVCkKICNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgogI2VuZGlmCiAKLW5h
bWVzcGFjZSBXZWJDb3JlIHsKKyNpZiBQTEFURk9STShCTEFDS0JFUlJZKQorI2luY2x1ZGUgPEJs
YWNrQmVycnlQbGF0Zm9ybUxvZy5oPgorI2VuZGlmCiAKLXN0YXRpYyBib29sIHN5c3RlbUFsbG93
c011bHRpc2FtcGxpbmdPbkFUSUNhcmRzKCkKLXsKLSNpZiBQTEFURk9STShNQUMpCi0jaWYgIWRl
ZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9M
SU9OKQotICAgIHJldHVybiB0cnVlOwotI2Vsc2UKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotICAgIHN0YXRpYyBTSW50MzIgdmVyc2lvbjsKLSAgICBpZiAoIXZlcnNpb24pIHsKLSAgICAg
ICAgaWYgKEdlc3RhbHQoZ2VzdGFsdFN5c3RlbVZlcnNpb24sICZ2ZXJzaW9uKSAhPSBub0VycikK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgLy8gU2VlIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzkyMiBmb3IgbW9yZSBkZXRhaWxzCi0gICAg
cmV0dXJuIHZlcnNpb24gPj0gMHgxMDcyOwotI2VuZGlmIC8vIFNOT1dfTEVPUEFSRCBhbmQgTElP
TgotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQotfQor
bmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZUF0
dHJpYnV0ZXMoKQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVEZXB0aFN0ZW5jaWwo
Y29uc3QgY2hhciogcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKQogewogICAgIEV4dGVuc2lv
bnMzRCogZXh0ZW5zaW9ucyA9IGdldEV4dGVuc2lvbnMoKTsKICAgICBpZiAobV9hdHRycy5zdGVu
Y2lsKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbiA9
IGlzR0xFUzJDb21wbGlhbnQoKSA/ICJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiIDogIkdM
X0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCI7CiAgICAgICAgIGlmIChleHRlbnNpb25zLT5zdXBw
b3J0cyhwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pKSB7CiAgICAgICAgICAgICBleHRlbnNp
b25zLT5lbnN1cmVFbmFibGVkKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbik7CiAgICAgICAg
ICAgICAvLyBGb3JjZSBkZXB0aCBpZiBzdGVuY2lsIGlzIHRydWUuCkBAIC00MzksMzYgKzQyOSwx
MSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hhZGVyKFBsYXRmb3JtM0RPYmpl
Y3Qgc2hhZGVyKQogICAgIEFTU0VSVChzaGFkZXIpOwogICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwogCi0gICAgaW50IEdMc2hhZGVyVHlwZTsKLSAgICBBTkdMRVNoYWRlclR5cGUgc2hhZGVyVHlw
ZTsKLQotICAgIGdsR2V0U2hhZGVyaXYoc2hhZGVyLCBTSEFERVJfVFlQRSwgJkdMc2hhZGVyVHlw
ZSk7Ci0gICAgCi0gICAgaWYgKEdMc2hhZGVyVHlwZSA9PSBWRVJURVhfU0hBREVSKQotICAgICAg
ICBzaGFkZXJUeXBlID0gU0hBREVSX1RZUEVfVkVSVEVYOwotICAgIGVsc2UgaWYgKEdMc2hhZGVy
VHlwZSA9PSBGUkFHTUVOVF9TSEFERVIpCi0gICAgICAgIHNoYWRlclR5cGUgPSBTSEFERVJfVFlQ
RV9GUkFHTUVOVDsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybjsgLy8gSW52YWxpZCBzaGFkZXIg
dHlwZS4KLQotICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+
OjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAg
U3RyaW5nIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UgPSBtX2V4dGVuc2lvbnMtPmdldFRyYW5zbGF0
ZWRTaGFkZXJTb3VyY2VBTkdMRShzaGFkZXIpOwogCi0gICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRl
clNvdXJjZU1hcC5lbmQoKSkKKyAgICBpZiAoIXRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UubGVuZ3Ro
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJl
c3VsdC0+c2Vjb25kOwotCi0gICAgU3RyaW5nIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7Ci0gICAg
U3RyaW5nIHNoYWRlckluZm9Mb2c7Ci0KLSAgICBib29sIGlzVmFsaWQgPSBtX2NvbXBpbGVyLnZh
bGlkYXRlU2hhZGVyU291cmNlKGVudHJ5LnNvdXJjZS51dGY4KCkuZGF0YSgpLCBzaGFkZXJUeXBl
LCB0cmFuc2xhdGVkU2hhZGVyU291cmNlLCBzaGFkZXJJbmZvTG9nKTsKLQotICAgIGVudHJ5Lmxv
ZyA9IHNoYWRlckluZm9Mb2c7Ci0gICAgZW50cnkuaXNWYWxpZCA9IGlzVmFsaWQ7Ci0KLSAgICBp
ZiAoIWlzVmFsaWQpCi0gICAgICAgIHJldHVybjsgLy8gU2hhZGVyIGRpZG4ndCB2YWxpZGF0ZSwg
ZG9uJ3QgbW92ZSBmb3J3YXJkIHdpdGggY29tcGlsaW5nIHRyYW5zbGF0ZWQgc291cmNlLgotCiAg
ICAgaW50IHRyYW5zbGF0ZWRTaGFkZXJMZW5ndGggPSB0cmFuc2xhdGVkU2hhZGVyU291cmNlLmxl
bmd0aCgpOwogCiAgICAgY29uc3QgQ1N0cmluZyYgdHJhbnNsYXRlZFNoYWRlckNTdHJpbmcgPSB0
cmFuc2xhdGVkU2hhZGVyU291cmNlLnV0ZjgoKTsKQEAgLTgwMSwxOCArNzY2LDYxIEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpCiAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CiAgICAgICAgIDo6Z2xGbHVzaCgpOwog
ICAgIH0KKyAgICAvLyBDdXJyZW50bHkgb25seSBmb3JtYXQ9UkdCQSwgdHlwZT1VTlNJR05FRF9C
WVRFIGlzIHN1cHBvcnRlZCBieSB0aGUgc3BlY2lmaWNhdGlvbjogaHR0cDovL3d3dy5raHJvbm9z
Lm9yZy9yZWdpc3RyeS93ZWJnbC9zcGVjcy9sYXRlc3QvCisgICAgLy8gSWYgdGhpcyBldmVyIGNo
YW5nZXMsIHRoaXMgY29kZSB3aWxsIG5lZWQgdG8gYmUgdXBkYXRlZC4KKworICAgIC8vIENhbGN1
bGF0ZSB0aGUgc3RyaWRlcyBvZiBvdXIgZGF0YSBhbmQgY2FudmFzCisgICAgdW5zaWduZWQgaW50
IGZvcm1hdFNpemUgPSA0OyAvLyBSR0JBIFVOU0lHTkVEX0JZVEUKKyAgICB1bnNpZ25lZCBpbnQg
ZGF0YVN0cmlkZSA9IHdpZHRoICogZm9ybWF0U2l6ZTsKKyAgICB1bnNpZ25lZCBpbnQgY2FudmFz
U3RyaWRlID0gbV9jdXJyZW50V2lkdGggKiBmb3JtYXRTaXplOworCisgICAgLy8gSWYgd2UgYXJl
IHVzaW5nIGEgcGFjayBhbGlnbm1lbnQgb2YgOCwgdGhlbiB3ZSBuZWVkIHRvIGFsaWduIG91ciBz
dHJpZGVzIHRvIDggYnl0ZSBib3VuZGFyaWVzCisgICAgLy8gU2VlOiBodHRwOi8vZW4ud2lraXBl
ZGlhLm9yZy93aWtpL0RhdGFfc3RydWN0dXJlX2FsaWdubWVudCAoY29tcHV0aW5nIHBhZGRpbmcp
CisgICAgaW50IHBhY2tBbGlnbm1lbnQ7CisgICAgZ2xHZXRJbnRlZ2VydihHTF9QQUNLX0FMSUdO
TUVOVCwgJnBhY2tBbGlnbm1lbnQpOworICAgIGlmICg4ID09IHBhY2tBbGlnbm1lbnQpIHsKKyAg
ICAgICAgZGF0YVN0cmlkZSA9IChkYXRhU3RyaWRlICsgNykgJiB+NzsKKyAgICAgICAgY2FudmFz
U3RyaWRlID0gKGNhbnZhc1N0cmlkZSArIDcpICYgfjc7CisgICAgfQorCisgICAgdW5zaWduZWQg
Y2hhciogY2FudmFzRGF0YSA9IG5ldyB1bnNpZ25lZCBjaGFyW2NhbnZhc1N0cmlkZSAqIG1fY3Vy
cmVudEhlaWdodF07CisgICAgOjpnbFJlYWRQaXhlbHMoMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1f
Y3VycmVudEhlaWdodCwgZm9ybWF0LCB0eXBlLCBjYW52YXNEYXRhKTsKKworICAgIC8vIElmIHdl
IGZhaWxlZCB0byByZWFkIG91ciBjYW52YXMgZGF0YSBkdWUgdG8gYSBHTCBlcnJvciwgZG9uJ3Qg
Y29udGludWUKKyAgICBpbnQgZXJyb3IgPSBnbEdldEVycm9yKCk7CisgICAgaWYgKEdMX05PX0VS
Uk9SICE9IGVycm9yKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9yKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIENsZWFyIG91ciBkYXRhIGluIGNhc2Ugc29tZSBv
ZiBpdCBsaWVzIG91dHNpZGUgdGhlIGJvdW5kcyBvZiBvdXIgY2FudmFzCisgICAgLy8gVE9ETzog
ZG9uJ3QgZG8gdGhpcyBpZiBhbGwgb2YgdGhlIGRhdGEgbGllcyBpbnNpZGUgdGhlIGJvdW5kcyBv
ZiB0aGUgY2FudmFzCisgICAgbWVtc2V0KGRhdGEsIDAsIGRhdGFTdHJpZGUgKiBoZWlnaHQpOwor
CisgICAgLy8gQ2FsY3VsYXRlIHRoZSBpbnRlcnNlY3Rpb24gb2Ygb3VyIGNhbnZhcyBhbmQgZGF0
YSBib3VuZHMKKyAgICBJbnRSZWN0IGRhdGFSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAg
IEludFJlY3QgY2FudmFzUmVjdCgwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0
KTsKKyAgICBJbnRSZWN0IG5vblplcm9EYXRhUmVjdCA9IGludGVyc2VjdGlvbihkYXRhUmVjdCwg
Y2FudmFzUmVjdCk7CisKKyAgICB1bnNpZ25lZCBpbnQgeERhdGFPZmZzZXQgPSB4IDwgMCA/IC14
ICogZm9ybWF0U2l6ZSA6IDA7CisgICAgdW5zaWduZWQgaW50IHlEYXRhT2Zmc2V0ID0geSA8IDAg
PyAteSAqIGRhdGFTdHJpZGUgOiAwOworICAgIHVuc2lnbmVkIGludCB4Q2FudmFzT2Zmc2V0ID0g
bm9uWmVyb0RhdGFSZWN0LngoKSAqIGZvcm1hdFNpemU7CisgICAgdW5zaWduZWQgaW50IHlDYW52
YXNPZmZzZXQgPSBub25aZXJvRGF0YVJlY3QueSgpICogY2FudmFzU3RyaWRlOworICAgIHVuc2ln
bmVkIGNoYXIqIGRzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihkYXRhKSArIHhEYXRh
T2Zmc2V0ICsgeURhdGFPZmZzZXQ7CisgICAgdW5zaWduZWQgY2hhciogc3JjID0gY2FudmFzRGF0
YSArIHhDYW52YXNPZmZzZXQgKyB5Q2FudmFzT2Zmc2V0OworICAgIGZvciAoaW50IHJvdyA9IDA7
IHJvdyA8IG5vblplcm9EYXRhUmVjdC5oZWlnaHQoKTsgcm93KyspIHsKKyAgICAgICAgbWVtY3B5
KGRzdCwgc3JjLCBub25aZXJvRGF0YVJlY3Qud2lkdGgoKSAqIGZvcm1hdFNpemUpOworICAgICAg
ICBkc3QgKz0gZGF0YVN0cmlkZTsKKyAgICAgICAgc3JjICs9IGNhbnZhc1N0cmlkZTsKKyAgICB9
CisKKyAgICBkZWxldGUgW10gY2FudmFzRGF0YTsKICAgICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEpOworCiAgICAgaWYgKG1fYXR0cnMuYW50
aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKICAgICAgICAgOjpnbEJp
bmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlz
YW1wbGVGQk8pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29t
cGlsZXIoKQotewotICAgIC8vIEZJWE1FOiBUaGlzIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiBkZXNr
dG9wIE9wZW5HTC4gV2UgbmVlZCB0byBoYXZlIGlmZGVmcyBmb3IgdGhlIGRpZmZlcmVudCBHTCB2
YXJpYW50cy4KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzYW1wbGVDb3ZlcmFnZShHQzNEY2xhbXBm
IHZhbHVlLCBHQzNEYm9vbGVhbiBpbnZlcnQpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CkBAIC0xMzg2LDEzICsxMzk0LDYgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6bGF5ZXJDb21w
b3NpdGVkKCkgY29uc3QKICAgICByZXR1cm4gbV9sYXllckNvbXBvc2l0ZWQ7CiB9CiAKLUV4dGVu
c2lvbnMzRCogR3JhcGhpY3NDb250ZXh0M0Q6OmdldEV4dGVuc2lvbnMoKQotewotICAgIGlmICgh
bV9leHRlbnNpb25zKQotICAgICAgICBtX2V4dGVuc2lvbnMgPSBhZG9wdFB0cihuZXcgRXh0ZW5z
aW9uczNET3BlbkdMKHRoaXMpKTsKLSAgICByZXR1cm4gbV9leHRlbnNpb25zLmdldCgpOwotfQot
CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
M0RPcGVuR0xFUy5jcHAKaW5kZXggYjFiZDFkYzU2Y2E2ZmQ5MjgzZGIyZGFlMTIzODNjZTIyZmM5
NDMwMi4uM2I0NGEyNDZlZjEzMDRjMDQ5MTZhOGMxMzU5MDQ2MWNlYTNmMjg0MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dDNET3BlbkdMRVMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcApAQCAtMjksOTMgKzI5LDI5IEBACiAj
aWYgRU5BQkxFKFdFQkdMKQogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLQotI2lu
Y2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTC5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5H
TEVTLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNs
dWRlICJMYXllcldlYktpdFRocmVhZC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0K
LSNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFFUKQotI2luY2x1ZGUgIk9wZW5HTFNoaW1z
LmgiCi0jZW5kaWYKKyNpbmNsdWRlICJPcGVuR0xFU1NoaW1zLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVsc0FuZENvbnZlcnRUb0JH
UkFJZk5lY2Vzc2FyeShpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgdW5zaWdu
ZWQgY2hhciogcGl4ZWxzKQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNv
bXBpbGVyKCkKIHsKLSAgICBjb25zdCBpbnQgdG90YWxCeXRlcyA9IG1fY3VycmVudFdpZHRoICog
bV9jdXJyZW50SGVpZ2h0ICogNDsKLSAgICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVp
Z2h0LCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhlbHMpOwotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgdG90YWxCeXRlczsgaSArPSA0KQotICAgICAgICBzdGQ6OnN3YXAocGl4ZWxzW2ld
LCBwaXhlbHNbaSArIDJdKTsgLy8gQ29udmVydCB0byBCR1JBLgorICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIDo6Z2xSZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKIH0KIAotYm9vbCBHcmFw
aGljc0NvbnRleHQzRDo6cmVzaGFwZUZCT3MoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHNBbmRDb252ZXJ0VG9CR1JBSWZOZWNlc3NhcnkoaW50
IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVuc2lnbmVkIGNoYXIqIHBpeGVscykK
IHsKLSAgICBjb25zdCBpbnQgd2lkdGggPSBzaXplLndpZHRoKCk7Ci0gICAgY29uc3QgaW50IGhl
aWdodCA9IHNpemUuaGVpZ2h0KCk7Ci0gICAgR0x1aW50IGNvbG9yRm9ybWF0ID0gMCwgcGl4ZWxE
YXRhVHlwZSA9IDA7Ci0gICAgaWYgKG1fYXR0cnMuYWxwaGEpIHsKLSAgICAgICAgbV9pbnRlcm5h
bENvbG9yRm9ybWF0ID0gR0xfUkdCQTsKLSAgICAgICAgY29sb3JGb3JtYXQgPSBHTF9SR0JBOwot
ICAgICAgICBwaXhlbERhdGFUeXBlID0gR0xfVU5TSUdORURfQllURTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBtX2ludGVybmFsQ29sb3JGb3JtYXQgPSBHTF9SR0I7Ci0gICAgICAgIGNvbG9yRm9y
bWF0ID0gR0xfUkdCOwotICAgICAgICBwaXhlbERhdGFUeXBlID0gR0xfVU5TSUdORURfU0hPUlRf
NV82XzU7Ci0gICAgfQotCi0gICAgLy8gV2UgZG9uJ3QgYWxsb3cgdGhlIGxvZ2ljIHdoZXJlIHN0
ZW5jaWwgaXMgcmVxdWlyZWQgYW5kIGRlcHRoIGlzIG5vdC4KLSAgICAvLyBTZWUgR3JhcGhpY3ND
b250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRlcy4KLSAgICBib29sIHN1cHBvcnRQYWNrZWREZXB0
aFN0ZW5jaWxCdWZmZXIgPSAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpICYmIGdl
dEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOwot
Ci0gICAgLy8gUmVzaXplIHJlZ3VsYXIgRkJPLgotICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSBm
YWxzZTsKLSAgICBpZiAobV9ib3VuZEZCTyAhPSBtX2ZibykgewotICAgICAgICBtdXN0UmVzdG9y
ZUZCTyA9IHRydWU7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgfQotCi0gICAgOjpnbEJpbmRUZXh0dXJl
KEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSk7Ci0gICAgOjpnbFRleEltYWdlMkQoR0xfVEVYVFVS
RV8yRCwgMCwgbV9pbnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBjb2xvckZv
cm1hdCwgcGl4ZWxEYXRhVHlwZSwgMCk7Ci0gICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhU
KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9S
X0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBtX3RleHR1cmUsIDApOwotCi0gICAgOjpnbEJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fY29tcG9zaXRvclRleHR1cmUpOwotICAgIDo6Z2xU
ZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIDApOwotICAgIDo6Z2xC
aW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKLQotICAgIC8vIFdlIGRvbid0IHN1cHBvcnQg
YW50aWFsaWFzaW5nIHlldC4gU2VlIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZUF0dHJpYnV0
ZXMuCi0gICAgQVNTRVJUKCFtX2F0dHJzLmFudGlhbGlhcyk7Ci0KLSAgICBpZiAobV9hdHRycy5z
dGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpIHsKLSAgICAgICAgLy8gVXNlIGEgMjQgYml0IGRlcHRo
IGJ1ZmZlciB3aGVyZSB3ZSBrbm93IHdlIGhhdmUgaXQuCi0gICAgICAgIGlmIChzdXBwb3J0UGFj
a2VkRGVwdGhTdGVuY2lsQnVmZmVyKSB7Ci0gICAgICAgICAgICA6OmdsQmluZFRleHR1cmUoR0xf
VEVYVFVSRV8yRCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICAgICAgOjpnbFRleElt
YWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUws
IHdpZHRoLCBoZWlnaHQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMLCBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UXzI0XzgsIDApOwotICAgICAgICAgICAgaWYgKG1f
YXR0cnMuc3RlbmNpbCkKLSAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkQo
R0xfRlJBTUVCVUZGRVIsIEdMX1NURU5DSUxfQVRUQUNITUVOVCwgR0xfVEVYVFVSRV8yRCwgbV9k
ZXB0aFN0ZW5jaWxCdWZmZXIsIDApOwotICAgICAgICAgICAgaWYgKG1fYXR0cnMuZGVwdGgpCi0g
ICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBH
TF9ERVBUSF9BVFRBQ0hNRU5ULCBHTF9URVhUVVJFXzJELCBtX2RlcHRoU3RlbmNpbEJ1ZmZlciwg
MCk7Ci0gICAgICAgICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsKSB7Ci0gICAgICAg
ICAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRF
UkJVRkZFUiwgbV9zdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgICAgICAgICA6OmdsUmVuZGVyYnVm
ZmVyU3RvcmFnZUVYVChHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBHTF9TVEVOQ0lM
X0lOREVYOCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVy
UmVuZGVyYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3ND
b250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJV
RkZFUiwgbV9zdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICht
X2F0dHJzLmRlcHRoKSB7Ci0gICAgICAgICAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQo
R3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9kZXB0aEJ1ZmZlcik7Ci0gICAgICAg
ICAgICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OlJF
TkRFUkJVRkZFUiwgR0xfREVQVEhfQ09NUE9ORU5UMTYsIHdpZHRoLCBoZWlnaHQpOwotICAgICAg
ICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5ULCBHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX2RlcHRoQnVmZmVyKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNE
OjpSRU5ERVJCVUZGRVIsIDApOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChnbENoZWNrRnJh
bWVidWZmZXJTdGF0dXNFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSAhPSBHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKLSAgICAgICAgLy8gRklYTUU6
IGNsZWFudXAKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICA6OmdsUmVhZFBpeGVscyh4
LCB5LCB3aWR0aCwgaGVpZ2h0LCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhlbHMpOwor
ICAgIGludCB0b3RhbEJ5dGVzID0gd2lkdGggKiBoZWlnaHQgKiA0OworICAgIGlmIChpc0dMRVMy
Q29tcGxpYW50KCkpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBp
ICs9IDQpCisgICAgICAgICAgICBzdGQ6OnN3YXAocGl4ZWxzW2ldLCBwaXhlbHNbaSArIDJdKTsg
Ly8gQ29udmVydCB0byBCR1JBLgogICAgIH0KLQotICAgIHJldHVybiBtdXN0UmVzdG9yZUZCTzsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vz
c2FyeShjb25zdCBJbnRSZWN0JiByZWN0KQpAQCAtMTU2LDYgKzkyLDE3IEBAIGJvb2wgR3JhcGhp
Y3NDb250ZXh0M0Q6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBH
QzNEZW51bSBpbnRlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnZhbGlkYXRlQXR0cmlidXRlcygpCit7CisgICAgdmFsaWRhdGVEZXB0aFN0ZW5jaWwoIkdM
X09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOworCisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFz
KSB7CisgICAgICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IGdldEV4dGVuc2lvbnMoKTsK
KyAgICAgICAgaWYgKCFleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfSU1HX211bHRpc2FtcGxlZF9y
ZW5kZXJfdG9fdGV4dHVyZSIpKQorICAgICAgICAgICAgbV9hdHRycy5hbnRpYWxpYXMgPSBmYWxz
ZTsKKyAgICB9Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoUmFuZ2UoR0MzRGNs
YW1wZiB6TmVhciwgR0MzRGNsYW1wZiB6RmFyKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwpAQCAtMTY4LDYgKzExNSwxOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRlcHRo
KEdDM0RjbGFtcGYgZGVwdGgpCiAgICAgOjpnbENsZWFyRGVwdGhmKGRlcHRoKTsKIH0KIAotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCitFeHRlbnNpb25zM0QqIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRFeHRlbnNpb25zKCkKK3sKKyAgICBpZiAoIW1fZXh0ZW5zaW9ucykKKyAgICAgICAgbV9leHRl
bnNpb25zID0gYWRvcHRQdHIobmV3IEV4dGVuc2lvbnMzRE9wZW5HTEVTKHRoaXMpKTsKKyAgICBy
ZXR1cm4gbV9leHRlbnNpb25zLmdldCgpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpz
eXN0ZW1BbGxvd3NNdWx0aXNhbXBsaW5nT25BVElDYXJkcygpCit7CisgICAgcmV0dXJuIGZhbHNl
OyAvLyBub3QgYXBwbGljYWJsZQorfQorCit9CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0Nv
bnRleHQzRFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBo
aWNzQ29udGV4dDNEUXQuY3BwCmluZGV4IDcwZDNmMjRhZmE1NTQyYTY4YTEyNDFkMzgxYzNjZTkz
NDg3ODE4ODUuLjA2NzY5MjFjMTFmODBmZGM1ZmE4NDgzOWFkZmZmNTNiMTMwYWZhYmEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4
dDNEUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBo
aWNzQ29udGV4dDNEUXQuY3BwCkBAIC05OCw2ICs5OCwxMyBAQCBib29sIEdyYXBoaWNzQ29udGV4
dDNEOjppc0dMRVMyQ29tcGxpYW50KCkgY29uc3QKICNlbmRpZgogfQogCisjaWYgIVVTRShPUEVO
R0xfRVNfMikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcigp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKyNlbmRpZgorCiBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCwgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKICAgICA6IG1fY29udGV4dChjb250ZXh0KQog
ICAgICwgbV9ob3N0V2luZG93KGhvc3RXaW5kb3cpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150965</attachid>
            <date>2012-07-05 11:21:00 -0700</date>
            <delta_ts>2012-07-05 11:39:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90567-20120705142037.patch</filename>
            <type>text/plain</type>
            <size>65565</size>
            <attacher name="Joshua Netterfield">jnetterfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxODY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODFjZDc4MDliMjVmNjhk
YjA3MTcxZmU3N2UyMmI0ZjhkMjVkNTU2NC4uZjVjYTliYzYwOWJhOTgxOTIyNjk0OTM2ODVmZTk2
MTQ3NzE3NjM1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk0IEBACisyMDEyLTA3LTA0ICBKb3No
dWEgTmV0dGVyZmllbGQgIDxqbmV0dGVyZmllbGRAcmltLmNvbT4KKyAgICAgICAgTWFrZSBHQzNE
IGFuZCBFM0QgbW9yZSBtYWludGFpbmFibGUgZm9yIEdMRVMgcGxhdGZvcm1zCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDU2NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY2xlYW5zIHVw
IGNvZGUgZm9yIFdlYkdMIG9uIE9wZW5HTEVTIHBsYXRmb3JtcyB3aGljaCB1c2UgCisgICAgICAg
IEdyYXBoaWNzQ29udGV4dDNET3BlbkdMKiBhbmQgRXh0ZW5zaW9uczNET3BlbkdMKi4gQWx0aG91
Z2gKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wgd2FzIGFscmVhZHkgc3BsaXQgaW50
byBHcmFwaGljc0NvbnRleHQzRE9wZW5HTCwKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0RPcGVu
R0xDb21tb24sIGFuZCAgR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUywgdGhpcyBwYXRjaAorICAg
ICAgICBpcyBhbiBhdHRlbXB0IHRvIHJlZmFjdG9yIHRoaXMgY29kZSBpbiBhIHdheSB0aGF0IHdp
bGwgaGVscCBCbGFja0JlcnJ5IGFuZAorICAgICAgICBvdGhlciB0ZWFtcyBzdXBwb3J0IFdlYkdM
IG9uIG1vYmlsZSBwbGF0Zm9ybXMgd2l0aCBhcyBsaXR0bGUgdXNlIG9mCisgICAgICAgIOKAnCNJ
RiBVU0UoT1BFTkdMX0VTXzIp4oCdIGluIGNvbW1vbiBjb2RlIGFzIHBvc3NpYmxlLiBBbHNvIGlu
Y2x1ZGVkIGlzIHRoZQorICAgICAgICBzZXBhcmF0aW9uIG9mIEV4dGVuc2lvbnMzRE9wZW5HTCBp
bnRvIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbiwKKyAgICAgICAgRXh0ZW5zaW9uczNET3BlbkdM
LCBhbmQgRXh0ZW5zaW9uczNET3BlbkdMRVMgYXMgd2VsbCBhcyB0aGUgaW50cm9kdWN0aW9uCisg
ICAgICAgIG9mIE9wZW5HTEVTU2hpbXMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBjcmVhdGVk
IGluIGxhcmdlIHBhcnQgYnkgSm9uYXRoYW4gRmVsZHN0ZWluLgorCisgICAgICAgIE5vIG5ldyB0
ZXN0czogbm8gbmV3IGJlaGF2aW91ci4KKworICAgICAgICAqIFBsYXRmb3JtQmxhY2tCZXJyeS5j
bWFrZTogUmVjb2duaXplIEJsYWNrQmVycnkgYXMgT1BFTkdMIEVTLCBhZGQgbmV3IGZpbGVzIHRv
IGJ1aWxkCisgICAgICAgICogVGFyZ2V0LnByaTogQWRkIG5ldyBFeHRlbnNpb25zM0RPcGVuR0wq
IHRvIFdlYkdMIGJ1aWxkcworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dDNELmg6IEFkZCB2YWxpZGF0ZURlcHRoU3RlbmNpbCwgbWFrZSBzeXN0ZW1BbGxvd3NNdWx0
aXNhbXBsaW5nT25BVElDYXJkcyBhIGEgbWVtYmVyIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvT3BlbkdMRVNTaGltcy5oOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNw
cDogTW92ZSBjb2RlIHRvIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbiB3aGVyZSBwb3NzaWJsZQor
ICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpFeHRlbnNpb25zM0RPcGVuR0wp
OiBSZWZsZWN0IHRoYXQgaXQgaXMgbm93IGluaGVyaXRzIEV4dGVuc2lvbnMzRENvbW1vbgorICAg
ICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpzdXBwb3J0c0V4dGVuc2lvbik6IENv
bnRhaW5zIE9wZW5HTCBzcGVjaWZpYyBjb2RlIGZyb20gc3VwcG9ydHMKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpnZXRFeHRlbnNpb25z
KTogUmV0dXJucyBhIGxpc3Qgb2YgZXh0ZW5zaW9ucworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaDogUmVtb3ZlIGZ1bmN0aW9ucyBub3cgaW4g
RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEV4
dGVuc2lvbnMzRE9wZW5HTCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4
dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0xDb21tb246OkV4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbik6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0xDb21tb246
On5FeHRlbnNpb25zM0RPcGVuR0xDb21tb24pOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9u
czNET3BlbkdMQ29tbW9uOjpzdXBwb3J0cyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25z
M0RPcGVuR0xDb21tb246OmVuc3VyZUVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uOjppc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uOjpnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKToKKyAgICAgICAg
KFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6Z2V0VHJhbnNsYXRlZFNoYWRlclNv
dXJjZUFOR0xFKTogRXhpc3RlZCBiZWZvcmUsIGJ1dCBkaWQgbm90aGluZy4gTm93IGRvZXMgd2hh
dCBpcyBzYXlzIGl0IGRvZXMuCisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0xD
b21tb246OmluaXRpYWxpemVBdmFpbGFibGVFeHRlbnNpb25zKTogTW92ZWQgZnJvbSBFeHRlbnNp
b25zM0RPcGVuR0w6OnN1cHBvcnRzCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmguCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5H
TEVTOjpFeHRlbnNpb25zM0RPcGVuR0xFUyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25z
M0RPcGVuR0xFUzo6fkV4dGVuc2lvbnMzRE9wZW5HTEVTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4
dGVuc2lvbnMzRE9wZW5HTEVTOjpmcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HKToK
KyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTEVTOjpyZW5kZXJidWZmZXJTdG9y
YWdlTXVsdGlzYW1wbGVJTUcpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdM
RVM6OmNyZWF0ZVZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMz
RE9wZW5HTEVTOjpkZWxldGVWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRl
bnNpb25zM0RPcGVuR0xFUzo6aXNWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbnNpb25zM0RPcGVuR0xFUzo6YmluZFZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNv
cmU6OkV4dGVuc2lvbnMzRE9wZW5HTEVTOjpzdXBwb3J0c0V4dGVuc2lvbik6IENvbnRhaW5zIE9w
ZW5HTEVTIHNwZWNpZmljIGNvZGUgZnJvbSBzdXBwb3J0cworICAgICAgICAoV2ViQ29yZTo6RXh0
ZW5zaW9uczNET3BlbkdMRVM6OmdldEV4dGVuc2lvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmguCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEV4dGVuc2lvbnMzRE9wZW5HTEVTKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRl
cyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpzeXN0ZW1BbGxvd3NNdWx0aXNhbXBsaW5nT25BVElDYXJkcyk6IE5vdyBhIG1lbWJlciBmdW5j
dGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25z
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RP
cGVuR0xDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZh
bGlkYXRlRGVwdGhTdGVuY2lsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmxpbmVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bGlu
a1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBpeGVsU3Rv
cmVpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwb2x5Z29uT2Zmc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVCdWZmZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29t
cGlsZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHNB
bmRDb252ZXJ0VG9CR1JBSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzeXN0ZW1BbGxvd3NNdWx0aXNhbXBsaW5nT25B
VElDYXJkcyk6IE5vdyBhIG1lbWJlciBmdW5jdGlvbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcik6
CisKIDIwMTItMDctMDQgIEpvaG4gTWVsbG9yICA8am9obm1lQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBUZXh0IEF1dG9zaXppbmc6IEFkZCBiYXNpYyBmcmFtZXdvcmsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCmluZGV4IGRlN2JjYzY0ZjM5ZWJkYTM2Yjc3NDY5MzIxYjlhMGRjODkwZWJm
ODguLmM5ZTgzOTQ0N2FlNTNjMmNlMGNjZDJiNzI5MmE0Y2I2MjY5MGRhZGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNjA1NCw2ICs2MDU0LDcgQEAgd2ViY29yZV9zb3VyY2Vz
ICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9PcGVuR0xTaGltcy5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL09wZW5HTFNoaW1zLmggXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wu
Y3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9u
czNET3BlbkdMQ29tbW9uLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21t
b24uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21h
a2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UKaW5kZXggNTE2OWE1
ZGQ1OTczYzdiMGUyODhkYTIxMjMxOTQ3MTg2NTMwZWE4MS4uNTg3ZWRlM2QwNjkwODAzNzNiZWQy
YTMxMjI1MmE1NTc5MjFkY2ZjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1C
bGFja0JlcnJ5LmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQmxhY2tCZXJyeS5j
bWFrZQpAQCAtMjE4LDYgKzIxOCw3IEBAIGlmIChFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJB
TUUpCiBFTkRJRiAoKQogCiBpZiAoRU5BQkxFX1dFQkdMKQorICAgIEFERF9ERUZJTklUSU9OUyAo
LURXVEZfVVNFX09QRU5HTF9FU18yPTEpCiAgICAgTElTVChBUFBFTkQgV2ViQ29yZV9JTkNMVURF
X0RJUkVDVE9SSUVTCiAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUiCiAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wiCkBA
IC0yMjUsNiArMjI2LDExIEBAIGlmIChFTkFCTEVfV0VCR0wpCiAgICAgTElTVChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRHJhd2lu
Z0J1ZmZlckJsYWNrQmVycnkuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvR3JhcGhpY3NDb250ZXh0M0RCbGFja0JlcnJ5LmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCisgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAorICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNw
cAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMu
Y3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQz
RC5jcHAKICAgICApCiBFTkRJRiAoKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJn
ZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCA2NjVmMDNkMTFjNTkwMThj
NzViOWZhNjE0OWU3MjlkZTQ5ZjJiMjlkLi40Y2U2Y2Y2NmUyOWU5OGNlY2U4NWVjYjA0YjVkYTAw
YzkyMzZhODk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTM5NTUsMTUgKzM5NTUsMTkgQEAgY29udGFpbnMo
REVGSU5FUywgRU5BQkxFX1dFQkdMPTEpIHsKIAogICAgIGNvbnRhaW5zKFFUX0NPTkZJRywgb3Bl
bmdsKSB8IGNvbnRhaW5zKFFUX0NPTkZJRywgb3BlbmdsZXMyKSB7CiAgICAgICAgICFjb250YWlu
cyhRVF9DT05GSUcsIG9wZW5nbGVzMikgewotICAgICAgICAgICAgU09VUkNFUyArPSBwbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCisgICAgICAgICAg
ICBTT1VSQ0VTICs9IFwKKyAgICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAgXAorICAgICAgICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAKICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dDNET3BlbkdMRVMuY3BwCisgICAgICAgICAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNw
cCBcCisgICAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNE
T3BlbkdMRVMuY3BwCiAgICAgICAgIH0KIAogICAgICAgICBIRUFERVJTICs9IHBsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaAogCiAgICAgICAgIFNPVVJDRVMgKz0g
XAotICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5H
TC5jcHAgXAorICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMz
RE9wZW5HTENvbW1vbi5jcHAgXAogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAogCiAgICAgICAgIEFOR0xFX0RJUiA9
ICQkcmVwbGFjZShQV0QsICJXZWJDb3JlIiwgIlRoaXJkUGFydHkvQU5HTEUiKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCmluZGV4IGNiMTAxMmU3NzY4NWNkOTA4OTY5MjI0YmFhYWYwMTEwNGQxOWQ2OWMuLmYxN2Ew
NDAwOTFmMjlkMzE3MzQ4NWVjNzYyNmE4MWNiNjhkN2VjY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAg
LTM4MDcsNiArMzgwNyw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dl
YlRpbGVkTGF5ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYlRp
bGVkTGF5ZXIubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRl
bnNpb25zM0RPcGVuR0wuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xD
b21tb24uY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCAzYjgzM2VmYTE3NDdmNThlN2E3ODIxM2U2N2M5YTE1ZTNhYjliYzlh
Li5kMWU2NjdlM2I2ZjRhODhlODk3ZDMwZTQyNDA5NGM4ZmJjODQ3M2U5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTc5LDYg
KzExNzksOCBAQAogCQk0NDMxMUNEODEyRTRFMjRCMDAwQThEMTkgLyogRE9NRG9jdW1lbnRQcml2
YXRlLmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0NDMxMUNENTEyRTRFMjJEMDAwQThEMTkgLyogRE9NRG9jdW1lbnRQcml2YXRl
LmggKi87IH07CiAJCTQ0MzExQ0Q5MTJFNEUyNTcwMDBBOEQxOSAvKiBET01Eb2N1bWVudEZyYWdt
ZW50UHJpdmF0ZS5oIGluIENvcHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDQzMTFDRDQxMkU0RTIyRDAwMEE4RDE5IC8qIERPTURvY3VtZW50
RnJhZ21lbnRQcml2YXRlLmggKi87IH07CiAJCTQ0MzExRjgyMTJFNEU2NkMwMDBBOEQxOSAvKiBE
T01Eb2N1bWVudEZyYWdtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg1RTcxMTQ1MEFDNUQ1MzQwMDUzMjcwRiAvKiBET01Eb2N1bWVu
dEZyYWdtZW50SW50ZXJuYWwuaCAqLzsgfTsKKyAgICAgICAgICAgICAgICA0NDUwQkMzNDE1QTVF
OUNBMDBERDE2MjIgLyogRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDUwQkMzNDE1QTVFOUNBMDBERDE2MjI7
IC8qIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oICovOyB9OworICAgICAgICAgICAgICAgIDQ0
NTBCQzM0MTVBNUU5Q0EwMEREMTYyMiAvKiBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQ1MEJDMzQxNUE1
RTlDQTAwREQxNjIyOyAvKiBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwICovOyB9OwogCQk0
NDhBMjlCRjBBNDZEOUNCMDAzMDc1OUYgLyogSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0OEEyOUJEMEE0NkQ5
Q0IwMDMwNzU5RiAvKiBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbi5oICovOyB9OwogCQk0NDhBMjlD
MDBBNDZEOUNCMDAzMDc1OUYgLyogSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb24uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQ4QTI5QkUwQTQ2RDlDQjAw
MzA3NTlGIC8qIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmNwcCAqLzsgfTsKIAkJNDQ4QUQyN0Mw
QTQ4MTM3QTAwMjNEMTc5IC8qIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0OEFEMjdBMEE0ODEz
NzkwMDIzRDE3OSAvKiBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbkN1c3RvbS5jcHAgKi87IH07CkBA
IC04MjMxLDYgKzgyMzMsOCBAQAogCQk0NDI5QUIwNzBDQjg0RjgxMDA3NjQ3QzUgLyogRE9NVGV4
dEV2ZW50SW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVRl
eHRFdmVudEludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0MzExQ0Q0
MTJFNEUyMkQwMDBBOEQxOSAvKiBET01Eb2N1bWVudEZyYWdtZW50UHJpdmF0ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01Eb2N1bWVudEZyYWdtZW50UHJpdmF0ZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NDMxMUNENTEyRTRFMjJEMDAwQThEMTkgLyog
RE9NRG9jdW1lbnRQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERP
TURvY3VtZW50UHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NDUwQkMz
NDE1QTVFOUNBMDBERDE2MjIgLyogRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ0NTBCQzM1MTVBNUU5Q0EwMEREMTYy
MiAvKiBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTQ0OEEyOUJEMEE0NkQ5Q0IwMDMwNzU5RiAvKiBKU0hUTUxPcHRpb25zQ29sbGVj
dGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNIVE1MT3B0aW9uc0Nv
bGxlY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQ4QTI5QkUwQTQ2RDlD
QjAwMzA3NTlGIC8qIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0OEFEMjdBMEE0ODEzNzkwMDIzRDE3OSAvKiBKU0hU
TUxPcHRpb25zQ29sbGVjdGlvbkN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbkN1c3RvbS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yMTY0MSw2ICsyMTY0NSw4IEBACiAJCUZCQzIyMEREMTIzN0ZC
RUIwMEJDRjc4OCAvKiBvcGVuZ2wgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKAorCQkJCTQ0NTBCQzM0MTVBNUU5Q0EwMEREMTYyMiAvKiBFeHRlbnNpb25zM0RPcGVu
R0xDb21tb24uY3BwICovLAorCQkJCTQ0NTBCQzM1MTVBNUU5Q0EwMEREMTYyMiAvKiBFeHRlbnNp
b25zM0RPcGVuR0xDb21tb24uaCAqLywKIAkJCQk2RTY3RDJBNDEyODBFOEE0MDA4NzU4RjcgLyog
RXh0ZW5zaW9uczNET3BlbkdMLmNwcCAqLywKIAkJCQk2RTY3RDJBNTEyODBFOEE0MDA4NzU4Rjcg
LyogRXh0ZW5zaW9uczNET3BlbkdMLmggKi8sCiAJCQkJRkJDMjIwREUxMjM3RkJFQjAwQkNGNzg4
IC8qIEdyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcCAqLywKQEAgLTIzMDIzLDYgKzIzMDI5LDcg
QEAKIAkJCQk5NzY3Q0UwQzE0NUFCQzEzMDA1RTY0REIgLyogRXhjZXB0aW9uSW50ZXJmYWNlcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNkU2N0QyQTkxMjgwRThCRDAwODc1OEY3IC8qIEV4dGVuc2lv
bnMzRC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkU2N0QyQTcxMjgwRThBNDAwODc1OEY3IC8qIEV4
dGVuc2lvbnMzRE9wZW5HTC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDQ1MEJDMzQxNUE1RTlDQTAw
REQxNjIyIC8qIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NzcyODY5NEYxNEY4ODgyNTAwRjQ4NERDIC8qIEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTc1RThCODkwRTFERTJENjAwN0YyNDgxIC8qIEZFQmxlbmQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3NUU4QjhCMEUxREUyRDYwMDdGMjQ4MSAvKiBGRUNvbG9y
TWF0cml4LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCmluZGV4IGRiZDlkZmVkZTAxM2E0Y2FmMzMy
NDYzYWQzMmZjNGUxNTI4MjY0NjcuLjE2ZDEyZjE2M2JkNWQxZTA5ZjMxMTUyZWRkYTFiMmI2NWUy
MmVhNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dDNELmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0M0QuaApAQCAtMjAsNyArMjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwog
CiAjaWZuZGVmIEdyYXBoaWNzQ29udGV4dDNEX2gKQEAgLTkxLDE0ICs5MSwxMiBAQCBjb25zdCBQ
bGF0Zm9ybTNET2JqZWN0IE51bGxQbGF0Zm9ybTNET2JqZWN0ID0gMDsKICNpbmNsdWRlIDxDb3Jl
R3JhcGhpY3MvQ0dDb250ZXh0Lmg+CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkp
Ci0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewog
Y2xhc3MgRHJhd2luZ0J1ZmZlcjsKIGNsYXNzIEV4dGVuc2lvbnMzRDsKLSNpZiBQTEFURk9STShN
QUMpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkKKyNp
ZiBVU0UoT1BFTkdMX0VTXzIpCitjbGFzcyBFeHRlbnNpb25zM0RPcGVuR0xFUzsKKyNlbHNlCiBj
bGFzcyBFeHRlbnNpb25zM0RPcGVuR0w7CiAjZW5kaWYKICNpZiBQTEFURk9STShRVCkKQEAgLTky
NCw2ICs5MjIsNyBAQCBwdWJsaWM6CiAgICAgLy8gaW4gcGFydGljdWxhciBzdGVuY2lsIGFuZCBh
bnRpYWxpYXMsIGFuZCBkZXRlcm1pbmUgd2hpY2ggY291bGQgb3IKICAgICAvLyBjb3VsZCBub3Qg
YmUgaG9ub3JlZCBiYXNlZCBvbiB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBPcGVuR0wKICAgICAv
LyBpbXBsZW1lbnRhdGlvbi4KKyAgICB2b2lkIHZhbGlkYXRlRGVwdGhTdGVuY2lsKGNvbnN0IGNo
YXIqIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbik7CiAgICAgdm9pZCB2YWxpZGF0ZUF0dHJp
YnV0ZXMoKTsKIAogICAgIC8vIFJlYWQgcmVuZGVyaW5nIHJlc3VsdHMgaW50byBhIHBpeGVsIGFy
cmF5IHdpdGggdGhlIHNhbWUgZm9ybWF0IGFzIHRoZQpAQCAtOTU1LDE2ICs5NTQsMzAgQEAgcHVi
bGljOgogICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+IG1f
c2hhZGVyU291cmNlTWFwOwogCiAgICAgQU5HTEVXZWJLaXRCcmlkZ2UgbV9jb21waWxlcjsKKyNl
bmRpZgogCisjaWYgUExBVEZPUk0oUVQpICYmIGRlZmluZWQoUVRfT1BFTkdMX0VTXzIpCisgICAg
ZnJpZW5kIGNsYXNzIEV4dGVuc2lvbnMzRFF0OworICAgIE93blB0cjxFeHRlbnNpb25zM0RRdD4g
bV9leHRlbnNpb25zOworI2VsaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKKyAgICBmcmllbmQgY2xh
c3MgRXh0ZW5zaW9uczNET3BlbkdMRVM7CisgICAgT3duUHRyPEV4dGVuc2lvbnMzRE9wZW5HTEVT
PiBtX2V4dGVuc2lvbnM7CisjZWxpZiAhUExBVEZPUk0oQ0hST01JVU0pCiAgICAgZnJpZW5kIGNs
YXNzIEV4dGVuc2lvbnMzRE9wZW5HTDsKICAgICBPd25QdHI8RXh0ZW5zaW9uczNET3BlbkdMPiBt
X2V4dGVuc2lvbnM7CisjZW5kaWYKKyAgICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9uczNET3BlbkdM
Q29tbW9uOwogCiAgICAgQXR0cmlidXRlcyBtX2F0dHJzOwogICAgIFZlY3RvcjxWZWN0b3I8Zmxv
YXQ+ID4gbV92ZXJ0ZXhBcnJheTsKIAotICAgIEdDM0R1aW50IG1fdGV4dHVyZSwgbV9jb21wb3Np
dG9yVGV4dHVyZTsKKyAgICBHQzNEdWludCBtX3RleHR1cmU7CisjaWYgIVBMQVRGT1JNKEJMQUNL
QkVSUlkpCisgICAgR0MzRHVpbnQgbV9jb21wb3NpdG9yVGV4dHVyZTsKKyNlbmRpZgogICAgIEdD
M0R1aW50IG1fZmJvOwotI2lmIFVTRShPUEVOR0xfRVNfMikKKworI2lmICFQTEFURk9STShCTEFD
S0JFUlJZKQogICAgIEdDM0R1aW50IG1fZGVwdGhCdWZmZXI7CiAgICAgR0MzRHVpbnQgbV9zdGVu
Y2lsQnVmZmVyOwogI2VuZGlmCkBAIC05ODUsMTAgKzk5OCwxMSBAQCBwdWJsaWM6CiAKICAgICAv
LyBFcnJvcnMgcmFpc2VkIGJ5IHN5bnRoZXNpemVHTEVycm9yKCkuCiAgICAgTGlzdEhhc2hTZXQ8
R0MzRGVudW0+IG1fc3ludGhldGljRXJyb3JzOwotI2VuZGlmCiAKICAgICBmcmllbmQgY2xhc3Mg
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOwogICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQzRFBy
aXZhdGU+IG1fcHJpdmF0ZTsKKworICAgIGJvb2wgc3lzdGVtQWxsb3dzTXVsdGlzYW1wbGluZ09u
QVRJQ2FyZHMoKTsgCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9PcGVuR0xFU1NoaW1zLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9PcGVuR0xFU1NoaW1zLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWRi
OTE5MzNmODViYzA2MWNjOWM4NTI1NGRjMzRmMDljMjkzYTgwOQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL09wZW5HTEVTU2hpbXMuaApAQCAtMCww
ICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBM
aW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5k
ZWYgT3BlbkdMRVNTaGltc19oCisjZGVmaW5lIE9wZW5HTEVTU2hpbXNfaAorCisjaWYgUExBVEZP
Uk0oQkxBQ0tCRVJSWSkKKyNkZWZpbmUgZ2xCaW5kRnJhbWVidWZmZXJFWFQgZ2xCaW5kRnJhbWVi
dWZmZXIKKyNkZWZpbmUgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVCBnbEZyYW1lYnVmZmVyVGV4
dHVyZTJECisjZGVmaW5lIGdsQmluZFJlbmRlcmJ1ZmZlckVYVCBnbEJpbmRSZW5kZXJidWZmZXIK
KyNkZWZpbmUgZ2xSZW5kZXJidWZmZXJTdG9yYWdlRVhUIGdsUmVuZGVyYnVmZmVyU3RvcmFnZQor
I2RlZmluZSBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUIGdsRnJhbWVidWZmZXJSZW5kZXJi
dWZmZXIKKyNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX0VYVCBHTF9SRU5ERVJCVUZGRVIKKyNkZWZp
bmUgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UX0VYVCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQKKyNkZWZp
bmUgZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1cwor
I2RlZmluZSBnbERlbGV0ZUZyYW1lYnVmZmVyc0VYVCBnbERlbGV0ZUZyYW1lYnVmZmVycworI2Rl
ZmluZSBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQgZ2xEZWxldGVSZW5kZXJidWZmZXJzCisjZGVm
aW5lIGdsR2VuUmVuZGVyYnVmZmVyc0VYVCBnbEdlblJlbmRlcmJ1ZmZlcnMKKyNkZWZpbmUgZ2xH
ZW5GcmFtZWJ1ZmZlcnNFWFQgZ2xHZW5GcmFtZWJ1ZmZlcnMKKyNkZWZpbmUgZ2xHZXRGcmFtZWJ1
ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdkVYVCBnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBh
cmFtZXRlcml2CisjZGVmaW5lIGdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXZFWFQgZ2xHZXRS
ZW5kZXJidWZmZXJQYXJhbWV0ZXJpdgorI2RlZmluZSBnbElzUmVuZGVyYnVmZmVyRVhUIGdsSXNS
ZW5kZXJidWZmZXIKKyNkZWZpbmUgZ2xJc0ZyYW1lYnVmZmVyRVhUIGdsSXNGcmFtZWJ1ZmZlcgor
I2RlZmluZSBnbEdlbmVyYXRlTWlwbWFwRVhUIGdsR2VuZXJhdGVNaXBtYXAKKyNkZWZpbmUgR0xf
Q09MT1JfQVRUQUNITUVOVDBfRVhUIEdMX0NPTE9SX0FUVEFDSE1FTlQwCisjZGVmaW5lIEdMX0RF
UFRIX0FUVEFDSE1FTlRfRVhUIEdMX0RFUFRIX0FUVEFDSE1FTlQKKyNkZWZpbmUgR0xfRlJBTUVC
VUZGRVJfQ09NUExFVEVfRVhUIEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFCisjZGVmaW5lIEdMX0ZS
QU1FQlVGRkVSX0VYVCBHTF9GUkFNRUJVRkZFUgorI2RlZmluZSBHTF9ERVBUSDI0X1NURU5DSUw4
X0VYVCBHTF9ERVBUSDI0X1NURU5DSUw4X09FUworI2RlZmluZSBHTF9SR0JBOCBHTF9SR0JBOF9P
RVMKKyNkZWZpbmUgR0xfUkdCOCBHTF9SR0I4X09FUworI2RlZmluZSBHTF9SRUFEX0ZSQU1FQlVG
RkVSX0VYVCAweDhDQTgKKyNkZWZpbmUgR0xfRFJBV19GUkFNRUJVRkZFUl9FWFQgMHg4Q0E5Cisj
ZGVmaW5lIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTVVMVElTQU1QTEVfRVhUIDB4OTEzNAorI2Rl
ZmluZSBHTF9NQVhfU0FNUExFU19FWFQgMHg4RDU3CisjZW5kaWYgLy8gUExBVEZPUk0oQkxBQ0tC
RVJSWSkKKworI2VuZGlmIC8vIE9wZW5HTEVTU2hpbXNfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4
dDNEQ2Fpcm8uY3BwCmluZGV4IGFjMjkyZDM3NTE1NzkyZWNhMzIyOWU2ZjY3Mzg4ZWIyOGU1MWUw
OTYuLmZkMWRhZDA5ZjAxMWI3NmM5ZTU5ZTQ4NTM5YWM5YzAzZGFhZGIzNmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNE
Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiRXh0
ZW5zaW9uczNET3BlbkdMLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgi
CiAjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1
ZGUgIk9wZW5HTFNoaW1zLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKICNp
bmNsdWRlICJSZWZQdHJDYWlyby5oIgpAQCAtMTQ2LDYgKzE0NywxMSBAQCBHcmFwaGljc0NvbnRl
eHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKICAgICA6OmdsRGVsZXRlRnJhbWVidWZmZXJzRVhU
KDEsICZtX2Zibyk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJD
b21waWxlcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwogYm9vbCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0SW1hZ2VEYXRhKEltYWdlKiBpbWFnZSwgdW5zaWduZWQgaW50IGZvcm1hdCwg
dW5zaWduZWQgaW50IHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1t
YUFuZENvbG9yUHJvZmlsZSwgVmVjdG9yPHVpbnQ4X3Q+JiBvdXRwdXRWZWN0b3IpCiB7CiAgICAg
aWYgKCFpbWFnZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NsdXR0ZXIvR3JhcGhpY3NDb250ZXh0M0RDbHV0dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NDb250ZXh0M0RDbHV0dGVyLmNwcAppbmRl
eCBjYTBmZmRjMmJjYjlkODkzODZiMTVkNDhjMzIzOGViM2VmOWIwOTU0Li43ZTIyZjcyMmQ0YmQz
NTNkMzMxYmRjNjA3NzVlN2Q3MWFhMDVlNTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzQ29udGV4dDNEQ2x1dHRlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0NvbnRl
eHQzRENsdXR0ZXIuY3BwCkBAIC01Niw2ICs1NiwxMSBAQCBHcmFwaGljc0NvbnRleHQzRDo6fkdy
YXBoaWNzQ29udGV4dDNEKCkKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFnZSog
aW1hZ2UsIHVuc2lnbmVkIGludCBmb3JtYXQsIHVuc2lnbmVkIGludCB0eXBlLCBib29sIHByZW11
bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsIFZlY3Rvcjx1aW50
OF90PiYgb3V0cHV0VmVjdG9yKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3Bl
bkdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNp
b25zM0RPcGVuR0wuY3BwCmluZGV4IDRhYTM0MWMzMjZjNzM1N2IxMTBjOTgzZDAzOWNjZDdiYzMz
MTY2MTIuLmJiZTc3YmI3OTg1NGM5MjM3ZThjYjY3MDZjOTc0NjU5OTU2MmI5MDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RP
cGVuR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9F
eHRlbnNpb25zM0RPcGVuR0wuY3BwCkBAIC00Miw3ICs0Miw4IEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIEV4dGVuc2lvbnMzRE9wZW5HTDo6RXh0ZW5zaW9uczNET3BlbkdMKEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0KQotICAgIDogbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnMo
ZmFsc2UpCisgICAgOiBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24oY29udGV4dCkKKyAgICAsIG1f
aW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zKGZhbHNlKQogICAgICwgbV9jb250ZXh0KGNv
bnRleHQpCiB7CiB9CkBAIC01MSw5MSArNTIsNiBAQCBFeHRlbnNpb25zM0RPcGVuR0w6On5FeHRl
bnNpb25zM0RPcGVuR0woKQogewogfQogCi1ib29sIEV4dGVuc2lvbnMzRE9wZW5HTDo6c3VwcG9y
dHMoY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIC8vIE5vdGUgb24gc3VwcG9ydCBmb3IgQkdS
QToKLSAgICAvLwotICAgIC8vIEZvciBPcGVuR0wgRVMyLjAsIHJlcXVpcmVzIGNoZWNraW5nIGZv
cgotICAgIC8vIEdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCBhbmQgR0xfRVhUX3JlYWRf
Zm9ybWF0X2JncmEuCi0gICAgLy8gRm9yIGRlc2t0b3AgR0wsIEJHUkEgaGFzIGJlZW4gc3VwcG9y
dGVkIHNpbmNlIE9wZW5HTCAxLjIuCi0gICAgLy8KLSAgICAvLyBIb3dldmVyLCBub3RlIHRoYXQg
dGhlIEdMIEVTMiBleHRlbnNpb24gcmVxdWlyZXMgdGhlCi0gICAgLy8gaW50ZXJuYWxGb3JtYXQg
dG8gZ2xUZXhJbWFnZTJEKCkgYmUgR0xfQkdSQSwgd2hpbGUgZGVza3RvcCBHTAotICAgIC8vIHdp
bGwgbm90IGFjY2VwdCBHTF9CR1JBIChtdXN0IGJlIEdMX1JHQkEpLCBzbyB0aGlzIG11c3QgYmUK
LSAgICAvLyBjaGVja2VkIG9uIGVhY2ggcGxhdGZvcm0uIERlc2t0b3AgR0wgb2ZmZXJzIG5laXRo
ZXIKLSAgICAvLyBHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODggb3IgR0xfRVhUX3JlYWRf
Zm9ybWF0X2JncmEsIHNvCi0gICAgLy8gdHJlYXQgdGhlbSBhcyB1bnN1cHBvcnRlZCBoZXJlLgot
ICAgIGlmICghbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnMpIHsKLSAgICAgICAgU3Ry
aW5nIGV4dGVuc2lvbnNTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdl
dFN0cmluZyhHTF9FWFRFTlNJT05TKSkpOwotICAgICAgICBWZWN0b3I8U3RyaW5nPiBhdmFpbGFi
bGVFeHRlbnNpb25zOwotICAgICAgICBleHRlbnNpb25zU3RyaW5nLnNwbGl0KCIgIiwgYXZhaWxh
YmxlRXh0ZW5zaW9ucyk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXZhaWxhYmxl
RXh0ZW5zaW9ucy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIG1fYXZhaWxhYmxlRXh0ZW5zaW9u
cy5hZGQoYXZhaWxhYmxlRXh0ZW5zaW9uc1tpXSk7Ci0gICAgICAgIG1faW5pdGlhbGl6ZWRBdmFp
bGFibGVFeHRlbnNpb25zID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgLy8gR0xfQU5HTEVfZnJh
bWVidWZmZXJfYmxpdCBhbmQgR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUgYXJlICJm
YWtlIi4gVGhleSBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgb3RoZXIKLSAgICAvLyBleHRlbnNpb25z
LiBJbiBwYXJ0aWN1bGFyIEdMX0VYVF9mcmFtZWJ1ZmZlcl9ibGl0IGFuZCBHTF9FWFRfZnJhbWVi
dWZmZXJfbXVsdGlzYW1wbGUKLSAgICBpZiAobmFtZSA9PSAiR0xfQU5HTEVfZnJhbWVidWZmZXJf
YmxpdCIpCi0gICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdM
X0VYVF9mcmFtZWJ1ZmZlcl9ibGl0Iik7Ci0gICAgaWYgKG5hbWUgPT0gIkdMX0FOR0xFX2ZyYW1l
YnVmZmVyX211bHRpc2FtcGxlIikKLSAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9u
cy5jb250YWlucygiR0xfRVhUX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIik7Ci0KLSAgICAvLyBE
ZXNrdG9wIEdMIGFsd2F5cyBzdXBwb3J0cyBHTF9PRVNfcmdiOF9yZ2JhOC4KLSAgICBpZiAobmFt
ZSA9PSAiR0xfT0VTX3JnYjhfcmdiYTgiKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8v
IElmIEdMX0FSQl90ZXh0dXJlX2Zsb2F0IGlzIGF2YWlsYWJsZSB0aGVuIHdlIHJlcG9ydCBHTF9P
RVNfdGV4dHVyZV9mbG9hdCBhbmQKLSAgICAvLyBHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IGFz
IGF2YWlsYWJsZS4KLSAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3RleHR1cmVfZmxvYXQiIHx8IG5h
bWUgPT0gIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQiKQotICAgICAgICByZXR1cm4gbV9hdmFp
bGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9BUkJfdGV4dHVyZV9mbG9hdCIpOwotICAgIAot
ICAgIC8vIEdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Ci0gICAgaWYgKG5hbWUgPT0gIkdMX09F
U192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikKLSAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5z
aW9ucy5jb250YWlucygiR0xfQVBQTEVfdmVydGV4X2FycmF5X29iamVjdCIpOwotCi0gICAgLy8g
RGVza3RvcCBHTCBhbHdheXMgc3VwcG9ydHMgdGhlIHN0YW5kYXJkIGRlcml2YXRpdmUgZnVuY3Rp
b25zCi0gICAgaWYgKG5hbWUgPT0gIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKG5hbWUgPT0gIkdMX0VYVF90ZXh0dXJlX2ZpbHRl
cl9hbmlzb3Ryb3BpYyIpCi0gICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29u
dGFpbnMoIkdMX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpOwotCi0gICAgcmV0dXJu
IG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucyhuYW1lKTsKLX0KLQotdm9pZCBFeHRlbnNp
b25zM0RPcGVuR0w6OmVuc3VyZUVuYWJsZWQoY29uc3QgU3RyaW5nJiBuYW1lKQotewotI2lmIFBM
QVRGT1JNKE1BQykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKLSAgICBpZiAobmFt
ZSA9PSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikgewotICAgICAgICAvLyBFbmFibGUg
c3VwcG9ydCBpbiBBTkdMRSAoaWYgbm90IGVuYWJsZWQgYWxyZWFkeSkKLSAgICAgICAgQU5HTEVX
ZWJLaXRCcmlkZ2UmIGNvbXBpbGVyID0gbV9jb250ZXh0LT5tX2NvbXBpbGVyOwotICAgICAgICBT
aEJ1aWx0SW5SZXNvdXJjZXMgQU5HTEVSZXNvdXJjZXMgPSBjb21waWxlci5nZXRSZXNvdXJjZXMo
KTsKLSAgICAgICAgaWYgKCFBTkdMRVJlc291cmNlcy5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMp
IHsKLSAgICAgICAgICAgIEFOR0xFUmVzb3VyY2VzLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA9
IDE7Ci0gICAgICAgICAgICBjb21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOwot
ICAgICAgICB9Ci0gICAgfQotI2Vsc2UKLSAgICBBU1NFUlRfVU5VU0VEKG5hbWUsIHN1cHBvcnRz
KG5hbWUpKTsKLSNlbmRpZgotfQotCi1ib29sIEV4dGVuc2lvbnMzRE9wZW5HTDo6aXNFbmFibGVk
KGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKFFU
KSB8fCBQTEFURk9STShHVEspCi0gICAgaWYgKG5hbWUgPT0gIkdMX09FU19zdGFuZGFyZF9kZXJp
dmF0aXZlcyIpIHsKLSAgICAgICAgQU5HTEVXZWJLaXRCcmlkZ2UmIGNvbXBpbGVyID0gbV9jb250
ZXh0LT5tX2NvbXBpbGVyOwotICAgICAgICByZXR1cm4gY29tcGlsZXIuZ2V0UmVzb3VyY2VzKCku
T0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzOwotICAgIH0KLSNlbmRpZgotICAgIHJldHVybiBzdXBw
b3J0cyhuYW1lKTsKLX0KLQotaW50IEV4dGVuc2lvbnMzRE9wZW5HTDo6Z2V0R3JhcGhpY3NSZXNl
dFN0YXR1c0FSQigpCi17Ci0gICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUjsK
LX0KIAogdm9pZCBFeHRlbnNpb25zM0RPcGVuR0w6OmJsaXRGcmFtZWJ1ZmZlcihsb25nIHNyY1gw
LCBsb25nIHNyY1kwLCBsb25nIHNyY1gxLCBsb25nIHNyY1kxLCBsb25nIGRzdFgwLCBsb25nIGRz
dFkwLCBsb25nIGRzdFgxLCBsb25nIGRzdFkxLCB1bnNpZ25lZCBsb25nIG1hc2ssIHVuc2lnbmVk
IGxvbmcgZmlsdGVyKQogewpAQCAtMTk0LDE5ICsxMTAsNDkgQEAgdm9pZCBFeHRlbnNpb25zM0RP
cGVuR0w6OmJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQogI2VuZGlm
CiB9CiAKLVN0cmluZyBFeHRlbnNpb25zM0RPcGVuR0w6OmdldFRyYW5zbGF0ZWRTaGFkZXJTb3Vy
Y2VBTkdMRShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICBVTlVTRURfUEFSQU0oc2hh
ZGVyKTsKLSAgICByZXR1cm4gIiI7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGlzIGZ1bmN0
aW9uIGFuZCBhZGQgR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlIGluIHN1cHBvcnRz
KCkuCi19Ci0KIHZvaWQgRXh0ZW5zaW9uczNET3BlbkdMOjpjb3B5VGV4dHVyZUNIUk9NSVVNKEdD
M0RlbnVtLCBQbGF0Zm9ybTNET2JqZWN0LCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEaW50LCBHQzNE
ZW51bSkKIHsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24gYW5kIGFkZCBH
TF9DSFJPTUlVTV9jb3B5X3RleHR1cmUgaW4gc3VwcG9ydHMoKS4KICAgICByZXR1cm47CiB9CiAK
K2Jvb2wgRXh0ZW5zaW9uczNET3BlbkdMOjpzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBTdHJpbmcm
IG5hbWUpCit7CisgICAgLy8gR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCBhbmQgR0xfQU5HTEVf
ZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUgYXJlICJmYWtlIi4gVGhleSBhcmUgaW1wbGVtZW50ZWQg
dXNpbmcgb3RoZXIKKyAgICAvLyBleHRlbnNpb25zLiBJbiBwYXJ0aWN1bGFyIEdMX0VYVF9mcmFt
ZWJ1ZmZlcl9ibGl0IGFuZCBHTF9FWFRfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUKKyAgICBpZiAo
bmFtZSA9PSAiR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCIpCisgICAgICAgIHJldHVybiBtX2F2
YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0VYVF9mcmFtZWJ1ZmZlcl9ibGl0Iik7Cisg
ICAgaWYgKG5hbWUgPT0gIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIikKKyAgICAg
ICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfRVhUX2ZyYW1lYnVm
ZmVyX211bHRpc2FtcGxlIik7CisKKyAgICAvLyBEZXNrdG9wIEdMIGFsd2F5cyBzdXBwb3J0cyBH
TF9PRVNfcmdiOF9yZ2JhOC4KKyAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3JnYjhfcmdiYTgiKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIElmIEdMX0FSQl90ZXh0dXJlX2Zsb2F0IGlz
IGF2YWlsYWJsZSB0aGVuIHdlIHJlcG9ydCBHTF9PRVNfdGV4dHVyZV9mbG9hdCBhbmQKKyAgICAv
LyBHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IGFzIGF2YWlsYWJsZS4KKyAgICBpZiAobmFtZSA9
PSAiR0xfT0VTX3RleHR1cmVfZmxvYXQiIHx8IG5hbWUgPT0gIkdMX09FU190ZXh0dXJlX2hhbGZf
ZmxvYXQiKQorICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJH
TF9BUkJfdGV4dHVyZV9mbG9hdCIpOworCisgICAgLy8gR0xfT0VTX3ZlcnRleF9hcnJheV9vYmpl
Y3QKKyAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKQorICAgICAg
ICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9BUFBMRV92ZXJ0ZXhf
YXJyYXlfb2JqZWN0Iik7CisKKyAgICAvLyBEZXNrdG9wIEdMIGFsd2F5cyBzdXBwb3J0cyB0aGUg
c3RhbmRhcmQgZGVyaXZhdGl2ZSBmdW5jdGlvbnMKKyAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3N0
YW5kYXJkX2Rlcml2YXRpdmVzIikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAobmFt
ZSA9PSAiR0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIikKKyAgICAgICAgcmV0dXJu
IG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfRVhUX3RleHR1cmVfZmlsdGVyX2Fu
aXNvdHJvcGljIik7CisKKyAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5z
KG5hbWUpOworfQorCitTdHJpbmcgRXh0ZW5zaW9uczNET3BlbkdMOjpnZXRFeHRlbnNpb25zKCkK
K3sKKyAgICByZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KDo6Z2xH
ZXRTdHJpbmcoR0xfRVhURU5TSU9OUykpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oCmluZGV4IDJi
MmQzMGEwOTBlNTRmY2ExZDA2NDYyYWU3MWRkN2VjODcyYjU0NGMuLmEyNzg5YmRjY2MwNWRlYTRk
NmRmOWIzYjRjNDc3N2Y3YjE5ZWExMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmgKQEAgLTI2
LDcgKzI2LDcgQEAKICNpZm5kZWYgRXh0ZW5zaW9uczNET3BlbkdMX2gKICNkZWZpbmUgRXh0ZW5z
aW9uczNET3BlbkdMX2gKIAotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorI2luY2x1ZGUgIkV4
dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oIgogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0Qu
aCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpAQCAtMzQsMTUgKzM0LDExIEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRXh0ZW5zaW9uczNET3BlbkdMIDogcHVibGljIEV4dGVu
c2lvbnMzRCB7CitjbGFzcyBFeHRlbnNpb25zM0RPcGVuR0wgOiBwdWJsaWMgRXh0ZW5zaW9uczNE
T3BlbkdMQ29tbW9uIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5FeHRlbnNpb25zM0RPcGVuR0wo
KTsKIAogICAgIC8vIEV4dGVuc2lvbnMzRCBtZXRob2RzLgotICAgIHZpcnR1YWwgYm9vbCBzdXBw
b3J0cyhjb25zdCBTdHJpbmcmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZW5zdXJlRW5hYmxlZChjb25z
dCBTdHJpbmcmKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNFbmFibGVkKGNvbnN0IFN0cmluZyYpOwot
ICAgIHZpcnR1YWwgaW50IGdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKTsKICAgICB2aXJ0dWFs
IHZvaWQgYmxpdEZyYW1lYnVmZmVyKGxvbmcgc3JjWDAsIGxvbmcgc3JjWTAsIGxvbmcgc3JjWDEs
IGxvbmcgc3JjWTEsIGxvbmcgZHN0WDAsIGxvbmcgZHN0WTAsIGxvbmcgZHN0WDEsIGxvbmcgZHN0
WTEsIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQgbG9uZyBmaWx0ZXIpOwogICAgIHZpcnR1
YWwgdm9pZCByZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcywgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwg
dW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpOwogICAgIApAQCAtNTAs
MTQgKzQ2LDE2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlVmVydGV4QXJyYXlP
RVMoUGxhdGZvcm0zRE9iamVjdCk7CiAgICAgdmlydHVhbCBHQzNEYm9vbGVhbiBpc1ZlcnRleEFy
cmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpOwogICAgIHZpcnR1YWwgdm9pZCBiaW5kVmVydGV4QXJy
YXlPRVMoUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgdmlydHVhbCBTdHJpbmcgZ2V0VHJhbnNsYXRl
ZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRmb3JtM0RPYmplY3QpOwogICAgIHZpcnR1YWwgdm9pZCBj
b3B5VGV4dHVyZUNIUk9NSVVNKEdDM0RlbnVtLCBQbGF0Zm9ybTNET2JqZWN0LCBQbGF0Zm9ybTNE
T2JqZWN0LCBHQzNEaW50LCBHQzNEZW51bSk7CiAKLXByaXZhdGU6Citwcm90ZWN0ZWQ6CiAgICAg
Ly8gVGhpcyBjbGFzcyBvbmx5IG5lZWRzIHRvIGJlIGluc3RhbnRpYXRlZCBieSBHcmFwaGljc0Nv
bnRleHQzRCBpbXBsZW1lbnRhdGlvbnMuCiAgICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4
dDNEOwogICAgIEV4dGVuc2lvbnMzRE9wZW5HTChHcmFwaGljc0NvbnRleHQzRCopOwogCisgICAg
dmlydHVhbCBib29sIHN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IFdURjo6U3RyaW5nJik7CisgICAg
dmlydHVhbCBTdHJpbmcgZ2V0RXh0ZW5zaW9ucygpOworCiAgICAgYm9vbCBtX2luaXRpYWxpemVk
QXZhaWxhYmxlRXh0ZW5zaW9uczsKICAgICBIYXNoU2V0PFN0cmluZz4gbV9hdmFpbGFibGVFeHRl
bnNpb25zOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi44ZTQ2OGQ1NGQ3ZGMzYWEyNDQ3Zjc1YTQ4MjllNDRhYmMwMzlmZjYxCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVu
c2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQkdMKQorI2luY2x1
ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oIgorCisjaW5jbHVkZSAiQU5HTEVXZWJLaXRC
cmlkZ2UuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorCisjaWYgUExBVEZPUk0o
QkxBQ0tCRVJSWSkKKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1Mb2cuaD4KKyNlbmRpZgor
CisjaWYgVVNFKE9QRU5HTF9FU18yKQorI2luY2x1ZGUgIk9wZW5HTEVTU2hpbXMuaCIKKyNpbmNs
dWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KKyNlbGlmIFBMQVRG
T1JNKE1BQykKKyNpbmNsdWRlIDxPcGVuR0wvZ2wuaD4KKyNlbGlmIFBMQVRGT1JNKEdUSykgfHwg
UExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShRVCkKKyNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgor
I2VuZGlmCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjpFeHRlbnNpb25zM0RPcGVuR0xDb21tb24oR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAgOiBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0
ZW5zaW9ucyhmYWxzZSkKKyAgICAsIG1fY29udGV4dChjb250ZXh0KQoreworfQorCitFeHRlbnNp
b25zM0RPcGVuR0xDb21tb246On5FeHRlbnNpb25zM0RPcGVuR0xDb21tb24oKQoreworfQorCiti
b29sIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6c3VwcG9ydHMoY29uc3QgU3RyaW5nJiBuYW1l
KQoreworICAgIGlmICghbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnMpCisgICAgICAg
IGluaXRpYWxpemVBdmFpbGFibGVFeHRlbnNpb25zKCk7CisKKyAgICByZXR1cm4gc3VwcG9ydHNF
eHRlbnNpb24obmFtZSk7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjplbnN1
cmVFbmFibGVkKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAobmFtZSA9PSAiR0xfT0VT
X3N0YW5kYXJkX2Rlcml2YXRpdmVzIikgeworICAgICAgICAvLyBFbmFibGUgc3VwcG9ydCBpbiBB
TkdMRSAoaWYgbm90IGVuYWJsZWQgYWxyZWFkeSkKKyAgICAgICAgQU5HTEVXZWJLaXRCcmlkZ2Um
IGNvbXBpbGVyID0gbV9jb250ZXh0LT5tX2NvbXBpbGVyOworICAgICAgICBTaEJ1aWx0SW5SZXNv
dXJjZXMgQU5HTEVSZXNvdXJjZXMgPSBjb21waWxlci5nZXRSZXNvdXJjZXMoKTsKKyAgICAgICAg
aWYgKCFBTkdMRVJlc291cmNlcy5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMpIHsKKyAgICAgICAg
ICAgIEFOR0xFUmVzb3VyY2VzLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA9IDE7CisgICAgICAg
ICAgICBjb21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOworICAgICAgICB9Cisg
ICAgfQorfQorCitib29sIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6aXNFbmFibGVkKGNvbnN0
IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2
YXRpdmVzIikgeworICAgICAgICBBTkdMRVdlYktpdEJyaWRnZSYgY29tcGlsZXIgPSBtX2NvbnRl
eHQtPm1fY29tcGlsZXI7CisgICAgICAgIHJldHVybiBjb21waWxlci5nZXRSZXNvdXJjZXMoKS5P
RVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXM7CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0cyhuYW1l
KTsKK30KKworaW50IEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6Z2V0R3JhcGhpY3NSZXNldFN0
YXR1c0FSQigpCit7CisgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUjsKK30K
KworU3RyaW5nIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6Z2V0VHJhbnNsYXRlZFNoYWRlclNv
dXJjZUFOR0xFKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChzaGFkZXIp
OworICAgIGludCBHTHNoYWRlclR5cGU7CisgICAgQU5HTEVTaGFkZXJUeXBlIHNoYWRlclR5cGU7
CisKKyAgICBBTkdMRVdlYktpdEJyaWRnZSYgY29tcGlsZXIgPSBtX2NvbnRleHQtPm1fY29tcGls
ZXI7CisKKyAgICBtX2NvbnRleHQtPmdldFNoYWRlcml2KHNoYWRlciwgR3JhcGhpY3NDb250ZXh0
M0Q6OlNIQURFUl9UWVBFLCAmR0xzaGFkZXJUeXBlKTsKKworICAgIGlmIChHTHNoYWRlclR5cGUg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIpCisgICAgICAgIHNoYWRlclR5cGUg
PSBTSEFERVJfVFlQRV9WRVJURVg7CisgICAgZWxzZSBpZiAoR0xzaGFkZXJUeXBlID09IEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVIpCisgICAgICAgIHNoYWRlclR5cGUgPSBTSEFE
RVJfVFlQRV9GUkFHTUVOVDsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiAiIjsgLy8gSW52YWxp
ZCBzaGFkZXIgdHlwZS4KKworICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlNoYWRlclNvdXJjZUVudHJ5Pjo6aXRlcmF0b3IgcmVzdWx0ID0gbV9jb250ZXh0
LT5tX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisKKyAgICBpZiAocmVzdWx0ID09IG1f
Y29udGV4dC0+bV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiAiIjsKKwor
ICAgIEdyYXBoaWNzQ29udGV4dDNEOjpTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQt
PnNlY29uZDsKKworICAgIFN0cmluZyB0cmFuc2xhdGVkU2hhZGVyU291cmNlOworICAgIFN0cmlu
ZyBzaGFkZXJJbmZvTG9nOworCisgICAgYm9vbCBpc1ZhbGlkID0gY29tcGlsZXIudmFsaWRhdGVT
aGFkZXJTb3VyY2UoZW50cnkuc291cmNlLnV0ZjgoKS5kYXRhKCksIHNoYWRlclR5cGUsIHRyYW5z
bGF0ZWRTaGFkZXJTb3VyY2UsIHNoYWRlckluZm9Mb2cpOworCisgICAgZW50cnkubG9nID0gc2hh
ZGVySW5mb0xvZzsKKyAgICBlbnRyeS5pc1ZhbGlkID0gaXNWYWxpZDsKKworICAgIGlmICghaXNW
YWxpZCkKKyAgICAgICAgcmV0dXJuICIiOworCisgICAgcmV0dXJuIHRyYW5zbGF0ZWRTaGFkZXJT
b3VyY2U7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjppbml0aWFsaXplQXZh
aWxhYmxlRXh0ZW5zaW9ucygpCit7CisgICAgU3RyaW5nIGV4dGVuc2lvbnNTdHJpbmcgPSBnZXRF
eHRlbnNpb25zKCk7CisgICAgVmVjdG9yPFN0cmluZz4gYXZhaWxhYmxlRXh0ZW5zaW9uczsKKyAg
ICBleHRlbnNpb25zU3RyaW5nLnNwbGl0KCIgIiwgYXZhaWxhYmxlRXh0ZW5zaW9ucyk7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBhdmFpbGFibGVFeHRlbnNpb25zLnNpemUoKTsgKytpKQor
ICAgICAgICBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuYWRkKGF2YWlsYWJsZUV4dGVuc2lvbnNbaV0p
OworICAgIG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zID0gdHJ1ZTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4
dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkwMTgzOWU2ZTNlNGI5NWExZTU2
NmNkMTFmOGEyN2Q2OWJlYjM5ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmgKQEAgLTAs
MCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uX2gKKyNk
ZWZpbmUgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uX2gKKworI2luY2x1ZGUgIkV4dGVuc2lvbnMz
RC5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24gOiBwdWJsaWMgRXh0ZW5z
aW9uczNEIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5FeHRlbnNpb25zM0RPcGVuR0xDb21tb24o
KTsKKworICAgIC8vIEV4dGVuc2lvbnMzRCBtZXRob2RzLgorICAgIHZpcnR1YWwgYm9vbCBzdXBw
b3J0cyhjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5zdXJlRW5hYmxlZChjb25z
dCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNFbmFibGVkKGNvbnN0IFN0cmluZyYpOwor
ICAgIHZpcnR1YWwgaW50IGdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKTsKKworICAgIHZpcnR1
YWwgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVWZXJ0ZXhBcnJheU9FUygpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCkgPSAwOworICAg
IHZpcnR1YWwgR0MzRGJvb2xlYW4gaXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0
KSA9IDA7CisKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5H
TEUoUGxhdGZvcm0zRE9iamVjdCk7CisKK3Byb3RlY3RlZDoKKyAgICBFeHRlbnNpb25zM0RPcGVu
R0xDb21tb24oR3JhcGhpY3NDb250ZXh0M0QqKTsKKworICAgIHZpcnR1YWwgdm9pZCBpbml0aWFs
aXplQXZhaWxhYmxlRXh0ZW5zaW9ucygpOworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0V4dGVu
c2lvbihjb25zdCBTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0RXh0ZW5zaW9u
cygpID0gMDsKKworICAgIGJvb2wgbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnM7Cisg
ICAgSGFzaFNldDxTdHJpbmc+IG1fYXZhaWxhYmxlRXh0ZW5zaW9uczsKKworICAgIC8vIFdlYWsg
cG9pbnRlciBiYWNrIHRvIEdyYXBoaWNzQ29udGV4dDNECisgICAgR3JhcGhpY3NDb250ZXh0M0Qq
IG1fY29udGV4dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEV4
dGVuc2lvbnMzRE9wZW5HTENvbW1vbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi45YzY1MDcxNWVlZTIyM2E5ZDA3NzBjZGQyNjFkMTQxNTIxYzNmMmE3Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4
dGVuc2lvbnMzRE9wZW5HTEVTLmNwcApAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgRU5BQkxFKFdFQkdMKQorI2luY2x1ZGUg
IkV4dGVuc2lvbnMzRE9wZW5HTEVTLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5o
IgorI2luY2x1ZGUgPEVHTC9lZ2wuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitFeHRlbnNpb25zM0RPcGVuR0xFUzo6RXh0ZW5zaW9uczNET3Bl
bkdMRVMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAgOiBFeHRlbnNpb25zM0RPcGVu
R0xDb21tb24oY29udGV4dCkKKyAgICAsIG1fc3VwcG9ydHNPRVN2ZXJ0ZXhBcnJheU9iamVjdChm
YWxzZSkKKyAgICAsIG1fc3VwcG9ydHNJTUdNdWx0aXNhbXBsZWRSZW5kZXJUb1RleHR1cmUoZmFs
c2UpCisgICAgLCBtX2dsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRygwKQorICAg
ICwgbV9nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRygwKQorICAgICwgbV9nbEJp
bmRWZXJ0ZXhBcnJheU9FUygwKQorICAgICwgbV9nbERlbGV0ZVZlcnRleEFycmF5c09FUygwKQor
ICAgICwgbV9nbEdlblZlcnRleEFycmF5c09FUygwKQorICAgICwgbV9nbElzVmVydGV4QXJyYXlP
RVMoMCkKK3sKK30KKworRXh0ZW5zaW9uczNET3BlbkdMRVM6On5FeHRlbnNpb25zM0RPcGVuR0xF
UygpCit7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uczNET3BlbkdMRVM6OmZyYW1lYnVmZmVyVGV4dHVy
ZTJETXVsdGlzYW1wbGVJTUcodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0
YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIHVuc2lnbmVkIGludCB0ZXh0dXJlLCBp
bnQgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcykKK3sKKyAgICBpZiAobV9nbEZyYW1lYnVm
ZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcpCisgICAgICAgIG1fZ2xGcmFtZWJ1ZmZlclRleHR1
cmUyRE11bHRpc2FtcGxlSU1HKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJl
LCBsZXZlbCwgc2FtcGxlcyk7CisgICAgZWxzZQorICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNp
emVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKK30KKwordm9pZCBFeHRlbnNpb25zM0RP
cGVuR0xFUzo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HKHVuc2lnbmVkIGxvbmcg
dGFyZ2V0LCB1bnNpZ25lZCBsb25nIHNhbXBsZXMsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3Jt
YXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQoreworICAgIGlm
IChtX2dsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HKQorICAgICAgICBtX2dsUmVu
ZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgIGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5zeW50
aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cit9CisKK1BsYXRmb3JtM0RPYmpl
Y3QgRXh0ZW5zaW9uczNET3BlbkdMRVM6OmNyZWF0ZVZlcnRleEFycmF5T0VTKCkKK3sKKyAgICBt
X2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmIChtX2dsR2VuVmVydGV4QXJy
YXlzT0VTKSB7CisgICAgICAgIEdMdWludCBhcnJheSA9IDA7CisgICAgICAgIG1fZ2xHZW5WZXJ0
ZXhBcnJheXNPRVMoMSwgJmFycmF5KTsKKyAgICAgICAgcmV0dXJuIGFycmF5OworICAgIH0KKwor
ICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgIHJldHVybiAwOworfQorCit2b2lkIEV4dGVuc2lvbnMzRE9wZW5HTEVTOjpkZWxldGVWZXJ0
ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQoreworICAgIGlmICghYXJyYXkpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMpCisgICAgICAgIG1fZ2xEZWxldGVWZXJ0
ZXhBcnJheXNPRVMoMSwgJmFycmF5KTsKKyAgICBlbHNlCisgICAgICAgIG1fY29udGV4dC0+c3lu
dGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworfQorCitHQzNEYm9vbGVhbiBF
eHRlbnNpb25zM0RPcGVuR0xFUzo6aXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFy
cmF5KQoreworICAgIGlmICghYXJyYXkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAg
IG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKG1fZ2xJc1ZlcnRleEFy
cmF5T0VTKQorICAgICAgICByZXR1cm4gbV9nbElzVmVydGV4QXJyYXlPRVMoYXJyYXkpOworCisg
ICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEV4dGVuc2lvbnMzRE9wZW5HTEVTOjpiaW5kVmVy
dGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKK3sKKyAgICBpZiAoIWFycmF5KQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmIChtX2dsQmluZFZlcnRleEFycmF5T0VTKQorICAgICAgICBtX2dsQmluZFZlcnRleEFy
cmF5T0VTKGFycmF5KTsKKyAgICBlbHNlCisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdM
RXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworfQorCisKK2Jvb2wgRXh0ZW5zaW9uczNET3Bl
bkdMRVM6OnN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAo
bV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKG5hbWUpKSB7CisgICAgICAgIGlmIChuYW1l
ID09ICJHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdCIgJiYgIW1fc3VwcG9ydHNPRVN2ZXJ0ZXhB
cnJheU9iamVjdCkgeworICAgICAgICAgICAgbV9nbEJpbmRWZXJ0ZXhBcnJheU9FUyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8UEZOR0xCSU5EVkVSVEVYQVJSQVlPRVNQUk9DPihlZ2xHZXRQcm9jQWRkcmVz
cygiZ2xCaW5kVmVydGV4QXJyYXlPRVMiKSk7CisgICAgICAgICAgICBtX2dsR2VuVmVydGV4QXJy
YXlzT0VTID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTEdFTlZFUlRFWEFSUkFZU09FU1BST0M+KGVn
bEdldFByb2NBZGRyZXNzKCJnbEdlblZlcnRleEFycmF5c09FUyIpKTsKKyAgICAgICAgICAgIG1f
Z2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMgPSByZWludGVycHJldF9jYXN0PFBGTkdMREVMRVRFVkVS
VEVYQVJSQVlTT0VTUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsRGVsZXRlVmVydGV4QXJyYXlz
T0VTIikpOworICAgICAgICAgICAgbV9nbElzVmVydGV4QXJyYXlPRVMgPSByZWludGVycHJldF9j
YXN0PFBGTkdMSVNWRVJURVhBUlJBWU9FU1BST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbElzVmVy
dGV4QXJyYXlPRVMiKSk7CisgICAgICAgICAgICBtX3N1cHBvcnRzT0VTdmVydGV4QXJyYXlPYmpl
Y3QgPSB0cnVlOworICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gIkdMX0lNR19tdWx0aXNhbXBs
ZWRfcmVuZGVyX3RvX3RleHR1cmUiICYmICFtX3N1cHBvcnRzSU1HTXVsdGlzYW1wbGVkUmVuZGVy
VG9UZXh0dXJlKSB7CisgICAgICAgICAgICBtX2dsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNh
bXBsZUlNRyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xGUkFNRUJVRkZFUlRFWFRVUkUyRE1VTFRJ
U0FNUExFSU1HUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsRnJhbWVidWZmZXJUZXh0dXJlMkRN
dWx0aXNhbXBsZUlNRyIpKTsKKyAgICAgICAgICAgIG1fZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVs
dGlzYW1wbGVJTUcgPSByZWludGVycHJldF9jYXN0PFBGTkdMUkVOREVSQlVGRkVSU1RPUkFHRU1V
TFRJU0FNUExFSU1HUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsUmVuZGVyYnVmZmVyU3RvcmFn
ZU11bHRpc2FtcGxlSU1HIikpOworICAgICAgICAgICAgbV9zdXBwb3J0c0lNR011bHRpc2FtcGxl
ZFJlbmRlclRvVGV4dHVyZSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitTdHJpbmcgRXh0ZW5zaW9uczNET3Bl
bkdMRVM6OmdldEV4dGVuc2lvbnMoKQoreworICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhHTF9FWFRFTlNJT05TKSkpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNE
T3BlbkdMRVMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRl
bnNpb25zM0RPcGVuR0xFUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkwMjIyY2E0ZDdhOTRhMDhjMmY5NzU2MTRi
ZjJiYzYwZTAwMWUwOTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuaApAQCAtMCwwICsxLDY5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBFeHRlbnNpb25zM0RPcGVuR0xFU19oCisjZGVmaW5lIEV4dGVuc2lv
bnMzRE9wZW5HTEVTX2gKKworI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oIgor
CisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRXh0ZW5zaW9uczNET3BlbkdMRVMgOiBwdWJsaWMg
RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5FeHRlbnNp
b25zM0RPcGVuR0xFUygpOworCisgICAgdmlydHVhbCB2b2lkIGZyYW1lYnVmZmVyVGV4dHVyZTJE
TXVsdGlzYW1wbGVJTUcodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNo
bWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIHVuc2lnbmVkIGludCB0ZXh0dXJlLCBpbnQg
bGV2ZWwsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcyk7CisgICAgdmlydHVhbCB2b2lkIHJlbmRlcmJ1
ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRyh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQg
bG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25n
IHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7CisKKyAgICB2aXJ0dWFsIFBsYXRmb3JtM0RP
YmplY3QgY3JlYXRlVmVydGV4QXJyYXlPRVMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlVmVy
dGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCk7CisgICAgdmlydHVhbCBHQzNEYm9vbGVhbiBp
c1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpOworICAgIHZpcnR1YWwgdm9pZCBiaW5k
VmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCk7CisKK3Byb3RlY3RlZDoKKyAgICAvLyBU
aGlzIGNsYXNzIG9ubHkgbmVlZHMgdG8gYmUgaW5zdGFudGlhdGVkIGJ5IEdyYXBoaWNzQ29udGV4
dDNEIGltcGxlbWVudGF0aW9ucy4KKyAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7
CisgICAgRXh0ZW5zaW9uczNET3BlbkdMRVMoR3JhcGhpY3NDb250ZXh0M0QqKTsKKworICAgIHZp
cnR1YWwgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFs
IFN0cmluZyBnZXRFeHRlbnNpb25zKCk7CisKKyAgICBib29sIG1fc3VwcG9ydHNPRVN2ZXJ0ZXhB
cnJheU9iamVjdDsKKyAgICBib29sIG1fc3VwcG9ydHNJTUdNdWx0aXNhbXBsZWRSZW5kZXJUb1Rl
eHR1cmU7CisKKyAgICBQRk5HTEZSQU1FQlVGRkVSVEVYVFVSRTJETVVMVElTQU1QTEVJTUdQUk9D
IG1fZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HOworICAgIFBGTkdMUkVOREVS
QlVGRkVSU1RPUkFHRU1VTFRJU0FNUExFSU1HUFJPQyBtX2dsUmVuZGVyYnVmZmVyU3RvcmFnZU11
bHRpc2FtcGxlSU1HOworICAgIFBGTkdMQklORFZFUlRFWEFSUkFZT0VTUFJPQyBtX2dsQmluZFZl
cnRleEFycmF5T0VTOworICAgIFBGTkdMREVMRVRFVkVSVEVYQVJSQVlTT0VTUFJPQyBtX2dsRGVs
ZXRlVmVydGV4QXJyYXlzT0VTOworICAgIFBGTkdMR0VOVkVSVEVYQVJSQVlTT0VTUFJPQyBtX2ds
R2VuVmVydGV4QXJyYXlzT0VTOworICAgIFBGTkdMSVNWRVJURVhBUlJBWU9FU1BST0MgbV9nbElz
VmVydGV4QXJyYXlPRVM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFeHRlbnNpb25zM0RPcGVuR0xFU19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdM
LmNwcAppbmRleCAzZjQ3YjZlMjFlYjI1NTI0M2VlZWE0YmYzMTk4NTNhYmJmNzZhMmRjLi41ZjAw
NTA1OTljNmFiNmI0MTMyMDMyNTgwYTU0MGEzYzI2ZTcyOWI1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHQzRE9wZW5HTC5jcHAKQEAgLTM0LDYgKzM0LDExIEBACiAjaW5jbHVkZSAiSW50U2l6
ZS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAKKyNpbmNsdWRlIDxhbGdvcml0aG0+
CisjaW5jbHVkZSA8Y3N0cmluZz4KKyNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKICNpZiBQTEFURk9STShNQUMpCiAjaW5jbHVkZSA8
T3BlbkdML2dsLmg+CiAjZWxpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkgfHwgUExB
VEZPUk0oUVQpCkBAIC00Nyw2ICs1MiwzMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFk
UGl4ZWxzQW5kQ29udmVydFRvQkdSQUlmTmVjZXNzYXJ5KGludCB4LCBpbnQgeSwgaW50CiAgICAg
OjpnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgR0xfQkdSQSwgR0xfVU5TSUdORURf
SU5UXzhfOF84XzhfUkVWLCBwaXhlbHMpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2
YWxpZGF0ZUF0dHJpYnV0ZXMoKQoreworICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IGdl
dEV4dGVuc2lvbnMoKTsKKyAgICBpZiAobV9hdHRycy5zdGVuY2lsKSB7CisgICAgICAgIGNvbnN0
IGNoYXIqIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbiA9IGlzR0xFUzJDb21wbGlhbnQoKSA/
ICJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiIDogIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3Rl
bmNpbCI7CisgICAgICAgIGlmIChleHRlbnNpb25zLT5zdXBwb3J0cyhwYWNrZWREZXB0aFN0ZW5j
aWxFeHRlbnNpb24pKSB7CisgICAgICAgICAgICBleHRlbnNpb25zLT5lbnN1cmVFbmFibGVkKHBh
Y2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbik7CisgICAgICAgICAgICAvLyBGb3JjZSBkZXB0aCBp
ZiBzdGVuY2lsIGlzIHRydWUuCisgICAgICAgICAgICBtX2F0dHJzLmRlcHRoID0gdHJ1ZTsKKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2F0dHJzLnN0ZW5jaWwgPSBmYWxzZTsKKyAgICB9
CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAgIGJvb2wgaXNWYWxpZFZlbmRv
ciA9IHRydWU7CisgICAgICAgIC8vIEN1cnJlbnRseSBpbiBNYWMgd2Ugb25seSB0dXJuIG9uIGFu
dGlhbGlhcyBpZiB2ZW5kb3IgaXMgTlZJRElBLAorICAgICAgICAvLyBvciBpZiBBVEkgYW5kIG9u
IDEwLjcuMiBhbmQgYWJvdmUuCisgICAgICAgIGNvbnN0IGNoYXIqIHZlbmRvciA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgY2hhcio+KDo6Z2xHZXRTdHJpbmcoR0xfVkVORE9SKSk7CisgICAgICAg
IGlmICghdmVuZG9yIHx8ICghc3RkOjpzdHJzdHIodmVuZG9yLCAiTlZJRElBIikgJiYgIShzdGQ6
OnN0cnN0cih2ZW5kb3IsICJBVEkiKSAmJiBzeXN0ZW1BbGxvd3NNdWx0aXNhbXBsaW5nT25BVElD
YXJkcygpKSkpCisgICAgICAgICAgICBpc1ZhbGlkVmVuZG9yID0gZmFsc2U7CisgICAgICAgIGlm
ICghaXNWYWxpZFZlbmRvciB8fCAhZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0FOR0xFX2ZyYW1l
YnVmZmVyX211bHRpc2FtcGxlIikgfHwgaXNHTEVTMkNvbXBsaWFudCgpKQorICAgICAgICAgICAg
bV9hdHRycy5hbnRpYWxpYXMgPSBmYWxzZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZXh0
ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUi
KTsKKyAgICB9Cit9CisKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGVGQk9zKGNvbnN0
IEludFNpemUmIHNpemUpCiB7CiAgICAgY29uc3QgaW50IHdpZHRoID0gc2l6ZS53aWR0aCgpOwpA
QCAtMTUxLDYgKzE4Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc29sdmVNdWx0aXNh
bXBsaW5nSWZOZWNlc3NhcnkoY29uc3QgSW50UmVjdCYgcmVjdCkKIHZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQogewogICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworCiAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkgewogICAg
IGNhc2UgREVQVEhfU1RFTkNJTDoKICAgICAgICAgaW50ZXJuYWxmb3JtYXQgPSBHTF9ERVBUSDI0
X1NURU5DSUw4X0VYVDsKQEAgLTIzMiw2ICsyNjQsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNE
Ojp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50
ZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworCiAgICAgR0MzRGVudW0gb3BlbkdMSW50ZXJuYWxGb3JtYXQgPSBpbnRlcm5hbGZvcm1hdDsK
ICAgICBpZiAodHlwZSA9PSBHTF9GTE9BVCkgewogICAgICAgICBpZiAoZm9ybWF0ID09IEdMX1JH
QkEpCkBAIC0yNDEsNiArMjc0LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGUKICAgICB9CiAK
ICAgICA6OmdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBvcGVuR0xJbnRlcm5hbEZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CisKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApAQCAtMjU2LDYgKzI5MCwzMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpjbGVhckRlcHRoKEdDM0RjbGFtcGYgZGVwdGgpCiAgICAgOjpnbENsZWFyRGVwdGgoZGVwdGgp
OwogfQogCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpzeXN0ZW1BbGxvd3NNdWx0aXNhbXBsaW5n
T25BVElDYXJkcygpCit7CisjaWYgUExBVEZPUk0oTUFDKQorI2lmICFkZWZpbmVkKEJVSUxESU5H
X09OX1NOT1dfTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTElPTikKKyAgICByZXR1
cm4gdHJ1ZTsKKyNlbHNlCisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBzdGF0aWMg
U0ludDMyIHZlcnNpb247CisgICAgaWYgKCF2ZXJzaW9uKSB7CisgICAgICAgIGlmIChHZXN0YWx0
KGdlc3RhbHRTeXN0ZW1WZXJzaW9uLCAmdmVyc2lvbikgIT0gbm9FcnIpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Nzc5MjIgZm9yIG1vcmUgZGV0YWlscworICAgIHJldHVybiB2ZXJzaW9u
ID49IDB4MTA3MjsKKyNlbmRpZiAvLyBTTk9XX0xFT1BBUkQgYW5kIExJT04KKyNlbHNlCisgICAg
cmV0dXJuIGZhbHNlOworI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKK30KKworRXh0ZW5zaW9uczNE
KiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXh0ZW5zaW9ucygpCit7CisgICAgaWYgKCFtX2V4dGVu
c2lvbnMpCisgICAgICAgIG1fZXh0ZW5zaW9ucyA9IGFkb3B0UHRyKG5ldyBFeHRlbnNpb25zM0RP
cGVuR0wodGhpcykpOworICAgIHJldHVybiBtX2V4dGVuc2lvbnMuZ2V0KCk7Cit9CisKIH0KIAog
I2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RP
cGVuR0xDb21tb24uY3BwCmluZGV4IDQyOWZjNTFjOTA0NmM0NGE1MGVmZWNlMTI5Y2JmMzFmNjBk
OTk3NWUuLjc2MmUzOWYwOWRhYTk2ZjVjMGRhNzM0ODQwOTQxODQ1YWRlYTliZjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHQzRE9wZW5HTENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcApAQCAtMzAsNyArMzAs
MTIgQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAKKyNpbmNsdWRlICJDYW52
YXNSZW5kZXJpbmdDb250ZXh0LmgiCisjaWYgVVNFKE9QRU5HTF9FU18yKQorI2luY2x1ZGUgIkV4
dGVuc2lvbnMzRE9wZW5HTEVTLmgiCisjZWxzZQogI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5H
TC5oIgorI2VuZGlmCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1h
Z2VCdWZmZXIuaCIKICNpbmNsdWRlICJJbWFnZURhdGEuaCIKQEAgLTQ5LDM5ICs1NCwyNCBAQAog
I2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KIAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBVU0UoT1BFTkdMX0VTXzIpCisjaW5jbHVkZSAi
T3BlbkdMRVNTaGltcy5oIgorI2VsaWYgUExBVEZPUk0oTUFDKQogI2luY2x1ZGUgPE9wZW5HTC9n
bC5oPgogI2VsaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpIHx8IFBMQVRGT1JNKFFU
KQogI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCiAjZW5kaWYKIAotbmFtZXNwYWNlIFdlYkNvcmUg
eworI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCisjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3Jt
TG9nLmg+CisjZW5kaWYKIAotc3RhdGljIGJvb2wgc3lzdGVtQWxsb3dzTXVsdGlzYW1wbGluZ09u
QVRJQ2FyZHMoKQotewotI2lmIFBMQVRGT1JNKE1BQykKLSNpZiAhZGVmaW5lZChCVUlMRElOR19P
Tl9TTk9XX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xJT04pCi0gICAgcmV0dXJu
IHRydWU7Ci0jZWxzZQotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgc3RhdGljIFNJ
bnQzMiB2ZXJzaW9uOwotICAgIGlmICghdmVyc2lvbikgewotICAgICAgICBpZiAoR2VzdGFsdChn
ZXN0YWx0U3lzdGVtVmVyc2lvbiwgJnZlcnNpb24pICE9IG5vRXJyKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTc3OTIyIGZvciBtb3JlIGRldGFpbHMKLSAgICByZXR1cm4gdmVyc2lvbiA+
PSAweDEwNzI7Ci0jZW5kaWYgLy8gU05PV19MRU9QQVJEIGFuZCBMSU9OCi0jZWxzZQotICAgIHJl
dHVybiBmYWxzZTsKLSNlbmRpZiAvLyBQTEFURk9STShNQUMpCi19CituYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRlcygpCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZURlcHRoU3RlbmNpbChjb25zdCBjaGFyKiBwYWNr
ZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pCiB7CiAgICAgRXh0ZW5zaW9uczNEKiBleHRlbnNpb25z
ID0gZ2V0RXh0ZW5zaW9ucygpOwogICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpIHsKLSAgICAgICAg
Y29uc3QgY2hhciogcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uID0gaXNHTEVTMkNvbXBsaWFu
dCgpID8gIkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCIgOiAiR0xfRVhUX3BhY2tlZF9kZXB0
aF9zdGVuY2lsIjsKICAgICAgICAgaWYgKGV4dGVuc2lvbnMtPnN1cHBvcnRzKHBhY2tlZERlcHRo
U3RlbmNpbEV4dGVuc2lvbikpIHsKICAgICAgICAgICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJs
ZWQocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKTsKICAgICAgICAgICAgIC8vIEZvcmNlIGRl
cHRoIGlmIHN0ZW5jaWwgaXMgdHJ1ZS4KQEAgLTQzOSwzNiArNDI5LDExIEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCiAgICAg
QVNTRVJUKHNoYWRlcik7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAKLSAgICBpbnQgR0xz
aGFkZXJUeXBlOwotICAgIEFOR0xFU2hhZGVyVHlwZSBzaGFkZXJUeXBlOwotCi0gICAgZ2xHZXRT
aGFkZXJpdihzaGFkZXIsIFNIQURFUl9UWVBFLCAmR0xzaGFkZXJUeXBlKTsKLSAgICAKLSAgICBp
ZiAoR0xzaGFkZXJUeXBlID09IFZFUlRFWF9TSEFERVIpCi0gICAgICAgIHNoYWRlclR5cGUgPSBT
SEFERVJfVFlQRV9WRVJURVg7Ci0gICAgZWxzZSBpZiAoR0xzaGFkZXJUeXBlID09IEZSQUdNRU5U
X1NIQURFUikKLSAgICAgICAgc2hhZGVyVHlwZSA9IFNIQURFUl9UWVBFX0ZSQUdNRU5UOwotICAg
IGVsc2UKLSAgICAgICAgcmV0dXJuOyAvLyBJbnZhbGlkIHNoYWRlciB0eXBlLgotCi0gICAgSGFz
aE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJlc3Vs
dCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBTdHJpbmcgdHJhbnNsYXRl
ZFNoYWRlclNvdXJjZSA9IG1fZXh0ZW5zaW9ucy0+Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFO
R0xFKHNoYWRlcik7CiAKLSAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgp
KQorICAgIGlmICghdHJhbnNsYXRlZFNoYWRlclNvdXJjZS5sZW5ndGgoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgU2hhZGVyU291cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT5zZWNvbmQ7Ci0K
LSAgICBTdHJpbmcgdHJhbnNsYXRlZFNoYWRlclNvdXJjZTsKLSAgICBTdHJpbmcgc2hhZGVySW5m
b0xvZzsKLQotICAgIGJvb2wgaXNWYWxpZCA9IG1fY29tcGlsZXIudmFsaWRhdGVTaGFkZXJTb3Vy
Y2UoZW50cnkuc291cmNlLnV0ZjgoKS5kYXRhKCksIHNoYWRlclR5cGUsIHRyYW5zbGF0ZWRTaGFk
ZXJTb3VyY2UsIHNoYWRlckluZm9Mb2cpOwotCi0gICAgZW50cnkubG9nID0gc2hhZGVySW5mb0xv
ZzsKLSAgICBlbnRyeS5pc1ZhbGlkID0gaXNWYWxpZDsKLQotICAgIGlmICghaXNWYWxpZCkKLSAg
ICAgICAgcmV0dXJuOyAvLyBTaGFkZXIgZGlkbid0IHZhbGlkYXRlLCBkb24ndCBtb3ZlIGZvcndh
cmQgd2l0aCBjb21waWxpbmcgdHJhbnNsYXRlZCBzb3VyY2UuCi0KICAgICBpbnQgdHJhbnNsYXRl
ZFNoYWRlckxlbmd0aCA9IHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UubGVuZ3RoKCk7CiAKICAgICBj
b25zdCBDU3RyaW5nJiB0cmFuc2xhdGVkU2hhZGVyQ1N0cmluZyA9IHRyYW5zbGF0ZWRTaGFkZXJT
b3VyY2UudXRmOCgpOwpAQCAtODAxLDE4ICs3NjYsNjEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2kKICAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIsIG1fZmJvKTsKICAgICAgICAgOjpnbEZsdXNoKCk7CiAgICAgfQorICAgIC8vIEN1
cnJlbnRseSBvbmx5IGZvcm1hdD1SR0JBLCB0eXBlPVVOU0lHTkVEX0JZVEUgaXMgc3VwcG9ydGVk
IGJ5IHRoZSBzcGVjaWZpY2F0aW9uOiBodHRwOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L3dl
YmdsL3NwZWNzL2xhdGVzdC8KKyAgICAvLyBJZiB0aGlzIGV2ZXIgY2hhbmdlcywgdGhpcyBjb2Rl
IHdpbGwgbmVlZCB0byBiZSB1cGRhdGVkLgorCisgICAgLy8gQ2FsY3VsYXRlIHRoZSBzdHJpZGVz
IG9mIG91ciBkYXRhIGFuZCBjYW52YXMKKyAgICB1bnNpZ25lZCBpbnQgZm9ybWF0U2l6ZSA9IDQ7
IC8vIFJHQkEgVU5TSUdORURfQllURQorICAgIHVuc2lnbmVkIGludCBkYXRhU3RyaWRlID0gd2lk
dGggKiBmb3JtYXRTaXplOworICAgIHVuc2lnbmVkIGludCBjYW52YXNTdHJpZGUgPSBtX2N1cnJl
bnRXaWR0aCAqIGZvcm1hdFNpemU7CisKKyAgICAvLyBJZiB3ZSBhcmUgdXNpbmcgYSBwYWNrIGFs
aWdubWVudCBvZiA4LCB0aGVuIHdlIG5lZWQgdG8gYWxpZ24gb3VyIHN0cmlkZXMgdG8gOCBieXRl
IGJvdW5kYXJpZXMKKyAgICAvLyBTZWU6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGF0
YV9zdHJ1Y3R1cmVfYWxpZ25tZW50IChjb21wdXRpbmcgcGFkZGluZykKKyAgICBpbnQgcGFja0Fs
aWdubWVudDsKKyAgICBnbEdldEludGVnZXJ2KEdMX1BBQ0tfQUxJR05NRU5ULCAmcGFja0FsaWdu
bWVudCk7CisgICAgaWYgKDggPT0gcGFja0FsaWdubWVudCkgeworICAgICAgICBkYXRhU3RyaWRl
ID0gKGRhdGFTdHJpZGUgKyA3KSAmIH43OworICAgICAgICBjYW52YXNTdHJpZGUgPSAoY2FudmFz
U3RyaWRlICsgNykgJiB+NzsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBjaGFyKiBjYW52YXNEYXRh
ID0gbmV3IHVuc2lnbmVkIGNoYXJbY2FudmFzU3RyaWRlICogbV9jdXJyZW50SGVpZ2h0XTsKKyAg
ICA6OmdsUmVhZFBpeGVscygwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCBm
b3JtYXQsIHR5cGUsIGNhbnZhc0RhdGEpOworCisgICAgLy8gSWYgd2UgZmFpbGVkIHRvIHJlYWQg
b3VyIGNhbnZhcyBkYXRhIGR1ZSB0byBhIEdMIGVycm9yLCBkb24ndCBjb250aW51ZQorICAgIGlu
dCBlcnJvciA9IGdsR2V0RXJyb3IoKTsKKyAgICBpZiAoR0xfTk9fRVJST1IgIT0gZXJyb3IpIHsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgLy8gQ2xlYXIgb3VyIGRhdGEgaW4gY2FzZSBzb21lIG9mIGl0IGxpZXMgb3V0c2lk
ZSB0aGUgYm91bmRzIG9mIG91ciBjYW52YXMKKyAgICAvLyBUT0RPOiBkb24ndCBkbyB0aGlzIGlm
IGFsbCBvZiB0aGUgZGF0YSBsaWVzIGluc2lkZSB0aGUgYm91bmRzIG9mIHRoZSBjYW52YXMKKyAg
ICBtZW1zZXQoZGF0YSwgMCwgZGF0YVN0cmlkZSAqIGhlaWdodCk7CisKKyAgICAvLyBDYWxjdWxh
dGUgdGhlIGludGVyc2VjdGlvbiBvZiBvdXIgY2FudmFzIGFuZCBkYXRhIGJvdW5kcworICAgIElu
dFJlY3QgZGF0YVJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgSW50UmVjdCBjYW52YXNS
ZWN0KDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQpOworICAgIEludFJlY3Qg
bm9uWmVyb0RhdGFSZWN0ID0gaW50ZXJzZWN0aW9uKGRhdGFSZWN0LCBjYW52YXNSZWN0KTsKKwor
ICAgIHVuc2lnbmVkIGludCB4RGF0YU9mZnNldCA9IHggPCAwID8gLXggKiBmb3JtYXRTaXplIDog
MDsKKyAgICB1bnNpZ25lZCBpbnQgeURhdGFPZmZzZXQgPSB5IDwgMCA/IC15ICogZGF0YVN0cmlk
ZSA6IDA7CisgICAgdW5zaWduZWQgaW50IHhDYW52YXNPZmZzZXQgPSBub25aZXJvRGF0YVJlY3Qu
eCgpICogZm9ybWF0U2l6ZTsKKyAgICB1bnNpZ25lZCBpbnQgeUNhbnZhc09mZnNldCA9IG5vblpl
cm9EYXRhUmVjdC55KCkgKiBjYW52YXNTdHJpZGU7CisgICAgdW5zaWduZWQgY2hhciogZHN0ID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRhdGEpICsgeERhdGFPZmZzZXQgKyB5RGF0YU9m
ZnNldDsKKyAgICB1bnNpZ25lZCBjaGFyKiBzcmMgPSBjYW52YXNEYXRhICsgeENhbnZhc09mZnNl
dCArIHlDYW52YXNPZmZzZXQ7CisgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgbm9uWmVyb0Rh
dGFSZWN0LmhlaWdodCgpOyByb3crKykgeworICAgICAgICBtZW1jcHkoZHN0LCBzcmMsIG5vblpl
cm9EYXRhUmVjdC53aWR0aCgpICogZm9ybWF0U2l6ZSk7CisgICAgICAgIGRzdCArPSBkYXRhU3Ry
aWRlOworICAgICAgICBzcmMgKz0gY2FudmFzU3RyaWRlOworICAgIH0KKworICAgIGRlbGV0ZSBb
XSBjYW52YXNEYXRhOwogICAgIDo6Z2xSZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZv
cm1hdCwgdHlwZSwgZGF0YSk7CisKICAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3Vu
ZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQogICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhU
KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCi17Ci0gICAg
Ly8gRklYTUU6IFRoaXMgaXMgbm90IGltcGxlbWVudGVkIG9uIGRlc2t0b3AgT3BlbkdMLiBXZSBu
ZWVkIHRvIGhhdmUgaWZkZWZzIGZvciB0aGUgZGlmZmVyZW50IEdMIHZhcmlhbnRzLgotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnNhbXBsZUNvdmVyYWdlKEdDM0RjbGFtcGYgdmFsdWUsIEdDM0Rib29s
ZWFuIGludmVydCkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKQEAgLTEzODYsMTMgKzEz
OTQsNiBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpsYXllckNvbXBvc2l0ZWQoKSBjb25zdAog
ICAgIHJldHVybiBtX2xheWVyQ29tcG9zaXRlZDsKIH0KIAotRXh0ZW5zaW9uczNEKiBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0RXh0ZW5zaW9ucygpCi17Ci0gICAgaWYgKCFtX2V4dGVuc2lvbnMpCi0g
ICAgICAgIG1fZXh0ZW5zaW9ucyA9IGFkb3B0UHRyKG5ldyBFeHRlbnNpb25zM0RPcGVuR0wodGhp
cykpOwotICAgIHJldHVybiBtX2V4dGVuc2lvbnMuZ2V0KCk7Ci19Ci0KIH0KIAogI2VuZGlmIC8v
IEVOQUJMRShXRUJHTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcApp
bmRleCBiMWJkMWRjNTZjYTZmZDkyODNkYjJkYWUxMjM4M2NlMjJmYzk0MzAyLi4zYjQ0YTI0NmVm
MTMwNGMwNDkxNmE4YzEzNTkwNDYxY2VhM2YyODQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dDNET3BlbkdMRVMuY3BwCkBAIC0yOSw5MyArMjksMjkgQEAKICNpZiBFTkFCTEUoV0VCR0wp
CiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotCi0jaW5jbHVkZSAiRXh0ZW5zaW9u
czNET3BlbkdMLmgiCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMRVMuaCIKICNpbmNsdWRl
ICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIkxheWVyV2ViS2l0
VGhyZWFkLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLQotI2lmIFBMQVRGT1JNKEdU
SykgfHwgUExBVEZPUk0oUVQpCi0jaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKLSNlbmRpZgorI2lu
Y2x1ZGUgIk9wZW5HTEVTU2hpbXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzQW5kQ29udmVydFRvQkdSQUlmTmVjZXNzYXJ5KGlu
dCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBjaGFyKiBwaXhlbHMp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQogewotICAg
IGNvbnN0IGludCB0b3RhbEJ5dGVzID0gbV9jdXJyZW50V2lkdGggKiBtX2N1cnJlbnRIZWlnaHQg
KiA0OwotICAgIDo6Z2xSZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIEdMX1JHQkEsIEdM
X1VOU0lHTkVEX0JZVEUsIHBpeGVscyk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ5
dGVzOyBpICs9IDQpCi0gICAgICAgIHN0ZDo6c3dhcChwaXhlbHNbaV0sIHBpeGVsc1tpICsgMl0p
OyAvLyBDb252ZXJ0IHRvIEJHUkEuCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpn
bFJlbGVhc2VTaGFkZXJDb21waWxlcigpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpy
ZXNoYXBlRkJPcyhjb25zdCBJbnRTaXplJiBzaXplKQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
cmVhZFBpeGVsc0FuZENvbnZlcnRUb0JHUkFJZk5lY2Vzc2FyeShpbnQgeCwgaW50IHksIGludCB3
aWR0aCwgaW50IGhlaWdodCwgdW5zaWduZWQgY2hhciogcGl4ZWxzKQogewotICAgIGNvbnN0IGlu
dCB3aWR0aCA9IHNpemUud2lkdGgoKTsKLSAgICBjb25zdCBpbnQgaGVpZ2h0ID0gc2l6ZS5oZWln
aHQoKTsKLSAgICBHTHVpbnQgY29sb3JGb3JtYXQgPSAwLCBwaXhlbERhdGFUeXBlID0gMDsKLSAg
ICBpZiAobV9hdHRycy5hbHBoYSkgewotICAgICAgICBtX2ludGVybmFsQ29sb3JGb3JtYXQgPSBH
TF9SR0JBOwotICAgICAgICBjb2xvckZvcm1hdCA9IEdMX1JHQkE7Ci0gICAgICAgIHBpeGVsRGF0
YVR5cGUgPSBHTF9VTlNJR05FRF9CWVRFOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1faW50ZXJu
YWxDb2xvckZvcm1hdCA9IEdMX1JHQjsKLSAgICAgICAgY29sb3JGb3JtYXQgPSBHTF9SR0I7Ci0g
ICAgICAgIHBpeGVsRGF0YVR5cGUgPSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNTsKLSAgICB9Ci0K
LSAgICAvLyBXZSBkb24ndCBhbGxvdyB0aGUgbG9naWMgd2hlcmUgc3RlbmNpbCBpcyByZXF1aXJl
ZCBhbmQgZGVwdGggaXMgbm90LgotICAgIC8vIFNlZSBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRh
dGVBdHRyaWJ1dGVzLgotICAgIGJvb2wgc3VwcG9ydFBhY2tlZERlcHRoU3RlbmNpbEJ1ZmZlciA9
IChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkgJiYgZ2V0RXh0ZW5zaW9ucygpLT5z
dXBwb3J0cygiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7Ci0KLSAgICAvLyBSZXNpemUg
cmVndWxhciBGQk8uCi0gICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOwotICAgIGlmICht
X2JvdW5kRkJPICE9IG1fZmJvKSB7Ci0gICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKLSAg
ICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIG1fZmJvKTsKLSAgICB9Ci0KLSAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwg
bV90ZXh0dXJlKTsKLSAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBtX2ludGVy
bmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBwaXhlbERhdGFU
eXBlLCAwKTsKLSAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdM
X1RFWFRVUkVfMkQsIG1fdGV4dHVyZSwgMCk7Ci0KLSAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVY
VFVSRV8yRCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0gICAgOjpnbFRleEltYWdlMkQoR0xfVEVY
VFVSRV8yRCwgMCwgbV9pbnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBjb2xv
ckZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgMCk7Ci0gICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RF
WFRVUkVfMkQsIDApOwotCi0gICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBhbnRpYWxpYXNpbmcgeWV0
LiBTZWUgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRlcy4KLSAgICBBU1NFUlQo
IW1fYXR0cnMuYW50aWFsaWFzKTsKLQotICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRy
cy5kZXB0aCkgewotICAgICAgICAvLyBVc2UgYSAyNCBiaXQgZGVwdGggYnVmZmVyIHdoZXJlIHdl
IGtub3cgd2UgaGF2ZSBpdC4KLSAgICAgICAgaWYgKHN1cHBvcnRQYWNrZWREZXB0aFN0ZW5jaWxC
dWZmZXIpIHsKLSAgICAgICAgICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2Rl
cHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgICAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJF
XzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTCwgd2lkdGgsIGhlaWdodCwg
MCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUwsIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9JTlRfMjRfOCwgMCk7Ci0gICAgICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsKQot
ICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwg
R0xfU1RFTkNJTF9BVFRBQ0hNRU5ULCBHTF9URVhUVVJFXzJELCBtX2RlcHRoU3RlbmNpbEJ1ZmZl
ciwgMCk7Ci0gICAgICAgICAgICBpZiAobV9hdHRycy5kZXB0aCkKLSAgICAgICAgICAgICAgICA6
OmdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0RFUFRIX0FUVEFDSE1F
TlQsIEdMX1RFWFRVUkVfMkQsIG1fZGVwdGhTdGVuY2lsQnVmZmVyLCAwKTsKLSAgICAgICAgICAg
IDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpIHsKLSAgICAgICAgICAgICAgICA6OmdsQmlu
ZFJlbmRlcmJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX3N0ZW5j
aWxCdWZmZXIpOwotICAgICAgICAgICAgICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlRVhUKEdy
YXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIEdMX1NURU5DSUxfSU5ERVg4LCB3aWR0aCwg
aGVpZ2h0KTsKLSAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQo
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJ
TF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX3N0ZW5jaWxC
dWZmZXIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG1fYXR0cnMuZGVwdGgpIHsK
LSAgICAgICAgICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQz
RDo6UkVOREVSQlVGRkVSLCBtX2RlcHRoQnVmZmVyKTsKLSAgICAgICAgICAgICAgICA6OmdsUmVu
ZGVyYnVmZmVyU3RvcmFnZUVYVChHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBHTF9E
RVBUSF9DT01QT05FTlQxNiwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgICAgICAgICAgOjpnbEZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwg
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpS
RU5ERVJCVUZGRVIsIG1fZGVwdGhCdWZmZXIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
OjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwg
MCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VY
VChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUl9DT01QTEVURSkgewotICAgICAgICAvLyBGSVhNRTogY2xlYW51cAotICAgICAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIDo6Z2xSZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWln
aHQsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscyk7CisgICAgaW50IHRvdGFsQnl0
ZXMgPSB3aWR0aCAqIGhlaWdodCAqIDQ7CisgICAgaWYgKGlzR0xFUzJDb21wbGlhbnQoKSkgewor
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsQnl0ZXM7IGkgKz0gNCkKKyAgICAgICAg
ICAgIHN0ZDo6c3dhcChwaXhlbHNbaV0sIHBpeGVsc1tpICsgMl0pOyAvLyBDb252ZXJ0IHRvIEJH
UkEuCiAgICAgfQotCi0gICAgcmV0dXJuIG11c3RSZXN0b3JlRkJPOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KGNvbnN0IEludFJl
Y3QmIHJlY3QpCkBAIC0xNTYsNiArOTIsMTcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6dGV4
SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGUKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVBdHRy
aWJ1dGVzKCkKK3sKKyAgICB2YWxpZGF0ZURlcHRoU3RlbmNpbCgiR0xfT0VTX3BhY2tlZF9kZXB0
aF9zdGVuY2lsIik7CisKKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAgRXh0
ZW5zaW9uczNEKiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOworICAgICAgICBpZiAoIWV4
dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9JTUdfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJl
IikpCisgICAgICAgICAgICBtX2F0dHJzLmFudGlhbGlhcyA9IGZhbHNlOworICAgIH0KK30KKwog
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhSYW5nZShHQzNEY2xhbXBmIHpOZWFyLCBHQzNE
Y2xhbXBmIHpGYXIpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CkBAIC0xNjgsNiArMTE1
LDE5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyRGVwdGgoR0MzRGNsYW1wZiBkZXB0
aCkKICAgICA6OmdsQ2xlYXJEZXB0aGYoZGVwdGgpOwogfQogCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKK0V4dGVuc2lvbnMzRCogR3JhcGhpY3NDb250ZXh0M0Q6OmdldEV4dGVuc2lvbnMoKQor
eworICAgIGlmICghbV9leHRlbnNpb25zKQorICAgICAgICBtX2V4dGVuc2lvbnMgPSBhZG9wdFB0
cihuZXcgRXh0ZW5zaW9uczNET3BlbkdMRVModGhpcykpOworICAgIHJldHVybiBtX2V4dGVuc2lv
bnMuZ2V0KCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnN5c3RlbUFsbG93c011bHRp
c2FtcGxpbmdPbkFUSUNhcmRzKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7IC8vIG5vdCBhcHBsaWNh
YmxlCit9CisKK30KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5j
cHAKaW5kZXggNzBkM2YyNGFmYTU1NDJhNjhhMTI0MWQzODFjM2NlOTM0ODc4MTg4NS4uMDY3Njky
MWMxMWY4MGZkYzVmYTg0ODM5YWRmZmY1M2IxMzBhZmFiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5j
cHAKQEAgLTk4LDYgKzk4LDEzIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJDb21w
bGlhbnQoKSBjb25zdAogI2VuZGlmCiB9CiAKKyNpZiAhVVNFKE9QRU5HTF9FU18yKQordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorI2VuZGlmCisKIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6R3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBIb3N0V2luZG93
KiBob3N0V2luZG93KQogICAgIDogbV9jb250ZXh0KGNvbnRleHQpCiAgICAgLCBtX2hvc3RXaW5k
b3coaG9zdFdpbmRvdykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150966</attachid>
            <date>2012-07-05 11:40:03 -0700</date>
            <delta_ts>2012-07-05 11:58:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90567-20120705143940.patch</filename>
            <type>text/plain</type>
            <size>65537</size>
            <attacher name="Joshua Netterfield">jnetterfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxODY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODFjZDc4MDliMjVmNjhk
YjA3MTcxZmU3N2UyMmI0ZjhkMjVkNTU2NC4uZjVjYTliYzYwOWJhOTgxOTIyNjk0OTM2ODVmZTk2
MTQ3NzE3NjM1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk0IEBACisyMDEyLTA3LTA0ICBKb3No
dWEgTmV0dGVyZmllbGQgIDxqbmV0dGVyZmllbGRAcmltLmNvbT4KKyAgICAgICAgTWFrZSBHQzNE
IGFuZCBFM0QgbW9yZSBtYWludGFpbmFibGUgZm9yIEdMRVMgcGxhdGZvcm1zCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDU2NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY2xlYW5zIHVw
IGNvZGUgZm9yIFdlYkdMIG9uIE9wZW5HTEVTIHBsYXRmb3JtcyB3aGljaCB1c2UgCisgICAgICAg
IEdyYXBoaWNzQ29udGV4dDNET3BlbkdMKiBhbmQgRXh0ZW5zaW9uczNET3BlbkdMKi4gQWx0aG91
Z2gKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wgd2FzIGFscmVhZHkgc3BsaXQgaW50
byBHcmFwaGljc0NvbnRleHQzRE9wZW5HTCwKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0RPcGVu
R0xDb21tb24sIGFuZCAgR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUywgdGhpcyBwYXRjaAorICAg
ICAgICBpcyBhbiBhdHRlbXB0IHRvIHJlZmFjdG9yIHRoaXMgY29kZSBpbiBhIHdheSB0aGF0IHdp
bGwgaGVscCBCbGFja0JlcnJ5IGFuZAorICAgICAgICBvdGhlciB0ZWFtcyBzdXBwb3J0IFdlYkdM
IG9uIG1vYmlsZSBwbGF0Zm9ybXMgd2l0aCBhcyBsaXR0bGUgdXNlIG9mCisgICAgICAgIOKAnCNJ
RiBVU0UoT1BFTkdMX0VTXzIp4oCdIGluIGNvbW1vbiBjb2RlIGFzIHBvc3NpYmxlLiBBbHNvIGlu
Y2x1ZGVkIGlzIHRoZQorICAgICAgICBzZXBhcmF0aW9uIG9mIEV4dGVuc2lvbnMzRE9wZW5HTCBp
bnRvIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbiwKKyAgICAgICAgRXh0ZW5zaW9uczNET3BlbkdM
LCBhbmQgRXh0ZW5zaW9uczNET3BlbkdMRVMgYXMgd2VsbCBhcyB0aGUgaW50cm9kdWN0aW9uCisg
ICAgICAgIG9mIE9wZW5HTEVTU2hpbXMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBjcmVhdGVk
IGluIGxhcmdlIHBhcnQgYnkgSm9uYXRoYW4gRmVsZHN0ZWluLgorCisgICAgICAgIE5vIG5ldyB0
ZXN0czogbm8gbmV3IGJlaGF2aW91ci4KKworICAgICAgICAqIFBsYXRmb3JtQmxhY2tCZXJyeS5j
bWFrZTogUmVjb2duaXplIEJsYWNrQmVycnkgYXMgT1BFTkdMIEVTLCBhZGQgbmV3IGZpbGVzIHRv
IGJ1aWxkCisgICAgICAgICogVGFyZ2V0LnByaTogQWRkIG5ldyBFeHRlbnNpb25zM0RPcGVuR0wq
IHRvIFdlYkdMIGJ1aWxkcworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dDNELmg6IEFkZCB2YWxpZGF0ZURlcHRoU3RlbmNpbCwgbWFrZSBzeXN0ZW1BbGxvd3NNdWx0
aXNhbXBsaW5nT25BVElDYXJkcyBhIGEgbWVtYmVyIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvT3BlbkdMRVNTaGltcy5oOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNw
cDogTW92ZSBjb2RlIHRvIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbiB3aGVyZSBwb3NzaWJsZQor
ICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpFeHRlbnNpb25zM0RPcGVuR0wp
OiBSZWZsZWN0IHRoYXQgaXQgaXMgbm93IGluaGVyaXRzIEV4dGVuc2lvbnMzRENvbW1vbgorICAg
ICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpzdXBwb3J0c0V4dGVuc2lvbik6IENv
bnRhaW5zIE9wZW5HTCBzcGVjaWZpYyBjb2RlIGZyb20gc3VwcG9ydHMKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpnZXRFeHRlbnNpb25z
KTogUmV0dXJucyBhIGxpc3Qgb2YgZXh0ZW5zaW9ucworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaDogUmVtb3ZlIGZ1bmN0aW9ucyBub3cgaW4g
RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEV4
dGVuc2lvbnMzRE9wZW5HTCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4
dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0xDb21tb246OkV4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbik6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0xDb21tb246
On5FeHRlbnNpb25zM0RPcGVuR0xDb21tb24pOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9u
czNET3BlbkdMQ29tbW9uOjpzdXBwb3J0cyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25z
M0RPcGVuR0xDb21tb246OmVuc3VyZUVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uOjppc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uOjpnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKToKKyAgICAgICAg
KFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6Z2V0VHJhbnNsYXRlZFNoYWRlclNv
dXJjZUFOR0xFKTogRXhpc3RlZCBiZWZvcmUsIGJ1dCBkaWQgbm90aGluZy4gTm93IGRvZXMgd2hh
dCBpcyBzYXlzIGl0IGRvZXMuCisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0xD
b21tb246OmluaXRpYWxpemVBdmFpbGFibGVFeHRlbnNpb25zKTogTW92ZWQgZnJvbSBFeHRlbnNp
b25zM0RPcGVuR0w6OnN1cHBvcnRzCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmguCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5H
TEVTOjpFeHRlbnNpb25zM0RPcGVuR0xFUyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25z
M0RPcGVuR0xFUzo6fkV4dGVuc2lvbnMzRE9wZW5HTEVTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4
dGVuc2lvbnMzRE9wZW5HTEVTOjpmcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HKToK
KyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTEVTOjpyZW5kZXJidWZmZXJTdG9y
YWdlTXVsdGlzYW1wbGVJTUcpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdM
RVM6OmNyZWF0ZVZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMz
RE9wZW5HTEVTOjpkZWxldGVWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRl
bnNpb25zM0RPcGVuR0xFUzo6aXNWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbnNpb25zM0RPcGVuR0xFUzo6YmluZFZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNv
cmU6OkV4dGVuc2lvbnMzRE9wZW5HTEVTOjpzdXBwb3J0c0V4dGVuc2lvbik6IENvbnRhaW5zIE9w
ZW5HTEVTIHNwZWNpZmljIGNvZGUgZnJvbSBzdXBwb3J0cworICAgICAgICAoV2ViQ29yZTo6RXh0
ZW5zaW9uczNET3BlbkdMRVM6OmdldEV4dGVuc2lvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmguCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEV4dGVuc2lvbnMzRE9wZW5HTEVTKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRl
cyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpzeXN0ZW1BbGxvd3NNdWx0aXNhbXBsaW5nT25BVElDYXJkcyk6IE5vdyBhIG1lbWJlciBmdW5j
dGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25z
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RP
cGVuR0xDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZh
bGlkYXRlRGVwdGhTdGVuY2lsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmxpbmVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bGlu
a1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBpeGVsU3Rv
cmVpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwb2x5Z29uT2Zmc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVCdWZmZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29t
cGlsZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHNB
bmRDb252ZXJ0VG9CR1JBSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzeXN0ZW1BbGxvd3NNdWx0aXNhbXBsaW5nT25B
VElDYXJkcyk6IE5vdyBhIG1lbWJlciBmdW5jdGlvbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcik6
CisKIDIwMTItMDctMDQgIEpvaG4gTWVsbG9yICA8am9obm1lQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBUZXh0IEF1dG9zaXppbmc6IEFkZCBiYXNpYyBmcmFtZXdvcmsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCmluZGV4IGRlN2JjYzY0ZjM5ZWJkYTM2Yjc3NDY5MzIxYjlhMGRjODkwZWJm
ODguLmM5ZTgzOTQ0N2FlNTNjMmNlMGNjZDJiNzI5MmE0Y2I2MjY5MGRhZGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNjA1NCw2ICs2MDU0LDcgQEAgd2ViY29yZV9zb3VyY2Vz
ICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9PcGVuR0xTaGltcy5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL09wZW5HTFNoaW1zLmggXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wu
Y3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9u
czNET3BlbkdMQ29tbW9uLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21t
b24uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21h
a2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UKaW5kZXggNTE2OWE1
ZGQ1OTczYzdiMGUyODhkYTIxMjMxOTQ3MTg2NTMwZWE4MS4uNTg3ZWRlM2QwNjkwODAzNzNiZWQy
YTMxMjI1MmE1NTc5MjFkY2ZjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1C
bGFja0JlcnJ5LmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQmxhY2tCZXJyeS5j
bWFrZQpAQCAtMjE4LDYgKzIxOCw3IEBAIGlmIChFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJB
TUUpCiBFTkRJRiAoKQogCiBpZiAoRU5BQkxFX1dFQkdMKQorICAgIEFERF9ERUZJTklUSU9OUyAo
LURXVEZfVVNFX09QRU5HTF9FU18yPTEpCiAgICAgTElTVChBUFBFTkQgV2ViQ29yZV9JTkNMVURF
X0RJUkVDVE9SSUVTCiAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUiCiAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wiCkBA
IC0yMjUsNiArMjI2LDExIEBAIGlmIChFTkFCTEVfV0VCR0wpCiAgICAgTElTVChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRHJhd2lu
Z0J1ZmZlckJsYWNrQmVycnkuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvR3JhcGhpY3NDb250ZXh0M0RCbGFja0JlcnJ5LmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCisgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAorICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNw
cAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMu
Y3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQz
RC5jcHAKICAgICApCiBFTkRJRiAoKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJn
ZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCA2NjVmMDNkMTFjNTkwMThj
NzViOWZhNjE0OWU3MjlkZTQ5ZjJiMjlkLi40Y2U2Y2Y2NmUyOWU5OGNlY2U4NWVjYjA0YjVkYTAw
YzkyMzZhODk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTM5NTUsMTUgKzM5NTUsMTkgQEAgY29udGFpbnMo
REVGSU5FUywgRU5BQkxFX1dFQkdMPTEpIHsKIAogICAgIGNvbnRhaW5zKFFUX0NPTkZJRywgb3Bl
bmdsKSB8IGNvbnRhaW5zKFFUX0NPTkZJRywgb3BlbmdsZXMyKSB7CiAgICAgICAgICFjb250YWlu
cyhRVF9DT05GSUcsIG9wZW5nbGVzMikgewotICAgICAgICAgICAgU09VUkNFUyArPSBwbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCisgICAgICAgICAg
ICBTT1VSQ0VTICs9IFwKKyAgICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAgXAorICAgICAgICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAKICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dDNET3BlbkdMRVMuY3BwCisgICAgICAgICAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNw
cCBcCisgICAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNE
T3BlbkdMRVMuY3BwCiAgICAgICAgIH0KIAogICAgICAgICBIRUFERVJTICs9IHBsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaAogCiAgICAgICAgIFNPVVJDRVMgKz0g
XAotICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5H
TC5jcHAgXAorICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMz
RE9wZW5HTENvbW1vbi5jcHAgXAogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAogCiAgICAgICAgIEFOR0xFX0RJUiA9
ICQkcmVwbGFjZShQV0QsICJXZWJDb3JlIiwgIlRoaXJkUGFydHkvQU5HTEUiKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCmluZGV4IGNiMTAxMmU3NzY4NWNkOTA4OTY5MjI0YmFhYWYwMTEwNGQxOWQ2OWMuLmYxN2Ew
NDAwOTFmMjlkMzE3MzQ4NWVjNzYyNmE4MWNiNjhkN2VjY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAg
LTM4MDcsNiArMzgwNyw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dl
YlRpbGVkTGF5ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYlRp
bGVkTGF5ZXIubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRl
bnNpb25zM0RPcGVuR0wuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xD
b21tb24uY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCAzYjgzM2VmYTE3NDdmNThlN2E3ODIxM2U2N2M5YTE1ZTNhYjliYzlh
Li42OTkxM2Q3M2UyMTU3NTE2YzNmNzM0ZWExNzdkNDE2MTU3YTIwYzNmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTc5LDYg
KzExNzksOCBAQAogCQk0NDMxMUNEODEyRTRFMjRCMDAwQThEMTkgLyogRE9NRG9jdW1lbnRQcml2
YXRlLmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0NDMxMUNENTEyRTRFMjJEMDAwQThEMTkgLyogRE9NRG9jdW1lbnRQcml2YXRl
LmggKi87IH07CiAJCTQ0MzExQ0Q5MTJFNEUyNTcwMDBBOEQxOSAvKiBET01Eb2N1bWVudEZyYWdt
ZW50UHJpdmF0ZS5oIGluIENvcHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDQzMTFDRDQxMkU0RTIyRDAwMEE4RDE5IC8qIERPTURvY3VtZW50
RnJhZ21lbnRQcml2YXRlLmggKi87IH07CiAJCTQ0MzExRjgyMTJFNEU2NkMwMDBBOEQxOSAvKiBE
T01Eb2N1bWVudEZyYWdtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg1RTcxMTQ1MEFDNUQ1MzQwMDUzMjcwRiAvKiBET01Eb2N1bWVu
dEZyYWdtZW50SW50ZXJuYWwuaCAqLzsgfTsKKwkJNDQ1MEJDMzUxNUE1RTlDQTAwREQxNjIyIC8q
IEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDQ1MEJDMzUxNUE1RTlDQTAwREQxNjIyOyAvKiBFeHRlbnNpb25z
M0RPcGVuR0xDb21tb24uaCAqLzsgfTsKKwkJNDQ1MEJDMzQxNUE1RTlDQTAwREQxNjIyIC8qIEV4
dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0NDUwQkMzNDE1QTVFOUNBMDBERDE2MjI7IC8qIEV4dGVuc2lvbnMz
RE9wZW5HTENvbW1vbi5jcHAgKi87IH07CiAJCTQ0OEEyOUJGMEE0NkQ5Q0IwMDMwNzU5RiAvKiBK
U0hUTUxPcHRpb25zQ29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDQ4QTI5QkQwQTQ2RDlDQjAwMzA3NTlGIC8qIEpTSFRNTE9wdGlvbnND
b2xsZWN0aW9uLmggKi87IH07CiAJCTQ0OEEyOUMwMEE0NkQ5Q0IwMDMwNzU5RiAvKiBKU0hUTUxP
cHRpb25zQ29sbGVjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0NDhBMjlCRTBBNDZEOUNCMDAzMDc1OUYgLyogSlNIVE1MT3B0aW9uc0NvbGxl
Y3Rpb24uY3BwICovOyB9OwogCQk0NDhBRDI3QzBBNDgxMzdBMDAyM0QxNzkgLyogSlNIVE1MT3B0
aW9uc0NvbGxlY3Rpb25DdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDQ4QUQyN0EwQTQ4MTM3OTAwMjNEMTc5IC8qIEpTSFRNTE9wdGlvbnND
b2xsZWN0aW9uQ3VzdG9tLmNwcCAqLzsgfTsKQEAgLTgyMzEsNiArODIzMyw4IEBACiAJCTQ0MjlB
QjA3MENCODRGODEwMDc2NDdDNSAvKiBET01UZXh0RXZlbnRJbnRlcm5hbC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NVGV4dEV2ZW50SW50ZXJuYWwuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQzMTFDRDQxMkU0RTIyRDAwMEE4RDE5IC8qIERPTURvY3Vt
ZW50RnJhZ21lbnRQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERP
TURvY3VtZW50RnJhZ21lbnRQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTQ0MzExQ0Q1MTJFNEUyMkQwMDBBOEQxOSAvKiBET01Eb2N1bWVudFByaXZhdGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NRG9jdW1lbnRQcml2YXRlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ0NTBCQzM0MTVBNUU5Q0EwMEREMTYyMiAvKiBFeHRlbnNp
b25zM0RPcGVuR0xDb21tb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNDQ1MEJDMzUxNUE1RTlDQTAwREQxNjIyIC8qIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1v
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeHRlbnNpb25zM0RPcGVuR0xD
b21tb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQ4QTI5QkQwQTQ2RDlDQjAw
MzA3NTlGIC8qIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0NDhBMjlCRTBBNDZEOUNCMDAzMDc1OUYgLyogSlNIVE1MT3B0aW9uc0Nv
bGxlY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSFRN
TE9wdGlvbnNDb2xsZWN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQ4
QUQyN0EwQTQ4MTM3OTAwMjNEMTc5IC8qIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSFRNTE9wdGlvbnNDb2xs
ZWN0aW9uQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxNjQxLDYg
KzIxNjQ1LDggQEAKIAkJRkJDMjIwREQxMjM3RkJFQjAwQkNGNzg4IC8qIG9wZW5nbCAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNDQ1MEJDMzQxNUE1RTlD
QTAwREQxNjIyIC8qIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAgKi8sCisJCQkJNDQ1MEJD
MzUxNUE1RTlDQTAwREQxNjIyIC8qIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oICovLAogCQkJ
CTZFNjdEMkE0MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuY3BwICovLAog
CQkJCTZFNjdEMkE1MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuaCAqLywK
IAkJCQlGQkMyMjBERTEyMzdGQkVCMDBCQ0Y3ODggLyogR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wu
Y3BwICovLApAQCAtMjMwMjMsNiArMjMwMjksNyBAQAogCQkJCTk3NjdDRTBDMTQ1QUJDMTMwMDVF
NjREQiAvKiBFeGNlcHRpb25JbnRlcmZhY2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQk2RTY3RDJB
OTEyODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uczNELmggaW4gSGVhZGVycyAqLywKIAkJCQk2
RTY3RDJBNzEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk0NDUwQkMzNTE1QTVFOUNBMDBERDE2MjIgLyogRXh0ZW5zaW9uczNET3BlbkdM
Q29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk3NzI4Njk0RjE0Rjg4ODI1MDBGNDg0REMgLyog
RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzVFOEI4
OTBFMURFMkQ2MDA3RjI0ODEgLyogRkVCbGVuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc1RThC
OEIwRTFERTJENjAwN0YyNDgxIC8qIEZFQ29sb3JNYXRyaXguaCBpbiBIZWFkZXJzICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
M0QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNE
LmgKaW5kZXggZGJkOWRmZWRlMDEzYTRjYWYzMzI0NjNhZDMyZmM0ZTE1MjgyNjQ2Ny4uMTZkMTJm
MTYzYmQ1ZDFlMDlmMzExNTJlZGRhMWIyYjY1ZTIyZWE0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCkBAIC0yMCw3ICsy
MCw3IEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKICNpZm5kZWYgR3JhcGhpY3NDb250ZXh0M0Rf
aApAQCAtOTEsMTQgKzkxLDEyIEBAIGNvbnN0IFBsYXRmb3JtM0RPYmplY3QgTnVsbFBsYXRmb3Jt
M0RPYmplY3QgPSAwOwogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0NvbnRleHQuaD4KICNlbmRp
ZgogCi0jaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLSNl
bmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBEcmF3aW5nQnVmZmVyOwogY2xhc3Mg
RXh0ZW5zaW9uczNEOwotI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFU
Rk9STShRVCkgfHwgUExBVEZPUk0oRUZMKQorI2lmIFVTRShPUEVOR0xfRVNfMikKK2NsYXNzIEV4
dGVuc2lvbnMzRE9wZW5HTEVTOworI2Vsc2UKIGNsYXNzIEV4dGVuc2lvbnMzRE9wZW5HTDsKICNl
bmRpZgogI2lmIFBMQVRGT1JNKFFUKQpAQCAtOTI0LDYgKzkyMiw3IEBAIHB1YmxpYzoKICAgICAv
LyBpbiBwYXJ0aWN1bGFyIHN0ZW5jaWwgYW5kIGFudGlhbGlhcywgYW5kIGRldGVybWluZSB3aGlj
aCBjb3VsZCBvcgogICAgIC8vIGNvdWxkIG5vdCBiZSBob25vcmVkIGJhc2VkIG9uIHRoZSBjYXBh
YmlsaXRpZXMgb2YgdGhlIE9wZW5HTAogICAgIC8vIGltcGxlbWVudGF0aW9uLgorICAgIHZvaWQg
dmFsaWRhdGVEZXB0aFN0ZW5jaWwoY29uc3QgY2hhciogcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5z
aW9uKTsKICAgICB2b2lkIHZhbGlkYXRlQXR0cmlidXRlcygpOwogCiAgICAgLy8gUmVhZCByZW5k
ZXJpbmcgcmVzdWx0cyBpbnRvIGEgcGl4ZWwgYXJyYXkgd2l0aCB0aGUgc2FtZSBmb3JtYXQgYXMg
dGhlCkBAIC05NTUsMTYgKzk1NCwzMCBAQCBwdWJsaWM6CiAgICAgSGFzaE1hcDxQbGF0Zm9ybTNE
T2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT4gbV9zaGFkZXJTb3VyY2VNYXA7CiAKICAgICBBTkdM
RVdlYktpdEJyaWRnZSBtX2NvbXBpbGVyOworI2VuZGlmCiAKKyNpZiBQTEFURk9STShRVCkgJiYg
ZGVmaW5lZChRVF9PUEVOR0xfRVNfMikKKyAgICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9uczNEUXQ7
CisgICAgT3duUHRyPEV4dGVuc2lvbnMzRFF0PiBtX2V4dGVuc2lvbnM7CisjZWxpZiBQTEFURk9S
TShCTEFDS0JFUlJZKQorICAgIGZyaWVuZCBjbGFzcyBFeHRlbnNpb25zM0RPcGVuR0xFUzsKKyAg
ICBPd25QdHI8RXh0ZW5zaW9uczNET3BlbkdMRVM+IG1fZXh0ZW5zaW9uczsKKyNlbGlmICFQTEFU
Rk9STShDSFJPTUlVTSkKICAgICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9uczNET3BlbkdMOwogICAg
IE93blB0cjxFeHRlbnNpb25zM0RPcGVuR0w+IG1fZXh0ZW5zaW9uczsKKyNlbmRpZgorICAgIGZy
aWVuZCBjbGFzcyBFeHRlbnNpb25zM0RPcGVuR0xDb21tb247CiAKICAgICBBdHRyaWJ1dGVzIG1f
YXR0cnM7CiAgICAgVmVjdG9yPFZlY3RvcjxmbG9hdD4gPiBtX3ZlcnRleEFycmF5OwogCi0gICAg
R0MzRHVpbnQgbV90ZXh0dXJlLCBtX2NvbXBvc2l0b3JUZXh0dXJlOworICAgIEdDM0R1aW50IG1f
dGV4dHVyZTsKKyNpZiAhUExBVEZPUk0oQkxBQ0tCRVJSWSkKKyAgICBHQzNEdWludCBtX2NvbXBv
c2l0b3JUZXh0dXJlOworI2VuZGlmCiAgICAgR0MzRHVpbnQgbV9mYm87Ci0jaWYgVVNFKE9QRU5H
TF9FU18yKQorCisjaWYgIVBMQVRGT1JNKEJMQUNLQkVSUlkpCiAgICAgR0MzRHVpbnQgbV9kZXB0
aEJ1ZmZlcjsKICAgICBHQzNEdWludCBtX3N0ZW5jaWxCdWZmZXI7CiAjZW5kaWYKQEAgLTk4NSwx
MCArOTk4LDExIEBAIHB1YmxpYzoKIAogICAgIC8vIEVycm9ycyByYWlzZWQgYnkgc3ludGhlc2l6
ZUdMRXJyb3IoKS4KICAgICBMaXN0SGFzaFNldDxHQzNEZW51bT4gbV9zeW50aGV0aWNFcnJvcnM7
Ci0jZW5kaWYKIAogICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU7CiAg
ICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZT4gbV9wcml2YXRlOworCisgICAgYm9v
bCBzeXN0ZW1BbGxvd3NNdWx0aXNhbXBsaW5nT25BVElDYXJkcygpOyAKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL09wZW5HTEVTU2hpbXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL09w
ZW5HTEVTU2hpbXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZGI5MTkzM2Y4NWJjMDYxY2M5Yzg1MjU0ZGMzNGYw
OWMyOTNhODA5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvT3BlbkdMRVNTaGltcy5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBPcGVuR0xFU1NoaW1zX2gKKyNkZWZpbmUg
T3BlbkdMRVNTaGltc19oCisKKyNpZiBQTEFURk9STShCTEFDS0JFUlJZKQorI2RlZmluZSBnbEJp
bmRGcmFtZWJ1ZmZlckVYVCBnbEJpbmRGcmFtZWJ1ZmZlcgorI2RlZmluZSBnbEZyYW1lYnVmZmVy
VGV4dHVyZTJERVhUIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQKKyNkZWZpbmUgZ2xCaW5kUmVuZGVy
YnVmZmVyRVhUIGdsQmluZFJlbmRlcmJ1ZmZlcgorI2RlZmluZSBnbFJlbmRlcmJ1ZmZlclN0b3Jh
Z2VFWFQgZ2xSZW5kZXJidWZmZXJTdG9yYWdlCisjZGVmaW5lIGdsRnJhbWVidWZmZXJSZW5kZXJi
dWZmZXJFWFQgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcgorI2RlZmluZSBHTF9SRU5ERVJCVUZG
RVJfRVhUIEdMX1JFTkRFUkJVRkZFUgorI2RlZmluZSBHTF9TVEVOQ0lMX0FUVEFDSE1FTlRfRVhU
IEdMX1NURU5DSUxfQVRUQUNITUVOVAorI2RlZmluZSBnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNF
WFQgZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzCisjZGVmaW5lIGdsRGVsZXRlRnJhbWVidWZmZXJz
RVhUIGdsRGVsZXRlRnJhbWVidWZmZXJzCisjZGVmaW5lIGdsRGVsZXRlUmVuZGVyYnVmZmVyc0VY
VCBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnMKKyNkZWZpbmUgZ2xHZW5SZW5kZXJidWZmZXJzRVhUIGds
R2VuUmVuZGVyYnVmZmVycworI2RlZmluZSBnbEdlbkZyYW1lYnVmZmVyc0VYVCBnbEdlbkZyYW1l
YnVmZmVycworI2RlZmluZSBnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2RVhU
IGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYKKyNkZWZpbmUgZ2xHZXRSZW5k
ZXJidWZmZXJQYXJhbWV0ZXJpdkVYVCBnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2CisjZGVm
aW5lIGdsSXNSZW5kZXJidWZmZXJFWFQgZ2xJc1JlbmRlcmJ1ZmZlcgorI2RlZmluZSBnbElzRnJh
bWVidWZmZXJFWFQgZ2xJc0ZyYW1lYnVmZmVyCisjZGVmaW5lIGdsR2VuZXJhdGVNaXBtYXBFWFQg
Z2xHZW5lcmF0ZU1pcG1hcAorI2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQgR0xfQ09M
T1JfQVRUQUNITUVOVDAKKyNkZWZpbmUgR0xfREVQVEhfQVRUQUNITUVOVF9FWFQgR0xfREVQVEhf
QVRUQUNITUVOVAorI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURV9FWFQgR0xfRlJBTUVC
VUZGRVJfQ09NUExFVEUKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfRVhUIEdMX0ZSQU1FQlVGRkVS
CisjZGVmaW5lIEdMX0RFUFRIMjRfU1RFTkNJTDhfRVhUIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VT
CisjZGVmaW5lIEdMX1JHQkE4IEdMX1JHQkE4X09FUworI2RlZmluZSBHTF9SR0I4IEdMX1JHQjhf
T0VTCisjZGVmaW5lIEdMX1JFQURfRlJBTUVCVUZGRVJfRVhUIDB4OENBOAorI2RlZmluZSBHTF9E
UkFXX0ZSQU1FQlVGRkVSX0VYVCAweDhDQTkKKyNkZWZpbmUgRlJBTUVCVUZGRVJfSU5DT01QTEVU
RV9NVUxUSVNBTVBMRV9FWFQgMHg5MTM0CisjZGVmaW5lIEdMX01BWF9TQU1QTEVTX0VYVCAweDhE
NTcKKyNlbmRpZiAvLyBQTEFURk9STShCTEFDS0JFUlJZKQorCisjZW5kaWYgLy8gT3BlbkdMRVNT
aGltc19oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAKaW5kZXggYWMyOTJkMzc1
MTU3OTJlY2EzMjI5ZTZmNjczODhlYjI4ZTUxZTA5Ni4uZmQxZGFkMDlmMDExYjc2YzllNTllNDg1
MzlhYzljMDNkYWFkYjM2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAKQEAg
LTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0wuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCIKICNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKICNpbmNsdWRl
ICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgogI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCkBAIC0x
NDYsNiArMTQ3LDExIEBAIEdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QoKQog
ICAgIDo6Z2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fZmJvKTsKIH0KIAordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2Uq
IGltYWdlLCB1bnNpZ25lZCBpbnQgZm9ybWF0LCB1bnNpZ25lZCBpbnQgdHlwZSwgYm9vbCBwcmVt
dWx0aXBseUFscGhhLCBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlLCBWZWN0b3I8dWlu
dDhfdD4mIG91dHB1dFZlY3RvcikKIHsKICAgICBpZiAoIWltYWdlKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0NvbnRleHQzRENs
dXR0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFw
aGljc0NvbnRleHQzRENsdXR0ZXIuY3BwCmluZGV4IGNhMGZmZGMyYmNiOWQ4OTM4NmIxNWQ0OGMz
MjM4ZWIzZWY5YjA5NTQuLjdlMjJmNzIyZDRiZDM1M2QzMzFiZGM2MDc3NWU3ZDcxYWEwNWU1MWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3Jh
cGhpY3NDb250ZXh0M0RDbHV0dGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzQ29udGV4dDNEQ2x1dHRlci5jcHAKQEAgLTU2LDYgKzU2
LDExIEBAIEdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QoKQogICAgIG5vdElt
cGxlbWVudGVkKCk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJD
b21waWxlcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwogYm9vbCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0SW1hZ2VEYXRhKEltYWdlKiBpbWFnZSwgdW5zaWduZWQgaW50IGZvcm1hdCwg
dW5zaWduZWQgaW50IHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1t
YUFuZENvbG9yUHJvZmlsZSwgVmVjdG9yPHVpbnQ4X3Q+JiBvdXRwdXRWZWN0b3IpCiB7CiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAKaW5kZXggNGFhMzQx
YzMyNmM3MzU3YjExMGM5ODNkMDM5Y2NkN2JjMzMxNjYxMi4uYmJlNzdiYjc5ODU0YzkyMzdlOGNi
NjcwNmM5NzQ2NTk5NTYyYjkwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAKQEAgLTQy
LDcgKzQyLDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRXh0ZW5zaW9uczNET3BlbkdMOjpF
eHRlbnNpb25zM0RPcGVuR0woR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCi0gICAgOiBtX2lu
aXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucyhmYWxzZSkKKyAgICA6IEV4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbihjb250ZXh0KQorICAgICwgbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lv
bnMoZmFsc2UpCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKIHsKIH0KQEAgLTUxLDkxICs1Miw2
IEBAIEV4dGVuc2lvbnMzRE9wZW5HTDo6fkV4dGVuc2lvbnMzRE9wZW5HTCgpCiB7CiB9CiAKLWJv
b2wgRXh0ZW5zaW9uczNET3BlbkdMOjpzdXBwb3J0cyhjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0g
ICAgLy8gTm90ZSBvbiBzdXBwb3J0IGZvciBCR1JBOgotICAgIC8vCi0gICAgLy8gRm9yIE9wZW5H
TCBFUzIuMCwgcmVxdWlyZXMgY2hlY2tpbmcgZm9yCi0gICAgLy8gR0xfRVhUX3RleHR1cmVfZm9y
bWF0X0JHUkE4ODg4IGFuZCBHTF9FWFRfcmVhZF9mb3JtYXRfYmdyYS4KLSAgICAvLyBGb3IgZGVz
a3RvcCBHTCwgQkdSQSBoYXMgYmVlbiBzdXBwb3J0ZWQgc2luY2UgT3BlbkdMIDEuMi4KLSAgICAv
LwotICAgIC8vIEhvd2V2ZXIsIG5vdGUgdGhhdCB0aGUgR0wgRVMyIGV4dGVuc2lvbiByZXF1aXJl
cyB0aGUKLSAgICAvLyBpbnRlcm5hbEZvcm1hdCB0byBnbFRleEltYWdlMkQoKSBiZSBHTF9CR1JB
LCB3aGlsZSBkZXNrdG9wIEdMCi0gICAgLy8gd2lsbCBub3QgYWNjZXB0IEdMX0JHUkEgKG11c3Qg
YmUgR0xfUkdCQSksIHNvIHRoaXMgbXVzdCBiZQotICAgIC8vIGNoZWNrZWQgb24gZWFjaCBwbGF0
Zm9ybS4gRGVza3RvcCBHTCBvZmZlcnMgbmVpdGhlcgotICAgIC8vIEdMX0VYVF90ZXh0dXJlX2Zv
cm1hdF9CR1JBODg4OCBvciBHTF9FWFRfcmVhZF9mb3JtYXRfYmdyYSwgc28KLSAgICAvLyB0cmVh
dCB0aGVtIGFzIHVuc3VwcG9ydGVkIGhlcmUuCi0gICAgaWYgKCFtX2luaXRpYWxpemVkQXZhaWxh
YmxlRXh0ZW5zaW9ucykgewotICAgICAgICBTdHJpbmcgZXh0ZW5zaW9uc1N0cmluZyhyZWludGVy
cHJldF9jYXN0PGNvbnN0IGNoYXIqPig6OmdsR2V0U3RyaW5nKEdMX0VYVEVOU0lPTlMpKSk7Ci0g
ICAgICAgIFZlY3RvcjxTdHJpbmc+IGF2YWlsYWJsZUV4dGVuc2lvbnM7Ci0gICAgICAgIGV4dGVu
c2lvbnNTdHJpbmcuc3BsaXQoIiAiLCBhdmFpbGFibGVFeHRlbnNpb25zKTsKLSAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBhdmFpbGFibGVFeHRlbnNpb25zLnNpemUoKTsgKytpKQotICAg
ICAgICAgICAgbV9hdmFpbGFibGVFeHRlbnNpb25zLmFkZChhdmFpbGFibGVFeHRlbnNpb25zW2ld
KTsKLSAgICAgICAgbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnMgPSB0cnVlOwotICAg
IH0KLSAgICAKLSAgICAvLyBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0IGFuZCBHTF9BTkdMRV9m
cmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSBhcmUgImZha2UiLiBUaGV5IGFyZSBpbXBsZW1lbnRlZCB1
c2luZyBvdGhlcgotICAgIC8vIGV4dGVuc2lvbnMuIEluIHBhcnRpY3VsYXIgR0xfRVhUX2ZyYW1l
YnVmZmVyX2JsaXQgYW5kIEdMX0VYVF9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZQotICAgIGlmIChu
YW1lID09ICJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0IikKLSAgICAgICAgcmV0dXJuIG1fYXZh
aWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfRVhUX2ZyYW1lYnVmZmVyX2JsaXQiKTsKLSAg
ICBpZiAobmFtZSA9PSAiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKQotICAgICAg
ICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9FWFRfZnJhbWVidWZm
ZXJfbXVsdGlzYW1wbGUiKTsKLQotICAgIC8vIERlc2t0b3AgR0wgYWx3YXlzIHN1cHBvcnRzIEdM
X09FU19yZ2I4X3JnYmE4LgotICAgIGlmIChuYW1lID09ICJHTF9PRVNfcmdiOF9yZ2JhOCIpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gSWYgR0xfQVJCX3RleHR1cmVfZmxvYXQgaXMg
YXZhaWxhYmxlIHRoZW4gd2UgcmVwb3J0IEdMX09FU190ZXh0dXJlX2Zsb2F0IGFuZAotICAgIC8v
IEdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQgYXMgYXZhaWxhYmxlLgotICAgIGlmIChuYW1lID09
ICJHTF9PRVNfdGV4dHVyZV9mbG9hdCIgfHwgbmFtZSA9PSAiR0xfT0VTX3RleHR1cmVfaGFsZl9m
bG9hdCIpCi0gICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdM
X0FSQl90ZXh0dXJlX2Zsb2F0Iik7Ci0gICAgCi0gICAgLy8gR0xfT0VTX3ZlcnRleF9hcnJheV9v
YmplY3QKLSAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKQotICAg
ICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9BUFBMRV92ZXJ0
ZXhfYXJyYXlfb2JqZWN0Iik7Ci0KLSAgICAvLyBEZXNrdG9wIEdMIGFsd2F5cyBzdXBwb3J0cyB0
aGUgc3RhbmRhcmQgZGVyaXZhdGl2ZSBmdW5jdGlvbnMKLSAgICBpZiAobmFtZSA9PSAiR0xfT0VT
X3N0YW5kYXJkX2Rlcml2YXRpdmVzIikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAo
bmFtZSA9PSAiR0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIikKLSAgICAgICAgcmV0
dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfRVhUX3RleHR1cmVfZmlsdGVy
X2FuaXNvdHJvcGljIik7Ci0KLSAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRh
aW5zKG5hbWUpOwotfQotCi12b2lkIEV4dGVuc2lvbnMzRE9wZW5HTDo6ZW5zdXJlRW5hYmxlZChj
b25zdCBTdHJpbmcmIG5hbWUpCi17Ci0jaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShRVCkg
fHwgUExBVEZPUk0oR1RLKQotICAgIGlmIChuYW1lID09ICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZh
dGl2ZXMiKSB7Ci0gICAgICAgIC8vIEVuYWJsZSBzdXBwb3J0IGluIEFOR0xFIChpZiBub3QgZW5h
YmxlZCBhbHJlYWR5KQotICAgICAgICBBTkdMRVdlYktpdEJyaWRnZSYgY29tcGlsZXIgPSBtX2Nv
bnRleHQtPm1fY29tcGlsZXI7Ci0gICAgICAgIFNoQnVpbHRJblJlc291cmNlcyBBTkdMRVJlc291
cmNlcyA9IGNvbXBpbGVyLmdldFJlc291cmNlcygpOwotICAgICAgICBpZiAoIUFOR0xFUmVzb3Vy
Y2VzLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcykgewotICAgICAgICAgICAgQU5HTEVSZXNvdXJj
ZXMuT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzID0gMTsKLSAgICAgICAgICAgIGNvbXBpbGVyLnNl
dFJlc291cmNlcyhBTkdMRVJlc291cmNlcyk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZWxzZQotICAg
IEFTU0VSVF9VTlVTRUQobmFtZSwgc3VwcG9ydHMobmFtZSkpOwotI2VuZGlmCi19Ci0KLWJvb2wg
RXh0ZW5zaW9uczNET3BlbkdMOjppc0VuYWJsZWQoY29uc3QgU3RyaW5nJiBuYW1lKQotewotI2lm
IFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKLSAgICBpZiAo
bmFtZSA9PSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikgewotICAgICAgICBBTkdMRVdl
YktpdEJyaWRnZSYgY29tcGlsZXIgPSBtX2NvbnRleHQtPm1fY29tcGlsZXI7Ci0gICAgICAgIHJl
dHVybiBjb21waWxlci5nZXRSZXNvdXJjZXMoKS5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXM7Ci0g
ICAgfQotI2VuZGlmCi0gICAgcmV0dXJuIHN1cHBvcnRzKG5hbWUpOwotfQotCi1pbnQgRXh0ZW5z
aW9uczNET3BlbkdMOjpnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkKLXsKLSAgICByZXR1cm4g
R3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SOwotfQogCiB2b2lkIEV4dGVuc2lvbnMzRE9wZW5H
TDo6YmxpdEZyYW1lYnVmZmVyKGxvbmcgc3JjWDAsIGxvbmcgc3JjWTAsIGxvbmcgc3JjWDEsIGxv
bmcgc3JjWTEsIGxvbmcgZHN0WDAsIGxvbmcgZHN0WTAsIGxvbmcgZHN0WDEsIGxvbmcgZHN0WTEs
IHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQgbG9uZyBmaWx0ZXIpCiB7CkBAIC0xOTQsMTkg
KzExMCw0OSBAQCB2b2lkIEV4dGVuc2lvbnMzRE9wZW5HTDo6YmluZFZlcnRleEFycmF5T0VTKFBs
YXRmb3JtM0RPYmplY3QgYXJyYXkpCiAjZW5kaWYKIH0KIAotU3RyaW5nIEV4dGVuc2lvbnMzRE9w
ZW5HTDo6Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRmb3JtM0RPYmplY3Qgc2hh
ZGVyKQotewotICAgIFVOVVNFRF9QQVJBTShzaGFkZXIpOwotICAgIHJldHVybiAiIjsKLSAgICAv
LyBGSVhNRTogaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24gYW5kIGFkZCBHTF9BTkdMRV90cmFuc2xh
dGVkX3NoYWRlcl9zb3VyY2UgaW4gc3VwcG9ydHMoKS4KLX0KLQogdm9pZCBFeHRlbnNpb25zM0RP
cGVuR0w6OmNvcHlUZXh0dXJlQ0hST01JVU0oR0MzRGVudW0sIFBsYXRmb3JtM0RPYmplY3QsIFBs
YXRmb3JtM0RPYmplY3QsIEdDM0RpbnQsIEdDM0RlbnVtKQogewogICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQgdGhpcyBmdW5jdGlvbiBhbmQgYWRkIEdMX0NIUk9NSVVNX2NvcHlfdGV4dHVyZSBpbiBz
dXBwb3J0cygpLgogICAgIHJldHVybjsKIH0KIAorYm9vbCBFeHRlbnNpb25zM0RPcGVuR0w6OnN1
cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICAvLyBHTF9BTkdMRV9m
cmFtZWJ1ZmZlcl9ibGl0IGFuZCBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSBhcmUg
ImZha2UiLiBUaGV5IGFyZSBpbXBsZW1lbnRlZCB1c2luZyBvdGhlcgorICAgIC8vIGV4dGVuc2lv
bnMuIEluIHBhcnRpY3VsYXIgR0xfRVhUX2ZyYW1lYnVmZmVyX2JsaXQgYW5kIEdMX0VYVF9mcmFt
ZWJ1ZmZlcl9tdWx0aXNhbXBsZQorICAgIGlmIChuYW1lID09ICJHTF9BTkdMRV9mcmFtZWJ1ZmZl
cl9ibGl0IikKKyAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygi
R0xfRVhUX2ZyYW1lYnVmZmVyX2JsaXQiKTsKKyAgICBpZiAobmFtZSA9PSAiR0xfQU5HTEVfZnJh
bWVidWZmZXJfbXVsdGlzYW1wbGUiKQorICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNp
b25zLmNvbnRhaW5zKCJHTF9FWFRfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKTsKKworICAgIC8v
IERlc2t0b3AgR0wgYWx3YXlzIHN1cHBvcnRzIEdMX09FU19yZ2I4X3JnYmE4LgorICAgIGlmIChu
YW1lID09ICJHTF9PRVNfcmdiOF9yZ2JhOCIpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
Ly8gSWYgR0xfQVJCX3RleHR1cmVfZmxvYXQgaXMgYXZhaWxhYmxlIHRoZW4gd2UgcmVwb3J0IEdM
X09FU190ZXh0dXJlX2Zsb2F0IGFuZAorICAgIC8vIEdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQg
YXMgYXZhaWxhYmxlLgorICAgIGlmIChuYW1lID09ICJHTF9PRVNfdGV4dHVyZV9mbG9hdCIgfHwg
bmFtZSA9PSAiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpCisgICAgICAgIHJldHVybiBtX2F2
YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0FSQl90ZXh0dXJlX2Zsb2F0Iik7CisKKyAg
ICAvLyBHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdAorICAgIGlmIChuYW1lID09ICJHTF9PRVNf
dmVydGV4X2FycmF5X29iamVjdCIpCisgICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lv
bnMuY29udGFpbnMoIkdMX0FQUExFX3ZlcnRleF9hcnJheV9vYmplY3QiKTsKKworICAgIC8vIERl
c2t0b3AgR0wgYWx3YXlzIHN1cHBvcnRzIHRoZSBzdGFuZGFyZCBkZXJpdmF0aXZlIGZ1bmN0aW9u
cworICAgIGlmIChuYW1lID09ICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChuYW1lID09ICJHTF9FWFRfdGV4dHVyZV9maWx0ZXJf
YW5pc290cm9waWMiKQorICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRh
aW5zKCJHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTsKKworICAgIHJldHVybiBt
X2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMobmFtZSk7Cit9CisKK1N0cmluZyBFeHRlbnNp
b25zM0RPcGVuR0w6OmdldEV4dGVuc2lvbnMoKQoreworICAgIHJldHVybiBTdHJpbmcocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhHTF9FWFRFTlNJT05TKSkpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5z
aW9uczNET3BlbkdMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
RXh0ZW5zaW9uczNET3BlbkdMLmgKaW5kZXggMmIyZDMwYTA5MGU1NGZjYTFkMDY0NjJhZTcxZGQ3
ZWM4NzJiNTQ0Yy4uYTI3ODliZGNjYzA1ZGVhNGQ2ZGY5YjNiNGM0Nzc3ZjdiMTllYTEyMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lv
bnMzRE9wZW5HTC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9FeHRlbnNpb25zM0RPcGVuR0wuaApAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBFeHRlbnNp
b25zM0RPcGVuR0xfaAogI2RlZmluZSBFeHRlbnNpb25zM0RPcGVuR0xfaAogCi0jaW5jbHVkZSAi
RXh0ZW5zaW9uczNELmgiCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmgiCiAK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CkBAIC0zNCwxNSArMzQsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBFeHRl
bnNpb25zM0RPcGVuR0wgOiBwdWJsaWMgRXh0ZW5zaW9uczNEIHsKK2NsYXNzIEV4dGVuc2lvbnMz
RE9wZW5HTCA6IHB1YmxpYyBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24gewogcHVibGljOgogICAg
IHZpcnR1YWwgfkV4dGVuc2lvbnMzRE9wZW5HTCgpOwogCiAgICAgLy8gRXh0ZW5zaW9uczNEIG1l
dGhvZHMuCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzKGNvbnN0IFN0cmluZyYpOwotICAgIHZp
cnR1YWwgdm9pZCBlbnN1cmVFbmFibGVkKGNvbnN0IFN0cmluZyYpOwotICAgIHZpcnR1YWwgYm9v
bCBpc0VuYWJsZWQoY29uc3QgU3RyaW5nJik7Ci0gICAgdmlydHVhbCBpbnQgZ2V0R3JhcGhpY3NS
ZXNldFN0YXR1c0FSQigpOwogICAgIHZpcnR1YWwgdm9pZCBibGl0RnJhbWVidWZmZXIobG9uZyBz
cmNYMCwgbG9uZyBzcmNZMCwgbG9uZyBzcmNYMSwgbG9uZyBzcmNZMSwgbG9uZyBkc3RYMCwgbG9u
ZyBkc3RZMCwgbG9uZyBkc3RYMSwgbG9uZyBkc3RZMSwgdW5zaWduZWQgbG9uZyBtYXNrLCB1bnNp
Z25lZCBsb25nIGZpbHRlcik7CiAgICAgdmlydHVhbCB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2VN
dWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1
bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25l
ZCBsb25nIGhlaWdodCk7CiAgICAgCkBAIC01MCwxNCArNDYsMTYgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBkZWxldGVWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KTsKICAgICB2
aXJ0dWFsIEdDM0Rib29sZWFuIGlzVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCk7CiAg
ICAgdmlydHVhbCB2b2lkIGJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KTsKLSAg
ICB2aXJ0dWFsIFN0cmluZyBnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoUGxhdGZvcm0z
RE9iamVjdCk7CiAgICAgdmlydHVhbCB2b2lkIGNvcHlUZXh0dXJlQ0hST01JVU0oR0MzRGVudW0s
IFBsYXRmb3JtM0RPYmplY3QsIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RpbnQsIEdDM0RlbnVtKTsK
IAotcHJpdmF0ZToKK3Byb3RlY3RlZDoKICAgICAvLyBUaGlzIGNsYXNzIG9ubHkgbmVlZHMgdG8g
YmUgaW5zdGFudGlhdGVkIGJ5IEdyYXBoaWNzQ29udGV4dDNEIGltcGxlbWVudGF0aW9ucy4KICAg
ICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiAgICAgRXh0ZW5zaW9uczNET3BlbkdM
KEdyYXBoaWNzQ29udGV4dDNEKik7CiAKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNFeHRlbnNp
b24oY29uc3QgV1RGOjpTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRFeHRlbnNpb25z
KCk7CisKICAgICBib29sIG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zOwogICAgIEhh
c2hTZXQ8U3RyaW5nPiBtX2F2YWlsYWJsZUV4dGVuc2lvbnM7CiAgICAgCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdM
Q29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRl
bnNpb25zM0RPcGVuR0xDb21tb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhlNDY4ZDU0ZDdkYzNhYTI0NDdm
NzVhNDgyOWU0NGFiYzAzOWZmNjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcApAQCAt
MCwwICsxLDE0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rp
b24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpZiBFTkFCTEUoV0VCR0wpCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9u
LmgiCisKKyNpbmNsdWRlICJBTkdMRVdlYktpdEJyaWRnZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dDNELmgiCisKKyNpZiBQTEFURk9STShCTEFDS0JFUlJZKQorI2luY2x1ZGUgPEJsYWNr
QmVycnlQbGF0Zm9ybUxvZy5oPgorI2VuZGlmCisKKyNpZiBVU0UoT1BFTkdMX0VTXzIpCisjaW5j
bHVkZSAiT3BlbkdMRVNTaGltcy5oIgorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2luY2x1ZGUg
PEdMRVMyL2dsMmV4dC5oPgorI2VsaWYgUExBVEZPUk0oTUFDKQorI2luY2x1ZGUgPE9wZW5HTC9n
bC5oPgorI2VsaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpIHx8IFBMQVRGT1JNKFFU
KQorI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitFeHRlbnNpb25zM0RPcGVuR0xDb21tb246
OkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbihHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKKyAg
ICA6IG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zKGZhbHNlKQorICAgICwgbV9jb250
ZXh0KGNvbnRleHQpCit7Cit9CisKK0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6fkV4dGVuc2lv
bnMzRE9wZW5HTENvbW1vbigpCit7Cit9CisKK2Jvb2wgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9u
OjpzdXBwb3J0cyhjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgaWYgKCFtX2luaXRpYWxpemVk
QXZhaWxhYmxlRXh0ZW5zaW9ucykKKyAgICAgICAgaW5pdGlhbGl6ZUF2YWlsYWJsZUV4dGVuc2lv
bnMoKTsKKworICAgIHJldHVybiBzdXBwb3J0c0V4dGVuc2lvbihuYW1lKTsKK30KKwordm9pZCBF
eHRlbnNpb25zM0RPcGVuR0xDb21tb246OmVuc3VyZUVuYWJsZWQoY29uc3QgU3RyaW5nJiBuYW1l
KQoreworICAgIGlmIChuYW1lID09ICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSB7Cisg
ICAgICAgIC8vIEVuYWJsZSBzdXBwb3J0IGluIEFOR0xFIChpZiBub3QgZW5hYmxlZCBhbHJlYWR5
KQorICAgICAgICBBTkdMRVdlYktpdEJyaWRnZSYgY29tcGlsZXIgPSBtX2NvbnRleHQtPm1fY29t
cGlsZXI7CisgICAgICAgIFNoQnVpbHRJblJlc291cmNlcyBBTkdMRVJlc291cmNlcyA9IGNvbXBp
bGVyLmdldFJlc291cmNlcygpOworICAgICAgICBpZiAoIUFOR0xFUmVzb3VyY2VzLk9FU19zdGFu
ZGFyZF9kZXJpdmF0aXZlcykgeworICAgICAgICAgICAgQU5HTEVSZXNvdXJjZXMuT0VTX3N0YW5k
YXJkX2Rlcml2YXRpdmVzID0gMTsKKyAgICAgICAgICAgIGNvbXBpbGVyLnNldFJlc291cmNlcyhB
TkdMRVJlc291cmNlcyk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgRXh0ZW5zaW9uczNE
T3BlbkdMQ29tbW9uOjppc0VuYWJsZWQoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmIChu
YW1lID09ICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSB7CisgICAgICAgIEFOR0xFV2Vi
S2l0QnJpZGdlJiBjb21waWxlciA9IG1fY29udGV4dC0+bV9jb21waWxlcjsKKyAgICAgICAgcmV0
dXJuIGNvbXBpbGVyLmdldFJlc291cmNlcygpLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlczsKKyAg
ICB9CisgICAgcmV0dXJuIHN1cHBvcnRzKG5hbWUpOworfQorCitpbnQgRXh0ZW5zaW9uczNET3Bl
bkdMQ29tbW9uOjpnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkKK3sKKyAgICByZXR1cm4gR3Jh
cGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SOworfQorCitTdHJpbmcgRXh0ZW5zaW9uczNET3BlbkdM
Q29tbW9uOjpnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoUGxhdGZvcm0zRE9iamVjdCBz
aGFkZXIpCit7CisgICAgQVNTRVJUKHNoYWRlcik7CisgICAgaW50IEdMc2hhZGVyVHlwZTsKKyAg
ICBBTkdMRVNoYWRlclR5cGUgc2hhZGVyVHlwZTsKKworICAgIEFOR0xFV2ViS2l0QnJpZGdlJiBj
b21waWxlciA9IG1fY29udGV4dC0+bV9jb21waWxlcjsKKworICAgIG1fY29udGV4dC0+Z2V0U2hh
ZGVyaXYoc2hhZGVyLCBHcmFwaGljc0NvbnRleHQzRDo6U0hBREVSX1RZUEUsICZHTHNoYWRlclR5
cGUpOworCisgICAgaWYgKEdMc2hhZGVyVHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVY
X1NIQURFUikKKyAgICAgICAgc2hhZGVyVHlwZSA9IFNIQURFUl9UWVBFX1ZFUlRFWDsKKyAgICBl
bHNlIGlmIChHTHNoYWRlclR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURF
UikKKyAgICAgICAgc2hhZGVyVHlwZSA9IFNIQURFUl9UWVBFX0ZSQUdNRU5UOworICAgIGVsc2UK
KyAgICAgICAgcmV0dXJuICIiOyAvLyBJbnZhbGlkIHNoYWRlciB0eXBlLgorCisgICAgSGFzaE1h
cDxQbGF0Zm9ybTNET2JqZWN0LCBHcmFwaGljc0NvbnRleHQzRDo6U2hhZGVyU291cmNlRW50cnk+
OjppdGVyYXRvciByZXN1bHQgPSBtX2NvbnRleHQtPm1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hh
ZGVyKTsKKworICAgIGlmIChyZXN1bHQgPT0gbV9jb250ZXh0LT5tX3NoYWRlclNvdXJjZU1hcC5l
bmQoKSkKKyAgICAgICAgcmV0dXJuICIiOworCisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OlNoYWRl
clNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+c2Vjb25kOworCisgICAgU3RyaW5nIHRyYW5z
bGF0ZWRTaGFkZXJTb3VyY2U7CisgICAgU3RyaW5nIHNoYWRlckluZm9Mb2c7CisKKyAgICBib29s
IGlzVmFsaWQgPSBjb21waWxlci52YWxpZGF0ZVNoYWRlclNvdXJjZShlbnRyeS5zb3VyY2UudXRm
OCgpLmRhdGEoKSwgc2hhZGVyVHlwZSwgdHJhbnNsYXRlZFNoYWRlclNvdXJjZSwgc2hhZGVySW5m
b0xvZyk7CisKKyAgICBlbnRyeS5sb2cgPSBzaGFkZXJJbmZvTG9nOworICAgIGVudHJ5LmlzVmFs
aWQgPSBpc1ZhbGlkOworCisgICAgaWYgKCFpc1ZhbGlkKQorICAgICAgICByZXR1cm4gIiI7CisK
KyAgICByZXR1cm4gdHJhbnNsYXRlZFNoYWRlclNvdXJjZTsKK30KKwordm9pZCBFeHRlbnNpb25z
M0RPcGVuR0xDb21tb246OmluaXRpYWxpemVBdmFpbGFibGVFeHRlbnNpb25zKCkKK3sKKyAgICBT
dHJpbmcgZXh0ZW5zaW9uc1N0cmluZyA9IGdldEV4dGVuc2lvbnMoKTsKKyAgICBWZWN0b3I8U3Ry
aW5nPiBhdmFpbGFibGVFeHRlbnNpb25zOworICAgIGV4dGVuc2lvbnNTdHJpbmcuc3BsaXQoIiAi
LCBhdmFpbGFibGVFeHRlbnNpb25zKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGF2YWls
YWJsZUV4dGVuc2lvbnMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fYXZhaWxhYmxlRXh0ZW5zaW9u
cy5hZGQoYXZhaWxhYmxlRXh0ZW5zaW9uc1tpXSk7CisgICAgbV9pbml0aWFsaXplZEF2YWlsYWJs
ZUV4dGVuc2lvbnMgPSB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uOTAxODM5ZTZlM2U0Yjk1YTFlNTY2Y2QxMWY4YTI3ZDY5YmViMzllNQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRl
bnNpb25zM0RPcGVuR0xDb21tb24uaApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBF
eHRlbnNpb25zM0RPcGVuR0xDb21tb25faAorI2RlZmluZSBFeHRlbnNpb25zM0RPcGVuR0xDb21t
b25faAorCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQzRC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nSGFzaC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEV4dGVuc2lvbnMz
RE9wZW5HTENvbW1vbiA6IHB1YmxpYyBFeHRlbnNpb25zM0QgeworcHVibGljOgorICAgIHZpcnR1
YWwgfkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbigpOworCisgICAgLy8gRXh0ZW5zaW9uczNEIG1l
dGhvZHMuCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzKGNvbnN0IFN0cmluZyYpOworICAgIHZp
cnR1YWwgdm9pZCBlbnN1cmVFbmFibGVkKGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgYm9v
bCBpc0VuYWJsZWQoY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCBpbnQgZ2V0R3JhcGhpY3NS
ZXNldFN0YXR1c0FSQigpOworCisgICAgdmlydHVhbCBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVZl
cnRleEFycmF5T0VTKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVWZXJ0ZXhBcnJheU9F
UyhQbGF0Zm9ybTNET2JqZWN0KSA9IDA7CisgICAgdmlydHVhbCBHQzNEYm9vbGVhbiBpc1ZlcnRl
eEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYmluZFZl
cnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKKworICAgIHZpcnR1YWwgU3RyaW5n
IGdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShQbGF0Zm9ybTNET2JqZWN0KTsKKworcHJv
dGVjdGVkOgorICAgIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbihHcmFwaGljc0NvbnRleHQzRCop
OworCisgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVBdmFpbGFibGVFeHRlbnNpb25zKCk7Cisg
ICAgdmlydHVhbCBib29sIHN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYpID0gMDsKKyAg
ICB2aXJ0dWFsIFN0cmluZyBnZXRFeHRlbnNpb25zKCkgPSAwOworCisgICAgYm9vbCBtX2luaXRp
YWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9uczsKKyAgICBIYXNoU2V0PFN0cmluZz4gbV9hdmFpbGFi
bGVFeHRlbnNpb25zOworCisgICAgLy8gV2VhayBwb2ludGVyIGJhY2sgdG8gR3JhcGhpY3NDb250
ZXh0M0QKKyAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNp
b25zM0RPcGVuR0xFUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjljNjUwNzE1ZWVlMjIzYTlk
MDc3MGNkZDI2MWQxNDE1MjFjM2YyYTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuY3BwCkBAIC0w
LDAgKzEsMTQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlv
biBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpZiBFTkFCTEUoV0VCR0wpCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMRVMuaCIKKwor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSA8RUdML2VnbC5oPgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0V4dGVuc2lv
bnMzRE9wZW5HTEVTOjpFeHRlbnNpb25zM0RPcGVuR0xFUyhHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCkKKyAgICA6IEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbihjb250ZXh0KQorICAgICwgbV9z
dXBwb3J0c09FU3ZlcnRleEFycmF5T2JqZWN0KGZhbHNlKQorICAgICwgbV9zdXBwb3J0c0lNR011
bHRpc2FtcGxlZFJlbmRlclRvVGV4dHVyZShmYWxzZSkKKyAgICAsIG1fZ2xGcmFtZWJ1ZmZlclRl
eHR1cmUyRE11bHRpc2FtcGxlSU1HKDApCisgICAgLCBtX2dsUmVuZGVyYnVmZmVyU3RvcmFnZU11
bHRpc2FtcGxlSU1HKDApCisgICAgLCBtX2dsQmluZFZlcnRleEFycmF5T0VTKDApCisgICAgLCBt
X2dsRGVsZXRlVmVydGV4QXJyYXlzT0VTKDApCisgICAgLCBtX2dsR2VuVmVydGV4QXJyYXlzT0VT
KDApCisgICAgLCBtX2dsSXNWZXJ0ZXhBcnJheU9FUygwKQoreworfQorCitFeHRlbnNpb25zM0RP
cGVuR0xFUzo6fkV4dGVuc2lvbnMzRE9wZW5HTEVTKCkKK3sKK30KKwordm9pZCBFeHRlbnNpb25z
M0RPcGVuR0xFUzo6ZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRyh1bnNpZ25lZCBs
b25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHRleHRh
cmdldCwgdW5zaWduZWQgaW50IHRleHR1cmUsIGludCBsZXZlbCwgdW5zaWduZWQgbG9uZyBzYW1w
bGVzKQoreworICAgIGlmIChtX2dsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRykK
KyAgICAgICAgbV9nbEZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcodGFyZ2V0LCBh
dHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsLCBzYW1wbGVzKTsKKyAgICBlbHNl
CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworfQorCit2b2lkIEV4dGVuc2lvbnMzRE9wZW5HTEVTOjpyZW5kZXJidWZmZXJTdG9yYWdl
TXVsdGlzYW1wbGVJTUcodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgc2FtcGxl
cywgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5z
aWduZWQgbG9uZyBoZWlnaHQpCit7CisgICAgaWYgKG1fZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVs
dGlzYW1wbGVJTUcpCisgICAgICAgIG1fZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJ
TUcodGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAg
ZWxzZQorICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKK30KKworUGxhdGZvcm0zRE9iamVjdCBFeHRlbnNpb25zM0RPcGVuR0xFUzo6Y3Jl
YXRlVmVydGV4QXJyYXlPRVMoKQoreworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKG1fZ2xHZW5WZXJ0ZXhBcnJheXNPRVMpIHsKKyAgICAgICAgR0x1aW50IGFy
cmF5ID0gMDsKKyAgICAgICAgbV9nbEdlblZlcnRleEFycmF5c09FUygxLCAmYXJyYXkpOworICAg
ICAgICByZXR1cm4gYXJyYXk7CisgICAgfQorCisgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xF
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgRXh0
ZW5zaW9uczNET3BlbkdMRVM6OmRlbGV0ZVZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3Qg
YXJyYXkpCit7CisgICAgaWYgKCFhcnJheSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAobV9nbERlbGV0ZVZlcnRleEFycmF5
c09FUykKKyAgICAgICAgbV9nbERlbGV0ZVZlcnRleEFycmF5c09FUygxLCAmYXJyYXkpOworICAg
IGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Cit9CisKK0dDM0Rib29sZWFuIEV4dGVuc2lvbnMzRE9wZW5HTEVTOjppc1ZlcnRl
eEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCit7CisgICAgaWYgKCFhcnJheSkKKyAg
ICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBpZiAobV9nbElzVmVydGV4QXJyYXlPRVMpCisgICAgICAgIHJldHVybiBtX2ds
SXNWZXJ0ZXhBcnJheU9FUyhhcnJheSk7CisKKyAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQg
RXh0ZW5zaW9uczNET3BlbkdMRVM6OmJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0
IGFycmF5KQoreworICAgIGlmICghYXJyYXkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKG1fZ2xCaW5kVmVydGV4QXJyYXlP
RVMpCisgICAgICAgIG1fZ2xCaW5kVmVydGV4QXJyYXlPRVMoYXJyYXkpOworICAgIGVsc2UKKyAg
ICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
Cit9CisKKworYm9vbCBFeHRlbnNpb25zM0RPcGVuR0xFUzo6c3VwcG9ydHNFeHRlbnNpb24oY29u
c3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmIChtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFp
bnMobmFtZSkpIHsKKyAgICAgICAgaWYgKG5hbWUgPT0gIkdMX09FU192ZXJ0ZXhfYXJyYXlfb2Jq
ZWN0IiAmJiAhbV9zdXBwb3J0c09FU3ZlcnRleEFycmF5T2JqZWN0KSB7CisgICAgICAgICAgICBt
X2dsQmluZFZlcnRleEFycmF5T0VTID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTEJJTkRWRVJURVhB
UlJBWU9FU1BST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbEJpbmRWZXJ0ZXhBcnJheU9FUyIpKTsK
KyAgICAgICAgICAgIG1fZ2xHZW5WZXJ0ZXhBcnJheXNPRVMgPSByZWludGVycHJldF9jYXN0PFBG
TkdMR0VOVkVSVEVYQVJSQVlTT0VTUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsR2VuVmVydGV4
QXJyYXlzT0VTIikpOworICAgICAgICAgICAgbV9nbERlbGV0ZVZlcnRleEFycmF5c09FUyA9IHJl
aW50ZXJwcmV0X2Nhc3Q8UEZOR0xERUxFVEVWRVJURVhBUlJBWVNPRVNQUk9DPihlZ2xHZXRQcm9j
QWRkcmVzcygiZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMiKSk7CisgICAgICAgICAgICBtX2dsSXNW
ZXJ0ZXhBcnJheU9FUyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xJU1ZFUlRFWEFSUkFZT0VTUFJP
Qz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsSXNWZXJ0ZXhBcnJheU9FUyIpKTsKKyAgICAgICAgICAg
IG1fc3VwcG9ydHNPRVN2ZXJ0ZXhBcnJheU9iamVjdCA9IHRydWU7CisgICAgICAgIH0gZWxzZSBp
ZiAobmFtZSA9PSAiR0xfSU1HX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSIgJiYgIW1f
c3VwcG9ydHNJTUdNdWx0aXNhbXBsZWRSZW5kZXJUb1RleHR1cmUpIHsKKyAgICAgICAgICAgIG1f
Z2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HID0gcmVpbnRlcnByZXRfY2FzdDxQ
Rk5HTEZSQU1FQlVGRkVSVEVYVFVSRTJETVVMVElTQU1QTEVJTUdQUk9DPihlZ2xHZXRQcm9jQWRk
cmVzcygiZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HIikpOworICAgICAgICAg
ICAgbV9nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRyA9IHJlaW50ZXJwcmV0X2Nh
c3Q8UEZOR0xSRU5ERVJCVUZGRVJTVE9SQUdFTVVMVElTQU1QTEVJTUdQUk9DPihlZ2xHZXRQcm9j
QWRkcmVzcygiZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUciKSk7CisgICAgICAg
ICAgICBtX3N1cHBvcnRzSU1HTXVsdGlzYW1wbGVkUmVuZGVyVG9UZXh0dXJlID0gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK1N0cmluZyBFeHRlbnNpb25zM0RPcGVuR0xFUzo6Z2V0RXh0ZW5zaW9ucygpCit7Cisg
ICAgcmV0dXJuIFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPig6OmdsR2V0U3Ry
aW5nKEdMX0VYVEVOU0lPTlMpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShXRUJHTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOTAyMjJjYTRkN2E5NGEwOGMyZjk3NTYxNGJmMmJjNjBlMDAxZTA5NQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25z
M0RPcGVuR0xFUy5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEV4dGVuc2lvbnMz
RE9wZW5HTEVTX2gKKyNkZWZpbmUgRXh0ZW5zaW9uczNET3BlbkdMRVNfaAorCisjaW5jbHVkZSAi
RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmgiCisKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNp
bmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBF
eHRlbnNpb25zM0RPcGVuR0xFUyA6IHB1YmxpYyBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24gewor
cHVibGljOgorICAgIHZpcnR1YWwgfkV4dGVuc2lvbnMzRE9wZW5HTEVTKCk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRyh1bnNpZ25lZCBsb25n
IHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHRleHRhcmdl
dCwgdW5zaWduZWQgaW50IHRleHR1cmUsIGludCBsZXZlbCwgdW5zaWduZWQgbG9uZyBzYW1wbGVz
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HKHVu
c2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHNhbXBsZXMsIHVuc2lnbmVkIGxvbmcg
aW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0
KTsKKworICAgIHZpcnR1YWwgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVWZXJ0ZXhBcnJheU9FUygp
OworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0
KTsKKyAgICB2aXJ0dWFsIEdDM0Rib29sZWFuIGlzVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9i
amVjdCk7CisgICAgdmlydHVhbCB2b2lkIGJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2Jq
ZWN0KTsKKworcHJvdGVjdGVkOgorICAgIC8vIFRoaXMgY2xhc3Mgb25seSBuZWVkcyB0byBiZSBp
bnN0YW50aWF0ZWQgYnkgR3JhcGhpY3NDb250ZXh0M0QgaW1wbGVtZW50YXRpb25zLgorICAgIGZy
aWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKKyAgICBFeHRlbnNpb25zM0RPcGVuR0xFUyhH
cmFwaGljc0NvbnRleHQzRCopOworCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRXh0ZW5zaW9u
KGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgU3RyaW5nIGdldEV4dGVuc2lvbnMoKTsKKwor
ICAgIGJvb2wgbV9zdXBwb3J0c09FU3ZlcnRleEFycmF5T2JqZWN0OworICAgIGJvb2wgbV9zdXBw
b3J0c0lNR011bHRpc2FtcGxlZFJlbmRlclRvVGV4dHVyZTsKKworICAgIFBGTkdMRlJBTUVCVUZG
RVJURVhUVVJFMkRNVUxUSVNBTVBMRUlNR1BST0MgbV9nbEZyYW1lYnVmZmVyVGV4dHVyZTJETXVs
dGlzYW1wbGVJTUc7CisgICAgUEZOR0xSRU5ERVJCVUZGRVJTVE9SQUdFTVVMVElTQU1QTEVJTUdQ
Uk9DIG1fZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUc7CisgICAgUEZOR0xCSU5E
VkVSVEVYQVJSQVlPRVNQUk9DIG1fZ2xCaW5kVmVydGV4QXJyYXlPRVM7CisgICAgUEZOR0xERUxF
VEVWRVJURVhBUlJBWVNPRVNQUk9DIG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVM7CisgICAgUEZO
R0xHRU5WRVJURVhBUlJBWVNPRVNQUk9DIG1fZ2xHZW5WZXJ0ZXhBcnJheXNPRVM7CisgICAgUEZO
R0xJU1ZFUlRFWEFSUkFZT0VTUFJPQyBtX2dsSXNWZXJ0ZXhBcnJheU9FUzsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEV4dGVuc2lvbnMzRE9wZW5HTEVTX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHQzRE9wZW5HTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCmluZGV4IDNmNDdiNmUyMWViMjU1MjQz
ZWVlYTRiZjMxOTg1M2FiYmY3NmEyZGMuLjVmMDA1MDU5OWM2YWI2YjQxMzIwMzI1ODBhNTQwYTNj
MjZlNzI5YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcApAQCAtMzQs
NiArMzQsMTEgQEAKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKIAorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxjc3RyaW5nPgorI2luY2x1
ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwog
I2lmIFBMQVRGT1JNKE1BQykKICNpbmNsdWRlIDxPcGVuR0wvZ2wuaD4KICNlbGlmIFBMQVRGT1JN
KEdUSykgfHwgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShRVCkKQEAgLTQ3LDYgKzUyLDMyIEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHNBbmRDb252ZXJ0VG9CR1JBSWZOZWNl
c3NhcnkoaW50IHgsIGludCB5LCBpbnQKICAgICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwg
aGVpZ2h0LCBHTF9CR1JBLCBHTF9VTlNJR05FRF9JTlRfOF84XzhfOF9SRVYsIHBpeGVscyk7CiB9
CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRlcygpCit7CisgICAg
RXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOworICAgIGlmIChtX2F0
dHJzLnN0ZW5jaWwpIHsKKyAgICAgICAgY29uc3QgY2hhciogcGFja2VkRGVwdGhTdGVuY2lsRXh0
ZW5zaW9uID0gaXNHTEVTMkNvbXBsaWFudCgpID8gIkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNp
bCIgOiAiR0xfRVhUX3BhY2tlZF9kZXB0aF9zdGVuY2lsIjsKKyAgICAgICAgaWYgKGV4dGVuc2lv
bnMtPnN1cHBvcnRzKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbikpIHsKKyAgICAgICAgICAg
IGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKTsK
KyAgICAgICAgICAgIC8vIEZvcmNlIGRlcHRoIGlmIHN0ZW5jaWwgaXMgdHJ1ZS4KKyAgICAgICAg
ICAgIG1fYXR0cnMuZGVwdGggPSB0cnVlOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1f
YXR0cnMuc3RlbmNpbCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMp
IHsKKyAgICAgICAgYm9vbCBpc1ZhbGlkVmVuZG9yID0gdHJ1ZTsKKyAgICAgICAgLy8gQ3VycmVu
dGx5IGluIE1hYyB3ZSBvbmx5IHR1cm4gb24gYW50aWFsaWFzIGlmIHZlbmRvciBpcyBOVklESUEs
CisgICAgICAgIC8vIG9yIGlmIEFUSSBhbmQgb24gMTAuNy4yIGFuZCBhYm92ZS4KKyAgICAgICAg
Y29uc3QgY2hhciogdmVuZG9yID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdl
dFN0cmluZyhHTF9WRU5ET1IpKTsKKyAgICAgICAgaWYgKCF2ZW5kb3IgfHwgKCFzdGQ6OnN0cnN0
cih2ZW5kb3IsICJOVklESUEiKSAmJiAhKHN0ZDo6c3Ryc3RyKHZlbmRvciwgIkFUSSIpICYmIHN5
c3RlbUFsbG93c011bHRpc2FtcGxpbmdPbkFUSUNhcmRzKCkpKSkKKyAgICAgICAgICAgIGlzVmFs
aWRWZW5kb3IgPSBmYWxzZTsKKyAgICAgICAgaWYgKCFpc1ZhbGlkVmVuZG9yIHx8ICFleHRlbnNp
b25zLT5zdXBwb3J0cygiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKSB8fCBpc0dM
RVMyQ29tcGxpYW50KCkpCisgICAgICAgICAgICBtX2F0dHJzLmFudGlhbGlhcyA9IGZhbHNlOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBleHRlbnNpb25zLT5lbnN1cmVFbmFibGVkKCJHTF9B
TkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpOworICAgIH0KK30KKwogYm9vbCBHcmFwaGlj
c0NvbnRleHQzRDo6cmVzaGFwZUZCT3MoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBjb25z
dCBpbnQgd2lkdGggPSBzaXplLndpZHRoKCk7CkBAIC0xNTEsNiArMTgyLDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJbnRS
ZWN0JiByZWN0KQogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVuZGVyYnVmZmVyU3RvcmFnZShH
QzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKICAgICBz
d2l0Y2ggKGludGVybmFsZm9ybWF0KSB7CiAgICAgY2FzZSBERVBUSF9TVEVOQ0lMOgogICAgICAg
ICBpbnRlcm5hbGZvcm1hdCA9IEdMX0RFUFRIMjRfU1RFTkNJTDhfRVhUOwpAQCAtMjMyLDYgKzI2
NCw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKICAgICBHQzNEZW51bSBvcGVuR0xJbnRl
cm5hbEZvcm1hdCA9IGludGVybmFsZm9ybWF0OwogICAgIGlmICh0eXBlID09IEdMX0ZMT0FUKSB7
CiAgICAgICAgIGlmIChmb3JtYXQgPT0gR0xfUkdCQSkKQEAgLTI0MSw2ICsyNzQsNyBAQCBib29s
IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBs
ZXZlbCwgR0MzRGVudW0gaW50ZQogICAgIH0KIAogICAgIDo6Z2xUZXhJbWFnZTJEKHRhcmdldCwg
bGV2ZWwsIG9wZW5HTEludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1h
dCwgdHlwZSwgcGl4ZWxzKTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yNTYsNiArMjkw
LDMzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyRGVwdGgoR0MzRGNsYW1wZiBkZXB0
aCkKICAgICA6OmdsQ2xlYXJEZXB0aChkZXB0aCk7CiB9CiAKK2Jvb2wgR3JhcGhpY3NDb250ZXh0
M0Q6OnN5c3RlbUFsbG93c011bHRpc2FtcGxpbmdPbkFUSUNhcmRzKCkKK3sKKyNpZiBQTEFURk9S
TShNQUMpCisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKSAmJiAhZGVmaW5l
ZChCVUlMRElOR19PTl9MSU9OKQorICAgIHJldHVybiB0cnVlOworI2Vsc2UKKyAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworICAgIHN0YXRpYyBTSW50MzIgdmVyc2lvbjsKKyAgICBpZiAoIXZl
cnNpb24pIHsKKyAgICAgICAgaWYgKEdlc3RhbHQoZ2VzdGFsdFN5c3RlbVZlcnNpb24sICZ2ZXJz
aW9uKSAhPSBub0VycikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgLy8g
U2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzkyMiBmb3IgbW9y
ZSBkZXRhaWxzCisgICAgcmV0dXJuIHZlcnNpb24gPj0gMHgxMDcyOworI2VuZGlmIC8vIFNOT1df
TEVPUEFSRCBhbmQgTElPTgorI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYgLy8gUExB
VEZPUk0oTUFDKQorfQorCitFeHRlbnNpb25zM0QqIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRl
bnNpb25zKCkKK3sKKyAgICBpZiAoIW1fZXh0ZW5zaW9ucykKKyAgICAgICAgbV9leHRlbnNpb25z
ID0gYWRvcHRQdHIobmV3IEV4dGVuc2lvbnMzRE9wZW5HTCh0aGlzKSk7CisgICAgcmV0dXJuIG1f
ZXh0ZW5zaW9ucy5nZXQoKTsKK30KKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dDNET3BlbkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKaW5kZXggNDI5ZmM1
MWM5MDQ2YzQ0YTUwZWZlY2UxMjljYmYzMWY2MGQ5OTc1ZS4uNzYyZTM5ZjA5ZGFhOTZmNWMwZGE3
MzQ4NDA5NDE4NDVhZGVhOWJmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RP
cGVuR0xDb21tb24uY3BwCkBAIC0zMCw3ICszMCwxMiBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0M0QuaCIKIAorI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKKyNpZiBV
U0UoT1BFTkdMX0VTXzIpCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMRVMuaCIKKyNlbHNl
CiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMLmgiCisjZW5kaWYKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkltYWdl
RGF0YS5oIgpAQCAtNDksMzkgKzU0LDI0IEBACiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCi0jaWYgUExBVEZPUk0oTUFDKQorI2lm
IFVTRShPUEVOR0xfRVNfMikKKyNpbmNsdWRlICJPcGVuR0xFU1NoaW1zLmgiCisjZWxpZiBQTEFU
Rk9STShNQUMpCiAjaW5jbHVkZSA8T3BlbkdML2dsLmg+CiAjZWxpZiBQTEFURk9STShHVEspIHx8
IFBMQVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oUVQpCiAjaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIK
ICNlbmRpZgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7CisjaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkK
KyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1Mb2cuaD4KKyNlbmRpZgogCi1zdGF0aWMgYm9v
bCBzeXN0ZW1BbGxvd3NNdWx0aXNhbXBsaW5nT25BVElDYXJkcygpCi17Ci0jaWYgUExBVEZPUk0o
TUFDKQotI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkgJiYgIWRlZmluZWQo
QlVJTERJTkdfT05fTElPTikKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKLSAgICBzdGF0aWMgU0ludDMyIHZlcnNpb247Ci0gICAgaWYgKCF2ZXJz
aW9uKSB7Ci0gICAgICAgIGlmIChHZXN0YWx0KGdlc3RhbHRTeXN0ZW1WZXJzaW9uLCAmdmVyc2lv
bikgIT0gbm9FcnIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIC8vIFNl
ZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc5MjIgZm9yIG1vcmUg
ZGV0YWlscwotICAgIHJldHVybiB2ZXJzaW9uID49IDB4MTA3MjsKLSNlbmRpZiAvLyBTTk9XX0xF
T1BBUkQgYW5kIExJT04KLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmIC8vIFBMQVRG
T1JNKE1BQykKLX0KK25hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dmFsaWRhdGVBdHRyaWJ1dGVzKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRl
RGVwdGhTdGVuY2lsKGNvbnN0IGNoYXIqIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbikKIHsK
ICAgICBFeHRlbnNpb25zM0QqIGV4dGVuc2lvbnMgPSBnZXRFeHRlbnNpb25zKCk7CiAgICAgaWYg
KG1fYXR0cnMuc3RlbmNpbCkgewotICAgICAgICBjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5j
aWxFeHRlbnNpb24gPSBpc0dMRVMyQ29tcGxpYW50KCkgPyAiR0xfT0VTX3BhY2tlZF9kZXB0aF9z
dGVuY2lsIiA6ICJHTF9FWFRfcGFja2VkX2RlcHRoX3N0ZW5jaWwiOwogICAgICAgICBpZiAoZXh0
ZW5zaW9ucy0+c3VwcG9ydHMocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKSkgewogICAgICAg
ICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZChwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNp
b24pOwogICAgICAgICAgICAgLy8gRm9yY2UgZGVwdGggaWYgc3RlbmNpbCBpcyB0cnVlLgpAQCAt
NDM5LDM2ICs0MjksMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29tcGlsZVNoYWRlcihQ
bGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKICAgICBBU1NFUlQoc2hhZGVyKTsKICAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKIAotICAgIGludCBHTHNoYWRlclR5cGU7Ci0gICAgQU5HTEVTaGFkZXJU
eXBlIHNoYWRlclR5cGU7Ci0KLSAgICBnbEdldFNoYWRlcml2KHNoYWRlciwgU0hBREVSX1RZUEUs
ICZHTHNoYWRlclR5cGUpOwotICAgIAotICAgIGlmIChHTHNoYWRlclR5cGUgPT0gVkVSVEVYX1NI
QURFUikKLSAgICAgICAgc2hhZGVyVHlwZSA9IFNIQURFUl9UWVBFX1ZFUlRFWDsKLSAgICBlbHNl
IGlmIChHTHNoYWRlclR5cGUgPT0gRlJBR01FTlRfU0hBREVSKQotICAgICAgICBzaGFkZXJUeXBl
ID0gU0hBREVSX1RZUEVfRlJBR01FTlQ7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm47IC8vIElu
dmFsaWQgc2hhZGVyIHR5cGUuCi0KLSAgICBIYXNoTWFwPFBsYXRmb3JtM0RPYmplY3QsIFNoYWRl
clNvdXJjZUVudHJ5Pjo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChz
aGFkZXIpOworICAgIFN0cmluZyB0cmFuc2xhdGVkU2hhZGVyU291cmNlID0gbV9leHRlbnNpb25z
LT5nZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoc2hhZGVyKTsKIAotICAgIGlmIChyZXN1
bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisgICAgaWYgKCF0cmFuc2xhdGVkU2hhZGVy
U291cmNlLmxlbmd0aCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTaGFkZXJTb3VyY2VFbnRy
eSYgZW50cnkgPSByZXN1bHQtPnNlY29uZDsKLQotICAgIFN0cmluZyB0cmFuc2xhdGVkU2hhZGVy
U291cmNlOwotICAgIFN0cmluZyBzaGFkZXJJbmZvTG9nOwotCi0gICAgYm9vbCBpc1ZhbGlkID0g
bV9jb21waWxlci52YWxpZGF0ZVNoYWRlclNvdXJjZShlbnRyeS5zb3VyY2UudXRmOCgpLmRhdGEo
KSwgc2hhZGVyVHlwZSwgdHJhbnNsYXRlZFNoYWRlclNvdXJjZSwgc2hhZGVySW5mb0xvZyk7Ci0K
LSAgICBlbnRyeS5sb2cgPSBzaGFkZXJJbmZvTG9nOwotICAgIGVudHJ5LmlzVmFsaWQgPSBpc1Zh
bGlkOwotCi0gICAgaWYgKCFpc1ZhbGlkKQotICAgICAgICByZXR1cm47IC8vIFNoYWRlciBkaWRu
J3QgdmFsaWRhdGUsIGRvbid0IG1vdmUgZm9yd2FyZCB3aXRoIGNvbXBpbGluZyB0cmFuc2xhdGVk
IHNvdXJjZS4KLQogICAgIGludCB0cmFuc2xhdGVkU2hhZGVyTGVuZ3RoID0gdHJhbnNsYXRlZFNo
YWRlclNvdXJjZS5sZW5ndGgoKTsKIAogICAgIGNvbnN0IENTdHJpbmcmIHRyYW5zbGF0ZWRTaGFk
ZXJDU3RyaW5nID0gdHJhbnNsYXRlZFNoYWRlclNvdXJjZS51dGY4KCk7CkBAIC04MDEsMTggKzc2
Niw2MSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0Mz
RGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaQogICAgICAgICA6OmdsQmluZEZyYW1lYnVm
ZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwogICAgICAgICA6
OmdsRmx1c2goKTsKICAgICB9CisgICAgLy8gQ3VycmVudGx5IG9ubHkgZm9ybWF0PVJHQkEsIHR5
cGU9VU5TSUdORURfQllURSBpcyBzdXBwb3J0ZWQgYnkgdGhlIHNwZWNpZmljYXRpb246IGh0dHA6
Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvd2ViZ2wvc3BlY3MvbGF0ZXN0LworICAgIC8vIElm
IHRoaXMgZXZlciBjaGFuZ2VzLCB0aGlzIGNvZGUgd2lsbCBuZWVkIHRvIGJlIHVwZGF0ZWQuCisK
KyAgICAvLyBDYWxjdWxhdGUgdGhlIHN0cmlkZXMgb2Ygb3VyIGRhdGEgYW5kIGNhbnZhcworICAg
IHVuc2lnbmVkIGludCBmb3JtYXRTaXplID0gNDsgLy8gUkdCQSBVTlNJR05FRF9CWVRFCisgICAg
dW5zaWduZWQgaW50IGRhdGFTdHJpZGUgPSB3aWR0aCAqIGZvcm1hdFNpemU7CisgICAgdW5zaWdu
ZWQgaW50IGNhbnZhc1N0cmlkZSA9IG1fY3VycmVudFdpZHRoICogZm9ybWF0U2l6ZTsKKworICAg
IC8vIElmIHdlIGFyZSB1c2luZyBhIHBhY2sgYWxpZ25tZW50IG9mIDgsIHRoZW4gd2UgbmVlZCB0
byBhbGlnbiBvdXIgc3RyaWRlcyB0byA4IGJ5dGUgYm91bmRhcmllcworICAgIC8vIFNlZTogaHR0
cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EYXRhX3N0cnVjdHVyZV9hbGlnbm1lbnQgKGNvbXB1
dGluZyBwYWRkaW5nKQorICAgIGludCBwYWNrQWxpZ25tZW50OworICAgIGdsR2V0SW50ZWdlcnYo
R0xfUEFDS19BTElHTk1FTlQsICZwYWNrQWxpZ25tZW50KTsKKyAgICBpZiAoOCA9PSBwYWNrQWxp
Z25tZW50KSB7CisgICAgICAgIGRhdGFTdHJpZGUgPSAoZGF0YVN0cmlkZSArIDcpICYgfjc7Cisg
ICAgICAgIGNhbnZhc1N0cmlkZSA9IChjYW52YXNTdHJpZGUgKyA3KSAmIH43OworICAgIH0KKwor
ICAgIHVuc2lnbmVkIGNoYXIqIGNhbnZhc0RhdGEgPSBuZXcgdW5zaWduZWQgY2hhcltjYW52YXNT
dHJpZGUgKiBtX2N1cnJlbnRIZWlnaHRdOworICAgIDo6Z2xSZWFkUGl4ZWxzKDAsIDAsIG1fY3Vy
cmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIGZvcm1hdCwgdHlwZSwgY2FudmFzRGF0YSk7CisK
KyAgICAvLyBJZiB3ZSBmYWlsZWQgdG8gcmVhZCBvdXIgY2FudmFzIGRhdGEgZHVlIHRvIGEgR0wg
ZXJyb3IsIGRvbid0IGNvbnRpbnVlCisgICAgaW50IGVycm9yID0gZ2xHZXRFcnJvcigpOworICAg
IGlmIChHTF9OT19FUlJPUiAhPSBlcnJvcikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihl
cnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBDbGVhciBvdXIgZGF0YSBp
biBjYXNlIHNvbWUgb2YgaXQgbGllcyBvdXRzaWRlIHRoZSBib3VuZHMgb2Ygb3VyIGNhbnZhcwor
ICAgIC8vIFRPRE86IGRvbid0IGRvIHRoaXMgaWYgYWxsIG9mIHRoZSBkYXRhIGxpZXMgaW5zaWRl
IHRoZSBib3VuZHMgb2YgdGhlIGNhbnZhcworICAgIG1lbXNldChkYXRhLCAwLCBkYXRhU3RyaWRl
ICogaGVpZ2h0KTsKKworICAgIC8vIENhbGN1bGF0ZSB0aGUgaW50ZXJzZWN0aW9uIG9mIG91ciBj
YW52YXMgYW5kIGRhdGEgYm91bmRzCisgICAgSW50UmVjdCBkYXRhUmVjdCh4LCB5LCB3aWR0aCwg
aGVpZ2h0KTsKKyAgICBJbnRSZWN0IGNhbnZhc1JlY3QoMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1f
Y3VycmVudEhlaWdodCk7CisgICAgSW50UmVjdCBub25aZXJvRGF0YVJlY3QgPSBpbnRlcnNlY3Rp
b24oZGF0YVJlY3QsIGNhbnZhc1JlY3QpOworCisgICAgdW5zaWduZWQgaW50IHhEYXRhT2Zmc2V0
ID0geCA8IDAgPyAteCAqIGZvcm1hdFNpemUgOiAwOworICAgIHVuc2lnbmVkIGludCB5RGF0YU9m
ZnNldCA9IHkgPCAwID8gLXkgKiBkYXRhU3RyaWRlIDogMDsKKyAgICB1bnNpZ25lZCBpbnQgeENh
bnZhc09mZnNldCA9IG5vblplcm9EYXRhUmVjdC54KCkgKiBmb3JtYXRTaXplOworICAgIHVuc2ln
bmVkIGludCB5Q2FudmFzT2Zmc2V0ID0gbm9uWmVyb0RhdGFSZWN0LnkoKSAqIGNhbnZhc1N0cmlk
ZTsKKyAgICB1bnNpZ25lZCBjaGFyKiBkc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
ZGF0YSkgKyB4RGF0YU9mZnNldCArIHlEYXRhT2Zmc2V0OworICAgIHVuc2lnbmVkIGNoYXIqIHNy
YyA9IGNhbnZhc0RhdGEgKyB4Q2FudmFzT2Zmc2V0ICsgeUNhbnZhc09mZnNldDsKKyAgICBmb3Ig
KGludCByb3cgPSAwOyByb3cgPCBub25aZXJvRGF0YVJlY3QuaGVpZ2h0KCk7IHJvdysrKSB7Cisg
ICAgICAgIG1lbWNweShkc3QsIHNyYywgbm9uWmVyb0RhdGFSZWN0LndpZHRoKCkgKiBmb3JtYXRT
aXplKTsKKyAgICAgICAgZHN0ICs9IGRhdGFTdHJpZGU7CisgICAgICAgIHNyYyArPSBjYW52YXNT
dHJpZGU7CisgICAgfQorCisgICAgZGVsZXRlIFtdIGNhbnZhc0RhdGE7CiAgICAgOjpnbFJlYWRQ
aXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKKwogICAgIGlm
IChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCiAg
ICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSLCBtX211bHRpc2FtcGxlRkJPKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVs
ZWFzZVNoYWRlckNvbXBpbGVyKCkKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBub3QgaW1wbGVt
ZW50ZWQgb24gZGVza3RvcCBPcGVuR0wuIFdlIG5lZWQgdG8gaGF2ZSBpZmRlZnMgZm9yIHRoZSBk
aWZmZXJlbnQgR0wgdmFyaWFudHMuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2FtcGxlQ292ZXJh
Z2UoR0MzRGNsYW1wZiB2YWx1ZSwgR0MzRGJvb2xlYW4gaW52ZXJ0KQogewogICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwpAQCAtMTM4NiwxMyArMTM5NCw2IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0
M0Q6OmxheWVyQ29tcG9zaXRlZCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fbGF5ZXJDb21wb3NpdGVk
OwogfQogCi1FeHRlbnNpb25zM0QqIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25zKCkK
LXsKLSAgICBpZiAoIW1fZXh0ZW5zaW9ucykKLSAgICAgICAgbV9leHRlbnNpb25zID0gYWRvcHRQ
dHIobmV3IEV4dGVuc2lvbnMzRE9wZW5HTCh0aGlzKSk7Ci0gICAgcmV0dXJuIG1fZXh0ZW5zaW9u
cy5nZXQoKTsKLX0KLQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNE
T3BlbkdMRVMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dy
YXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCmluZGV4IGIxYmQxZGM1NmNhNmZkOTI4M2RiMmRh
ZTEyMzgzY2UyMmZjOTQzMDIuLjNiNDRhMjQ2ZWYxMzA0YzA0OTE2YThjMTM1OTA0NjFjZWEzZjI4
NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAKQEAgLTI5LDkz
ICsyOSwyOSBAQAogI2lmIEVOQUJMRShXRUJHTCkKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dDNELmgiCi0KLSNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0wuaCIKKyNpbmNsdWRlICJFeHRl
bnNpb25zM0RPcGVuR0xFUy5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJJbnRT
aXplLmgiCisjaW5jbHVkZSAiTGF5ZXJXZWJLaXRUaHJlYWQuaCIKICNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgotCi0jaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShRVCkKLSNpbmNsdWRl
ICJPcGVuR0xTaGltcy5oIgotI2VuZGlmCisjaW5jbHVkZSAiT3BlbkdMRVNTaGltcy5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHNB
bmRDb252ZXJ0VG9CR1JBSWZOZWNlc3NhcnkoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBo
ZWlnaHQsIHVuc2lnbmVkIGNoYXIqIHBpeGVscykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJl
bGVhc2VTaGFkZXJDb21waWxlcigpCiB7Ci0gICAgY29uc3QgaW50IHRvdGFsQnl0ZXMgPSBtX2N1
cnJlbnRXaWR0aCAqIG1fY3VycmVudEhlaWdodCAqIDQ7Ci0gICAgOjpnbFJlYWRQaXhlbHMoeCwg
eSwgd2lkdGgsIGhlaWdodCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgcGl4ZWxzKTsKLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsQnl0ZXM7IGkgKz0gNCkKLSAgICAgICAgc3RkOjpz
d2FwKHBpeGVsc1tpXSwgcGl4ZWxzW2kgKyAyXSk7IC8vIENvbnZlcnQgdG8gQkdSQS4KKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsUmVsZWFzZVNoYWRlckNvbXBpbGVyKCk7CiB9
CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNp
emUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzQW5kQ29udmVydFRvQkdSQUlm
TmVjZXNzYXJ5KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBj
aGFyKiBwaXhlbHMpCiB7Ci0gICAgY29uc3QgaW50IHdpZHRoID0gc2l6ZS53aWR0aCgpOwotICAg
IGNvbnN0IGludCBoZWlnaHQgPSBzaXplLmhlaWdodCgpOwotICAgIEdMdWludCBjb2xvckZvcm1h
dCA9IDAsIHBpeGVsRGF0YVR5cGUgPSAwOwotICAgIGlmIChtX2F0dHJzLmFscGhhKSB7Ci0gICAg
ICAgIG1faW50ZXJuYWxDb2xvckZvcm1hdCA9IEdMX1JHQkE7Ci0gICAgICAgIGNvbG9yRm9ybWF0
ID0gR0xfUkdCQTsKLSAgICAgICAgcGl4ZWxEYXRhVHlwZSA9IEdMX1VOU0lHTkVEX0JZVEU7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgbV9pbnRlcm5hbENvbG9yRm9ybWF0ID0gR0xfUkdCOwotICAg
ICAgICBjb2xvckZvcm1hdCA9IEdMX1JHQjsKLSAgICAgICAgcGl4ZWxEYXRhVHlwZSA9IEdMX1VO
U0lHTkVEX1NIT1JUXzVfNl81OwotICAgIH0KLQotICAgIC8vIFdlIGRvbid0IGFsbG93IHRoZSBs
b2dpYyB3aGVyZSBzdGVuY2lsIGlzIHJlcXVpcmVkIGFuZCBkZXB0aCBpcyBub3QuCi0gICAgLy8g
U2VlIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZUF0dHJpYnV0ZXMuCi0gICAgYm9vbCBzdXBw
b3J0UGFja2VkRGVwdGhTdGVuY2lsQnVmZmVyID0gKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJz
LmRlcHRoKSAmJiBnZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfcGFja2VkX2RlcHRo
X3N0ZW5jaWwiKTsKLQotICAgIC8vIFJlc2l6ZSByZWd1bGFyIEZCTy4KLSAgICBib29sIG11c3RS
ZXN0b3JlRkJPID0gZmFsc2U7Ci0gICAgaWYgKG1fYm91bmRGQk8gIT0gbV9mYm8pIHsKLSAgICAg
ICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhU
KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgIH0KLQotICAgIDo6
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOwotICAgIDo6Z2xUZXhJbWFn
ZTJEKEdMX1RFWFRVUkVfMkQsIDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdo
dCwgMCwgY29sb3JGb3JtYXQsIHBpeGVsRGF0YVR5cGUsIDApOwotICAgIDo6Z2xGcmFtZWJ1ZmZl
clRleHR1cmUyREVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29u
dGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAwKTsK
LQotICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2NvbXBvc2l0b3JUZXh0dXJl
KTsKLSAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBtX2ludGVybmFsQ29sb3JG
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAw
KTsKLSAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7Ci0KLSAgICAvLyBXZSBk
b24ndCBzdXBwb3J0IGFudGlhbGlhc2luZyB5ZXQuIFNlZSBHcmFwaGljc0NvbnRleHQzRDo6dmFs
aWRhdGVBdHRyaWJ1dGVzLgotICAgIEFTU0VSVCghbV9hdHRycy5hbnRpYWxpYXMpOwotCi0gICAg
aWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKSB7Ci0gICAgICAgIC8vIFVzZSBh
IDI0IGJpdCBkZXB0aCBidWZmZXIgd2hlcmUgd2Uga25vdyB3ZSBoYXZlIGl0LgotICAgICAgICBp
ZiAoc3VwcG9ydFBhY2tlZERlcHRoU3RlbmNpbEJ1ZmZlcikgewotICAgICAgICAgICAgOjpnbEJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAg
ICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpE
RVBUSF9TVEVOQ0lMLCB3aWR0aCwgaGVpZ2h0LCAwLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhf
U1RFTkNJTCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8yNF84LCAwKTsKLSAgICAg
ICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpCi0gICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVm
ZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQsIEdMX1RF
WFRVUkVfMkQsIG1fZGVwdGhTdGVuY2lsQnVmZmVyLCAwKTsKLSAgICAgICAgICAgIGlmIChtX2F0
dHJzLmRlcHRoKQotICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9G
UkFNRUJVRkZFUiwgR0xfREVQVEhfQVRUQUNITUVOVCwgR0xfVEVYVFVSRV8yRCwgbV9kZXB0aFN0
ZW5jaWxCdWZmZXIsIDApOwotICAgICAgICAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVf
MkQsIDApOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNp
bCkgewotICAgICAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdyYXBoaWNzQ29u
dGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fc3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgICAgICAgICAg
OjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZF
UiwgR0xfU1RFTkNJTF9JTkRFWDgsIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICAgICAgICAgIDo6
Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4
dDNEOjpSRU5ERVJCVUZGRVIsIG1fc3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAobV9hdHRycy5kZXB0aCkgewotICAgICAgICAgICAgICAgIDo6Z2xCaW5kUmVu
ZGVyYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fZGVwdGhCdWZm
ZXIpOwotICAgICAgICAgICAgICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlRVhUKEdyYXBoaWNz
Q29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIEdMX0RFUFRIX0NPTVBPTkVOVDE2LCB3aWR0aCwgaGVp
Z2h0KTsKLSAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRU
QUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9kZXB0aEJ1ZmZlcik7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCAwKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBp
ZiAoZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJV
RkZFUikgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7Ci0gICAg
ICAgIC8vIEZJWE1FOiBjbGVhbnVwCi0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgOjpn
bFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllU
RSwgcGl4ZWxzKTsKKyAgICBpbnQgdG90YWxCeXRlcyA9IHdpZHRoICogaGVpZ2h0ICogNDsKKyAg
ICBpZiAoaXNHTEVTMkNvbXBsaWFudCgpKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
dG90YWxCeXRlczsgaSArPSA0KQorICAgICAgICAgICAgc3RkOjpzd2FwKHBpeGVsc1tpXSwgcGl4
ZWxzW2kgKyAyXSk7IC8vIENvbnZlcnQgdG8gQkdSQS4KICAgICB9Ci0KLSAgICByZXR1cm4gbXVz
dFJlc3RvcmVGQk87CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc29sdmVNdWx0aXNh
bXBsaW5nSWZOZWNlc3NhcnkoY29uc3QgSW50UmVjdCYgcmVjdCkKQEAgLTE1Niw2ICs5MiwxNyBA
QCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwgR0MzRGVudW0gaW50ZQogICAgIHJldHVybiB0cnVlOwogfQogCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZUF0dHJpYnV0ZXMoKQoreworICAgIHZhbGlkYXRlRGVw
dGhTdGVuY2lsKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKKworICAgIGlmIChtX2F0
dHJzLmFudGlhbGlhcykgeworICAgICAgICBFeHRlbnNpb25zM0QqIGV4dGVuc2lvbnMgPSBnZXRF
eHRlbnNpb25zKCk7CisgICAgICAgIGlmICghZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0lNR19t
dWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKSkKKyAgICAgICAgICAgIG1fYXR0cnMuYW50
aWFsaWFzID0gZmFsc2U7CisgICAgfQorfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0
aFJhbmdlKEdDM0RjbGFtcGYgek5lYXIsIEdDM0RjbGFtcGYgekZhcikKIHsKICAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKQEAgLTE2OCw2ICsxMTUsMTkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Y2xlYXJEZXB0aChHQzNEY2xhbXBmIGRlcHRoKQogICAgIDo6Z2xDbGVhckRlcHRoZihkZXB0
aCk7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworRXh0ZW5zaW9uczNEKiBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0RXh0ZW5zaW9ucygpCit7CisgICAgaWYgKCFtX2V4dGVuc2lvbnMpCisg
ICAgICAgIG1fZXh0ZW5zaW9ucyA9IGFkb3B0UHRyKG5ldyBFeHRlbnNpb25zM0RPcGVuR0xFUyh0
aGlzKSk7CisgICAgcmV0dXJuIG1fZXh0ZW5zaW9ucy5nZXQoKTsKK30KKworYm9vbCBHcmFwaGlj
c0NvbnRleHQzRDo6c3lzdGVtQWxsb3dzTXVsdGlzYW1wbGluZ09uQVRJQ2FyZHMoKQoreworICAg
IHJldHVybiBmYWxzZTsgLy8gbm90IGFwcGxpY2FibGUKK30KKworfQogCiAjZW5kaWYgLy8gRU5B
QkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAppbmRleCA3MGQzZjI0YWZhNTU0MmE2OGEx
MjQxZDM4MWMzY2U5MzQ4NzgxODg1Li4wNjc2OTIxYzExZjgwZmRjNWZhODQ4MzlhZGZmZjUzYjEz
MGFmYWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9H
cmFwaGljc0NvbnRleHQzRFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcApAQCAtOTgsNiArOTgsMTMgQEAgYm9vbCBH
cmFwaGljc0NvbnRleHQzRDo6aXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0CiAjZW5kaWYKIH0KIAor
I2lmICFVU0UoT1BFTkdMX0VTXzIpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hh
ZGVyQ29tcGlsZXIoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisjZW5kaWYKKwogR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGUoR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCiAgICAgOiBtX2NvbnRl
eHQoY29udGV4dCkKICAgICAsIG1faG9zdFdpbmRvdyhob3N0V2luZG93KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150969</attachid>
            <date>2012-07-05 11:58:19 -0700</date>
            <delta_ts>2012-07-05 12:52:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90567-20120705145756.patch</filename>
            <type>text/plain</type>
            <size>65535</size>
            <attacher name="Joshua Netterfield">jnetterfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxODY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODFjZDc4MDliMjVmNjhk
YjA3MTcxZmU3N2UyMmI0ZjhkMjVkNTU2NC4uZjVjYTliYzYwOWJhOTgxOTIyNjk0OTM2ODVmZTk2
MTQ3NzE3NjM1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk0IEBACisyMDEyLTA3LTA0ICBKb3No
dWEgTmV0dGVyZmllbGQgIDxqbmV0dGVyZmllbGRAcmltLmNvbT4KKyAgICAgICAgTWFrZSBHQzNE
IGFuZCBFM0QgbW9yZSBtYWludGFpbmFibGUgZm9yIEdMRVMgcGxhdGZvcm1zCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDU2NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY2xlYW5zIHVw
IGNvZGUgZm9yIFdlYkdMIG9uIE9wZW5HTEVTIHBsYXRmb3JtcyB3aGljaCB1c2UgCisgICAgICAg
IEdyYXBoaWNzQ29udGV4dDNET3BlbkdMKiBhbmQgRXh0ZW5zaW9uczNET3BlbkdMKi4gQWx0aG91
Z2gKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wgd2FzIGFscmVhZHkgc3BsaXQgaW50
byBHcmFwaGljc0NvbnRleHQzRE9wZW5HTCwKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0RPcGVu
R0xDb21tb24sIGFuZCAgR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUywgdGhpcyBwYXRjaAorICAg
ICAgICBpcyBhbiBhdHRlbXB0IHRvIHJlZmFjdG9yIHRoaXMgY29kZSBpbiBhIHdheSB0aGF0IHdp
bGwgaGVscCBCbGFja0JlcnJ5IGFuZAorICAgICAgICBvdGhlciB0ZWFtcyBzdXBwb3J0IFdlYkdM
IG9uIG1vYmlsZSBwbGF0Zm9ybXMgd2l0aCBhcyBsaXR0bGUgdXNlIG9mCisgICAgICAgIOKAnCNJ
RiBVU0UoT1BFTkdMX0VTXzIp4oCdIGluIGNvbW1vbiBjb2RlIGFzIHBvc3NpYmxlLiBBbHNvIGlu
Y2x1ZGVkIGlzIHRoZQorICAgICAgICBzZXBhcmF0aW9uIG9mIEV4dGVuc2lvbnMzRE9wZW5HTCBp
bnRvIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbiwKKyAgICAgICAgRXh0ZW5zaW9uczNET3BlbkdM
LCBhbmQgRXh0ZW5zaW9uczNET3BlbkdMRVMgYXMgd2VsbCBhcyB0aGUgaW50cm9kdWN0aW9uCisg
ICAgICAgIG9mIE9wZW5HTEVTU2hpbXMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBjcmVhdGVk
IGluIGxhcmdlIHBhcnQgYnkgSm9uYXRoYW4gRmVsZHN0ZWluLgorCisgICAgICAgIE5vIG5ldyB0
ZXN0czogbm8gbmV3IGJlaGF2aW91ci4KKworICAgICAgICAqIFBsYXRmb3JtQmxhY2tCZXJyeS5j
bWFrZTogUmVjb2duaXplIEJsYWNrQmVycnkgYXMgT1BFTkdMIEVTLCBhZGQgbmV3IGZpbGVzIHRv
IGJ1aWxkCisgICAgICAgICogVGFyZ2V0LnByaTogQWRkIG5ldyBFeHRlbnNpb25zM0RPcGVuR0wq
IHRvIFdlYkdMIGJ1aWxkcworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dDNELmg6IEFkZCB2YWxpZGF0ZURlcHRoU3RlbmNpbCwgbWFrZSBzeXN0ZW1BbGxvd3NNdWx0
aXNhbXBsaW5nT25BVElDYXJkcyBhIGEgbWVtYmVyIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvT3BlbkdMRVNTaGltcy5oOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNw
cDogTW92ZSBjb2RlIHRvIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbiB3aGVyZSBwb3NzaWJsZQor
ICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpFeHRlbnNpb25zM0RPcGVuR0wp
OiBSZWZsZWN0IHRoYXQgaXQgaXMgbm93IGluaGVyaXRzIEV4dGVuc2lvbnMzRENvbW1vbgorICAg
ICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpzdXBwb3J0c0V4dGVuc2lvbik6IENv
bnRhaW5zIE9wZW5HTCBzcGVjaWZpYyBjb2RlIGZyb20gc3VwcG9ydHMKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpnZXRFeHRlbnNpb25z
KTogUmV0dXJucyBhIGxpc3Qgb2YgZXh0ZW5zaW9ucworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaDogUmVtb3ZlIGZ1bmN0aW9ucyBub3cgaW4g
RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEV4
dGVuc2lvbnMzRE9wZW5HTCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4
dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0xDb21tb246OkV4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbik6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0xDb21tb246
On5FeHRlbnNpb25zM0RPcGVuR0xDb21tb24pOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9u
czNET3BlbkdMQ29tbW9uOjpzdXBwb3J0cyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25z
M0RPcGVuR0xDb21tb246OmVuc3VyZUVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uOjppc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uOjpnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKToKKyAgICAgICAg
KFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6Z2V0VHJhbnNsYXRlZFNoYWRlclNv
dXJjZUFOR0xFKTogRXhpc3RlZCBiZWZvcmUsIGJ1dCBkaWQgbm90aGluZy4gTm93IGRvZXMgd2hh
dCBpcyBzYXlzIGl0IGRvZXMuCisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0xD
b21tb246OmluaXRpYWxpemVBdmFpbGFibGVFeHRlbnNpb25zKTogTW92ZWQgZnJvbSBFeHRlbnNp
b25zM0RPcGVuR0w6OnN1cHBvcnRzCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmguCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5H
TEVTOjpFeHRlbnNpb25zM0RPcGVuR0xFUyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25z
M0RPcGVuR0xFUzo6fkV4dGVuc2lvbnMzRE9wZW5HTEVTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4
dGVuc2lvbnMzRE9wZW5HTEVTOjpmcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HKToK
KyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTEVTOjpyZW5kZXJidWZmZXJTdG9y
YWdlTXVsdGlzYW1wbGVJTUcpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdM
RVM6OmNyZWF0ZVZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMz
RE9wZW5HTEVTOjpkZWxldGVWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRl
bnNpb25zM0RPcGVuR0xFUzo6aXNWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbnNpb25zM0RPcGVuR0xFUzo6YmluZFZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNv
cmU6OkV4dGVuc2lvbnMzRE9wZW5HTEVTOjpzdXBwb3J0c0V4dGVuc2lvbik6IENvbnRhaW5zIE9w
ZW5HTEVTIHNwZWNpZmljIGNvZGUgZnJvbSBzdXBwb3J0cworICAgICAgICAoV2ViQ29yZTo6RXh0
ZW5zaW9uczNET3BlbkdMRVM6OmdldEV4dGVuc2lvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmguCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEV4dGVuc2lvbnMzRE9wZW5HTEVTKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRl
cyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpzeXN0ZW1BbGxvd3NNdWx0aXNhbXBsaW5nT25BVElDYXJkcyk6IE5vdyBhIG1lbWJlciBmdW5j
dGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25z
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RP
cGVuR0xDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZh
bGlkYXRlRGVwdGhTdGVuY2lsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmxpbmVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bGlu
a1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBpeGVsU3Rv
cmVpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwb2x5Z29uT2Zmc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVCdWZmZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29t
cGlsZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHNB
bmRDb252ZXJ0VG9CR1JBSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzeXN0ZW1BbGxvd3NNdWx0aXNhbXBsaW5nT25B
VElDYXJkcyk6IE5vdyBhIG1lbWJlciBmdW5jdGlvbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcik6
CisKIDIwMTItMDctMDQgIEpvaG4gTWVsbG9yICA8am9obm1lQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBUZXh0IEF1dG9zaXppbmc6IEFkZCBiYXNpYyBmcmFtZXdvcmsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCmluZGV4IGRlN2JjYzY0ZjM5ZWJkYTM2Yjc3NDY5MzIxYjlhMGRjODkwZWJm
ODguLmM5ZTgzOTQ0N2FlNTNjMmNlMGNjZDJiNzI5MmE0Y2I2MjY5MGRhZGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNjA1NCw2ICs2MDU0LDcgQEAgd2ViY29yZV9zb3VyY2Vz
ICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9PcGVuR0xTaGltcy5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL09wZW5HTFNoaW1zLmggXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wu
Y3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9u
czNET3BlbkdMQ29tbW9uLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21t
b24uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21h
a2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UKaW5kZXggNTE2OWE1
ZGQ1OTczYzdiMGUyODhkYTIxMjMxOTQ3MTg2NTMwZWE4MS4uNTg3ZWRlM2QwNjkwODAzNzNiZWQy
YTMxMjI1MmE1NTc5MjFkY2ZjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1C
bGFja0JlcnJ5LmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQmxhY2tCZXJyeS5j
bWFrZQpAQCAtMjE4LDYgKzIxOCw3IEBAIGlmIChFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJB
TUUpCiBFTkRJRiAoKQogCiBpZiAoRU5BQkxFX1dFQkdMKQorICAgIEFERF9ERUZJTklUSU9OUyAo
LURXVEZfVVNFX09QRU5HTF9FU18yPTEpCiAgICAgTElTVChBUFBFTkQgV2ViQ29yZV9JTkNMVURF
X0RJUkVDVE9SSUVTCiAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUiCiAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wiCkBA
IC0yMjUsNiArMjI2LDExIEBAIGlmIChFTkFCTEVfV0VCR0wpCiAgICAgTElTVChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRHJhd2lu
Z0J1ZmZlckJsYWNrQmVycnkuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvR3JhcGhpY3NDb250ZXh0M0RCbGFja0JlcnJ5LmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCisgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAorICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNw
cAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMu
Y3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQz
RC5jcHAKICAgICApCiBFTkRJRiAoKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJn
ZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCA2NjVmMDNkMTFjNTkwMThj
NzViOWZhNjE0OWU3MjlkZTQ5ZjJiMjlkLi40Y2U2Y2Y2NmUyOWU5OGNlY2U4NWVjYjA0YjVkYTAw
YzkyMzZhODk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTM5NTUsMTUgKzM5NTUsMTkgQEAgY29udGFpbnMo
REVGSU5FUywgRU5BQkxFX1dFQkdMPTEpIHsKIAogICAgIGNvbnRhaW5zKFFUX0NPTkZJRywgb3Bl
bmdsKSB8IGNvbnRhaW5zKFFUX0NPTkZJRywgb3BlbmdsZXMyKSB7CiAgICAgICAgICFjb250YWlu
cyhRVF9DT05GSUcsIG9wZW5nbGVzMikgewotICAgICAgICAgICAgU09VUkNFUyArPSBwbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCisgICAgICAgICAg
ICBTT1VSQ0VTICs9IFwKKyAgICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAgXAorICAgICAgICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAKICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dDNET3BlbkdMRVMuY3BwCisgICAgICAgICAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNw
cCBcCisgICAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNE
T3BlbkdMRVMuY3BwCiAgICAgICAgIH0KIAogICAgICAgICBIRUFERVJTICs9IHBsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaAogCiAgICAgICAgIFNPVVJDRVMgKz0g
XAotICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5H
TC5jcHAgXAorICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMz
RE9wZW5HTENvbW1vbi5jcHAgXAogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAogCiAgICAgICAgIEFOR0xFX0RJUiA9
ICQkcmVwbGFjZShQV0QsICJXZWJDb3JlIiwgIlRoaXJkUGFydHkvQU5HTEUiKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCmluZGV4IGNiMTAxMmU3NzY4NWNkOTA4OTY5MjI0YmFhYWYwMTEwNGQxOWQ2OWMuLmYxN2Ew
NDAwOTFmMjlkMzE3MzQ4NWVjNzYyNmE4MWNiNjhkN2VjY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAg
LTM4MDcsNiArMzgwNyw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dl
YlRpbGVkTGF5ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYlRp
bGVkTGF5ZXIubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRl
bnNpb25zM0RPcGVuR0wuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xD
b21tb24uY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCAzYjgzM2VmYTE3NDdmNThlN2E3ODIxM2U2N2M5YTE1ZTNhYjliYzlh
Li5kZTA4ZmQzNTgwZTIzY2M1NWZmNTBjOGViNDA1NTA3MTExMzE0ODhkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTc5LDYg
KzExNzksOCBAQAogCQk0NDMxMUNEODEyRTRFMjRCMDAwQThEMTkgLyogRE9NRG9jdW1lbnRQcml2
YXRlLmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0NDMxMUNENTEyRTRFMjJEMDAwQThEMTkgLyogRE9NRG9jdW1lbnRQcml2YXRl
LmggKi87IH07CiAJCTQ0MzExQ0Q5MTJFNEUyNTcwMDBBOEQxOSAvKiBET01Eb2N1bWVudEZyYWdt
ZW50UHJpdmF0ZS5oIGluIENvcHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDQzMTFDRDQxMkU0RTIyRDAwMEE4RDE5IC8qIERPTURvY3VtZW50
RnJhZ21lbnRQcml2YXRlLmggKi87IH07CiAJCTQ0MzExRjgyMTJFNEU2NkMwMDBBOEQxOSAvKiBE
T01Eb2N1bWVudEZyYWdtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDg1RTcxMTQ1MEFDNUQ1MzQwMDUzMjcwRiAvKiBET01Eb2N1bWVu
dEZyYWdtZW50SW50ZXJuYWwuaCAqLzsgfTsKKwkJNDQ1MEJDMzUxNUE1RTlDQTAwREQxNjIyIC8q
IEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDQ1MEJDMzUxNUE1RTlDQTAwREQxNjIyIC8qIEV4dGVuc2lvbnMz
RE9wZW5HTENvbW1vbi5oICovOyB9OworCQk0NDUwQkMzNDE1QTVFOUNBMDBERDE2MjIgLyogRXh0
ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQ0NTBCQzM0MTVBNUU5Q0EwMEREMTYyMiAvKiBFeHRlbnNpb25zM0RP
cGVuR0xDb21tb24uY3BwICovOyB9OwogCQk0NDhBMjlCRjBBNDZEOUNCMDAzMDc1OUYgLyogSlNI
VE1MT3B0aW9uc0NvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQ0OEEyOUJEMEE0NkQ5Q0IwMDMwNzU5RiAvKiBKU0hUTUxPcHRpb25zQ29s
bGVjdGlvbi5oICovOyB9OwogCQk0NDhBMjlDMDBBNDZEOUNCMDAzMDc1OUYgLyogSlNIVE1MT3B0
aW9uc0NvbGxlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDQ4QTI5QkUwQTQ2RDlDQjAwMzA3NTlGIC8qIEpTSFRNTE9wdGlvbnNDb2xsZWN0
aW9uLmNwcCAqLzsgfTsKIAkJNDQ4QUQyN0MwQTQ4MTM3QTAwMjNEMTc5IC8qIEpTSFRNTE9wdGlv
bnNDb2xsZWN0aW9uQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQ0OEFEMjdBMEE0ODEzNzkwMDIzRDE3OSAvKiBKU0hUTUxPcHRpb25zQ29s
bGVjdGlvbkN1c3RvbS5jcHAgKi87IH07CkBAIC04MjMxLDYgKzgyMzMsOCBAQAogCQk0NDI5QUIw
NzBDQjg0RjgxMDA3NjQ3QzUgLyogRE9NVGV4dEV2ZW50SW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVRleHRFdmVudEludGVybmFsLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTQ0MzExQ0Q0MTJFNEUyMkQwMDBBOEQxOSAvKiBET01Eb2N1bWVu
dEZyYWdtZW50UHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01E
b2N1bWVudEZyYWdtZW50UHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
NDMxMUNENTEyRTRFMjJEMDAwQThEMTkgLyogRE9NRG9jdW1lbnRQcml2YXRlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTURvY3VtZW50UHJpdmF0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk0NDUwQkMzNDE1QTVFOUNBMDBERDE2MjIgLyogRXh0ZW5zaW9u
czNET3BlbkdMQ29tbW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTQ0NTBCQzM1MTVBNUU5Q0EwMEREMTYyMiAvKiBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5zaW9uczNET3BlbkdMQ29t
bW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0OEEyOUJEMEE0NkQ5Q0IwMDMw
NzU5RiAvKiBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDQ4QTI5QkUwQTQ2RDlDQjAwMzA3NTlGIC8qIEpTSFRNTE9wdGlvbnNDb2xs
ZWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0hUTUxP
cHRpb25zQ29sbGVjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0OEFE
MjdBMEE0ODEzNzkwMDIzRDE3OSAvKiBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbkN1c3RvbS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0hUTUxPcHRpb25zQ29sbGVj
dGlvbkN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTY0MSw2ICsy
MTY0NSw4IEBACiAJCUZCQzIyMEREMTIzN0ZCRUIwMEJDRjc4OCAvKiBvcGVuZ2wgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTQ0NTBCQzM0MTVBNUU5Q0Ew
MEREMTYyMiAvKiBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwICovLAorCQkJCTQ0NTBCQzM1
MTVBNUU5Q0EwMEREMTYyMiAvKiBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24uaCAqLywKIAkJCQk2
RTY3RDJBNDEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmNwcCAqLywKIAkJ
CQk2RTY3RDJBNTEyODBFOEE0MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNET3BlbkdMLmggKi8sCiAJ
CQkJRkJDMjIwREUxMjM3RkJFQjAwQkNGNzg4IC8qIEdyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNw
cCAqLywKQEAgLTIzMDIzLDYgKzIzMDI5LDcgQEAKIAkJCQk5NzY3Q0UwQzE0NUFCQzEzMDA1RTY0
REIgLyogRXhjZXB0aW9uSW50ZXJmYWNlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkU2N0QyQTkx
MjgwRThCRDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkU2
N0QyQTcxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNDQ1MEJDMzUxNUE1RTlDQTAwREQxNjIyIC8qIEV4dGVuc2lvbnMzRE9wZW5HTENv
bW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzcyODY5NEYxNEY4ODgyNTAwRjQ4NERDIC8qIEVY
VFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc1RThCODkw
RTFERTJENjAwN0YyNDgxIC8qIEZFQmxlbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NUU4QjhC
MEUxREUyRDYwMDdGMjQ4MSAvKiBGRUNvbG9yTWF0cml4LmggaW4gSGVhZGVycyAqLywKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNE
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5o
CmluZGV4IGRiZDlkZmVkZTAxM2E0Y2FmMzMyNDYzYWQzMmZjNGUxNTI4MjY0NjcuLjE2ZDEyZjE2
M2JkNWQxZTA5ZjMxMTUyZWRkYTFiMmI2NWUyMmVhNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaApAQCAtMjAsNyArMjAs
NyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaWZuZGVmIEdyYXBoaWNzQ29udGV4dDNEX2gK
QEAgLTkxLDE0ICs5MSwxMiBAQCBjb25zdCBQbGF0Zm9ybTNET2JqZWN0IE51bGxQbGF0Zm9ybTNE
T2JqZWN0ID0gMDsKICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dDb250ZXh0Lmg+CiAjZW5kaWYK
IAotI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0jZW5k
aWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRHJhd2luZ0J1ZmZlcjsKIGNsYXNzIEV4
dGVuc2lvbnMzRDsKLSNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZP
Uk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkKKyNpZiBVU0UoT1BFTkdMX0VTXzIpCitjbGFzcyBFeHRl
bnNpb25zM0RPcGVuR0xFUzsKKyNlbHNlCiBjbGFzcyBFeHRlbnNpb25zM0RPcGVuR0w7CiAjZW5k
aWYKICNpZiBQTEFURk9STShRVCkKQEAgLTkyNCw2ICs5MjIsNyBAQCBwdWJsaWM6CiAgICAgLy8g
aW4gcGFydGljdWxhciBzdGVuY2lsIGFuZCBhbnRpYWxpYXMsIGFuZCBkZXRlcm1pbmUgd2hpY2gg
Y291bGQgb3IKICAgICAvLyBjb3VsZCBub3QgYmUgaG9ub3JlZCBiYXNlZCBvbiB0aGUgY2FwYWJp
bGl0aWVzIG9mIHRoZSBPcGVuR0wKICAgICAvLyBpbXBsZW1lbnRhdGlvbi4KKyAgICB2b2lkIHZh
bGlkYXRlRGVwdGhTdGVuY2lsKGNvbnN0IGNoYXIqIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lv
bik7CiAgICAgdm9pZCB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKIAogICAgIC8vIFJlYWQgcmVuZGVy
aW5nIHJlc3VsdHMgaW50byBhIHBpeGVsIGFycmF5IHdpdGggdGhlIHNhbWUgZm9ybWF0IGFzIHRo
ZQpAQCAtOTU1LDE2ICs5NTQsMzAgQEAgcHVibGljOgogICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9i
amVjdCwgU2hhZGVyU291cmNlRW50cnk+IG1fc2hhZGVyU291cmNlTWFwOwogCiAgICAgQU5HTEVX
ZWJLaXRCcmlkZ2UgbV9jb21waWxlcjsKKyNlbmRpZgogCisjaWYgUExBVEZPUk0oUVQpICYmIGRl
ZmluZWQoUVRfT1BFTkdMX0VTXzIpCisgICAgZnJpZW5kIGNsYXNzIEV4dGVuc2lvbnMzRFF0Owor
ICAgIE93blB0cjxFeHRlbnNpb25zM0RRdD4gbV9leHRlbnNpb25zOworI2VsaWYgUExBVEZPUk0o
QkxBQ0tCRVJSWSkKKyAgICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9uczNET3BlbkdMRVM7CisgICAg
T3duUHRyPEV4dGVuc2lvbnMzRE9wZW5HTEVTPiBtX2V4dGVuc2lvbnM7CisjZWxpZiAhUExBVEZP
Uk0oQ0hST01JVU0pCiAgICAgZnJpZW5kIGNsYXNzIEV4dGVuc2lvbnMzRE9wZW5HTDsKICAgICBP
d25QdHI8RXh0ZW5zaW9uczNET3BlbkdMPiBtX2V4dGVuc2lvbnM7CisjZW5kaWYKKyAgICBmcmll
bmQgY2xhc3MgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOwogCiAgICAgQXR0cmlidXRlcyBtX2F0
dHJzOwogICAgIFZlY3RvcjxWZWN0b3I8ZmxvYXQ+ID4gbV92ZXJ0ZXhBcnJheTsKIAotICAgIEdD
M0R1aW50IG1fdGV4dHVyZSwgbV9jb21wb3NpdG9yVGV4dHVyZTsKKyAgICBHQzNEdWludCBtX3Rl
eHR1cmU7CisjaWYgIVBMQVRGT1JNKEJMQUNLQkVSUlkpCisgICAgR0MzRHVpbnQgbV9jb21wb3Np
dG9yVGV4dHVyZTsKKyNlbmRpZgogICAgIEdDM0R1aW50IG1fZmJvOwotI2lmIFVTRShPUEVOR0xf
RVNfMikKKworI2lmICFQTEFURk9STShCTEFDS0JFUlJZKQogICAgIEdDM0R1aW50IG1fZGVwdGhC
dWZmZXI7CiAgICAgR0MzRHVpbnQgbV9zdGVuY2lsQnVmZmVyOwogI2VuZGlmCkBAIC05ODUsMTAg
Kzk5OCwxMSBAQCBwdWJsaWM6CiAKICAgICAvLyBFcnJvcnMgcmFpc2VkIGJ5IHN5bnRoZXNpemVH
TEVycm9yKCkuCiAgICAgTGlzdEhhc2hTZXQ8R0MzRGVudW0+IG1fc3ludGhldGljRXJyb3JzOwot
I2VuZGlmCiAKICAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOwogICAg
IE93blB0cjxHcmFwaGljc0NvbnRleHQzRFByaXZhdGU+IG1fcHJpdmF0ZTsKKworICAgIGJvb2wg
c3lzdGVtQWxsb3dzTXVsdGlzYW1wbGluZ09uQVRJQ2FyZHMoKTsgCiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9PcGVuR0xFU1NoaW1zLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9PcGVu
R0xFU1NoaW1zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWRiOTE5MzNmODViYzA2MWNjOWM4NTI1NGRjMzRmMDlj
MjkzYTgwOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL09wZW5HTEVTU2hpbXMuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgT3BlbkdMRVNTaGltc19oCisjZGVmaW5lIE9w
ZW5HTEVTU2hpbXNfaAorCisjaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKKyNkZWZpbmUgZ2xCaW5k
RnJhbWVidWZmZXJFWFQgZ2xCaW5kRnJhbWVidWZmZXIKKyNkZWZpbmUgZ2xGcmFtZWJ1ZmZlclRl
eHR1cmUyREVYVCBnbEZyYW1lYnVmZmVyVGV4dHVyZTJECisjZGVmaW5lIGdsQmluZFJlbmRlcmJ1
ZmZlckVYVCBnbEJpbmRSZW5kZXJidWZmZXIKKyNkZWZpbmUgZ2xSZW5kZXJidWZmZXJTdG9yYWdl
RVhUIGdsUmVuZGVyYnVmZmVyU3RvcmFnZQorI2RlZmluZSBnbEZyYW1lYnVmZmVyUmVuZGVyYnVm
ZmVyRVhUIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIKKyNkZWZpbmUgR0xfUkVOREVSQlVGRkVS
X0VYVCBHTF9SRU5ERVJCVUZGRVIKKyNkZWZpbmUgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UX0VYVCBH
TF9TVEVOQ0lMX0FUVEFDSE1FTlQKKyNkZWZpbmUgZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhU
IGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1cworI2RlZmluZSBnbERlbGV0ZUZyYW1lYnVmZmVyc0VY
VCBnbERlbGV0ZUZyYW1lYnVmZmVycworI2RlZmluZSBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQg
Z2xEZWxldGVSZW5kZXJidWZmZXJzCisjZGVmaW5lIGdsR2VuUmVuZGVyYnVmZmVyc0VYVCBnbEdl
blJlbmRlcmJ1ZmZlcnMKKyNkZWZpbmUgZ2xHZW5GcmFtZWJ1ZmZlcnNFWFQgZ2xHZW5GcmFtZWJ1
ZmZlcnMKKyNkZWZpbmUgZ2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdkVYVCBn
bEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2CisjZGVmaW5lIGdsR2V0UmVuZGVy
YnVmZmVyUGFyYW1ldGVyaXZFWFQgZ2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdgorI2RlZmlu
ZSBnbElzUmVuZGVyYnVmZmVyRVhUIGdsSXNSZW5kZXJidWZmZXIKKyNkZWZpbmUgZ2xJc0ZyYW1l
YnVmZmVyRVhUIGdsSXNGcmFtZWJ1ZmZlcgorI2RlZmluZSBnbEdlbmVyYXRlTWlwbWFwRVhUIGds
R2VuZXJhdGVNaXBtYXAKKyNkZWZpbmUgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhUIEdMX0NPTE9S
X0FUVEFDSE1FTlQwCisjZGVmaW5lIEdMX0RFUFRIX0FUVEFDSE1FTlRfRVhUIEdMX0RFUFRIX0FU
VEFDSE1FTlQKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQ09NUExFVEVfRVhUIEdMX0ZSQU1FQlVG
RkVSX0NPTVBMRVRFCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0VYVCBHTF9GUkFNRUJVRkZFUgor
I2RlZmluZSBHTF9ERVBUSDI0X1NURU5DSUw4X0VYVCBHTF9ERVBUSDI0X1NURU5DSUw4X09FUwor
I2RlZmluZSBHTF9SR0JBOCBHTF9SR0JBOF9PRVMKKyNkZWZpbmUgR0xfUkdCOCBHTF9SR0I4X09F
UworI2RlZmluZSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCAweDhDQTgKKyNkZWZpbmUgR0xfRFJB
V19GUkFNRUJVRkZFUl9FWFQgMHg4Q0E5CisjZGVmaW5lIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVf
TVVMVElTQU1QTEVfRVhUIDB4OTEzNAorI2RlZmluZSBHTF9NQVhfU0FNUExFU19FWFQgMHg4RDU3
CisjZW5kaWYgLy8gUExBVEZPUk0oQkxBQ0tCRVJSWSkKKworI2VuZGlmIC8vIE9wZW5HTEVTU2hp
bXNfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCmluZGV4IGFjMjkyZDM3NTE1
NzkyZWNhMzIyOWU2ZjY3Mzg4ZWIyOGU1MWUwOTYuLmZkMWRhZDA5ZjAxMWI3NmM5ZTU5ZTQ4NTM5
YWM5YzAzZGFhZGIzNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCkBAIC0z
Myw2ICszMyw3IEBACiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMLmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCiAjaW5jbHVkZSAi
UGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgpAQCAtMTQ2
LDYgKzE0NywxMSBAQCBHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKICAg
ICA6OmdsRGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZtX2Zibyk7CiB9CiAKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKEltYWdlKiBp
bWFnZSwgdW5zaWduZWQgaW50IGZvcm1hdCwgdW5zaWduZWQgaW50IHR5cGUsIGJvb2wgcHJlbXVs
dGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSwgVmVjdG9yPHVpbnQ4
X3Q+JiBvdXRwdXRWZWN0b3IpCiB7CiAgICAgaWYgKCFpbWFnZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NDb250ZXh0M0RDbHV0
dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhp
Y3NDb250ZXh0M0RDbHV0dGVyLmNwcAppbmRleCBjYTBmZmRjMmJjYjlkODkzODZiMTVkNDhjMzIz
OGViM2VmOWIwOTU0Li43ZTIyZjcyMmQ0YmQzNTNkMzMxYmRjNjA3NzVlN2Q3MWFhMDVlNTFlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBo
aWNzQ29udGV4dDNEQ2x1dHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2x1dHRlci9HcmFwaGljc0NvbnRleHQzRENsdXR0ZXIuY3BwCkBAIC01Niw2ICs1Niwx
MSBAQCBHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKICAgICBub3RJbXBs
ZW1lbnRlZCgpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29t
cGlsZXIoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKIGJvb2wgR3JhcGhpY3NDb250
ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFnZSogaW1hZ2UsIHVuc2lnbmVkIGludCBmb3JtYXQsIHVu
c2lnbmVkIGludCB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFB
bmRDb2xvclByb2ZpbGUsIFZlY3Rvcjx1aW50OF90PiYgb3V0cHV0VmVjdG9yKQogewogICAgIG5v
dEltcGxlbWVudGVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwCmluZGV4IDRhYTM0MWMz
MjZjNzM1N2IxMTBjOTgzZDAzOWNjZDdiYzMzMTY2MTIuLmJiZTc3YmI3OTg1NGM5MjM3ZThjYjY3
MDZjOTc0NjU5OTU2MmI5MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwCkBAIC00Miw3
ICs0Miw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEV4dGVuc2lvbnMzRE9wZW5HTDo6RXh0
ZW5zaW9uczNET3BlbkdMKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQotICAgIDogbV9pbml0
aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnMoZmFsc2UpCisgICAgOiBFeHRlbnNpb25zM0RPcGVu
R0xDb21tb24oY29udGV4dCkKKyAgICAsIG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25z
KGZhbHNlKQogICAgICwgbV9jb250ZXh0KGNvbnRleHQpCiB7CiB9CkBAIC01MSw5MSArNTIsNiBA
QCBFeHRlbnNpb25zM0RPcGVuR0w6On5FeHRlbnNpb25zM0RPcGVuR0woKQogewogfQogCi1ib29s
IEV4dGVuc2lvbnMzRE9wZW5HTDo6c3VwcG9ydHMoY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAg
IC8vIE5vdGUgb24gc3VwcG9ydCBmb3IgQkdSQToKLSAgICAvLwotICAgIC8vIEZvciBPcGVuR0wg
RVMyLjAsIHJlcXVpcmVzIGNoZWNraW5nIGZvcgotICAgIC8vIEdMX0VYVF90ZXh0dXJlX2Zvcm1h
dF9CR1JBODg4OCBhbmQgR0xfRVhUX3JlYWRfZm9ybWF0X2JncmEuCi0gICAgLy8gRm9yIGRlc2t0
b3AgR0wsIEJHUkEgaGFzIGJlZW4gc3VwcG9ydGVkIHNpbmNlIE9wZW5HTCAxLjIuCi0gICAgLy8K
LSAgICAvLyBIb3dldmVyLCBub3RlIHRoYXQgdGhlIEdMIEVTMiBleHRlbnNpb24gcmVxdWlyZXMg
dGhlCi0gICAgLy8gaW50ZXJuYWxGb3JtYXQgdG8gZ2xUZXhJbWFnZTJEKCkgYmUgR0xfQkdSQSwg
d2hpbGUgZGVza3RvcCBHTAotICAgIC8vIHdpbGwgbm90IGFjY2VwdCBHTF9CR1JBIChtdXN0IGJl
IEdMX1JHQkEpLCBzbyB0aGlzIG11c3QgYmUKLSAgICAvLyBjaGVja2VkIG9uIGVhY2ggcGxhdGZv
cm0uIERlc2t0b3AgR0wgb2ZmZXJzIG5laXRoZXIKLSAgICAvLyBHTF9FWFRfdGV4dHVyZV9mb3Jt
YXRfQkdSQTg4ODggb3IgR0xfRVhUX3JlYWRfZm9ybWF0X2JncmEsIHNvCi0gICAgLy8gdHJlYXQg
dGhlbSBhcyB1bnN1cHBvcnRlZCBoZXJlLgotICAgIGlmICghbV9pbml0aWFsaXplZEF2YWlsYWJs
ZUV4dGVuc2lvbnMpIHsKLSAgICAgICAgU3RyaW5nIGV4dGVuc2lvbnNTdHJpbmcocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhHTF9FWFRFTlNJT05TKSkpOwotICAg
ICAgICBWZWN0b3I8U3RyaW5nPiBhdmFpbGFibGVFeHRlbnNpb25zOwotICAgICAgICBleHRlbnNp
b25zU3RyaW5nLnNwbGl0KCIgIiwgYXZhaWxhYmxlRXh0ZW5zaW9ucyk7Ci0gICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgYXZhaWxhYmxlRXh0ZW5zaW9ucy5zaXplKCk7ICsraSkKLSAgICAg
ICAgICAgIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5hZGQoYXZhaWxhYmxlRXh0ZW5zaW9uc1tpXSk7
Ci0gICAgICAgIG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zID0gdHJ1ZTsKLSAgICB9
Ci0gICAgCi0gICAgLy8gR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCBhbmQgR0xfQU5HTEVfZnJh
bWVidWZmZXJfbXVsdGlzYW1wbGUgYXJlICJmYWtlIi4gVGhleSBhcmUgaW1wbGVtZW50ZWQgdXNp
bmcgb3RoZXIKLSAgICAvLyBleHRlbnNpb25zLiBJbiBwYXJ0aWN1bGFyIEdMX0VYVF9mcmFtZWJ1
ZmZlcl9ibGl0IGFuZCBHTF9FWFRfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUKLSAgICBpZiAobmFt
ZSA9PSAiR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCIpCi0gICAgICAgIHJldHVybiBtX2F2YWls
YWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0VYVF9mcmFtZWJ1ZmZlcl9ibGl0Iik7Ci0gICAg
aWYgKG5hbWUgPT0gIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIikKLSAgICAgICAg
cmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfRVhUX2ZyYW1lYnVmZmVy
X211bHRpc2FtcGxlIik7Ci0KLSAgICAvLyBEZXNrdG9wIEdMIGFsd2F5cyBzdXBwb3J0cyBHTF9P
RVNfcmdiOF9yZ2JhOC4KLSAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3JnYjhfcmdiYTgiKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIElmIEdMX0FSQl90ZXh0dXJlX2Zsb2F0IGlzIGF2
YWlsYWJsZSB0aGVuIHdlIHJlcG9ydCBHTF9PRVNfdGV4dHVyZV9mbG9hdCBhbmQKLSAgICAvLyBH
TF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IGFzIGF2YWlsYWJsZS4KLSAgICBpZiAobmFtZSA9PSAi
R0xfT0VTX3RleHR1cmVfZmxvYXQiIHx8IG5hbWUgPT0gIkdMX09FU190ZXh0dXJlX2hhbGZfZmxv
YXQiKQotICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9B
UkJfdGV4dHVyZV9mbG9hdCIpOwotICAgIAotICAgIC8vIEdMX09FU192ZXJ0ZXhfYXJyYXlfb2Jq
ZWN0Ci0gICAgaWYgKG5hbWUgPT0gIkdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikKLSAgICAg
ICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfQVBQTEVfdmVydGV4
X2FycmF5X29iamVjdCIpOwotCi0gICAgLy8gRGVza3RvcCBHTCBhbHdheXMgc3VwcG9ydHMgdGhl
IHN0YW5kYXJkIGRlcml2YXRpdmUgZnVuY3Rpb25zCi0gICAgaWYgKG5hbWUgPT0gIkdMX09FU19z
dGFuZGFyZF9kZXJpdmF0aXZlcyIpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKG5h
bWUgPT0gIkdMX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpCi0gICAgICAgIHJldHVy
biBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0VYVF90ZXh0dXJlX2ZpbHRlcl9h
bmlzb3Ryb3BpYyIpOwotCi0gICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlu
cyhuYW1lKTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RPcGVuR0w6OmVuc3VyZUVuYWJsZWQoY29u
c3QgU3RyaW5nJiBuYW1lKQotewotI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oUVQpIHx8
IFBMQVRGT1JNKEdUSykKLSAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRp
dmVzIikgewotICAgICAgICAvLyBFbmFibGUgc3VwcG9ydCBpbiBBTkdMRSAoaWYgbm90IGVuYWJs
ZWQgYWxyZWFkeSkKLSAgICAgICAgQU5HTEVXZWJLaXRCcmlkZ2UmIGNvbXBpbGVyID0gbV9jb250
ZXh0LT5tX2NvbXBpbGVyOwotICAgICAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgQU5HTEVSZXNvdXJj
ZXMgPSBjb21waWxlci5nZXRSZXNvdXJjZXMoKTsKLSAgICAgICAgaWYgKCFBTkdMRVJlc291cmNl
cy5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMpIHsKLSAgICAgICAgICAgIEFOR0xFUmVzb3VyY2Vz
Lk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA9IDE7Ci0gICAgICAgICAgICBjb21waWxlci5zZXRS
ZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOwotICAgICAgICB9Ci0gICAgfQotI2Vsc2UKLSAgICBB
U1NFUlRfVU5VU0VEKG5hbWUsIHN1cHBvcnRzKG5hbWUpKTsKLSNlbmRpZgotfQotCi1ib29sIEV4
dGVuc2lvbnMzRE9wZW5HTDo6aXNFbmFibGVkKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSNpZiBQ
TEFURk9STShNQUMpIHx8IFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEspCi0gICAgaWYgKG5h
bWUgPT0gIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpIHsKLSAgICAgICAgQU5HTEVXZWJL
aXRCcmlkZ2UmIGNvbXBpbGVyID0gbV9jb250ZXh0LT5tX2NvbXBpbGVyOwotICAgICAgICByZXR1
cm4gY29tcGlsZXIuZ2V0UmVzb3VyY2VzKCkuT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzOwotICAg
IH0KLSNlbmRpZgotICAgIHJldHVybiBzdXBwb3J0cyhuYW1lKTsKLX0KLQotaW50IEV4dGVuc2lv
bnMzRE9wZW5HTDo6Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpCi17Ci0gICAgcmV0dXJuIEdy
YXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUjsKLX0KIAogdm9pZCBFeHRlbnNpb25zM0RPcGVuR0w6
OmJsaXRGcmFtZWJ1ZmZlcihsb25nIHNyY1gwLCBsb25nIHNyY1kwLCBsb25nIHNyY1gxLCBsb25n
IHNyY1kxLCBsb25nIGRzdFgwLCBsb25nIGRzdFkwLCBsb25nIGRzdFgxLCBsb25nIGRzdFkxLCB1
bnNpZ25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcgZmlsdGVyKQogewpAQCAtMTk0LDE5ICsx
MTAsNDkgQEAgdm9pZCBFeHRlbnNpb25zM0RPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0
Zm9ybTNET2JqZWN0IGFycmF5KQogI2VuZGlmCiB9CiAKLVN0cmluZyBFeHRlbnNpb25zM0RPcGVu
R0w6OmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShQbGF0Zm9ybTNET2JqZWN0IHNoYWRl
cikKLXsKLSAgICBVTlVTRURfUEFSQU0oc2hhZGVyKTsKLSAgICByZXR1cm4gIiI7Ci0gICAgLy8g
RklYTUU6IGltcGxlbWVudCB0aGlzIGZ1bmN0aW9uIGFuZCBhZGQgR0xfQU5HTEVfdHJhbnNsYXRl
ZF9zaGFkZXJfc291cmNlIGluIHN1cHBvcnRzKCkuCi19Ci0KIHZvaWQgRXh0ZW5zaW9uczNET3Bl
bkdMOjpjb3B5VGV4dHVyZUNIUk9NSVVNKEdDM0RlbnVtLCBQbGF0Zm9ybTNET2JqZWN0LCBQbGF0
Zm9ybTNET2JqZWN0LCBHQzNEaW50LCBHQzNEZW51bSkKIHsKICAgICAvLyBGSVhNRTogaW1wbGVt
ZW50IHRoaXMgZnVuY3Rpb24gYW5kIGFkZCBHTF9DSFJPTUlVTV9jb3B5X3RleHR1cmUgaW4gc3Vw
cG9ydHMoKS4KICAgICByZXR1cm47CiB9CiAKK2Jvb2wgRXh0ZW5zaW9uczNET3BlbkdMOjpzdXBw
b3J0c0V4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgLy8gR0xfQU5HTEVfZnJh
bWVidWZmZXJfYmxpdCBhbmQgR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUgYXJlICJm
YWtlIi4gVGhleSBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgb3RoZXIKKyAgICAvLyBleHRlbnNpb25z
LiBJbiBwYXJ0aWN1bGFyIEdMX0VYVF9mcmFtZWJ1ZmZlcl9ibGl0IGFuZCBHTF9FWFRfZnJhbWVi
dWZmZXJfbXVsdGlzYW1wbGUKKyAgICBpZiAobmFtZSA9PSAiR0xfQU5HTEVfZnJhbWVidWZmZXJf
YmxpdCIpCisgICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdM
X0VYVF9mcmFtZWJ1ZmZlcl9ibGl0Iik7CisgICAgaWYgKG5hbWUgPT0gIkdMX0FOR0xFX2ZyYW1l
YnVmZmVyX211bHRpc2FtcGxlIikKKyAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9u
cy5jb250YWlucygiR0xfRVhUX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIik7CisKKyAgICAvLyBE
ZXNrdG9wIEdMIGFsd2F5cyBzdXBwb3J0cyBHTF9PRVNfcmdiOF9yZ2JhOC4KKyAgICBpZiAobmFt
ZSA9PSAiR0xfT0VTX3JnYjhfcmdiYTgiKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8v
IElmIEdMX0FSQl90ZXh0dXJlX2Zsb2F0IGlzIGF2YWlsYWJsZSB0aGVuIHdlIHJlcG9ydCBHTF9P
RVNfdGV4dHVyZV9mbG9hdCBhbmQKKyAgICAvLyBHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IGFz
IGF2YWlsYWJsZS4KKyAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3RleHR1cmVfZmxvYXQiIHx8IG5h
bWUgPT0gIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQiKQorICAgICAgICByZXR1cm4gbV9hdmFp
bGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9BUkJfdGV4dHVyZV9mbG9hdCIpOworCisgICAg
Ly8gR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QKKyAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3Zl
cnRleF9hcnJheV9vYmplY3QiKQorICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25z
LmNvbnRhaW5zKCJHTF9BUFBMRV92ZXJ0ZXhfYXJyYXlfb2JqZWN0Iik7CisKKyAgICAvLyBEZXNr
dG9wIEdMIGFsd2F5cyBzdXBwb3J0cyB0aGUgc3RhbmRhcmQgZGVyaXZhdGl2ZSBmdW5jdGlvbnMK
KyAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBpZiAobmFtZSA9PSAiR0xfRVhUX3RleHR1cmVfZmlsdGVyX2Fu
aXNvdHJvcGljIikKKyAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlu
cygiR0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7CisKKyAgICByZXR1cm4gbV9h
dmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKG5hbWUpOworfQorCitTdHJpbmcgRXh0ZW5zaW9u
czNET3BlbkdMOjpnZXRFeHRlbnNpb25zKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgY2hhcio+KDo6Z2xHZXRTdHJpbmcoR0xfRVhURU5TSU9OUykpKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lv
bnMzRE9wZW5HTC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4
dGVuc2lvbnMzRE9wZW5HTC5oCmluZGV4IDJiMmQzMGEwOTBlNTRmY2ExZDA2NDYyYWU3MWRkN2Vj
ODcyYjU0NGMuLmEyNzg5YmRjY2MwNWRlYTRkNmRmOWIzYjRjNDc3N2Y3YjE5ZWExMjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25z
M0RPcGVuR0wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
RXh0ZW5zaW9uczNET3BlbkdMLmgKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgRXh0ZW5zaW9u
czNET3BlbkdMX2gKICNkZWZpbmUgRXh0ZW5zaW9uczNET3BlbkdMX2gKIAotI2luY2x1ZGUgIkV4
dGVuc2lvbnMzRC5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oIgogCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpA
QCAtMzQsMTUgKzM0LDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRXh0ZW5z
aW9uczNET3BlbkdMIDogcHVibGljIEV4dGVuc2lvbnMzRCB7CitjbGFzcyBFeHRlbnNpb25zM0RP
cGVuR0wgOiBwdWJsaWMgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uIHsKIHB1YmxpYzoKICAgICB2
aXJ0dWFsIH5FeHRlbnNpb25zM0RPcGVuR0woKTsKIAogICAgIC8vIEV4dGVuc2lvbnMzRCBtZXRo
b2RzLgotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0cyhjb25zdCBTdHJpbmcmKTsKLSAgICB2aXJ0
dWFsIHZvaWQgZW5zdXJlRW5hYmxlZChjb25zdCBTdHJpbmcmKTsKLSAgICB2aXJ0dWFsIGJvb2wg
aXNFbmFibGVkKGNvbnN0IFN0cmluZyYpOwotICAgIHZpcnR1YWwgaW50IGdldEdyYXBoaWNzUmVz
ZXRTdGF0dXNBUkIoKTsKICAgICB2aXJ0dWFsIHZvaWQgYmxpdEZyYW1lYnVmZmVyKGxvbmcgc3Jj
WDAsIGxvbmcgc3JjWTAsIGxvbmcgc3JjWDEsIGxvbmcgc3JjWTEsIGxvbmcgZHN0WDAsIGxvbmcg
ZHN0WTAsIGxvbmcgZHN0WDEsIGxvbmcgZHN0WTEsIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWdu
ZWQgbG9uZyBmaWx0ZXIpOwogICAgIHZpcnR1YWwgdm9pZCByZW5kZXJidWZmZXJTdG9yYWdlTXVs
dGlzYW1wbGUodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcywgdW5z
aWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQg
bG9uZyBoZWlnaHQpOwogICAgIApAQCAtNTAsMTQgKzQ2LDE2IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCk7CiAgICAgdmly
dHVhbCBHQzNEYm9vbGVhbiBpc1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpOwogICAg
IHZpcnR1YWwgdm9pZCBiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAg
dmlydHVhbCBTdHJpbmcgZ2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRmb3JtM0RP
YmplY3QpOwogICAgIHZpcnR1YWwgdm9pZCBjb3B5VGV4dHVyZUNIUk9NSVVNKEdDM0RlbnVtLCBQ
bGF0Zm9ybTNET2JqZWN0LCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEaW50LCBHQzNEZW51bSk7CiAK
LXByaXZhdGU6Citwcm90ZWN0ZWQ6CiAgICAgLy8gVGhpcyBjbGFzcyBvbmx5IG5lZWRzIHRvIGJl
IGluc3RhbnRpYXRlZCBieSBHcmFwaGljc0NvbnRleHQzRCBpbXBsZW1lbnRhdGlvbnMuCiAgICAg
ZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogICAgIEV4dGVuc2lvbnMzRE9wZW5HTChH
cmFwaGljc0NvbnRleHQzRCopOwogCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRXh0ZW5zaW9u
KGNvbnN0IFdURjo6U3RyaW5nJik7CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0RXh0ZW5zaW9ucygp
OworCiAgICAgYm9vbCBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9uczsKICAgICBIYXNo
U2V0PFN0cmluZz4gbV9hdmFpbGFibGVFeHRlbnNpb25zOwogICAgIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENv
bW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZTQ2OGQ1NGQ3ZGMzYWEyNDQ3Zjc1
YTQ4MjllNDRhYmMwMzlmZjYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKQEAgLTAs
MCArMSwxNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaWYgRU5BQkxFKFdFQkdMKQorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5o
IgorCisjaW5jbHVkZSAiQU5HTEVXZWJLaXRCcmlkZ2UuaCIKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQzRC5oIgorCisjaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKKyNpbmNsdWRlIDxCbGFja0Jl
cnJ5UGxhdGZvcm1Mb2cuaD4KKyNlbmRpZgorCisjaWYgVVNFKE9QRU5HTF9FU18yKQorI2luY2x1
ZGUgIk9wZW5HTEVTU2hpbXMuaCIKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNsdWRlIDxH
TEVTMi9nbDJleHQuaD4KKyNlbGlmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlIDxPcGVuR0wvZ2wu
aD4KKyNlbGlmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShRVCkK
KyNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjpF
eHRlbnNpb25zM0RPcGVuR0xDb21tb24oR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAg
OiBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucyhmYWxzZSkKKyAgICAsIG1fY29udGV4
dChjb250ZXh0KQoreworfQorCitFeHRlbnNpb25zM0RPcGVuR0xDb21tb246On5FeHRlbnNpb25z
M0RPcGVuR0xDb21tb24oKQoreworfQorCitib29sIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6
c3VwcG9ydHMoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmICghbV9pbml0aWFsaXplZEF2
YWlsYWJsZUV4dGVuc2lvbnMpCisgICAgICAgIGluaXRpYWxpemVBdmFpbGFibGVFeHRlbnNpb25z
KCk7CisKKyAgICByZXR1cm4gc3VwcG9ydHNFeHRlbnNpb24obmFtZSk7Cit9CisKK3ZvaWQgRXh0
ZW5zaW9uczNET3BlbkdMQ29tbW9uOjplbnN1cmVFbmFibGVkKGNvbnN0IFN0cmluZyYgbmFtZSkK
K3sKKyAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikgeworICAg
ICAgICAvLyBFbmFibGUgc3VwcG9ydCBpbiBBTkdMRSAoaWYgbm90IGVuYWJsZWQgYWxyZWFkeSkK
KyAgICAgICAgQU5HTEVXZWJLaXRCcmlkZ2UmIGNvbXBpbGVyID0gbV9jb250ZXh0LT5tX2NvbXBp
bGVyOworICAgICAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgQU5HTEVSZXNvdXJjZXMgPSBjb21waWxl
ci5nZXRSZXNvdXJjZXMoKTsKKyAgICAgICAgaWYgKCFBTkdMRVJlc291cmNlcy5PRVNfc3RhbmRh
cmRfZGVyaXZhdGl2ZXMpIHsKKyAgICAgICAgICAgIEFOR0xFUmVzb3VyY2VzLk9FU19zdGFuZGFy
ZF9kZXJpdmF0aXZlcyA9IDE7CisgICAgICAgICAgICBjb21waWxlci5zZXRSZXNvdXJjZXMoQU5H
TEVSZXNvdXJjZXMpOworICAgICAgICB9CisgICAgfQorfQorCitib29sIEV4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbjo6aXNFbmFibGVkKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAobmFt
ZSA9PSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikgeworICAgICAgICBBTkdMRVdlYktp
dEJyaWRnZSYgY29tcGlsZXIgPSBtX2NvbnRleHQtPm1fY29tcGlsZXI7CisgICAgICAgIHJldHVy
biBjb21waWxlci5nZXRSZXNvdXJjZXMoKS5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXM7CisgICAg
fQorICAgIHJldHVybiBzdXBwb3J0cyhuYW1lKTsKK30KKworaW50IEV4dGVuc2lvbnMzRE9wZW5H
TENvbW1vbjo6Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpCit7CisgICAgcmV0dXJuIEdyYXBo
aWNzQ29udGV4dDNEOjpOT19FUlJPUjsKK30KKworU3RyaW5nIEV4dGVuc2lvbnMzRE9wZW5HTENv
bW1vbjo6Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRmb3JtM0RPYmplY3Qgc2hh
ZGVyKQoreworICAgIEFTU0VSVChzaGFkZXIpOworICAgIGludCBHTHNoYWRlclR5cGU7CisgICAg
QU5HTEVTaGFkZXJUeXBlIHNoYWRlclR5cGU7CisKKyAgICBBTkdMRVdlYktpdEJyaWRnZSYgY29t
cGlsZXIgPSBtX2NvbnRleHQtPm1fY29tcGlsZXI7CisKKyAgICBtX2NvbnRleHQtPmdldFNoYWRl
cml2KHNoYWRlciwgR3JhcGhpY3NDb250ZXh0M0Q6OlNIQURFUl9UWVBFLCAmR0xzaGFkZXJUeXBl
KTsKKworICAgIGlmIChHTHNoYWRlclR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9T
SEFERVIpCisgICAgICAgIHNoYWRlclR5cGUgPSBTSEFERVJfVFlQRV9WRVJURVg7CisgICAgZWxz
ZSBpZiAoR0xzaGFkZXJUeXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVIp
CisgICAgICAgIHNoYWRlclR5cGUgPSBTSEFERVJfVFlQRV9GUkFHTUVOVDsKKyAgICBlbHNlCisg
ICAgICAgIHJldHVybiAiIjsgLy8gSW52YWxpZCBzaGFkZXIgdHlwZS4KKworICAgIEhhc2hNYXA8
UGxhdGZvcm0zRE9iamVjdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlNoYWRlclNvdXJjZUVudHJ5Pjo6
aXRlcmF0b3IgcmVzdWx0ID0gbV9jb250ZXh0LT5tX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRl
cik7CisKKyAgICBpZiAocmVzdWx0ID09IG1fY29udGV4dC0+bV9zaGFkZXJTb3VyY2VNYXAuZW5k
KCkpCisgICAgICAgIHJldHVybiAiIjsKKworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpTaGFkZXJT
b3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnNlY29uZDsKKworICAgIFN0cmluZyB0cmFuc2xh
dGVkU2hhZGVyU291cmNlOworICAgIFN0cmluZyBzaGFkZXJJbmZvTG9nOworCisgICAgYm9vbCBp
c1ZhbGlkID0gY29tcGlsZXIudmFsaWRhdGVTaGFkZXJTb3VyY2UoZW50cnkuc291cmNlLnV0Zjgo
KS5kYXRhKCksIHNoYWRlclR5cGUsIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UsIHNoYWRlckluZm9M
b2cpOworCisgICAgZW50cnkubG9nID0gc2hhZGVySW5mb0xvZzsKKyAgICBlbnRyeS5pc1ZhbGlk
ID0gaXNWYWxpZDsKKworICAgIGlmICghaXNWYWxpZCkKKyAgICAgICAgcmV0dXJuICIiOworCisg
ICAgcmV0dXJuIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uczNE
T3BlbkdMQ29tbW9uOjppbml0aWFsaXplQXZhaWxhYmxlRXh0ZW5zaW9ucygpCit7CisgICAgU3Ry
aW5nIGV4dGVuc2lvbnNTdHJpbmcgPSBnZXRFeHRlbnNpb25zKCk7CisgICAgVmVjdG9yPFN0cmlu
Zz4gYXZhaWxhYmxlRXh0ZW5zaW9uczsKKyAgICBleHRlbnNpb25zU3RyaW5nLnNwbGl0KCIgIiwg
YXZhaWxhYmxlRXh0ZW5zaW9ucyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhdmFpbGFi
bGVFeHRlbnNpb25zLnNpemUoKTsgKytpKQorICAgICAgICBtX2F2YWlsYWJsZUV4dGVuc2lvbnMu
YWRkKGF2YWlsYWJsZUV4dGVuc2lvbnNbaV0pOworICAgIG1faW5pdGlhbGl6ZWRBdmFpbGFibGVF
eHRlbnNpb25zID0gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjkwMTgzOWU2ZTNlNGI5NWExZTU2NmNkMTFmOGEyN2Q2OWJlYjM5ZTUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uLmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRXh0
ZW5zaW9uczNET3BlbkdMQ29tbW9uX2gKKyNkZWZpbmUgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9u
X2gKKworI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0M0QuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBFeHRlbnNpb25zM0RP
cGVuR0xDb21tb24gOiBwdWJsaWMgRXh0ZW5zaW9uczNEIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IH5FeHRlbnNpb25zM0RPcGVuR0xDb21tb24oKTsKKworICAgIC8vIEV4dGVuc2lvbnMzRCBtZXRo
b2RzLgorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0cyhjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZW5zdXJlRW5hYmxlZChjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIGJvb2wg
aXNFbmFibGVkKGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgaW50IGdldEdyYXBoaWNzUmVz
ZXRTdGF0dXNBUkIoKTsKKworICAgIHZpcnR1YWwgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVWZXJ0
ZXhBcnJheU9FUygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlVmVydGV4QXJyYXlPRVMo
UGxhdGZvcm0zRE9iamVjdCkgPSAwOworICAgIHZpcnR1YWwgR0MzRGJvb2xlYW4gaXNWZXJ0ZXhB
cnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJpbmRWZXJ0
ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KSA9IDA7CisKKyAgICB2aXJ0dWFsIFN0cmluZyBn
ZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoUGxhdGZvcm0zRE9iamVjdCk7CisKK3Byb3Rl
Y3RlZDoKKyAgICBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24oR3JhcGhpY3NDb250ZXh0M0QqKTsK
KworICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplQXZhaWxhYmxlRXh0ZW5zaW9ucygpOworICAg
IHZpcnR1YWwgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBTdHJpbmcmKSA9IDA7CisgICAg
dmlydHVhbCBTdHJpbmcgZ2V0RXh0ZW5zaW9ucygpID0gMDsKKworICAgIGJvb2wgbV9pbml0aWFs
aXplZEF2YWlsYWJsZUV4dGVuc2lvbnM7CisgICAgSGFzaFNldDxTdHJpbmc+IG1fYXZhaWxhYmxl
RXh0ZW5zaW9uczsKKworICAgIC8vIFdlYWsgcG9pbnRlciBiYWNrIHRvIEdyYXBoaWNzQ29udGV4
dDNECisgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbl9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9u
czNET3BlbkdMRVMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0V4dGVuc2lvbnMzRE9wZW5HTEVTLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YzY1MDcxNWVlZTIyM2E5ZDA3
NzBjZGQyNjFkMTQxNTIxYzNmMmE3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmNwcApAQCAtMCww
ICsxLDE0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aWYgRU5BQkxFKFdFQkdMKQorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTEVTLmgiCisKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgPEVHTC9lZ2wuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitFeHRlbnNpb25z
M0RPcGVuR0xFUzo6RXh0ZW5zaW9uczNET3BlbkdMRVMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQpCisgICAgOiBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24oY29udGV4dCkKKyAgICAsIG1fc3Vw
cG9ydHNPRVN2ZXJ0ZXhBcnJheU9iamVjdChmYWxzZSkKKyAgICAsIG1fc3VwcG9ydHNJTUdNdWx0
aXNhbXBsZWRSZW5kZXJUb1RleHR1cmUoZmFsc2UpCisgICAgLCBtX2dsRnJhbWVidWZmZXJUZXh0
dXJlMkRNdWx0aXNhbXBsZUlNRygwKQorICAgICwgbV9nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0
aXNhbXBsZUlNRygwKQorICAgICwgbV9nbEJpbmRWZXJ0ZXhBcnJheU9FUygwKQorICAgICwgbV9n
bERlbGV0ZVZlcnRleEFycmF5c09FUygwKQorICAgICwgbV9nbEdlblZlcnRleEFycmF5c09FUygw
KQorICAgICwgbV9nbElzVmVydGV4QXJyYXlPRVMoMCkKK3sKK30KKworRXh0ZW5zaW9uczNET3Bl
bkdMRVM6On5FeHRlbnNpb25zM0RPcGVuR0xFUygpCit7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uczNE
T3BlbkdMRVM6OmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcodW5zaWduZWQgbG9u
ZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJn
ZXQsIHVuc2lnbmVkIGludCB0ZXh0dXJlLCBpbnQgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgc2FtcGxl
cykKK3sKKyAgICBpZiAobV9nbEZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcpCisg
ICAgICAgIG1fZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HKHRhcmdldCwgYXR0
YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCwgc2FtcGxlcyk7CisgICAgZWxzZQor
ICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKK30KKwordm9pZCBFeHRlbnNpb25zM0RPcGVuR0xFUzo6cmVuZGVyYnVmZmVyU3RvcmFnZU11
bHRpc2FtcGxlSU1HKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHNhbXBsZXMs
IHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2ln
bmVkIGxvbmcgaGVpZ2h0KQoreworICAgIGlmIChtX2dsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRp
c2FtcGxlSU1HKQorICAgICAgICBtX2dsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1H
KHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgIGVs
c2UKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgRXh0ZW5zaW9uczNET3BlbkdMRVM6OmNyZWF0
ZVZlcnRleEFycmF5T0VTKCkKK3sKKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIGlmIChtX2dsR2VuVmVydGV4QXJyYXlzT0VTKSB7CisgICAgICAgIEdMdWludCBhcnJh
eSA9IDA7CisgICAgICAgIG1fZ2xHZW5WZXJ0ZXhBcnJheXNPRVMoMSwgJmFycmF5KTsKKyAgICAg
ICAgcmV0dXJuIGFycmF5OworICAgIH0KKworICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgIHJldHVybiAwOworfQorCit2b2lkIEV4dGVu
c2lvbnMzRE9wZW5HTEVTOjpkZWxldGVWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFy
cmF5KQoreworICAgIGlmICghYXJyYXkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXNP
RVMpCisgICAgICAgIG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMoMSwgJmFycmF5KTsKKyAgICBl
bHNlCisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworfQorCitHQzNEYm9vbGVhbiBFeHRlbnNpb25zM0RPcGVuR0xFUzo6aXNWZXJ0ZXhB
cnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQoreworICAgIGlmICghYXJyYXkpCisgICAg
ICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgaWYgKG1fZ2xJc1ZlcnRleEFycmF5T0VTKQorICAgICAgICByZXR1cm4gbV9nbElz
VmVydGV4QXJyYXlPRVMoYXJyYXkpOworCisgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEV4
dGVuc2lvbnMzRE9wZW5HTEVTOjpiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCBh
cnJheSkKK3sKKyAgICBpZiAoIWFycmF5KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmIChtX2dsQmluZFZlcnRleEFycmF5T0VT
KQorICAgICAgICBtX2dsQmluZFZlcnRleEFycmF5T0VTKGFycmF5KTsKKyAgICBlbHNlCisgICAg
ICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
fQorCisKK2Jvb2wgRXh0ZW5zaW9uczNET3BlbkdMRVM6OnN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0
IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAobV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5z
KG5hbWUpKSB7CisgICAgICAgIGlmIChuYW1lID09ICJHTF9PRVNfdmVydGV4X2FycmF5X29iamVj
dCIgJiYgIW1fc3VwcG9ydHNPRVN2ZXJ0ZXhBcnJheU9iamVjdCkgeworICAgICAgICAgICAgbV9n
bEJpbmRWZXJ0ZXhBcnJheU9FUyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xCSU5EVkVSVEVYQVJS
QVlPRVNQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xCaW5kVmVydGV4QXJyYXlPRVMiKSk7Cisg
ICAgICAgICAgICBtX2dsR2VuVmVydGV4QXJyYXlzT0VTID0gcmVpbnRlcnByZXRfY2FzdDxQRk5H
TEdFTlZFUlRFWEFSUkFZU09FU1BST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbEdlblZlcnRleEFy
cmF5c09FUyIpKTsKKyAgICAgICAgICAgIG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMgPSByZWlu
dGVycHJldF9jYXN0PFBGTkdMREVMRVRFVkVSVEVYQVJSQVlTT0VTUFJPQz4oZWdsR2V0UHJvY0Fk
ZHJlc3MoImdsRGVsZXRlVmVydGV4QXJyYXlzT0VTIikpOworICAgICAgICAgICAgbV9nbElzVmVy
dGV4QXJyYXlPRVMgPSByZWludGVycHJldF9jYXN0PFBGTkdMSVNWRVJURVhBUlJBWU9FU1BST0M+
KGVnbEdldFByb2NBZGRyZXNzKCJnbElzVmVydGV4QXJyYXlPRVMiKSk7CisgICAgICAgICAgICBt
X3N1cHBvcnRzT0VTdmVydGV4QXJyYXlPYmplY3QgPSB0cnVlOworICAgICAgICB9IGVsc2UgaWYg
KG5hbWUgPT0gIkdMX0lNR19tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiICYmICFtX3N1
cHBvcnRzSU1HTXVsdGlzYW1wbGVkUmVuZGVyVG9UZXh0dXJlKSB7CisgICAgICAgICAgICBtX2ds
RnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZO
R0xGUkFNRUJVRkZFUlRFWFRVUkUyRE1VTFRJU0FNUExFSU1HUFJPQz4oZWdsR2V0UHJvY0FkZHJl
c3MoImdsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRyIpKTsKKyAgICAgICAgICAg
IG1fZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUcgPSByZWludGVycHJldF9jYXN0
PFBGTkdMUkVOREVSQlVGRkVSU1RPUkFHRU1VTFRJU0FNUExFSU1HUFJPQz4oZWdsR2V0UHJvY0Fk
ZHJlc3MoImdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HIikpOworICAgICAgICAg
ICAgbV9zdXBwb3J0c0lNR011bHRpc2FtcGxlZFJlbmRlclRvVGV4dHVyZSA9IHRydWU7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitTdHJpbmcgRXh0ZW5zaW9uczNET3BlbkdMRVM6OmdldEV4dGVuc2lvbnMoKQoreworICAg
IHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmlu
ZyhHTF9FWFRFTlNJT05TKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjkwMjIyY2E0ZDdhOTRhMDhjMmY5NzU2MTRiZjJiYzYwZTAwMWUwOTUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNE
T3BlbkdMRVMuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBFeHRlbnNpb25zM0RP
cGVuR0xFU19oCisjZGVmaW5lIEV4dGVuc2lvbnMzRE9wZW5HTEVTX2gKKworI2luY2x1ZGUgIkV4
dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oIgorCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjaW5j
bHVkZSA8R0xFUzIvZ2wyZXh0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRXh0
ZW5zaW9uczNET3BlbkdMRVMgOiBwdWJsaWMgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uIHsKK3B1
YmxpYzoKKyAgICB2aXJ0dWFsIH5FeHRlbnNpb25zM0RPcGVuR0xFUygpOworCisgICAgdmlydHVh
bCB2b2lkIGZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcodW5zaWduZWQgbG9uZyB0
YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQs
IHVuc2lnbmVkIGludCB0ZXh0dXJlLCBpbnQgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcyk7
CisgICAgdmlydHVhbCB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRyh1bnNp
Z25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGlu
dGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7
CisKKyAgICB2aXJ0dWFsIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlVmVydGV4QXJyYXlPRVMoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCk7
CisgICAgdmlydHVhbCBHQzNEYm9vbGVhbiBpc1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmpl
Y3QpOworICAgIHZpcnR1YWwgdm9pZCBiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVj
dCk7CisKK3Byb3RlY3RlZDoKKyAgICAvLyBUaGlzIGNsYXNzIG9ubHkgbmVlZHMgdG8gYmUgaW5z
dGFudGlhdGVkIGJ5IEdyYXBoaWNzQ29udGV4dDNEIGltcGxlbWVudGF0aW9ucy4KKyAgICBmcmll
bmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CisgICAgRXh0ZW5zaW9uczNET3BlbkdMRVMoR3Jh
cGhpY3NDb250ZXh0M0QqKTsKKworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihj
b25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRFeHRlbnNpb25zKCk7CisKKyAg
ICBib29sIG1fc3VwcG9ydHNPRVN2ZXJ0ZXhBcnJheU9iamVjdDsKKyAgICBib29sIG1fc3VwcG9y
dHNJTUdNdWx0aXNhbXBsZWRSZW5kZXJUb1RleHR1cmU7CisKKyAgICBQRk5HTEZSQU1FQlVGRkVS
VEVYVFVSRTJETVVMVElTQU1QTEVJTUdQUk9DIG1fZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRp
c2FtcGxlSU1HOworICAgIFBGTkdMUkVOREVSQlVGRkVSU1RPUkFHRU1VTFRJU0FNUExFSU1HUFJP
QyBtX2dsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HOworICAgIFBGTkdMQklORFZF
UlRFWEFSUkFZT0VTUFJPQyBtX2dsQmluZFZlcnRleEFycmF5T0VTOworICAgIFBGTkdMREVMRVRF
VkVSVEVYQVJSQVlTT0VTUFJPQyBtX2dsRGVsZXRlVmVydGV4QXJyYXlzT0VTOworICAgIFBGTkdM
R0VOVkVSVEVYQVJSQVlTT0VTUFJPQyBtX2dsR2VuVmVydGV4QXJyYXlzT0VTOworICAgIFBGTkdM
SVNWRVJURVhBUlJBWU9FU1BST0MgbV9nbElzVmVydGV4QXJyYXlPRVM7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFeHRlbnNpb25zM0RPcGVuR0xFU19oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0M0RPcGVuR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAppbmRleCAzZjQ3YjZlMjFlYjI1NTI0M2Vl
ZWE0YmYzMTk4NTNhYmJmNzZhMmRjLi41ZjAwNTA1OTljNmFiNmI0MTMyMDMyNTgwYTU0MGEzYzI2
ZTcyOWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKQEAgLTM0LDYg
KzM0LDExIEBACiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCiAKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8Y3N0cmluZz4KKyNpbmNsdWRl
IDx3dGYvVW51c2VkUGFyYW0uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKICNp
ZiBQTEFURk9STShNQUMpCiAjaW5jbHVkZSA8T3BlbkdML2dsLmg+CiAjZWxpZiBQTEFURk9STShH
VEspIHx8IFBMQVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oUVQpCkBAIC00Nyw2ICs1MiwzMiBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzQW5kQ29udmVydFRvQkdSQUlmTmVjZXNz
YXJ5KGludCB4LCBpbnQgeSwgaW50CiAgICAgOjpnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhl
aWdodCwgR0xfQkdSQSwgR0xfVU5TSUdORURfSU5UXzhfOF84XzhfUkVWLCBwaXhlbHMpOwogfQog
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZUF0dHJpYnV0ZXMoKQoreworICAgIEV4
dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IGdldEV4dGVuc2lvbnMoKTsKKyAgICBpZiAobV9hdHRy
cy5zdGVuY2lsKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVu
c2lvbiA9IGlzR0xFUzJDb21wbGlhbnQoKSA/ICJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwi
IDogIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCI7CisgICAgICAgIGlmIChleHRlbnNpb25z
LT5zdXBwb3J0cyhwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pKSB7CisgICAgICAgICAgICBl
eHRlbnNpb25zLT5lbnN1cmVFbmFibGVkKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbik7Cisg
ICAgICAgICAgICAvLyBGb3JjZSBkZXB0aCBpZiBzdGVuY2lsIGlzIHRydWUuCisgICAgICAgICAg
ICBtX2F0dHJzLmRlcHRoID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2F0
dHJzLnN0ZW5jaWwgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7
CisgICAgICAgIGJvb2wgaXNWYWxpZFZlbmRvciA9IHRydWU7CisgICAgICAgIC8vIEN1cnJlbnRs
eSBpbiBNYWMgd2Ugb25seSB0dXJuIG9uIGFudGlhbGlhcyBpZiB2ZW5kb3IgaXMgTlZJRElBLAor
ICAgICAgICAvLyBvciBpZiBBVEkgYW5kIG9uIDEwLjcuMiBhbmQgYWJvdmUuCisgICAgICAgIGNv
bnN0IGNoYXIqIHZlbmRvciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KDo6Z2xHZXRT
dHJpbmcoR0xfVkVORE9SKSk7CisgICAgICAgIGlmICghdmVuZG9yIHx8ICghc3RkOjpzdHJzdHIo
dmVuZG9yLCAiTlZJRElBIikgJiYgIShzdGQ6OnN0cnN0cih2ZW5kb3IsICJBVEkiKSAmJiBzeXN0
ZW1BbGxvd3NNdWx0aXNhbXBsaW5nT25BVElDYXJkcygpKSkpCisgICAgICAgICAgICBpc1ZhbGlk
VmVuZG9yID0gZmFsc2U7CisgICAgICAgIGlmICghaXNWYWxpZFZlbmRvciB8fCAhZXh0ZW5zaW9u
cy0+c3VwcG9ydHMoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIikgfHwgaXNHTEVT
MkNvbXBsaWFudCgpKQorICAgICAgICAgICAgbV9hdHRycy5hbnRpYWxpYXMgPSBmYWxzZTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgiR0xfQU5H
TEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKTsKKyAgICB9Cit9CisKIGJvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAgICAgY29uc3Qg
aW50IHdpZHRoID0gc2l6ZS53aWR0aCgpOwpAQCAtMTUxLDYgKzE4Miw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoY29uc3QgSW50UmVj
dCYgcmVjdCkKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0KQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCiAgICAgc3dp
dGNoIChpbnRlcm5hbGZvcm1hdCkgewogICAgIGNhc2UgREVQVEhfU1RFTkNJTDoKICAgICAgICAg
aW50ZXJuYWxmb3JtYXQgPSBHTF9ERVBUSDI0X1NURU5DSUw4X0VYVDsKQEAgLTIzMiw2ICsyNjQs
NyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCiAgICAgR0MzRGVudW0gb3BlbkdMSW50ZXJu
YWxGb3JtYXQgPSBpbnRlcm5hbGZvcm1hdDsKICAgICBpZiAodHlwZSA9PSBHTF9GTE9BVCkgewog
ICAgICAgICBpZiAoZm9ybWF0ID09IEdMX1JHQkEpCkBAIC0yNDEsNiArMjc0LDcgQEAgYm9vbCBH
cmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RlbnVtIGludGUKICAgICB9CiAKICAgICA6OmdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxl
dmVsLCBvcGVuR0xJbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQs
IHR5cGUsIHBpeGVscyk7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjU2LDYgKzI5MCwz
MyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRlcHRoKEdDM0RjbGFtcGYgZGVwdGgp
CiAgICAgOjpnbENsZWFyRGVwdGgoZGVwdGgpOwogfQogCitib29sIEdyYXBoaWNzQ29udGV4dDNE
OjpzeXN0ZW1BbGxvd3NNdWx0aXNhbXBsaW5nT25BVElDYXJkcygpCit7CisjaWYgUExBVEZPUk0o
TUFDKQorI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkgJiYgIWRlZmluZWQo
QlVJTERJTkdfT05fTElPTikKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKyAgICBzdGF0aWMgU0ludDMyIHZlcnNpb247CisgICAgaWYgKCF2ZXJz
aW9uKSB7CisgICAgICAgIGlmIChHZXN0YWx0KGdlc3RhbHRTeXN0ZW1WZXJzaW9uLCAmdmVyc2lv
bikgIT0gbm9FcnIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIC8vIFNl
ZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc5MjIgZm9yIG1vcmUg
ZGV0YWlscworICAgIHJldHVybiB2ZXJzaW9uID49IDB4MTA3MjsKKyNlbmRpZiAvLyBTTk9XX0xF
T1BBUkQgYW5kIExJT04KKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmIC8vIFBMQVRG
T1JNKE1BQykKK30KKworRXh0ZW5zaW9uczNEKiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXh0ZW5z
aW9ucygpCit7CisgICAgaWYgKCFtX2V4dGVuc2lvbnMpCisgICAgICAgIG1fZXh0ZW5zaW9ucyA9
IGFkb3B0UHRyKG5ldyBFeHRlbnNpb25zM0RPcGVuR0wodGhpcykpOworICAgIHJldHVybiBtX2V4
dGVuc2lvbnMuZ2V0KCk7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHQzRE9wZW5HTENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCmluZGV4IDQyOWZjNTFj
OTA0NmM0NGE1MGVmZWNlMTI5Y2JmMzFmNjBkOTk3NWUuLjc2MmUzOWYwOWRhYTk2ZjVjMGRhNzM0
ODQwOTQxODQ1YWRlYTliZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3Bl
bkdMQ29tbW9uLmNwcApAQCAtMzAsNyArMzAsMTIgQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dDNELmgiCiAKKyNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCisjaWYgVVNF
KE9QRU5HTF9FU18yKQorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTEVTLmgiCisjZWxzZQog
I2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTC5oIgorI2VuZGlmCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJJbWFnZURh
dGEuaCIKQEAgLTQ5LDM5ICs1NCwyNCBAQAogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBV
U0UoT1BFTkdMX0VTXzIpCisjaW5jbHVkZSAiT3BlbkdMRVNTaGltcy5oIgorI2VsaWYgUExBVEZP
Uk0oTUFDKQogI2luY2x1ZGUgPE9wZW5HTC9nbC5oPgogI2VsaWYgUExBVEZPUk0oR1RLKSB8fCBQ
TEFURk9STShFRkwpIHx8IFBMQVRGT1JNKFFUKQogI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCiAj
ZW5kaWYKIAotbmFtZXNwYWNlIFdlYkNvcmUgeworI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCisj
aW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtTG9nLmg+CisjZW5kaWYKIAotc3RhdGljIGJvb2wg
c3lzdGVtQWxsb3dzTXVsdGlzYW1wbGluZ09uQVRJQ2FyZHMoKQotewotI2lmIFBMQVRGT1JNKE1B
QykKLSNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX0xJT04pCi0gICAgcmV0dXJuIHRydWU7Ci0jZWxzZQotICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7Ci0gICAgc3RhdGljIFNJbnQzMiB2ZXJzaW9uOwotICAgIGlmICghdmVyc2lv
bikgewotICAgICAgICBpZiAoR2VzdGFsdChnZXN0YWx0U3lzdGVtVmVyc2lvbiwgJnZlcnNpb24p
ICE9IG5vRXJyKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAvLyBTZWUg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3OTIyIGZvciBtb3JlIGRl
dGFpbHMKLSAgICByZXR1cm4gdmVyc2lvbiA+PSAweDEwNzI7Ci0jZW5kaWYgLy8gU05PV19MRU9Q
QVJEIGFuZCBMSU9OCi0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZiAvLyBQTEFURk9S
TShNQUMpCi19CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnZhbGlkYXRlQXR0cmlidXRlcygpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZURl
cHRoU3RlbmNpbChjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pCiB7CiAg
ICAgRXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOwogICAgIGlmICht
X2F0dHJzLnN0ZW5jaWwpIHsKLSAgICAgICAgY29uc3QgY2hhciogcGFja2VkRGVwdGhTdGVuY2ls
RXh0ZW5zaW9uID0gaXNHTEVTMkNvbXBsaWFudCgpID8gIkdMX09FU19wYWNrZWRfZGVwdGhfc3Rl
bmNpbCIgOiAiR0xfRVhUX3BhY2tlZF9kZXB0aF9zdGVuY2lsIjsKICAgICAgICAgaWYgKGV4dGVu
c2lvbnMtPnN1cHBvcnRzKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbikpIHsKICAgICAgICAg
ICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9u
KTsKICAgICAgICAgICAgIC8vIEZvcmNlIGRlcHRoIGlmIHN0ZW5jaWwgaXMgdHJ1ZS4KQEAgLTQz
OSwzNiArNDI5LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIoUGxh
dGZvcm0zRE9iamVjdCBzaGFkZXIpCiAgICAgQVNTRVJUKHNoYWRlcik7CiAgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CiAKLSAgICBpbnQgR0xzaGFkZXJUeXBlOwotICAgIEFOR0xFU2hhZGVyVHlw
ZSBzaGFkZXJUeXBlOwotCi0gICAgZ2xHZXRTaGFkZXJpdihzaGFkZXIsIFNIQURFUl9UWVBFLCAm
R0xzaGFkZXJUeXBlKTsKLSAgICAKLSAgICBpZiAoR0xzaGFkZXJUeXBlID09IFZFUlRFWF9TSEFE
RVIpCi0gICAgICAgIHNoYWRlclR5cGUgPSBTSEFERVJfVFlQRV9WRVJURVg7Ci0gICAgZWxzZSBp
ZiAoR0xzaGFkZXJUeXBlID09IEZSQUdNRU5UX1NIQURFUikKLSAgICAgICAgc2hhZGVyVHlwZSA9
IFNIQURFUl9UWVBFX0ZSQUdNRU5UOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuOyAvLyBJbnZh
bGlkIHNoYWRlciB0eXBlLgotCi0gICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJT
b3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hh
ZGVyKTsKKyAgICBTdHJpbmcgdHJhbnNsYXRlZFNoYWRlclNvdXJjZSA9IG1fZXh0ZW5zaW9ucy0+
Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKHNoYWRlcik7CiAKLSAgICBpZiAocmVzdWx0
ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgIGlmICghdHJhbnNsYXRlZFNoYWRlclNv
dXJjZS5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU2hhZGVyU291cmNlRW50cnkm
IGVudHJ5ID0gcmVzdWx0LT5zZWNvbmQ7Ci0KLSAgICBTdHJpbmcgdHJhbnNsYXRlZFNoYWRlclNv
dXJjZTsKLSAgICBTdHJpbmcgc2hhZGVySW5mb0xvZzsKLQotICAgIGJvb2wgaXNWYWxpZCA9IG1f
Y29tcGlsZXIudmFsaWRhdGVTaGFkZXJTb3VyY2UoZW50cnkuc291cmNlLnV0ZjgoKS5kYXRhKCks
IHNoYWRlclR5cGUsIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UsIHNoYWRlckluZm9Mb2cpOwotCi0g
ICAgZW50cnkubG9nID0gc2hhZGVySW5mb0xvZzsKLSAgICBlbnRyeS5pc1ZhbGlkID0gaXNWYWxp
ZDsKLQotICAgIGlmICghaXNWYWxpZCkKLSAgICAgICAgcmV0dXJuOyAvLyBTaGFkZXIgZGlkbid0
IHZhbGlkYXRlLCBkb24ndCBtb3ZlIGZvcndhcmQgd2l0aCBjb21waWxpbmcgdHJhbnNsYXRlZCBz
b3VyY2UuCi0KICAgICBpbnQgdHJhbnNsYXRlZFNoYWRlckxlbmd0aCA9IHRyYW5zbGF0ZWRTaGFk
ZXJTb3VyY2UubGVuZ3RoKCk7CiAKICAgICBjb25zdCBDU3RyaW5nJiB0cmFuc2xhdGVkU2hhZGVy
Q1N0cmluZyA9IHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UudXRmOCgpOwpAQCAtODAxLDE4ICs3NjYs
NjEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0Rp
bnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2kKICAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZl
ckVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKICAgICAgICAgOjpn
bEZsdXNoKCk7CiAgICAgfQorICAgIC8vIEN1cnJlbnRseSBvbmx5IGZvcm1hdD1SR0JBLCB0eXBl
PVVOU0lHTkVEX0JZVEUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBzcGVjaWZpY2F0aW9uOiBodHRwOi8v
d3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L3dlYmdsL3NwZWNzL2xhdGVzdC8KKyAgICAvLyBJZiB0
aGlzIGV2ZXIgY2hhbmdlcywgdGhpcyBjb2RlIHdpbGwgbmVlZCB0byBiZSB1cGRhdGVkLgorCisg
ICAgLy8gQ2FsY3VsYXRlIHRoZSBzdHJpZGVzIG9mIG91ciBkYXRhIGFuZCBjYW52YXMKKyAgICB1
bnNpZ25lZCBpbnQgZm9ybWF0U2l6ZSA9IDQ7IC8vIFJHQkEgVU5TSUdORURfQllURQorICAgIHVu
c2lnbmVkIGludCBkYXRhU3RyaWRlID0gd2lkdGggKiBmb3JtYXRTaXplOworICAgIHVuc2lnbmVk
IGludCBjYW52YXNTdHJpZGUgPSBtX2N1cnJlbnRXaWR0aCAqIGZvcm1hdFNpemU7CisKKyAgICAv
LyBJZiB3ZSBhcmUgdXNpbmcgYSBwYWNrIGFsaWdubWVudCBvZiA4LCB0aGVuIHdlIG5lZWQgdG8g
YWxpZ24gb3VyIHN0cmlkZXMgdG8gOCBieXRlIGJvdW5kYXJpZXMKKyAgICAvLyBTZWU6IGh0dHA6
Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGF0YV9zdHJ1Y3R1cmVfYWxpZ25tZW50IChjb21wdXRp
bmcgcGFkZGluZykKKyAgICBpbnQgcGFja0FsaWdubWVudDsKKyAgICBnbEdldEludGVnZXJ2KEdM
X1BBQ0tfQUxJR05NRU5ULCAmcGFja0FsaWdubWVudCk7CisgICAgaWYgKDggPT0gcGFja0FsaWdu
bWVudCkgeworICAgICAgICBkYXRhU3RyaWRlID0gKGRhdGFTdHJpZGUgKyA3KSAmIH43OworICAg
ICAgICBjYW52YXNTdHJpZGUgPSAoY2FudmFzU3RyaWRlICsgNykgJiB+NzsKKyAgICB9CisKKyAg
ICB1bnNpZ25lZCBjaGFyKiBjYW52YXNEYXRhID0gbmV3IHVuc2lnbmVkIGNoYXJbY2FudmFzU3Ry
aWRlICogbV9jdXJyZW50SGVpZ2h0XTsKKyAgICA6OmdsUmVhZFBpeGVscygwLCAwLCBtX2N1cnJl
bnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNhbnZhc0RhdGEpOworCisg
ICAgLy8gSWYgd2UgZmFpbGVkIHRvIHJlYWQgb3VyIGNhbnZhcyBkYXRhIGR1ZSB0byBhIEdMIGVy
cm9yLCBkb24ndCBjb250aW51ZQorICAgIGludCBlcnJvciA9IGdsR2V0RXJyb3IoKTsKKyAgICBp
ZiAoR0xfTk9fRVJST1IgIT0gZXJyb3IpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoZXJy
b3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gQ2xlYXIgb3VyIGRhdGEgaW4g
Y2FzZSBzb21lIG9mIGl0IGxpZXMgb3V0c2lkZSB0aGUgYm91bmRzIG9mIG91ciBjYW52YXMKKyAg
ICAvLyBUT0RPOiBkb24ndCBkbyB0aGlzIGlmIGFsbCBvZiB0aGUgZGF0YSBsaWVzIGluc2lkZSB0
aGUgYm91bmRzIG9mIHRoZSBjYW52YXMKKyAgICBtZW1zZXQoZGF0YSwgMCwgZGF0YVN0cmlkZSAq
IGhlaWdodCk7CisKKyAgICAvLyBDYWxjdWxhdGUgdGhlIGludGVyc2VjdGlvbiBvZiBvdXIgY2Fu
dmFzIGFuZCBkYXRhIGJvdW5kcworICAgIEludFJlY3QgZGF0YVJlY3QoeCwgeSwgd2lkdGgsIGhl
aWdodCk7CisgICAgSW50UmVjdCBjYW52YXNSZWN0KDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1
cnJlbnRIZWlnaHQpOworICAgIEludFJlY3Qgbm9uWmVyb0RhdGFSZWN0ID0gaW50ZXJzZWN0aW9u
KGRhdGFSZWN0LCBjYW52YXNSZWN0KTsKKworICAgIHVuc2lnbmVkIGludCB4RGF0YU9mZnNldCA9
IHggPCAwID8gLXggKiBmb3JtYXRTaXplIDogMDsKKyAgICB1bnNpZ25lZCBpbnQgeURhdGFPZmZz
ZXQgPSB5IDwgMCA/IC15ICogZGF0YVN0cmlkZSA6IDA7CisgICAgdW5zaWduZWQgaW50IHhDYW52
YXNPZmZzZXQgPSBub25aZXJvRGF0YVJlY3QueCgpICogZm9ybWF0U2l6ZTsKKyAgICB1bnNpZ25l
ZCBpbnQgeUNhbnZhc09mZnNldCA9IG5vblplcm9EYXRhUmVjdC55KCkgKiBjYW52YXNTdHJpZGU7
CisgICAgdW5zaWduZWQgY2hhciogZHN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRh
dGEpICsgeERhdGFPZmZzZXQgKyB5RGF0YU9mZnNldDsKKyAgICB1bnNpZ25lZCBjaGFyKiBzcmMg
PSBjYW52YXNEYXRhICsgeENhbnZhc09mZnNldCArIHlDYW52YXNPZmZzZXQ7CisgICAgZm9yIChp
bnQgcm93ID0gMDsgcm93IDwgbm9uWmVyb0RhdGFSZWN0LmhlaWdodCgpOyByb3crKykgeworICAg
ICAgICBtZW1jcHkoZHN0LCBzcmMsIG5vblplcm9EYXRhUmVjdC53aWR0aCgpICogZm9ybWF0U2l6
ZSk7CisgICAgICAgIGRzdCArPSBkYXRhU3RyaWRlOworICAgICAgICBzcmMgKz0gY2FudmFzU3Ry
aWRlOworICAgIH0KKworICAgIGRlbGV0ZSBbXSBjYW52YXNEYXRhOwogICAgIDo6Z2xSZWFkUGl4
ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7CisKICAgICBpZiAo
bV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQogICAg
ICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
UiwgbV9tdWx0aXNhbXBsZUZCTyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVh
c2VTaGFkZXJDb21waWxlcigpCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgaXMgbm90IGltcGxlbWVu
dGVkIG9uIGRlc2t0b3AgT3BlbkdMLiBXZSBuZWVkIHRvIGhhdmUgaWZkZWZzIGZvciB0aGUgZGlm
ZmVyZW50IEdMIHZhcmlhbnRzLgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNhbXBsZUNvdmVyYWdl
KEdDM0RjbGFtcGYgdmFsdWUsIEdDM0Rib29sZWFuIGludmVydCkKIHsKICAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKQEAgLTEzODYsMTMgKzEzOTQsNiBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNE
OjpsYXllckNvbXBvc2l0ZWQoKSBjb25zdAogICAgIHJldHVybiBtX2xheWVyQ29tcG9zaXRlZDsK
IH0KIAotRXh0ZW5zaW9uczNEKiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXh0ZW5zaW9ucygpCi17
Ci0gICAgaWYgKCFtX2V4dGVuc2lvbnMpCi0gICAgICAgIG1fZXh0ZW5zaW9ucyA9IGFkb3B0UHRy
KG5ldyBFeHRlbnNpb25zM0RPcGVuR0wodGhpcykpOwotICAgIHJldHVybiBtX2V4dGVuc2lvbnMu
Z2V0KCk7Ci19Ci0KIH0KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9w
ZW5HTEVTLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAppbmRleCBiMWJkMWRjNTZjYTZmZDkyODNkYjJkYWUx
MjM4M2NlMjJmYzk0MzAyLi4zYjQ0YTI0NmVmMTMwNGMwNDkxNmE4YzEzNTkwNDYxY2VhM2YyODQw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3Jh
cGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCkBAIC0yOSw5MyAr
MjksMjkgQEAKICNpZiBFTkFCTEUoV0VCR0wpCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQz
RC5oIgotCi0jaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMLmgiCisjaW5jbHVkZSAiRXh0ZW5z
aW9uczNET3BlbkdMRVMuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiSW50U2l6
ZS5oIgorI2luY2x1ZGUgIkxheWVyV2ViS2l0VGhyZWFkLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKLQotI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpCi0jaW5jbHVkZSAi
T3BlbkdMU2hpbXMuaCIKLSNlbmRpZgorI2luY2x1ZGUgIk9wZW5HTEVTU2hpbXMuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzQW5k
Q29udmVydFRvQkdSQUlmTmVjZXNzYXJ5KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVp
Z2h0LCB1bnNpZ25lZCBjaGFyKiBwaXhlbHMpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWxl
YXNlU2hhZGVyQ29tcGlsZXIoKQogewotICAgIGNvbnN0IGludCB0b3RhbEJ5dGVzID0gbV9jdXJy
ZW50V2lkdGggKiBtX2N1cnJlbnRIZWlnaHQgKiA0OwotICAgIDo6Z2xSZWFkUGl4ZWxzKHgsIHks
IHdpZHRoLCBoZWlnaHQsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscyk7Ci0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQpCi0gICAgICAgIHN0ZDo6c3dh
cChwaXhlbHNbaV0sIHBpeGVsc1tpICsgMl0pOyAvLyBDb252ZXJ0IHRvIEJHUkEuCisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFJlbGVhc2VTaGFkZXJDb21waWxlcigpOwogfQog
Ci1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlRkJPcyhjb25zdCBJbnRTaXplJiBzaXpl
KQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVsc0FuZENvbnZlcnRUb0JHUkFJZk5l
Y2Vzc2FyeShpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgdW5zaWduZWQgY2hh
ciogcGl4ZWxzKQogewotICAgIGNvbnN0IGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsKLSAgICBj
b25zdCBpbnQgaGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsKLSAgICBHTHVpbnQgY29sb3JGb3JtYXQg
PSAwLCBwaXhlbERhdGFUeXBlID0gMDsKLSAgICBpZiAobV9hdHRycy5hbHBoYSkgewotICAgICAg
ICBtX2ludGVybmFsQ29sb3JGb3JtYXQgPSBHTF9SR0JBOwotICAgICAgICBjb2xvckZvcm1hdCA9
IEdMX1JHQkE7Ci0gICAgICAgIHBpeGVsRGF0YVR5cGUgPSBHTF9VTlNJR05FRF9CWVRFOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIG1faW50ZXJuYWxDb2xvckZvcm1hdCA9IEdMX1JHQjsKLSAgICAg
ICAgY29sb3JGb3JtYXQgPSBHTF9SR0I7Ci0gICAgICAgIHBpeGVsRGF0YVR5cGUgPSBHTF9VTlNJ
R05FRF9TSE9SVF81XzZfNTsKLSAgICB9Ci0KLSAgICAvLyBXZSBkb24ndCBhbGxvdyB0aGUgbG9n
aWMgd2hlcmUgc3RlbmNpbCBpcyByZXF1aXJlZCBhbmQgZGVwdGggaXMgbm90LgotICAgIC8vIFNl
ZSBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVBdHRyaWJ1dGVzLgotICAgIGJvb2wgc3VwcG9y
dFBhY2tlZERlcHRoU3RlbmNpbEJ1ZmZlciA9IChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5k
ZXB0aCkgJiYgZ2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3BhY2tlZF9kZXB0aF9z
dGVuY2lsIik7Ci0KLSAgICAvLyBSZXNpemUgcmVndWxhciBGQk8uCi0gICAgYm9vbCBtdXN0UmVz
dG9yZUZCTyA9IGZhbHNlOwotICAgIGlmIChtX2JvdW5kRkJPICE9IG1fZmJvKSB7Ci0gICAgICAg
IG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICB9Ci0KLSAgICA6Omds
QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKLSAgICA6OmdsVGV4SW1hZ2Uy
RChHTF9URVhUVVJFXzJELCAwLCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQs
IDAsIGNvbG9yRm9ybWF0LCBwaXhlbERhdGFUeXBlLCAwKTsKLSAgICA6OmdsRnJhbWVidWZmZXJU
ZXh0dXJlMkRFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRl
eHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSwgMCk7Ci0K
LSAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7
Ci0gICAgOjpnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgbV9pbnRlcm5hbENvbG9yRm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBjb2xvckZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgMCk7
Ci0gICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOwotCi0gICAgLy8gV2UgZG9u
J3Qgc3VwcG9ydCBhbnRpYWxpYXNpbmcgeWV0LiBTZWUgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlk
YXRlQXR0cmlidXRlcy4KLSAgICBBU1NFUlQoIW1fYXR0cnMuYW50aWFsaWFzKTsKLQotICAgIGlm
IChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkgewotICAgICAgICAvLyBVc2UgYSAy
NCBiaXQgZGVwdGggYnVmZmVyIHdoZXJlIHdlIGtub3cgd2UgaGF2ZSBpdC4KLSAgICAgICAgaWYg
KHN1cHBvcnRQYWNrZWREZXB0aFN0ZW5jaWxCdWZmZXIpIHsKLSAgICAgICAgICAgIDo6Z2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgICAg
ICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEhfU1RFTkNJTCwgd2lkdGgsIGhlaWdodCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NU
RU5DSUwsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfMjRfOCwgMCk7Ci0gICAgICAg
ICAgICBpZiAobV9hdHRycy5zdGVuY2lsKQotICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZl
clRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5ULCBHTF9URVhU
VVJFXzJELCBtX2RlcHRoU3RlbmNpbEJ1ZmZlciwgMCk7Ci0gICAgICAgICAgICBpZiAobV9hdHRy
cy5kZXB0aCkKLSAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJB
TUVCVUZGRVIsIEdMX0RFUFRIX0FUVEFDSE1FTlQsIEdMX1RFWFRVUkVfMkQsIG1fZGVwdGhTdGVu
Y2lsQnVmZmVyLCAwKTsKLSAgICAgICAgICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJE
LCAwKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwp
IHsKLSAgICAgICAgICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHcmFwaGljc0NvbnRl
eHQzRDo6UkVOREVSQlVGRkVSLCBtX3N0ZW5jaWxCdWZmZXIpOwotICAgICAgICAgICAgICAgIDo6
Z2xSZW5kZXJidWZmZXJTdG9yYWdlRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIs
IEdMX1NURU5DSUxfSU5ERVg4LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgICAgICAgICA6Omds
RnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
LCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQz
RDo6UkVOREVSQlVGRkVSLCBtX3N0ZW5jaWxCdWZmZXIpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgaWYgKG1fYXR0cnMuZGVwdGgpIHsKLSAgICAgICAgICAgICAgICA6OmdsQmluZFJlbmRl
cmJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX2RlcHRoQnVmZmVy
KTsKLSAgICAgICAgICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZUVYVChHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSLCBHTF9ERVBUSF9DT01QT05FTlQxNiwgd2lkdGgsIGhlaWdo
dCk7Ci0gICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFD
SE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fZGVwdGhCdWZmZXIpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR3JhcGhp
Y3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYg
KGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgewotICAgICAg
ICAvLyBGSVhNRTogY2xlYW51cAotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIDo6Z2xS
ZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUs
IHBpeGVscyk7CisgICAgaW50IHRvdGFsQnl0ZXMgPSB3aWR0aCAqIGhlaWdodCAqIDQ7CisgICAg
aWYgKGlzR0xFUzJDb21wbGlhbnQoKSkgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRv
dGFsQnl0ZXM7IGkgKz0gNCkKKyAgICAgICAgICAgIHN0ZDo6c3dhcChwaXhlbHNbaV0sIHBpeGVs
c1tpICsgMl0pOyAvLyBDb252ZXJ0IHRvIEJHUkEuCiAgICAgfQotCi0gICAgcmV0dXJuIG11c3RS
ZXN0b3JlRkJPOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNvbHZlTXVsdGlzYW1w
bGluZ0lmTmVjZXNzYXJ5KGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC0xNTYsNiArOTIsMTcgQEAg
Ym9vbCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RlbnVtIGludGUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dmFsaWRhdGVBdHRyaWJ1dGVzKCkKK3sKKyAgICB2YWxpZGF0ZURlcHRo
U3RlbmNpbCgiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7CisKKyAgICBpZiAobV9hdHRy
cy5hbnRpYWxpYXMpIHsKKyAgICAgICAgRXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0gZ2V0RXh0
ZW5zaW9ucygpOworICAgICAgICBpZiAoIWV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9JTUdfbXVs
dGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIikpCisgICAgICAgICAgICBtX2F0dHJzLmFudGlh
bGlhcyA9IGZhbHNlOworICAgIH0KK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhS
YW5nZShHQzNEY2xhbXBmIHpOZWFyLCBHQzNEY2xhbXBmIHpGYXIpCiB7CiAgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CkBAIC0xNjgsNiArMTE1LDE5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmNsZWFyRGVwdGgoR0MzRGNsYW1wZiBkZXB0aCkKICAgICA6OmdsQ2xlYXJEZXB0aGYoZGVwdGgp
OwogfQogCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK0V4dGVuc2lvbnMzRCogR3JhcGhpY3ND
b250ZXh0M0Q6OmdldEV4dGVuc2lvbnMoKQoreworICAgIGlmICghbV9leHRlbnNpb25zKQorICAg
ICAgICBtX2V4dGVuc2lvbnMgPSBhZG9wdFB0cihuZXcgRXh0ZW5zaW9uczNET3BlbkdMRVModGhp
cykpOworICAgIHJldHVybiBtX2V4dGVuc2lvbnMuZ2V0KCk7Cit9CisKK2Jvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OnN5c3RlbUFsbG93c011bHRpc2FtcGxpbmdPbkFUSUNhcmRzKCkKK3sKKyAgICBy
ZXR1cm4gZmFsc2U7IC8vIG5vdCBhcHBsaWNhYmxlCit9CisKK30KIAogI2VuZGlmIC8vIEVOQUJM
RShXRUJHTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKaW5kZXggNzBkM2YyNGFmYTU1NDJhNjhhMTI0
MWQzODFjM2NlOTM0ODc4MTg4NS4uMDY3NjkyMWMxMWY4MGZkYzVmYTg0ODM5YWRmZmY1M2IxMzBh
ZmFiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3Jh
cGhpY3NDb250ZXh0M0RRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKQEAgLTk4LDYgKzk4LDEzIEBAIGJvb2wgR3Jh
cGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJDb21wbGlhbnQoKSBjb25zdAogI2VuZGlmCiB9CiAKKyNp
ZiAhVVNFKE9QRU5HTF9FU18yKQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRl
ckNvbXBpbGVyKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorI2VuZGlmCisKIEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0LCBIb3N0V2luZG93KiBob3N0V2luZG93KQogICAgIDogbV9jb250ZXh0
KGNvbnRleHQpCiAgICAgLCBtX2hvc3RXaW5kb3coaG9zdFdpbmRvdykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150974</attachid>
            <date>2012-07-05 12:52:39 -0700</date>
            <delta_ts>2012-07-05 13:19:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90567-20120705155216.patch</filename>
            <type>text/plain</type>
            <size>65595</size>
            <attacher name="Joshua Netterfield">jnetterfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxODY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODFjZDc4MDliMjVmNjhk
YjA3MTcxZmU3N2UyMmI0ZjhkMjVkNTU2NC4uZjVjYTliYzYwOWJhOTgxOTIyNjk0OTM2ODVmZTk2
MTQ3NzE3NjM1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk0IEBACisyMDEyLTA3LTA0ICBKb3No
dWEgTmV0dGVyZmllbGQgIDxqbmV0dGVyZmllbGRAcmltLmNvbT4KKyAgICAgICAgTWFrZSBHQzNE
IGFuZCBFM0QgbW9yZSBtYWludGFpbmFibGUgZm9yIEdMRVMgcGxhdGZvcm1zCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDU2NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY2xlYW5zIHVw
IGNvZGUgZm9yIFdlYkdMIG9uIE9wZW5HTEVTIHBsYXRmb3JtcyB3aGljaCB1c2UgCisgICAgICAg
IEdyYXBoaWNzQ29udGV4dDNET3BlbkdMKiBhbmQgRXh0ZW5zaW9uczNET3BlbkdMKi4gQWx0aG91
Z2gKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wgd2FzIGFscmVhZHkgc3BsaXQgaW50
byBHcmFwaGljc0NvbnRleHQzRE9wZW5HTCwKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0RPcGVu
R0xDb21tb24sIGFuZCAgR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUywgdGhpcyBwYXRjaAorICAg
ICAgICBpcyBhbiBhdHRlbXB0IHRvIHJlZmFjdG9yIHRoaXMgY29kZSBpbiBhIHdheSB0aGF0IHdp
bGwgaGVscCBCbGFja0JlcnJ5IGFuZAorICAgICAgICBvdGhlciB0ZWFtcyBzdXBwb3J0IFdlYkdM
IG9uIG1vYmlsZSBwbGF0Zm9ybXMgd2l0aCBhcyBsaXR0bGUgdXNlIG9mCisgICAgICAgIOKAnCNJ
RiBVU0UoT1BFTkdMX0VTXzIp4oCdIGluIGNvbW1vbiBjb2RlIGFzIHBvc3NpYmxlLiBBbHNvIGlu
Y2x1ZGVkIGlzIHRoZQorICAgICAgICBzZXBhcmF0aW9uIG9mIEV4dGVuc2lvbnMzRE9wZW5HTCBp
bnRvIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbiwKKyAgICAgICAgRXh0ZW5zaW9uczNET3BlbkdM
LCBhbmQgRXh0ZW5zaW9uczNET3BlbkdMRVMgYXMgd2VsbCBhcyB0aGUgaW50cm9kdWN0aW9uCisg
ICAgICAgIG9mIE9wZW5HTEVTU2hpbXMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBjcmVhdGVk
IGluIGxhcmdlIHBhcnQgYnkgSm9uYXRoYW4gRmVsZHN0ZWluLgorCisgICAgICAgIE5vIG5ldyB0
ZXN0czogbm8gbmV3IGJlaGF2aW91ci4KKworICAgICAgICAqIFBsYXRmb3JtQmxhY2tCZXJyeS5j
bWFrZTogUmVjb2duaXplIEJsYWNrQmVycnkgYXMgT1BFTkdMIEVTLCBhZGQgbmV3IGZpbGVzIHRv
IGJ1aWxkCisgICAgICAgICogVGFyZ2V0LnByaTogQWRkIG5ldyBFeHRlbnNpb25zM0RPcGVuR0wq
IHRvIFdlYkdMIGJ1aWxkcworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dDNELmg6IEFkZCB2YWxpZGF0ZURlcHRoU3RlbmNpbCwgbWFrZSBzeXN0ZW1BbGxvd3NNdWx0
aXNhbXBsaW5nT25BVElDYXJkcyBhIGEgbWVtYmVyIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvT3BlbkdMRVNTaGltcy5oOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNw
cDogTW92ZSBjb2RlIHRvIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbiB3aGVyZSBwb3NzaWJsZQor
ICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpFeHRlbnNpb25zM0RPcGVuR0wp
OiBSZWZsZWN0IHRoYXQgaXQgaXMgbm93IGluaGVyaXRzIEV4dGVuc2lvbnMzRENvbW1vbgorICAg
ICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpzdXBwb3J0c0V4dGVuc2lvbik6IENv
bnRhaW5zIE9wZW5HTCBzcGVjaWZpYyBjb2RlIGZyb20gc3VwcG9ydHMKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpnZXRFeHRlbnNpb25z
KTogUmV0dXJucyBhIGxpc3Qgb2YgZXh0ZW5zaW9ucworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaDogUmVtb3ZlIGZ1bmN0aW9ucyBub3cgaW4g
RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEV4
dGVuc2lvbnMzRE9wZW5HTCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4
dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0xDb21tb246OkV4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbik6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0xDb21tb246
On5FeHRlbnNpb25zM0RPcGVuR0xDb21tb24pOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9u
czNET3BlbkdMQ29tbW9uOjpzdXBwb3J0cyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25z
M0RPcGVuR0xDb21tb246OmVuc3VyZUVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uOjppc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uOjpnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKToKKyAgICAgICAg
KFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6Z2V0VHJhbnNsYXRlZFNoYWRlclNv
dXJjZUFOR0xFKTogRXhpc3RlZCBiZWZvcmUsIGJ1dCBkaWQgbm90aGluZy4gTm93IGRvZXMgd2hh
dCBpcyBzYXlzIGl0IGRvZXMuCisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0xD
b21tb246OmluaXRpYWxpemVBdmFpbGFibGVFeHRlbnNpb25zKTogTW92ZWQgZnJvbSBFeHRlbnNp
b25zM0RPcGVuR0w6OnN1cHBvcnRzCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmguCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5H
TEVTOjpFeHRlbnNpb25zM0RPcGVuR0xFUyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25z
M0RPcGVuR0xFUzo6fkV4dGVuc2lvbnMzRE9wZW5HTEVTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4
dGVuc2lvbnMzRE9wZW5HTEVTOjpmcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HKToK
KyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTEVTOjpyZW5kZXJidWZmZXJTdG9y
YWdlTXVsdGlzYW1wbGVJTUcpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdM
RVM6OmNyZWF0ZVZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMz
RE9wZW5HTEVTOjpkZWxldGVWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRl
bnNpb25zM0RPcGVuR0xFUzo6aXNWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbnNpb25zM0RPcGVuR0xFUzo6YmluZFZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNv
cmU6OkV4dGVuc2lvbnMzRE9wZW5HTEVTOjpzdXBwb3J0c0V4dGVuc2lvbik6IENvbnRhaW5zIE9w
ZW5HTEVTIHNwZWNpZmljIGNvZGUgZnJvbSBzdXBwb3J0cworICAgICAgICAoV2ViQ29yZTo6RXh0
ZW5zaW9uczNET3BlbkdMRVM6OmdldEV4dGVuc2lvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmguCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEV4dGVuc2lvbnMzRE9wZW5HTEVTKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRl
cyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpzeXN0ZW1BbGxvd3NNdWx0aXNhbXBsaW5nT25BVElDYXJkcyk6IE5vdyBhIG1lbWJlciBmdW5j
dGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25z
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RP
cGVuR0xDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZh
bGlkYXRlRGVwdGhTdGVuY2lsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmxpbmVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bGlu
a1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBpeGVsU3Rv
cmVpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwb2x5Z29uT2Zmc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVCdWZmZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29t
cGlsZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHNB
bmRDb252ZXJ0VG9CR1JBSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzeXN0ZW1BbGxvd3NNdWx0aXNhbXBsaW5nT25B
VElDYXJkcyk6IE5vdyBhIG1lbWJlciBmdW5jdGlvbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcik6
CisKIDIwMTItMDctMDQgIEpvaG4gTWVsbG9yICA8am9obm1lQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBUZXh0IEF1dG9zaXppbmc6IEFkZCBiYXNpYyBmcmFtZXdvcmsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCmluZGV4IGRlN2JjYzY0ZjM5ZWJkYTM2Yjc3NDY5MzIxYjlhMGRjODkwZWJm
ODguLmM5ZTgzOTQ0N2FlNTNjMmNlMGNjZDJiNzI5MmE0Y2I2MjY5MGRhZGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNjA1NCw2ICs2MDU0LDcgQEAgd2ViY29yZV9zb3VyY2Vz
ICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9PcGVuR0xTaGltcy5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL09wZW5HTFNoaW1zLmggXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wu
Y3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9u
czNET3BlbkdMQ29tbW9uLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21t
b24uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21h
a2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UKaW5kZXggNTE2OWE1
ZGQ1OTczYzdiMGUyODhkYTIxMjMxOTQ3MTg2NTMwZWE4MS4uNTg3ZWRlM2QwNjkwODAzNzNiZWQy
YTMxMjI1MmE1NTc5MjFkY2ZjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1C
bGFja0JlcnJ5LmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQmxhY2tCZXJyeS5j
bWFrZQpAQCAtMjE4LDYgKzIxOCw3IEBAIGlmIChFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJB
TUUpCiBFTkRJRiAoKQogCiBpZiAoRU5BQkxFX1dFQkdMKQorICAgIEFERF9ERUZJTklUSU9OUyAo
LURXVEZfVVNFX09QRU5HTF9FU18yPTEpCiAgICAgTElTVChBUFBFTkQgV2ViQ29yZV9JTkNMVURF
X0RJUkVDVE9SSUVTCiAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUiCiAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wiCkBA
IC0yMjUsNiArMjI2LDExIEBAIGlmIChFTkFCTEVfV0VCR0wpCiAgICAgTElTVChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRHJhd2lu
Z0J1ZmZlckJsYWNrQmVycnkuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvR3JhcGhpY3NDb250ZXh0M0RCbGFja0JlcnJ5LmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCisgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAorICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNw
cAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMu
Y3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQz
RC5jcHAKICAgICApCiBFTkRJRiAoKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJn
ZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCA2NjVmMDNkMTFjNTkwMThj
NzViOWZhNjE0OWU3MjlkZTQ5ZjJiMjlkLi40Y2U2Y2Y2NmUyOWU5OGNlY2U4NWVjYjA0YjVkYTAw
YzkyMzZhODk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTM5NTUsMTUgKzM5NTUsMTkgQEAgY29udGFpbnMo
REVGSU5FUywgRU5BQkxFX1dFQkdMPTEpIHsKIAogICAgIGNvbnRhaW5zKFFUX0NPTkZJRywgb3Bl
bmdsKSB8IGNvbnRhaW5zKFFUX0NPTkZJRywgb3BlbmdsZXMyKSB7CiAgICAgICAgICFjb250YWlu
cyhRVF9DT05GSUcsIG9wZW5nbGVzMikgewotICAgICAgICAgICAgU09VUkNFUyArPSBwbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCisgICAgICAgICAg
ICBTT1VSQ0VTICs9IFwKKyAgICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAgXAorICAgICAgICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAKICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dDNET3BlbkdMRVMuY3BwCisgICAgICAgICAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNw
cCBcCisgICAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNE
T3BlbkdMRVMuY3BwCiAgICAgICAgIH0KIAogICAgICAgICBIRUFERVJTICs9IHBsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaAogCiAgICAgICAgIFNPVVJDRVMgKz0g
XAotICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5H
TC5jcHAgXAorICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMz
RE9wZW5HTENvbW1vbi5jcHAgXAogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAogCiAgICAgICAgIEFOR0xFX0RJUiA9
ICQkcmVwbGFjZShQV0QsICJXZWJDb3JlIiwgIlRoaXJkUGFydHkvQU5HTEUiKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCmluZGV4IGNiMTAxMmU3NzY4NWNkOTA4OTY5MjI0YmFhYWYwMTEwNGQxOWQ2OWMuLmYxN2Ew
NDAwOTFmMjlkMzE3MzQ4NWVjNzYyNmE4MWNiNjhkN2VjY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAg
LTM4MDcsNiArMzgwNyw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dl
YlRpbGVkTGF5ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYlRp
bGVkTGF5ZXIubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRl
bnNpb25zM0RPcGVuR0wuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xD
b21tb24uY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCAzYjgzM2VmYTE3NDdmNThlN2E3ODIxM2U2N2M5YTE1ZTNhYjliYzlh
Li41NDUxZWQwYWJmNjA0MGY4MDg1NDI4MjQxNjc0NDI1MzkyNTc4M2ZlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTg5LDYg
KzExODksOCBAQAogCQk0NDlCMTlGNTBGQTcyRUNFMDAxNUNBNEEgLyogSFRNTFBhcnNlclF1aXJr
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQ5QjE5
RjMwRkE3MkVDRTAwMTVDQTRBIC8qIEhUTUxQYXJzZXJRdWlya3MuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NEEyOEFBQzEyREZCOEFDMDBBRTky
M0IgLyogTWF0aE1MRWxlbWVudEZhY3RvcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQ0QTI4QUFCMTJERkI4QUMwMEFFOTIzQiAvKiBNYXRoTUxFbGVt
ZW50RmFjdG9yeS5oICovOyB9OwogCQk0NEEyOEFBRjEyREZCOEJGMDBBRTkyM0IgLyogTWF0aE1M
TmFtZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0
QTI4QUFFMTJERkI4QkYwMEFFOTIzQiAvKiBNYXRoTUxOYW1lcy5oICovOyB9OworCQk0NERBQjVC
MTE1QTYyMzU4MDA5N0MxRTQgLyogRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0REFCNUFGMTVBNjIzNTgw
MDk3QzFFNCAvKiBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwICovOyB9OworCQk0NERBQjVC
MjE1QTYyMzU4MDA5N0MxRTQgLyogRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NERBQjVCMDE1QTYyMzU4MDA5
N0MxRTQgLyogRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmggKi87IH07CiAJCTQ1MDk5QzQxMTM3
MEE3ODAwMDU4RDUxMyAvKiBJY29uVVJMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQ1MDk5QzQwMTM3MEE3ODAwMDU4RDUxMyAvKiBJY29uVVJMLmNw
cCAqLzsgfTsKIAkJNDUwQ0VCRjAxNTA3M0JCRTAwMkJCMTQ5IC8qIExhYmVsYWJsZUVsZW1lbnQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDUwQ0VC
RUUxNTA3M0JCRTAwMkJCMTQ5IC8qIExhYmVsYWJsZUVsZW1lbnQuY3BwICovOyB9OwogCQk0NTBD
RUJGMTE1MDczQkJFMDAyQkIxNDkgLyogTGFiZWxhYmxlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDUwQ0VCRUYxNTA3M0JCRTAwMkJCMTQ5
IC8qIExhYmVsYWJsZUVsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtODI0NCw2ICs4MjQ2LDggQEAKIAkJNDRBMjhBQUUxMkRGQjhCRjAw
QUU5MjNCIC8qIE1hdGhNTE5hbWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE1hdGhNTE5hbWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0RDhEQTk4MTM5
NTQ1QkUwMDMzN0I3NSAvKiBTVkdNUGF0aEVsZW1lbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IFNWR01QYXRoRWxlbWVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0
RDhEQTlBMTM5NTQ1Q0QwMDMzN0I3NSAvKiBTVkdBbmltYXRlTW90aW9uRWxlbWVudC5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuaWRsOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk0NERBQjVBRjE1QTYyMzU4MDA5N0MxRTQgLyogRXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTQ0REFCNUIwMTVBNjIzNTgwMDk3QzFFNCAvKiBFeHRlbnNpb25zM0RPcGVuR0xDb21t
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5zaW9uczNET3BlbkdM
Q29tbW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ1MDk5QzQwMTM3MEE3ODAw
MDU4RDUxMyAvKiBJY29uVVJMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEljb25VUkwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NTBDRUJFRTE1
MDczQkJFMDAyQkIxNDkgLyogTGFiZWxhYmxlRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBMYWJlbGFibGVFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNDUwQ0VCRUYxNTA3M0JCRTAwMkJCMTQ5IC8qIExhYmVsYWJsZUVsZW1l
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGFiZWxhYmxlRWxlbWVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjE2NDEsNiArMjE2NDUsOCBAQAogCQlG
QkMyMjBERDEyMzdGQkVCMDBCQ0Y3ODggLyogb3BlbmdsICovID0gewogCQkJaXNhID0gUEJYR3Jv
dXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk0NERBQjVBRjE1QTYyMzU4MDA5N0MxRTQgLyogRXh0
ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcCAqLywKKwkJCQk0NERBQjVCMDE1QTYyMzU4MDA5N0Mx
RTQgLyogRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmggKi8sCiAJCQkJNkU2N0QyQTQxMjgwRThB
NDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5jcHAgKi8sCiAJCQkJNkU2N0QyQTUxMjgw
RThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5oICovLAogCQkJCUZCQzIyMERFMTIz
N0ZCRUIwMEJDRjc4OCAvKiBHcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAgKi8sCkBAIC0yNTE3
Myw2ICsyNTE3OSw3IEBACiAJCQkJNTA5ODdDMjcxNTdENjc2RDAwQkRBODM1IC8qIEN1c3RvbUZp
bHRlckdsb2JhbENvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTRGMzJCQjFCMTRGQTg1RTgw
MEY2QzFBMyAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE4
ODJEQTIzMTU5Mzg0OEQwMDAxMTVFRCAvKiBDU1NUb1N0eWxlTWFwLmggaW4gSGVhZGVycyAqLywK
KwkJCQk0NERBQjVCMjE1QTYyMzU4MDA5N0MxRTQgLyogRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKIAkJfTsKQEAgLTI4MjI4LDYgKzI4MjM1LDcgQEAKIAkJCQlDRTdCMkRCNjE1
ODZBQkFEMDA5OEIzRkEgLyogVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNTA5ODdDMjYxNTdENjc2RDAwQkRBODM1IC8qIEN1c3RvbUZpbHRlckdsb2JhbENv
bnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg4MkRBMjAxNTkzODQ2QTAwMDExNUVEIC8q
IENTU1RvU3R5bGVNYXAuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDREQUI1QjExNUE2MjM1ODAw
OTdDMUU0IC8qIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dDNELmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQz
RC5oCmluZGV4IGRiZDlkZmVkZTAxM2E0Y2FmMzMyNDYzYWQzMmZjNGUxNTI4MjY0NjcuLjE2ZDEy
ZjE2M2JkNWQxZTA5ZjMxMTUyZWRkYTFiMmI2NWUyMmVhNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaApAQCAtMjAsNyAr
MjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaWZuZGVmIEdyYXBoaWNzQ29udGV4dDNE
X2gKQEAgLTkxLDE0ICs5MSwxMiBAQCBjb25zdCBQbGF0Zm9ybTNET2JqZWN0IE51bGxQbGF0Zm9y
bTNET2JqZWN0ID0gMDsKICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dDb250ZXh0Lmg+CiAjZW5k
aWYKIAotI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0j
ZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRHJhd2luZ0J1ZmZlcjsKIGNsYXNz
IEV4dGVuc2lvbnMzRDsKLSNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExB
VEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkKKyNpZiBVU0UoT1BFTkdMX0VTXzIpCitjbGFzcyBF
eHRlbnNpb25zM0RPcGVuR0xFUzsKKyNlbHNlCiBjbGFzcyBFeHRlbnNpb25zM0RPcGVuR0w7CiAj
ZW5kaWYKICNpZiBQTEFURk9STShRVCkKQEAgLTkyNCw2ICs5MjIsNyBAQCBwdWJsaWM6CiAgICAg
Ly8gaW4gcGFydGljdWxhciBzdGVuY2lsIGFuZCBhbnRpYWxpYXMsIGFuZCBkZXRlcm1pbmUgd2hp
Y2ggY291bGQgb3IKICAgICAvLyBjb3VsZCBub3QgYmUgaG9ub3JlZCBiYXNlZCBvbiB0aGUgY2Fw
YWJpbGl0aWVzIG9mIHRoZSBPcGVuR0wKICAgICAvLyBpbXBsZW1lbnRhdGlvbi4KKyAgICB2b2lk
IHZhbGlkYXRlRGVwdGhTdGVuY2lsKGNvbnN0IGNoYXIqIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVu
c2lvbik7CiAgICAgdm9pZCB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKIAogICAgIC8vIFJlYWQgcmVu
ZGVyaW5nIHJlc3VsdHMgaW50byBhIHBpeGVsIGFycmF5IHdpdGggdGhlIHNhbWUgZm9ybWF0IGFz
IHRoZQpAQCAtOTU1LDE2ICs5NTQsMzAgQEAgcHVibGljOgogICAgIEhhc2hNYXA8UGxhdGZvcm0z
RE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+IG1fc2hhZGVyU291cmNlTWFwOwogCiAgICAgQU5H
TEVXZWJLaXRCcmlkZ2UgbV9jb21waWxlcjsKKyNlbmRpZgogCisjaWYgUExBVEZPUk0oUVQpICYm
IGRlZmluZWQoUVRfT1BFTkdMX0VTXzIpCisgICAgZnJpZW5kIGNsYXNzIEV4dGVuc2lvbnMzRFF0
OworICAgIE93blB0cjxFeHRlbnNpb25zM0RRdD4gbV9leHRlbnNpb25zOworI2VsaWYgUExBVEZP
Uk0oQkxBQ0tCRVJSWSkKKyAgICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9uczNET3BlbkdMRVM7Cisg
ICAgT3duUHRyPEV4dGVuc2lvbnMzRE9wZW5HTEVTPiBtX2V4dGVuc2lvbnM7CisjZWxpZiAhUExB
VEZPUk0oQ0hST01JVU0pCiAgICAgZnJpZW5kIGNsYXNzIEV4dGVuc2lvbnMzRE9wZW5HTDsKICAg
ICBPd25QdHI8RXh0ZW5zaW9uczNET3BlbkdMPiBtX2V4dGVuc2lvbnM7CisjZW5kaWYKKyAgICBm
cmllbmQgY2xhc3MgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOwogCiAgICAgQXR0cmlidXRlcyBt
X2F0dHJzOwogICAgIFZlY3RvcjxWZWN0b3I8ZmxvYXQ+ID4gbV92ZXJ0ZXhBcnJheTsKIAotICAg
IEdDM0R1aW50IG1fdGV4dHVyZSwgbV9jb21wb3NpdG9yVGV4dHVyZTsKKyAgICBHQzNEdWludCBt
X3RleHR1cmU7CisjaWYgIVBMQVRGT1JNKEJMQUNLQkVSUlkpCisgICAgR0MzRHVpbnQgbV9jb21w
b3NpdG9yVGV4dHVyZTsKKyNlbmRpZgogICAgIEdDM0R1aW50IG1fZmJvOwotI2lmIFVTRShPUEVO
R0xfRVNfMikKKworI2lmICFQTEFURk9STShCTEFDS0JFUlJZKQogICAgIEdDM0R1aW50IG1fZGVw
dGhCdWZmZXI7CiAgICAgR0MzRHVpbnQgbV9zdGVuY2lsQnVmZmVyOwogI2VuZGlmCkBAIC05ODUs
MTAgKzk5OCwxMSBAQCBwdWJsaWM6CiAKICAgICAvLyBFcnJvcnMgcmFpc2VkIGJ5IHN5bnRoZXNp
emVHTEVycm9yKCkuCiAgICAgTGlzdEhhc2hTZXQ8R0MzRGVudW0+IG1fc3ludGhldGljRXJyb3Jz
OwotI2VuZGlmCiAKICAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOwog
ICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQzRFByaXZhdGU+IG1fcHJpdmF0ZTsKKworICAgIGJv
b2wgc3lzdGVtQWxsb3dzTXVsdGlzYW1wbGluZ09uQVRJQ2FyZHMoKTsgCiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9PcGVuR0xFU1NoaW1zLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9P
cGVuR0xFU1NoaW1zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWRiOTE5MzNmODViYzA2MWNjOWM4NTI1NGRjMzRm
MDljMjkzYTgwOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL09wZW5HTEVTU2hpbXMuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg
IDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgT3BlbkdMRVNTaGltc19oCisjZGVmaW5l
IE9wZW5HTEVTU2hpbXNfaAorCisjaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKKyNkZWZpbmUgZ2xC
aW5kRnJhbWVidWZmZXJFWFQgZ2xCaW5kRnJhbWVidWZmZXIKKyNkZWZpbmUgZ2xGcmFtZWJ1ZmZl
clRleHR1cmUyREVYVCBnbEZyYW1lYnVmZmVyVGV4dHVyZTJECisjZGVmaW5lIGdsQmluZFJlbmRl
cmJ1ZmZlckVYVCBnbEJpbmRSZW5kZXJidWZmZXIKKyNkZWZpbmUgZ2xSZW5kZXJidWZmZXJTdG9y
YWdlRVhUIGdsUmVuZGVyYnVmZmVyU3RvcmFnZQorI2RlZmluZSBnbEZyYW1lYnVmZmVyUmVuZGVy
YnVmZmVyRVhUIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIKKyNkZWZpbmUgR0xfUkVOREVSQlVG
RkVSX0VYVCBHTF9SRU5ERVJCVUZGRVIKKyNkZWZpbmUgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UX0VY
VCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQKKyNkZWZpbmUgZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVz
RVhUIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1cworI2RlZmluZSBnbERlbGV0ZUZyYW1lYnVmZmVy
c0VYVCBnbERlbGV0ZUZyYW1lYnVmZmVycworI2RlZmluZSBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNF
WFQgZ2xEZWxldGVSZW5kZXJidWZmZXJzCisjZGVmaW5lIGdsR2VuUmVuZGVyYnVmZmVyc0VYVCBn
bEdlblJlbmRlcmJ1ZmZlcnMKKyNkZWZpbmUgZ2xHZW5GcmFtZWJ1ZmZlcnNFWFQgZ2xHZW5GcmFt
ZWJ1ZmZlcnMKKyNkZWZpbmUgZ2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdkVY
VCBnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2CisjZGVmaW5lIGdsR2V0UmVu
ZGVyYnVmZmVyUGFyYW1ldGVyaXZFWFQgZ2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdgorI2Rl
ZmluZSBnbElzUmVuZGVyYnVmZmVyRVhUIGdsSXNSZW5kZXJidWZmZXIKKyNkZWZpbmUgZ2xJc0Zy
YW1lYnVmZmVyRVhUIGdsSXNGcmFtZWJ1ZmZlcgorI2RlZmluZSBnbEdlbmVyYXRlTWlwbWFwRVhU
IGdsR2VuZXJhdGVNaXBtYXAKKyNkZWZpbmUgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhUIEdMX0NP
TE9SX0FUVEFDSE1FTlQwCisjZGVmaW5lIEdMX0RFUFRIX0FUVEFDSE1FTlRfRVhUIEdMX0RFUFRI
X0FUVEFDSE1FTlQKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQ09NUExFVEVfRVhUIEdMX0ZSQU1F
QlVGRkVSX0NPTVBMRVRFCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0VYVCBHTF9GUkFNRUJVRkZF
UgorI2RlZmluZSBHTF9ERVBUSDI0X1NURU5DSUw4X0VYVCBHTF9ERVBUSDI0X1NURU5DSUw4X09F
UworI2RlZmluZSBHTF9SR0JBOCBHTF9SR0JBOF9PRVMKKyNkZWZpbmUgR0xfUkdCOCBHTF9SR0I4
X09FUworI2RlZmluZSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCAweDhDQTgKKyNkZWZpbmUgR0xf
RFJBV19GUkFNRUJVRkZFUl9FWFQgMHg4Q0E5CisjZGVmaW5lIEZSQU1FQlVGRkVSX0lOQ09NUExF
VEVfTVVMVElTQU1QTEVfRVhUIDB4OTEzNAorI2RlZmluZSBHTF9NQVhfU0FNUExFU19FWFQgMHg4
RDU3CisjZW5kaWYgLy8gUExBVEZPUk0oQkxBQ0tCRVJSWSkKKworI2VuZGlmIC8vIE9wZW5HTEVT
U2hpbXNfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCmluZGV4IGFjMjkyZDM3
NTE1NzkyZWNhMzIyOWU2ZjY3Mzg4ZWIyOGU1MWUwOTYuLmZkMWRhZDA5ZjAxMWI3NmM5ZTU5ZTQ4
NTM5YWM5YzAzZGFhZGIzNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCkBA
IC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMLmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgpAQCAt
MTQ2LDYgKzE0NywxMSBAQCBHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkK
ICAgICA6OmdsRGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZtX2Zibyk7CiB9CiAKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKEltYWdl
KiBpbWFnZSwgdW5zaWduZWQgaW50IGZvcm1hdCwgdW5zaWduZWQgaW50IHR5cGUsIGJvb2wgcHJl
bXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSwgVmVjdG9yPHVp
bnQ4X3Q+JiBvdXRwdXRWZWN0b3IpCiB7CiAgICAgaWYgKCFpbWFnZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NDb250ZXh0M0RD
bHV0dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3Jh
cGhpY3NDb250ZXh0M0RDbHV0dGVyLmNwcAppbmRleCBjYTBmZmRjMmJjYjlkODkzODZiMTVkNDhj
MzIzOGViM2VmOWIwOTU0Li43ZTIyZjcyMmQ0YmQzNTNkMzMxYmRjNjA3NzVlN2Q3MWFhMDVlNTFl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dy
YXBoaWNzQ29udGV4dDNEQ2x1dHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0NvbnRleHQzRENsdXR0ZXIuY3BwCkBAIC01Niw2ICs1
NiwxMSBAQCBHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKICAgICBub3RJ
bXBsZW1lbnRlZCgpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVy
Q29tcGlsZXIoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKIGJvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFnZSogaW1hZ2UsIHVuc2lnbmVkIGludCBmb3JtYXQs
IHVuc2lnbmVkIGludCB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2Ft
bWFBbmRDb2xvclByb2ZpbGUsIFZlY3Rvcjx1aW50OF90PiYgb3V0cHV0VmVjdG9yKQogewogICAg
IG5vdEltcGxlbWVudGVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwCmluZGV4IDRhYTM0
MWMzMjZjNzM1N2IxMTBjOTgzZDAzOWNjZDdiYzMzMTY2MTIuLmJiZTc3YmI3OTg1NGM5MjM3ZThj
YjY3MDZjOTc0NjU5OTU2MmI5MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwCkBAIC00
Miw3ICs0Miw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEV4dGVuc2lvbnMzRE9wZW5HTDo6
RXh0ZW5zaW9uczNET3BlbkdMKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQotICAgIDogbV9p
bml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnMoZmFsc2UpCisgICAgOiBFeHRlbnNpb25zM0RP
cGVuR0xDb21tb24oY29udGV4dCkKKyAgICAsIG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNp
b25zKGZhbHNlKQogICAgICwgbV9jb250ZXh0KGNvbnRleHQpCiB7CiB9CkBAIC01MSw5MSArNTIs
NiBAQCBFeHRlbnNpb25zM0RPcGVuR0w6On5FeHRlbnNpb25zM0RPcGVuR0woKQogewogfQogCi1i
b29sIEV4dGVuc2lvbnMzRE9wZW5HTDo6c3VwcG9ydHMoY29uc3QgU3RyaW5nJiBuYW1lKQotewot
ICAgIC8vIE5vdGUgb24gc3VwcG9ydCBmb3IgQkdSQToKLSAgICAvLwotICAgIC8vIEZvciBPcGVu
R0wgRVMyLjAsIHJlcXVpcmVzIGNoZWNraW5nIGZvcgotICAgIC8vIEdMX0VYVF90ZXh0dXJlX2Zv
cm1hdF9CR1JBODg4OCBhbmQgR0xfRVhUX3JlYWRfZm9ybWF0X2JncmEuCi0gICAgLy8gRm9yIGRl
c2t0b3AgR0wsIEJHUkEgaGFzIGJlZW4gc3VwcG9ydGVkIHNpbmNlIE9wZW5HTCAxLjIuCi0gICAg
Ly8KLSAgICAvLyBIb3dldmVyLCBub3RlIHRoYXQgdGhlIEdMIEVTMiBleHRlbnNpb24gcmVxdWly
ZXMgdGhlCi0gICAgLy8gaW50ZXJuYWxGb3JtYXQgdG8gZ2xUZXhJbWFnZTJEKCkgYmUgR0xfQkdS
QSwgd2hpbGUgZGVza3RvcCBHTAotICAgIC8vIHdpbGwgbm90IGFjY2VwdCBHTF9CR1JBIChtdXN0
IGJlIEdMX1JHQkEpLCBzbyB0aGlzIG11c3QgYmUKLSAgICAvLyBjaGVja2VkIG9uIGVhY2ggcGxh
dGZvcm0uIERlc2t0b3AgR0wgb2ZmZXJzIG5laXRoZXIKLSAgICAvLyBHTF9FWFRfdGV4dHVyZV9m
b3JtYXRfQkdSQTg4ODggb3IgR0xfRVhUX3JlYWRfZm9ybWF0X2JncmEsIHNvCi0gICAgLy8gdHJl
YXQgdGhlbSBhcyB1bnN1cHBvcnRlZCBoZXJlLgotICAgIGlmICghbV9pbml0aWFsaXplZEF2YWls
YWJsZUV4dGVuc2lvbnMpIHsKLSAgICAgICAgU3RyaW5nIGV4dGVuc2lvbnNTdHJpbmcocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhHTF9FWFRFTlNJT05TKSkpOwot
ICAgICAgICBWZWN0b3I8U3RyaW5nPiBhdmFpbGFibGVFeHRlbnNpb25zOwotICAgICAgICBleHRl
bnNpb25zU3RyaW5nLnNwbGl0KCIgIiwgYXZhaWxhYmxlRXh0ZW5zaW9ucyk7Ci0gICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgYXZhaWxhYmxlRXh0ZW5zaW9ucy5zaXplKCk7ICsraSkKLSAg
ICAgICAgICAgIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5hZGQoYXZhaWxhYmxlRXh0ZW5zaW9uc1tp
XSk7Ci0gICAgICAgIG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zID0gdHJ1ZTsKLSAg
ICB9Ci0gICAgCi0gICAgLy8gR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCBhbmQgR0xfQU5HTEVf
ZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUgYXJlICJmYWtlIi4gVGhleSBhcmUgaW1wbGVtZW50ZWQg
dXNpbmcgb3RoZXIKLSAgICAvLyBleHRlbnNpb25zLiBJbiBwYXJ0aWN1bGFyIEdMX0VYVF9mcmFt
ZWJ1ZmZlcl9ibGl0IGFuZCBHTF9FWFRfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUKLSAgICBpZiAo
bmFtZSA9PSAiR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCIpCi0gICAgICAgIHJldHVybiBtX2F2
YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0VYVF9mcmFtZWJ1ZmZlcl9ibGl0Iik7Ci0g
ICAgaWYgKG5hbWUgPT0gIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIikKLSAgICAg
ICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfRVhUX2ZyYW1lYnVm
ZmVyX211bHRpc2FtcGxlIik7Ci0KLSAgICAvLyBEZXNrdG9wIEdMIGFsd2F5cyBzdXBwb3J0cyBH
TF9PRVNfcmdiOF9yZ2JhOC4KLSAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3JnYjhfcmdiYTgiKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIElmIEdMX0FSQl90ZXh0dXJlX2Zsb2F0IGlz
IGF2YWlsYWJsZSB0aGVuIHdlIHJlcG9ydCBHTF9PRVNfdGV4dHVyZV9mbG9hdCBhbmQKLSAgICAv
LyBHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IGFzIGF2YWlsYWJsZS4KLSAgICBpZiAobmFtZSA9
PSAiR0xfT0VTX3RleHR1cmVfZmxvYXQiIHx8IG5hbWUgPT0gIkdMX09FU190ZXh0dXJlX2hhbGZf
ZmxvYXQiKQotICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJH
TF9BUkJfdGV4dHVyZV9mbG9hdCIpOwotICAgIAotICAgIC8vIEdMX09FU192ZXJ0ZXhfYXJyYXlf
b2JqZWN0Ci0gICAgaWYgKG5hbWUgPT0gIkdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikKLSAg
ICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfQVBQTEVfdmVy
dGV4X2FycmF5X29iamVjdCIpOwotCi0gICAgLy8gRGVza3RvcCBHTCBhbHdheXMgc3VwcG9ydHMg
dGhlIHN0YW5kYXJkIGRlcml2YXRpdmUgZnVuY3Rpb25zCi0gICAgaWYgKG5hbWUgPT0gIkdMX09F
U19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYg
KG5hbWUgPT0gIkdMX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpCi0gICAgICAgIHJl
dHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0VYVF90ZXh0dXJlX2ZpbHRl
cl9hbmlzb3Ryb3BpYyIpOwotCi0gICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250
YWlucyhuYW1lKTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RPcGVuR0w6OmVuc3VyZUVuYWJsZWQo
Y29uc3QgU3RyaW5nJiBuYW1lKQotewotI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oUVQp
IHx8IFBMQVRGT1JNKEdUSykKLSAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2
YXRpdmVzIikgewotICAgICAgICAvLyBFbmFibGUgc3VwcG9ydCBpbiBBTkdMRSAoaWYgbm90IGVu
YWJsZWQgYWxyZWFkeSkKLSAgICAgICAgQU5HTEVXZWJLaXRCcmlkZ2UmIGNvbXBpbGVyID0gbV9j
b250ZXh0LT5tX2NvbXBpbGVyOwotICAgICAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgQU5HTEVSZXNv
dXJjZXMgPSBjb21waWxlci5nZXRSZXNvdXJjZXMoKTsKLSAgICAgICAgaWYgKCFBTkdMRVJlc291
cmNlcy5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMpIHsKLSAgICAgICAgICAgIEFOR0xFUmVzb3Vy
Y2VzLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA9IDE7Ci0gICAgICAgICAgICBjb21waWxlci5z
ZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOwotICAgICAgICB9Ci0gICAgfQotI2Vsc2UKLSAg
ICBBU1NFUlRfVU5VU0VEKG5hbWUsIHN1cHBvcnRzKG5hbWUpKTsKLSNlbmRpZgotfQotCi1ib29s
IEV4dGVuc2lvbnMzRE9wZW5HTDo6aXNFbmFibGVkKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSNp
ZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEspCi0gICAgaWYg
KG5hbWUgPT0gIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpIHsKLSAgICAgICAgQU5HTEVX
ZWJLaXRCcmlkZ2UmIGNvbXBpbGVyID0gbV9jb250ZXh0LT5tX2NvbXBpbGVyOwotICAgICAgICBy
ZXR1cm4gY29tcGlsZXIuZ2V0UmVzb3VyY2VzKCkuT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzOwot
ICAgIH0KLSNlbmRpZgotICAgIHJldHVybiBzdXBwb3J0cyhuYW1lKTsKLX0KLQotaW50IEV4dGVu
c2lvbnMzRE9wZW5HTDo6Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpCi17Ci0gICAgcmV0dXJu
IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUjsKLX0KIAogdm9pZCBFeHRlbnNpb25zM0RPcGVu
R0w6OmJsaXRGcmFtZWJ1ZmZlcihsb25nIHNyY1gwLCBsb25nIHNyY1kwLCBsb25nIHNyY1gxLCBs
b25nIHNyY1kxLCBsb25nIGRzdFgwLCBsb25nIGRzdFkwLCBsb25nIGRzdFgxLCBsb25nIGRzdFkx
LCB1bnNpZ25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcgZmlsdGVyKQogewpAQCAtMTk0LDE5
ICsxMTAsNDkgQEAgdm9pZCBFeHRlbnNpb25zM0RPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheU9FUyhQ
bGF0Zm9ybTNET2JqZWN0IGFycmF5KQogI2VuZGlmCiB9CiAKLVN0cmluZyBFeHRlbnNpb25zM0RP
cGVuR0w6OmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShQbGF0Zm9ybTNET2JqZWN0IHNo
YWRlcikKLXsKLSAgICBVTlVTRURfUEFSQU0oc2hhZGVyKTsKLSAgICByZXR1cm4gIiI7Ci0gICAg
Ly8gRklYTUU6IGltcGxlbWVudCB0aGlzIGZ1bmN0aW9uIGFuZCBhZGQgR0xfQU5HTEVfdHJhbnNs
YXRlZF9zaGFkZXJfc291cmNlIGluIHN1cHBvcnRzKCkuCi19Ci0KIHZvaWQgRXh0ZW5zaW9uczNE
T3BlbkdMOjpjb3B5VGV4dHVyZUNIUk9NSVVNKEdDM0RlbnVtLCBQbGF0Zm9ybTNET2JqZWN0LCBQ
bGF0Zm9ybTNET2JqZWN0LCBHQzNEaW50LCBHQzNEZW51bSkKIHsKICAgICAvLyBGSVhNRTogaW1w
bGVtZW50IHRoaXMgZnVuY3Rpb24gYW5kIGFkZCBHTF9DSFJPTUlVTV9jb3B5X3RleHR1cmUgaW4g
c3VwcG9ydHMoKS4KICAgICByZXR1cm47CiB9CiAKK2Jvb2wgRXh0ZW5zaW9uczNET3BlbkdMOjpz
dXBwb3J0c0V4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgLy8gR0xfQU5HTEVf
ZnJhbWVidWZmZXJfYmxpdCBhbmQgR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUgYXJl
ICJmYWtlIi4gVGhleSBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgb3RoZXIKKyAgICAvLyBleHRlbnNp
b25zLiBJbiBwYXJ0aWN1bGFyIEdMX0VYVF9mcmFtZWJ1ZmZlcl9ibGl0IGFuZCBHTF9FWFRfZnJh
bWVidWZmZXJfbXVsdGlzYW1wbGUKKyAgICBpZiAobmFtZSA9PSAiR0xfQU5HTEVfZnJhbWVidWZm
ZXJfYmxpdCIpCisgICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMo
IkdMX0VYVF9mcmFtZWJ1ZmZlcl9ibGl0Iik7CisgICAgaWYgKG5hbWUgPT0gIkdMX0FOR0xFX2Zy
YW1lYnVmZmVyX211bHRpc2FtcGxlIikKKyAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5z
aW9ucy5jb250YWlucygiR0xfRVhUX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIik7CisKKyAgICAv
LyBEZXNrdG9wIEdMIGFsd2F5cyBzdXBwb3J0cyBHTF9PRVNfcmdiOF9yZ2JhOC4KKyAgICBpZiAo
bmFtZSA9PSAiR0xfT0VTX3JnYjhfcmdiYTgiKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IC8vIElmIEdMX0FSQl90ZXh0dXJlX2Zsb2F0IGlzIGF2YWlsYWJsZSB0aGVuIHdlIHJlcG9ydCBH
TF9PRVNfdGV4dHVyZV9mbG9hdCBhbmQKKyAgICAvLyBHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0
IGFzIGF2YWlsYWJsZS4KKyAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3RleHR1cmVfZmxvYXQiIHx8
IG5hbWUgPT0gIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQiKQorICAgICAgICByZXR1cm4gbV9h
dmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9BUkJfdGV4dHVyZV9mbG9hdCIpOworCisg
ICAgLy8gR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QKKyAgICBpZiAobmFtZSA9PSAiR0xfT0VT
X3ZlcnRleF9hcnJheV9vYmplY3QiKQorICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNp
b25zLmNvbnRhaW5zKCJHTF9BUFBMRV92ZXJ0ZXhfYXJyYXlfb2JqZWN0Iik7CisKKyAgICAvLyBE
ZXNrdG9wIEdMIGFsd2F5cyBzdXBwb3J0cyB0aGUgc3RhbmRhcmQgZGVyaXZhdGl2ZSBmdW5jdGlv
bnMKKyAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAobmFtZSA9PSAiR0xfRVhUX3RleHR1cmVfZmlsdGVy
X2FuaXNvdHJvcGljIikKKyAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250
YWlucygiR0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7CisKKyAgICByZXR1cm4g
bV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKG5hbWUpOworfQorCitTdHJpbmcgRXh0ZW5z
aW9uczNET3BlbkdMOjpnZXRFeHRlbnNpb25zKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KDo6Z2xHZXRTdHJpbmcoR0xfRVhURU5TSU9OUykpKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVu
c2lvbnMzRE9wZW5HTC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0V4dGVuc2lvbnMzRE9wZW5HTC5oCmluZGV4IDJiMmQzMGEwOTBlNTRmY2ExZDA2NDYyYWU3MWRk
N2VjODcyYjU0NGMuLmEyNzg5YmRjY2MwNWRlYTRkNmRmOWIzYjRjNDc3N2Y3YjE5ZWExMjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNp
b25zM0RPcGVuR0wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvRXh0ZW5zaW9uczNET3BlbkdMLmgKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgRXh0ZW5z
aW9uczNET3BlbkdMX2gKICNkZWZpbmUgRXh0ZW5zaW9uczNET3BlbkdMX2gKIAotI2luY2x1ZGUg
IkV4dGVuc2lvbnMzRC5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oIgog
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgpAQCAtMzQsMTUgKzM0LDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRXh0
ZW5zaW9uczNET3BlbkdMIDogcHVibGljIEV4dGVuc2lvbnMzRCB7CitjbGFzcyBFeHRlbnNpb25z
M0RPcGVuR0wgOiBwdWJsaWMgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uIHsKIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIH5FeHRlbnNpb25zM0RPcGVuR0woKTsKIAogICAgIC8vIEV4dGVuc2lvbnMzRCBt
ZXRob2RzLgotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0cyhjb25zdCBTdHJpbmcmKTsKLSAgICB2
aXJ0dWFsIHZvaWQgZW5zdXJlRW5hYmxlZChjb25zdCBTdHJpbmcmKTsKLSAgICB2aXJ0dWFsIGJv
b2wgaXNFbmFibGVkKGNvbnN0IFN0cmluZyYpOwotICAgIHZpcnR1YWwgaW50IGdldEdyYXBoaWNz
UmVzZXRTdGF0dXNBUkIoKTsKICAgICB2aXJ0dWFsIHZvaWQgYmxpdEZyYW1lYnVmZmVyKGxvbmcg
c3JjWDAsIGxvbmcgc3JjWTAsIGxvbmcgc3JjWDEsIGxvbmcgc3JjWTEsIGxvbmcgZHN0WDAsIGxv
bmcgZHN0WTAsIGxvbmcgZHN0WDEsIGxvbmcgZHN0WTEsIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5z
aWduZWQgbG9uZyBmaWx0ZXIpOwogICAgIHZpcnR1YWwgdm9pZCByZW5kZXJidWZmZXJTdG9yYWdl
TXVsdGlzYW1wbGUodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcywg
dW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWdu
ZWQgbG9uZyBoZWlnaHQpOwogICAgIApAQCAtNTAsMTQgKzQ2LDE2IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCk7CiAgICAg
dmlydHVhbCBHQzNEYm9vbGVhbiBpc1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpOwog
ICAgIHZpcnR1YWwgdm9pZCBiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCk7Ci0g
ICAgdmlydHVhbCBTdHJpbmcgZ2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRmb3Jt
M0RPYmplY3QpOwogICAgIHZpcnR1YWwgdm9pZCBjb3B5VGV4dHVyZUNIUk9NSVVNKEdDM0RlbnVt
LCBQbGF0Zm9ybTNET2JqZWN0LCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEaW50LCBHQzNEZW51bSk7
CiAKLXByaXZhdGU6Citwcm90ZWN0ZWQ6CiAgICAgLy8gVGhpcyBjbGFzcyBvbmx5IG5lZWRzIHRv
IGJlIGluc3RhbnRpYXRlZCBieSBHcmFwaGljc0NvbnRleHQzRCBpbXBsZW1lbnRhdGlvbnMuCiAg
ICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogICAgIEV4dGVuc2lvbnMzRE9wZW5H
TChHcmFwaGljc0NvbnRleHQzRCopOwogCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRXh0ZW5z
aW9uKGNvbnN0IFdURjo6U3RyaW5nJik7CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0RXh0ZW5zaW9u
cygpOworCiAgICAgYm9vbCBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9uczsKICAgICBI
YXNoU2V0PFN0cmluZz4gbV9hdmFpbGFibGVFeHRlbnNpb25zOwogICAgIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5H
TENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0
ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZTQ2OGQ1NGQ3ZGMzYWEyNDQ3
Zjc1YTQ4MjllNDRhYmMwMzlmZjYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKQEAg
LTAsMCArMSwxNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90
aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaWYgRU5BQkxFKFdFQkdMKQorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTENvbW1v
bi5oIgorCisjaW5jbHVkZSAiQU5HTEVXZWJLaXRCcmlkZ2UuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQzRC5oIgorCisjaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKKyNpbmNsdWRlIDxCbGFj
a0JlcnJ5UGxhdGZvcm1Mb2cuaD4KKyNlbmRpZgorCisjaWYgVVNFKE9QRU5HTF9FU18yKQorI2lu
Y2x1ZGUgIk9wZW5HTEVTU2hpbXMuaCIKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNsdWRl
IDxHTEVTMi9nbDJleHQuaD4KKyNlbGlmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlIDxPcGVuR0wv
Z2wuaD4KKyNlbGlmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShR
VCkKKyNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9u
OjpFeHRlbnNpb25zM0RPcGVuR0xDb21tb24oR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisg
ICAgOiBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucyhmYWxzZSkKKyAgICAsIG1fY29u
dGV4dChjb250ZXh0KQoreworfQorCitFeHRlbnNpb25zM0RPcGVuR0xDb21tb246On5FeHRlbnNp
b25zM0RPcGVuR0xDb21tb24oKQoreworfQorCitib29sIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1v
bjo6c3VwcG9ydHMoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmICghbV9pbml0aWFsaXpl
ZEF2YWlsYWJsZUV4dGVuc2lvbnMpCisgICAgICAgIGluaXRpYWxpemVBdmFpbGFibGVFeHRlbnNp
b25zKCk7CisKKyAgICByZXR1cm4gc3VwcG9ydHNFeHRlbnNpb24obmFtZSk7Cit9CisKK3ZvaWQg
RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjplbnN1cmVFbmFibGVkKGNvbnN0IFN0cmluZyYgbmFt
ZSkKK3sKKyAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikgewor
ICAgICAgICAvLyBFbmFibGUgc3VwcG9ydCBpbiBBTkdMRSAoaWYgbm90IGVuYWJsZWQgYWxyZWFk
eSkKKyAgICAgICAgQU5HTEVXZWJLaXRCcmlkZ2UmIGNvbXBpbGVyID0gbV9jb250ZXh0LT5tX2Nv
bXBpbGVyOworICAgICAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgQU5HTEVSZXNvdXJjZXMgPSBjb21w
aWxlci5nZXRSZXNvdXJjZXMoKTsKKyAgICAgICAgaWYgKCFBTkdMRVJlc291cmNlcy5PRVNfc3Rh
bmRhcmRfZGVyaXZhdGl2ZXMpIHsKKyAgICAgICAgICAgIEFOR0xFUmVzb3VyY2VzLk9FU19zdGFu
ZGFyZF9kZXJpdmF0aXZlcyA9IDE7CisgICAgICAgICAgICBjb21waWxlci5zZXRSZXNvdXJjZXMo
QU5HTEVSZXNvdXJjZXMpOworICAgICAgICB9CisgICAgfQorfQorCitib29sIEV4dGVuc2lvbnMz
RE9wZW5HTENvbW1vbjo6aXNFbmFibGVkKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAo
bmFtZSA9PSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikgeworICAgICAgICBBTkdMRVdl
YktpdEJyaWRnZSYgY29tcGlsZXIgPSBtX2NvbnRleHQtPm1fY29tcGlsZXI7CisgICAgICAgIHJl
dHVybiBjb21waWxlci5nZXRSZXNvdXJjZXMoKS5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXM7Cisg
ICAgfQorICAgIHJldHVybiBzdXBwb3J0cyhuYW1lKTsKK30KKworaW50IEV4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbjo6Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpCit7CisgICAgcmV0dXJuIEdy
YXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUjsKK30KKworU3RyaW5nIEV4dGVuc2lvbnMzRE9wZW5H
TENvbW1vbjo6Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRmb3JtM0RPYmplY3Qg
c2hhZGVyKQoreworICAgIEFTU0VSVChzaGFkZXIpOworICAgIGludCBHTHNoYWRlclR5cGU7Cisg
ICAgQU5HTEVTaGFkZXJUeXBlIHNoYWRlclR5cGU7CisKKyAgICBBTkdMRVdlYktpdEJyaWRnZSYg
Y29tcGlsZXIgPSBtX2NvbnRleHQtPm1fY29tcGlsZXI7CisKKyAgICBtX2NvbnRleHQtPmdldFNo
YWRlcml2KHNoYWRlciwgR3JhcGhpY3NDb250ZXh0M0Q6OlNIQURFUl9UWVBFLCAmR0xzaGFkZXJU
eXBlKTsKKworICAgIGlmIChHTHNoYWRlclR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRF
WF9TSEFERVIpCisgICAgICAgIHNoYWRlclR5cGUgPSBTSEFERVJfVFlQRV9WRVJURVg7CisgICAg
ZWxzZSBpZiAoR0xzaGFkZXJUeXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFE
RVIpCisgICAgICAgIHNoYWRlclR5cGUgPSBTSEFERVJfVFlQRV9GUkFHTUVOVDsKKyAgICBlbHNl
CisgICAgICAgIHJldHVybiAiIjsgLy8gSW52YWxpZCBzaGFkZXIgdHlwZS4KKworICAgIEhhc2hN
YXA8UGxhdGZvcm0zRE9iamVjdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlNoYWRlclNvdXJjZUVudHJ5
Pjo6aXRlcmF0b3IgcmVzdWx0ID0gbV9jb250ZXh0LT5tX3NoYWRlclNvdXJjZU1hcC5maW5kKHNo
YWRlcik7CisKKyAgICBpZiAocmVzdWx0ID09IG1fY29udGV4dC0+bV9zaGFkZXJTb3VyY2VNYXAu
ZW5kKCkpCisgICAgICAgIHJldHVybiAiIjsKKworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpTaGFk
ZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnNlY29uZDsKKworICAgIFN0cmluZyB0cmFu
c2xhdGVkU2hhZGVyU291cmNlOworICAgIFN0cmluZyBzaGFkZXJJbmZvTG9nOworCisgICAgYm9v
bCBpc1ZhbGlkID0gY29tcGlsZXIudmFsaWRhdGVTaGFkZXJTb3VyY2UoZW50cnkuc291cmNlLnV0
ZjgoKS5kYXRhKCksIHNoYWRlclR5cGUsIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UsIHNoYWRlcklu
Zm9Mb2cpOworCisgICAgZW50cnkubG9nID0gc2hhZGVySW5mb0xvZzsKKyAgICBlbnRyeS5pc1Zh
bGlkID0gaXNWYWxpZDsKKworICAgIGlmICghaXNWYWxpZCkKKyAgICAgICAgcmV0dXJuICIiOwor
CisgICAgcmV0dXJuIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7Cit9CisKK3ZvaWQgRXh0ZW5zaW9u
czNET3BlbkdMQ29tbW9uOjppbml0aWFsaXplQXZhaWxhYmxlRXh0ZW5zaW9ucygpCit7CisgICAg
U3RyaW5nIGV4dGVuc2lvbnNTdHJpbmcgPSBnZXRFeHRlbnNpb25zKCk7CisgICAgVmVjdG9yPFN0
cmluZz4gYXZhaWxhYmxlRXh0ZW5zaW9uczsKKyAgICBleHRlbnNpb25zU3RyaW5nLnNwbGl0KCIg
IiwgYXZhaWxhYmxlRXh0ZW5zaW9ucyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhdmFp
bGFibGVFeHRlbnNpb25zLnNpemUoKTsgKytpKQorICAgICAgICBtX2F2YWlsYWJsZUV4dGVuc2lv
bnMuYWRkKGF2YWlsYWJsZUV4dGVuc2lvbnNbaV0pOworICAgIG1faW5pdGlhbGl6ZWRBdmFpbGFi
bGVFeHRlbnNpb25zID0gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjkwMTgzOWU2ZTNlNGI5NWExZTU2NmNkMTFmOGEyN2Q2OWJlYjM5ZTUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0
ZW5zaW9uczNET3BlbkdMQ29tbW9uLmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uX2gKKyNkZWZpbmUgRXh0ZW5zaW9uczNET3BlbkdMQ29t
bW9uX2gKKworI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0M0QuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBFeHRlbnNpb25z
M0RPcGVuR0xDb21tb24gOiBwdWJsaWMgRXh0ZW5zaW9uczNEIHsKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIH5FeHRlbnNpb25zM0RPcGVuR0xDb21tb24oKTsKKworICAgIC8vIEV4dGVuc2lvbnMzRCBt
ZXRob2RzLgorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0cyhjb25zdCBTdHJpbmcmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZW5zdXJlRW5hYmxlZChjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIGJv
b2wgaXNFbmFibGVkKGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgaW50IGdldEdyYXBoaWNz
UmVzZXRTdGF0dXNBUkIoKTsKKworICAgIHZpcnR1YWwgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVW
ZXJ0ZXhBcnJheU9FUygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlVmVydGV4QXJyYXlP
RVMoUGxhdGZvcm0zRE9iamVjdCkgPSAwOworICAgIHZpcnR1YWwgR0MzRGJvb2xlYW4gaXNWZXJ0
ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJpbmRW
ZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KSA9IDA7CisKKyAgICB2aXJ0dWFsIFN0cmlu
ZyBnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoUGxhdGZvcm0zRE9iamVjdCk7CisKK3By
b3RlY3RlZDoKKyAgICBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24oR3JhcGhpY3NDb250ZXh0M0Qq
KTsKKworICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplQXZhaWxhYmxlRXh0ZW5zaW9ucygpOwor
ICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBTdHJpbmcmKSA9IDA7Cisg
ICAgdmlydHVhbCBTdHJpbmcgZ2V0RXh0ZW5zaW9ucygpID0gMDsKKworICAgIGJvb2wgbV9pbml0
aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnM7CisgICAgSGFzaFNldDxTdHJpbmc+IG1fYXZhaWxh
YmxlRXh0ZW5zaW9uczsKKworICAgIC8vIFdlYWsgcG9pbnRlciBiYWNrIHRvIEdyYXBoaWNzQ29u
dGV4dDNECisgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbl9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5z
aW9uczNET3BlbkdMRVMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YzY1MDcxNWVlZTIyM2E5
ZDA3NzBjZGQyNjFkMTQxNTIxYzNmMmE3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmNwcApAQCAt
MCwwICsxLDE0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rp
b24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaWYgRU5BQkxFKFdFQkdMKQorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTEVTLmgiCisK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgPEVHTC9lZ2wuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitFeHRlbnNp
b25zM0RPcGVuR0xFUzo6RXh0ZW5zaW9uczNET3BlbkdMRVMoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQpCisgICAgOiBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24oY29udGV4dCkKKyAgICAsIG1f
c3VwcG9ydHNPRVN2ZXJ0ZXhBcnJheU9iamVjdChmYWxzZSkKKyAgICAsIG1fc3VwcG9ydHNJTUdN
dWx0aXNhbXBsZWRSZW5kZXJUb1RleHR1cmUoZmFsc2UpCisgICAgLCBtX2dsRnJhbWVidWZmZXJU
ZXh0dXJlMkRNdWx0aXNhbXBsZUlNRygwKQorICAgICwgbV9nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VN
dWx0aXNhbXBsZUlNRygwKQorICAgICwgbV9nbEJpbmRWZXJ0ZXhBcnJheU9FUygwKQorICAgICwg
bV9nbERlbGV0ZVZlcnRleEFycmF5c09FUygwKQorICAgICwgbV9nbEdlblZlcnRleEFycmF5c09F
UygwKQorICAgICwgbV9nbElzVmVydGV4QXJyYXlPRVMoMCkKK3sKK30KKworRXh0ZW5zaW9uczNE
T3BlbkdMRVM6On5FeHRlbnNpb25zM0RPcGVuR0xFUygpCit7Cit9CisKK3ZvaWQgRXh0ZW5zaW9u
czNET3BlbkdMRVM6OmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcodW5zaWduZWQg
bG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0
YXJnZXQsIHVuc2lnbmVkIGludCB0ZXh0dXJlLCBpbnQgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgc2Ft
cGxlcykKK3sKKyAgICBpZiAobV9nbEZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcp
CisgICAgICAgIG1fZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HKHRhcmdldCwg
YXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCwgc2FtcGxlcyk7CisgICAgZWxz
ZQorICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKK30KKwordm9pZCBFeHRlbnNpb25zM0RPcGVuR0xFUzo6cmVuZGVyYnVmZmVyU3RvcmFn
ZU11bHRpc2FtcGxlSU1HKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHNhbXBs
ZXMsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVu
c2lnbmVkIGxvbmcgaGVpZ2h0KQoreworICAgIGlmIChtX2dsUmVuZGVyYnVmZmVyU3RvcmFnZU11
bHRpc2FtcGxlSU1HKQorICAgICAgICBtX2dsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxl
SU1HKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAg
IGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgRXh0ZW5zaW9uczNET3BlbkdMRVM6OmNy
ZWF0ZVZlcnRleEFycmF5T0VTKCkKK3sKKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIGlmIChtX2dsR2VuVmVydGV4QXJyYXlzT0VTKSB7CisgICAgICAgIEdMdWludCBh
cnJheSA9IDA7CisgICAgICAgIG1fZ2xHZW5WZXJ0ZXhBcnJheXNPRVMoMSwgJmFycmF5KTsKKyAg
ICAgICAgcmV0dXJuIGFycmF5OworICAgIH0KKworICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdM
RXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgIHJldHVybiAwOworfQorCit2b2lkIEV4
dGVuc2lvbnMzRE9wZW5HTEVTOjpkZWxldGVWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0
IGFycmF5KQoreworICAgIGlmICghYXJyYXkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKG1fZ2xEZWxldGVWZXJ0ZXhBcnJh
eXNPRVMpCisgICAgICAgIG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMoMSwgJmFycmF5KTsKKyAg
ICBlbHNlCisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworfQorCitHQzNEYm9vbGVhbiBFeHRlbnNpb25zM0RPcGVuR0xFUzo6aXNWZXJ0
ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQoreworICAgIGlmICghYXJyYXkpCisg
ICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKG1fZ2xJc1ZlcnRleEFycmF5T0VTKQorICAgICAgICByZXR1cm4gbV9n
bElzVmVydGV4QXJyYXlPRVMoYXJyYXkpOworCisgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xF
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IEV4dGVuc2lvbnMzRE9wZW5HTEVTOjpiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVj
dCBhcnJheSkKK3sKKyAgICBpZiAoIWFycmF5KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2Nv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmIChtX2dsQmluZFZlcnRleEFycmF5
T0VTKQorICAgICAgICBtX2dsQmluZFZlcnRleEFycmF5T0VTKGFycmF5KTsKKyAgICBlbHNlCisg
ICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworfQorCisKK2Jvb2wgRXh0ZW5zaW9uczNET3BlbkdMRVM6OnN1cHBvcnRzRXh0ZW5zaW9uKGNv
bnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAobV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRh
aW5zKG5hbWUpKSB7CisgICAgICAgIGlmIChuYW1lID09ICJHTF9PRVNfdmVydGV4X2FycmF5X29i
amVjdCIgJiYgIW1fc3VwcG9ydHNPRVN2ZXJ0ZXhBcnJheU9iamVjdCkgeworICAgICAgICAgICAg
bV9nbEJpbmRWZXJ0ZXhBcnJheU9FUyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xCSU5EVkVSVEVY
QVJSQVlPRVNQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xCaW5kVmVydGV4QXJyYXlPRVMiKSk7
CisgICAgICAgICAgICBtX2dsR2VuVmVydGV4QXJyYXlzT0VTID0gcmVpbnRlcnByZXRfY2FzdDxQ
Rk5HTEdFTlZFUlRFWEFSUkFZU09FU1BST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbEdlblZlcnRl
eEFycmF5c09FUyIpKTsKKyAgICAgICAgICAgIG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMgPSBy
ZWludGVycHJldF9jYXN0PFBGTkdMREVMRVRFVkVSVEVYQVJSQVlTT0VTUFJPQz4oZWdsR2V0UHJv
Y0FkZHJlc3MoImdsRGVsZXRlVmVydGV4QXJyYXlzT0VTIikpOworICAgICAgICAgICAgbV9nbElz
VmVydGV4QXJyYXlPRVMgPSByZWludGVycHJldF9jYXN0PFBGTkdMSVNWRVJURVhBUlJBWU9FU1BS
T0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbElzVmVydGV4QXJyYXlPRVMiKSk7CisgICAgICAgICAg
ICBtX3N1cHBvcnRzT0VTdmVydGV4QXJyYXlPYmplY3QgPSB0cnVlOworICAgICAgICB9IGVsc2Ug
aWYgKG5hbWUgPT0gIkdMX0lNR19tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiICYmICFt
X3N1cHBvcnRzSU1HTXVsdGlzYW1wbGVkUmVuZGVyVG9UZXh0dXJlKSB7CisgICAgICAgICAgICBt
X2dsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
UEZOR0xGUkFNRUJVRkZFUlRFWFRVUkUyRE1VTFRJU0FNUExFSU1HUFJPQz4oZWdsR2V0UHJvY0Fk
ZHJlc3MoImdsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRyIpKTsKKyAgICAgICAg
ICAgIG1fZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUcgPSByZWludGVycHJldF9j
YXN0PFBGTkdMUkVOREVSQlVGRkVSU1RPUkFHRU1VTFRJU0FNUExFSU1HUFJPQz4oZWdsR2V0UHJv
Y0FkZHJlc3MoImdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HIikpOworICAgICAg
ICAgICAgbV9zdXBwb3J0c0lNR011bHRpc2FtcGxlZFJlbmRlclRvVGV4dHVyZSA9IHRydWU7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNl
OworfQorCitTdHJpbmcgRXh0ZW5zaW9uczNET3BlbkdMRVM6OmdldEV4dGVuc2lvbnMoKQorewor
ICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0
cmluZyhHTF9FWFRFTlNJT05TKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjkwMjIyY2E0ZDdhOTRhMDhjMmY5NzU2MTRiZjJiYzYwZTAwMWUwOTUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9u
czNET3BlbkdMRVMuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBFeHRlbnNpb25z
M0RPcGVuR0xFU19oCisjZGVmaW5lIEV4dGVuc2lvbnMzRE9wZW5HTEVTX2gKKworI2luY2x1ZGUg
IkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oIgorCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Cisj
aW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
RXh0ZW5zaW9uczNET3BlbkdMRVMgOiBwdWJsaWMgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uIHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5FeHRlbnNpb25zM0RPcGVuR0xFUygpOworCisgICAgdmly
dHVhbCB2b2lkIGZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcodW5zaWduZWQgbG9u
ZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJn
ZXQsIHVuc2lnbmVkIGludCB0ZXh0dXJlLCBpbnQgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgc2FtcGxl
cyk7CisgICAgdmlydHVhbCB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRyh1
bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25n
IGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdo
dCk7CisKKyAgICB2aXJ0dWFsIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlVmVydGV4QXJyYXlPRVMo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVj
dCk7CisgICAgdmlydHVhbCBHQzNEYm9vbGVhbiBpc1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RP
YmplY3QpOworICAgIHZpcnR1YWwgdm9pZCBiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9i
amVjdCk7CisKK3Byb3RlY3RlZDoKKyAgICAvLyBUaGlzIGNsYXNzIG9ubHkgbmVlZHMgdG8gYmUg
aW5zdGFudGlhdGVkIGJ5IEdyYXBoaWNzQ29udGV4dDNEIGltcGxlbWVudGF0aW9ucy4KKyAgICBm
cmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CisgICAgRXh0ZW5zaW9uczNET3BlbkdMRVMo
R3JhcGhpY3NDb250ZXh0M0QqKTsKKworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0V4dGVuc2lv
bihjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRFeHRlbnNpb25zKCk7CisK
KyAgICBib29sIG1fc3VwcG9ydHNPRVN2ZXJ0ZXhBcnJheU9iamVjdDsKKyAgICBib29sIG1fc3Vw
cG9ydHNJTUdNdWx0aXNhbXBsZWRSZW5kZXJUb1RleHR1cmU7CisKKyAgICBQRk5HTEZSQU1FQlVG
RkVSVEVYVFVSRTJETVVMVElTQU1QTEVJTUdQUk9DIG1fZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11
bHRpc2FtcGxlSU1HOworICAgIFBGTkdMUkVOREVSQlVGRkVSU1RPUkFHRU1VTFRJU0FNUExFSU1H
UFJPQyBtX2dsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HOworICAgIFBGTkdMQklO
RFZFUlRFWEFSUkFZT0VTUFJPQyBtX2dsQmluZFZlcnRleEFycmF5T0VTOworICAgIFBGTkdMREVM
RVRFVkVSVEVYQVJSQVlTT0VTUFJPQyBtX2dsRGVsZXRlVmVydGV4QXJyYXlzT0VTOworICAgIFBG
TkdMR0VOVkVSVEVYQVJSQVlTT0VTUFJPQyBtX2dsR2VuVmVydGV4QXJyYXlzT0VTOworICAgIFBG
TkdMSVNWRVJURVhBUlJBWU9FU1BST0MgbV9nbElzVmVydGV4QXJyYXlPRVM7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFeHRlbnNpb25zM0RPcGVuR0xFU19oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0M0RPcGVuR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAppbmRleCAzZjQ3YjZlMjFlYjI1NTI0
M2VlZWE0YmYzMTk4NTNhYmJmNzZhMmRjLi41ZjAwNTA1OTljNmFiNmI0MTMyMDMyNTgwYTU0MGEz
YzI2ZTcyOWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKQEAgLTM0
LDYgKzM0LDExIEBACiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCiAKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8Y3N0cmluZz4KKyNpbmNs
dWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
ICNpZiBQTEFURk9STShNQUMpCiAjaW5jbHVkZSA8T3BlbkdML2dsLmg+CiAjZWxpZiBQTEFURk9S
TShHVEspIHx8IFBMQVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oUVQpCkBAIC00Nyw2ICs1MiwzMiBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzQW5kQ29udmVydFRvQkdSQUlmTmVj
ZXNzYXJ5KGludCB4LCBpbnQgeSwgaW50CiAgICAgOjpnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgs
IGhlaWdodCwgR0xfQkdSQSwgR0xfVU5TSUdORURfSU5UXzhfOF84XzhfUkVWLCBwaXhlbHMpOwog
fQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZUF0dHJpYnV0ZXMoKQoreworICAg
IEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IGdldEV4dGVuc2lvbnMoKTsKKyAgICBpZiAobV9h
dHRycy5zdGVuY2lsKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIHBhY2tlZERlcHRoU3RlbmNpbEV4
dGVuc2lvbiA9IGlzR0xFUzJDb21wbGlhbnQoKSA/ICJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5j
aWwiIDogIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCI7CisgICAgICAgIGlmIChleHRlbnNp
b25zLT5zdXBwb3J0cyhwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pKSB7CisgICAgICAgICAg
ICBleHRlbnNpb25zLT5lbnN1cmVFbmFibGVkKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbik7
CisgICAgICAgICAgICAvLyBGb3JjZSBkZXB0aCBpZiBzdGVuY2lsIGlzIHRydWUuCisgICAgICAg
ICAgICBtX2F0dHJzLmRlcHRoID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBt
X2F0dHJzLnN0ZW5jaWwgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFz
KSB7CisgICAgICAgIGJvb2wgaXNWYWxpZFZlbmRvciA9IHRydWU7CisgICAgICAgIC8vIEN1cnJl
bnRseSBpbiBNYWMgd2Ugb25seSB0dXJuIG9uIGFudGlhbGlhcyBpZiB2ZW5kb3IgaXMgTlZJRElB
LAorICAgICAgICAvLyBvciBpZiBBVEkgYW5kIG9uIDEwLjcuMiBhbmQgYWJvdmUuCisgICAgICAg
IGNvbnN0IGNoYXIqIHZlbmRvciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KDo6Z2xH
ZXRTdHJpbmcoR0xfVkVORE9SKSk7CisgICAgICAgIGlmICghdmVuZG9yIHx8ICghc3RkOjpzdHJz
dHIodmVuZG9yLCAiTlZJRElBIikgJiYgIShzdGQ6OnN0cnN0cih2ZW5kb3IsICJBVEkiKSAmJiBz
eXN0ZW1BbGxvd3NNdWx0aXNhbXBsaW5nT25BVElDYXJkcygpKSkpCisgICAgICAgICAgICBpc1Zh
bGlkVmVuZG9yID0gZmFsc2U7CisgICAgICAgIGlmICghaXNWYWxpZFZlbmRvciB8fCAhZXh0ZW5z
aW9ucy0+c3VwcG9ydHMoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIikgfHwgaXNH
TEVTMkNvbXBsaWFudCgpKQorICAgICAgICAgICAgbV9hdHRycy5hbnRpYWxpYXMgPSBmYWxzZTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgiR0xf
QU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKTsKKyAgICB9Cit9CisKIGJvb2wgR3JhcGhp
Y3NDb250ZXh0M0Q6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAgICAgY29u
c3QgaW50IHdpZHRoID0gc2l6ZS53aWR0aCgpOwpAQCAtMTUxLDYgKzE4Miw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoY29uc3QgSW50
UmVjdCYgcmVjdCkKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2Uo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0KQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCiAgICAg
c3dpdGNoIChpbnRlcm5hbGZvcm1hdCkgewogICAgIGNhc2UgREVQVEhfU1RFTkNJTDoKICAgICAg
ICAgaW50ZXJuYWxmb3JtYXQgPSBHTF9ERVBUSDI0X1NURU5DSUw4X0VYVDsKQEAgLTIzMiw2ICsy
NjQsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCiAgICAgR0MzRGVudW0gb3BlbkdMSW50
ZXJuYWxGb3JtYXQgPSBpbnRlcm5hbGZvcm1hdDsKICAgICBpZiAodHlwZSA9PSBHTF9GTE9BVCkg
ewogICAgICAgICBpZiAoZm9ybWF0ID09IEdMX1JHQkEpCkBAIC0yNDEsNiArMjc0LDcgQEAgYm9v
bCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RlbnVtIGludGUKICAgICB9CiAKICAgICA6OmdsVGV4SW1hZ2UyRCh0YXJnZXQs
IGxldmVsLCBvcGVuR0xJbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3Jt
YXQsIHR5cGUsIHBpeGVscyk7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjU2LDYgKzI5
MCwzMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRlcHRoKEdDM0RjbGFtcGYgZGVw
dGgpCiAgICAgOjpnbENsZWFyRGVwdGgoZGVwdGgpOwogfQogCitib29sIEdyYXBoaWNzQ29udGV4
dDNEOjpzeXN0ZW1BbGxvd3NNdWx0aXNhbXBsaW5nT25BVElDYXJkcygpCit7CisjaWYgUExBVEZP
Uk0oTUFDKQorI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkgJiYgIWRlZmlu
ZWQoQlVJTERJTkdfT05fTElPTikKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKyAgICBzdGF0aWMgU0ludDMyIHZlcnNpb247CisgICAgaWYgKCF2
ZXJzaW9uKSB7CisgICAgICAgIGlmIChHZXN0YWx0KGdlc3RhbHRTeXN0ZW1WZXJzaW9uLCAmdmVy
c2lvbikgIT0gbm9FcnIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIC8v
IFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc5MjIgZm9yIG1v
cmUgZGV0YWlscworICAgIHJldHVybiB2ZXJzaW9uID49IDB4MTA3MjsKKyNlbmRpZiAvLyBTTk9X
X0xFT1BBUkQgYW5kIExJT04KKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmIC8vIFBM
QVRGT1JNKE1BQykKK30KKworRXh0ZW5zaW9uczNEKiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXh0
ZW5zaW9ucygpCit7CisgICAgaWYgKCFtX2V4dGVuc2lvbnMpCisgICAgICAgIG1fZXh0ZW5zaW9u
cyA9IGFkb3B0UHRyKG5ldyBFeHRlbnNpb25zM0RPcGVuR0wodGhpcykpOworICAgIHJldHVybiBt
X2V4dGVuc2lvbnMuZ2V0KCk7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCmluZGV4IDQyOWZj
NTFjOTA0NmM0NGE1MGVmZWNlMTI5Y2JmMzFmNjBkOTk3NWUuLjc2MmUzOWYwOWRhYTk2ZjVjMGRh
NzM0ODQwOTQxODQ1YWRlYTliZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNE
T3BlbkdMQ29tbW9uLmNwcApAQCAtMzAsNyArMzAsMTIgQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dDNELmgiCiAKKyNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCisjaWYg
VVNFKE9QRU5HTF9FU18yKQorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTEVTLmgiCisjZWxz
ZQogI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTC5oIgorI2VuZGlmCiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJJbWFn
ZURhdGEuaCIKQEAgLTQ5LDM5ICs1NCwyNCBAQAogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAotI2lmIFBMQVRGT1JNKE1BQykKKyNp
ZiBVU0UoT1BFTkdMX0VTXzIpCisjaW5jbHVkZSAiT3BlbkdMRVNTaGltcy5oIgorI2VsaWYgUExB
VEZPUk0oTUFDKQogI2luY2x1ZGUgPE9wZW5HTC9nbC5oPgogI2VsaWYgUExBVEZPUk0oR1RLKSB8
fCBQTEFURk9STShFRkwpIHx8IFBMQVRGT1JNKFFUKQogI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgi
CiAjZW5kaWYKIAotbmFtZXNwYWNlIFdlYkNvcmUgeworI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkp
CisjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtTG9nLmg+CisjZW5kaWYKIAotc3RhdGljIGJv
b2wgc3lzdGVtQWxsb3dzTXVsdGlzYW1wbGluZ09uQVRJQ2FyZHMoKQotewotI2lmIFBMQVRGT1JN
KE1BQykKLSNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpICYmICFkZWZpbmVk
KEJVSUxESU5HX09OX0xJT04pCi0gICAgcmV0dXJuIHRydWU7Ci0jZWxzZQotICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7Ci0gICAgc3RhdGljIFNJbnQzMiB2ZXJzaW9uOwotICAgIGlmICghdmVy
c2lvbikgewotICAgICAgICBpZiAoR2VzdGFsdChnZXN0YWx0U3lzdGVtVmVyc2lvbiwgJnZlcnNp
b24pICE9IG5vRXJyKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAvLyBT
ZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3OTIyIGZvciBtb3Jl
IGRldGFpbHMKLSAgICByZXR1cm4gdmVyc2lvbiA+PSAweDEwNzI7Ci0jZW5kaWYgLy8gU05PV19M
RU9QQVJEIGFuZCBMSU9OCi0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZiAvLyBQTEFU
Rk9STShNQUMpCi19CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnZhbGlkYXRlQXR0cmlidXRlcygpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0
ZURlcHRoU3RlbmNpbChjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pCiB7
CiAgICAgRXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9ucygpOwogICAgIGlm
IChtX2F0dHJzLnN0ZW5jaWwpIHsKLSAgICAgICAgY29uc3QgY2hhciogcGFja2VkRGVwdGhTdGVu
Y2lsRXh0ZW5zaW9uID0gaXNHTEVTMkNvbXBsaWFudCgpID8gIkdMX09FU19wYWNrZWRfZGVwdGhf
c3RlbmNpbCIgOiAiR0xfRVhUX3BhY2tlZF9kZXB0aF9zdGVuY2lsIjsKICAgICAgICAgaWYgKGV4
dGVuc2lvbnMtPnN1cHBvcnRzKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbikpIHsKICAgICAg
ICAgICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5z
aW9uKTsKICAgICAgICAgICAgIC8vIEZvcmNlIGRlcHRoIGlmIHN0ZW5jaWwgaXMgdHJ1ZS4KQEAg
LTQzOSwzNiArNDI5LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIo
UGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCiAgICAgQVNTRVJUKHNoYWRlcik7CiAgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CiAKLSAgICBpbnQgR0xzaGFkZXJUeXBlOwotICAgIEFOR0xFU2hhZGVy
VHlwZSBzaGFkZXJUeXBlOwotCi0gICAgZ2xHZXRTaGFkZXJpdihzaGFkZXIsIFNIQURFUl9UWVBF
LCAmR0xzaGFkZXJUeXBlKTsKLSAgICAKLSAgICBpZiAoR0xzaGFkZXJUeXBlID09IFZFUlRFWF9T
SEFERVIpCi0gICAgICAgIHNoYWRlclR5cGUgPSBTSEFERVJfVFlQRV9WRVJURVg7Ci0gICAgZWxz
ZSBpZiAoR0xzaGFkZXJUeXBlID09IEZSQUdNRU5UX1NIQURFUikKLSAgICAgICAgc2hhZGVyVHlw
ZSA9IFNIQURFUl9UWVBFX0ZSQUdNRU5UOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuOyAvLyBJ
bnZhbGlkIHNoYWRlciB0eXBlLgotCi0gICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBTaGFk
ZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQo
c2hhZGVyKTsKKyAgICBTdHJpbmcgdHJhbnNsYXRlZFNoYWRlclNvdXJjZSA9IG1fZXh0ZW5zaW9u
cy0+Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKHNoYWRlcik7CiAKLSAgICBpZiAocmVz
dWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgIGlmICghdHJhbnNsYXRlZFNoYWRl
clNvdXJjZS5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU2hhZGVyU291cmNlRW50
cnkmIGVudHJ5ID0gcmVzdWx0LT5zZWNvbmQ7Ci0KLSAgICBTdHJpbmcgdHJhbnNsYXRlZFNoYWRl
clNvdXJjZTsKLSAgICBTdHJpbmcgc2hhZGVySW5mb0xvZzsKLQotICAgIGJvb2wgaXNWYWxpZCA9
IG1fY29tcGlsZXIudmFsaWRhdGVTaGFkZXJTb3VyY2UoZW50cnkuc291cmNlLnV0ZjgoKS5kYXRh
KCksIHNoYWRlclR5cGUsIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UsIHNoYWRlckluZm9Mb2cpOwot
Ci0gICAgZW50cnkubG9nID0gc2hhZGVySW5mb0xvZzsKLSAgICBlbnRyeS5pc1ZhbGlkID0gaXNW
YWxpZDsKLQotICAgIGlmICghaXNWYWxpZCkKLSAgICAgICAgcmV0dXJuOyAvLyBTaGFkZXIgZGlk
bid0IHZhbGlkYXRlLCBkb24ndCBtb3ZlIGZvcndhcmQgd2l0aCBjb21waWxpbmcgdHJhbnNsYXRl
ZCBzb3VyY2UuCi0KICAgICBpbnQgdHJhbnNsYXRlZFNoYWRlckxlbmd0aCA9IHRyYW5zbGF0ZWRT
aGFkZXJTb3VyY2UubGVuZ3RoKCk7CiAKICAgICBjb25zdCBDU3RyaW5nJiB0cmFuc2xhdGVkU2hh
ZGVyQ1N0cmluZyA9IHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UudXRmOCgpOwpAQCAtODAxLDE4ICs3
NjYsNjEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdD
M0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2kKICAgICAgICAgOjpnbEJpbmRGcmFtZWJ1
ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKICAgICAgICAg
OjpnbEZsdXNoKCk7CiAgICAgfQorICAgIC8vIEN1cnJlbnRseSBvbmx5IGZvcm1hdD1SR0JBLCB0
eXBlPVVOU0lHTkVEX0JZVEUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBzcGVjaWZpY2F0aW9uOiBodHRw
Oi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L3dlYmdsL3NwZWNzL2xhdGVzdC8KKyAgICAvLyBJ
ZiB0aGlzIGV2ZXIgY2hhbmdlcywgdGhpcyBjb2RlIHdpbGwgbmVlZCB0byBiZSB1cGRhdGVkLgor
CisgICAgLy8gQ2FsY3VsYXRlIHRoZSBzdHJpZGVzIG9mIG91ciBkYXRhIGFuZCBjYW52YXMKKyAg
ICB1bnNpZ25lZCBpbnQgZm9ybWF0U2l6ZSA9IDQ7IC8vIFJHQkEgVU5TSUdORURfQllURQorICAg
IHVuc2lnbmVkIGludCBkYXRhU3RyaWRlID0gd2lkdGggKiBmb3JtYXRTaXplOworICAgIHVuc2ln
bmVkIGludCBjYW52YXNTdHJpZGUgPSBtX2N1cnJlbnRXaWR0aCAqIGZvcm1hdFNpemU7CisKKyAg
ICAvLyBJZiB3ZSBhcmUgdXNpbmcgYSBwYWNrIGFsaWdubWVudCBvZiA4LCB0aGVuIHdlIG5lZWQg
dG8gYWxpZ24gb3VyIHN0cmlkZXMgdG8gOCBieXRlIGJvdW5kYXJpZXMKKyAgICAvLyBTZWU6IGh0
dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGF0YV9zdHJ1Y3R1cmVfYWxpZ25tZW50IChjb21w
dXRpbmcgcGFkZGluZykKKyAgICBpbnQgcGFja0FsaWdubWVudDsKKyAgICBnbEdldEludGVnZXJ2
KEdMX1BBQ0tfQUxJR05NRU5ULCAmcGFja0FsaWdubWVudCk7CisgICAgaWYgKDggPT0gcGFja0Fs
aWdubWVudCkgeworICAgICAgICBkYXRhU3RyaWRlID0gKGRhdGFTdHJpZGUgKyA3KSAmIH43Owor
ICAgICAgICBjYW52YXNTdHJpZGUgPSAoY2FudmFzU3RyaWRlICsgNykgJiB+NzsKKyAgICB9CisK
KyAgICB1bnNpZ25lZCBjaGFyKiBjYW52YXNEYXRhID0gbmV3IHVuc2lnbmVkIGNoYXJbY2FudmFz
U3RyaWRlICogbV9jdXJyZW50SGVpZ2h0XTsKKyAgICA6OmdsUmVhZFBpeGVscygwLCAwLCBtX2N1
cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNhbnZhc0RhdGEpOwor
CisgICAgLy8gSWYgd2UgZmFpbGVkIHRvIHJlYWQgb3VyIGNhbnZhcyBkYXRhIGR1ZSB0byBhIEdM
IGVycm9yLCBkb24ndCBjb250aW51ZQorICAgIGludCBlcnJvciA9IGdsR2V0RXJyb3IoKTsKKyAg
ICBpZiAoR0xfTk9fRVJST1IgIT0gZXJyb3IpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
ZXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gQ2xlYXIgb3VyIGRhdGEg
aW4gY2FzZSBzb21lIG9mIGl0IGxpZXMgb3V0c2lkZSB0aGUgYm91bmRzIG9mIG91ciBjYW52YXMK
KyAgICAvLyBUT0RPOiBkb24ndCBkbyB0aGlzIGlmIGFsbCBvZiB0aGUgZGF0YSBsaWVzIGluc2lk
ZSB0aGUgYm91bmRzIG9mIHRoZSBjYW52YXMKKyAgICBtZW1zZXQoZGF0YSwgMCwgZGF0YVN0cmlk
ZSAqIGhlaWdodCk7CisKKyAgICAvLyBDYWxjdWxhdGUgdGhlIGludGVyc2VjdGlvbiBvZiBvdXIg
Y2FudmFzIGFuZCBkYXRhIGJvdW5kcworICAgIEludFJlY3QgZGF0YVJlY3QoeCwgeSwgd2lkdGgs
IGhlaWdodCk7CisgICAgSW50UmVjdCBjYW52YXNSZWN0KDAsIDAsIG1fY3VycmVudFdpZHRoLCBt
X2N1cnJlbnRIZWlnaHQpOworICAgIEludFJlY3Qgbm9uWmVyb0RhdGFSZWN0ID0gaW50ZXJzZWN0
aW9uKGRhdGFSZWN0LCBjYW52YXNSZWN0KTsKKworICAgIHVuc2lnbmVkIGludCB4RGF0YU9mZnNl
dCA9IHggPCAwID8gLXggKiBmb3JtYXRTaXplIDogMDsKKyAgICB1bnNpZ25lZCBpbnQgeURhdGFP
ZmZzZXQgPSB5IDwgMCA/IC15ICogZGF0YVN0cmlkZSA6IDA7CisgICAgdW5zaWduZWQgaW50IHhD
YW52YXNPZmZzZXQgPSBub25aZXJvRGF0YVJlY3QueCgpICogZm9ybWF0U2l6ZTsKKyAgICB1bnNp
Z25lZCBpbnQgeUNhbnZhc09mZnNldCA9IG5vblplcm9EYXRhUmVjdC55KCkgKiBjYW52YXNTdHJp
ZGU7CisgICAgdW5zaWduZWQgY2hhciogZHN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+
KGRhdGEpICsgeERhdGFPZmZzZXQgKyB5RGF0YU9mZnNldDsKKyAgICB1bnNpZ25lZCBjaGFyKiBz
cmMgPSBjYW52YXNEYXRhICsgeENhbnZhc09mZnNldCArIHlDYW52YXNPZmZzZXQ7CisgICAgZm9y
IChpbnQgcm93ID0gMDsgcm93IDwgbm9uWmVyb0RhdGFSZWN0LmhlaWdodCgpOyByb3crKykgewor
ICAgICAgICBtZW1jcHkoZHN0LCBzcmMsIG5vblplcm9EYXRhUmVjdC53aWR0aCgpICogZm9ybWF0
U2l6ZSk7CisgICAgICAgIGRzdCArPSBkYXRhU3RyaWRlOworICAgICAgICBzcmMgKz0gY2FudmFz
U3RyaWRlOworICAgIH0KKworICAgIGRlbGV0ZSBbXSBjYW52YXNEYXRhOwogICAgIDo6Z2xSZWFk
UGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7CisKICAgICBp
ZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQog
ICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJV
RkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJl
bGVhc2VTaGFkZXJDb21waWxlcigpCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgaXMgbm90IGltcGxl
bWVudGVkIG9uIGRlc2t0b3AgT3BlbkdMLiBXZSBuZWVkIHRvIGhhdmUgaWZkZWZzIGZvciB0aGUg
ZGlmZmVyZW50IEdMIHZhcmlhbnRzLgotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNhbXBsZUNvdmVy
YWdlKEdDM0RjbGFtcGYgdmFsdWUsIEdDM0Rib29sZWFuIGludmVydCkKIHsKICAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKQEAgLTEzODYsMTMgKzEzOTQsNiBAQCBib29sIEdyYXBoaWNzQ29udGV4
dDNEOjpsYXllckNvbXBvc2l0ZWQoKSBjb25zdAogICAgIHJldHVybiBtX2xheWVyQ29tcG9zaXRl
ZDsKIH0KIAotRXh0ZW5zaW9uczNEKiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXh0ZW5zaW9ucygp
Ci17Ci0gICAgaWYgKCFtX2V4dGVuc2lvbnMpCi0gICAgICAgIG1fZXh0ZW5zaW9ucyA9IGFkb3B0
UHRyKG5ldyBFeHRlbnNpb25zM0RPcGVuR0wodGhpcykpOwotICAgIHJldHVybiBtX2V4dGVuc2lv
bnMuZ2V0KCk7Ci19Ci0KIH0KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQz
RE9wZW5HTEVTLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAppbmRleCBiMWJkMWRjNTZjYTZmZDkyODNkYjJk
YWUxMjM4M2NlMjJmYzk0MzAyLi4zYjQ0YTI0NmVmMTMwNGMwNDkxNmE4YzEzNTkwNDYxY2VhM2Yy
ODQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCkBAIC0yOSw5
MyArMjksMjkgQEAKICNpZiBFTkFCTEUoV0VCR0wpCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQzRC5oIgotCi0jaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMLmgiCisjaW5jbHVkZSAiRXh0
ZW5zaW9uczNET3BlbkdMRVMuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiSW50
U2l6ZS5oIgorI2luY2x1ZGUgIkxheWVyV2ViS2l0VGhyZWFkLmgiCiAjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKLQotI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpCi0jaW5jbHVk
ZSAiT3BlbkdMU2hpbXMuaCIKLSNlbmRpZgorI2luY2x1ZGUgIk9wZW5HTEVTU2hpbXMuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxz
QW5kQ29udmVydFRvQkdSQUlmTmVjZXNzYXJ5KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQg
aGVpZ2h0LCB1bnNpZ25lZCBjaGFyKiBwaXhlbHMpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpy
ZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQogewotICAgIGNvbnN0IGludCB0b3RhbEJ5dGVzID0gbV9j
dXJyZW50V2lkdGggKiBtX2N1cnJlbnRIZWlnaHQgKiA0OwotICAgIDo6Z2xSZWFkUGl4ZWxzKHgs
IHksIHdpZHRoLCBoZWlnaHQsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscyk7Ci0g
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQpCi0gICAgICAgIHN0ZDo6
c3dhcChwaXhlbHNbaV0sIHBpeGVsc1tpICsgMl0pOyAvLyBDb252ZXJ0IHRvIEJHUkEuCisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFJlbGVhc2VTaGFkZXJDb21waWxlcigpOwog
fQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlRkJPcyhjb25zdCBJbnRTaXplJiBz
aXplKQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVsc0FuZENvbnZlcnRUb0JHUkFJ
Zk5lY2Vzc2FyeShpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgdW5zaWduZWQg
Y2hhciogcGl4ZWxzKQogewotICAgIGNvbnN0IGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsKLSAg
ICBjb25zdCBpbnQgaGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsKLSAgICBHTHVpbnQgY29sb3JGb3Jt
YXQgPSAwLCBwaXhlbERhdGFUeXBlID0gMDsKLSAgICBpZiAobV9hdHRycy5hbHBoYSkgewotICAg
ICAgICBtX2ludGVybmFsQ29sb3JGb3JtYXQgPSBHTF9SR0JBOwotICAgICAgICBjb2xvckZvcm1h
dCA9IEdMX1JHQkE7Ci0gICAgICAgIHBpeGVsRGF0YVR5cGUgPSBHTF9VTlNJR05FRF9CWVRFOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIG1faW50ZXJuYWxDb2xvckZvcm1hdCA9IEdMX1JHQjsKLSAg
ICAgICAgY29sb3JGb3JtYXQgPSBHTF9SR0I7Ci0gICAgICAgIHBpeGVsRGF0YVR5cGUgPSBHTF9V
TlNJR05FRF9TSE9SVF81XzZfNTsKLSAgICB9Ci0KLSAgICAvLyBXZSBkb24ndCBhbGxvdyB0aGUg
bG9naWMgd2hlcmUgc3RlbmNpbCBpcyByZXF1aXJlZCBhbmQgZGVwdGggaXMgbm90LgotICAgIC8v
IFNlZSBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVBdHRyaWJ1dGVzLgotICAgIGJvb2wgc3Vw
cG9ydFBhY2tlZERlcHRoU3RlbmNpbEJ1ZmZlciA9IChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRy
cy5kZXB0aCkgJiYgZ2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3BhY2tlZF9kZXB0
aF9zdGVuY2lsIik7Ci0KLSAgICAvLyBSZXNpemUgcmVndWxhciBGQk8uCi0gICAgYm9vbCBtdXN0
UmVzdG9yZUZCTyA9IGZhbHNlOwotICAgIGlmIChtX2JvdW5kRkJPICE9IG1fZmJvKSB7Ci0gICAg
ICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVY
VChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICB9Ci0KLSAgICA6
OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKLSAgICA6OmdsVGV4SW1h
Z2UyRChHTF9URVhUVVJFXzJELCAwLCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWln
aHQsIDAsIGNvbG9yRm9ybWF0LCBwaXhlbERhdGFUeXBlLCAwKTsKLSAgICA6OmdsRnJhbWVidWZm
ZXJUZXh0dXJlMkRFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0Nv
bnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSwgMCk7
Ci0KLSAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9jb21wb3NpdG9yVGV4dHVy
ZSk7Ci0gICAgOjpnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgbV9pbnRlcm5hbENvbG9y
Rm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBjb2xvckZvcm1hdCwgR0xfVU5TSUdORURfQllURSwg
MCk7Ci0gICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOwotCi0gICAgLy8gV2Ug
ZG9uJ3Qgc3VwcG9ydCBhbnRpYWxpYXNpbmcgeWV0LiBTZWUgR3JhcGhpY3NDb250ZXh0M0Q6OnZh
bGlkYXRlQXR0cmlidXRlcy4KLSAgICBBU1NFUlQoIW1fYXR0cnMuYW50aWFsaWFzKTsKLQotICAg
IGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkgewotICAgICAgICAvLyBVc2Ug
YSAyNCBiaXQgZGVwdGggYnVmZmVyIHdoZXJlIHdlIGtub3cgd2UgaGF2ZSBpdC4KLSAgICAgICAg
aWYgKHN1cHBvcnRQYWNrZWREZXB0aFN0ZW5jaWxCdWZmZXIpIHsKLSAgICAgICAgICAgIDo6Z2xC
aW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAg
ICAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6
REVQVEhfU1RFTkNJTCwgd2lkdGgsIGhlaWdodCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRI
X1NURU5DSUwsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfMjRfOCwgMCk7Ci0gICAg
ICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsKQotICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1
ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5ULCBHTF9U
RVhUVVJFXzJELCBtX2RlcHRoU3RlbmNpbEJ1ZmZlciwgMCk7Ci0gICAgICAgICAgICBpZiAobV9h
dHRycy5kZXB0aCkKLSAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xf
RlJBTUVCVUZGRVIsIEdMX0RFUFRIX0FUVEFDSE1FTlQsIEdMX1RFWFRVUkVfMkQsIG1fZGVwdGhT
dGVuY2lsQnVmZmVyLCAwKTsKLSAgICAgICAgICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJF
XzJELCAwKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5j
aWwpIHsKLSAgICAgICAgICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX3N0ZW5jaWxCdWZmZXIpOwotICAgICAgICAgICAgICAg
IDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZG
RVIsIEdMX1NURU5DSUxfSU5ERVg4LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgICAgICAgICA6
OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSLCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRl
eHQzRDo6UkVOREVSQlVGRkVSLCBtX3N0ZW5jaWxCdWZmZXIpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgaWYgKG1fYXR0cnMuZGVwdGgpIHsKLSAgICAgICAgICAgICAgICA6OmdsQmluZFJl
bmRlcmJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX2RlcHRoQnVm
ZmVyKTsKLSAgICAgICAgICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZUVYVChHcmFwaGlj
c0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBHTF9ERVBUSF9DT01QT05FTlQxNiwgd2lkdGgsIGhl
aWdodCk7Ci0gICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FU
VEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fZGVwdGhCdWZmZXIp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR3Jh
cGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
aWYgKGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVIpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgewotICAg
ICAgICAvLyBGSVhNRTogY2xlYW51cAotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIDo6
Z2xSZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZ
VEUsIHBpeGVscyk7CisgICAgaW50IHRvdGFsQnl0ZXMgPSB3aWR0aCAqIGhlaWdodCAqIDQ7Cisg
ICAgaWYgKGlzR0xFUzJDb21wbGlhbnQoKSkgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IHRvdGFsQnl0ZXM7IGkgKz0gNCkKKyAgICAgICAgICAgIHN0ZDo6c3dhcChwaXhlbHNbaV0sIHBp
eGVsc1tpICsgMl0pOyAvLyBDb252ZXJ0IHRvIEJHUkEuCiAgICAgfQotCi0gICAgcmV0dXJuIG11
c3RSZXN0b3JlRkJPOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNvbHZlTXVsdGlz
YW1wbGluZ0lmTmVjZXNzYXJ5KGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC0xNTYsNiArOTIsMTcg
QEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVBdHRyaWJ1dGVzKCkKK3sKKyAgICB2YWxpZGF0ZURl
cHRoU3RlbmNpbCgiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7CisKKyAgICBpZiAobV9h
dHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAgRXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0gZ2V0
RXh0ZW5zaW9ucygpOworICAgICAgICBpZiAoIWV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9JTUdf
bXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIikpCisgICAgICAgICAgICBtX2F0dHJzLmFu
dGlhbGlhcyA9IGZhbHNlOworICAgIH0KK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVw
dGhSYW5nZShHQzNEY2xhbXBmIHpOZWFyLCBHQzNEY2xhbXBmIHpGYXIpCiB7CiAgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CkBAIC0xNjgsNiArMTE1LDE5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmNsZWFyRGVwdGgoR0MzRGNsYW1wZiBkZXB0aCkKICAgICA6OmdsQ2xlYXJEZXB0aGYoZGVw
dGgpOwogfQogCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK0V4dGVuc2lvbnMzRCogR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldEV4dGVuc2lvbnMoKQoreworICAgIGlmICghbV9leHRlbnNpb25zKQor
ICAgICAgICBtX2V4dGVuc2lvbnMgPSBhZG9wdFB0cihuZXcgRXh0ZW5zaW9uczNET3BlbkdMRVMo
dGhpcykpOworICAgIHJldHVybiBtX2V4dGVuc2lvbnMuZ2V0KCk7Cit9CisKK2Jvb2wgR3JhcGhp
Y3NDb250ZXh0M0Q6OnN5c3RlbUFsbG93c011bHRpc2FtcGxpbmdPbkFUSUNhcmRzKCkKK3sKKyAg
ICByZXR1cm4gZmFsc2U7IC8vIG5vdCBhcHBsaWNhYmxlCit9CisKK30KIAogI2VuZGlmIC8vIEVO
QUJMRShXRUJHTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKaW5kZXggNzBkM2YyNGFmYTU1NDJhNjhh
MTI0MWQzODFjM2NlOTM0ODc4MTg4NS4uMDY3NjkyMWMxMWY4MGZkYzVmYTg0ODM5YWRmZmY1M2Ix
MzBhZmFiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
R3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKQEAgLTk4LDYgKzk4LDEzIEBAIGJvb2wg
R3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJDb21wbGlhbnQoKSBjb25zdAogI2VuZGlmCiB9CiAK
KyNpZiAhVVNFKE9QRU5HTF9FU18yKQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNo
YWRlckNvbXBpbGVyKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorI2VuZGlmCisKIEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0LCBIb3N0V2luZG93KiBob3N0V2luZG93KQogICAgIDogbV9jb250
ZXh0KGNvbnRleHQpCiAgICAgLCBtX2hvc3RXaW5kb3coaG9zdFdpbmRvdykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150976</attachid>
            <date>2012-07-05 13:19:50 -0700</date>
            <delta_ts>2012-07-05 13:29:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90567-20120705161927.patch</filename>
            <type>text/plain</type>
            <size>66182</size>
            <attacher name="Joshua Netterfield">jnetterfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxODY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODFjZDc4MDliMjVmNjhk
YjA3MTcxZmU3N2UyMmI0ZjhkMjVkNTU2NC4uZjVjYTliYzYwOWJhOTgxOTIyNjk0OTM2ODVmZTk2
MTQ3NzE3NjM1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk0IEBACisyMDEyLTA3LTA0ICBKb3No
dWEgTmV0dGVyZmllbGQgIDxqbmV0dGVyZmllbGRAcmltLmNvbT4KKyAgICAgICAgTWFrZSBHQzNE
IGFuZCBFM0QgbW9yZSBtYWludGFpbmFibGUgZm9yIEdMRVMgcGxhdGZvcm1zCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDU2NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY2xlYW5zIHVw
IGNvZGUgZm9yIFdlYkdMIG9uIE9wZW5HTEVTIHBsYXRmb3JtcyB3aGljaCB1c2UgCisgICAgICAg
IEdyYXBoaWNzQ29udGV4dDNET3BlbkdMKiBhbmQgRXh0ZW5zaW9uczNET3BlbkdMKi4gQWx0aG91
Z2gKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wgd2FzIGFscmVhZHkgc3BsaXQgaW50
byBHcmFwaGljc0NvbnRleHQzRE9wZW5HTCwKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0RPcGVu
R0xDb21tb24sIGFuZCAgR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUywgdGhpcyBwYXRjaAorICAg
ICAgICBpcyBhbiBhdHRlbXB0IHRvIHJlZmFjdG9yIHRoaXMgY29kZSBpbiBhIHdheSB0aGF0IHdp
bGwgaGVscCBCbGFja0JlcnJ5IGFuZAorICAgICAgICBvdGhlciB0ZWFtcyBzdXBwb3J0IFdlYkdM
IG9uIG1vYmlsZSBwbGF0Zm9ybXMgd2l0aCBhcyBsaXR0bGUgdXNlIG9mCisgICAgICAgIOKAnCNJ
RiBVU0UoT1BFTkdMX0VTXzIp4oCdIGluIGNvbW1vbiBjb2RlIGFzIHBvc3NpYmxlLiBBbHNvIGlu
Y2x1ZGVkIGlzIHRoZQorICAgICAgICBzZXBhcmF0aW9uIG9mIEV4dGVuc2lvbnMzRE9wZW5HTCBp
bnRvIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbiwKKyAgICAgICAgRXh0ZW5zaW9uczNET3BlbkdM
LCBhbmQgRXh0ZW5zaW9uczNET3BlbkdMRVMgYXMgd2VsbCBhcyB0aGUgaW50cm9kdWN0aW9uCisg
ICAgICAgIG9mIE9wZW5HTEVTU2hpbXMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBjcmVhdGVk
IGluIGxhcmdlIHBhcnQgYnkgSm9uYXRoYW4gRmVsZHN0ZWluLgorCisgICAgICAgIE5vIG5ldyB0
ZXN0czogbm8gbmV3IGJlaGF2aW91ci4KKworICAgICAgICAqIFBsYXRmb3JtQmxhY2tCZXJyeS5j
bWFrZTogUmVjb2duaXplIEJsYWNrQmVycnkgYXMgT1BFTkdMIEVTLCBhZGQgbmV3IGZpbGVzIHRv
IGJ1aWxkCisgICAgICAgICogVGFyZ2V0LnByaTogQWRkIG5ldyBFeHRlbnNpb25zM0RPcGVuR0wq
IHRvIFdlYkdMIGJ1aWxkcworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dDNELmg6IEFkZCB2YWxpZGF0ZURlcHRoU3RlbmNpbCwgbWFrZSBzeXN0ZW1BbGxvd3NNdWx0
aXNhbXBsaW5nT25BVElDYXJkcyBhIGEgbWVtYmVyIGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvT3BlbkdMRVNTaGltcy5oOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNw
cDogTW92ZSBjb2RlIHRvIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbiB3aGVyZSBwb3NzaWJsZQor
ICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpFeHRlbnNpb25zM0RPcGVuR0wp
OiBSZWZsZWN0IHRoYXQgaXQgaXMgbm93IGluaGVyaXRzIEV4dGVuc2lvbnMzRENvbW1vbgorICAg
ICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpzdXBwb3J0c0V4dGVuc2lvbik6IENv
bnRhaW5zIE9wZW5HTCBzcGVjaWZpYyBjb2RlIGZyb20gc3VwcG9ydHMKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpnZXRFeHRlbnNpb25z
KTogUmV0dXJucyBhIGxpc3Qgb2YgZXh0ZW5zaW9ucworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaDogUmVtb3ZlIGZ1bmN0aW9ucyBub3cgaW4g
RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEV4
dGVuc2lvbnMzRE9wZW5HTCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4
dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0xDb21tb246OkV4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbik6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0xDb21tb246
On5FeHRlbnNpb25zM0RPcGVuR0xDb21tb24pOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9u
czNET3BlbkdMQ29tbW9uOjpzdXBwb3J0cyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25z
M0RPcGVuR0xDb21tb246OmVuc3VyZUVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uOjppc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uOjpnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKToKKyAgICAgICAg
KFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6Z2V0VHJhbnNsYXRlZFNoYWRlclNv
dXJjZUFOR0xFKTogRXhpc3RlZCBiZWZvcmUsIGJ1dCBkaWQgbm90aGluZy4gTm93IGRvZXMgd2hh
dCBpcyBzYXlzIGl0IGRvZXMuCisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0xD
b21tb246OmluaXRpYWxpemVBdmFpbGFibGVFeHRlbnNpb25zKTogTW92ZWQgZnJvbSBFeHRlbnNp
b25zM0RPcGVuR0w6OnN1cHBvcnRzCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmguCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5H
TEVTOjpFeHRlbnNpb25zM0RPcGVuR0xFUyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25z
M0RPcGVuR0xFUzo6fkV4dGVuc2lvbnMzRE9wZW5HTEVTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4
dGVuc2lvbnMzRE9wZW5HTEVTOjpmcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HKToK
KyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTEVTOjpyZW5kZXJidWZmZXJTdG9y
YWdlTXVsdGlzYW1wbGVJTUcpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdM
RVM6OmNyZWF0ZVZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMz
RE9wZW5HTEVTOjpkZWxldGVWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRl
bnNpb25zM0RPcGVuR0xFUzo6aXNWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbnNpb25zM0RPcGVuR0xFUzo6YmluZFZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNv
cmU6OkV4dGVuc2lvbnMzRE9wZW5HTEVTOjpzdXBwb3J0c0V4dGVuc2lvbik6IENvbnRhaW5zIE9w
ZW5HTEVTIHNwZWNpZmljIGNvZGUgZnJvbSBzdXBwb3J0cworICAgICAgICAoV2ViQ29yZTo6RXh0
ZW5zaW9uczNET3BlbkdMRVM6OmdldEV4dGVuc2lvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmguCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEV4dGVuc2lvbnMzRE9wZW5HTEVTKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRl
cyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpzeXN0ZW1BbGxvd3NNdWx0aXNhbXBsaW5nT25BVElDYXJkcyk6IE5vdyBhIG1lbWJlciBmdW5j
dGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25z
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RP
cGVuR0xDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZh
bGlkYXRlRGVwdGhTdGVuY2lsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmxpbmVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bGlu
a1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBpeGVsU3Rv
cmVpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwb2x5Z29uT2Zmc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVCdWZmZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29t
cGlsZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHNB
bmRDb252ZXJ0VG9CR1JBSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzeXN0ZW1BbGxvd3NNdWx0aXNhbXBsaW5nT25B
VElDYXJkcyk6IE5vdyBhIG1lbWJlciBmdW5jdGlvbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcik6
CisKIDIwMTItMDctMDQgIEpvaG4gTWVsbG9yICA8am9obm1lQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBUZXh0IEF1dG9zaXppbmc6IEFkZCBiYXNpYyBmcmFtZXdvcmsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCmluZGV4IGRlN2JjYzY0ZjM5ZWJkYTM2Yjc3NDY5MzIxYjlhMGRjODkwZWJm
ODguLmM5ZTgzOTQ0N2FlNTNjMmNlMGNjZDJiNzI5MmE0Y2I2MjY5MGRhZGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNjA1NCw2ICs2MDU0LDcgQEAgd2ViY29yZV9zb3VyY2Vz
ICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9PcGVuR0xTaGltcy5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL09wZW5HTFNoaW1zLmggXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wu
Y3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9u
czNET3BlbkdMQ29tbW9uLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21t
b24uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21h
a2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UKaW5kZXggNTE2OWE1
ZGQ1OTczYzdiMGUyODhkYTIxMjMxOTQ3MTg2NTMwZWE4MS4uNTg3ZWRlM2QwNjkwODAzNzNiZWQy
YTMxMjI1MmE1NTc5MjFkY2ZjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1C
bGFja0JlcnJ5LmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQmxhY2tCZXJyeS5j
bWFrZQpAQCAtMjE4LDYgKzIxOCw3IEBAIGlmIChFTkFCTEVfUkVRVUVTVF9BTklNQVRJT05fRlJB
TUUpCiBFTkRJRiAoKQogCiBpZiAoRU5BQkxFX1dFQkdMKQorICAgIEFERF9ERUZJTklUSU9OUyAo
LURXVEZfVVNFX09QRU5HTF9FU18yPTEpCiAgICAgTElTVChBUFBFTkQgV2ViQ29yZV9JTkNMVURF
X0RJUkVDVE9SSUVTCiAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUiCiAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wiCkBA
IC0yMjUsNiArMjI2LDExIEBAIGlmIChFTkFCTEVfV0VCR0wpCiAgICAgTElTVChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvRHJhd2lu
Z0J1ZmZlckJsYWNrQmVycnkuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvR3JhcGhpY3NDb250ZXh0M0RCbGFja0JlcnJ5LmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCisgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAorICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNw
cAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMu
Y3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQz
RC5jcHAKICAgICApCiBFTkRJRiAoKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJn
ZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCA2NjVmMDNkMTFjNTkwMThj
NzViOWZhNjE0OWU3MjlkZTQ5ZjJiMjlkLi40Y2U2Y2Y2NmUyOWU5OGNlY2U4NWVjYjA0YjVkYTAw
YzkyMzZhODk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTM5NTUsMTUgKzM5NTUsMTkgQEAgY29udGFpbnMo
REVGSU5FUywgRU5BQkxFX1dFQkdMPTEpIHsKIAogICAgIGNvbnRhaW5zKFFUX0NPTkZJRywgb3Bl
bmdsKSB8IGNvbnRhaW5zKFFUX0NPTkZJRywgb3BlbmdsZXMyKSB7CiAgICAgICAgICFjb250YWlu
cyhRVF9DT05GSUcsIG9wZW5nbGVzMikgewotICAgICAgICAgICAgU09VUkNFUyArPSBwbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCisgICAgICAgICAg
ICBTT1VSQ0VTICs9IFwKKyAgICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAgXAorICAgICAgICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAKICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dDNET3BlbkdMRVMuY3BwCisgICAgICAgICAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNw
cCBcCisgICAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNE
T3BlbkdMRVMuY3BwCiAgICAgICAgIH0KIAogICAgICAgICBIRUFERVJTICs9IHBsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaAogCiAgICAgICAgIFNPVVJDRVMgKz0g
XAotICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5H
TC5jcHAgXAorICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMz
RE9wZW5HTENvbW1vbi5jcHAgXAogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAogCiAgICAgICAgIEFOR0xFX0RJUiA9
ICQkcmVwbGFjZShQV0QsICJXZWJDb3JlIiwgIlRoaXJkUGFydHkvQU5HTEUiKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCmluZGV4IGNiMTAxMmU3NzY4NWNkOTA4OTY5MjI0YmFhYWYwMTEwNGQxOWQ2OWMuLmYxN2Ew
NDAwOTFmMjlkMzE3MzQ4NWVjNzYyNmE4MWNiNjhkN2VjY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAg
LTM4MDcsNiArMzgwNyw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dl
YlRpbGVkTGF5ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYlRp
bGVkTGF5ZXIubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRl
bnNpb25zM0RPcGVuR0wuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xD
b21tb24uY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCAzYjgzM2VmYTE3NDdmNThlN2E3ODIxM2U2N2M5YTE1ZTNhYjliYzlh
Li41NDUxZWQwYWJmNjA0MGY4MDg1NDI4MjQxNjc0NDI1MzkyNTc4M2ZlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTg5LDYg
KzExODksOCBAQAogCQk0NDlCMTlGNTBGQTcyRUNFMDAxNUNBNEEgLyogSFRNTFBhcnNlclF1aXJr
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQ5QjE5
RjMwRkE3MkVDRTAwMTVDQTRBIC8qIEhUTUxQYXJzZXJRdWlya3MuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NEEyOEFBQzEyREZCOEFDMDBBRTky
M0IgLyogTWF0aE1MRWxlbWVudEZhY3RvcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQ0QTI4QUFCMTJERkI4QUMwMEFFOTIzQiAvKiBNYXRoTUxFbGVt
ZW50RmFjdG9yeS5oICovOyB9OwogCQk0NEEyOEFBRjEyREZCOEJGMDBBRTkyM0IgLyogTWF0aE1M
TmFtZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0
QTI4QUFFMTJERkI4QkYwMEFFOTIzQiAvKiBNYXRoTUxOYW1lcy5oICovOyB9OworCQk0NERBQjVC
MTE1QTYyMzU4MDA5N0MxRTQgLyogRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0REFCNUFGMTVBNjIzNTgw
MDk3QzFFNCAvKiBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwICovOyB9OworCQk0NERBQjVC
MjE1QTYyMzU4MDA5N0MxRTQgLyogRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NERBQjVCMDE1QTYyMzU4MDA5
N0MxRTQgLyogRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmggKi87IH07CiAJCTQ1MDk5QzQxMTM3
MEE3ODAwMDU4RDUxMyAvKiBJY29uVVJMLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQ1MDk5QzQwMTM3MEE3ODAwMDU4RDUxMyAvKiBJY29uVVJMLmNw
cCAqLzsgfTsKIAkJNDUwQ0VCRjAxNTA3M0JCRTAwMkJCMTQ5IC8qIExhYmVsYWJsZUVsZW1lbnQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDUwQ0VC
RUUxNTA3M0JCRTAwMkJCMTQ5IC8qIExhYmVsYWJsZUVsZW1lbnQuY3BwICovOyB9OwogCQk0NTBD
RUJGMTE1MDczQkJFMDAyQkIxNDkgLyogTGFiZWxhYmxlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDUwQ0VCRUYxNTA3M0JCRTAwMkJCMTQ5
IC8qIExhYmVsYWJsZUVsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtODI0NCw2ICs4MjQ2LDggQEAKIAkJNDRBMjhBQUUxMkRGQjhCRjAw
QUU5MjNCIC8qIE1hdGhNTE5hbWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE1hdGhNTE5hbWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0RDhEQTk4MTM5
NTQ1QkUwMDMzN0I3NSAvKiBTVkdNUGF0aEVsZW1lbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IFNWR01QYXRoRWxlbWVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0
RDhEQTlBMTM5NTQ1Q0QwMDMzN0I3NSAvKiBTVkdBbmltYXRlTW90aW9uRWxlbWVudC5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuaWRsOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk0NERBQjVBRjE1QTYyMzU4MDA5N0MxRTQgLyogRXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTQ0REFCNUIwMTVBNjIzNTgwMDk3QzFFNCAvKiBFeHRlbnNpb25zM0RPcGVuR0xDb21t
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5zaW9uczNET3BlbkdM
Q29tbW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ1MDk5QzQwMTM3MEE3ODAw
MDU4RDUxMyAvKiBJY29uVVJMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEljb25VUkwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NTBDRUJFRTE1
MDczQkJFMDAyQkIxNDkgLyogTGFiZWxhYmxlRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBMYWJlbGFibGVFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNDUwQ0VCRUYxNTA3M0JCRTAwMkJCMTQ5IC8qIExhYmVsYWJsZUVsZW1l
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGFiZWxhYmxlRWxlbWVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjE2NDEsNiArMjE2NDUsOCBAQAogCQlG
QkMyMjBERDEyMzdGQkVCMDBCQ0Y3ODggLyogb3BlbmdsICovID0gewogCQkJaXNhID0gUEJYR3Jv
dXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk0NERBQjVBRjE1QTYyMzU4MDA5N0MxRTQgLyogRXh0
ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcCAqLywKKwkJCQk0NERBQjVCMDE1QTYyMzU4MDA5N0Mx
RTQgLyogRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmggKi8sCiAJCQkJNkU2N0QyQTQxMjgwRThB
NDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5jcHAgKi8sCiAJCQkJNkU2N0QyQTUxMjgw
RThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5oICovLAogCQkJCUZCQzIyMERFMTIz
N0ZCRUIwMEJDRjc4OCAvKiBHcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAgKi8sCkBAIC0yNTE3
Myw2ICsyNTE3OSw3IEBACiAJCQkJNTA5ODdDMjcxNTdENjc2RDAwQkRBODM1IC8qIEN1c3RvbUZp
bHRlckdsb2JhbENvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTRGMzJCQjFCMTRGQTg1RTgw
MEY2QzFBMyAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE4
ODJEQTIzMTU5Mzg0OEQwMDAxMTVFRCAvKiBDU1NUb1N0eWxlTWFwLmggaW4gSGVhZGVycyAqLywK
KwkJCQk0NERBQjVCMjE1QTYyMzU4MDA5N0MxRTQgLyogRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKIAkJfTsKQEAgLTI4MjI4LDYgKzI4MjM1LDcgQEAKIAkJCQlDRTdCMkRCNjE1
ODZBQkFEMDA5OEIzRkEgLyogVGV4dEFsdGVybmF0aXZlV2l0aFJhbmdlLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNTA5ODdDMjYxNTdENjc2RDAwQkRBODM1IC8qIEN1c3RvbUZpbHRlckdsb2JhbENv
bnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg4MkRBMjAxNTkzODQ2QTAwMDExNUVEIC8q
IENTU1RvU3R5bGVNYXAuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDREQUI1QjExNUE2MjM1ODAw
OTdDMUU0IC8qIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dDNELmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQz
RC5oCmluZGV4IGRiZDlkZmVkZTAxM2E0Y2FmMzMyNDYzYWQzMmZjNGUxNTI4MjY0NjcuLjE2ZDEy
ZjE2M2JkNWQxZTA5ZjMxMTUyZWRkYTFiMmI2NWUyMmVhNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaApAQCAtMjAsNyAr
MjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaWZuZGVmIEdyYXBoaWNzQ29udGV4dDNE
X2gKQEAgLTkxLDE0ICs5MSwxMiBAQCBjb25zdCBQbGF0Zm9ybTNET2JqZWN0IE51bGxQbGF0Zm9y
bTNET2JqZWN0ID0gMDsKICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dDb250ZXh0Lmg+CiAjZW5k
aWYKIAotI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0j
ZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRHJhd2luZ0J1ZmZlcjsKIGNsYXNz
IEV4dGVuc2lvbnMzRDsKLSNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExB
VEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkKKyNpZiBVU0UoT1BFTkdMX0VTXzIpCitjbGFzcyBF
eHRlbnNpb25zM0RPcGVuR0xFUzsKKyNlbHNlCiBjbGFzcyBFeHRlbnNpb25zM0RPcGVuR0w7CiAj
ZW5kaWYKICNpZiBQTEFURk9STShRVCkKQEAgLTkyNCw2ICs5MjIsNyBAQCBwdWJsaWM6CiAgICAg
Ly8gaW4gcGFydGljdWxhciBzdGVuY2lsIGFuZCBhbnRpYWxpYXMsIGFuZCBkZXRlcm1pbmUgd2hp
Y2ggY291bGQgb3IKICAgICAvLyBjb3VsZCBub3QgYmUgaG9ub3JlZCBiYXNlZCBvbiB0aGUgY2Fw
YWJpbGl0aWVzIG9mIHRoZSBPcGVuR0wKICAgICAvLyBpbXBsZW1lbnRhdGlvbi4KKyAgICB2b2lk
IHZhbGlkYXRlRGVwdGhTdGVuY2lsKGNvbnN0IGNoYXIqIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVu
c2lvbik7CiAgICAgdm9pZCB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKIAogICAgIC8vIFJlYWQgcmVu
ZGVyaW5nIHJlc3VsdHMgaW50byBhIHBpeGVsIGFycmF5IHdpdGggdGhlIHNhbWUgZm9ybWF0IGFz
IHRoZQpAQCAtOTU1LDE2ICs5NTQsMzAgQEAgcHVibGljOgogICAgIEhhc2hNYXA8UGxhdGZvcm0z
RE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+IG1fc2hhZGVyU291cmNlTWFwOwogCiAgICAgQU5H
TEVXZWJLaXRCcmlkZ2UgbV9jb21waWxlcjsKKyNlbmRpZgogCisjaWYgUExBVEZPUk0oUVQpICYm
IGRlZmluZWQoUVRfT1BFTkdMX0VTXzIpCisgICAgZnJpZW5kIGNsYXNzIEV4dGVuc2lvbnMzRFF0
OworICAgIE93blB0cjxFeHRlbnNpb25zM0RRdD4gbV9leHRlbnNpb25zOworI2VsaWYgUExBVEZP
Uk0oQkxBQ0tCRVJSWSkKKyAgICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9uczNET3BlbkdMRVM7Cisg
ICAgT3duUHRyPEV4dGVuc2lvbnMzRE9wZW5HTEVTPiBtX2V4dGVuc2lvbnM7CisjZWxpZiAhUExB
VEZPUk0oQ0hST01JVU0pCiAgICAgZnJpZW5kIGNsYXNzIEV4dGVuc2lvbnMzRE9wZW5HTDsKICAg
ICBPd25QdHI8RXh0ZW5zaW9uczNET3BlbkdMPiBtX2V4dGVuc2lvbnM7CisjZW5kaWYKKyAgICBm
cmllbmQgY2xhc3MgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOwogCiAgICAgQXR0cmlidXRlcyBt
X2F0dHJzOwogICAgIFZlY3RvcjxWZWN0b3I8ZmxvYXQ+ID4gbV92ZXJ0ZXhBcnJheTsKIAotICAg
IEdDM0R1aW50IG1fdGV4dHVyZSwgbV9jb21wb3NpdG9yVGV4dHVyZTsKKyAgICBHQzNEdWludCBt
X3RleHR1cmU7CisjaWYgIVBMQVRGT1JNKEJMQUNLQkVSUlkpCisgICAgR0MzRHVpbnQgbV9jb21w
b3NpdG9yVGV4dHVyZTsKKyNlbmRpZgogICAgIEdDM0R1aW50IG1fZmJvOwotI2lmIFVTRShPUEVO
R0xfRVNfMikKKworI2lmICFQTEFURk9STShCTEFDS0JFUlJZKQogICAgIEdDM0R1aW50IG1fZGVw
dGhCdWZmZXI7CiAgICAgR0MzRHVpbnQgbV9zdGVuY2lsQnVmZmVyOwogI2VuZGlmCkBAIC05ODUs
MTAgKzk5OCwxMSBAQCBwdWJsaWM6CiAKICAgICAvLyBFcnJvcnMgcmFpc2VkIGJ5IHN5bnRoZXNp
emVHTEVycm9yKCkuCiAgICAgTGlzdEhhc2hTZXQ8R0MzRGVudW0+IG1fc3ludGhldGljRXJyb3Jz
OwotI2VuZGlmCiAKICAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOwog
ICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQzRFByaXZhdGU+IG1fcHJpdmF0ZTsKKworICAgIGJv
b2wgc3lzdGVtQWxsb3dzTXVsdGlzYW1wbGluZ09uQVRJQ2FyZHMoKTsgCiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9PcGVuR0xFU1NoaW1zLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9P
cGVuR0xFU1NoaW1zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWRiOTE5MzNmODViYzA2MWNjOWM4NTI1NGRjMzRm
MDljMjkzYTgwOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL09wZW5HTEVTU2hpbXMuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg
IDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgT3BlbkdMRVNTaGltc19oCisjZGVmaW5l
IE9wZW5HTEVTU2hpbXNfaAorCisjaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKKyNkZWZpbmUgZ2xC
aW5kRnJhbWVidWZmZXJFWFQgZ2xCaW5kRnJhbWVidWZmZXIKKyNkZWZpbmUgZ2xGcmFtZWJ1ZmZl
clRleHR1cmUyREVYVCBnbEZyYW1lYnVmZmVyVGV4dHVyZTJECisjZGVmaW5lIGdsQmluZFJlbmRl
cmJ1ZmZlckVYVCBnbEJpbmRSZW5kZXJidWZmZXIKKyNkZWZpbmUgZ2xSZW5kZXJidWZmZXJTdG9y
YWdlRVhUIGdsUmVuZGVyYnVmZmVyU3RvcmFnZQorI2RlZmluZSBnbEZyYW1lYnVmZmVyUmVuZGVy
YnVmZmVyRVhUIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIKKyNkZWZpbmUgR0xfUkVOREVSQlVG
RkVSX0VYVCBHTF9SRU5ERVJCVUZGRVIKKyNkZWZpbmUgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UX0VY
VCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQKKyNkZWZpbmUgZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVz
RVhUIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1cworI2RlZmluZSBnbERlbGV0ZUZyYW1lYnVmZmVy
c0VYVCBnbERlbGV0ZUZyYW1lYnVmZmVycworI2RlZmluZSBnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNF
WFQgZ2xEZWxldGVSZW5kZXJidWZmZXJzCisjZGVmaW5lIGdsR2VuUmVuZGVyYnVmZmVyc0VYVCBn
bEdlblJlbmRlcmJ1ZmZlcnMKKyNkZWZpbmUgZ2xHZW5GcmFtZWJ1ZmZlcnNFWFQgZ2xHZW5GcmFt
ZWJ1ZmZlcnMKKyNkZWZpbmUgZ2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdkVY
VCBnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2CisjZGVmaW5lIGdsR2V0UmVu
ZGVyYnVmZmVyUGFyYW1ldGVyaXZFWFQgZ2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdgorI2Rl
ZmluZSBnbElzUmVuZGVyYnVmZmVyRVhUIGdsSXNSZW5kZXJidWZmZXIKKyNkZWZpbmUgZ2xJc0Zy
YW1lYnVmZmVyRVhUIGdsSXNGcmFtZWJ1ZmZlcgorI2RlZmluZSBnbEdlbmVyYXRlTWlwbWFwRVhU
IGdsR2VuZXJhdGVNaXBtYXAKKyNkZWZpbmUgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhUIEdMX0NP
TE9SX0FUVEFDSE1FTlQwCisjZGVmaW5lIEdMX0RFUFRIX0FUVEFDSE1FTlRfRVhUIEdMX0RFUFRI
X0FUVEFDSE1FTlQKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQ09NUExFVEVfRVhUIEdMX0ZSQU1F
QlVGRkVSX0NPTVBMRVRFCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0VYVCBHTF9GUkFNRUJVRkZF
UgorI2RlZmluZSBHTF9ERVBUSDI0X1NURU5DSUw4X0VYVCBHTF9ERVBUSDI0X1NURU5DSUw4X09F
UworI2RlZmluZSBHTF9SR0JBOCBHTF9SR0JBOF9PRVMKKyNkZWZpbmUgR0xfUkdCOCBHTF9SR0I4
X09FUworI2RlZmluZSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCAweDhDQTgKKyNkZWZpbmUgR0xf
RFJBV19GUkFNRUJVRkZFUl9FWFQgMHg4Q0E5CisjZGVmaW5lIEZSQU1FQlVGRkVSX0lOQ09NUExF
VEVfTVVMVElTQU1QTEVfRVhUIDB4OTEzNAorI2RlZmluZSBHTF9NQVhfU0FNUExFU19FWFQgMHg4
RDU3CisjZW5kaWYgLy8gUExBVEZPUk0oQkxBQ0tCRVJSWSkKKworI2VuZGlmIC8vIE9wZW5HTEVT
U2hpbXNfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCmluZGV4IGFjMjkyZDM3
NTE1NzkyZWNhMzIyOWU2ZjY3Mzg4ZWIyOGU1MWUwOTYuLmZkMWRhZDA5ZjAxMWI3NmM5ZTU5ZTQ4
NTM5YWM5YzAzZGFhZGIzNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCkBA
IC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMLmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgpAQCAt
MTQ2LDYgKzE0NywxMSBAQCBHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkK
ICAgICA6OmdsRGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZtX2Zibyk7CiB9CiAKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKEltYWdl
KiBpbWFnZSwgdW5zaWduZWQgaW50IGZvcm1hdCwgdW5zaWduZWQgaW50IHR5cGUsIGJvb2wgcHJl
bXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSwgVmVjdG9yPHVp
bnQ4X3Q+JiBvdXRwdXRWZWN0b3IpCiB7CiAgICAgaWYgKCFpbWFnZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NDb250ZXh0M0RD
bHV0dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3Jh
cGhpY3NDb250ZXh0M0RDbHV0dGVyLmNwcAppbmRleCBjYTBmZmRjMmJjYjlkODkzODZiMTVkNDhj
MzIzOGViM2VmOWIwOTU0Li43ZTIyZjcyMmQ0YmQzNTNkMzMxYmRjNjA3NzVlN2Q3MWFhMDVlNTFl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dy
YXBoaWNzQ29udGV4dDNEQ2x1dHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0NvbnRleHQzRENsdXR0ZXIuY3BwCkBAIC01Niw2ICs1
NiwxMSBAQCBHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKICAgICBub3RJ
bXBsZW1lbnRlZCgpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVy
Q29tcGlsZXIoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKIGJvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFnZSogaW1hZ2UsIHVuc2lnbmVkIGludCBmb3JtYXQs
IHVuc2lnbmVkIGludCB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2Ft
bWFBbmRDb2xvclByb2ZpbGUsIFZlY3Rvcjx1aW50OF90PiYgb3V0cHV0VmVjdG9yKQogewogICAg
IG5vdEltcGxlbWVudGVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0KaW5kZXggY2QwMTUyMmVm
MjJmNjBkNmZjOTExYzMyOWM2ZmU1OTEyMzEwNjllZi4uY2VkNzVhYmFkMjE3YmQ2ZWQ1NTFmMzg5
MjU3NGQ2ZjRjYTUyNmMyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbQpAQCAtMjgyLDYgKzI4
MiwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzZXRFcnJvck1lc3NhZ2VDYWxsYmFjayhQ
YXNzT3duUHRyPEVycm9yTWVzc2FnZUNhbGxiYWNrPgogewogfQogCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5H
TC5jcHAKaW5kZXggNGFhMzQxYzMyNmM3MzU3YjExMGM5ODNkMDM5Y2NkN2JjMzMxNjYxMi4uYmJl
NzdiYjc5ODU0YzkyMzdlOGNiNjcwNmM5NzQ2NTk5NTYyYjkwMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMz
RE9wZW5HTC5jcHAKQEAgLTQyLDcgKzQyLDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRXh0
ZW5zaW9uczNET3BlbkdMOjpFeHRlbnNpb25zM0RPcGVuR0woR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQpCi0gICAgOiBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucyhmYWxzZSkKKyAg
ICA6IEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbihjb250ZXh0KQorICAgICwgbV9pbml0aWFsaXpl
ZEF2YWlsYWJsZUV4dGVuc2lvbnMoZmFsc2UpCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKIHsK
IH0KQEAgLTUxLDkxICs1Miw2IEBAIEV4dGVuc2lvbnMzRE9wZW5HTDo6fkV4dGVuc2lvbnMzRE9w
ZW5HTCgpCiB7CiB9CiAKLWJvb2wgRXh0ZW5zaW9uczNET3BlbkdMOjpzdXBwb3J0cyhjb25zdCBT
dHJpbmcmIG5hbWUpCi17Ci0gICAgLy8gTm90ZSBvbiBzdXBwb3J0IGZvciBCR1JBOgotICAgIC8v
Ci0gICAgLy8gRm9yIE9wZW5HTCBFUzIuMCwgcmVxdWlyZXMgY2hlY2tpbmcgZm9yCi0gICAgLy8g
R0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4IGFuZCBHTF9FWFRfcmVhZF9mb3JtYXRfYmdy
YS4KLSAgICAvLyBGb3IgZGVza3RvcCBHTCwgQkdSQSBoYXMgYmVlbiBzdXBwb3J0ZWQgc2luY2Ug
T3BlbkdMIDEuMi4KLSAgICAvLwotICAgIC8vIEhvd2V2ZXIsIG5vdGUgdGhhdCB0aGUgR0wgRVMy
IGV4dGVuc2lvbiByZXF1aXJlcyB0aGUKLSAgICAvLyBpbnRlcm5hbEZvcm1hdCB0byBnbFRleElt
YWdlMkQoKSBiZSBHTF9CR1JBLCB3aGlsZSBkZXNrdG9wIEdMCi0gICAgLy8gd2lsbCBub3QgYWNj
ZXB0IEdMX0JHUkEgKG11c3QgYmUgR0xfUkdCQSksIHNvIHRoaXMgbXVzdCBiZQotICAgIC8vIGNo
ZWNrZWQgb24gZWFjaCBwbGF0Zm9ybS4gRGVza3RvcCBHTCBvZmZlcnMgbmVpdGhlcgotICAgIC8v
IEdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCBvciBHTF9FWFRfcmVhZF9mb3JtYXRfYmdy
YSwgc28KLSAgICAvLyB0cmVhdCB0aGVtIGFzIHVuc3VwcG9ydGVkIGhlcmUuCi0gICAgaWYgKCFt
X2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucykgewotICAgICAgICBTdHJpbmcgZXh0ZW5z
aW9uc1N0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPig6OmdsR2V0U3RyaW5nKEdM
X0VYVEVOU0lPTlMpKSk7Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+IGF2YWlsYWJsZUV4dGVuc2lv
bnM7Ci0gICAgICAgIGV4dGVuc2lvbnNTdHJpbmcuc3BsaXQoIiAiLCBhdmFpbGFibGVFeHRlbnNp
b25zKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhdmFpbGFibGVFeHRlbnNpb25z
LnNpemUoKTsgKytpKQotICAgICAgICAgICAgbV9hdmFpbGFibGVFeHRlbnNpb25zLmFkZChhdmFp
bGFibGVFeHRlbnNpb25zW2ldKTsKLSAgICAgICAgbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVu
c2lvbnMgPSB0cnVlOwotICAgIH0KLSAgICAKLSAgICAvLyBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9i
bGl0IGFuZCBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSBhcmUgImZha2UiLiBUaGV5
IGFyZSBpbXBsZW1lbnRlZCB1c2luZyBvdGhlcgotICAgIC8vIGV4dGVuc2lvbnMuIEluIHBhcnRp
Y3VsYXIgR0xfRVhUX2ZyYW1lYnVmZmVyX2JsaXQgYW5kIEdMX0VYVF9mcmFtZWJ1ZmZlcl9tdWx0
aXNhbXBsZQotICAgIGlmIChuYW1lID09ICJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0IikKLSAg
ICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfRVhUX2ZyYW1l
YnVmZmVyX2JsaXQiKTsKLSAgICBpZiAobmFtZSA9PSAiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVs
dGlzYW1wbGUiKQotICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5z
KCJHTF9FWFRfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKTsKLQotICAgIC8vIERlc2t0b3AgR0wg
YWx3YXlzIHN1cHBvcnRzIEdMX09FU19yZ2I4X3JnYmE4LgotICAgIGlmIChuYW1lID09ICJHTF9P
RVNfcmdiOF9yZ2JhOCIpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gSWYgR0xfQVJC
X3RleHR1cmVfZmxvYXQgaXMgYXZhaWxhYmxlIHRoZW4gd2UgcmVwb3J0IEdMX09FU190ZXh0dXJl
X2Zsb2F0IGFuZAotICAgIC8vIEdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQgYXMgYXZhaWxhYmxl
LgotICAgIGlmIChuYW1lID09ICJHTF9PRVNfdGV4dHVyZV9mbG9hdCIgfHwgbmFtZSA9PSAiR0xf
T0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpCi0gICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVu
c2lvbnMuY29udGFpbnMoIkdMX0FSQl90ZXh0dXJlX2Zsb2F0Iik7Ci0gICAgCi0gICAgLy8gR0xf
T0VTX3ZlcnRleF9hcnJheV9vYmplY3QKLSAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3ZlcnRleF9h
cnJheV9vYmplY3QiKQotICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRh
aW5zKCJHTF9BUFBMRV92ZXJ0ZXhfYXJyYXlfb2JqZWN0Iik7Ci0KLSAgICAvLyBEZXNrdG9wIEdM
IGFsd2F5cyBzdXBwb3J0cyB0aGUgc3RhbmRhcmQgZGVyaXZhdGl2ZSBmdW5jdGlvbnMKLSAgICBp
ZiAobmFtZSA9PSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICBpZiAobmFtZSA9PSAiR0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJv
cGljIikKLSAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xf
RVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7Ci0KLSAgICByZXR1cm4gbV9hdmFpbGFi
bGVFeHRlbnNpb25zLmNvbnRhaW5zKG5hbWUpOwotfQotCi12b2lkIEV4dGVuc2lvbnMzRE9wZW5H
TDo6ZW5zdXJlRW5hYmxlZChjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0jaWYgUExBVEZPUk0oTUFD
KSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RLKQotICAgIGlmIChuYW1lID09ICJHTF9P
RVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSB7Ci0gICAgICAgIC8vIEVuYWJsZSBzdXBwb3J0IGlu
IEFOR0xFIChpZiBub3QgZW5hYmxlZCBhbHJlYWR5KQotICAgICAgICBBTkdMRVdlYktpdEJyaWRn
ZSYgY29tcGlsZXIgPSBtX2NvbnRleHQtPm1fY29tcGlsZXI7Ci0gICAgICAgIFNoQnVpbHRJblJl
c291cmNlcyBBTkdMRVJlc291cmNlcyA9IGNvbXBpbGVyLmdldFJlc291cmNlcygpOwotICAgICAg
ICBpZiAoIUFOR0xFUmVzb3VyY2VzLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcykgewotICAgICAg
ICAgICAgQU5HTEVSZXNvdXJjZXMuT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzID0gMTsKLSAgICAg
ICAgICAgIGNvbXBpbGVyLnNldFJlc291cmNlcyhBTkdMRVJlc291cmNlcyk7Ci0gICAgICAgIH0K
LSAgICB9Ci0jZWxzZQotICAgIEFTU0VSVF9VTlVTRUQobmFtZSwgc3VwcG9ydHMobmFtZSkpOwot
I2VuZGlmCi19Ci0KLWJvb2wgRXh0ZW5zaW9uczNET3BlbkdMOjppc0VuYWJsZWQoY29uc3QgU3Ry
aW5nJiBuYW1lKQotewotI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRG
T1JNKEdUSykKLSAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikg
ewotICAgICAgICBBTkdMRVdlYktpdEJyaWRnZSYgY29tcGlsZXIgPSBtX2NvbnRleHQtPm1fY29t
cGlsZXI7Ci0gICAgICAgIHJldHVybiBjb21waWxlci5nZXRSZXNvdXJjZXMoKS5PRVNfc3RhbmRh
cmRfZGVyaXZhdGl2ZXM7Ci0gICAgfQotI2VuZGlmCi0gICAgcmV0dXJuIHN1cHBvcnRzKG5hbWUp
OwotfQotCi1pbnQgRXh0ZW5zaW9uczNET3BlbkdMOjpnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJC
KCkKLXsKLSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SOwotfQogCiB2b2lk
IEV4dGVuc2lvbnMzRE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKGxvbmcgc3JjWDAsIGxvbmcgc3Jj
WTAsIGxvbmcgc3JjWDEsIGxvbmcgc3JjWTEsIGxvbmcgZHN0WDAsIGxvbmcgZHN0WTAsIGxvbmcg
ZHN0WDEsIGxvbmcgZHN0WTEsIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQgbG9uZyBmaWx0
ZXIpCiB7CkBAIC0xOTQsMTkgKzExMCw0OSBAQCB2b2lkIEV4dGVuc2lvbnMzRE9wZW5HTDo6Ymlu
ZFZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCiAjZW5kaWYKIH0KIAotU3Ry
aW5nIEV4dGVuc2lvbnMzRE9wZW5HTDo6Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKFBs
YXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIFVOVVNFRF9QQVJBTShzaGFkZXIpOwotICAg
IHJldHVybiAiIjsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24gYW5kIGFk
ZCBHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UgaW4gc3VwcG9ydHMoKS4KLX0KLQog
dm9pZCBFeHRlbnNpb25zM0RPcGVuR0w6OmNvcHlUZXh0dXJlQ0hST01JVU0oR0MzRGVudW0sIFBs
YXRmb3JtM0RPYmplY3QsIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RpbnQsIEdDM0RlbnVtKQogewog
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbiBhbmQgYWRkIEdMX0NIUk9NSVVN
X2NvcHlfdGV4dHVyZSBpbiBzdXBwb3J0cygpLgogICAgIHJldHVybjsKIH0KIAorYm9vbCBFeHRl
bnNpb25zM0RPcGVuR0w6OnN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sK
KyAgICAvLyBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0IGFuZCBHTF9BTkdMRV9mcmFtZWJ1ZmZl
cl9tdWx0aXNhbXBsZSBhcmUgImZha2UiLiBUaGV5IGFyZSBpbXBsZW1lbnRlZCB1c2luZyBvdGhl
cgorICAgIC8vIGV4dGVuc2lvbnMuIEluIHBhcnRpY3VsYXIgR0xfRVhUX2ZyYW1lYnVmZmVyX2Js
aXQgYW5kIEdMX0VYVF9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZQorICAgIGlmIChuYW1lID09ICJH
TF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0IikKKyAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0
ZW5zaW9ucy5jb250YWlucygiR0xfRVhUX2ZyYW1lYnVmZmVyX2JsaXQiKTsKKyAgICBpZiAobmFt
ZSA9PSAiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKQorICAgICAgICByZXR1cm4g
bV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9FWFRfZnJhbWVidWZmZXJfbXVsdGlz
YW1wbGUiKTsKKworICAgIC8vIERlc2t0b3AgR0wgYWx3YXlzIHN1cHBvcnRzIEdMX09FU19yZ2I4
X3JnYmE4LgorICAgIGlmIChuYW1lID09ICJHTF9PRVNfcmdiOF9yZ2JhOCIpCisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgLy8gSWYgR0xfQVJCX3RleHR1cmVfZmxvYXQgaXMgYXZhaWxhYmxl
IHRoZW4gd2UgcmVwb3J0IEdMX09FU190ZXh0dXJlX2Zsb2F0IGFuZAorICAgIC8vIEdMX09FU190
ZXh0dXJlX2hhbGZfZmxvYXQgYXMgYXZhaWxhYmxlLgorICAgIGlmIChuYW1lID09ICJHTF9PRVNf
dGV4dHVyZV9mbG9hdCIgfHwgbmFtZSA9PSAiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpCisg
ICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0FSQl90ZXh0
dXJlX2Zsb2F0Iik7CisKKyAgICAvLyBHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdAorICAgIGlm
IChuYW1lID09ICJHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdCIpCisgICAgICAgIHJldHVybiBt
X2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0FQUExFX3ZlcnRleF9hcnJheV9vYmpl
Y3QiKTsKKworICAgIC8vIERlc2t0b3AgR0wgYWx3YXlzIHN1cHBvcnRzIHRoZSBzdGFuZGFyZCBk
ZXJpdmF0aXZlIGZ1bmN0aW9ucworICAgIGlmIChuYW1lID09ICJHTF9PRVNfc3RhbmRhcmRfZGVy
aXZhdGl2ZXMiKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChuYW1lID09ICJHTF9F
WFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKQorICAgICAgICByZXR1cm4gbV9hdmFpbGFi
bGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMi
KTsKKworICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMobmFtZSk7Cit9
CisKK1N0cmluZyBFeHRlbnNpb25zM0RPcGVuR0w6OmdldEV4dGVuc2lvbnMoKQoreworICAgIHJl
dHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhH
TF9FWFRFTlNJT05TKSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAv
LyBFTkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmgKaW5kZXggMmIyZDMwYTA5MGU1
NGZjYTFkMDY0NjJhZTcxZGQ3ZWM4NzJiNTQ0Yy4uYTI3ODliZGNjYzA1ZGVhNGQ2ZGY5YjNiNGM0
Nzc3ZjdiMTllYTEyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaApAQCAtMjYsNyArMjYsNyBA
QAogI2lmbmRlZiBFeHRlbnNpb25zM0RPcGVuR0xfaAogI2RlZmluZSBFeHRlbnNpb25zM0RPcGVu
R0xfaAogCi0jaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNE
T3BlbkdMQ29tbW9uLmgiCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1
ZGUgPHd0Zi9IYXNoU2V0Lmg+CkBAIC0zNCwxNSArMzQsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBFeHRlbnNpb25zM0RPcGVuR0wgOiBwdWJsaWMgRXh0ZW5zaW9uczNEIHsK
K2NsYXNzIEV4dGVuc2lvbnMzRE9wZW5HTCA6IHB1YmxpYyBFeHRlbnNpb25zM0RPcGVuR0xDb21t
b24gewogcHVibGljOgogICAgIHZpcnR1YWwgfkV4dGVuc2lvbnMzRE9wZW5HTCgpOwogCiAgICAg
Ly8gRXh0ZW5zaW9uczNEIG1ldGhvZHMuCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzKGNvbnN0
IFN0cmluZyYpOwotICAgIHZpcnR1YWwgdm9pZCBlbnN1cmVFbmFibGVkKGNvbnN0IFN0cmluZyYp
OwotICAgIHZpcnR1YWwgYm9vbCBpc0VuYWJsZWQoY29uc3QgU3RyaW5nJik7Ci0gICAgdmlydHVh
bCBpbnQgZ2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpOwogICAgIHZpcnR1YWwgdm9pZCBibGl0
RnJhbWVidWZmZXIobG9uZyBzcmNYMCwgbG9uZyBzcmNZMCwgbG9uZyBzcmNYMSwgbG9uZyBzcmNZ
MSwgbG9uZyBkc3RYMCwgbG9uZyBkc3RZMCwgbG9uZyBkc3RYMSwgbG9uZyBkc3RZMSwgdW5zaWdu
ZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nIGZpbHRlcik7CiAgICAgdmlydHVhbCB2b2lkIHJl
bmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWdu
ZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBs
b25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7CiAgICAgCkBAIC01MCwxNCArNDYsMTYg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9y
bTNET2JqZWN0KTsKICAgICB2aXJ0dWFsIEdDM0Rib29sZWFuIGlzVmVydGV4QXJyYXlPRVMoUGxh
dGZvcm0zRE9iamVjdCk7CiAgICAgdmlydHVhbCB2b2lkIGJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0
Zm9ybTNET2JqZWN0KTsKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRUcmFuc2xhdGVkU2hhZGVyU291
cmNlQU5HTEUoUGxhdGZvcm0zRE9iamVjdCk7CiAgICAgdmlydHVhbCB2b2lkIGNvcHlUZXh0dXJl
Q0hST01JVU0oR0MzRGVudW0sIFBsYXRmb3JtM0RPYmplY3QsIFBsYXRmb3JtM0RPYmplY3QsIEdD
M0RpbnQsIEdDM0RlbnVtKTsKIAotcHJpdmF0ZToKK3Byb3RlY3RlZDoKICAgICAvLyBUaGlzIGNs
YXNzIG9ubHkgbmVlZHMgdG8gYmUgaW5zdGFudGlhdGVkIGJ5IEdyYXBoaWNzQ29udGV4dDNEIGlt
cGxlbWVudGF0aW9ucy4KICAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiAgICAg
RXh0ZW5zaW9uczNET3BlbkdMKEdyYXBoaWNzQ29udGV4dDNEKik7CiAKKyAgICB2aXJ0dWFsIGJv
b2wgc3VwcG9ydHNFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIFN0
cmluZyBnZXRFeHRlbnNpb25zKCk7CisKICAgICBib29sIG1faW5pdGlhbGl6ZWRBdmFpbGFibGVF
eHRlbnNpb25zOwogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2F2YWlsYWJsZUV4dGVuc2lvbnM7CiAg
ICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhl
NDY4ZDU0ZDdkYzNhYTI0NDdmNzVhNDgyOWU0NGFiYzAzOWZmNjEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3Bl
bkdMQ29tbW9uLmNwcApAQCAtMCwwICsxLDE0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCR0wpCisjaW5jbHVkZSAiRXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uLmgiCisKKyNpbmNsdWRlICJBTkdMRVdlYktpdEJyaWRnZS5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisKKyNpZiBQTEFURk9STShCTEFDS0JFUlJZ
KQorI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUxvZy5oPgorI2VuZGlmCisKKyNpZiBVU0Uo
T1BFTkdMX0VTXzIpCisjaW5jbHVkZSAiT3BlbkdMRVNTaGltcy5oIgorI2luY2x1ZGUgPEdMRVMy
L2dsMi5oPgorI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgorI2VsaWYgUExBVEZPUk0oTUFDKQor
I2luY2x1ZGUgPE9wZW5HTC9nbC5oPgorI2VsaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShF
RkwpIHx8IFBMQVRGT1JNKFFUKQorI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCisjZW5kaWYKKwor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitFeHRlbnNp
b25zM0RPcGVuR0xDb21tb246OkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbihHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCkKKyAgICA6IG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zKGZh
bHNlKQorICAgICwgbV9jb250ZXh0KGNvbnRleHQpCit7Cit9CisKK0V4dGVuc2lvbnMzRE9wZW5H
TENvbW1vbjo6fkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbigpCit7Cit9CisKK2Jvb2wgRXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uOjpzdXBwb3J0cyhjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAg
aWYgKCFtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucykKKyAgICAgICAgaW5pdGlhbGl6
ZUF2YWlsYWJsZUV4dGVuc2lvbnMoKTsKKworICAgIHJldHVybiBzdXBwb3J0c0V4dGVuc2lvbihu
YW1lKTsKK30KKwordm9pZCBFeHRlbnNpb25zM0RPcGVuR0xDb21tb246OmVuc3VyZUVuYWJsZWQo
Y29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmIChuYW1lID09ICJHTF9PRVNfc3RhbmRhcmRf
ZGVyaXZhdGl2ZXMiKSB7CisgICAgICAgIC8vIEVuYWJsZSBzdXBwb3J0IGluIEFOR0xFIChpZiBu
b3QgZW5hYmxlZCBhbHJlYWR5KQorICAgICAgICBBTkdMRVdlYktpdEJyaWRnZSYgY29tcGlsZXIg
PSBtX2NvbnRleHQtPm1fY29tcGlsZXI7CisgICAgICAgIFNoQnVpbHRJblJlc291cmNlcyBBTkdM
RVJlc291cmNlcyA9IGNvbXBpbGVyLmdldFJlc291cmNlcygpOworICAgICAgICBpZiAoIUFOR0xF
UmVzb3VyY2VzLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcykgeworICAgICAgICAgICAgQU5HTEVS
ZXNvdXJjZXMuT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzID0gMTsKKyAgICAgICAgICAgIGNvbXBp
bGVyLnNldFJlc291cmNlcyhBTkdMRVJlc291cmNlcyk7CisgICAgICAgIH0KKyAgICB9Cit9CisK
K2Jvb2wgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjppc0VuYWJsZWQoY29uc3QgU3RyaW5nJiBu
YW1lKQoreworICAgIGlmIChuYW1lID09ICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSB7
CisgICAgICAgIEFOR0xFV2ViS2l0QnJpZGdlJiBjb21waWxlciA9IG1fY29udGV4dC0+bV9jb21w
aWxlcjsKKyAgICAgICAgcmV0dXJuIGNvbXBpbGVyLmdldFJlc291cmNlcygpLk9FU19zdGFuZGFy
ZF9kZXJpdmF0aXZlczsKKyAgICB9CisgICAgcmV0dXJuIHN1cHBvcnRzKG5hbWUpOworfQorCitp
bnQgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjpnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkK
K3sKKyAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SOworfQorCitTdHJpbmcg
RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjpnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUo
UGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHNoYWRlcik7CisgICAgaW50
IEdMc2hhZGVyVHlwZTsKKyAgICBBTkdMRVNoYWRlclR5cGUgc2hhZGVyVHlwZTsKKworICAgIEFO
R0xFV2ViS2l0QnJpZGdlJiBjb21waWxlciA9IG1fY29udGV4dC0+bV9jb21waWxlcjsKKworICAg
IG1fY29udGV4dC0+Z2V0U2hhZGVyaXYoc2hhZGVyLCBHcmFwaGljc0NvbnRleHQzRDo6U0hBREVS
X1RZUEUsICZHTHNoYWRlclR5cGUpOworCisgICAgaWYgKEdMc2hhZGVyVHlwZSA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUikKKyAgICAgICAgc2hhZGVyVHlwZSA9IFNIQURFUl9U
WVBFX1ZFUlRFWDsKKyAgICBlbHNlIGlmIChHTHNoYWRlclR5cGUgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQUdNRU5UX1NIQURFUikKKyAgICAgICAgc2hhZGVyVHlwZSA9IFNIQURFUl9UWVBFX0ZS
QUdNRU5UOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuICIiOyAvLyBJbnZhbGlkIHNoYWRlciB0
eXBlLgorCisgICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBHcmFwaGljc0NvbnRleHQzRDo6
U2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRvciByZXN1bHQgPSBtX2NvbnRleHQtPm1fc2hhZGVy
U291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKworICAgIGlmIChyZXN1bHQgPT0gbV9jb250ZXh0LT5t
X3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuICIiOworCisgICAgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+c2Vjb25kOwor
CisgICAgU3RyaW5nIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7CisgICAgU3RyaW5nIHNoYWRlcklu
Zm9Mb2c7CisKKyAgICBib29sIGlzVmFsaWQgPSBjb21waWxlci52YWxpZGF0ZVNoYWRlclNvdXJj
ZShlbnRyeS5zb3VyY2UudXRmOCgpLmRhdGEoKSwgc2hhZGVyVHlwZSwgdHJhbnNsYXRlZFNoYWRl
clNvdXJjZSwgc2hhZGVySW5mb0xvZyk7CisKKyAgICBlbnRyeS5sb2cgPSBzaGFkZXJJbmZvTG9n
OworICAgIGVudHJ5LmlzVmFsaWQgPSBpc1ZhbGlkOworCisgICAgaWYgKCFpc1ZhbGlkKQorICAg
ICAgICByZXR1cm4gIiI7CisKKyAgICByZXR1cm4gdHJhbnNsYXRlZFNoYWRlclNvdXJjZTsKK30K
Kwordm9pZCBFeHRlbnNpb25zM0RPcGVuR0xDb21tb246OmluaXRpYWxpemVBdmFpbGFibGVFeHRl
bnNpb25zKCkKK3sKKyAgICBTdHJpbmcgZXh0ZW5zaW9uc1N0cmluZyA9IGdldEV4dGVuc2lvbnMo
KTsKKyAgICBWZWN0b3I8U3RyaW5nPiBhdmFpbGFibGVFeHRlbnNpb25zOworICAgIGV4dGVuc2lv
bnNTdHJpbmcuc3BsaXQoIiAiLCBhdmFpbGFibGVFeHRlbnNpb25zKTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGF2YWlsYWJsZUV4dGVuc2lvbnMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1f
YXZhaWxhYmxlRXh0ZW5zaW9ucy5hZGQoYXZhaWxhYmxlRXh0ZW5zaW9uc1tpXSk7CisgICAgbV9p
bml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnMgPSB0cnVlOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNE
T3BlbkdMQ29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTAxODM5ZTZlM2U0Yjk1YTFlNTY2Y2QxMWY4YTI3
ZDY5YmViMzllNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uaApAQCAtMCwwICsxLDcwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBFeHRlbnNpb25zM0RPcGVuR0xDb21tb25faAorI2RlZmluZSBFeHRl
bnNpb25zM0RPcGVuR0xDb21tb25faAorCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCisKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbiA6IHB1YmxpYyBFeHRlbnNpb25zM0Qgewor
cHVibGljOgorICAgIHZpcnR1YWwgfkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbigpOworCisgICAg
Ly8gRXh0ZW5zaW9uczNEIG1ldGhvZHMuCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzKGNvbnN0
IFN0cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCBlbnN1cmVFbmFibGVkKGNvbnN0IFN0cmluZyYp
OworICAgIHZpcnR1YWwgYm9vbCBpc0VuYWJsZWQoY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVh
bCBpbnQgZ2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpOworCisgICAgdmlydHVhbCBQbGF0Zm9y
bTNET2JqZWN0IGNyZWF0ZVZlcnRleEFycmF5T0VTKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBk
ZWxldGVWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KSA9IDA7CisgICAgdmlydHVhbCBH
QzNEYm9vbGVhbiBpc1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgYmluZFZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKKwor
ICAgIHZpcnR1YWwgU3RyaW5nIGdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShQbGF0Zm9y
bTNET2JqZWN0KTsKKworcHJvdGVjdGVkOgorICAgIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbihH
cmFwaGljc0NvbnRleHQzRCopOworCisgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVBdmFpbGFi
bGVFeHRlbnNpb25zKCk7CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0
IFN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRFeHRlbnNpb25zKCkgPSAwOwor
CisgICAgYm9vbCBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9uczsKKyAgICBIYXNoU2V0
PFN0cmluZz4gbV9hdmFpbGFibGVFeHRlbnNpb25zOworCisgICAgLy8gV2VhayBwb2ludGVyIGJh
Y2sgdG8gR3JhcGhpY3NDb250ZXh0M0QKKyAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRXh0ZW5zaW9uczNE
T3BlbkdMQ29tbW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjljNjUwNzE1ZWVlMjIzYTlkMDc3MGNkZDI2MWQxNDE1MjFjM2YyYTcKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNE
T3BlbkdMRVMuY3BwCkBAIC0wLDAgKzEsMTQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpZiBFTkFCTEUoV0VCR0wpCisjaW5jbHVkZSAiRXh0ZW5zaW9u
czNET3BlbkdMRVMuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVk
ZSA8RUdML2VnbC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0V4dGVuc2lvbnMzRE9wZW5HTEVTOjpFeHRlbnNpb25zM0RPcGVuR0xFUyhHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCkKKyAgICA6IEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbihj
b250ZXh0KQorICAgICwgbV9zdXBwb3J0c09FU3ZlcnRleEFycmF5T2JqZWN0KGZhbHNlKQorICAg
ICwgbV9zdXBwb3J0c0lNR011bHRpc2FtcGxlZFJlbmRlclRvVGV4dHVyZShmYWxzZSkKKyAgICAs
IG1fZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HKDApCisgICAgLCBtX2dsUmVu
ZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HKDApCisgICAgLCBtX2dsQmluZFZlcnRleEFy
cmF5T0VTKDApCisgICAgLCBtX2dsRGVsZXRlVmVydGV4QXJyYXlzT0VTKDApCisgICAgLCBtX2ds
R2VuVmVydGV4QXJyYXlzT0VTKDApCisgICAgLCBtX2dsSXNWZXJ0ZXhBcnJheU9FUygwKQorewor
fQorCitFeHRlbnNpb25zM0RPcGVuR0xFUzo6fkV4dGVuc2lvbnMzRE9wZW5HTEVTKCkKK3sKK30K
Kwordm9pZCBFeHRlbnNpb25zM0RPcGVuR0xFUzo6ZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNh
bXBsZUlNRyh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1
bnNpZ25lZCBsb25nIHRleHRhcmdldCwgdW5zaWduZWQgaW50IHRleHR1cmUsIGludCBsZXZlbCwg
dW5zaWduZWQgbG9uZyBzYW1wbGVzKQoreworICAgIGlmIChtX2dsRnJhbWVidWZmZXJUZXh0dXJl
MkRNdWx0aXNhbXBsZUlNRykKKyAgICAgICAgbV9nbEZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlz
YW1wbGVJTUcodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsLCBz
YW1wbGVzKTsKKyAgICBlbHNlCisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworfQorCit2b2lkIEV4dGVuc2lvbnMzRE9wZW5HTEVTOjpy
ZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUcodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVu
c2lnbmVkIGxvbmcgc2FtcGxlcywgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWdu
ZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCit7CisgICAgaWYgKG1fZ2xSZW5k
ZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUcpCisgICAgICAgIG1fZ2xSZW5kZXJidWZmZXJT
dG9yYWdlTXVsdGlzYW1wbGVJTUcodGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwgd2lk
dGgsIGhlaWdodCk7CisgICAgZWxzZQorICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKK30KKworUGxhdGZvcm0zRE9iamVjdCBFeHRlbnNp
b25zM0RPcGVuR0xFUzo6Y3JlYXRlVmVydGV4QXJyYXlPRVMoKQoreworICAgIG1fY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKG1fZ2xHZW5WZXJ0ZXhBcnJheXNPRVMpIHsK
KyAgICAgICAgR0x1aW50IGFycmF5ID0gMDsKKyAgICAgICAgbV9nbEdlblZlcnRleEFycmF5c09F
UygxLCAmYXJyYXkpOworICAgICAgICByZXR1cm4gYXJyYXk7CisgICAgfQorCisgICAgbV9jb250
ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgcmV0dXJu
IDA7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uczNET3BlbkdMRVM6OmRlbGV0ZVZlcnRleEFycmF5T0VT
KFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCit7CisgICAgaWYgKCFhcnJheSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAobV9n
bERlbGV0ZVZlcnRleEFycmF5c09FUykKKyAgICAgICAgbV9nbERlbGV0ZVZlcnRleEFycmF5c09F
UygxLCAmYXJyYXkpOworICAgIGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xF
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cit9CisKK0dDM0Rib29sZWFuIEV4dGVuc2lvbnMz
RE9wZW5HTEVTOjppc1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCit7Cisg
ICAgaWYgKCFhcnJheSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAobV9nbElzVmVydGV4QXJyYXlPRVMpCisg
ICAgICAgIHJldHVybiBtX2dsSXNWZXJ0ZXhBcnJheU9FUyhhcnJheSk7CisKKyAgICBtX2NvbnRl
eHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uczNET3BlbkdMRVM6OmJpbmRWZXJ0ZXhBcnJheU9F
UyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQoreworICAgIGlmICghYXJyYXkpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKG1f
Z2xCaW5kVmVydGV4QXJyYXlPRVMpCisgICAgICAgIG1fZ2xCaW5kVmVydGV4QXJyYXlPRVMoYXJy
YXkpOworICAgIGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7Cit9CisKKworYm9vbCBFeHRlbnNpb25zM0RPcGVuR0xFUzo6c3Vw
cG9ydHNFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmIChtX2F2YWlsYWJs
ZUV4dGVuc2lvbnMuY29udGFpbnMobmFtZSkpIHsKKyAgICAgICAgaWYgKG5hbWUgPT0gIkdMX09F
U192ZXJ0ZXhfYXJyYXlfb2JqZWN0IiAmJiAhbV9zdXBwb3J0c09FU3ZlcnRleEFycmF5T2JqZWN0
KSB7CisgICAgICAgICAgICBtX2dsQmluZFZlcnRleEFycmF5T0VTID0gcmVpbnRlcnByZXRfY2Fz
dDxQRk5HTEJJTkRWRVJURVhBUlJBWU9FU1BST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbEJpbmRW
ZXJ0ZXhBcnJheU9FUyIpKTsKKyAgICAgICAgICAgIG1fZ2xHZW5WZXJ0ZXhBcnJheXNPRVMgPSBy
ZWludGVycHJldF9jYXN0PFBGTkdMR0VOVkVSVEVYQVJSQVlTT0VTUFJPQz4oZWdsR2V0UHJvY0Fk
ZHJlc3MoImdsR2VuVmVydGV4QXJyYXlzT0VTIikpOworICAgICAgICAgICAgbV9nbERlbGV0ZVZl
cnRleEFycmF5c09FUyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xERUxFVEVWRVJURVhBUlJBWVNP
RVNQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMiKSk7Cisg
ICAgICAgICAgICBtX2dsSXNWZXJ0ZXhBcnJheU9FUyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xJ
U1ZFUlRFWEFSUkFZT0VTUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsSXNWZXJ0ZXhBcnJheU9F
UyIpKTsKKyAgICAgICAgICAgIG1fc3VwcG9ydHNPRVN2ZXJ0ZXhBcnJheU9iamVjdCA9IHRydWU7
CisgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiR0xfSU1HX211bHRpc2FtcGxlZF9yZW5kZXJf
dG9fdGV4dHVyZSIgJiYgIW1fc3VwcG9ydHNJTUdNdWx0aXNhbXBsZWRSZW5kZXJUb1RleHR1cmUp
IHsKKyAgICAgICAgICAgIG1fZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HID0g
cmVpbnRlcnByZXRfY2FzdDxQRk5HTEZSQU1FQlVGRkVSVEVYVFVSRTJETVVMVElTQU1QTEVJTUdQ
Uk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxl
SU1HIikpOworICAgICAgICAgICAgbV9nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlN
RyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xSRU5ERVJCVUZGRVJTVE9SQUdFTVVMVElTQU1QTEVJ
TUdQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1w
bGVJTUciKSk7CisgICAgICAgICAgICBtX3N1cHBvcnRzSU1HTXVsdGlzYW1wbGVkUmVuZGVyVG9U
ZXh0dXJlID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1N0cmluZyBFeHRlbnNpb25zM0RPcGVuR0xFUzo6Z2V0
RXh0ZW5zaW9ucygpCit7CisgICAgcmV0dXJuIFN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0
IGNoYXIqPig6OmdsR2V0U3RyaW5nKEdMX0VYVEVOU0lPTlMpKSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9w
ZW5HTEVTLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOTAyMjJjYTRkN2E5NGEwOGMyZjk3NTYxNGJmMmJjNjBlMDAx
ZTA5NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIEV4dGVuc2lvbnMzRE9wZW5HTEVTX2gKKyNkZWZpbmUgRXh0ZW5zaW9uczNET3BlbkdM
RVNfaAorCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmgiCisKKyNpbmNsdWRl
IDxHTEVTMi9nbDIuaD4KKyNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBFeHRlbnNpb25zM0RPcGVuR0xFUyA6IHB1YmxpYyBFeHRlbnNpb25z
M0RPcGVuR0xDb21tb24geworcHVibGljOgorICAgIHZpcnR1YWwgfkV4dGVuc2lvbnMzRE9wZW5H
TEVTKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBs
ZUlNRyh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNp
Z25lZCBsb25nIHRleHRhcmdldCwgdW5zaWduZWQgaW50IHRleHR1cmUsIGludCBsZXZlbCwgdW5z
aWduZWQgbG9uZyBzYW1wbGVzKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFn
ZU11bHRpc2FtcGxlSU1HKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHNhbXBs
ZXMsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVu
c2lnbmVkIGxvbmcgaGVpZ2h0KTsKKworICAgIHZpcnR1YWwgUGxhdGZvcm0zRE9iamVjdCBjcmVh
dGVWZXJ0ZXhBcnJheU9FUygpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVWZXJ0ZXhBcnJheU9F
UyhQbGF0Zm9ybTNET2JqZWN0KTsKKyAgICB2aXJ0dWFsIEdDM0Rib29sZWFuIGlzVmVydGV4QXJy
YXlPRVMoUGxhdGZvcm0zRE9iamVjdCk7CisgICAgdmlydHVhbCB2b2lkIGJpbmRWZXJ0ZXhBcnJh
eU9FUyhQbGF0Zm9ybTNET2JqZWN0KTsKKworcHJvdGVjdGVkOgorICAgIC8vIFRoaXMgY2xhc3Mg
b25seSBuZWVkcyB0byBiZSBpbnN0YW50aWF0ZWQgYnkgR3JhcGhpY3NDb250ZXh0M0QgaW1wbGVt
ZW50YXRpb25zLgorICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKKyAgICBFeHRl
bnNpb25zM0RPcGVuR0xFUyhHcmFwaGljc0NvbnRleHQzRCopOworCisgICAgdmlydHVhbCBib29s
IHN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgU3RyaW5nIGdl
dEV4dGVuc2lvbnMoKTsKKworICAgIGJvb2wgbV9zdXBwb3J0c09FU3ZlcnRleEFycmF5T2JqZWN0
OworICAgIGJvb2wgbV9zdXBwb3J0c0lNR011bHRpc2FtcGxlZFJlbmRlclRvVGV4dHVyZTsKKwor
ICAgIFBGTkdMRlJBTUVCVUZGRVJURVhUVVJFMkRNVUxUSVNBTVBMRUlNR1BST0MgbV9nbEZyYW1l
YnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUc7CisgICAgUEZOR0xSRU5ERVJCVUZGRVJTVE9S
QUdFTVVMVElTQU1QTEVJTUdQUk9DIG1fZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJ
TUc7CisgICAgUEZOR0xCSU5EVkVSVEVYQVJSQVlPRVNQUk9DIG1fZ2xCaW5kVmVydGV4QXJyYXlP
RVM7CisgICAgUEZOR0xERUxFVEVWRVJURVhBUlJBWVNPRVNQUk9DIG1fZ2xEZWxldGVWZXJ0ZXhB
cnJheXNPRVM7CisgICAgUEZOR0xHRU5WRVJURVhBUlJBWVNPRVNQUk9DIG1fZ2xHZW5WZXJ0ZXhB
cnJheXNPRVM7CisgICAgUEZOR0xJU1ZFUlRFWEFSUkFZT0VTUFJPQyBtX2dsSXNWZXJ0ZXhBcnJh
eU9FUzsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEV4dGVuc2lv
bnMzRE9wZW5HTEVTX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCmluZGV4
IDNmNDdiNmUyMWViMjU1MjQzZWVlYTRiZjMxOTg1M2FiYmY3NmEyZGMuLjVmMDA1MDU5OWM2YWI2
YjQxMzIwMzI1ODBhNTQwYTNjMjZlNzI5YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNE
T3BlbkdMLmNwcApAQCAtMzQsNiArMzQsMTEgQEAKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKIAorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRl
IDxjc3RyaW5nPgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KKwogI2lmIFBMQVRGT1JNKE1BQykKICNpbmNsdWRlIDxPcGVuR0wvZ2wu
aD4KICNlbGlmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShRVCkK
QEAgLTQ3LDYgKzUyLDMyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHNBbmRD
b252ZXJ0VG9CR1JBSWZOZWNlc3NhcnkoaW50IHgsIGludCB5LCBpbnQKICAgICA6OmdsUmVhZFBp
eGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBHTF9CR1JBLCBHTF9VTlNJR05FRF9JTlRfOF84Xzhf
OF9SRVYsIHBpeGVscyk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0
cmlidXRlcygpCit7CisgICAgRXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0gZ2V0RXh0ZW5zaW9u
cygpOworICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpIHsKKyAgICAgICAgY29uc3QgY2hhciogcGFj
a2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uID0gaXNHTEVTMkNvbXBsaWFudCgpID8gIkdMX09FU19w
YWNrZWRfZGVwdGhfc3RlbmNpbCIgOiAiR0xfRVhUX3BhY2tlZF9kZXB0aF9zdGVuY2lsIjsKKyAg
ICAgICAgaWYgKGV4dGVuc2lvbnMtPnN1cHBvcnRzKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lv
bikpIHsKKyAgICAgICAgICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQocGFja2VkRGVwdGhT
dGVuY2lsRXh0ZW5zaW9uKTsKKyAgICAgICAgICAgIC8vIEZvcmNlIGRlcHRoIGlmIHN0ZW5jaWwg
aXMgdHJ1ZS4KKyAgICAgICAgICAgIG1fYXR0cnMuZGVwdGggPSB0cnVlOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIG1fYXR0cnMuc3RlbmNpbCA9IGZhbHNlOworICAgIH0KKyAgICBpZiAo
bV9hdHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAgYm9vbCBpc1ZhbGlkVmVuZG9yID0gdHJ1ZTsK
KyAgICAgICAgLy8gQ3VycmVudGx5IGluIE1hYyB3ZSBvbmx5IHR1cm4gb24gYW50aWFsaWFzIGlm
IHZlbmRvciBpcyBOVklESUEsCisgICAgICAgIC8vIG9yIGlmIEFUSSBhbmQgb24gMTAuNy4yIGFu
ZCBhYm92ZS4KKyAgICAgICAgY29uc3QgY2hhciogdmVuZG9yID0gcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhHTF9WRU5ET1IpKTsKKyAgICAgICAgaWYgKCF2ZW5k
b3IgfHwgKCFzdGQ6OnN0cnN0cih2ZW5kb3IsICJOVklESUEiKSAmJiAhKHN0ZDo6c3Ryc3RyKHZl
bmRvciwgIkFUSSIpICYmIHN5c3RlbUFsbG93c011bHRpc2FtcGxpbmdPbkFUSUNhcmRzKCkpKSkK
KyAgICAgICAgICAgIGlzVmFsaWRWZW5kb3IgPSBmYWxzZTsKKyAgICAgICAgaWYgKCFpc1ZhbGlk
VmVuZG9yIHx8ICFleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVs
dGlzYW1wbGUiKSB8fCBpc0dMRVMyQ29tcGxpYW50KCkpCisgICAgICAgICAgICBtX2F0dHJzLmFu
dGlhbGlhcyA9IGZhbHNlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBleHRlbnNpb25zLT5l
bnN1cmVFbmFibGVkKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpOworICAgIH0K
K30KKwogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZUZCT3MoY29uc3QgSW50U2l6ZSYg
c2l6ZSkKIHsKICAgICBjb25zdCBpbnQgd2lkdGggPSBzaXplLndpZHRoKCk7CkBAIC0xNTEsNiAr
MTgyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5l
Y2Vzc2FyeShjb25zdCBJbnRSZWN0JiByZWN0KQogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVu
ZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0
LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCiB7CiAgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisKICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KSB7CiAgICAgY2FzZSBERVBU
SF9TVEVOQ0lMOgogICAgICAgICBpbnRlcm5hbGZvcm1hdCA9IEdMX0RFUFRIMjRfU1RFTkNJTDhf
RVhUOwpAQCAtMjMyLDYgKzI2NCw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdl
MkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKICAgICBH
QzNEZW51bSBvcGVuR0xJbnRlcm5hbEZvcm1hdCA9IGludGVybmFsZm9ybWF0OwogICAgIGlmICh0
eXBlID09IEdMX0ZMT0FUKSB7CiAgICAgICAgIGlmIChmb3JtYXQgPT0gR0xfUkdCQSkKQEAgLTI0
MSw2ICsyNzQsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZQogICAgIH0KIAogICAgIDo6Z2xU
ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIG9wZW5HTEludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKwogICAgIHJldHVybiB0cnVlOwog
fQogCkBAIC0yNTYsNiArMjkwLDMzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyRGVw
dGgoR0MzRGNsYW1wZiBkZXB0aCkKICAgICA6OmdsQ2xlYXJEZXB0aChkZXB0aCk7CiB9CiAKK2Jv
b2wgR3JhcGhpY3NDb250ZXh0M0Q6OnN5c3RlbUFsbG93c011bHRpc2FtcGxpbmdPbkFUSUNhcmRz
KCkKK3sKKyNpZiBQTEFURk9STShNQUMpCisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19M
RU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MSU9OKQorICAgIHJldHVybiB0cnVlOwor
I2Vsc2UKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIHN0YXRpYyBTSW50MzIgdmVy
c2lvbjsKKyAgICBpZiAoIXZlcnNpb24pIHsKKyAgICAgICAgaWYgKEdlc3RhbHQoZ2VzdGFsdFN5
c3RlbVZlcnNpb24sICZ2ZXJzaW9uKSAhPSBub0VycikKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03NzkyMiBmb3IgbW9yZSBkZXRhaWxzCisgICAgcmV0dXJuIHZlcnNpb24gPj0gMHgxMDcy
OworI2VuZGlmIC8vIFNOT1dfTEVPUEFSRCBhbmQgTElPTgorI2Vsc2UKKyAgICByZXR1cm4gZmFs
c2U7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorfQorCitFeHRlbnNpb25zM0QqIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRFeHRlbnNpb25zKCkKK3sKKyAgICBpZiAoIW1fZXh0ZW5zaW9ucykKKyAg
ICAgICAgbV9leHRlbnNpb25zID0gYWRvcHRQdHIobmV3IEV4dGVuc2lvbnMzRE9wZW5HTCh0aGlz
KSk7CisgICAgcmV0dXJuIG1fZXh0ZW5zaW9ucy5nZXQoKTsKK30KKwogfQogCiAjZW5kaWYgLy8g
RU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1v
bi5jcHAKaW5kZXggNDI5ZmM1MWM5MDQ2YzQ0YTUwZWZlY2UxMjljYmYzMWY2MGQ5OTc1ZS4uNzYy
ZTM5ZjA5ZGFhOTZmNWMwZGE3MzQ4NDA5NDE4NDVhZGVhOWJmMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdM
Q29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCkBAIC0zMCw3ICszMCwxMiBAQAogCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKIAorI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQuaCIKKyNpZiBVU0UoT1BFTkdMX0VTXzIpCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNE
T3BlbkdMRVMuaCIKKyNlbHNlCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMLmgiCisjZW5k
aWYKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5o
IgogI2luY2x1ZGUgIkltYWdlRGF0YS5oIgpAQCAtNDksMzkgKzU0LDI0IEBACiAjaW5jbHVkZSA8
d3RmL1VudXNlZFBhcmFtLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCi0jaWYg
UExBVEZPUk0oTUFDKQorI2lmIFVTRShPUEVOR0xfRVNfMikKKyNpbmNsdWRlICJPcGVuR0xFU1No
aW1zLmgiCisjZWxpZiBQTEFURk9STShNQUMpCiAjaW5jbHVkZSA8T3BlbkdML2dsLmg+CiAjZWxp
ZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oUVQpCiAjaW5jbHVk
ZSAiT3BlbkdMU2hpbXMuaCIKICNlbmRpZgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7CisjaWYgUExB
VEZPUk0oQkxBQ0tCRVJSWSkKKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1Mb2cuaD4KKyNl
bmRpZgogCi1zdGF0aWMgYm9vbCBzeXN0ZW1BbGxvd3NNdWx0aXNhbXBsaW5nT25BVElDYXJkcygp
Ci17Ci0jaWYgUExBVEZPUk0oTUFDKQotI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVP
UEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTElPTikKLSAgICByZXR1cm4gdHJ1ZTsKLSNl
bHNlCi0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBzdGF0aWMgU0ludDMyIHZlcnNp
b247Ci0gICAgaWYgKCF2ZXJzaW9uKSB7Ci0gICAgICAgIGlmIChHZXN0YWx0KGdlc3RhbHRTeXN0
ZW1WZXJzaW9uLCAmdmVyc2lvbikgIT0gbm9FcnIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Nzc5MjIgZm9yIG1vcmUgZGV0YWlscwotICAgIHJldHVybiB2ZXJzaW9uID49IDB4MTA3MjsK
LSNlbmRpZiAvLyBTTk9XX0xFT1BBUkQgYW5kIExJT04KLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNl
OwotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKLX0KK25hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVBdHRyaWJ1dGVzKCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnZhbGlkYXRlRGVwdGhTdGVuY2lsKGNvbnN0IGNoYXIqIHBhY2tlZERlcHRoU3Rl
bmNpbEV4dGVuc2lvbikKIHsKICAgICBFeHRlbnNpb25zM0QqIGV4dGVuc2lvbnMgPSBnZXRFeHRl
bnNpb25zKCk7CiAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkgewotICAgICAgICBjb25zdCBjaGFy
KiBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24gPSBpc0dMRVMyQ29tcGxpYW50KCkgPyAiR0xf
T0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsIiA6ICJHTF9FWFRfcGFja2VkX2RlcHRoX3N0ZW5jaWwi
OwogICAgICAgICBpZiAoZXh0ZW5zaW9ucy0+c3VwcG9ydHMocGFja2VkRGVwdGhTdGVuY2lsRXh0
ZW5zaW9uKSkgewogICAgICAgICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZChwYWNrZWRE
ZXB0aFN0ZW5jaWxFeHRlbnNpb24pOwogICAgICAgICAgICAgLy8gRm9yY2UgZGVwdGggaWYgc3Rl
bmNpbCBpcyB0cnVlLgpAQCAtNDM5LDM2ICs0MjksMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKICAgICBBU1NFUlQoc2hh
ZGVyKTsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAotICAgIGludCBHTHNoYWRlclR5cGU7
Ci0gICAgQU5HTEVTaGFkZXJUeXBlIHNoYWRlclR5cGU7Ci0KLSAgICBnbEdldFNoYWRlcml2KHNo
YWRlciwgU0hBREVSX1RZUEUsICZHTHNoYWRlclR5cGUpOwotICAgIAotICAgIGlmIChHTHNoYWRl
clR5cGUgPT0gVkVSVEVYX1NIQURFUikKLSAgICAgICAgc2hhZGVyVHlwZSA9IFNIQURFUl9UWVBF
X1ZFUlRFWDsKLSAgICBlbHNlIGlmIChHTHNoYWRlclR5cGUgPT0gRlJBR01FTlRfU0hBREVSKQot
ICAgICAgICBzaGFkZXJUeXBlID0gU0hBREVSX1RZUEVfRlJBR01FTlQ7Ci0gICAgZWxzZQotICAg
ICAgICByZXR1cm47IC8vIEludmFsaWQgc2hhZGVyIHR5cGUuCi0KLSAgICBIYXNoTWFwPFBsYXRm
b3JtM0RPYmplY3QsIFNoYWRlclNvdXJjZUVudHJ5Pjo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFk
ZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOworICAgIFN0cmluZyB0cmFuc2xhdGVkU2hhZGVyU291
cmNlID0gbV9leHRlbnNpb25zLT5nZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoc2hhZGVy
KTsKIAotICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisgICAgaWYg
KCF0cmFuc2xhdGVkU2hhZGVyU291cmNlLmxlbmd0aCgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnNlY29uZDsKLQotICAgIFN0cmlu
ZyB0cmFuc2xhdGVkU2hhZGVyU291cmNlOwotICAgIFN0cmluZyBzaGFkZXJJbmZvTG9nOwotCi0g
ICAgYm9vbCBpc1ZhbGlkID0gbV9jb21waWxlci52YWxpZGF0ZVNoYWRlclNvdXJjZShlbnRyeS5z
b3VyY2UudXRmOCgpLmRhdGEoKSwgc2hhZGVyVHlwZSwgdHJhbnNsYXRlZFNoYWRlclNvdXJjZSwg
c2hhZGVySW5mb0xvZyk7Ci0KLSAgICBlbnRyeS5sb2cgPSBzaGFkZXJJbmZvTG9nOwotICAgIGVu
dHJ5LmlzVmFsaWQgPSBpc1ZhbGlkOwotCi0gICAgaWYgKCFpc1ZhbGlkKQotICAgICAgICByZXR1
cm47IC8vIFNoYWRlciBkaWRuJ3QgdmFsaWRhdGUsIGRvbid0IG1vdmUgZm9yd2FyZCB3aXRoIGNv
bXBpbGluZyB0cmFuc2xhdGVkIHNvdXJjZS4KLQogICAgIGludCB0cmFuc2xhdGVkU2hhZGVyTGVu
Z3RoID0gdHJhbnNsYXRlZFNoYWRlclNvdXJjZS5sZW5ndGgoKTsKIAogICAgIGNvbnN0IENTdHJp
bmcmIHRyYW5zbGF0ZWRTaGFkZXJDU3RyaW5nID0gdHJhbnNsYXRlZFNoYWRlclNvdXJjZS51dGY4
KCk7CkBAIC04MDEsMTggKzc2Niw2MSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4
ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaQogICAgICAg
ICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwg
bV9mYm8pOwogICAgICAgICA6OmdsRmx1c2goKTsKICAgICB9CisgICAgLy8gQ3VycmVudGx5IG9u
bHkgZm9ybWF0PVJHQkEsIHR5cGU9VU5TSUdORURfQllURSBpcyBzdXBwb3J0ZWQgYnkgdGhlIHNw
ZWNpZmljYXRpb246IGh0dHA6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvd2ViZ2wvc3BlY3Mv
bGF0ZXN0LworICAgIC8vIElmIHRoaXMgZXZlciBjaGFuZ2VzLCB0aGlzIGNvZGUgd2lsbCBuZWVk
IHRvIGJlIHVwZGF0ZWQuCisKKyAgICAvLyBDYWxjdWxhdGUgdGhlIHN0cmlkZXMgb2Ygb3VyIGRh
dGEgYW5kIGNhbnZhcworICAgIHVuc2lnbmVkIGludCBmb3JtYXRTaXplID0gNDsgLy8gUkdCQSBV
TlNJR05FRF9CWVRFCisgICAgdW5zaWduZWQgaW50IGRhdGFTdHJpZGUgPSB3aWR0aCAqIGZvcm1h
dFNpemU7CisgICAgdW5zaWduZWQgaW50IGNhbnZhc1N0cmlkZSA9IG1fY3VycmVudFdpZHRoICog
Zm9ybWF0U2l6ZTsKKworICAgIC8vIElmIHdlIGFyZSB1c2luZyBhIHBhY2sgYWxpZ25tZW50IG9m
IDgsIHRoZW4gd2UgbmVlZCB0byBhbGlnbiBvdXIgc3RyaWRlcyB0byA4IGJ5dGUgYm91bmRhcmll
cworICAgIC8vIFNlZTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EYXRhX3N0cnVjdHVy
ZV9hbGlnbm1lbnQgKGNvbXB1dGluZyBwYWRkaW5nKQorICAgIGludCBwYWNrQWxpZ25tZW50Owor
ICAgIGdsR2V0SW50ZWdlcnYoR0xfUEFDS19BTElHTk1FTlQsICZwYWNrQWxpZ25tZW50KTsKKyAg
ICBpZiAoOCA9PSBwYWNrQWxpZ25tZW50KSB7CisgICAgICAgIGRhdGFTdHJpZGUgPSAoZGF0YVN0
cmlkZSArIDcpICYgfjc7CisgICAgICAgIGNhbnZhc1N0cmlkZSA9IChjYW52YXNTdHJpZGUgKyA3
KSAmIH43OworICAgIH0KKworICAgIHVuc2lnbmVkIGNoYXIqIGNhbnZhc0RhdGEgPSBuZXcgdW5z
aWduZWQgY2hhcltjYW52YXNTdHJpZGUgKiBtX2N1cnJlbnRIZWlnaHRdOworICAgIDo6Z2xSZWFk
UGl4ZWxzKDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIGZvcm1hdCwgdHlw
ZSwgY2FudmFzRGF0YSk7CisKKyAgICAvLyBJZiB3ZSBmYWlsZWQgdG8gcmVhZCBvdXIgY2FudmFz
IGRhdGEgZHVlIHRvIGEgR0wgZXJyb3IsIGRvbid0IGNvbnRpbnVlCisgICAgaW50IGVycm9yID0g
Z2xHZXRFcnJvcigpOworICAgIGlmIChHTF9OT19FUlJPUiAhPSBlcnJvcikgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihlcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAv
LyBDbGVhciBvdXIgZGF0YSBpbiBjYXNlIHNvbWUgb2YgaXQgbGllcyBvdXRzaWRlIHRoZSBib3Vu
ZHMgb2Ygb3VyIGNhbnZhcworICAgIC8vIFRPRE86IGRvbid0IGRvIHRoaXMgaWYgYWxsIG9mIHRo
ZSBkYXRhIGxpZXMgaW5zaWRlIHRoZSBib3VuZHMgb2YgdGhlIGNhbnZhcworICAgIG1lbXNldChk
YXRhLCAwLCBkYXRhU3RyaWRlICogaGVpZ2h0KTsKKworICAgIC8vIENhbGN1bGF0ZSB0aGUgaW50
ZXJzZWN0aW9uIG9mIG91ciBjYW52YXMgYW5kIGRhdGEgYm91bmRzCisgICAgSW50UmVjdCBkYXRh
UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBJbnRSZWN0IGNhbnZhc1JlY3QoMCwgMCwg
bV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCk7CisgICAgSW50UmVjdCBub25aZXJvRGF0
YVJlY3QgPSBpbnRlcnNlY3Rpb24oZGF0YVJlY3QsIGNhbnZhc1JlY3QpOworCisgICAgdW5zaWdu
ZWQgaW50IHhEYXRhT2Zmc2V0ID0geCA8IDAgPyAteCAqIGZvcm1hdFNpemUgOiAwOworICAgIHVu
c2lnbmVkIGludCB5RGF0YU9mZnNldCA9IHkgPCAwID8gLXkgKiBkYXRhU3RyaWRlIDogMDsKKyAg
ICB1bnNpZ25lZCBpbnQgeENhbnZhc09mZnNldCA9IG5vblplcm9EYXRhUmVjdC54KCkgKiBmb3Jt
YXRTaXplOworICAgIHVuc2lnbmVkIGludCB5Q2FudmFzT2Zmc2V0ID0gbm9uWmVyb0RhdGFSZWN0
LnkoKSAqIGNhbnZhc1N0cmlkZTsKKyAgICB1bnNpZ25lZCBjaGFyKiBkc3QgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4oZGF0YSkgKyB4RGF0YU9mZnNldCArIHlEYXRhT2Zmc2V0OworICAg
IHVuc2lnbmVkIGNoYXIqIHNyYyA9IGNhbnZhc0RhdGEgKyB4Q2FudmFzT2Zmc2V0ICsgeUNhbnZh
c09mZnNldDsKKyAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBub25aZXJvRGF0YVJlY3QuaGVp
Z2h0KCk7IHJvdysrKSB7CisgICAgICAgIG1lbWNweShkc3QsIHNyYywgbm9uWmVyb0RhdGFSZWN0
LndpZHRoKCkgKiBmb3JtYXRTaXplKTsKKyAgICAgICAgZHN0ICs9IGRhdGFTdHJpZGU7CisgICAg
ICAgIHNyYyArPSBjYW52YXNTdHJpZGU7CisgICAgfQorCisgICAgZGVsZXRlIFtdIGNhbnZhc0Rh
dGE7CiAgICAgOjpnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBl
LCBkYXRhKTsKKwogICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1f
bXVsdGlzYW1wbGVGQk8pCiAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKLXsKLSAgICAvLyBGSVhNRTog
VGhpcyBpcyBub3QgaW1wbGVtZW50ZWQgb24gZGVza3RvcCBPcGVuR0wuIFdlIG5lZWQgdG8gaGF2
ZSBpZmRlZnMgZm9yIHRoZSBkaWZmZXJlbnQgR0wgdmFyaWFudHMuCi0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6c2FtcGxlQ292ZXJhZ2UoR0MzRGNsYW1wZiB2YWx1ZSwgR0MzRGJvb2xlYW4gaW52ZXJ0
KQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwpAQCAtMTM4NiwxMyArMTM5NCw2IEBAIGJv
b2wgR3JhcGhpY3NDb250ZXh0M0Q6OmxheWVyQ29tcG9zaXRlZCgpIGNvbnN0CiAgICAgcmV0dXJu
IG1fbGF5ZXJDb21wb3NpdGVkOwogfQogCi1FeHRlbnNpb25zM0QqIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRFeHRlbnNpb25zKCkKLXsKLSAgICBpZiAoIW1fZXh0ZW5zaW9ucykKLSAgICAgICAgbV9l
eHRlbnNpb25zID0gYWRvcHRQdHIobmV3IEV4dGVuc2lvbnMzRE9wZW5HTCh0aGlzKSk7Ci0gICAg
cmV0dXJuIG1fZXh0ZW5zaW9ucy5nZXQoKTsKLX0KLQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFdF
QkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCmluZGV4IGIxYmQx
ZGM1NmNhNmZkOTI4M2RiMmRhZTEyMzgzY2UyMmZjOTQzMDIuLjNiNDRhMjQ2ZWYxMzA0YzA0OTE2
YThjMTM1OTA0NjFjZWEzZjI4NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVu
R0xFUy5jcHAKQEAgLTI5LDkzICsyOSwyOSBAQAogI2lmIEVOQUJMRShXRUJHTCkKIAogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0KLSNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0wu
aCIKKyNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0xFUy5oIgogI2luY2x1ZGUgIkludFJlY3Qu
aCIKICNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiTGF5ZXJXZWJLaXRUaHJlYWQuaCIK
ICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotCi0jaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFU
Rk9STShRVCkKLSNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgotI2VuZGlmCisjaW5jbHVkZSAiT3Bl
bkdMRVNTaGltcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnJlYWRQaXhlbHNBbmRDb252ZXJ0VG9CR1JBSWZOZWNlc3NhcnkoaW50IHgsIGludCB5
LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVuc2lnbmVkIGNoYXIqIHBpeGVscykKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCiB7Ci0gICAgY29uc3QgaW50
IHRvdGFsQnl0ZXMgPSBtX2N1cnJlbnRXaWR0aCAqIG1fY3VycmVudEhlaWdodCAqIDQ7Ci0gICAg
OjpnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgR0xfUkdCQSwgR0xfVU5TSUdORURf
QllURSwgcGl4ZWxzKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsQnl0ZXM7IGkgKz0g
NCkKLSAgICAgICAgc3RkOjpzd2FwKHBpeGVsc1tpXSwgcGl4ZWxzW2kgKyAyXSk7IC8vIENvbnZl
cnQgdG8gQkdSQS4KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsUmVsZWFzZVNo
YWRlckNvbXBpbGVyKCk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGVGQk9z
KGNvbnN0IEludFNpemUmIHNpemUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxz
QW5kQ29udmVydFRvQkdSQUlmTmVjZXNzYXJ5KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQg
aGVpZ2h0LCB1bnNpZ25lZCBjaGFyKiBwaXhlbHMpCiB7Ci0gICAgY29uc3QgaW50IHdpZHRoID0g
c2l6ZS53aWR0aCgpOwotICAgIGNvbnN0IGludCBoZWlnaHQgPSBzaXplLmhlaWdodCgpOwotICAg
IEdMdWludCBjb2xvckZvcm1hdCA9IDAsIHBpeGVsRGF0YVR5cGUgPSAwOwotICAgIGlmIChtX2F0
dHJzLmFscGhhKSB7Ci0gICAgICAgIG1faW50ZXJuYWxDb2xvckZvcm1hdCA9IEdMX1JHQkE7Ci0g
ICAgICAgIGNvbG9yRm9ybWF0ID0gR0xfUkdCQTsKLSAgICAgICAgcGl4ZWxEYXRhVHlwZSA9IEdM
X1VOU0lHTkVEX0JZVEU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9pbnRlcm5hbENvbG9yRm9y
bWF0ID0gR0xfUkdCOwotICAgICAgICBjb2xvckZvcm1hdCA9IEdMX1JHQjsKLSAgICAgICAgcGl4
ZWxEYXRhVHlwZSA9IEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81OwotICAgIH0KLQotICAgIC8vIFdl
IGRvbid0IGFsbG93IHRoZSBsb2dpYyB3aGVyZSBzdGVuY2lsIGlzIHJlcXVpcmVkIGFuZCBkZXB0
aCBpcyBub3QuCi0gICAgLy8gU2VlIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZUF0dHJpYnV0
ZXMuCi0gICAgYm9vbCBzdXBwb3J0UGFja2VkRGVwdGhTdGVuY2lsQnVmZmVyID0gKG1fYXR0cnMu
c3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKSAmJiBnZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJH
TF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKLQotICAgIC8vIFJlc2l6ZSByZWd1bGFyIEZC
Ty4KLSAgICBib29sIG11c3RSZXN0b3JlRkJPID0gZmFsc2U7Ci0gICAgaWYgKG1fYm91bmRGQk8g
IT0gbV9mYm8pIHsKLSAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOwotICAgICAgICA6Omds
QmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8p
OwotICAgIH0KLQotICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUp
OwotICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIG1faW50ZXJuYWxDb2xvckZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIHBpeGVsRGF0YVR5cGUsIDApOwot
ICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8y
RCwgbV90ZXh0dXJlLCAwKTsKLQotICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBt
X2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAw
LCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBH
TF9VTlNJR05FRF9CWVRFLCAwKTsKLSAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwg
MCk7Ci0KLSAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGFudGlhbGlhc2luZyB5ZXQuIFNlZSBHcmFw
aGljc0NvbnRleHQzRDo6dmFsaWRhdGVBdHRyaWJ1dGVzLgotICAgIEFTU0VSVCghbV9hdHRycy5h
bnRpYWxpYXMpOwotCi0gICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKSB7
Ci0gICAgICAgIC8vIFVzZSBhIDI0IGJpdCBkZXB0aCBidWZmZXIgd2hlcmUgd2Uga25vdyB3ZSBo
YXZlIGl0LgotICAgICAgICBpZiAoc3VwcG9ydFBhY2tlZERlcHRoU3RlbmNpbEJ1ZmZlcikgewot
ICAgICAgICAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fZGVwdGhTdGVuY2ls
QnVmZmVyKTsKLSAgICAgICAgICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdy
YXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMLCB3aWR0aCwgaGVpZ2h0LCAwLCBHcmFwaGlj
c0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lO
VF8yNF84LCAwKTsKLSAgICAgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpCi0gICAgICAgICAg
ICAgICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9TVEVOQ0lM
X0FUVEFDSE1FTlQsIEdMX1RFWFRVUkVfMkQsIG1fZGVwdGhTdGVuY2lsQnVmZmVyLCAwKTsKLSAg
ICAgICAgICAgIGlmIChtX2F0dHJzLmRlcHRoKQotICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1
ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfREVQVEhfQVRUQUNITUVOVCwgR0xfVEVY
VFVSRV8yRCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIsIDApOwotICAgICAgICAgICAgOjpnbEJpbmRU
ZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
aWYgKG1fYXR0cnMuc3RlbmNpbCkgewotICAgICAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVm
ZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fc3RlbmNpbEJ1ZmZlcik7
Ci0gICAgICAgICAgICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQoR3JhcGhpY3NDb250
ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgR0xfU1RFTkNJTF9JTkRFWDgsIHdpZHRoLCBoZWlnaHQpOwot
ICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1F
TlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fc3RlbmNpbEJ1ZmZlcik7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobV9hdHRycy5kZXB0aCkgewotICAgICAgICAg
ICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJC
VUZGRVIsIG1fZGVwdGhCdWZmZXIpOwotICAgICAgICAgICAgICAgIDo6Z2xSZW5kZXJidWZmZXJT
dG9yYWdlRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIEdMX0RFUFRIX0NPTVBP
TkVOVDE2LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJS
ZW5kZXJidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZF
UiwgbV9kZXB0aEJ1ZmZlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICA6OmdsQmluZFJl
bmRlcmJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCAwKTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBpZiAoZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUikgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
X0NPTVBMRVRFKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBjbGVhbnVwCi0gICAgICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgOjpnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgR0xfUkdC
QSwgR0xfVU5TSUdORURfQllURSwgcGl4ZWxzKTsKKyAgICBpbnQgdG90YWxCeXRlcyA9IHdpZHRo
ICogaGVpZ2h0ICogNDsKKyAgICBpZiAoaXNHTEVTMkNvbXBsaWFudCgpKSB7CisgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgdG90YWxCeXRlczsgaSArPSA0KQorICAgICAgICAgICAgc3RkOjpz
d2FwKHBpeGVsc1tpXSwgcGl4ZWxzW2kgKyAyXSk7IC8vIENvbnZlcnQgdG8gQkdSQS4KICAgICB9
Ci0KLSAgICByZXR1cm4gbXVzdFJlc3RvcmVGQk87CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoY29uc3QgSW50UmVjdCYgcmVjdCkK
QEAgLTE1Niw2ICs5MiwxNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZQogICAgIHJldHVybiB0
cnVlOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZUF0dHJpYnV0ZXMoKQor
eworICAgIHZhbGlkYXRlRGVwdGhTdGVuY2lsKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwi
KTsKKworICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgeworICAgICAgICBFeHRlbnNpb25zM0Qq
IGV4dGVuc2lvbnMgPSBnZXRFeHRlbnNpb25zKCk7CisgICAgICAgIGlmICghZXh0ZW5zaW9ucy0+
c3VwcG9ydHMoIkdMX0lNR19tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKSkKKyAgICAg
ICAgICAgIG1fYXR0cnMuYW50aWFsaWFzID0gZmFsc2U7CisgICAgfQorfQorCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpkZXB0aFJhbmdlKEdDM0RjbGFtcGYgek5lYXIsIEdDM0RjbGFtcGYgekZh
cikKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKQEAgLTE2OCw2ICsxMTUsMTkgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJEZXB0aChHQzNEY2xhbXBmIGRlcHRoKQogICAgIDo6
Z2xDbGVhckRlcHRoZihkZXB0aCk7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworRXh0
ZW5zaW9uczNEKiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXh0ZW5zaW9ucygpCit7CisgICAgaWYg
KCFtX2V4dGVuc2lvbnMpCisgICAgICAgIG1fZXh0ZW5zaW9ucyA9IGFkb3B0UHRyKG5ldyBFeHRl
bnNpb25zM0RPcGVuR0xFUyh0aGlzKSk7CisgICAgcmV0dXJuIG1fZXh0ZW5zaW9ucy5nZXQoKTsK
K30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6c3lzdGVtQWxsb3dzTXVsdGlzYW1wbGluZ09u
QVRJQ2FyZHMoKQoreworICAgIHJldHVybiBmYWxzZTsgLy8gbm90IGFwcGxpY2FibGUKK30KKwor
fQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAppbmRleCA3
MGQzZjI0YWZhNTU0MmE2OGExMjQxZDM4MWMzY2U5MzQ4NzgxODg1Li4wNjc2OTIxYzExZjgwZmRj
NWZhODQ4MzlhZGZmZjUzYjEzMGFmYWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcApAQCAtOTgs
NiArOTgsMTMgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNHTEVTMkNvbXBsaWFudCgpIGNv
bnN0CiAjZW5kaWYKIH0KIAorI2lmICFVU0UoT1BFTkdMX0VTXzIpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisjZW5kaWYKKwogR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpHcmFwaGljc0NvbnRleHQz
RFByaXZhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEhvc3RXaW5kb3cqIGhvc3RXaW5k
b3cpCiAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKICAgICAsIG1faG9zdFdpbmRvdyhob3N0V2lu
ZG93KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150977</attachid>
            <date>2012-07-05 13:30:02 -0700</date>
            <delta_ts>2012-07-05 14:06:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90567-20120705162938.patch</filename>
            <type>text/plain</type>
            <size>66185</size>
            <attacher name="Joshua Netterfield">jnetterfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxOTIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjBjYjRiZDNkMTIyZmYy
YjBiYjllNDRmYmM5Y2M0OGNlMGE2NjVjNS4uY2MwZmU5MzUxOGRkNGFkMTUwMThiNjAxM2QwYzdm
ZTJkYmJjMDlmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk0IEBACisyMDEyLTA3LTA0ICBKb3No
dWEgTmV0dGVyZmllbGQgIDxqbmV0dGVyZmllbGRAcmltLmNvbT4KKyAgICAgICAgTWFrZSBHQzNE
IGFuZCBFM0QgbW9yZSBtYWludGFpbmFibGUgZm9yIEdMRVMgcGxhdGZvcm1zCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDU2NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY2xlYW5zIHVw
IGNvZGUgZm9yIFdlYkdMIG9uIE9wZW5HTEVTIHBsYXRmb3JtcyB3aGljaCB1c2UgCisgICAgICAg
IEdyYXBoaWNzQ29udGV4dDNET3BlbkdMKiBhbmQgRXh0ZW5zaW9uczNET3BlbkdMKi4gQWx0aG91
Z2gKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wgd2FzIGFscmVhZHkgc3BsaXQgaW50
byBHcmFwaGljc0NvbnRleHQzRE9wZW5HTCwKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0RPcGVu
R0xDb21tb24sIGFuZCAgR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUywgdGhpcyBwYXRjaAorICAg
ICAgICBpcyBhbiBhdHRlbXB0IHRvIHJlZmFjdG9yIHRoaXMgY29kZSBpbiBhIHdheSB0aGF0IHdp
bGwgaGVscCBCbGFja0JlcnJ5IGFuZAorICAgICAgICBvdGhlciB0ZWFtcyBzdXBwb3J0IFdlYkdM
IG9uIG1vYmlsZSBwbGF0Zm9ybXMgd2l0aCBhcyBsaXR0bGUgdXNlIG9mCisgICAgICAgICIjSUYg
VVNFKE9QRU5HTF9FU18yKSIgaW4gY29tbW9uIGNvZGUgYXMgcG9zc2libGUuIEFsc28gaW5jbHVk
ZWQgaXMgdGhlCisgICAgICAgIHNlcGFyYXRpb24gb2YgRXh0ZW5zaW9uczNET3BlbkdMIGludG8g
RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLAorICAgICAgICBFeHRlbnNpb25zM0RPcGVuR0wsIGFu
ZCBFeHRlbnNpb25zM0RPcGVuR0xFUyBhcyB3ZWxsIGFzIHRoZSBpbnRyb2R1Y3Rpb24KKyAgICAg
ICAgb2YgT3BlbkdMRVNTaGltcy4KKworICAgICAgICBUaGlzIHBhdGNoIGlzIGNyZWF0ZWQgaW4g
bGFyZ2UgcGFydCBieSBKb25hdGhhbiBGZWxkc3RlaW4uCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
OiBubyBuZXcgYmVoYXZpb3VyLgorCisgICAgICAgICogUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtl
OiBSZWNvZ25pemUgQmxhY2tCZXJyeSBhcyBPUEVOR0wgRVMsIGFkZCBuZXcgZmlsZXMgdG8gYnVp
bGQKKyAgICAgICAgKiBUYXJnZXQucHJpOiBBZGQgbmV3IEV4dGVuc2lvbnMzRE9wZW5HTCogdG8g
V2ViR0wgYnVpbGRzCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
M0QuaDogQWRkIHZhbGlkYXRlRGVwdGhTdGVuY2lsLCBtYWtlIHN5c3RlbUFsbG93c011bHRpc2Ft
cGxpbmdPbkFUSUNhcmRzIGEgYSBtZW1iZXIgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9PcGVuR0xFU1NoaW1zLmg6IEFkZGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwOiBN
b3ZlIGNvZGUgdG8gRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uIHdoZXJlIHBvc3NpYmxlCisgICAg
ICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0w6OkV4dGVuc2lvbnMzRE9wZW5HTCk6IFJl
ZmxlY3QgdGhhdCBpdCBpcyBub3cgaW5oZXJpdHMgRXh0ZW5zaW9uczNEQ29tbW9uCisgICAgICAg
IChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0w6OnN1cHBvcnRzRXh0ZW5zaW9uKTogQ29udGFp
bnMgT3BlbkdMIHNwZWNpZmljIGNvZGUgZnJvbSBzdXBwb3J0cworICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0w6OmdldEV4dGVuc2lvbnMpOiBS
ZXR1cm5zIGEgbGlzdCBvZiBleHRlbnNpb25zCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oOiBSZW1vdmUgZnVuY3Rpb25zIG5vdyBpbiBFeHRl
bnNpb25zM0RPcGVuR0xDb21tb24KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRXh0ZW5z
aW9uczNET3BlbkdMKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6RXh0ZW5zaW9uczNET3BlbkdM
Q29tbW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6fkV4
dGVuc2lvbnMzRE9wZW5HTENvbW1vbik6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RP
cGVuR0xDb21tb246OnN1cHBvcnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbjo6ZW5zdXJlRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25z
M0RPcGVuR0xDb21tb246OmlzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25z
M0RPcGVuR0xDb21tb246OmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIpOgorICAgICAgICAoV2Vi
Q29yZTo6RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjpnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNl
QU5HTEUpOiBFeGlzdGVkIGJlZm9yZSwgYnV0IGRpZCBub3RoaW5nLiBOb3cgZG9lcyB3aGF0IGlz
IHNheXMgaXQgZG9lcy4KKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTENvbW1v
bjo6aW5pdGlhbGl6ZUF2YWlsYWJsZUV4dGVuc2lvbnMpOiBNb3ZlZCBmcm9tIEV4dGVuc2lvbnMz
RE9wZW5HTDo6c3VwcG9ydHMKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0
ZW5zaW9uczNET3BlbkdMQ29tbW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMRVM6
OkV4dGVuc2lvbnMzRE9wZW5HTEVTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9w
ZW5HTEVTOjp+RXh0ZW5zaW9uczNET3BlbkdMRVMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5z
aW9uczNET3BlbkdMRVM6OmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcpOgorICAg
ICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMRVM6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VN
dWx0aXNhbXBsZUlNRyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0xFUzo6
Y3JlYXRlVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3Bl
bkdMRVM6OmRlbGV0ZVZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lv
bnMzRE9wZW5HTEVTOjppc1ZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVu
c2lvbnMzRE9wZW5HTEVTOjpiaW5kVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6
RXh0ZW5zaW9uczNET3BlbkdMRVM6OnN1cHBvcnRzRXh0ZW5zaW9uKTogQ29udGFpbnMgT3BlbkdM
RVMgc3BlY2lmaWMgY29kZSBmcm9tIHN1cHBvcnRzCisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNp
b25zM0RPcGVuR0xFUzo6Z2V0RXh0ZW5zaW9ucyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaC4KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoRXh0ZW5zaW9uczNET3BlbkdMRVMpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVBdHRyaWJ1dGVzKToK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OnJlbmRlcmJ1ZmZlclN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OnRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN5
c3RlbUFsbG93c011bHRpc2FtcGxpbmdPbkFUSUNhcmRzKTogTm93IGEgbWVtYmVyIGZ1bmN0aW9u
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEV4dGVuc2lvbnMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5H
TENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRh
dGVEZXB0aFN0ZW5jaWwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNs
ZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc1RleHR1cmUpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
bGluZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpsaW5rUHJv
Z3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGl4ZWxTdG9yZWkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBvbHlnb25PZmZzZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUJ1ZmZlcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVsc0FuZENv
bnZlcnRUb0JHUkFJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6dmFsaWRhdGVBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEV4dGVuc2lvbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN5c3RlbUFsbG93c011bHRpc2FtcGxpbmdPbkFUSUNh
cmRzKTogTm93IGEgbWVtYmVyIGZ1bmN0aW9uLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKToKKwog
MjAxMi0wNy0wNSAgWW9uZ2p1biBaaGFuZyAgPHlvbmdqdW5femhhbmdAYXBwbGUuY29tPgogCiAg
ICAgICAgIENvZGUgcmVmYWN0b3Jpbmc6IG1vdmUgbWltZVR5cGVGcm9tVVRJVHJlZSB0byBhIHNl
cGFyYXRlIGZpbGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCAzNWI2ZDVkZTQz
NjZiMWQ4NTRiMDZkNTAxNDAzMTdhZGEyNmM4ZTVjLi40NzJmMTYzM2I2NjdmNWRiNGI2YjJmZGEw
NGU0YTI1NDY3MWRhYTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTYwNTQs
NiArNjA1NCw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvT3BlbkdMU2hpbXMuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9PcGVuR0xTaGltcy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAgXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaCBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dDNET3BlbkdMLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1C
bGFja0JlcnJ5LmNtYWtlCmluZGV4IDUxNjlhNWRkNTk3M2M3YjBlMjg4ZGEyMTIzMTk0NzE4NjUz
MGVhODEuLjU4N2VkZTNkMDY5MDgwMzczYmVkMmEzMTIyNTJhNTU3OTIxZGNmY2IgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UKQEAgLTIxOCw2ICsyMTgsNyBAQCBpZiAo
RU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQogRU5ESUYgKCkKIAogaWYgKEVOQUJMRV9X
RUJHTCkKKyAgICBBRERfREVGSU5JVElPTlMgKC1EV1RGX1VTRV9PUEVOR0xfRVNfMj0xKQogICAg
IExJU1QoQVBQRU5EIFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICAgICAiJHtXRUJD
T1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1IgogICAgICAgICAiJHtXRUJDT1JFX0RJUn0v
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsIgpAQCAtMjI1LDYgKzIyNiwxMSBAQCBpZiAoRU5BQkxF
X1dFQkdMKQogICAgIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9ibGFja2JlcnJ5L0RyYXdpbmdCdWZmZXJCbGFja0JlcnJ5LmNwcAogICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0dyYXBoaWNzQ29udGV4dDNEQmxhY2tCZXJy
eS5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNE
T3BlbkdMQ29tbW9uLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0M0RPcGVuR0xFUy5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuY3BwCiAgICAgKQogRU5ESUYgKCkKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1Rhcmdl
dC5wcmkKaW5kZXggNTc3MDhlZGM0ODIwMGNkY2JhNDQ4ODhmMmRiZTg4ZDRjNjMzNDk3NS4uNGM3
OGNhNzYwNjg3NzgxMTg3ZjUyNTU1NTM3YTBhYmEzY2QxZGM1ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC0z
OTU2LDE1ICszOTU2LDE5IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XRUJHTD0xKSB7CiAK
ICAgICBjb250YWlucyhRVF9DT05GSUcsIG9wZW5nbCkgfCBjb250YWlucyhRVF9DT05GSUcsIG9w
ZW5nbGVzMikgewogICAgICAgICAhY29udGFpbnMoUVRfQ09ORklHLCBvcGVuZ2xlczIpIHsKLSAg
ICAgICAgICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dDNET3BlbkdMLmNwcAorICAgICAgICAgICAgU09VUkNFUyArPSBcCisgICAgICAgICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwIFwK
KyAgICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVu
R0wuY3BwCiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBTT1VSQ0VTICs9IHBsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAorICAgICAgICAg
ICAgU09VUkNFUyArPSBcCisgICAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAgXAorICAgICAgICAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmNwcAogICAgICAgICB9CiAKICAg
ICAgICAgSEVBREVSUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3Bl
bkdMLmgKIAogICAgICAgICBTT1VSQ0VTICs9IFwKLSAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwIFwKKyAgICAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwIFwKICAgICAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1v
bi5jcHAKIAogICAgICAgICBBTkdMRV9ESVIgPSAkJHJlcGxhY2UoUFdELCAiV2ViQ29yZSIsICJU
aGlyZFBhcnR5L0FOR0xFIikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBlZmE0M2M3ODU4MTJiNDExY2Rk
ZTA5ZjkwZGU5ZjlkYzYzZWU3ZTQ5Li40M2UxNGFkMDMzODBjY2M3ODcyMDYyMDM4NTgzODYxY2E5
MTg5ZTY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zODA3LDYgKzM4MDcsNyBAQAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJUaWxlZExheWVyLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJUaWxlZExheWVyLm1tJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcCcsCisgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RP
cGVuR0wuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dDNET3BlbkdMLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYjY2ZDdmMmYwMjhj
MDkyNjJiZmVhNGI3ZDMxMTI2MzljOWJmY2NkYi4uODY1MjI0MjQ2OWZiNzBkMDgzZWYxNjAyZmM3
YzVhOGJhMGYxOTUxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtMTE5MSw2ICsxMTkxLDggQEAKIAkJNDQ5QjE5RjUwRkE3MkVD
RTAwMTVDQTRBIC8qIEhUTUxQYXJzZXJRdWlya3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0OUIxOUYzMEZBNzJFQ0UwMDE1Q0E0QSAvKiBIVE1MUGFy
c2VyUXVpcmtzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNDRBMjhBQUMxMkRGQjhBQzAwQUU5MjNCIC8qIE1hdGhNTEVsZW1lbnRGYWN0b3J5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NEEyOEFBQjEy
REZCOEFDMDBBRTkyM0IgLyogTWF0aE1MRWxlbWVudEZhY3RvcnkuaCAqLzsgfTsKIAkJNDRBMjhB
QUYxMkRGQjhCRjAwQUU5MjNCIC8qIE1hdGhNTE5hbWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NEEyOEFBRTEyREZCOEJGMDBBRTkyM0IgLyogTWF0
aE1MTmFtZXMuaCAqLzsgfTsKKwkJNDREQUI1QjExNUE2MjM1ODAwOTdDMUU0IC8qIEV4dGVuc2lv
bnMzRE9wZW5HTENvbW1vbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0NERBQjVBRjE1QTYyMzU4MDA5N0MxRTQgLyogRXh0ZW5zaW9uczNET3BlbkdM
Q29tbW9uLmNwcCAqLzsgfTsKKwkJNDREQUI1QjIxNUE2MjM1ODAwOTdDMUU0IC8qIEV4dGVuc2lv
bnMzRE9wZW5HTENvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDREQUI1QjAxNUE2MjM1ODAwOTdDMUU0IC8qIEV4dGVuc2lvbnMzRE9wZW5HTENv
bW1vbi5oICovOyB9OwogCQk0NTA5OUM0MTEzNzBBNzgwMDA1OEQ1MTMgLyogSWNvblVSTC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NTA5OUM0MDEz
NzBBNzgwMDA1OEQ1MTMgLyogSWNvblVSTC5jcHAgKi87IH07CiAJCTQ1MENFQkYwMTUwNzNCQkUw
MDJCQjE0OSAvKiBMYWJlbGFibGVFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1MENFQkVFMTUwNzNCQkUwMDJCQjE0OSAvKiBMYWJlbGFi
bGVFbGVtZW50LmNwcCAqLzsgfTsKIAkJNDUwQ0VCRjExNTA3M0JCRTAwMkJCMTQ5IC8qIExhYmVs
YWJsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQ1MENFQkVGMTUwNzNCQkUwMDJCQjE0OSAvKiBMYWJlbGFibGVFbGVtZW50LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTgyNDcsNiArODI0
OSw4IEBACiAJCTQ0QTI4QUFFMTJERkI4QkYwMEFFOTIzQiAvKiBNYXRoTUxOYW1lcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXRoTUxOYW1lcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0NEQ4REE5ODEzOTU0NUJFMDAzMzdCNzUgLyogU1ZHTVBhdGhFbGVt
ZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTVkdNUGF0aEVsZW1lbnQuaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NEQ4REE5QTEzOTU0NUNEMDAzMzdCNzUgLyogU1ZH
QW5pbWF0ZU1vdGlvbkVsZW1lbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNWR0FuaW1h
dGVNb3Rpb25FbGVtZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDREQUI1
QUYxNUE2MjM1ODAwOTdDMUU0IC8qIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NERBQjVCMDE1QTYyMzU4MDA5N0Mx
RTQgLyogRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0NTA5OUM0MDEzNzBBNzgwMDA1OEQ1MTMgLyogSWNvblVSTC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJY29uVVJMLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNDUwQ0VCRUUxNTA3M0JCRTAwMkJCMTQ5IC8qIExhYmVsYWJsZUVs
ZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGFiZWxhYmxl
RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ1MENFQkVGMTUwNzNC
QkUwMDJCQjE0OSAvKiBMYWJlbGFibGVFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IExhYmVsYWJsZUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTIxNjQ2LDYgKzIxNjUwLDggQEAKIAkJRkJDMjIwREQxMjM3RkJFQjAwQkNGNzg4IC8qIG9w
ZW5nbCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNDRE
QUI1QUYxNUE2MjM1ODAwOTdDMUU0IC8qIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAgKi8s
CisJCQkJNDREQUI1QjAxNUE2MjM1ODAwOTdDMUU0IC8qIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1v
bi5oICovLAogCQkJCTZFNjdEMkE0MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVu
R0wuY3BwICovLAogCQkJCTZFNjdEMkE1MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RP
cGVuR0wuaCAqLywKIAkJCQlGQkMyMjBERTEyMzdGQkVCMDBCQ0Y3ODggLyogR3JhcGhpY3NDb250
ZXh0M0RPcGVuR0wuY3BwICovLApAQCAtMjUxNzksNiArMjUxODUsNyBAQAogCQkJCTRGMzJCQjFC
MTRGQTg1RTgwMEY2QzFBMyAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb24uaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4ODJEQTIzMTU5Mzg0OEQwMDAxMTVFRCAvKiBDU1NUb1N0eWxlTWFwLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxRkFGQkYxOTE1QTVGQTc0MDAwODNBMjAgLyogVVRJVXRpbGl0aWVzLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk0NERBQjVCMjE1QTYyMzU4MDA5N0MxRTQgLyogRXh0ZW5zaW9u
czNET3BlbkdMQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTI4MjM0LDYgKzI4MjQxLDcgQEAK
IAkJCQk1MDk4N0MyNjE1N0Q2NzZEMDBCREE4MzUgLyogQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODgyREEyMDE1OTM4NDZBMDAwMTE1RUQgLyogQ1NT
VG9TdHlsZU1hcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxRkFGQkYxODE1QTVGQTZFMDAwODNB
MjAgLyogVVRJVXRpbGl0aWVzLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNDREQUI1QjExNUE2MjM1
ODAwOTdDMUU0IC8qIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dDNELmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQzRC5oCmluZGV4IGRiZDlkZmVkZTAxM2E0Y2FmMzMyNDYzYWQzMmZjNGUxNTI4MjY0NjcuLjE2
ZDEyZjE2M2JkNWQxZTA5ZjMxMTUyZWRkYTFiMmI2NWUyMmVhNGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaApAQCAtMjAs
NyArMjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaWZuZGVmIEdyYXBoaWNzQ29udGV4
dDNEX2gKQEAgLTkxLDE0ICs5MSwxMiBAQCBjb25zdCBQbGF0Zm9ybTNET2JqZWN0IE51bGxQbGF0
Zm9ybTNET2JqZWN0ID0gMDsKICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dDb250ZXh0Lmg+CiAj
ZW5kaWYKIAotI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+
Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRHJhd2luZ0J1ZmZlcjsKIGNs
YXNzIEV4dGVuc2lvbnMzRDsKLSNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKEdUSykgfHwg
UExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkKKyNpZiBVU0UoT1BFTkdMX0VTXzIpCitjbGFz
cyBFeHRlbnNpb25zM0RPcGVuR0xFUzsKKyNlbHNlCiBjbGFzcyBFeHRlbnNpb25zM0RPcGVuR0w7
CiAjZW5kaWYKICNpZiBQTEFURk9STShRVCkKQEAgLTkyNCw2ICs5MjIsNyBAQCBwdWJsaWM6CiAg
ICAgLy8gaW4gcGFydGljdWxhciBzdGVuY2lsIGFuZCBhbnRpYWxpYXMsIGFuZCBkZXRlcm1pbmUg
d2hpY2ggY291bGQgb3IKICAgICAvLyBjb3VsZCBub3QgYmUgaG9ub3JlZCBiYXNlZCBvbiB0aGUg
Y2FwYWJpbGl0aWVzIG9mIHRoZSBPcGVuR0wKICAgICAvLyBpbXBsZW1lbnRhdGlvbi4KKyAgICB2
b2lkIHZhbGlkYXRlRGVwdGhTdGVuY2lsKGNvbnN0IGNoYXIqIHBhY2tlZERlcHRoU3RlbmNpbEV4
dGVuc2lvbik7CiAgICAgdm9pZCB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKIAogICAgIC8vIFJlYWQg
cmVuZGVyaW5nIHJlc3VsdHMgaW50byBhIHBpeGVsIGFycmF5IHdpdGggdGhlIHNhbWUgZm9ybWF0
IGFzIHRoZQpAQCAtOTU1LDE2ICs5NTQsMzAgQEAgcHVibGljOgogICAgIEhhc2hNYXA8UGxhdGZv
cm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+IG1fc2hhZGVyU291cmNlTWFwOwogCiAgICAg
QU5HTEVXZWJLaXRCcmlkZ2UgbV9jb21waWxlcjsKKyNlbmRpZgogCisjaWYgUExBVEZPUk0oUVQp
ICYmIGRlZmluZWQoUVRfT1BFTkdMX0VTXzIpCisgICAgZnJpZW5kIGNsYXNzIEV4dGVuc2lvbnMz
RFF0OworICAgIE93blB0cjxFeHRlbnNpb25zM0RRdD4gbV9leHRlbnNpb25zOworI2VsaWYgUExB
VEZPUk0oQkxBQ0tCRVJSWSkKKyAgICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9uczNET3BlbkdMRVM7
CisgICAgT3duUHRyPEV4dGVuc2lvbnMzRE9wZW5HTEVTPiBtX2V4dGVuc2lvbnM7CisjZWxpZiAh
UExBVEZPUk0oQ0hST01JVU0pCiAgICAgZnJpZW5kIGNsYXNzIEV4dGVuc2lvbnMzRE9wZW5HTDsK
ICAgICBPd25QdHI8RXh0ZW5zaW9uczNET3BlbkdMPiBtX2V4dGVuc2lvbnM7CisjZW5kaWYKKyAg
ICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOwogCiAgICAgQXR0cmlidXRl
cyBtX2F0dHJzOwogICAgIFZlY3RvcjxWZWN0b3I8ZmxvYXQ+ID4gbV92ZXJ0ZXhBcnJheTsKIAot
ICAgIEdDM0R1aW50IG1fdGV4dHVyZSwgbV9jb21wb3NpdG9yVGV4dHVyZTsKKyAgICBHQzNEdWlu
dCBtX3RleHR1cmU7CisjaWYgIVBMQVRGT1JNKEJMQUNLQkVSUlkpCisgICAgR0MzRHVpbnQgbV9j
b21wb3NpdG9yVGV4dHVyZTsKKyNlbmRpZgogICAgIEdDM0R1aW50IG1fZmJvOwotI2lmIFVTRShP
UEVOR0xfRVNfMikKKworI2lmICFQTEFURk9STShCTEFDS0JFUlJZKQogICAgIEdDM0R1aW50IG1f
ZGVwdGhCdWZmZXI7CiAgICAgR0MzRHVpbnQgbV9zdGVuY2lsQnVmZmVyOwogI2VuZGlmCkBAIC05
ODUsMTAgKzk5OCwxMSBAQCBwdWJsaWM6CiAKICAgICAvLyBFcnJvcnMgcmFpc2VkIGJ5IHN5bnRo
ZXNpemVHTEVycm9yKCkuCiAgICAgTGlzdEhhc2hTZXQ8R0MzRGVudW0+IG1fc3ludGhldGljRXJy
b3JzOwotI2VuZGlmCiAKICAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
OwogICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQzRFByaXZhdGU+IG1fcHJpdmF0ZTsKKworICAg
IGJvb2wgc3lzdGVtQWxsb3dzTXVsdGlzYW1wbGluZ09uQVRJQ2FyZHMoKTsgCiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9PcGVuR0xFU1NoaW1zLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9PcGVuR0xFU1NoaW1zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWRiOTE5MzNmODViYzA2MWNjOWM4NTI1NGRj
MzRmMDljMjkzYTgwOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL09wZW5HTEVTU2hpbXMuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg
TUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgT3BlbkdMRVNTaGltc19oCisjZGVm
aW5lIE9wZW5HTEVTU2hpbXNfaAorCisjaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKKyNkZWZpbmUg
Z2xCaW5kRnJhbWVidWZmZXJFWFQgZ2xCaW5kRnJhbWVidWZmZXIKKyNkZWZpbmUgZ2xGcmFtZWJ1
ZmZlclRleHR1cmUyREVYVCBnbEZyYW1lYnVmZmVyVGV4dHVyZTJECisjZGVmaW5lIGdsQmluZFJl
bmRlcmJ1ZmZlckVYVCBnbEJpbmRSZW5kZXJidWZmZXIKKyNkZWZpbmUgZ2xSZW5kZXJidWZmZXJT
dG9yYWdlRVhUIGdsUmVuZGVyYnVmZmVyU3RvcmFnZQorI2RlZmluZSBnbEZyYW1lYnVmZmVyUmVu
ZGVyYnVmZmVyRVhUIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIKKyNkZWZpbmUgR0xfUkVOREVS
QlVGRkVSX0VYVCBHTF9SRU5ERVJCVUZGRVIKKyNkZWZpbmUgR0xfU1RFTkNJTF9BVFRBQ0hNRU5U
X0VYVCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQKKyNkZWZpbmUgZ2xDaGVja0ZyYW1lYnVmZmVyU3Rh
dHVzRVhUIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1cworI2RlZmluZSBnbERlbGV0ZUZyYW1lYnVm
ZmVyc0VYVCBnbERlbGV0ZUZyYW1lYnVmZmVycworI2RlZmluZSBnbERlbGV0ZVJlbmRlcmJ1ZmZl
cnNFWFQgZ2xEZWxldGVSZW5kZXJidWZmZXJzCisjZGVmaW5lIGdsR2VuUmVuZGVyYnVmZmVyc0VY
VCBnbEdlblJlbmRlcmJ1ZmZlcnMKKyNkZWZpbmUgZ2xHZW5GcmFtZWJ1ZmZlcnNFWFQgZ2xHZW5G
cmFtZWJ1ZmZlcnMKKyNkZWZpbmUgZ2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJp
dkVYVCBnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2CisjZGVmaW5lIGdsR2V0
UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXZFWFQgZ2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdgor
I2RlZmluZSBnbElzUmVuZGVyYnVmZmVyRVhUIGdsSXNSZW5kZXJidWZmZXIKKyNkZWZpbmUgZ2xJ
c0ZyYW1lYnVmZmVyRVhUIGdsSXNGcmFtZWJ1ZmZlcgorI2RlZmluZSBnbEdlbmVyYXRlTWlwbWFw
RVhUIGdsR2VuZXJhdGVNaXBtYXAKKyNkZWZpbmUgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhUIEdM
X0NPTE9SX0FUVEFDSE1FTlQwCisjZGVmaW5lIEdMX0RFUFRIX0FUVEFDSE1FTlRfRVhUIEdMX0RF
UFRIX0FUVEFDSE1FTlQKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQ09NUExFVEVfRVhUIEdMX0ZS
QU1FQlVGRkVSX0NPTVBMRVRFCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0VYVCBHTF9GUkFNRUJV
RkZFUgorI2RlZmluZSBHTF9ERVBUSDI0X1NURU5DSUw4X0VYVCBHTF9ERVBUSDI0X1NURU5DSUw4
X09FUworI2RlZmluZSBHTF9SR0JBOCBHTF9SR0JBOF9PRVMKKyNkZWZpbmUgR0xfUkdCOCBHTF9S
R0I4X09FUworI2RlZmluZSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCAweDhDQTgKKyNkZWZpbmUg
R0xfRFJBV19GUkFNRUJVRkZFUl9FWFQgMHg4Q0E5CisjZGVmaW5lIEZSQU1FQlVGRkVSX0lOQ09N
UExFVEVfTVVMVElTQU1QTEVfRVhUIDB4OTEzNAorI2RlZmluZSBHTF9NQVhfU0FNUExFU19FWFQg
MHg4RDU3CisjZW5kaWYgLy8gUExBVEZPUk0oQkxBQ0tCRVJSWSkKKworI2VuZGlmIC8vIE9wZW5H
TEVTU2hpbXNfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCmluZGV4IGFjMjky
ZDM3NTE1NzkyZWNhMzIyOWU2ZjY3Mzg4ZWIyOGU1MWUwOTYuLmZkMWRhZDA5ZjAxMWI3NmM5ZTU5
ZTQ4NTM5YWM5YzAzZGFhZGIzNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3Bw
CkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMLmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKKyNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgpA
QCAtMTQ2LDYgKzE0NywxMSBAQCBHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNE
KCkKICAgICA6OmdsRGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZtX2Zibyk7CiB9CiAKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKElt
YWdlKiBpbWFnZSwgdW5zaWduZWQgaW50IGZvcm1hdCwgdW5zaWduZWQgaW50IHR5cGUsIGJvb2wg
cHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSwgVmVjdG9y
PHVpbnQ4X3Q+JiBvdXRwdXRWZWN0b3IpCiB7CiAgICAgaWYgKCFpbWFnZSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NDb250ZXh0
M0RDbHV0dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIv
R3JhcGhpY3NDb250ZXh0M0RDbHV0dGVyLmNwcAppbmRleCBjYTBmZmRjMmJjYjlkODkzODZiMTVk
NDhjMzIzOGViM2VmOWIwOTU0Li43ZTIyZjcyMmQ0YmQzNTNkMzMxYmRjNjA3NzVlN2Q3MWFhMDVl
NTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVy
L0dyYXBoaWNzQ29udGV4dDNEQ2x1dHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0NvbnRleHQzRENsdXR0ZXIuY3BwCkBAIC01Niw2
ICs1NiwxMSBAQCBHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKICAgICBu
b3RJbXBsZW1lbnRlZCgpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hh
ZGVyQ29tcGlsZXIoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKIGJvb2wgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFnZSogaW1hZ2UsIHVuc2lnbmVkIGludCBmb3Jt
YXQsIHVuc2lnbmVkIGludCB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3Jl
R2FtbWFBbmRDb2xvclByb2ZpbGUsIFZlY3Rvcjx1aW50OF90PiYgb3V0cHV0VmVjdG9yKQogewog
ICAgIG5vdEltcGxlbWVudGVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0KaW5kZXggY2QwMTUy
MmVmMjJmNjBkNmZjOTExYzMyOWM2ZmU1OTEyMzEwNjllZi4uY2VkNzVhYmFkMjE3YmQ2ZWQ1NTFm
Mzg5MjU3NGQ2ZjRjYTUyNmMyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbQpAQCAtMjgyLDYg
KzI4MiwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzZXRFcnJvck1lc3NhZ2VDYWxsYmFj
ayhQYXNzT3duUHRyPEVycm9yTWVzc2FnZUNhbGxiYWNrPgogewogfQogCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9w
ZW5HTC5jcHAKaW5kZXggNGFhMzQxYzMyNmM3MzU3YjExMGM5ODNkMDM5Y2NkN2JjMzMxNjYxMi4u
YmJlNzdiYjc5ODU0YzkyMzdlOGNiNjcwNmM5NzQ2NTk5NTYyYjkwMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lv
bnMzRE9wZW5HTC5jcHAKQEAgLTQyLDcgKzQyLDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
RXh0ZW5zaW9uczNET3BlbkdMOjpFeHRlbnNpb25zM0RPcGVuR0woR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQpCi0gICAgOiBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucyhmYWxzZSkK
KyAgICA6IEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbihjb250ZXh0KQorICAgICwgbV9pbml0aWFs
aXplZEF2YWlsYWJsZUV4dGVuc2lvbnMoZmFsc2UpCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkK
IHsKIH0KQEAgLTUxLDkxICs1Miw2IEBAIEV4dGVuc2lvbnMzRE9wZW5HTDo6fkV4dGVuc2lvbnMz
RE9wZW5HTCgpCiB7CiB9CiAKLWJvb2wgRXh0ZW5zaW9uczNET3BlbkdMOjpzdXBwb3J0cyhjb25z
dCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgLy8gTm90ZSBvbiBzdXBwb3J0IGZvciBCR1JBOgotICAg
IC8vCi0gICAgLy8gRm9yIE9wZW5HTCBFUzIuMCwgcmVxdWlyZXMgY2hlY2tpbmcgZm9yCi0gICAg
Ly8gR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4IGFuZCBHTF9FWFRfcmVhZF9mb3JtYXRf
YmdyYS4KLSAgICAvLyBGb3IgZGVza3RvcCBHTCwgQkdSQSBoYXMgYmVlbiBzdXBwb3J0ZWQgc2lu
Y2UgT3BlbkdMIDEuMi4KLSAgICAvLwotICAgIC8vIEhvd2V2ZXIsIG5vdGUgdGhhdCB0aGUgR0wg
RVMyIGV4dGVuc2lvbiByZXF1aXJlcyB0aGUKLSAgICAvLyBpbnRlcm5hbEZvcm1hdCB0byBnbFRl
eEltYWdlMkQoKSBiZSBHTF9CR1JBLCB3aGlsZSBkZXNrdG9wIEdMCi0gICAgLy8gd2lsbCBub3Qg
YWNjZXB0IEdMX0JHUkEgKG11c3QgYmUgR0xfUkdCQSksIHNvIHRoaXMgbXVzdCBiZQotICAgIC8v
IGNoZWNrZWQgb24gZWFjaCBwbGF0Zm9ybS4gRGVza3RvcCBHTCBvZmZlcnMgbmVpdGhlcgotICAg
IC8vIEdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCBvciBHTF9FWFRfcmVhZF9mb3JtYXRf
YmdyYSwgc28KLSAgICAvLyB0cmVhdCB0aGVtIGFzIHVuc3VwcG9ydGVkIGhlcmUuCi0gICAgaWYg
KCFtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucykgewotICAgICAgICBTdHJpbmcgZXh0
ZW5zaW9uc1N0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPig6OmdsR2V0U3RyaW5n
KEdMX0VYVEVOU0lPTlMpKSk7Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+IGF2YWlsYWJsZUV4dGVu
c2lvbnM7Ci0gICAgICAgIGV4dGVuc2lvbnNTdHJpbmcuc3BsaXQoIiAiLCBhdmFpbGFibGVFeHRl
bnNpb25zKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhdmFpbGFibGVFeHRlbnNp
b25zLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbV9hdmFpbGFibGVFeHRlbnNpb25zLmFkZChh
dmFpbGFibGVFeHRlbnNpb25zW2ldKTsKLSAgICAgICAgbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4
dGVuc2lvbnMgPSB0cnVlOwotICAgIH0KLSAgICAKLSAgICAvLyBHTF9BTkdMRV9mcmFtZWJ1ZmZl
cl9ibGl0IGFuZCBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSBhcmUgImZha2UiLiBU
aGV5IGFyZSBpbXBsZW1lbnRlZCB1c2luZyBvdGhlcgotICAgIC8vIGV4dGVuc2lvbnMuIEluIHBh
cnRpY3VsYXIgR0xfRVhUX2ZyYW1lYnVmZmVyX2JsaXQgYW5kIEdMX0VYVF9mcmFtZWJ1ZmZlcl9t
dWx0aXNhbXBsZQotICAgIGlmIChuYW1lID09ICJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0IikK
LSAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfRVhUX2Zy
YW1lYnVmZmVyX2JsaXQiKTsKLSAgICBpZiAobmFtZSA9PSAiR0xfQU5HTEVfZnJhbWVidWZmZXJf
bXVsdGlzYW1wbGUiKQotICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRh
aW5zKCJHTF9FWFRfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKTsKLQotICAgIC8vIERlc2t0b3Ag
R0wgYWx3YXlzIHN1cHBvcnRzIEdMX09FU19yZ2I4X3JnYmE4LgotICAgIGlmIChuYW1lID09ICJH
TF9PRVNfcmdiOF9yZ2JhOCIpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gSWYgR0xf
QVJCX3RleHR1cmVfZmxvYXQgaXMgYXZhaWxhYmxlIHRoZW4gd2UgcmVwb3J0IEdMX09FU190ZXh0
dXJlX2Zsb2F0IGFuZAotICAgIC8vIEdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQgYXMgYXZhaWxh
YmxlLgotICAgIGlmIChuYW1lID09ICJHTF9PRVNfdGV4dHVyZV9mbG9hdCIgfHwgbmFtZSA9PSAi
R0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpCi0gICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4
dGVuc2lvbnMuY29udGFpbnMoIkdMX0FSQl90ZXh0dXJlX2Zsb2F0Iik7Ci0gICAgCi0gICAgLy8g
R0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QKLSAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3ZlcnRl
eF9hcnJheV9vYmplY3QiKQotICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNv
bnRhaW5zKCJHTF9BUFBMRV92ZXJ0ZXhfYXJyYXlfb2JqZWN0Iik7Ci0KLSAgICAvLyBEZXNrdG9w
IEdMIGFsd2F5cyBzdXBwb3J0cyB0aGUgc3RhbmRhcmQgZGVyaXZhdGl2ZSBmdW5jdGlvbnMKLSAg
ICBpZiAobmFtZSA9PSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICBpZiAobmFtZSA9PSAiR0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNv
dHJvcGljIikKLSAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygi
R0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7Ci0KLSAgICByZXR1cm4gbV9hdmFp
bGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKG5hbWUpOwotfQotCi12b2lkIEV4dGVuc2lvbnMzRE9w
ZW5HTDo6ZW5zdXJlRW5hYmxlZChjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0jaWYgUExBVEZPUk0o
TUFDKSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RLKQotICAgIGlmIChuYW1lID09ICJH
TF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSB7Ci0gICAgICAgIC8vIEVuYWJsZSBzdXBwb3J0
IGluIEFOR0xFIChpZiBub3QgZW5hYmxlZCBhbHJlYWR5KQotICAgICAgICBBTkdMRVdlYktpdEJy
aWRnZSYgY29tcGlsZXIgPSBtX2NvbnRleHQtPm1fY29tcGlsZXI7Ci0gICAgICAgIFNoQnVpbHRJ
blJlc291cmNlcyBBTkdMRVJlc291cmNlcyA9IGNvbXBpbGVyLmdldFJlc291cmNlcygpOwotICAg
ICAgICBpZiAoIUFOR0xFUmVzb3VyY2VzLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcykgewotICAg
ICAgICAgICAgQU5HTEVSZXNvdXJjZXMuT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzID0gMTsKLSAg
ICAgICAgICAgIGNvbXBpbGVyLnNldFJlc291cmNlcyhBTkdMRVJlc291cmNlcyk7Ci0gICAgICAg
IH0KLSAgICB9Ci0jZWxzZQotICAgIEFTU0VSVF9VTlVTRUQobmFtZSwgc3VwcG9ydHMobmFtZSkp
OwotI2VuZGlmCi19Ci0KLWJvb2wgRXh0ZW5zaW9uczNET3BlbkdMOjppc0VuYWJsZWQoY29uc3Qg
U3RyaW5nJiBuYW1lKQotewotI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oUVQpIHx8IFBM
QVRGT1JNKEdUSykKLSAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVz
IikgewotICAgICAgICBBTkdMRVdlYktpdEJyaWRnZSYgY29tcGlsZXIgPSBtX2NvbnRleHQtPm1f
Y29tcGlsZXI7Ci0gICAgICAgIHJldHVybiBjb21waWxlci5nZXRSZXNvdXJjZXMoKS5PRVNfc3Rh
bmRhcmRfZGVyaXZhdGl2ZXM7Ci0gICAgfQotI2VuZGlmCi0gICAgcmV0dXJuIHN1cHBvcnRzKG5h
bWUpOwotfQotCi1pbnQgRXh0ZW5zaW9uczNET3BlbkdMOjpnZXRHcmFwaGljc1Jlc2V0U3RhdHVz
QVJCKCkKLXsKLSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SOwotfQogCiB2
b2lkIEV4dGVuc2lvbnMzRE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKGxvbmcgc3JjWDAsIGxvbmcg
c3JjWTAsIGxvbmcgc3JjWDEsIGxvbmcgc3JjWTEsIGxvbmcgZHN0WDAsIGxvbmcgZHN0WTAsIGxv
bmcgZHN0WDEsIGxvbmcgZHN0WTEsIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQgbG9uZyBm
aWx0ZXIpCiB7CkBAIC0xOTQsMTkgKzExMCw0OSBAQCB2b2lkIEV4dGVuc2lvbnMzRE9wZW5HTDo6
YmluZFZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCiAjZW5kaWYKIH0KIAot
U3RyaW5nIEV4dGVuc2lvbnMzRE9wZW5HTDo6Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xF
KFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIFVOVVNFRF9QQVJBTShzaGFkZXIpOwot
ICAgIHJldHVybiAiIjsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24gYW5k
IGFkZCBHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UgaW4gc3VwcG9ydHMoKS4KLX0K
LQogdm9pZCBFeHRlbnNpb25zM0RPcGVuR0w6OmNvcHlUZXh0dXJlQ0hST01JVU0oR0MzRGVudW0s
IFBsYXRmb3JtM0RPYmplY3QsIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RpbnQsIEdDM0RlbnVtKQog
ewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbiBhbmQgYWRkIEdMX0NIUk9N
SVVNX2NvcHlfdGV4dHVyZSBpbiBzdXBwb3J0cygpLgogICAgIHJldHVybjsKIH0KIAorYm9vbCBF
eHRlbnNpb25zM0RPcGVuR0w6OnN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSkK
K3sKKyAgICAvLyBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0IGFuZCBHTF9BTkdMRV9mcmFtZWJ1
ZmZlcl9tdWx0aXNhbXBsZSBhcmUgImZha2UiLiBUaGV5IGFyZSBpbXBsZW1lbnRlZCB1c2luZyBv
dGhlcgorICAgIC8vIGV4dGVuc2lvbnMuIEluIHBhcnRpY3VsYXIgR0xfRVhUX2ZyYW1lYnVmZmVy
X2JsaXQgYW5kIEdMX0VYVF9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZQorICAgIGlmIChuYW1lID09
ICJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0IikKKyAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxl
RXh0ZW5zaW9ucy5jb250YWlucygiR0xfRVhUX2ZyYW1lYnVmZmVyX2JsaXQiKTsKKyAgICBpZiAo
bmFtZSA9PSAiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKQorICAgICAgICByZXR1
cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9FWFRfZnJhbWVidWZmZXJfbXVs
dGlzYW1wbGUiKTsKKworICAgIC8vIERlc2t0b3AgR0wgYWx3YXlzIHN1cHBvcnRzIEdMX09FU19y
Z2I4X3JnYmE4LgorICAgIGlmIChuYW1lID09ICJHTF9PRVNfcmdiOF9yZ2JhOCIpCisgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgLy8gSWYgR0xfQVJCX3RleHR1cmVfZmxvYXQgaXMgYXZhaWxh
YmxlIHRoZW4gd2UgcmVwb3J0IEdMX09FU190ZXh0dXJlX2Zsb2F0IGFuZAorICAgIC8vIEdMX09F
U190ZXh0dXJlX2hhbGZfZmxvYXQgYXMgYXZhaWxhYmxlLgorICAgIGlmIChuYW1lID09ICJHTF9P
RVNfdGV4dHVyZV9mbG9hdCIgfHwgbmFtZSA9PSAiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIp
CisgICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0FSQl90
ZXh0dXJlX2Zsb2F0Iik7CisKKyAgICAvLyBHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdAorICAg
IGlmIChuYW1lID09ICJHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdCIpCisgICAgICAgIHJldHVy
biBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0FQUExFX3ZlcnRleF9hcnJheV9v
YmplY3QiKTsKKworICAgIC8vIERlc2t0b3AgR0wgYWx3YXlzIHN1cHBvcnRzIHRoZSBzdGFuZGFy
ZCBkZXJpdmF0aXZlIGZ1bmN0aW9ucworICAgIGlmIChuYW1lID09ICJHTF9PRVNfc3RhbmRhcmRf
ZGVyaXZhdGl2ZXMiKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChuYW1lID09ICJH
TF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKQorICAgICAgICByZXR1cm4gbV9hdmFp
bGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9w
aWMiKTsKKworICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMobmFtZSk7
Cit9CisKK1N0cmluZyBFeHRlbnNpb25zM0RPcGVuR0w6OmdldEV4dGVuc2lvbnMoKQoreworICAg
IHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmlu
ZyhHTF9FWFRFTlNJT05TKSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBFTkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmgKaW5kZXggMmIyZDMwYTA5
MGU1NGZjYTFkMDY0NjJhZTcxZGQ3ZWM4NzJiNTQ0Yy4uYTI3ODliZGNjYzA1ZGVhNGQ2ZGY5YjNi
NGM0Nzc3ZjdiMTllYTEyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaApAQCAtMjYsNyArMjYs
NyBAQAogI2lmbmRlZiBFeHRlbnNpb25zM0RPcGVuR0xfaAogI2RlZmluZSBFeHRlbnNpb25zM0RP
cGVuR0xfaAogCi0jaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCisjaW5jbHVkZSAiRXh0ZW5zaW9u
czNET3BlbkdMQ29tbW9uLmgiCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CkBAIC0zNCwxNSArMzQsMTEgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBFeHRlbnNpb25zM0RPcGVuR0wgOiBwdWJsaWMgRXh0ZW5zaW9uczNE
IHsKK2NsYXNzIEV4dGVuc2lvbnMzRE9wZW5HTCA6IHB1YmxpYyBFeHRlbnNpb25zM0RPcGVuR0xD
b21tb24gewogcHVibGljOgogICAgIHZpcnR1YWwgfkV4dGVuc2lvbnMzRE9wZW5HTCgpOwogCiAg
ICAgLy8gRXh0ZW5zaW9uczNEIG1ldGhvZHMuCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzKGNv
bnN0IFN0cmluZyYpOwotICAgIHZpcnR1YWwgdm9pZCBlbnN1cmVFbmFibGVkKGNvbnN0IFN0cmlu
ZyYpOwotICAgIHZpcnR1YWwgYm9vbCBpc0VuYWJsZWQoY29uc3QgU3RyaW5nJik7Ci0gICAgdmly
dHVhbCBpbnQgZ2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpOwogICAgIHZpcnR1YWwgdm9pZCBi
bGl0RnJhbWVidWZmZXIobG9uZyBzcmNYMCwgbG9uZyBzcmNZMCwgbG9uZyBzcmNYMSwgbG9uZyBz
cmNZMSwgbG9uZyBkc3RYMCwgbG9uZyBkc3RZMCwgbG9uZyBkc3RYMSwgbG9uZyBkc3RZMSwgdW5z
aWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nIGZpbHRlcik7CiAgICAgdmlydHVhbCB2b2lk
IHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5z
aWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25l
ZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7CiAgICAgCkBAIC01MCwxNCArNDYs
MTYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVWZXJ0ZXhBcnJheU9FUyhQbGF0
Zm9ybTNET2JqZWN0KTsKICAgICB2aXJ0dWFsIEdDM0Rib29sZWFuIGlzVmVydGV4QXJyYXlPRVMo
UGxhdGZvcm0zRE9iamVjdCk7CiAgICAgdmlydHVhbCB2b2lkIGJpbmRWZXJ0ZXhBcnJheU9FUyhQ
bGF0Zm9ybTNET2JqZWN0KTsKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRUcmFuc2xhdGVkU2hhZGVy
U291cmNlQU5HTEUoUGxhdGZvcm0zRE9iamVjdCk7CiAgICAgdmlydHVhbCB2b2lkIGNvcHlUZXh0
dXJlQ0hST01JVU0oR0MzRGVudW0sIFBsYXRmb3JtM0RPYmplY3QsIFBsYXRmb3JtM0RPYmplY3Qs
IEdDM0RpbnQsIEdDM0RlbnVtKTsKIAotcHJpdmF0ZToKK3Byb3RlY3RlZDoKICAgICAvLyBUaGlz
IGNsYXNzIG9ubHkgbmVlZHMgdG8gYmUgaW5zdGFudGlhdGVkIGJ5IEdyYXBoaWNzQ29udGV4dDNE
IGltcGxlbWVudGF0aW9ucy4KICAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiAg
ICAgRXh0ZW5zaW9uczNET3BlbkdMKEdyYXBoaWNzQ29udGV4dDNEKik7CiAKKyAgICB2aXJ0dWFs
IGJvb2wgc3VwcG9ydHNFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmKTsKKyAgICB2aXJ0dWFs
IFN0cmluZyBnZXRFeHRlbnNpb25zKCk7CisKICAgICBib29sIG1faW5pdGlhbGl6ZWRBdmFpbGFi
bGVFeHRlbnNpb25zOwogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2F2YWlsYWJsZUV4dGVuc2lvbnM7
CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjhlNDY4ZDU0ZDdkYzNhYTI0NDdmNzVhNDgyOWU0NGFiYzAzOWZmNjEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNE
T3BlbkdMQ29tbW9uLmNwcApAQCAtMCwwICsxLDE0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCR0wpCisjaW5jbHVkZSAiRXh0
ZW5zaW9uczNET3BlbkdMQ29tbW9uLmgiCisKKyNpbmNsdWRlICJBTkdMRVdlYktpdEJyaWRnZS5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisKKyNpZiBQTEFURk9STShCTEFDS0JF
UlJZKQorI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUxvZy5oPgorI2VuZGlmCisKKyNpZiBV
U0UoT1BFTkdMX0VTXzIpCisjaW5jbHVkZSAiT3BlbkdMRVNTaGltcy5oIgorI2luY2x1ZGUgPEdM
RVMyL2dsMi5oPgorI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgorI2VsaWYgUExBVEZPUk0oTUFD
KQorI2luY2x1ZGUgPE9wZW5HTC9nbC5oPgorI2VsaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9S
TShFRkwpIHx8IFBMQVRGT1JNKFFUKQorI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCisjZW5kaWYK
KworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitFeHRl
bnNpb25zM0RPcGVuR0xDb21tb246OkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbihHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCkKKyAgICA6IG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25z
KGZhbHNlKQorICAgICwgbV9jb250ZXh0KGNvbnRleHQpCit7Cit9CisKK0V4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbjo6fkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbigpCit7Cit9CisKK2Jvb2wgRXh0
ZW5zaW9uczNET3BlbkdMQ29tbW9uOjpzdXBwb3J0cyhjb25zdCBTdHJpbmcmIG5hbWUpCit7Cisg
ICAgaWYgKCFtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucykKKyAgICAgICAgaW5pdGlh
bGl6ZUF2YWlsYWJsZUV4dGVuc2lvbnMoKTsKKworICAgIHJldHVybiBzdXBwb3J0c0V4dGVuc2lv
bihuYW1lKTsKK30KKwordm9pZCBFeHRlbnNpb25zM0RPcGVuR0xDb21tb246OmVuc3VyZUVuYWJs
ZWQoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmIChuYW1lID09ICJHTF9PRVNfc3RhbmRh
cmRfZGVyaXZhdGl2ZXMiKSB7CisgICAgICAgIC8vIEVuYWJsZSBzdXBwb3J0IGluIEFOR0xFIChp
ZiBub3QgZW5hYmxlZCBhbHJlYWR5KQorICAgICAgICBBTkdMRVdlYktpdEJyaWRnZSYgY29tcGls
ZXIgPSBtX2NvbnRleHQtPm1fY29tcGlsZXI7CisgICAgICAgIFNoQnVpbHRJblJlc291cmNlcyBB
TkdMRVJlc291cmNlcyA9IGNvbXBpbGVyLmdldFJlc291cmNlcygpOworICAgICAgICBpZiAoIUFO
R0xFUmVzb3VyY2VzLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcykgeworICAgICAgICAgICAgQU5H
TEVSZXNvdXJjZXMuT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzID0gMTsKKyAgICAgICAgICAgIGNv
bXBpbGVyLnNldFJlc291cmNlcyhBTkdMRVJlc291cmNlcyk7CisgICAgICAgIH0KKyAgICB9Cit9
CisKK2Jvb2wgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjppc0VuYWJsZWQoY29uc3QgU3RyaW5n
JiBuYW1lKQoreworICAgIGlmIChuYW1lID09ICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMi
KSB7CisgICAgICAgIEFOR0xFV2ViS2l0QnJpZGdlJiBjb21waWxlciA9IG1fY29udGV4dC0+bV9j
b21waWxlcjsKKyAgICAgICAgcmV0dXJuIGNvbXBpbGVyLmdldFJlc291cmNlcygpLk9FU19zdGFu
ZGFyZF9kZXJpdmF0aXZlczsKKyAgICB9CisgICAgcmV0dXJuIHN1cHBvcnRzKG5hbWUpOworfQor
CitpbnQgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjpnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJC
KCkKK3sKKyAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SOworfQorCitTdHJp
bmcgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjpnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5H
TEUoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHNoYWRlcik7CisgICAg
aW50IEdMc2hhZGVyVHlwZTsKKyAgICBBTkdMRVNoYWRlclR5cGUgc2hhZGVyVHlwZTsKKworICAg
IEFOR0xFV2ViS2l0QnJpZGdlJiBjb21waWxlciA9IG1fY29udGV4dC0+bV9jb21waWxlcjsKKwor
ICAgIG1fY29udGV4dC0+Z2V0U2hhZGVyaXYoc2hhZGVyLCBHcmFwaGljc0NvbnRleHQzRDo6U0hB
REVSX1RZUEUsICZHTHNoYWRlclR5cGUpOworCisgICAgaWYgKEdMc2hhZGVyVHlwZSA9PSBHcmFw
aGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUikKKyAgICAgICAgc2hhZGVyVHlwZSA9IFNIQURF
Ul9UWVBFX1ZFUlRFWDsKKyAgICBlbHNlIGlmIChHTHNoYWRlclR5cGUgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUikKKyAgICAgICAgc2hhZGVyVHlwZSA9IFNIQURFUl9UWVBF
X0ZSQUdNRU5UOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuICIiOyAvLyBJbnZhbGlkIHNoYWRl
ciB0eXBlLgorCisgICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBHcmFwaGljc0NvbnRleHQz
RDo6U2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRvciByZXN1bHQgPSBtX2NvbnRleHQtPm1fc2hh
ZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKworICAgIGlmIChyZXN1bHQgPT0gbV9jb250ZXh0
LT5tX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuICIiOworCisgICAgR3Jh
cGhpY3NDb250ZXh0M0Q6OlNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+c2Vjb25k
OworCisgICAgU3RyaW5nIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7CisgICAgU3RyaW5nIHNoYWRl
ckluZm9Mb2c7CisKKyAgICBib29sIGlzVmFsaWQgPSBjb21waWxlci52YWxpZGF0ZVNoYWRlclNv
dXJjZShlbnRyeS5zb3VyY2UudXRmOCgpLmRhdGEoKSwgc2hhZGVyVHlwZSwgdHJhbnNsYXRlZFNo
YWRlclNvdXJjZSwgc2hhZGVySW5mb0xvZyk7CisKKyAgICBlbnRyeS5sb2cgPSBzaGFkZXJJbmZv
TG9nOworICAgIGVudHJ5LmlzVmFsaWQgPSBpc1ZhbGlkOworCisgICAgaWYgKCFpc1ZhbGlkKQor
ICAgICAgICByZXR1cm4gIiI7CisKKyAgICByZXR1cm4gdHJhbnNsYXRlZFNoYWRlclNvdXJjZTsK
K30KKwordm9pZCBFeHRlbnNpb25zM0RPcGVuR0xDb21tb246OmluaXRpYWxpemVBdmFpbGFibGVF
eHRlbnNpb25zKCkKK3sKKyAgICBTdHJpbmcgZXh0ZW5zaW9uc1N0cmluZyA9IGdldEV4dGVuc2lv
bnMoKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBhdmFpbGFibGVFeHRlbnNpb25zOworICAgIGV4dGVu
c2lvbnNTdHJpbmcuc3BsaXQoIiAiLCBhdmFpbGFibGVFeHRlbnNpb25zKTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGF2YWlsYWJsZUV4dGVuc2lvbnMuc2l6ZSgpOyArK2kpCisgICAgICAg
IG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5hZGQoYXZhaWxhYmxlRXh0ZW5zaW9uc1tpXSk7CisgICAg
bV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnMgPSB0cnVlOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29t
bW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9u
czNET3BlbkdMQ29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTAxODM5ZTZlM2U0Yjk1YTFlNTY2Y2QxMWY4
YTI3ZDY5YmViMzllNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uaApAQCAtMCwwICsxLDcw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBFeHRlbnNpb25zM0RPcGVuR0xDb21tb25faAorI2RlZmluZSBF
eHRlbnNpb25zM0RPcGVuR0xDb21tb25faAorCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCisK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbiA6IHB1YmxpYyBFeHRlbnNpb25zM0Qg
eworcHVibGljOgorICAgIHZpcnR1YWwgfkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbigpOworCisg
ICAgLy8gRXh0ZW5zaW9uczNEIG1ldGhvZHMuCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzKGNv
bnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCBlbnN1cmVFbmFibGVkKGNvbnN0IFN0cmlu
ZyYpOworICAgIHZpcnR1YWwgYm9vbCBpc0VuYWJsZWQoY29uc3QgU3RyaW5nJik7CisgICAgdmly
dHVhbCBpbnQgZ2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpOworCisgICAgdmlydHVhbCBQbGF0
Zm9ybTNET2JqZWN0IGNyZWF0ZVZlcnRleEFycmF5T0VTKCkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBkZWxldGVWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KSA9IDA7CisgICAgdmlydHVh
bCBHQzNEYm9vbGVhbiBpc1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgYmluZFZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpID0gMDsK
KworICAgIHZpcnR1YWwgU3RyaW5nIGdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShQbGF0
Zm9ybTNET2JqZWN0KTsKKworcHJvdGVjdGVkOgorICAgIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1v
bihHcmFwaGljc0NvbnRleHQzRCopOworCisgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVBdmFp
bGFibGVFeHRlbnNpb25zKCk7CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRXh0ZW5zaW9uKGNv
bnN0IFN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRFeHRlbnNpb25zKCkgPSAw
OworCisgICAgYm9vbCBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9uczsKKyAgICBIYXNo
U2V0PFN0cmluZz4gbV9hdmFpbGFibGVFeHRlbnNpb25zOworCisgICAgLy8gV2VhayBwb2ludGVy
IGJhY2sgdG8gR3JhcGhpY3NDb250ZXh0M0QKKyAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250
ZXh0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRXh0ZW5zaW9u
czNET3BlbkdMQ29tbW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjljNjUwNzE1ZWVlMjIzYTlkMDc3MGNkZDI2MWQxNDE1MjFjM2YyYTcKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9u
czNET3BlbkdMRVMuY3BwCkBAIC0wLDAgKzEsMTQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpZiBFTkFCTEUoV0VCR0wpCisjaW5jbHVkZSAiRXh0ZW5z
aW9uczNET3BlbkdMRVMuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5j
bHVkZSA8RUdML2VnbC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK0V4dGVuc2lvbnMzRE9wZW5HTEVTOjpFeHRlbnNpb25zM0RPcGVuR0xFUyhH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKKyAgICA6IEV4dGVuc2lvbnMzRE9wZW5HTENvbW1v
bihjb250ZXh0KQorICAgICwgbV9zdXBwb3J0c09FU3ZlcnRleEFycmF5T2JqZWN0KGZhbHNlKQor
ICAgICwgbV9zdXBwb3J0c0lNR011bHRpc2FtcGxlZFJlbmRlclRvVGV4dHVyZShmYWxzZSkKKyAg
ICAsIG1fZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HKDApCisgICAgLCBtX2ds
UmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HKDApCisgICAgLCBtX2dsQmluZFZlcnRl
eEFycmF5T0VTKDApCisgICAgLCBtX2dsRGVsZXRlVmVydGV4QXJyYXlzT0VTKDApCisgICAgLCBt
X2dsR2VuVmVydGV4QXJyYXlzT0VTKDApCisgICAgLCBtX2dsSXNWZXJ0ZXhBcnJheU9FUygwKQor
eworfQorCitFeHRlbnNpb25zM0RPcGVuR0xFUzo6fkV4dGVuc2lvbnMzRE9wZW5HTEVTKCkKK3sK
K30KKwordm9pZCBFeHRlbnNpb25zM0RPcGVuR0xFUzo6ZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0
aXNhbXBsZUlNRyh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50
LCB1bnNpZ25lZCBsb25nIHRleHRhcmdldCwgdW5zaWduZWQgaW50IHRleHR1cmUsIGludCBsZXZl
bCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzKQoreworICAgIGlmIChtX2dsRnJhbWVidWZmZXJUZXh0
dXJlMkRNdWx0aXNhbXBsZUlNRykKKyAgICAgICAgbV9nbEZyYW1lYnVmZmVyVGV4dHVyZTJETXVs
dGlzYW1wbGVJTUcodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVs
LCBzYW1wbGVzKTsKKyAgICBlbHNlCisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworfQorCit2b2lkIEV4dGVuc2lvbnMzRE9wZW5HTEVT
OjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUcodW5zaWduZWQgbG9uZyB0YXJnZXQs
IHVuc2lnbmVkIGxvbmcgc2FtcGxlcywgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5z
aWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCit7CisgICAgaWYgKG1fZ2xS
ZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUcpCisgICAgICAgIG1fZ2xSZW5kZXJidWZm
ZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUcodGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCk7CisgICAgZWxzZQorICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVH
TEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKK30KKworUGxhdGZvcm0zRE9iamVjdCBFeHRl
bnNpb25zM0RPcGVuR0xFUzo6Y3JlYXRlVmVydGV4QXJyYXlPRVMoKQoreworICAgIG1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKG1fZ2xHZW5WZXJ0ZXhBcnJheXNPRVMp
IHsKKyAgICAgICAgR0x1aW50IGFycmF5ID0gMDsKKyAgICAgICAgbV9nbEdlblZlcnRleEFycmF5
c09FUygxLCAmYXJyYXkpOworICAgICAgICByZXR1cm4gYXJyYXk7CisgICAgfQorCisgICAgbV9j
b250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgcmV0
dXJuIDA7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uczNET3BlbkdMRVM6OmRlbGV0ZVZlcnRleEFycmF5
T0VTKFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCit7CisgICAgaWYgKCFhcnJheSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
bV9nbERlbGV0ZVZlcnRleEFycmF5c09FUykKKyAgICAgICAgbV9nbERlbGV0ZVZlcnRleEFycmF5
c09FUygxLCAmYXJyYXkpOworICAgIGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cit9CisKK0dDM0Rib29sZWFuIEV4dGVuc2lv
bnMzRE9wZW5HTEVTOjppc1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCit7
CisgICAgaWYgKCFhcnJheSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAobV9nbElzVmVydGV4QXJyYXlPRVMp
CisgICAgICAgIHJldHVybiBtX2dsSXNWZXJ0ZXhBcnJheU9FUyhhcnJheSk7CisKKyAgICBtX2Nv
bnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uczNET3BlbkdMRVM6OmJpbmRWZXJ0ZXhBcnJh
eU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQoreworICAgIGlmICghYXJyYXkpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KG1fZ2xCaW5kVmVydGV4QXJyYXlPRVMpCisgICAgICAgIG1fZ2xCaW5kVmVydGV4QXJyYXlPRVMo
YXJyYXkpOworICAgIGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Cit9CisKKworYm9vbCBFeHRlbnNpb25zM0RPcGVuR0xFUzo6
c3VwcG9ydHNFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmIChtX2F2YWls
YWJsZUV4dGVuc2lvbnMuY29udGFpbnMobmFtZSkpIHsKKyAgICAgICAgaWYgKG5hbWUgPT0gIkdM
X09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IiAmJiAhbV9zdXBwb3J0c09FU3ZlcnRleEFycmF5T2Jq
ZWN0KSB7CisgICAgICAgICAgICBtX2dsQmluZFZlcnRleEFycmF5T0VTID0gcmVpbnRlcnByZXRf
Y2FzdDxQRk5HTEJJTkRWRVJURVhBUlJBWU9FU1BST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbEJp
bmRWZXJ0ZXhBcnJheU9FUyIpKTsKKyAgICAgICAgICAgIG1fZ2xHZW5WZXJ0ZXhBcnJheXNPRVMg
PSByZWludGVycHJldF9jYXN0PFBGTkdMR0VOVkVSVEVYQVJSQVlTT0VTUFJPQz4oZWdsR2V0UHJv
Y0FkZHJlc3MoImdsR2VuVmVydGV4QXJyYXlzT0VTIikpOworICAgICAgICAgICAgbV9nbERlbGV0
ZVZlcnRleEFycmF5c09FUyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xERUxFVEVWRVJURVhBUlJB
WVNPRVNQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMiKSk7
CisgICAgICAgICAgICBtX2dsSXNWZXJ0ZXhBcnJheU9FUyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZO
R0xJU1ZFUlRFWEFSUkFZT0VTUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsSXNWZXJ0ZXhBcnJh
eU9FUyIpKTsKKyAgICAgICAgICAgIG1fc3VwcG9ydHNPRVN2ZXJ0ZXhBcnJheU9iamVjdCA9IHRy
dWU7CisgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiR0xfSU1HX211bHRpc2FtcGxlZF9yZW5k
ZXJfdG9fdGV4dHVyZSIgJiYgIW1fc3VwcG9ydHNJTUdNdWx0aXNhbXBsZWRSZW5kZXJUb1RleHR1
cmUpIHsKKyAgICAgICAgICAgIG1fZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1H
ID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTEZSQU1FQlVGRkVSVEVYVFVSRTJETVVMVElTQU1QTEVJ
TUdQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2Ft
cGxlSU1HIikpOworICAgICAgICAgICAgbV9nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBs
ZUlNRyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xSRU5ERVJCVUZGRVJTVE9SQUdFTVVMVElTQU1Q
TEVJTUdQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlz
YW1wbGVJTUciKSk7CisgICAgICAgICAgICBtX3N1cHBvcnRzSU1HTXVsdGlzYW1wbGVkUmVuZGVy
VG9UZXh0dXJlID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1N0cmluZyBFeHRlbnNpb25zM0RPcGVuR0xFUzo6
Z2V0RXh0ZW5zaW9ucygpCit7CisgICAgcmV0dXJuIFN0cmluZyhyZWludGVycHJldF9jYXN0PGNv
bnN0IGNoYXIqPig6OmdsR2V0U3RyaW5nKEdMX0VYVEVOU0lPTlMpKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xF
Uy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMz
RE9wZW5HTEVTLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTAyMjJjYTRkN2E5NGEwOGMyZjk3NTYxNGJmMmJjNjBl
MDAxZTA5NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIEV4dGVuc2lvbnMzRE9wZW5HTEVTX2gKKyNkZWZpbmUgRXh0ZW5zaW9uczNET3Bl
bkdMRVNfaAorCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmgiCisKKyNpbmNs
dWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBFeHRlbnNpb25zM0RPcGVuR0xFUyA6IHB1YmxpYyBFeHRlbnNp
b25zM0RPcGVuR0xDb21tb24geworcHVibGljOgorICAgIHZpcnR1YWwgfkV4dGVuc2lvbnMzRE9w
ZW5HTEVTKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNh
bXBsZUlNRyh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1
bnNpZ25lZCBsb25nIHRleHRhcmdldCwgdW5zaWduZWQgaW50IHRleHR1cmUsIGludCBsZXZlbCwg
dW5zaWduZWQgbG9uZyBzYW1wbGVzKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyYnVmZmVyU3Rv
cmFnZU11bHRpc2FtcGxlSU1HKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHNh
bXBsZXMsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgs
IHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKKworICAgIHZpcnR1YWwgUGxhdGZvcm0zRE9iamVjdCBj
cmVhdGVWZXJ0ZXhBcnJheU9FUygpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVWZXJ0ZXhBcnJh
eU9FUyhQbGF0Zm9ybTNET2JqZWN0KTsKKyAgICB2aXJ0dWFsIEdDM0Rib29sZWFuIGlzVmVydGV4
QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCk7CisgICAgdmlydHVhbCB2b2lkIGJpbmRWZXJ0ZXhB
cnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KTsKKworcHJvdGVjdGVkOgorICAgIC8vIFRoaXMgY2xh
c3Mgb25seSBuZWVkcyB0byBiZSBpbnN0YW50aWF0ZWQgYnkgR3JhcGhpY3NDb250ZXh0M0QgaW1w
bGVtZW50YXRpb25zLgorICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKKyAgICBF
eHRlbnNpb25zM0RPcGVuR0xFUyhHcmFwaGljc0NvbnRleHQzRCopOworCisgICAgdmlydHVhbCBi
b29sIHN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgU3RyaW5n
IGdldEV4dGVuc2lvbnMoKTsKKworICAgIGJvb2wgbV9zdXBwb3J0c09FU3ZlcnRleEFycmF5T2Jq
ZWN0OworICAgIGJvb2wgbV9zdXBwb3J0c0lNR011bHRpc2FtcGxlZFJlbmRlclRvVGV4dHVyZTsK
KworICAgIFBGTkdMRlJBTUVCVUZGRVJURVhUVVJFMkRNVUxUSVNBTVBMRUlNR1BST0MgbV9nbEZy
YW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUc7CisgICAgUEZOR0xSRU5ERVJCVUZGRVJT
VE9SQUdFTVVMVElTQU1QTEVJTUdQUk9DIG1fZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1w
bGVJTUc7CisgICAgUEZOR0xCSU5EVkVSVEVYQVJSQVlPRVNQUk9DIG1fZ2xCaW5kVmVydGV4QXJy
YXlPRVM7CisgICAgUEZOR0xERUxFVEVWRVJURVhBUlJBWVNPRVNQUk9DIG1fZ2xEZWxldGVWZXJ0
ZXhBcnJheXNPRVM7CisgICAgUEZOR0xHRU5WRVJURVhBUlJBWVNPRVNQUk9DIG1fZ2xHZW5WZXJ0
ZXhBcnJheXNPRVM7CisgICAgUEZOR0xJU1ZFUlRFWEFSUkFZT0VTUFJPQyBtX2dsSXNWZXJ0ZXhB
cnJheU9FUzsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEV4dGVu
c2lvbnMzRE9wZW5HTEVTX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCmlu
ZGV4IDNmNDdiNmUyMWViMjU1MjQzZWVlYTRiZjMxOTg1M2FiYmY3NmEyZGMuLjVmMDA1MDU5OWM2
YWI2YjQxMzIwMzI1ODBhNTQwYTNjMjZlNzI5YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dDNET3BlbkdMLmNwcApAQCAtMzQsNiArMzQsMTEgQEAKICNpbmNsdWRlICJJbnRTaXplLmgiCiAj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKIAorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNs
dWRlIDxjc3RyaW5nPgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKwogI2lmIFBMQVRGT1JNKE1BQykKICNpbmNsdWRlIDxPcGVuR0wv
Z2wuaD4KICNlbGlmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShR
VCkKQEAgLTQ3LDYgKzUyLDMyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHNB
bmRDb252ZXJ0VG9CR1JBSWZOZWNlc3NhcnkoaW50IHgsIGludCB5LCBpbnQKICAgICA6OmdsUmVh
ZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBHTF9CR1JBLCBHTF9VTlNJR05FRF9JTlRfOF84
XzhfOF9SRVYsIHBpeGVscyk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRl
QXR0cmlidXRlcygpCit7CisgICAgRXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0gZ2V0RXh0ZW5z
aW9ucygpOworICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpIHsKKyAgICAgICAgY29uc3QgY2hhciog
cGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uID0gaXNHTEVTMkNvbXBsaWFudCgpID8gIkdMX09F
U19wYWNrZWRfZGVwdGhfc3RlbmNpbCIgOiAiR0xfRVhUX3BhY2tlZF9kZXB0aF9zdGVuY2lsIjsK
KyAgICAgICAgaWYgKGV4dGVuc2lvbnMtPnN1cHBvcnRzKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVu
c2lvbikpIHsKKyAgICAgICAgICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQocGFja2VkRGVw
dGhTdGVuY2lsRXh0ZW5zaW9uKTsKKyAgICAgICAgICAgIC8vIEZvcmNlIGRlcHRoIGlmIHN0ZW5j
aWwgaXMgdHJ1ZS4KKyAgICAgICAgICAgIG1fYXR0cnMuZGVwdGggPSB0cnVlOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIG1fYXR0cnMuc3RlbmNpbCA9IGZhbHNlOworICAgIH0KKyAgICBp
ZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAgYm9vbCBpc1ZhbGlkVmVuZG9yID0gdHJ1
ZTsKKyAgICAgICAgLy8gQ3VycmVudGx5IGluIE1hYyB3ZSBvbmx5IHR1cm4gb24gYW50aWFsaWFz
IGlmIHZlbmRvciBpcyBOVklESUEsCisgICAgICAgIC8vIG9yIGlmIEFUSSBhbmQgb24gMTAuNy4y
IGFuZCBhYm92ZS4KKyAgICAgICAgY29uc3QgY2hhciogdmVuZG9yID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhHTF9WRU5ET1IpKTsKKyAgICAgICAgaWYgKCF2
ZW5kb3IgfHwgKCFzdGQ6OnN0cnN0cih2ZW5kb3IsICJOVklESUEiKSAmJiAhKHN0ZDo6c3Ryc3Ry
KHZlbmRvciwgIkFUSSIpICYmIHN5c3RlbUFsbG93c011bHRpc2FtcGxpbmdPbkFUSUNhcmRzKCkp
KSkKKyAgICAgICAgICAgIGlzVmFsaWRWZW5kb3IgPSBmYWxzZTsKKyAgICAgICAgaWYgKCFpc1Zh
bGlkVmVuZG9yIHx8ICFleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfQU5HTEVfZnJhbWVidWZmZXJf
bXVsdGlzYW1wbGUiKSB8fCBpc0dMRVMyQ29tcGxpYW50KCkpCisgICAgICAgICAgICBtX2F0dHJz
LmFudGlhbGlhcyA9IGZhbHNlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBleHRlbnNpb25z
LT5lbnN1cmVFbmFibGVkKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpOworICAg
IH0KK30KKwogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZUZCT3MoY29uc3QgSW50U2l6
ZSYgc2l6ZSkKIHsKICAgICBjb25zdCBpbnQgd2lkdGggPSBzaXplLndpZHRoKCk7CkBAIC0xNTEs
NiArMTgyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJ
Zk5lY2Vzc2FyeShjb25zdCBJbnRSZWN0JiByZWN0KQogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
cmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9y
bWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCiB7CiAgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisKICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KSB7CiAgICAgY2FzZSBE
RVBUSF9TVEVOQ0lMOgogICAgICAgICBpbnRlcm5hbGZvcm1hdCA9IEdMX0RFUFRIMjRfU1RFTkNJ
TDhfRVhUOwpAQCAtMjMyLDYgKzI2NCw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRleElt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKICAg
ICBHQzNEZW51bSBvcGVuR0xJbnRlcm5hbEZvcm1hdCA9IGludGVybmFsZm9ybWF0OwogICAgIGlm
ICh0eXBlID09IEdMX0ZMT0FUKSB7CiAgICAgICAgIGlmIChmb3JtYXQgPT0gR0xfUkdCQSkKQEAg
LTI0MSw2ICsyNzQsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZQogICAgIH0KIAogICAgIDo6
Z2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIG9wZW5HTEludGVybmFsRm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKwogICAgIHJldHVybiB0cnVl
OwogfQogCkBAIC0yNTYsNiArMjkwLDMzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFy
RGVwdGgoR0MzRGNsYW1wZiBkZXB0aCkKICAgICA6OmdsQ2xlYXJEZXB0aChkZXB0aCk7CiB9CiAK
K2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnN5c3RlbUFsbG93c011bHRpc2FtcGxpbmdPbkFUSUNh
cmRzKCkKK3sKKyNpZiBQTEFURk9STShNQUMpCisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fU05P
V19MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MSU9OKQorICAgIHJldHVybiB0cnVl
OworI2Vsc2UKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIHN0YXRpYyBTSW50MzIg
dmVyc2lvbjsKKyAgICBpZiAoIXZlcnNpb24pIHsKKyAgICAgICAgaWYgKEdlc3RhbHQoZ2VzdGFs
dFN5c3RlbVZlcnNpb24sICZ2ZXJzaW9uKSAhPSBub0VycikKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03NzkyMiBmb3IgbW9yZSBkZXRhaWxzCisgICAgcmV0dXJuIHZlcnNpb24gPj0gMHgx
MDcyOworI2VuZGlmIC8vIFNOT1dfTEVPUEFSRCBhbmQgTElPTgorI2Vsc2UKKyAgICByZXR1cm4g
ZmFsc2U7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQorfQorCitFeHRlbnNpb25zM0QqIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25zKCkKK3sKKyAgICBpZiAoIW1fZXh0ZW5zaW9ucykK
KyAgICAgICAgbV9leHRlbnNpb25zID0gYWRvcHRQdHIobmV3IEV4dGVuc2lvbnMzRE9wZW5HTCh0
aGlzKSk7CisgICAgcmV0dXJuIG1fZXh0ZW5zaW9ucy5nZXQoKTsKK30KKwogfQogCiAjZW5kaWYg
Ly8gRU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENv
bW1vbi5jcHAKaW5kZXggNDI5ZmM1MWM5MDQ2YzQ0YTUwZWZlY2UxMjljYmYzMWY2MGQ5OTc1ZS4u
NzYyZTM5ZjA5ZGFhOTZmNWMwZGE3MzQ4NDA5NDE4NDVhZGVhOWJmMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3Bl
bkdMQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCkBAIC0zMCw3ICszMCwxMiBAQAog
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKIAorI2luY2x1ZGUgIkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQuaCIKKyNpZiBVU0UoT1BFTkdMX0VTXzIpCisjaW5jbHVkZSAiRXh0ZW5zaW9u
czNET3BlbkdMRVMuaCIKKyNlbHNlCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMLmgiCisj
ZW5kaWYKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZl
ci5oIgogI2luY2x1ZGUgIkltYWdlRGF0YS5oIgpAQCAtNDksMzkgKzU0LDI0IEBACiAjaW5jbHVk
ZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCi0j
aWYgUExBVEZPUk0oTUFDKQorI2lmIFVTRShPUEVOR0xfRVNfMikKKyNpbmNsdWRlICJPcGVuR0xF
U1NoaW1zLmgiCisjZWxpZiBQTEFURk9STShNQUMpCiAjaW5jbHVkZSA8T3BlbkdML2dsLmg+CiAj
ZWxpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oUVQpCiAjaW5j
bHVkZSAiT3BlbkdMU2hpbXMuaCIKICNlbmRpZgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7CisjaWYg
UExBVEZPUk0oQkxBQ0tCRVJSWSkKKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1Mb2cuaD4K
KyNlbmRpZgogCi1zdGF0aWMgYm9vbCBzeXN0ZW1BbGxvd3NNdWx0aXNhbXBsaW5nT25BVElDYXJk
cygpCi17Ci0jaWYgUExBVEZPUk0oTUFDKQotI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1df
TEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTElPTikKLSAgICByZXR1cm4gdHJ1ZTsK
LSNlbHNlCi0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBzdGF0aWMgU0ludDMyIHZl
cnNpb247Ci0gICAgaWYgKCF2ZXJzaW9uKSB7Ci0gICAgICAgIGlmIChHZXN0YWx0KGdlc3RhbHRT
eXN0ZW1WZXJzaW9uLCAmdmVyc2lvbikgIT0gbm9FcnIpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Nzc5MjIgZm9yIG1vcmUgZGV0YWlscwotICAgIHJldHVybiB2ZXJzaW9uID49IDB4MTA3
MjsKLSNlbmRpZiAvLyBTTk9XX0xFT1BBUkQgYW5kIExJT04KLSNlbHNlCi0gICAgcmV0dXJuIGZh
bHNlOwotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKLX0KK25hbWVzcGFjZSBXZWJDb3JlIHsKIAot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVBdHRyaWJ1dGVzKCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnZhbGlkYXRlRGVwdGhTdGVuY2lsKGNvbnN0IGNoYXIqIHBhY2tlZERlcHRo
U3RlbmNpbEV4dGVuc2lvbikKIHsKICAgICBFeHRlbnNpb25zM0QqIGV4dGVuc2lvbnMgPSBnZXRF
eHRlbnNpb25zKCk7CiAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkgewotICAgICAgICBjb25zdCBj
aGFyKiBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24gPSBpc0dMRVMyQ29tcGxpYW50KCkgPyAi
R0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsIiA6ICJHTF9FWFRfcGFja2VkX2RlcHRoX3N0ZW5j
aWwiOwogICAgICAgICBpZiAoZXh0ZW5zaW9ucy0+c3VwcG9ydHMocGFja2VkRGVwdGhTdGVuY2ls
RXh0ZW5zaW9uKSkgewogICAgICAgICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZChwYWNr
ZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pOwogICAgICAgICAgICAgLy8gRm9yY2UgZGVwdGggaWYg
c3RlbmNpbCBpcyB0cnVlLgpAQCAtNDM5LDM2ICs0MjksMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKICAgICBBU1NFUlQo
c2hhZGVyKTsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAotICAgIGludCBHTHNoYWRlclR5
cGU7Ci0gICAgQU5HTEVTaGFkZXJUeXBlIHNoYWRlclR5cGU7Ci0KLSAgICBnbEdldFNoYWRlcml2
KHNoYWRlciwgU0hBREVSX1RZUEUsICZHTHNoYWRlclR5cGUpOwotICAgIAotICAgIGlmIChHTHNo
YWRlclR5cGUgPT0gVkVSVEVYX1NIQURFUikKLSAgICAgICAgc2hhZGVyVHlwZSA9IFNIQURFUl9U
WVBFX1ZFUlRFWDsKLSAgICBlbHNlIGlmIChHTHNoYWRlclR5cGUgPT0gRlJBR01FTlRfU0hBREVS
KQotICAgICAgICBzaGFkZXJUeXBlID0gU0hBREVSX1RZUEVfRlJBR01FTlQ7Ci0gICAgZWxzZQot
ICAgICAgICByZXR1cm47IC8vIEludmFsaWQgc2hhZGVyIHR5cGUuCi0KLSAgICBIYXNoTWFwPFBs
YXRmb3JtM0RPYmplY3QsIFNoYWRlclNvdXJjZUVudHJ5Pjo6aXRlcmF0b3IgcmVzdWx0ID0gbV9z
aGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOworICAgIFN0cmluZyB0cmFuc2xhdGVkU2hhZGVy
U291cmNlID0gbV9leHRlbnNpb25zLT5nZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoc2hh
ZGVyKTsKIAotICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisgICAg
aWYgKCF0cmFuc2xhdGVkU2hhZGVyU291cmNlLmxlbmd0aCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnNlY29uZDsKLQotICAgIFN0
cmluZyB0cmFuc2xhdGVkU2hhZGVyU291cmNlOwotICAgIFN0cmluZyBzaGFkZXJJbmZvTG9nOwot
Ci0gICAgYm9vbCBpc1ZhbGlkID0gbV9jb21waWxlci52YWxpZGF0ZVNoYWRlclNvdXJjZShlbnRy
eS5zb3VyY2UudXRmOCgpLmRhdGEoKSwgc2hhZGVyVHlwZSwgdHJhbnNsYXRlZFNoYWRlclNvdXJj
ZSwgc2hhZGVySW5mb0xvZyk7Ci0KLSAgICBlbnRyeS5sb2cgPSBzaGFkZXJJbmZvTG9nOwotICAg
IGVudHJ5LmlzVmFsaWQgPSBpc1ZhbGlkOwotCi0gICAgaWYgKCFpc1ZhbGlkKQotICAgICAgICBy
ZXR1cm47IC8vIFNoYWRlciBkaWRuJ3QgdmFsaWRhdGUsIGRvbid0IG1vdmUgZm9yd2FyZCB3aXRo
IGNvbXBpbGluZyB0cmFuc2xhdGVkIHNvdXJjZS4KLQogICAgIGludCB0cmFuc2xhdGVkU2hhZGVy
TGVuZ3RoID0gdHJhbnNsYXRlZFNoYWRlclNvdXJjZS5sZW5ndGgoKTsKIAogICAgIGNvbnN0IENT
dHJpbmcmIHRyYW5zbGF0ZWRTaGFkZXJDU3RyaW5nID0gdHJhbnNsYXRlZFNoYWRlclNvdXJjZS51
dGY4KCk7CkBAIC04MDEsMTggKzc2Niw2MSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFk
UGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaQogICAg
ICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
UiwgbV9mYm8pOwogICAgICAgICA6OmdsRmx1c2goKTsKICAgICB9CisgICAgLy8gQ3VycmVudGx5
IG9ubHkgZm9ybWF0PVJHQkEsIHR5cGU9VU5TSUdORURfQllURSBpcyBzdXBwb3J0ZWQgYnkgdGhl
IHNwZWNpZmljYXRpb246IGh0dHA6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvd2ViZ2wvc3Bl
Y3MvbGF0ZXN0LworICAgIC8vIElmIHRoaXMgZXZlciBjaGFuZ2VzLCB0aGlzIGNvZGUgd2lsbCBu
ZWVkIHRvIGJlIHVwZGF0ZWQuCisKKyAgICAvLyBDYWxjdWxhdGUgdGhlIHN0cmlkZXMgb2Ygb3Vy
IGRhdGEgYW5kIGNhbnZhcworICAgIHVuc2lnbmVkIGludCBmb3JtYXRTaXplID0gNDsgLy8gUkdC
QSBVTlNJR05FRF9CWVRFCisgICAgdW5zaWduZWQgaW50IGRhdGFTdHJpZGUgPSB3aWR0aCAqIGZv
cm1hdFNpemU7CisgICAgdW5zaWduZWQgaW50IGNhbnZhc1N0cmlkZSA9IG1fY3VycmVudFdpZHRo
ICogZm9ybWF0U2l6ZTsKKworICAgIC8vIElmIHdlIGFyZSB1c2luZyBhIHBhY2sgYWxpZ25tZW50
IG9mIDgsIHRoZW4gd2UgbmVlZCB0byBhbGlnbiBvdXIgc3RyaWRlcyB0byA4IGJ5dGUgYm91bmRh
cmllcworICAgIC8vIFNlZTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EYXRhX3N0cnVj
dHVyZV9hbGlnbm1lbnQgKGNvbXB1dGluZyBwYWRkaW5nKQorICAgIGludCBwYWNrQWxpZ25tZW50
OworICAgIGdsR2V0SW50ZWdlcnYoR0xfUEFDS19BTElHTk1FTlQsICZwYWNrQWxpZ25tZW50KTsK
KyAgICBpZiAoOCA9PSBwYWNrQWxpZ25tZW50KSB7CisgICAgICAgIGRhdGFTdHJpZGUgPSAoZGF0
YVN0cmlkZSArIDcpICYgfjc7CisgICAgICAgIGNhbnZhc1N0cmlkZSA9IChjYW52YXNTdHJpZGUg
KyA3KSAmIH43OworICAgIH0KKworICAgIHVuc2lnbmVkIGNoYXIqIGNhbnZhc0RhdGEgPSBuZXcg
dW5zaWduZWQgY2hhcltjYW52YXNTdHJpZGUgKiBtX2N1cnJlbnRIZWlnaHRdOworICAgIDo6Z2xS
ZWFkUGl4ZWxzKDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIGZvcm1hdCwg
dHlwZSwgY2FudmFzRGF0YSk7CisKKyAgICAvLyBJZiB3ZSBmYWlsZWQgdG8gcmVhZCBvdXIgY2Fu
dmFzIGRhdGEgZHVlIHRvIGEgR0wgZXJyb3IsIGRvbid0IGNvbnRpbnVlCisgICAgaW50IGVycm9y
ID0gZ2xHZXRFcnJvcigpOworICAgIGlmIChHTF9OT19FUlJPUiAhPSBlcnJvcikgeworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihlcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICAvLyBDbGVhciBvdXIgZGF0YSBpbiBjYXNlIHNvbWUgb2YgaXQgbGllcyBvdXRzaWRlIHRoZSBi
b3VuZHMgb2Ygb3VyIGNhbnZhcworICAgIC8vIFRPRE86IGRvbid0IGRvIHRoaXMgaWYgYWxsIG9m
IHRoZSBkYXRhIGxpZXMgaW5zaWRlIHRoZSBib3VuZHMgb2YgdGhlIGNhbnZhcworICAgIG1lbXNl
dChkYXRhLCAwLCBkYXRhU3RyaWRlICogaGVpZ2h0KTsKKworICAgIC8vIENhbGN1bGF0ZSB0aGUg
aW50ZXJzZWN0aW9uIG9mIG91ciBjYW52YXMgYW5kIGRhdGEgYm91bmRzCisgICAgSW50UmVjdCBk
YXRhUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBJbnRSZWN0IGNhbnZhc1JlY3QoMCwg
MCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCk7CisgICAgSW50UmVjdCBub25aZXJv
RGF0YVJlY3QgPSBpbnRlcnNlY3Rpb24oZGF0YVJlY3QsIGNhbnZhc1JlY3QpOworCisgICAgdW5z
aWduZWQgaW50IHhEYXRhT2Zmc2V0ID0geCA8IDAgPyAteCAqIGZvcm1hdFNpemUgOiAwOworICAg
IHVuc2lnbmVkIGludCB5RGF0YU9mZnNldCA9IHkgPCAwID8gLXkgKiBkYXRhU3RyaWRlIDogMDsK
KyAgICB1bnNpZ25lZCBpbnQgeENhbnZhc09mZnNldCA9IG5vblplcm9EYXRhUmVjdC54KCkgKiBm
b3JtYXRTaXplOworICAgIHVuc2lnbmVkIGludCB5Q2FudmFzT2Zmc2V0ID0gbm9uWmVyb0RhdGFS
ZWN0LnkoKSAqIGNhbnZhc1N0cmlkZTsKKyAgICB1bnNpZ25lZCBjaGFyKiBkc3QgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4oZGF0YSkgKyB4RGF0YU9mZnNldCArIHlEYXRhT2Zmc2V0Owor
ICAgIHVuc2lnbmVkIGNoYXIqIHNyYyA9IGNhbnZhc0RhdGEgKyB4Q2FudmFzT2Zmc2V0ICsgeUNh
bnZhc09mZnNldDsKKyAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBub25aZXJvRGF0YVJlY3Qu
aGVpZ2h0KCk7IHJvdysrKSB7CisgICAgICAgIG1lbWNweShkc3QsIHNyYywgbm9uWmVyb0RhdGFS
ZWN0LndpZHRoKCkgKiBmb3JtYXRTaXplKTsKKyAgICAgICAgZHN0ICs9IGRhdGFTdHJpZGU7Cisg
ICAgICAgIHNyYyArPSBjYW52YXNTdHJpZGU7CisgICAgfQorCisgICAgZGVsZXRlIFtdIGNhbnZh
c0RhdGE7CiAgICAgOjpnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0
eXBlLCBkYXRhKTsKKwogICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09
IG1fbXVsdGlzYW1wbGVGQk8pCiAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKLXsKLSAgICAvLyBGSVhN
RTogVGhpcyBpcyBub3QgaW1wbGVtZW50ZWQgb24gZGVza3RvcCBPcGVuR0wuIFdlIG5lZWQgdG8g
aGF2ZSBpZmRlZnMgZm9yIHRoZSBkaWZmZXJlbnQgR0wgdmFyaWFudHMuCi0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQogdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6c2FtcGxlQ292ZXJhZ2UoR0MzRGNsYW1wZiB2YWx1ZSwgR0MzRGJvb2xlYW4gaW52
ZXJ0KQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwpAQCAtMTM4NiwxMyArMTM5NCw2IEBA
IGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmxheWVyQ29tcG9zaXRlZCgpIGNvbnN0CiAgICAgcmV0
dXJuIG1fbGF5ZXJDb21wb3NpdGVkOwogfQogCi1FeHRlbnNpb25zM0QqIEdyYXBoaWNzQ29udGV4
dDNEOjpnZXRFeHRlbnNpb25zKCkKLXsKLSAgICBpZiAoIW1fZXh0ZW5zaW9ucykKLSAgICAgICAg
bV9leHRlbnNpb25zID0gYWRvcHRQdHIobmV3IEV4dGVuc2lvbnMzRE9wZW5HTCh0aGlzKSk7Ci0g
ICAgcmV0dXJuIG1fZXh0ZW5zaW9ucy5nZXQoKTsKLX0KLQogfQogCiAjZW5kaWYgLy8gRU5BQkxF
KFdFQkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCmluZGV4IGIx
YmQxZGM1NmNhNmZkOTI4M2RiMmRhZTEyMzgzY2UyMmZjOTQzMDIuLjNiNDRhMjQ2ZWYxMzA0YzA0
OTE2YThjMTM1OTA0NjFjZWEzZjI4NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RP
cGVuR0xFUy5jcHAKQEAgLTI5LDkzICsyOSwyOSBAQAogI2lmIEVOQUJMRShXRUJHTCkKIAogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0KLSNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVu
R0wuaCIKKyNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0xFUy5oIgogI2luY2x1ZGUgIkludFJl
Y3QuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiTGF5ZXJXZWJLaXRUaHJlYWQu
aCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotCi0jaWYgUExBVEZPUk0oR1RLKSB8fCBQ
TEFURk9STShRVCkKLSNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgotI2VuZGlmCisjaW5jbHVkZSAi
T3BlbkdMRVNTaGltcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnJlYWRQaXhlbHNBbmRDb252ZXJ0VG9CR1JBSWZOZWNlc3NhcnkoaW50IHgsIGlu
dCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVuc2lnbmVkIGNoYXIqIHBpeGVscykKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCiB7Ci0gICAgY29uc3Qg
aW50IHRvdGFsQnl0ZXMgPSBtX2N1cnJlbnRXaWR0aCAqIG1fY3VycmVudEhlaWdodCAqIDQ7Ci0g
ICAgOjpnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgR0xfUkdCQSwgR0xfVU5TSUdO
RURfQllURSwgcGl4ZWxzKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsQnl0ZXM7IGkg
Kz0gNCkKLSAgICAgICAgc3RkOjpzd2FwKHBpeGVsc1tpXSwgcGl4ZWxzW2kgKyAyXSk7IC8vIENv
bnZlcnQgdG8gQkdSQS4KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsUmVsZWFz
ZVNoYWRlckNvbXBpbGVyKCk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGVG
Qk9zKGNvbnN0IEludFNpemUmIHNpemUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4
ZWxzQW5kQ29udmVydFRvQkdSQUlmTmVjZXNzYXJ5KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBp
bnQgaGVpZ2h0LCB1bnNpZ25lZCBjaGFyKiBwaXhlbHMpCiB7Ci0gICAgY29uc3QgaW50IHdpZHRo
ID0gc2l6ZS53aWR0aCgpOwotICAgIGNvbnN0IGludCBoZWlnaHQgPSBzaXplLmhlaWdodCgpOwot
ICAgIEdMdWludCBjb2xvckZvcm1hdCA9IDAsIHBpeGVsRGF0YVR5cGUgPSAwOwotICAgIGlmICht
X2F0dHJzLmFscGhhKSB7Ci0gICAgICAgIG1faW50ZXJuYWxDb2xvckZvcm1hdCA9IEdMX1JHQkE7
Ci0gICAgICAgIGNvbG9yRm9ybWF0ID0gR0xfUkdCQTsKLSAgICAgICAgcGl4ZWxEYXRhVHlwZSA9
IEdMX1VOU0lHTkVEX0JZVEU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9pbnRlcm5hbENvbG9y
Rm9ybWF0ID0gR0xfUkdCOwotICAgICAgICBjb2xvckZvcm1hdCA9IEdMX1JHQjsKLSAgICAgICAg
cGl4ZWxEYXRhVHlwZSA9IEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81OwotICAgIH0KLQotICAgIC8v
IFdlIGRvbid0IGFsbG93IHRoZSBsb2dpYyB3aGVyZSBzdGVuY2lsIGlzIHJlcXVpcmVkIGFuZCBk
ZXB0aCBpcyBub3QuCi0gICAgLy8gU2VlIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZUF0dHJp
YnV0ZXMuCi0gICAgYm9vbCBzdXBwb3J0UGFja2VkRGVwdGhTdGVuY2lsQnVmZmVyID0gKG1fYXR0
cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKSAmJiBnZXRFeHRlbnNpb25zKCktPnN1cHBvcnRz
KCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKLQotICAgIC8vIFJlc2l6ZSByZWd1bGFy
IEZCTy4KLSAgICBib29sIG11c3RSZXN0b3JlRkJPID0gZmFsc2U7Ci0gICAgaWYgKG1fYm91bmRG
Qk8gIT0gbV9mYm8pIHsKLSAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOwotICAgICAgICA6
OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9m
Ym8pOwotICAgIH0KLQotICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1
cmUpOwotICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIG1faW50ZXJuYWxDb2xv
ckZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIHBpeGVsRGF0YVR5cGUsIDAp
OwotICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVS
RV8yRCwgbV90ZXh0dXJlLCAwKTsKLQotICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJE
LCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJE
LCAwLCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0
LCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKLSAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8y
RCwgMCk7Ci0KLSAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGFudGlhbGlhc2luZyB5ZXQuIFNlZSBH
cmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVBdHRyaWJ1dGVzLgotICAgIEFTU0VSVCghbV9hdHRy
cy5hbnRpYWxpYXMpOwotCi0gICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRo
KSB7Ci0gICAgICAgIC8vIFVzZSBhIDI0IGJpdCBkZXB0aCBidWZmZXIgd2hlcmUgd2Uga25vdyB3
ZSBoYXZlIGl0LgotICAgICAgICBpZiAoc3VwcG9ydFBhY2tlZERlcHRoU3RlbmNpbEJ1ZmZlcikg
ewotICAgICAgICAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fZGVwdGhTdGVu
Y2lsQnVmZmVyKTsKLSAgICAgICAgICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAs
IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMLCB3aWR0aCwgaGVpZ2h0LCAwLCBHcmFw
aGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0lOVF8yNF84LCAwKTsKLSAgICAgICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpCi0gICAgICAg
ICAgICAgICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9TVEVO
Q0lMX0FUVEFDSE1FTlQsIEdMX1RFWFRVUkVfMkQsIG1fZGVwdGhTdGVuY2lsQnVmZmVyLCAwKTsK
LSAgICAgICAgICAgIGlmIChtX2F0dHJzLmRlcHRoKQotICAgICAgICAgICAgICAgIDo6Z2xGcmFt
ZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfREVQVEhfQVRUQUNITUVOVCwgR0xf
VEVYVFVSRV8yRCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIsIDApOwotICAgICAgICAgICAgOjpnbEJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkgewotICAgICAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVy
YnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fc3RlbmNpbEJ1ZmZl
cik7Ci0gICAgICAgICAgICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQoR3JhcGhpY3ND
b250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgR0xfU1RFTkNJTF9JTkRFWDgsIHdpZHRoLCBoZWlnaHQp
OwotICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFD
SE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fc3RlbmNpbEJ1ZmZlcik7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobV9hdHRycy5kZXB0aCkgewotICAgICAg
ICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5E
RVJCVUZGRVIsIG1fZGVwdGhCdWZmZXIpOwotICAgICAgICAgICAgICAgIDo6Z2xSZW5kZXJidWZm
ZXJTdG9yYWdlRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIEdMX0RFUFRIX0NP
TVBPTkVOVDE2LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZm
ZXJSZW5kZXJidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGlj
c0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJV
RkZFUiwgbV9kZXB0aEJ1ZmZlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICA6OmdsQmlu
ZFJlbmRlcmJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCAwKTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBpZiAoZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSX0NPTVBMRVRFKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBjbGVhbnVwCi0gICAgICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgOjpnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgR0xf
UkdCQSwgR0xfVU5TSUdORURfQllURSwgcGl4ZWxzKTsKKyAgICBpbnQgdG90YWxCeXRlcyA9IHdp
ZHRoICogaGVpZ2h0ICogNDsKKyAgICBpZiAoaXNHTEVTMkNvbXBsaWFudCgpKSB7CisgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgdG90YWxCeXRlczsgaSArPSA0KQorICAgICAgICAgICAgc3Rk
Ojpzd2FwKHBpeGVsc1tpXSwgcGl4ZWxzW2kgKyAyXSk7IC8vIENvbnZlcnQgdG8gQkdSQS4KICAg
ICB9Ci0KLSAgICByZXR1cm4gbXVzdFJlc3RvcmVGQk87CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoY29uc3QgSW50UmVjdCYgcmVj
dCkKQEAgLTE1Niw2ICs5MiwxNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZQogICAgIHJldHVy
biB0cnVlOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZUF0dHJpYnV0ZXMo
KQoreworICAgIHZhbGlkYXRlRGVwdGhTdGVuY2lsKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5j
aWwiKTsKKworICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgeworICAgICAgICBFeHRlbnNpb25z
M0QqIGV4dGVuc2lvbnMgPSBnZXRFeHRlbnNpb25zKCk7CisgICAgICAgIGlmICghZXh0ZW5zaW9u
cy0+c3VwcG9ydHMoIkdMX0lNR19tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKSkKKyAg
ICAgICAgICAgIG1fYXR0cnMuYW50aWFsaWFzID0gZmFsc2U7CisgICAgfQorfQorCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpkZXB0aFJhbmdlKEdDM0RjbGFtcGYgek5lYXIsIEdDM0RjbGFtcGYg
ekZhcikKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKQEAgLTE2OCw2ICsxMTUsMTkgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJEZXB0aChHQzNEY2xhbXBmIGRlcHRoKQogICAg
IDo6Z2xDbGVhckRlcHRoZihkZXB0aCk7CiB9CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
RXh0ZW5zaW9uczNEKiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXh0ZW5zaW9ucygpCit7CisgICAg
aWYgKCFtX2V4dGVuc2lvbnMpCisgICAgICAgIG1fZXh0ZW5zaW9ucyA9IGFkb3B0UHRyKG5ldyBF
eHRlbnNpb25zM0RPcGVuR0xFUyh0aGlzKSk7CisgICAgcmV0dXJuIG1fZXh0ZW5zaW9ucy5nZXQo
KTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6c3lzdGVtQWxsb3dzTXVsdGlzYW1wbGlu
Z09uQVRJQ2FyZHMoKQoreworICAgIHJldHVybiBmYWxzZTsgLy8gbm90IGFwcGxpY2FibGUKK30K
KworfQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAppbmRl
eCA3MGQzZjI0YWZhNTU0MmE2OGExMjQxZDM4MWMzY2U5MzQ4NzgxODg1Li4wNjc2OTIxYzExZjgw
ZmRjNWZhODQ4MzlhZGZmZjUzYjEzMGFmYWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcApAQCAt
OTgsNiArOTgsMTMgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNHTEVTMkNvbXBsaWFudCgp
IGNvbnN0CiAjZW5kaWYKIH0KIAorI2lmICFVU0UoT1BFTkdMX0VTXzIpCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisjZW5kaWYKKwogR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIEhvc3RXaW5kb3cqIGhvc3RX
aW5kb3cpCiAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKICAgICAsIG1faG9zdFdpbmRvdyhob3N0
V2luZG93KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150982</attachid>
            <date>2012-07-05 14:06:34 -0700</date>
            <delta_ts>2012-07-09 08:20:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90567-20120705170611.patch</filename>
            <type>text/plain</type>
            <size>65927</size>
            <attacher name="Joshua Netterfield">jnetterfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxOTIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjBjYjRiZDNkMTIyZmYy
YjBiYjllNDRmYmM5Y2M0OGNlMGE2NjVjNS4uY2MwZmU5MzUxOGRkNGFkMTUwMThiNjAxM2QwYzdm
ZTJkYmJjMDlmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk0IEBACisyMDEyLTA3LTA0ICBKb3No
dWEgTmV0dGVyZmllbGQgIDxqbmV0dGVyZmllbGRAcmltLmNvbT4KKyAgICAgICAgTWFrZSBHQzNE
IGFuZCBFM0QgbW9yZSBtYWludGFpbmFibGUgZm9yIEdMRVMgcGxhdGZvcm1zCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDU2NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY2xlYW5zIHVw
IGNvZGUgZm9yIFdlYkdMIG9uIE9wZW5HTEVTIHBsYXRmb3JtcyB3aGljaCB1c2UgCisgICAgICAg
IEdyYXBoaWNzQ29udGV4dDNET3BlbkdMKiBhbmQgRXh0ZW5zaW9uczNET3BlbkdMKi4gQWx0aG91
Z2gKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wgd2FzIGFscmVhZHkgc3BsaXQgaW50
byBHcmFwaGljc0NvbnRleHQzRE9wZW5HTCwKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0RPcGVu
R0xDb21tb24sIGFuZCAgR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUywgdGhpcyBwYXRjaAorICAg
ICAgICBpcyBhbiBhdHRlbXB0IHRvIHJlZmFjdG9yIHRoaXMgY29kZSBpbiBhIHdheSB0aGF0IHdp
bGwgaGVscCBCbGFja0JlcnJ5IGFuZAorICAgICAgICBvdGhlciB0ZWFtcyBzdXBwb3J0IFdlYkdM
IG9uIG1vYmlsZSBwbGF0Zm9ybXMgd2l0aCBhcyBsaXR0bGUgdXNlIG9mCisgICAgICAgICIjSUYg
VVNFKE9QRU5HTF9FU18yKSIgaW4gY29tbW9uIGNvZGUgYXMgcG9zc2libGUuIEFsc28gaW5jbHVk
ZWQgaXMgdGhlCisgICAgICAgIHNlcGFyYXRpb24gb2YgRXh0ZW5zaW9uczNET3BlbkdMIGludG8g
RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLAorICAgICAgICBFeHRlbnNpb25zM0RPcGVuR0wsIGFu
ZCBFeHRlbnNpb25zM0RPcGVuR0xFUyBhcyB3ZWxsIGFzIHRoZSBpbnRyb2R1Y3Rpb24KKyAgICAg
ICAgb2YgT3BlbkdMRVNTaGltcy4KKworICAgICAgICBUaGlzIHBhdGNoIGlzIGNyZWF0ZWQgaW4g
bGFyZ2UgcGFydCBieSBKb25hdGhhbiBGZWxkc3RlaW4uCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
OiBubyBuZXcgYmVoYXZpb3VyLgorCisgICAgICAgICogUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtl
OiBSZWNvZ25pemUgQmxhY2tCZXJyeSBhcyBPUEVOR0wgRVMsIGFkZCBuZXcgZmlsZXMgdG8gYnVp
bGQKKyAgICAgICAgKiBUYXJnZXQucHJpOiBBZGQgbmV3IEV4dGVuc2lvbnMzRE9wZW5HTCogdG8g
V2ViR0wgYnVpbGRzCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
M0QuaDogQWRkIHZhbGlkYXRlRGVwdGhTdGVuY2lsLCBtYWtlIHN5c3RlbUFsbG93c011bHRpc2Ft
cGxpbmdPbkFUSUNhcmRzIGEgYSBtZW1iZXIgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9PcGVuR0xFU1NoaW1zLmg6IEFkZGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwOiBN
b3ZlIGNvZGUgdG8gRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uIHdoZXJlIHBvc3NpYmxlCisgICAg
ICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0w6OkV4dGVuc2lvbnMzRE9wZW5HTCk6IFJl
ZmxlY3QgdGhhdCBpdCBpcyBub3cgaW5oZXJpdHMgRXh0ZW5zaW9uczNEQ29tbW9uCisgICAgICAg
IChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0w6OnN1cHBvcnRzRXh0ZW5zaW9uKTogQ29udGFp
bnMgT3BlbkdMIHNwZWNpZmljIGNvZGUgZnJvbSBzdXBwb3J0cworICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0w6OmdldEV4dGVuc2lvbnMpOiBS
ZXR1cm5zIGEgbGlzdCBvZiBleHRlbnNpb25zCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oOiBSZW1vdmUgZnVuY3Rpb25zIG5vdyBpbiBFeHRl
bnNpb25zM0RPcGVuR0xDb21tb24KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRXh0ZW5z
aW9uczNET3BlbkdMKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6RXh0ZW5zaW9uczNET3BlbkdM
Q29tbW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6fkV4
dGVuc2lvbnMzRE9wZW5HTENvbW1vbik6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RP
cGVuR0xDb21tb246OnN1cHBvcnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbjo6ZW5zdXJlRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25z
M0RPcGVuR0xDb21tb246OmlzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25z
M0RPcGVuR0xDb21tb246OmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIpOgorICAgICAgICAoV2Vi
Q29yZTo6RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjpnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNl
QU5HTEUpOiBFeGlzdGVkIGJlZm9yZSwgYnV0IGRpZCBub3RoaW5nLiBOb3cgZG9lcyB3aGF0IGlz
IHNheXMgaXQgZG9lcy4KKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTENvbW1v
bjo6aW5pdGlhbGl6ZUF2YWlsYWJsZUV4dGVuc2lvbnMpOiBNb3ZlZCBmcm9tIEV4dGVuc2lvbnMz
RE9wZW5HTDo6c3VwcG9ydHMKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0
ZW5zaW9uczNET3BlbkdMQ29tbW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMRVM6
OkV4dGVuc2lvbnMzRE9wZW5HTEVTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9w
ZW5HTEVTOjp+RXh0ZW5zaW9uczNET3BlbkdMRVMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5z
aW9uczNET3BlbkdMRVM6OmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcpOgorICAg
ICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMRVM6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VN
dWx0aXNhbXBsZUlNRyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0xFUzo6
Y3JlYXRlVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3Bl
bkdMRVM6OmRlbGV0ZVZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lv
bnMzRE9wZW5HTEVTOjppc1ZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVu
c2lvbnMzRE9wZW5HTEVTOjpiaW5kVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6
RXh0ZW5zaW9uczNET3BlbkdMRVM6OnN1cHBvcnRzRXh0ZW5zaW9uKTogQ29udGFpbnMgT3BlbkdM
RVMgc3BlY2lmaWMgY29kZSBmcm9tIHN1cHBvcnRzCisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNp
b25zM0RPcGVuR0xFUzo6Z2V0RXh0ZW5zaW9ucyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaC4KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoRXh0ZW5zaW9uczNET3BlbkdMRVMpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVBdHRyaWJ1dGVzKToK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OnJlbmRlcmJ1ZmZlclN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OnRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN5
c3RlbUFsbG93c011bHRpc2FtcGxpbmdPbkFUSUNhcmRzKTogTm93IGEgbWVtYmVyIGZ1bmN0aW9u
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEV4dGVuc2lvbnMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5H
TENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRh
dGVEZXB0aFN0ZW5jaWwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNs
ZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc1RleHR1cmUpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
bGluZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpsaW5rUHJv
Z3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGl4ZWxTdG9yZWkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBvbHlnb25PZmZzZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUJ1ZmZlcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVsc0FuZENv
bnZlcnRUb0JHUkFJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6dmFsaWRhdGVBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEV4dGVuc2lvbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN5c3RlbUFsbG93c011bHRpc2FtcGxpbmdPbkFUSUNh
cmRzKTogTm93IGEgbWVtYmVyIGZ1bmN0aW9uLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKToKKwog
MjAxMi0wNy0wNSAgWW9uZ2p1biBaaGFuZyAgPHlvbmdqdW5femhhbmdAYXBwbGUuY29tPgogCiAg
ICAgICAgIENvZGUgcmVmYWN0b3Jpbmc6IG1vdmUgbWltZVR5cGVGcm9tVVRJVHJlZSB0byBhIHNl
cGFyYXRlIGZpbGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCAzNWI2ZDVkZTQz
NjZiMWQ4NTRiMDZkNTAxNDAzMTdhZGEyNmM4ZTVjLi40NzJmMTYzM2I2NjdmNWRiNGI2YjJmZGEw
NGU0YTI1NDY3MWRhYTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTYwNTQs
NiArNjA1NCw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvT3BlbkdMU2hpbXMuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9PcGVuR0xTaGltcy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAgXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaCBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dDNET3BlbkdMLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1C
bGFja0JlcnJ5LmNtYWtlCmluZGV4IDUxNjlhNWRkNTk3M2M3YjBlMjg4ZGEyMTIzMTk0NzE4NjUz
MGVhODEuLjU4N2VkZTNkMDY5MDgwMzczYmVkMmEzMTIyNTJhNTU3OTIxZGNmY2IgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQmxhY2tCZXJyeS5jbWFrZQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UKQEAgLTIxOCw2ICsyMTgsNyBAQCBpZiAo
RU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQogRU5ESUYgKCkKIAogaWYgKEVOQUJMRV9X
RUJHTCkKKyAgICBBRERfREVGSU5JVElPTlMgKC1EV1RGX1VTRV9PUEVOR0xfRVNfMj0xKQogICAg
IExJU1QoQVBQRU5EIFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICAgICAiJHtXRUJD
T1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1IgogICAgICAgICAiJHtXRUJDT1JFX0RJUn0v
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsIgpAQCAtMjI1LDYgKzIyNiwxMSBAQCBpZiAoRU5BQkxF
X1dFQkdMKQogICAgIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9ibGFja2JlcnJ5L0RyYXdpbmdCdWZmZXJCbGFja0JlcnJ5LmNwcAogICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0dyYXBoaWNzQ29udGV4dDNEQmxhY2tCZXJy
eS5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNE
T3BlbkdMQ29tbW9uLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0M0RPcGVuR0xFUy5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuY3BwCiAgICAgKQogRU5ESUYgKCkKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1Rhcmdl
dC5wcmkKaW5kZXggNTc3MDhlZGM0ODIwMGNkY2JhNDQ4ODhmMmRiZTg4ZDRjNjMzNDk3NS4uNGM3
OGNhNzYwNjg3NzgxMTg3ZjUyNTU1NTM3YTBhYmEzY2QxZGM1ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC0z
OTU2LDE1ICszOTU2LDE5IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XRUJHTD0xKSB7CiAK
ICAgICBjb250YWlucyhRVF9DT05GSUcsIG9wZW5nbCkgfCBjb250YWlucyhRVF9DT05GSUcsIG9w
ZW5nbGVzMikgewogICAgICAgICAhY29udGFpbnMoUVRfQ09ORklHLCBvcGVuZ2xlczIpIHsKLSAg
ICAgICAgICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dDNET3BlbkdMLmNwcAorICAgICAgICAgICAgU09VUkNFUyArPSBcCisgICAgICAgICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwIFwK
KyAgICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVu
R0wuY3BwCiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBTT1VSQ0VTICs9IHBsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAorICAgICAgICAg
ICAgU09VUkNFUyArPSBcCisgICAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAgXAorICAgICAgICAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmNwcAogICAgICAgICB9CiAKICAg
ICAgICAgSEVBREVSUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3Bl
bkdMLmgKIAogICAgICAgICBTT1VSQ0VTICs9IFwKLSAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwIFwKKyAgICAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwIFwKICAgICAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1v
bi5jcHAKIAogICAgICAgICBBTkdMRV9ESVIgPSAkJHJlcGxhY2UoUFdELCAiV2ViQ29yZSIsICJU
aGlyZFBhcnR5L0FOR0xFIikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBlZmE0M2M3ODU4MTJiNDExY2Rk
ZTA5ZjkwZGU5ZjlkYzYzZWU3ZTQ5Li40M2UxNGFkMDMzODBjY2M3ODcyMDYyMDM4NTgzODYxY2E5
MTg5ZTY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zODA3LDYgKzM4MDcsNyBAQAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJUaWxlZExheWVyLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJUaWxlZExheWVyLm1tJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcCcsCisgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RP
cGVuR0wuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dDNET3BlbkdMLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYjY2ZDdmMmYwMjhj
MDkyNjJiZmVhNGI3ZDMxMTI2MzljOWJmY2NkYi4uODY1MjI0MjQ2OWZiNzBkMDgzZWYxNjAyZmM3
YzVhOGJhMGYxOTUxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtMTE5MSw2ICsxMTkxLDggQEAKIAkJNDQ5QjE5RjUwRkE3MkVD
RTAwMTVDQTRBIC8qIEhUTUxQYXJzZXJRdWlya3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0OUIxOUYzMEZBNzJFQ0UwMDE1Q0E0QSAvKiBIVE1MUGFy
c2VyUXVpcmtzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNDRBMjhBQUMxMkRGQjhBQzAwQUU5MjNCIC8qIE1hdGhNTEVsZW1lbnRGYWN0b3J5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NEEyOEFBQjEy
REZCOEFDMDBBRTkyM0IgLyogTWF0aE1MRWxlbWVudEZhY3RvcnkuaCAqLzsgfTsKIAkJNDRBMjhB
QUYxMkRGQjhCRjAwQUU5MjNCIC8qIE1hdGhNTE5hbWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NEEyOEFBRTEyREZCOEJGMDBBRTkyM0IgLyogTWF0
aE1MTmFtZXMuaCAqLzsgfTsKKwkJNDREQUI1QjExNUE2MjM1ODAwOTdDMUU0IC8qIEV4dGVuc2lv
bnMzRE9wZW5HTENvbW1vbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0NERBQjVBRjE1QTYyMzU4MDA5N0MxRTQgLyogRXh0ZW5zaW9uczNET3BlbkdM
Q29tbW9uLmNwcCAqLzsgfTsKKwkJNDREQUI1QjIxNUE2MjM1ODAwOTdDMUU0IC8qIEV4dGVuc2lv
bnMzRE9wZW5HTENvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDREQUI1QjAxNUE2MjM1ODAwOTdDMUU0IC8qIEV4dGVuc2lvbnMzRE9wZW5HTENv
bW1vbi5oICovOyB9OwogCQk0NTA5OUM0MTEzNzBBNzgwMDA1OEQ1MTMgLyogSWNvblVSTC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NTA5OUM0MDEz
NzBBNzgwMDA1OEQ1MTMgLyogSWNvblVSTC5jcHAgKi87IH07CiAJCTQ1MENFQkYwMTUwNzNCQkUw
MDJCQjE0OSAvKiBMYWJlbGFibGVFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1MENFQkVFMTUwNzNCQkUwMDJCQjE0OSAvKiBMYWJlbGFi
bGVFbGVtZW50LmNwcCAqLzsgfTsKIAkJNDUwQ0VCRjExNTA3M0JCRTAwMkJCMTQ5IC8qIExhYmVs
YWJsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQ1MENFQkVGMTUwNzNCQkUwMDJCQjE0OSAvKiBMYWJlbGFibGVFbGVtZW50LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTgyNDcsNiArODI0
OSw4IEBACiAJCTQ0QTI4QUFFMTJERkI4QkYwMEFFOTIzQiAvKiBNYXRoTUxOYW1lcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXRoTUxOYW1lcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0NEQ4REE5ODEzOTU0NUJFMDAzMzdCNzUgLyogU1ZHTVBhdGhFbGVt
ZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTVkdNUGF0aEVsZW1lbnQuaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NEQ4REE5QTEzOTU0NUNEMDAzMzdCNzUgLyogU1ZH
QW5pbWF0ZU1vdGlvbkVsZW1lbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNWR0FuaW1h
dGVNb3Rpb25FbGVtZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDREQUI1
QUYxNUE2MjM1ODAwOTdDMUU0IC8qIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NERBQjVCMDE1QTYyMzU4MDA5N0Mx
RTQgLyogRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0NTA5OUM0MDEzNzBBNzgwMDA1OEQ1MTMgLyogSWNvblVSTC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJY29uVVJMLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNDUwQ0VCRUUxNTA3M0JCRTAwMkJCMTQ5IC8qIExhYmVsYWJsZUVs
ZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGFiZWxhYmxl
RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ1MENFQkVGMTUwNzNC
QkUwMDJCQjE0OSAvKiBMYWJlbGFibGVFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IExhYmVsYWJsZUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTIxNjQ2LDYgKzIxNjUwLDggQEAKIAkJRkJDMjIwREQxMjM3RkJFQjAwQkNGNzg4IC8qIG9w
ZW5nbCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNDRE
QUI1QUYxNUE2MjM1ODAwOTdDMUU0IC8qIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAgKi8s
CisJCQkJNDREQUI1QjAxNUE2MjM1ODAwOTdDMUU0IC8qIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1v
bi5oICovLAogCQkJCTZFNjdEMkE0MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RPcGVu
R0wuY3BwICovLAogCQkJCTZFNjdEMkE1MTI4MEU4QTQwMDg3NThGNyAvKiBFeHRlbnNpb25zM0RP
cGVuR0wuaCAqLywKIAkJCQlGQkMyMjBERTEyMzdGQkVCMDBCQ0Y3ODggLyogR3JhcGhpY3NDb250
ZXh0M0RPcGVuR0wuY3BwICovLApAQCAtMjUxNzksNiArMjUxODUsNyBAQAogCQkJCTRGMzJCQjFC
MTRGQTg1RTgwMEY2QzFBMyAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb24uaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4ODJEQTIzMTU5Mzg0OEQwMDAxMTVFRCAvKiBDU1NUb1N0eWxlTWFwLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxRkFGQkYxOTE1QTVGQTc0MDAwODNBMjAgLyogVVRJVXRpbGl0aWVzLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk0NERBQjVCMjE1QTYyMzU4MDA5N0MxRTQgLyogRXh0ZW5zaW9u
czNET3BlbkdMQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTI4MjM0LDYgKzI4MjQxLDcgQEAK
IAkJCQk1MDk4N0MyNjE1N0Q2NzZEMDBCREE4MzUgLyogQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODgyREEyMDE1OTM4NDZBMDAwMTE1RUQgLyogQ1NT
VG9TdHlsZU1hcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxRkFGQkYxODE1QTVGQTZFMDAwODNB
MjAgLyogVVRJVXRpbGl0aWVzLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNDREQUI1QjExNUE2MjM1
ODAwOTdDMUU0IC8qIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dDNELmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQzRC5oCmluZGV4IGRiZDlkZmVkZTAxM2E0Y2FmMzMyNDYzYWQzMmZjNGUxNTI4MjY0NjcuLjE2
ZDEyZjE2M2JkNWQxZTA5ZjMxMTUyZWRkYTFiMmI2NWUyMmVhNGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaApAQCAtMjAs
NyArMjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaWZuZGVmIEdyYXBoaWNzQ29udGV4
dDNEX2gKQEAgLTkxLDE0ICs5MSwxMiBAQCBjb25zdCBQbGF0Zm9ybTNET2JqZWN0IE51bGxQbGF0
Zm9ybTNET2JqZWN0ID0gMDsKICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dDb250ZXh0Lmg+CiAj
ZW5kaWYKIAotI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+
Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRHJhd2luZ0J1ZmZlcjsKIGNs
YXNzIEV4dGVuc2lvbnMzRDsKLSNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKEdUSykgfHwg
UExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkKKyNpZiBVU0UoT1BFTkdMX0VTXzIpCitjbGFz
cyBFeHRlbnNpb25zM0RPcGVuR0xFUzsKKyNlbHNlCiBjbGFzcyBFeHRlbnNpb25zM0RPcGVuR0w7
CiAjZW5kaWYKICNpZiBQTEFURk9STShRVCkKQEAgLTkyNCw2ICs5MjIsNyBAQCBwdWJsaWM6CiAg
ICAgLy8gaW4gcGFydGljdWxhciBzdGVuY2lsIGFuZCBhbnRpYWxpYXMsIGFuZCBkZXRlcm1pbmUg
d2hpY2ggY291bGQgb3IKICAgICAvLyBjb3VsZCBub3QgYmUgaG9ub3JlZCBiYXNlZCBvbiB0aGUg
Y2FwYWJpbGl0aWVzIG9mIHRoZSBPcGVuR0wKICAgICAvLyBpbXBsZW1lbnRhdGlvbi4KKyAgICB2
b2lkIHZhbGlkYXRlRGVwdGhTdGVuY2lsKGNvbnN0IGNoYXIqIHBhY2tlZERlcHRoU3RlbmNpbEV4
dGVuc2lvbik7CiAgICAgdm9pZCB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKIAogICAgIC8vIFJlYWQg
cmVuZGVyaW5nIHJlc3VsdHMgaW50byBhIHBpeGVsIGFycmF5IHdpdGggdGhlIHNhbWUgZm9ybWF0
IGFzIHRoZQpAQCAtOTU1LDE2ICs5NTQsMzAgQEAgcHVibGljOgogICAgIEhhc2hNYXA8UGxhdGZv
cm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+IG1fc2hhZGVyU291cmNlTWFwOwogCiAgICAg
QU5HTEVXZWJLaXRCcmlkZ2UgbV9jb21waWxlcjsKKyNlbmRpZgogCisjaWYgUExBVEZPUk0oUVQp
ICYmIGRlZmluZWQoUVRfT1BFTkdMX0VTXzIpCisgICAgZnJpZW5kIGNsYXNzIEV4dGVuc2lvbnMz
RFF0OworICAgIE93blB0cjxFeHRlbnNpb25zM0RRdD4gbV9leHRlbnNpb25zOworI2VsaWYgUExB
VEZPUk0oQkxBQ0tCRVJSWSkKKyAgICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9uczNET3BlbkdMRVM7
CisgICAgT3duUHRyPEV4dGVuc2lvbnMzRE9wZW5HTEVTPiBtX2V4dGVuc2lvbnM7CisjZWxpZiAh
UExBVEZPUk0oQ0hST01JVU0pCiAgICAgZnJpZW5kIGNsYXNzIEV4dGVuc2lvbnMzRE9wZW5HTDsK
ICAgICBPd25QdHI8RXh0ZW5zaW9uczNET3BlbkdMPiBtX2V4dGVuc2lvbnM7CisjZW5kaWYKKyAg
ICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOwogCiAgICAgQXR0cmlidXRl
cyBtX2F0dHJzOwogICAgIFZlY3RvcjxWZWN0b3I8ZmxvYXQ+ID4gbV92ZXJ0ZXhBcnJheTsKIAot
ICAgIEdDM0R1aW50IG1fdGV4dHVyZSwgbV9jb21wb3NpdG9yVGV4dHVyZTsKKyAgICBHQzNEdWlu
dCBtX3RleHR1cmU7CisjaWYgIVBMQVRGT1JNKEJMQUNLQkVSUlkpCisgICAgR0MzRHVpbnQgbV9j
b21wb3NpdG9yVGV4dHVyZTsKKyNlbmRpZgogICAgIEdDM0R1aW50IG1fZmJvOwotI2lmIFVTRShP
UEVOR0xfRVNfMikKKworI2lmICFQTEFURk9STShCTEFDS0JFUlJZKQogICAgIEdDM0R1aW50IG1f
ZGVwdGhCdWZmZXI7CiAgICAgR0MzRHVpbnQgbV9zdGVuY2lsQnVmZmVyOwogI2VuZGlmCkBAIC05
ODUsMTAgKzk5OCwxMSBAQCBwdWJsaWM6CiAKICAgICAvLyBFcnJvcnMgcmFpc2VkIGJ5IHN5bnRo
ZXNpemVHTEVycm9yKCkuCiAgICAgTGlzdEhhc2hTZXQ8R0MzRGVudW0+IG1fc3ludGhldGljRXJy
b3JzOwotI2VuZGlmCiAKICAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
OwogICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQzRFByaXZhdGU+IG1fcHJpdmF0ZTsKKworICAg
IGJvb2wgc3lzdGVtQWxsb3dzTXVsdGlzYW1wbGluZ09uQVRJQ2FyZHMoKTsgCiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9PcGVuR0xFU1NoaW1zLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9PcGVuR0xFU1NoaW1zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWRiOTE5MzNmODViYzA2MWNjOWM4NTI1NGRj
MzRmMDljMjkzYTgwOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL09wZW5HTEVTU2hpbXMuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg
TUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgT3BlbkdMRVNTaGltc19oCisjZGVm
aW5lIE9wZW5HTEVTU2hpbXNfaAorCisjaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKKyNkZWZpbmUg
Z2xCaW5kRnJhbWVidWZmZXJFWFQgZ2xCaW5kRnJhbWVidWZmZXIKKyNkZWZpbmUgZ2xGcmFtZWJ1
ZmZlclRleHR1cmUyREVYVCBnbEZyYW1lYnVmZmVyVGV4dHVyZTJECisjZGVmaW5lIGdsQmluZFJl
bmRlcmJ1ZmZlckVYVCBnbEJpbmRSZW5kZXJidWZmZXIKKyNkZWZpbmUgZ2xSZW5kZXJidWZmZXJT
dG9yYWdlRVhUIGdsUmVuZGVyYnVmZmVyU3RvcmFnZQorI2RlZmluZSBnbEZyYW1lYnVmZmVyUmVu
ZGVyYnVmZmVyRVhUIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIKKyNkZWZpbmUgR0xfUkVOREVS
QlVGRkVSX0VYVCBHTF9SRU5ERVJCVUZGRVIKKyNkZWZpbmUgR0xfU1RFTkNJTF9BVFRBQ0hNRU5U
X0VYVCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQKKyNkZWZpbmUgZ2xDaGVja0ZyYW1lYnVmZmVyU3Rh
dHVzRVhUIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1cworI2RlZmluZSBnbERlbGV0ZUZyYW1lYnVm
ZmVyc0VYVCBnbERlbGV0ZUZyYW1lYnVmZmVycworI2RlZmluZSBnbERlbGV0ZVJlbmRlcmJ1ZmZl
cnNFWFQgZ2xEZWxldGVSZW5kZXJidWZmZXJzCisjZGVmaW5lIGdsR2VuUmVuZGVyYnVmZmVyc0VY
VCBnbEdlblJlbmRlcmJ1ZmZlcnMKKyNkZWZpbmUgZ2xHZW5GcmFtZWJ1ZmZlcnNFWFQgZ2xHZW5G
cmFtZWJ1ZmZlcnMKKyNkZWZpbmUgZ2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJp
dkVYVCBnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2CisjZGVmaW5lIGdsR2V0
UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXZFWFQgZ2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdgor
I2RlZmluZSBnbElzUmVuZGVyYnVmZmVyRVhUIGdsSXNSZW5kZXJidWZmZXIKKyNkZWZpbmUgZ2xJ
c0ZyYW1lYnVmZmVyRVhUIGdsSXNGcmFtZWJ1ZmZlcgorI2RlZmluZSBnbEdlbmVyYXRlTWlwbWFw
RVhUIGdsR2VuZXJhdGVNaXBtYXAKKyNkZWZpbmUgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhUIEdM
X0NPTE9SX0FUVEFDSE1FTlQwCisjZGVmaW5lIEdMX0RFUFRIX0FUVEFDSE1FTlRfRVhUIEdMX0RF
UFRIX0FUVEFDSE1FTlQKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQ09NUExFVEVfRVhUIEdMX0ZS
QU1FQlVGRkVSX0NPTVBMRVRFCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0VYVCBHTF9GUkFNRUJV
RkZFUgorI2RlZmluZSBHTF9ERVBUSDI0X1NURU5DSUw4X0VYVCBHTF9ERVBUSDI0X1NURU5DSUw4
X09FUworI2RlZmluZSBHTF9SR0JBOCBHTF9SR0JBOF9PRVMKKyNkZWZpbmUgR0xfUkdCOCBHTF9S
R0I4X09FUworI2RlZmluZSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCAweDhDQTgKKyNkZWZpbmUg
R0xfRFJBV19GUkFNRUJVRkZFUl9FWFQgMHg4Q0E5CisjZGVmaW5lIEZSQU1FQlVGRkVSX0lOQ09N
UExFVEVfTVVMVElTQU1QTEVfRVhUIDB4OTEzNAorI2RlZmluZSBHTF9NQVhfU0FNUExFU19FWFQg
MHg4RDU3CisjZW5kaWYgLy8gUExBVEZPUk0oQkxBQ0tCRVJSWSkKKworI2VuZGlmIC8vIE9wZW5H
TEVTU2hpbXNfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCmluZGV4IGFjMjky
ZDM3NTE1NzkyZWNhMzIyOWU2ZjY3Mzg4ZWIyOGU1MWUwOTYuLmZkMWRhZDA5ZjAxMWI3NmM5ZTU5
ZTQ4NTM5YWM5YzAzZGFhZGIzNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3Bw
CkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMLmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKKyNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgpA
QCAtMTQ2LDYgKzE0NywxMSBAQCBHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNE
KCkKICAgICA6OmdsRGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZtX2Zibyk7CiB9CiAKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKElt
YWdlKiBpbWFnZSwgdW5zaWduZWQgaW50IGZvcm1hdCwgdW5zaWduZWQgaW50IHR5cGUsIGJvb2wg
cHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSwgVmVjdG9y
PHVpbnQ4X3Q+JiBvdXRwdXRWZWN0b3IpCiB7CiAgICAgaWYgKCFpbWFnZSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NDb250ZXh0
M0RDbHV0dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIv
R3JhcGhpY3NDb250ZXh0M0RDbHV0dGVyLmNwcAppbmRleCBjYTBmZmRjMmJjYjlkODkzODZiMTVk
NDhjMzIzOGViM2VmOWIwOTU0Li43ZTIyZjcyMmQ0YmQzNTNkMzMxYmRjNjA3NzVlN2Q3MWFhMDVl
NTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVy
L0dyYXBoaWNzQ29udGV4dDNEQ2x1dHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0NvbnRleHQzRENsdXR0ZXIuY3BwCkBAIC01Niw2
ICs1NiwxMSBAQCBHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKICAgICBu
b3RJbXBsZW1lbnRlZCgpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hh
ZGVyQ29tcGlsZXIoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKIGJvb2wgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFnZSogaW1hZ2UsIHVuc2lnbmVkIGludCBmb3Jt
YXQsIHVuc2lnbmVkIGludCB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3Jl
R2FtbWFBbmRDb2xvclByb2ZpbGUsIFZlY3Rvcjx1aW50OF90PiYgb3V0cHV0VmVjdG9yKQogewog
ICAgIG5vdEltcGxlbWVudGVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0KaW5kZXggY2QwMTUy
MmVmMjJmNjBkNmZjOTExYzMyOWM2ZmU1OTEyMzEwNjllZi4uY2VkNzVhYmFkMjE3YmQ2ZWQ1NTFm
Mzg5MjU3NGQ2ZjRjYTUyNmMyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbQpAQCAtMjgyLDYg
KzI4MiwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzZXRFcnJvck1lc3NhZ2VDYWxsYmFj
ayhQYXNzT3duUHRyPEVycm9yTWVzc2FnZUNhbGxiYWNrPgogewogfQogCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9w
ZW5HTC5jcHAKaW5kZXggNGFhMzQxYzMyNmM3MzU3YjExMGM5ODNkMDM5Y2NkN2JjMzMxNjYxMi4u
YmJlNzdiYjc5ODU0YzkyMzdlOGNiNjcwNmM5NzQ2NTk5NTYyYjkwMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lv
bnMzRE9wZW5HTC5jcHAKQEAgLTQyLDcgKzQyLDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
RXh0ZW5zaW9uczNET3BlbkdMOjpFeHRlbnNpb25zM0RPcGVuR0woR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQpCi0gICAgOiBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucyhmYWxzZSkK
KyAgICA6IEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbihjb250ZXh0KQorICAgICwgbV9pbml0aWFs
aXplZEF2YWlsYWJsZUV4dGVuc2lvbnMoZmFsc2UpCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkK
IHsKIH0KQEAgLTUxLDkxICs1Miw2IEBAIEV4dGVuc2lvbnMzRE9wZW5HTDo6fkV4dGVuc2lvbnMz
RE9wZW5HTCgpCiB7CiB9CiAKLWJvb2wgRXh0ZW5zaW9uczNET3BlbkdMOjpzdXBwb3J0cyhjb25z
dCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgLy8gTm90ZSBvbiBzdXBwb3J0IGZvciBCR1JBOgotICAg
IC8vCi0gICAgLy8gRm9yIE9wZW5HTCBFUzIuMCwgcmVxdWlyZXMgY2hlY2tpbmcgZm9yCi0gICAg
Ly8gR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4IGFuZCBHTF9FWFRfcmVhZF9mb3JtYXRf
YmdyYS4KLSAgICAvLyBGb3IgZGVza3RvcCBHTCwgQkdSQSBoYXMgYmVlbiBzdXBwb3J0ZWQgc2lu
Y2UgT3BlbkdMIDEuMi4KLSAgICAvLwotICAgIC8vIEhvd2V2ZXIsIG5vdGUgdGhhdCB0aGUgR0wg
RVMyIGV4dGVuc2lvbiByZXF1aXJlcyB0aGUKLSAgICAvLyBpbnRlcm5hbEZvcm1hdCB0byBnbFRl
eEltYWdlMkQoKSBiZSBHTF9CR1JBLCB3aGlsZSBkZXNrdG9wIEdMCi0gICAgLy8gd2lsbCBub3Qg
YWNjZXB0IEdMX0JHUkEgKG11c3QgYmUgR0xfUkdCQSksIHNvIHRoaXMgbXVzdCBiZQotICAgIC8v
IGNoZWNrZWQgb24gZWFjaCBwbGF0Zm9ybS4gRGVza3RvcCBHTCBvZmZlcnMgbmVpdGhlcgotICAg
IC8vIEdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCBvciBHTF9FWFRfcmVhZF9mb3JtYXRf
YmdyYSwgc28KLSAgICAvLyB0cmVhdCB0aGVtIGFzIHVuc3VwcG9ydGVkIGhlcmUuCi0gICAgaWYg
KCFtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucykgewotICAgICAgICBTdHJpbmcgZXh0
ZW5zaW9uc1N0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPig6OmdsR2V0U3RyaW5n
KEdMX0VYVEVOU0lPTlMpKSk7Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+IGF2YWlsYWJsZUV4dGVu
c2lvbnM7Ci0gICAgICAgIGV4dGVuc2lvbnNTdHJpbmcuc3BsaXQoIiAiLCBhdmFpbGFibGVFeHRl
bnNpb25zKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhdmFpbGFibGVFeHRlbnNp
b25zLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbV9hdmFpbGFibGVFeHRlbnNpb25zLmFkZChh
dmFpbGFibGVFeHRlbnNpb25zW2ldKTsKLSAgICAgICAgbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4
dGVuc2lvbnMgPSB0cnVlOwotICAgIH0KLSAgICAKLSAgICAvLyBHTF9BTkdMRV9mcmFtZWJ1ZmZl
cl9ibGl0IGFuZCBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSBhcmUgImZha2UiLiBU
aGV5IGFyZSBpbXBsZW1lbnRlZCB1c2luZyBvdGhlcgotICAgIC8vIGV4dGVuc2lvbnMuIEluIHBh
cnRpY3VsYXIgR0xfRVhUX2ZyYW1lYnVmZmVyX2JsaXQgYW5kIEdMX0VYVF9mcmFtZWJ1ZmZlcl9t
dWx0aXNhbXBsZQotICAgIGlmIChuYW1lID09ICJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0IikK
LSAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfRVhUX2Zy
YW1lYnVmZmVyX2JsaXQiKTsKLSAgICBpZiAobmFtZSA9PSAiR0xfQU5HTEVfZnJhbWVidWZmZXJf
bXVsdGlzYW1wbGUiKQotICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRh
aW5zKCJHTF9FWFRfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKTsKLQotICAgIC8vIERlc2t0b3Ag
R0wgYWx3YXlzIHN1cHBvcnRzIEdMX09FU19yZ2I4X3JnYmE4LgotICAgIGlmIChuYW1lID09ICJH
TF9PRVNfcmdiOF9yZ2JhOCIpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gSWYgR0xf
QVJCX3RleHR1cmVfZmxvYXQgaXMgYXZhaWxhYmxlIHRoZW4gd2UgcmVwb3J0IEdMX09FU190ZXh0
dXJlX2Zsb2F0IGFuZAotICAgIC8vIEdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQgYXMgYXZhaWxh
YmxlLgotICAgIGlmIChuYW1lID09ICJHTF9PRVNfdGV4dHVyZV9mbG9hdCIgfHwgbmFtZSA9PSAi
R0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpCi0gICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4
dGVuc2lvbnMuY29udGFpbnMoIkdMX0FSQl90ZXh0dXJlX2Zsb2F0Iik7Ci0gICAgCi0gICAgLy8g
R0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QKLSAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3ZlcnRl
eF9hcnJheV9vYmplY3QiKQotICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNv
bnRhaW5zKCJHTF9BUFBMRV92ZXJ0ZXhfYXJyYXlfb2JqZWN0Iik7Ci0KLSAgICAvLyBEZXNrdG9w
IEdMIGFsd2F5cyBzdXBwb3J0cyB0aGUgc3RhbmRhcmQgZGVyaXZhdGl2ZSBmdW5jdGlvbnMKLSAg
ICBpZiAobmFtZSA9PSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICBpZiAobmFtZSA9PSAiR0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNv
dHJvcGljIikKLSAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygi
R0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7Ci0KLSAgICByZXR1cm4gbV9hdmFp
bGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKG5hbWUpOwotfQotCi12b2lkIEV4dGVuc2lvbnMzRE9w
ZW5HTDo6ZW5zdXJlRW5hYmxlZChjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0jaWYgUExBVEZPUk0o
TUFDKSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RLKQotICAgIGlmIChuYW1lID09ICJH
TF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSB7Ci0gICAgICAgIC8vIEVuYWJsZSBzdXBwb3J0
IGluIEFOR0xFIChpZiBub3QgZW5hYmxlZCBhbHJlYWR5KQotICAgICAgICBBTkdMRVdlYktpdEJy
aWRnZSYgY29tcGlsZXIgPSBtX2NvbnRleHQtPm1fY29tcGlsZXI7Ci0gICAgICAgIFNoQnVpbHRJ
blJlc291cmNlcyBBTkdMRVJlc291cmNlcyA9IGNvbXBpbGVyLmdldFJlc291cmNlcygpOwotICAg
ICAgICBpZiAoIUFOR0xFUmVzb3VyY2VzLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcykgewotICAg
ICAgICAgICAgQU5HTEVSZXNvdXJjZXMuT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzID0gMTsKLSAg
ICAgICAgICAgIGNvbXBpbGVyLnNldFJlc291cmNlcyhBTkdMRVJlc291cmNlcyk7Ci0gICAgICAg
IH0KLSAgICB9Ci0jZWxzZQotICAgIEFTU0VSVF9VTlVTRUQobmFtZSwgc3VwcG9ydHMobmFtZSkp
OwotI2VuZGlmCi19Ci0KLWJvb2wgRXh0ZW5zaW9uczNET3BlbkdMOjppc0VuYWJsZWQoY29uc3Qg
U3RyaW5nJiBuYW1lKQotewotI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oUVQpIHx8IFBM
QVRGT1JNKEdUSykKLSAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVz
IikgewotICAgICAgICBBTkdMRVdlYktpdEJyaWRnZSYgY29tcGlsZXIgPSBtX2NvbnRleHQtPm1f
Y29tcGlsZXI7Ci0gICAgICAgIHJldHVybiBjb21waWxlci5nZXRSZXNvdXJjZXMoKS5PRVNfc3Rh
bmRhcmRfZGVyaXZhdGl2ZXM7Ci0gICAgfQotI2VuZGlmCi0gICAgcmV0dXJuIHN1cHBvcnRzKG5h
bWUpOwotfQotCi1pbnQgRXh0ZW5zaW9uczNET3BlbkdMOjpnZXRHcmFwaGljc1Jlc2V0U3RhdHVz
QVJCKCkKLXsKLSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SOwotfQogCiB2
b2lkIEV4dGVuc2lvbnMzRE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKGxvbmcgc3JjWDAsIGxvbmcg
c3JjWTAsIGxvbmcgc3JjWDEsIGxvbmcgc3JjWTEsIGxvbmcgZHN0WDAsIGxvbmcgZHN0WTAsIGxv
bmcgZHN0WDEsIGxvbmcgZHN0WTEsIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQgbG9uZyBm
aWx0ZXIpCiB7CkBAIC0xOTQsMTkgKzExMCw0OSBAQCB2b2lkIEV4dGVuc2lvbnMzRE9wZW5HTDo6
YmluZFZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCiAjZW5kaWYKIH0KIAot
U3RyaW5nIEV4dGVuc2lvbnMzRE9wZW5HTDo6Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xF
KFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQotewotICAgIFVOVVNFRF9QQVJBTShzaGFkZXIpOwot
ICAgIHJldHVybiAiIjsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24gYW5k
IGFkZCBHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UgaW4gc3VwcG9ydHMoKS4KLX0K
LQogdm9pZCBFeHRlbnNpb25zM0RPcGVuR0w6OmNvcHlUZXh0dXJlQ0hST01JVU0oR0MzRGVudW0s
IFBsYXRmb3JtM0RPYmplY3QsIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RpbnQsIEdDM0RlbnVtKQog
ewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbiBhbmQgYWRkIEdMX0NIUk9N
SVVNX2NvcHlfdGV4dHVyZSBpbiBzdXBwb3J0cygpLgogICAgIHJldHVybjsKIH0KIAorYm9vbCBF
eHRlbnNpb25zM0RPcGVuR0w6OnN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSkK
K3sKKyAgICAvLyBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0IGFuZCBHTF9BTkdMRV9mcmFtZWJ1
ZmZlcl9tdWx0aXNhbXBsZSBhcmUgImZha2UiLiBUaGV5IGFyZSBpbXBsZW1lbnRlZCB1c2luZyBv
dGhlcgorICAgIC8vIGV4dGVuc2lvbnMuIEluIHBhcnRpY3VsYXIgR0xfRVhUX2ZyYW1lYnVmZmVy
X2JsaXQgYW5kIEdMX0VYVF9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZQorICAgIGlmIChuYW1lID09
ICJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0IikKKyAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxl
RXh0ZW5zaW9ucy5jb250YWlucygiR0xfRVhUX2ZyYW1lYnVmZmVyX2JsaXQiKTsKKyAgICBpZiAo
bmFtZSA9PSAiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKQorICAgICAgICByZXR1
cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9FWFRfZnJhbWVidWZmZXJfbXVs
dGlzYW1wbGUiKTsKKworICAgIC8vIERlc2t0b3AgR0wgYWx3YXlzIHN1cHBvcnRzIEdMX09FU19y
Z2I4X3JnYmE4LgorICAgIGlmIChuYW1lID09ICJHTF9PRVNfcmdiOF9yZ2JhOCIpCisgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgLy8gSWYgR0xfQVJCX3RleHR1cmVfZmxvYXQgaXMgYXZhaWxh
YmxlIHRoZW4gd2UgcmVwb3J0IEdMX09FU190ZXh0dXJlX2Zsb2F0IGFuZAorICAgIC8vIEdMX09F
U190ZXh0dXJlX2hhbGZfZmxvYXQgYXMgYXZhaWxhYmxlLgorICAgIGlmIChuYW1lID09ICJHTF9P
RVNfdGV4dHVyZV9mbG9hdCIgfHwgbmFtZSA9PSAiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIp
CisgICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0FSQl90
ZXh0dXJlX2Zsb2F0Iik7CisKKyAgICAvLyBHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdAorICAg
IGlmIChuYW1lID09ICJHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdCIpCisgICAgICAgIHJldHVy
biBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0FQUExFX3ZlcnRleF9hcnJheV9v
YmplY3QiKTsKKworICAgIC8vIERlc2t0b3AgR0wgYWx3YXlzIHN1cHBvcnRzIHRoZSBzdGFuZGFy
ZCBkZXJpdmF0aXZlIGZ1bmN0aW9ucworICAgIGlmIChuYW1lID09ICJHTF9PRVNfc3RhbmRhcmRf
ZGVyaXZhdGl2ZXMiKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChuYW1lID09ICJH
TF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKQorICAgICAgICByZXR1cm4gbV9hdmFp
bGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9w
aWMiKTsKKworICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMobmFtZSk7
Cit9CisKK1N0cmluZyBFeHRlbnNpb25zM0RPcGVuR0w6OmdldEV4dGVuc2lvbnMoKQoreworICAg
IHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmlu
ZyhHTF9FWFRFTlNJT05TKSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBFTkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmgKaW5kZXggMmIyZDMwYTA5
MGU1NGZjYTFkMDY0NjJhZTcxZGQ3ZWM4NzJiNTQ0Yy4uYTI3ODliZGNjYzA1ZGVhNGQ2ZGY5YjNi
NGM0Nzc3ZjdiMTllYTEyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaApAQCAtMjYsNyArMjYs
NyBAQAogI2lmbmRlZiBFeHRlbnNpb25zM0RPcGVuR0xfaAogI2RlZmluZSBFeHRlbnNpb25zM0RP
cGVuR0xfaAogCi0jaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCisjaW5jbHVkZSAiRXh0ZW5zaW9u
czNET3BlbkdMQ29tbW9uLmgiCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CkBAIC0zNCwxNSArMzQsMTEgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBFeHRlbnNpb25zM0RPcGVuR0wgOiBwdWJsaWMgRXh0ZW5zaW9uczNE
IHsKK2NsYXNzIEV4dGVuc2lvbnMzRE9wZW5HTCA6IHB1YmxpYyBFeHRlbnNpb25zM0RPcGVuR0xD
b21tb24gewogcHVibGljOgogICAgIHZpcnR1YWwgfkV4dGVuc2lvbnMzRE9wZW5HTCgpOwogCiAg
ICAgLy8gRXh0ZW5zaW9uczNEIG1ldGhvZHMuCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzKGNv
bnN0IFN0cmluZyYpOwotICAgIHZpcnR1YWwgdm9pZCBlbnN1cmVFbmFibGVkKGNvbnN0IFN0cmlu
ZyYpOwotICAgIHZpcnR1YWwgYm9vbCBpc0VuYWJsZWQoY29uc3QgU3RyaW5nJik7Ci0gICAgdmly
dHVhbCBpbnQgZ2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpOwogICAgIHZpcnR1YWwgdm9pZCBi
bGl0RnJhbWVidWZmZXIobG9uZyBzcmNYMCwgbG9uZyBzcmNZMCwgbG9uZyBzcmNYMSwgbG9uZyBz
cmNZMSwgbG9uZyBkc3RYMCwgbG9uZyBkc3RZMCwgbG9uZyBkc3RYMSwgbG9uZyBkc3RZMSwgdW5z
aWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nIGZpbHRlcik7CiAgICAgdmlydHVhbCB2b2lk
IHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5z
aWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25l
ZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7CiAgICAgCkBAIC01MCwxNCArNDYs
MTYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVWZXJ0ZXhBcnJheU9FUyhQbGF0
Zm9ybTNET2JqZWN0KTsKICAgICB2aXJ0dWFsIEdDM0Rib29sZWFuIGlzVmVydGV4QXJyYXlPRVMo
UGxhdGZvcm0zRE9iamVjdCk7CiAgICAgdmlydHVhbCB2b2lkIGJpbmRWZXJ0ZXhBcnJheU9FUyhQ
bGF0Zm9ybTNET2JqZWN0KTsKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRUcmFuc2xhdGVkU2hhZGVy
U291cmNlQU5HTEUoUGxhdGZvcm0zRE9iamVjdCk7CiAgICAgdmlydHVhbCB2b2lkIGNvcHlUZXh0
dXJlQ0hST01JVU0oR0MzRGVudW0sIFBsYXRmb3JtM0RPYmplY3QsIFBsYXRmb3JtM0RPYmplY3Qs
IEdDM0RpbnQsIEdDM0RlbnVtKTsKIAotcHJpdmF0ZToKK3Byb3RlY3RlZDoKICAgICAvLyBUaGlz
IGNsYXNzIG9ubHkgbmVlZHMgdG8gYmUgaW5zdGFudGlhdGVkIGJ5IEdyYXBoaWNzQ29udGV4dDNE
IGltcGxlbWVudGF0aW9ucy4KICAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiAg
ICAgRXh0ZW5zaW9uczNET3BlbkdMKEdyYXBoaWNzQ29udGV4dDNEKik7CiAKKyAgICB2aXJ0dWFs
IGJvb2wgc3VwcG9ydHNFeHRlbnNpb24oY29uc3QgV1RGOjpTdHJpbmcmKTsKKyAgICB2aXJ0dWFs
IFN0cmluZyBnZXRFeHRlbnNpb25zKCk7CisKICAgICBib29sIG1faW5pdGlhbGl6ZWRBdmFpbGFi
bGVFeHRlbnNpb25zOwogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2F2YWlsYWJsZUV4dGVuc2lvbnM7
CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjhlNDY4ZDU0ZDdkYzNhYTI0NDdmNzVhNDgyOWU0NGFiYzAzOWZmNjEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNE
T3BlbkdMQ29tbW9uLmNwcApAQCAtMCwwICsxLDE0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCR0wpCisjaW5jbHVkZSAiRXh0
ZW5zaW9uczNET3BlbkdMQ29tbW9uLmgiCisKKyNpbmNsdWRlICJBTkdMRVdlYktpdEJyaWRnZS5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisKKyNpZiBQTEFURk9STShCTEFDS0JF
UlJZKQorI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUxvZy5oPgorI2VuZGlmCisKKyNpZiBV
U0UoT1BFTkdMX0VTXzIpCisjaW5jbHVkZSAiT3BlbkdMRVNTaGltcy5oIgorI2luY2x1ZGUgPEdM
RVMyL2dsMi5oPgorI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgorI2VsaWYgUExBVEZPUk0oTUFD
KQorI2luY2x1ZGUgPE9wZW5HTC9nbC5oPgorI2VsaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9S
TShFRkwpIHx8IFBMQVRGT1JNKFFUKQorI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCisjZW5kaWYK
KworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitFeHRl
bnNpb25zM0RPcGVuR0xDb21tb246OkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbihHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCkKKyAgICA6IG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25z
KGZhbHNlKQorICAgICwgbV9jb250ZXh0KGNvbnRleHQpCit7Cit9CisKK0V4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbjo6fkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbigpCit7Cit9CisKK2Jvb2wgRXh0
ZW5zaW9uczNET3BlbkdMQ29tbW9uOjpzdXBwb3J0cyhjb25zdCBTdHJpbmcmIG5hbWUpCit7Cisg
ICAgaWYgKCFtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucykKKyAgICAgICAgaW5pdGlh
bGl6ZUF2YWlsYWJsZUV4dGVuc2lvbnMoKTsKKworICAgIHJldHVybiBzdXBwb3J0c0V4dGVuc2lv
bihuYW1lKTsKK30KKwordm9pZCBFeHRlbnNpb25zM0RPcGVuR0xDb21tb246OmVuc3VyZUVuYWJs
ZWQoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmIChuYW1lID09ICJHTF9PRVNfc3RhbmRh
cmRfZGVyaXZhdGl2ZXMiKSB7CisgICAgICAgIC8vIEVuYWJsZSBzdXBwb3J0IGluIEFOR0xFIChp
ZiBub3QgZW5hYmxlZCBhbHJlYWR5KQorICAgICAgICBBTkdMRVdlYktpdEJyaWRnZSYgY29tcGls
ZXIgPSBtX2NvbnRleHQtPm1fY29tcGlsZXI7CisgICAgICAgIFNoQnVpbHRJblJlc291cmNlcyBB
TkdMRVJlc291cmNlcyA9IGNvbXBpbGVyLmdldFJlc291cmNlcygpOworICAgICAgICBpZiAoIUFO
R0xFUmVzb3VyY2VzLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcykgeworICAgICAgICAgICAgQU5H
TEVSZXNvdXJjZXMuT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzID0gMTsKKyAgICAgICAgICAgIGNv
bXBpbGVyLnNldFJlc291cmNlcyhBTkdMRVJlc291cmNlcyk7CisgICAgICAgIH0KKyAgICB9Cit9
CisKK2Jvb2wgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjppc0VuYWJsZWQoY29uc3QgU3RyaW5n
JiBuYW1lKQoreworICAgIGlmIChuYW1lID09ICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMi
KSB7CisgICAgICAgIEFOR0xFV2ViS2l0QnJpZGdlJiBjb21waWxlciA9IG1fY29udGV4dC0+bV9j
b21waWxlcjsKKyAgICAgICAgcmV0dXJuIGNvbXBpbGVyLmdldFJlc291cmNlcygpLk9FU19zdGFu
ZGFyZF9kZXJpdmF0aXZlczsKKyAgICB9CisgICAgcmV0dXJuIHN1cHBvcnRzKG5hbWUpOworfQor
CitpbnQgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjpnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJC
KCkKK3sKKyAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SOworfQorCitTdHJp
bmcgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjpnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5H
TEUoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCit7CisgICAgQVNTRVJUKHNoYWRlcik7CisgICAg
aW50IEdMc2hhZGVyVHlwZTsKKyAgICBBTkdMRVNoYWRlclR5cGUgc2hhZGVyVHlwZTsKKworICAg
IEFOR0xFV2ViS2l0QnJpZGdlJiBjb21waWxlciA9IG1fY29udGV4dC0+bV9jb21waWxlcjsKKwor
ICAgIG1fY29udGV4dC0+Z2V0U2hhZGVyaXYoc2hhZGVyLCBHcmFwaGljc0NvbnRleHQzRDo6U0hB
REVSX1RZUEUsICZHTHNoYWRlclR5cGUpOworCisgICAgaWYgKEdMc2hhZGVyVHlwZSA9PSBHcmFw
aGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUikKKyAgICAgICAgc2hhZGVyVHlwZSA9IFNIQURF
Ul9UWVBFX1ZFUlRFWDsKKyAgICBlbHNlIGlmIChHTHNoYWRlclR5cGUgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUikKKyAgICAgICAgc2hhZGVyVHlwZSA9IFNIQURFUl9UWVBF
X0ZSQUdNRU5UOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuICIiOyAvLyBJbnZhbGlkIHNoYWRl
ciB0eXBlLgorCisgICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBHcmFwaGljc0NvbnRleHQz
RDo6U2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRvciByZXN1bHQgPSBtX2NvbnRleHQtPm1fc2hh
ZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKworICAgIGlmIChyZXN1bHQgPT0gbV9jb250ZXh0
LT5tX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuICIiOworCisgICAgR3Jh
cGhpY3NDb250ZXh0M0Q6OlNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+c2Vjb25k
OworCisgICAgU3RyaW5nIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7CisgICAgU3RyaW5nIHNoYWRl
ckluZm9Mb2c7CisKKyAgICBib29sIGlzVmFsaWQgPSBjb21waWxlci52YWxpZGF0ZVNoYWRlclNv
dXJjZShlbnRyeS5zb3VyY2UudXRmOCgpLmRhdGEoKSwgc2hhZGVyVHlwZSwgdHJhbnNsYXRlZFNo
YWRlclNvdXJjZSwgc2hhZGVySW5mb0xvZyk7CisKKyAgICBlbnRyeS5sb2cgPSBzaGFkZXJJbmZv
TG9nOworICAgIGVudHJ5LmlzVmFsaWQgPSBpc1ZhbGlkOworCisgICAgaWYgKCFpc1ZhbGlkKQor
ICAgICAgICByZXR1cm4gIiI7CisKKyAgICByZXR1cm4gdHJhbnNsYXRlZFNoYWRlclNvdXJjZTsK
K30KKwordm9pZCBFeHRlbnNpb25zM0RPcGVuR0xDb21tb246OmluaXRpYWxpemVBdmFpbGFibGVF
eHRlbnNpb25zKCkKK3sKKyAgICBTdHJpbmcgZXh0ZW5zaW9uc1N0cmluZyA9IGdldEV4dGVuc2lv
bnMoKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBhdmFpbGFibGVFeHRlbnNpb25zOworICAgIGV4dGVu
c2lvbnNTdHJpbmcuc3BsaXQoIiAiLCBhdmFpbGFibGVFeHRlbnNpb25zKTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGF2YWlsYWJsZUV4dGVuc2lvbnMuc2l6ZSgpOyArK2kpCisgICAgICAg
IG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5hZGQoYXZhaWxhYmxlRXh0ZW5zaW9uc1tpXSk7CisgICAg
bV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnMgPSB0cnVlOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29t
bW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9u
czNET3BlbkdMQ29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjcyNWMzMjAwM2Y3YmI1Y2RhZDM0YWIxMzli
OWUyM2Q1MTI3MTA0YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uaApAQCAtMCwwICsxLDcw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRXh0ZW5zaW9uczNET3BlbkdMQ29t
bW9uX2gKKyNkZWZpbmUgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uX2gKKworI2luY2x1ZGUgIkV4
dGVuc2lvbnMzRC5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24gOiBwdWJs
aWMgRXh0ZW5zaW9uczNEIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5FeHRlbnNpb25zM0RPcGVu
R0xDb21tb24oKTsKKworICAgIC8vIEV4dGVuc2lvbnMzRCBtZXRob2RzLgorICAgIHZpcnR1YWwg
Ym9vbCBzdXBwb3J0cyhjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5zdXJlRW5h
YmxlZChjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNFbmFibGVkKGNvbnN0IFN0
cmluZyYpOworICAgIHZpcnR1YWwgaW50IGdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKTsKKwor
ICAgIHZpcnR1YWwgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVWZXJ0ZXhBcnJheU9FUygpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCkg
PSAwOworICAgIHZpcnR1YWwgR0MzRGJvb2xlYW4gaXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNE
T2JqZWN0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9y
bTNET2JqZWN0KSA9IDA7CisKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRUcmFuc2xhdGVkU2hhZGVy
U291cmNlQU5HTEUoUGxhdGZvcm0zRE9iamVjdCk7CisKK3Byb3RlY3RlZDoKKyAgICBFeHRlbnNp
b25zM0RPcGVuR0xDb21tb24oR3JhcGhpY3NDb250ZXh0M0QqKTsKKworICAgIHZpcnR1YWwgdm9p
ZCBpbml0aWFsaXplQXZhaWxhYmxlRXh0ZW5zaW9ucygpOworICAgIHZpcnR1YWwgYm9vbCBzdXBw
b3J0c0V4dGVuc2lvbihjb25zdCBTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0
RXh0ZW5zaW9ucygpID0gMDsKKworICAgIGJvb2wgbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVu
c2lvbnM7CisgICAgSGFzaFNldDxTdHJpbmc+IG1fYXZhaWxhYmxlRXh0ZW5zaW9uczsKKworICAg
IC8vIFdlYWsgcG9pbnRlciBiYWNrIHRvIEdyYXBoaWNzQ29udGV4dDNECisgICAgR3JhcGhpY3ND
b250ZXh0M0QqIG1fY29udGV4dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5H
TEVTLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45YzY1MDcxNWVlZTIyM2E5ZDA3NzBjZGQyNjFkMTQxNTIxYzNm
MmE3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmNwcApAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgRU5BQkxFKFdFQkdMKQor
I2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTEVTLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQzRC5oIgorI2luY2x1ZGUgPEVHTC9lZ2wuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitFeHRlbnNpb25zM0RPcGVuR0xFUzo6RXh0ZW5z
aW9uczNET3BlbkdMRVMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAgOiBFeHRlbnNp
b25zM0RPcGVuR0xDb21tb24oY29udGV4dCkKKyAgICAsIG1fc3VwcG9ydHNPRVN2ZXJ0ZXhBcnJh
eU9iamVjdChmYWxzZSkKKyAgICAsIG1fc3VwcG9ydHNJTUdNdWx0aXNhbXBsZWRSZW5kZXJUb1Rl
eHR1cmUoZmFsc2UpCisgICAgLCBtX2dsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlN
RygwKQorICAgICwgbV9nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRygwKQorICAg
ICwgbV9nbEJpbmRWZXJ0ZXhBcnJheU9FUygwKQorICAgICwgbV9nbERlbGV0ZVZlcnRleEFycmF5
c09FUygwKQorICAgICwgbV9nbEdlblZlcnRleEFycmF5c09FUygwKQorICAgICwgbV9nbElzVmVy
dGV4QXJyYXlPRVMoMCkKK3sKK30KKworRXh0ZW5zaW9uczNET3BlbkdMRVM6On5FeHRlbnNpb25z
M0RPcGVuR0xFUygpCit7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uczNET3BlbkdMRVM6OmZyYW1lYnVm
ZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVk
IGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIHVuc2lnbmVkIGludCB0
ZXh0dXJlLCBpbnQgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcykKK3sKKyAgICBpZiAobV9n
bEZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcpCisgICAgICAgIG1fZ2xGcmFtZWJ1
ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0
LCB0ZXh0dXJlLCBsZXZlbCwgc2FtcGxlcyk7CisgICAgZWxzZQorICAgICAgICBtX2NvbnRleHQt
PnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKK30KKwordm9pZCBFeHRl
bnNpb25zM0RPcGVuR0xFUzo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HKHVuc2ln
bmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHNhbXBsZXMsIHVuc2lnbmVkIGxvbmcgaW50
ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQor
eworICAgIGlmIChtX2dsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HKQorICAgICAg
ICBtX2dsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HKHRhcmdldCwgc2FtcGxlcywg
aW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgIGVsc2UKKyAgICAgICAgbV9jb250
ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cit9CisKK1BsYXRm
b3JtM0RPYmplY3QgRXh0ZW5zaW9uczNET3BlbkdMRVM6OmNyZWF0ZVZlcnRleEFycmF5T0VTKCkK
K3sKKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmIChtX2dsR2Vu
VmVydGV4QXJyYXlzT0VTKSB7CisgICAgICAgIEdMdWludCBhcnJheSA9IDA7CisgICAgICAgIG1f
Z2xHZW5WZXJ0ZXhBcnJheXNPRVMoMSwgJmFycmF5KTsKKyAgICAgICAgcmV0dXJuIGFycmF5Owor
ICAgIH0KKworICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgIHJldHVybiAwOworfQorCit2b2lkIEV4dGVuc2lvbnMzRE9wZW5HTEVTOjpk
ZWxldGVWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQoreworICAgIGlmICgh
YXJyYXkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgaWYgKG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMpCisgICAgICAgIG1fZ2xE
ZWxldGVWZXJ0ZXhBcnJheXNPRVMoMSwgJmFycmF5KTsKKyAgICBlbHNlCisgICAgICAgIG1fY29u
dGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworfQorCitHQzNE
Ym9vbGVhbiBFeHRlbnNpb25zM0RPcGVuR0xFUzo6aXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNE
T2JqZWN0IGFycmF5KQoreworICAgIGlmICghYXJyYXkpCisgICAgICAgIHJldHVybiBHTF9GQUxT
RTsKKworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKG1fZ2xJ
c1ZlcnRleEFycmF5T0VTKQorICAgICAgICByZXR1cm4gbV9nbElzVmVydGV4QXJyYXlPRVMoYXJy
YXkpOworCisgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEV4dGVuc2lvbnMzRE9wZW5HTEVT
OjpiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKK3sKKyAgICBpZiAo
IWFycmF5KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmIChtX2dsQmluZFZlcnRleEFycmF5T0VTKQorICAgICAgICBtX2dsQmlu
ZFZlcnRleEFycmF5T0VTKGFycmF5KTsKKyAgICBlbHNlCisgICAgICAgIG1fY29udGV4dC0+c3lu
dGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworfQorCisKK2Jvb2wgRXh0ZW5z
aW9uczNET3BlbkdMRVM6OnN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sK
KyAgICBpZiAobV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKG5hbWUpKSB7CisgICAgICAg
IGlmIChuYW1lID09ICJHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdCIgJiYgIW1fc3VwcG9ydHNP
RVN2ZXJ0ZXhBcnJheU9iamVjdCkgeworICAgICAgICAgICAgbV9nbEJpbmRWZXJ0ZXhBcnJheU9F
UyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xCSU5EVkVSVEVYQVJSQVlPRVNQUk9DPihlZ2xHZXRQ
cm9jQWRkcmVzcygiZ2xCaW5kVmVydGV4QXJyYXlPRVMiKSk7CisgICAgICAgICAgICBtX2dsR2Vu
VmVydGV4QXJyYXlzT0VTID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTEdFTlZFUlRFWEFSUkFZU09F
U1BST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbEdlblZlcnRleEFycmF5c09FUyIpKTsKKyAgICAg
ICAgICAgIG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMgPSByZWludGVycHJldF9jYXN0PFBGTkdM
REVMRVRFVkVSVEVYQVJSQVlTT0VTUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsRGVsZXRlVmVy
dGV4QXJyYXlzT0VTIikpOworICAgICAgICAgICAgbV9nbElzVmVydGV4QXJyYXlPRVMgPSByZWlu
dGVycHJldF9jYXN0PFBGTkdMSVNWRVJURVhBUlJBWU9FU1BST0M+KGVnbEdldFByb2NBZGRyZXNz
KCJnbElzVmVydGV4QXJyYXlPRVMiKSk7CisgICAgICAgICAgICBtX3N1cHBvcnRzT0VTdmVydGV4
QXJyYXlPYmplY3QgPSB0cnVlOworICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gIkdMX0lNR19t
dWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiICYmICFtX3N1cHBvcnRzSU1HTXVsdGlzYW1w
bGVkUmVuZGVyVG9UZXh0dXJlKSB7CisgICAgICAgICAgICBtX2dsRnJhbWVidWZmZXJUZXh0dXJl
MkRNdWx0aXNhbXBsZUlNRyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xGUkFNRUJVRkZFUlRFWFRV
UkUyRE1VTFRJU0FNUExFSU1HUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsRnJhbWVidWZmZXJU
ZXh0dXJlMkRNdWx0aXNhbXBsZUlNRyIpKTsKKyAgICAgICAgICAgIG1fZ2xSZW5kZXJidWZmZXJT
dG9yYWdlTXVsdGlzYW1wbGVJTUcgPSByZWludGVycHJldF9jYXN0PFBGTkdMUkVOREVSQlVGRkVS
U1RPUkFHRU1VTFRJU0FNUExFSU1HUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsUmVuZGVyYnVm
ZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HIikpOworICAgICAgICAgICAgbV9zdXBwb3J0c0lNR011
bHRpc2FtcGxlZFJlbmRlclRvVGV4dHVyZSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitTdHJpbmcgRXh0ZW5z
aW9uczNET3BlbkdMRVM6OmdldEV4dGVuc2lvbnMoKQoreworICAgIHJldHVybiBTdHJpbmcocmVp
bnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhHTF9FWFRFTlNJT05TKSkp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0
ZW5zaW9uczNET3BlbkdMRVMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkwMjIyY2E0ZDdhOTRhMDhj
MmY5NzU2MTRiZjJiYzYwZTAwMWUwOTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuaApAQCAtMCww
ICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBFeHRlbnNpb25zM0RPcGVuR0xFU19oCisjZGVmaW5l
IEV4dGVuc2lvbnMzRE9wZW5HTEVTX2gKKworI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTENv
bW1vbi5oIgorCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjaW5jbHVkZSA8R0xFUzIvZ2wyZXh0
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRXh0ZW5zaW9uczNET3BlbkdMRVMg
OiBwdWJsaWMgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IH5FeHRlbnNpb25zM0RPcGVuR0xFUygpOworCisgICAgdmlydHVhbCB2b2lkIGZyYW1lYnVmZmVy
VGV4dHVyZTJETXVsdGlzYW1wbGVJTUcodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxv
bmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIHVuc2lnbmVkIGludCB0ZXh0
dXJlLCBpbnQgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcyk7CisgICAgdmlydHVhbCB2b2lk
IHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRyh1bnNpZ25lZCBsb25nIHRhcmdldCwg
dW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNp
Z25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7CisKKyAgICB2aXJ0dWFsIFBs
YXRmb3JtM0RPYmplY3QgY3JlYXRlVmVydGV4QXJyYXlPRVMoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCk7CisgICAgdmlydHVhbCBHQzNE
Ym9vbGVhbiBpc1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpOworICAgIHZpcnR1YWwg
dm9pZCBiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCk7CisKK3Byb3RlY3RlZDoK
KyAgICAvLyBUaGlzIGNsYXNzIG9ubHkgbmVlZHMgdG8gYmUgaW5zdGFudGlhdGVkIGJ5IEdyYXBo
aWNzQ29udGV4dDNEIGltcGxlbWVudGF0aW9ucy4KKyAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3ND
b250ZXh0M0Q7CisgICAgRXh0ZW5zaW9uczNET3BlbkdMRVMoR3JhcGhpY3NDb250ZXh0M0QqKTsK
KworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBTdHJpbmcmKTsKKyAg
ICB2aXJ0dWFsIFN0cmluZyBnZXRFeHRlbnNpb25zKCk7CisKKyAgICBib29sIG1fc3VwcG9ydHNP
RVN2ZXJ0ZXhBcnJheU9iamVjdDsKKyAgICBib29sIG1fc3VwcG9ydHNJTUdNdWx0aXNhbXBsZWRS
ZW5kZXJUb1RleHR1cmU7CisKKyAgICBQRk5HTEZSQU1FQlVGRkVSVEVYVFVSRTJETVVMVElTQU1Q
TEVJTUdQUk9DIG1fZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HOworICAgIFBG
TkdMUkVOREVSQlVGRkVSU1RPUkFHRU1VTFRJU0FNUExFSU1HUFJPQyBtX2dsUmVuZGVyYnVmZmVy
U3RvcmFnZU11bHRpc2FtcGxlSU1HOworICAgIFBGTkdMQklORFZFUlRFWEFSUkFZT0VTUFJPQyBt
X2dsQmluZFZlcnRleEFycmF5T0VTOworICAgIFBGTkdMREVMRVRFVkVSVEVYQVJSQVlTT0VTUFJP
QyBtX2dsRGVsZXRlVmVydGV4QXJyYXlzT0VTOworICAgIFBGTkdMR0VOVkVSVEVYQVJSQVlTT0VT
UFJPQyBtX2dsR2VuVmVydGV4QXJyYXlzT0VTOworICAgIFBGTkdMSVNWRVJURVhBUlJBWU9FU1BS
T0MgbV9nbElzVmVydGV4QXJyYXlPRVM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFeHRlbnNpb25zM0RPcGVuR0xFU19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dDNET3BlbkdMLmNwcAppbmRleCAzZjQ3YjZlMjFlYjI1NTI0M2VlZWE0YmYzMTk4NTNhYmJmNzZh
MmRjLi41NDZlYWRkNmMzMDg5OTk1Yzg2ZDk4OGRmODQzMzlhZjY4OTc5NzcwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
M0RPcGVuR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKQEAgLTM0LDYgKzM0LDExIEBACiAjaW5jbHVk
ZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAKKyNpbmNsdWRlIDxh
bGdvcml0aG0+CisjaW5jbHVkZSA8Y3N0cmluZz4KKyNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0u
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKICNpZiBQTEFURk9STShNQUMpCiAj
aW5jbHVkZSA8T3BlbkdML2dsLmg+CiAjZWxpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVG
TCkgfHwgUExBVEZPUk0oUVQpCkBAIC00Nyw2ICs1MiwzMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpyZWFkUGl4ZWxzQW5kQ29udmVydFRvQkdSQUlmTmVjZXNzYXJ5KGludCB4LCBpbnQgeSwg
aW50CiAgICAgOjpnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgR0xfQkdSQSwgR0xf
VU5TSUdORURfSU5UXzhfOF84XzhfUkVWLCBwaXhlbHMpOwogfQogCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp2YWxpZGF0ZUF0dHJpYnV0ZXMoKQoreworICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5z
aW9ucyA9IGdldEV4dGVuc2lvbnMoKTsKKyAgICBpZiAobV9hdHRycy5zdGVuY2lsKSB7CisgICAg
ICAgIGNvbnN0IGNoYXIqIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbiA9IGlzR0xFUzJDb21w
bGlhbnQoKSA/ICJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiIDogIkdMX0VYVF9wYWNrZWRf
ZGVwdGhfc3RlbmNpbCI7CisgICAgICAgIGlmIChleHRlbnNpb25zLT5zdXBwb3J0cyhwYWNrZWRE
ZXB0aFN0ZW5jaWxFeHRlbnNpb24pKSB7CisgICAgICAgICAgICBleHRlbnNpb25zLT5lbnN1cmVF
bmFibGVkKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbik7CisgICAgICAgICAgICAvLyBGb3Jj
ZSBkZXB0aCBpZiBzdGVuY2lsIGlzIHRydWUuCisgICAgICAgICAgICBtX2F0dHJzLmRlcHRoID0g
dHJ1ZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2F0dHJzLnN0ZW5jaWwgPSBmYWxz
ZTsKKyAgICB9CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAgIGJvb2wgaXNW
YWxpZFZlbmRvciA9IHRydWU7CisgICAgICAgIC8vIEN1cnJlbnRseSBpbiBNYWMgd2Ugb25seSB0
dXJuIG9uIGFudGlhbGlhcyBpZiB2ZW5kb3IgaXMgTlZJRElBLAorICAgICAgICAvLyBvciBpZiBB
VEkgYW5kIG9uIDEwLjcuMiBhbmQgYWJvdmUuCisgICAgICAgIGNvbnN0IGNoYXIqIHZlbmRvciA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KDo6Z2xHZXRTdHJpbmcoR0xfVkVORE9SKSk7
CisgICAgICAgIGlmICghdmVuZG9yIHx8ICghc3RkOjpzdHJzdHIodmVuZG9yLCAiTlZJRElBIikg
JiYgIShzdGQ6OnN0cnN0cih2ZW5kb3IsICJBVEkiKSAmJiBzeXN0ZW1BbGxvd3NNdWx0aXNhbXBs
aW5nT25BVElDYXJkcygpKSkpCisgICAgICAgICAgICBpc1ZhbGlkVmVuZG9yID0gZmFsc2U7Cisg
ICAgICAgIGlmICghaXNWYWxpZFZlbmRvciB8fCAhZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0FO
R0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIikgfHwgaXNHTEVTMkNvbXBsaWFudCgpKQorICAg
ICAgICAgICAgbV9hdHRycy5hbnRpYWxpYXMgPSBmYWxzZTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVs
dGlzYW1wbGUiKTsKKyAgICB9Cit9CisKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGVG
Qk9zKGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAgICAgY29uc3QgaW50IHdpZHRoID0gc2l6ZS53
aWR0aCgpOwpAQCAtMTUxLDYgKzE4Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc29s
dmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoY29uc3QgSW50UmVjdCYgcmVjdCkKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQog
ewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCiAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1h
dCkgewogICAgIGNhc2UgREVQVEhfU1RFTkNJTDoKICAgICAgICAgaW50ZXJuYWxmb3JtYXQgPSBH
TF9ERVBUSDI0X1NURU5DSUw4X0VYVDsKQEAgLTI0MSw2ICsyNzMsNyBAQCBib29sIEdyYXBoaWNz
Q29udGV4dDNEOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RGVudW0gaW50ZQogICAgIH0KIAogICAgIDo6Z2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIG9w
ZW5HTEludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwg
cGl4ZWxzKTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yNTYsNiArMjg5LDMzIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyRGVwdGgoR0MzRGNsYW1wZiBkZXB0aCkKICAgICA6
OmdsQ2xlYXJEZXB0aChkZXB0aCk7CiB9CiAKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnN5c3Rl
bUFsbG93c011bHRpc2FtcGxpbmdPbkFUSUNhcmRzKCkKK3sKKyNpZiBQTEFURk9STShNQUMpCisj
aWYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElO
R19PTl9MSU9OKQorICAgIHJldHVybiB0cnVlOworI2Vsc2UKKyAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOworICAgIHN0YXRpYyBTSW50MzIgdmVyc2lvbjsKKyAgICBpZiAoIXZlcnNpb24pIHsK
KyAgICAgICAgaWYgKEdlc3RhbHQoZ2VzdGFsdFN5c3RlbVZlcnNpb24sICZ2ZXJzaW9uKSAhPSBu
b0VycikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgLy8gU2VlIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzkyMiBmb3IgbW9yZSBkZXRhaWxz
CisgICAgcmV0dXJuIHZlcnNpb24gPj0gMHgxMDcyOworI2VuZGlmIC8vIFNOT1dfTEVPUEFSRCBh
bmQgTElPTgorI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYgLy8gUExBVEZPUk0oTUFD
KQorfQorCitFeHRlbnNpb25zM0QqIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25zKCkK
K3sKKyAgICBpZiAoIW1fZXh0ZW5zaW9ucykKKyAgICAgICAgbV9leHRlbnNpb25zID0gYWRvcHRQ
dHIobmV3IEV4dGVuc2lvbnMzRE9wZW5HTCh0aGlzKSk7CisgICAgcmV0dXJuIG1fZXh0ZW5zaW9u
cy5nZXQoKTsKK30KKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNE
T3BlbkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKaW5kZXggNDI5ZmM1MWM5MDQ2YzQ0
YTUwZWZlY2UxMjljYmYzMWY2MGQ5OTc1ZS4uNzYyZTM5ZjA5ZGFhOTZmNWMwZGE3MzQ4NDA5NDE4
NDVhZGVhOWJmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21t
b24uY3BwCkBAIC0zMCw3ICszMCwxMiBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0Qu
aCIKIAorI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKKyNpZiBVU0UoT1BFTkdM
X0VTXzIpCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMRVMuaCIKKyNlbHNlCiAjaW5jbHVk
ZSAiRXh0ZW5zaW9uczNET3BlbkdMLmgiCisjZW5kaWYKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkltYWdlRGF0YS5oIgpA
QCAtNDksMzkgKzU0LDI0IEBACiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCi0jaWYgUExBVEZPUk0oTUFDKQorI2lmIFVTRShPUEVO
R0xfRVNfMikKKyNpbmNsdWRlICJPcGVuR0xFU1NoaW1zLmgiCisjZWxpZiBQTEFURk9STShNQUMp
CiAjaW5jbHVkZSA8T3BlbkdML2dsLmg+CiAjZWxpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JN
KEVGTCkgfHwgUExBVEZPUk0oUVQpCiAjaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKICNlbmRpZgog
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7CisjaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKKyNpbmNsdWRl
IDxCbGFja0JlcnJ5UGxhdGZvcm1Mb2cuaD4KKyNlbmRpZgogCi1zdGF0aWMgYm9vbCBzeXN0ZW1B
bGxvd3NNdWx0aXNhbXBsaW5nT25BVElDYXJkcygpCi17Ci0jaWYgUExBVEZPUk0oTUFDKQotI2lm
ICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdf
T05fTElPTikKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKLSAgICBzdGF0aWMgU0ludDMyIHZlcnNpb247Ci0gICAgaWYgKCF2ZXJzaW9uKSB7Ci0g
ICAgICAgIGlmIChHZXN0YWx0KGdlc3RhbHRTeXN0ZW1WZXJzaW9uLCAmdmVyc2lvbikgIT0gbm9F
cnIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIC8vIFNlZSBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc5MjIgZm9yIG1vcmUgZGV0YWlscwot
ICAgIHJldHVybiB2ZXJzaW9uID49IDB4MTA3MjsKLSNlbmRpZiAvLyBTTk9XX0xFT1BBUkQgYW5k
IExJT04KLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykK
LX0KK25hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRh
dGVBdHRyaWJ1dGVzKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlRGVwdGhTdGVu
Y2lsKGNvbnN0IGNoYXIqIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbikKIHsKICAgICBFeHRl
bnNpb25zM0QqIGV4dGVuc2lvbnMgPSBnZXRFeHRlbnNpb25zKCk7CiAgICAgaWYgKG1fYXR0cnMu
c3RlbmNpbCkgewotICAgICAgICBjb25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNp
b24gPSBpc0dMRVMyQ29tcGxpYW50KCkgPyAiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsIiA6
ICJHTF9FWFRfcGFja2VkX2RlcHRoX3N0ZW5jaWwiOwogICAgICAgICBpZiAoZXh0ZW5zaW9ucy0+
c3VwcG9ydHMocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKSkgewogICAgICAgICAgICAgZXh0
ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZChwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pOwogICAg
ICAgICAgICAgLy8gRm9yY2UgZGVwdGggaWYgc3RlbmNpbCBpcyB0cnVlLgpAQCAtNDM5LDM2ICs0
MjksMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybTNE
T2JqZWN0IHNoYWRlcikKICAgICBBU1NFUlQoc2hhZGVyKTsKICAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKIAotICAgIGludCBHTHNoYWRlclR5cGU7Ci0gICAgQU5HTEVTaGFkZXJUeXBlIHNoYWRl
clR5cGU7Ci0KLSAgICBnbEdldFNoYWRlcml2KHNoYWRlciwgU0hBREVSX1RZUEUsICZHTHNoYWRl
clR5cGUpOwotICAgIAotICAgIGlmIChHTHNoYWRlclR5cGUgPT0gVkVSVEVYX1NIQURFUikKLSAg
ICAgICAgc2hhZGVyVHlwZSA9IFNIQURFUl9UWVBFX1ZFUlRFWDsKLSAgICBlbHNlIGlmIChHTHNo
YWRlclR5cGUgPT0gRlJBR01FTlRfU0hBREVSKQotICAgICAgICBzaGFkZXJUeXBlID0gU0hBREVS
X1RZUEVfRlJBR01FTlQ7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm47IC8vIEludmFsaWQgc2hh
ZGVyIHR5cGUuCi0KLSAgICBIYXNoTWFwPFBsYXRmb3JtM0RPYmplY3QsIFNoYWRlclNvdXJjZUVu
dHJ5Pjo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwor
ICAgIFN0cmluZyB0cmFuc2xhdGVkU2hhZGVyU291cmNlID0gbV9leHRlbnNpb25zLT5nZXRUcmFu
c2xhdGVkU2hhZGVyU291cmNlQU5HTEUoc2hhZGVyKTsKIAotICAgIGlmIChyZXN1bHQgPT0gbV9z
aGFkZXJTb3VyY2VNYXAuZW5kKCkpCisgICAgaWYgKCF0cmFuc2xhdGVkU2hhZGVyU291cmNlLmxl
bmd0aCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkg
PSByZXN1bHQtPnNlY29uZDsKLQotICAgIFN0cmluZyB0cmFuc2xhdGVkU2hhZGVyU291cmNlOwot
ICAgIFN0cmluZyBzaGFkZXJJbmZvTG9nOwotCi0gICAgYm9vbCBpc1ZhbGlkID0gbV9jb21waWxl
ci52YWxpZGF0ZVNoYWRlclNvdXJjZShlbnRyeS5zb3VyY2UudXRmOCgpLmRhdGEoKSwgc2hhZGVy
VHlwZSwgdHJhbnNsYXRlZFNoYWRlclNvdXJjZSwgc2hhZGVySW5mb0xvZyk7Ci0KLSAgICBlbnRy
eS5sb2cgPSBzaGFkZXJJbmZvTG9nOwotICAgIGVudHJ5LmlzVmFsaWQgPSBpc1ZhbGlkOwotCi0g
ICAgaWYgKCFpc1ZhbGlkKQotICAgICAgICByZXR1cm47IC8vIFNoYWRlciBkaWRuJ3QgdmFsaWRh
dGUsIGRvbid0IG1vdmUgZm9yd2FyZCB3aXRoIGNvbXBpbGluZyB0cmFuc2xhdGVkIHNvdXJjZS4K
LQogICAgIGludCB0cmFuc2xhdGVkU2hhZGVyTGVuZ3RoID0gdHJhbnNsYXRlZFNoYWRlclNvdXJj
ZS5sZW5ndGgoKTsKIAogICAgIGNvbnN0IENTdHJpbmcmIHRyYW5zbGF0ZWRTaGFkZXJDU3RyaW5n
ID0gdHJhbnNsYXRlZFNoYWRlclNvdXJjZS51dGY4KCk7CkBAIC04MDEsMTggKzc2Niw2MSBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaQogICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwogICAgICAgICA6OmdsRmx1c2go
KTsKICAgICB9CisgICAgLy8gQ3VycmVudGx5IG9ubHkgZm9ybWF0PVJHQkEsIHR5cGU9VU5TSUdO
RURfQllURSBpcyBzdXBwb3J0ZWQgYnkgdGhlIHNwZWNpZmljYXRpb246IGh0dHA6Ly93d3cua2hy
b25vcy5vcmcvcmVnaXN0cnkvd2ViZ2wvc3BlY3MvbGF0ZXN0LworICAgIC8vIElmIHRoaXMgZXZl
ciBjaGFuZ2VzLCB0aGlzIGNvZGUgd2lsbCBuZWVkIHRvIGJlIHVwZGF0ZWQuCisKKyAgICAvLyBD
YWxjdWxhdGUgdGhlIHN0cmlkZXMgb2Ygb3VyIGRhdGEgYW5kIGNhbnZhcworICAgIHVuc2lnbmVk
IGludCBmb3JtYXRTaXplID0gNDsgLy8gUkdCQSBVTlNJR05FRF9CWVRFCisgICAgdW5zaWduZWQg
aW50IGRhdGFTdHJpZGUgPSB3aWR0aCAqIGZvcm1hdFNpemU7CisgICAgdW5zaWduZWQgaW50IGNh
bnZhc1N0cmlkZSA9IG1fY3VycmVudFdpZHRoICogZm9ybWF0U2l6ZTsKKworICAgIC8vIElmIHdl
IGFyZSB1c2luZyBhIHBhY2sgYWxpZ25tZW50IG9mIDgsIHRoZW4gd2UgbmVlZCB0byBhbGlnbiBv
dXIgc3RyaWRlcyB0byA4IGJ5dGUgYm91bmRhcmllcworICAgIC8vIFNlZTogaHR0cDovL2VuLndp
a2lwZWRpYS5vcmcvd2lraS9EYXRhX3N0cnVjdHVyZV9hbGlnbm1lbnQgKGNvbXB1dGluZyBwYWRk
aW5nKQorICAgIGludCBwYWNrQWxpZ25tZW50OworICAgIGdsR2V0SW50ZWdlcnYoR0xfUEFDS19B
TElHTk1FTlQsICZwYWNrQWxpZ25tZW50KTsKKyAgICBpZiAoOCA9PSBwYWNrQWxpZ25tZW50KSB7
CisgICAgICAgIGRhdGFTdHJpZGUgPSAoZGF0YVN0cmlkZSArIDcpICYgfjc7CisgICAgICAgIGNh
bnZhc1N0cmlkZSA9IChjYW52YXNTdHJpZGUgKyA3KSAmIH43OworICAgIH0KKworICAgIHVuc2ln
bmVkIGNoYXIqIGNhbnZhc0RhdGEgPSBuZXcgdW5zaWduZWQgY2hhcltjYW52YXNTdHJpZGUgKiBt
X2N1cnJlbnRIZWlnaHRdOworICAgIDo6Z2xSZWFkUGl4ZWxzKDAsIDAsIG1fY3VycmVudFdpZHRo
LCBtX2N1cnJlbnRIZWlnaHQsIGZvcm1hdCwgdHlwZSwgY2FudmFzRGF0YSk7CisKKyAgICAvLyBJ
ZiB3ZSBmYWlsZWQgdG8gcmVhZCBvdXIgY2FudmFzIGRhdGEgZHVlIHRvIGEgR0wgZXJyb3IsIGRv
bid0IGNvbnRpbnVlCisgICAgaW50IGVycm9yID0gZ2xHZXRFcnJvcigpOworICAgIGlmIChHTF9O
T19FUlJPUiAhPSBlcnJvcikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihlcnJvcik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBDbGVhciBvdXIgZGF0YSBpbiBjYXNlIHNv
bWUgb2YgaXQgbGllcyBvdXRzaWRlIHRoZSBib3VuZHMgb2Ygb3VyIGNhbnZhcworICAgIC8vIFRP
RE86IGRvbid0IGRvIHRoaXMgaWYgYWxsIG9mIHRoZSBkYXRhIGxpZXMgaW5zaWRlIHRoZSBib3Vu
ZHMgb2YgdGhlIGNhbnZhcworICAgIG1lbXNldChkYXRhLCAwLCBkYXRhU3RyaWRlICogaGVpZ2h0
KTsKKworICAgIC8vIENhbGN1bGF0ZSB0aGUgaW50ZXJzZWN0aW9uIG9mIG91ciBjYW52YXMgYW5k
IGRhdGEgYm91bmRzCisgICAgSW50UmVjdCBkYXRhUmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsK
KyAgICBJbnRSZWN0IGNhbnZhc1JlY3QoMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhl
aWdodCk7CisgICAgSW50UmVjdCBub25aZXJvRGF0YVJlY3QgPSBpbnRlcnNlY3Rpb24oZGF0YVJl
Y3QsIGNhbnZhc1JlY3QpOworCisgICAgdW5zaWduZWQgaW50IHhEYXRhT2Zmc2V0ID0geCA8IDAg
PyAteCAqIGZvcm1hdFNpemUgOiAwOworICAgIHVuc2lnbmVkIGludCB5RGF0YU9mZnNldCA9IHkg
PCAwID8gLXkgKiBkYXRhU3RyaWRlIDogMDsKKyAgICB1bnNpZ25lZCBpbnQgeENhbnZhc09mZnNl
dCA9IG5vblplcm9EYXRhUmVjdC54KCkgKiBmb3JtYXRTaXplOworICAgIHVuc2lnbmVkIGludCB5
Q2FudmFzT2Zmc2V0ID0gbm9uWmVyb0RhdGFSZWN0LnkoKSAqIGNhbnZhc1N0cmlkZTsKKyAgICB1
bnNpZ25lZCBjaGFyKiBkc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oZGF0YSkgKyB4
RGF0YU9mZnNldCArIHlEYXRhT2Zmc2V0OworICAgIHVuc2lnbmVkIGNoYXIqIHNyYyA9IGNhbnZh
c0RhdGEgKyB4Q2FudmFzT2Zmc2V0ICsgeUNhbnZhc09mZnNldDsKKyAgICBmb3IgKGludCByb3cg
PSAwOyByb3cgPCBub25aZXJvRGF0YVJlY3QuaGVpZ2h0KCk7IHJvdysrKSB7CisgICAgICAgIG1l
bWNweShkc3QsIHNyYywgbm9uWmVyb0RhdGFSZWN0LndpZHRoKCkgKiBmb3JtYXRTaXplKTsKKyAg
ICAgICAgZHN0ICs9IGRhdGFTdHJpZGU7CisgICAgICAgIHNyYyArPSBjYW52YXNTdHJpZGU7Cisg
ICAgfQorCisgICAgZGVsZXRlIFtdIGNhbnZhc0RhdGE7CiAgICAgOjpnbFJlYWRQaXhlbHMoeCwg
eSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKKwogICAgIGlmIChtX2F0dHJz
LmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCiAgICAgICAgIDo6
Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX211
bHRpc2FtcGxlRkJPKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRl
ckNvbXBpbGVyKCkKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBub3QgaW1wbGVtZW50ZWQgb24g
ZGVza3RvcCBPcGVuR0wuIFdlIG5lZWQgdG8gaGF2ZSBpZmRlZnMgZm9yIHRoZSBkaWZmZXJlbnQg
R0wgdmFyaWFudHMuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2FtcGxlQ292ZXJhZ2UoR0MzRGNs
YW1wZiB2YWx1ZSwgR0MzRGJvb2xlYW4gaW52ZXJ0KQogewogICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwpAQCAtMTM4NiwxMyArMTM5NCw2IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmxheWVy
Q29tcG9zaXRlZCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fbGF5ZXJDb21wb3NpdGVkOwogfQogCi1F
eHRlbnNpb25zM0QqIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25zKCkKLXsKLSAgICBp
ZiAoIW1fZXh0ZW5zaW9ucykKLSAgICAgICAgbV9leHRlbnNpb25zID0gYWRvcHRQdHIobmV3IEV4
dGVuc2lvbnMzRE9wZW5HTCh0aGlzKSk7Ci0gICAgcmV0dXJuIG1fZXh0ZW5zaW9ucy5nZXQoKTsK
LX0KLQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dDNET3BlbkdMRVMuY3BwCmluZGV4IGIxYmQxZGM1NmNhNmZkOTI4M2RiMmRhZTEyMzgzY2Uy
MmZjOTQzMDIuLjNiNDRhMjQ2ZWYxMzA0YzA0OTE2YThjMTM1OTA0NjFjZWEzZjI4NDAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHQzRE9wZW5HTEVTLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAKQEAgLTI5LDkzICsyOSwyOSBA
QAogI2lmIEVOQUJMRShXRUJHTCkKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0K
LSNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0wuaCIKKyNpbmNsdWRlICJFeHRlbnNpb25zM0RP
cGVuR0xFUy5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCisj
aW5jbHVkZSAiTGF5ZXJXZWJLaXRUaHJlYWQuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgotCi0jaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShRVCkKLSNpbmNsdWRlICJPcGVuR0xT
aGltcy5oIgotI2VuZGlmCisjaW5jbHVkZSAiT3BlbkdMRVNTaGltcy5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHNBbmRDb252ZXJ0
VG9CR1JBSWZOZWNlc3NhcnkoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVu
c2lnbmVkIGNoYXIqIHBpeGVscykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFk
ZXJDb21waWxlcigpCiB7Ci0gICAgY29uc3QgaW50IHRvdGFsQnl0ZXMgPSBtX2N1cnJlbnRXaWR0
aCAqIG1fY3VycmVudEhlaWdodCAqIDQ7Ci0gICAgOjpnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgs
IGhlaWdodCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgcGl4ZWxzKTsKLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHRvdGFsQnl0ZXM7IGkgKz0gNCkKLSAgICAgICAgc3RkOjpzd2FwKHBpeGVs
c1tpXSwgcGl4ZWxzW2kgKyAyXSk7IC8vIENvbnZlcnQgdG8gQkdSQS4KKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICA6OmdsUmVsZWFzZVNoYWRlckNvbXBpbGVyKCk7CiB9CiAKLWJvb2wg
R3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzQW5kQ29udmVydFRvQkdSQUlmTmVjZXNzYXJ5
KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBjaGFyKiBwaXhl
bHMpCiB7Ci0gICAgY29uc3QgaW50IHdpZHRoID0gc2l6ZS53aWR0aCgpOwotICAgIGNvbnN0IGlu
dCBoZWlnaHQgPSBzaXplLmhlaWdodCgpOwotICAgIEdMdWludCBjb2xvckZvcm1hdCA9IDAsIHBp
eGVsRGF0YVR5cGUgPSAwOwotICAgIGlmIChtX2F0dHJzLmFscGhhKSB7Ci0gICAgICAgIG1faW50
ZXJuYWxDb2xvckZvcm1hdCA9IEdMX1JHQkE7Ci0gICAgICAgIGNvbG9yRm9ybWF0ID0gR0xfUkdC
QTsKLSAgICAgICAgcGl4ZWxEYXRhVHlwZSA9IEdMX1VOU0lHTkVEX0JZVEU7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgbV9pbnRlcm5hbENvbG9yRm9ybWF0ID0gR0xfUkdCOwotICAgICAgICBjb2xv
ckZvcm1hdCA9IEdMX1JHQjsKLSAgICAgICAgcGl4ZWxEYXRhVHlwZSA9IEdMX1VOU0lHTkVEX1NI
T1JUXzVfNl81OwotICAgIH0KLQotICAgIC8vIFdlIGRvbid0IGFsbG93IHRoZSBsb2dpYyB3aGVy
ZSBzdGVuY2lsIGlzIHJlcXVpcmVkIGFuZCBkZXB0aCBpcyBub3QuCi0gICAgLy8gU2VlIEdyYXBo
aWNzQ29udGV4dDNEOjp2YWxpZGF0ZUF0dHJpYnV0ZXMuCi0gICAgYm9vbCBzdXBwb3J0UGFja2Vk
RGVwdGhTdGVuY2lsQnVmZmVyID0gKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKSAm
JiBnZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwi
KTsKLQotICAgIC8vIFJlc2l6ZSByZWd1bGFyIEZCTy4KLSAgICBib29sIG11c3RSZXN0b3JlRkJP
ID0gZmFsc2U7Ci0gICAgaWYgKG1fYm91bmRGQk8gIT0gbV9mYm8pIHsKLSAgICAgICAgbXVzdFJl
c3RvcmVGQk8gPSB0cnVlOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgIH0KLQotICAgIDo6Z2xCaW5kVGV4
dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOwotICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RF
WFRVUkVfMkQsIDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgY29s
b3JGb3JtYXQsIHBpeGVsRGF0YVR5cGUsIDApOwotICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUy
REVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpD
T0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAwKTsKLQotICAgIDo6
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAgICA6
OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKLSAgICA6
OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7Ci0KLSAgICAvLyBXZSBkb24ndCBzdXBw
b3J0IGFudGlhbGlhc2luZyB5ZXQuIFNlZSBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVBdHRy
aWJ1dGVzLgotICAgIEFTU0VSVCghbV9hdHRycy5hbnRpYWxpYXMpOwotCi0gICAgaWYgKG1fYXR0
cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKSB7Ci0gICAgICAgIC8vIFVzZSBhIDI0IGJpdCBk
ZXB0aCBidWZmZXIgd2hlcmUgd2Uga25vdyB3ZSBoYXZlIGl0LgotICAgICAgICBpZiAoc3VwcG9y
dFBhY2tlZERlcHRoU3RlbmNpbEJ1ZmZlcikgewotICAgICAgICAgICAgOjpnbEJpbmRUZXh0dXJl
KEdMX1RFWFRVUkVfMkQsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgICAgIDo6Z2xU
ZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVO
Q0lMLCB3aWR0aCwgaGVpZ2h0LCAwLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8yNF84LCAwKTsKLSAgICAgICAgICAgIGlm
IChtX2F0dHJzLnN0ZW5jaWwpCi0gICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVy
ZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQsIEdMX1RFWFRVUkVfMkQs
IG1fZGVwdGhTdGVuY2lsQnVmZmVyLCAwKTsKLSAgICAgICAgICAgIGlmIChtX2F0dHJzLmRlcHRo
KQotICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZF
UiwgR0xfREVQVEhfQVRUQUNITUVOVCwgR0xfVEVYVFVSRV8yRCwgbV9kZXB0aFN0ZW5jaWxCdWZm
ZXIsIDApOwotICAgICAgICAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkgewotICAg
ICAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpS
RU5ERVJCVUZGRVIsIG1fc3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgICAgICAgICAgOjpnbFJlbmRl
cmJ1ZmZlclN0b3JhZ2VFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgR0xfU1RF
TkNJTF9JTkRFWDgsIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1
ZmZlclJlbmRlcmJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBo
aWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5E
RVJCVUZGRVIsIG1fc3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
ZiAobV9hdHRycy5kZXB0aCkgewotICAgICAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVy
RVhUKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fZGVwdGhCdWZmZXIpOwotICAg
ICAgICAgICAgICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlRVhUKEdyYXBoaWNzQ29udGV4dDNE
OjpSRU5ERVJCVUZGRVIsIEdMX0RFUFRIX0NPTVBPTkVOVDE2LCB3aWR0aCwgaGVpZ2h0KTsKLSAg
ICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9kZXB0aEJ1ZmZlcik7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHcmFwaGljc0NvbnRl
eHQzRDo6UkVOREVSQlVGRkVSLCAwKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoZ2xDaGVj
a0ZyYW1lYnVmZmVyU3RhdHVzRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgIT0g
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7Ci0gICAgICAgIC8vIEZJ
WE1FOiBjbGVhbnVwCi0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgOjpnbFJlYWRQaXhl
bHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgcGl4ZWxz
KTsKKyAgICBpbnQgdG90YWxCeXRlcyA9IHdpZHRoICogaGVpZ2h0ICogNDsKKyAgICBpZiAoaXNH
TEVTMkNvbXBsaWFudCgpKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG90YWxCeXRl
czsgaSArPSA0KQorICAgICAgICAgICAgc3RkOjpzd2FwKHBpeGVsc1tpXSwgcGl4ZWxzW2kgKyAy
XSk7IC8vIENvbnZlcnQgdG8gQkdSQS4KICAgICB9Ci0KLSAgICByZXR1cm4gbXVzdFJlc3RvcmVG
Qk87CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc29sdmVNdWx0aXNhbXBsaW5nSWZO
ZWNlc3NhcnkoY29uc3QgSW50UmVjdCYgcmVjdCkKQEAgLTE1Niw2ICs5MiwxNyBAQCBib29sIEdy
YXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGVudW0gaW50ZQogICAgIHJldHVybiB0cnVlOwogfQogCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp2YWxpZGF0ZUF0dHJpYnV0ZXMoKQoreworICAgIHZhbGlkYXRlRGVwdGhTdGVuY2ls
KCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKKworICAgIGlmIChtX2F0dHJzLmFudGlh
bGlhcykgeworICAgICAgICBFeHRlbnNpb25zM0QqIGV4dGVuc2lvbnMgPSBnZXRFeHRlbnNpb25z
KCk7CisgICAgICAgIGlmICghZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0lNR19tdWx0aXNhbXBs
ZWRfcmVuZGVyX3RvX3RleHR1cmUiKSkKKyAgICAgICAgICAgIG1fYXR0cnMuYW50aWFsaWFzID0g
ZmFsc2U7CisgICAgfQorfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aFJhbmdlKEdD
M0RjbGFtcGYgek5lYXIsIEdDM0RjbGFtcGYgekZhcikKIHsKICAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKQEAgLTE2OCw2ICsxMTUsMTkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJE
ZXB0aChHQzNEY2xhbXBmIGRlcHRoKQogICAgIDo6Z2xDbGVhckRlcHRoZihkZXB0aCk7CiB9CiAK
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworRXh0ZW5zaW9uczNEKiBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0RXh0ZW5zaW9ucygpCit7CisgICAgaWYgKCFtX2V4dGVuc2lvbnMpCisgICAgICAgIG1f
ZXh0ZW5zaW9ucyA9IGFkb3B0UHRyKG5ldyBFeHRlbnNpb25zM0RPcGVuR0xFUyh0aGlzKSk7Cisg
ICAgcmV0dXJuIG1fZXh0ZW5zaW9ucy5nZXQoKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQz
RDo6c3lzdGVtQWxsb3dzTXVsdGlzYW1wbGluZ09uQVRJQ2FyZHMoKQoreworICAgIHJldHVybiBm
YWxzZTsgLy8gbm90IGFwcGxpY2FibGUKK30KKworfQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdM
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhp
Y3NDb250ZXh0M0RRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9H
cmFwaGljc0NvbnRleHQzRFF0LmNwcAppbmRleCA3MGQzZjI0YWZhNTU0MmE2OGExMjQxZDM4MWMz
Y2U5MzQ4NzgxODg1Li4wNjc2OTIxYzExZjgwZmRjNWZhODQ4MzlhZGZmZjUzYjEzMGFmYWJhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0Nv
bnRleHQzRFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9H
cmFwaGljc0NvbnRleHQzRFF0LmNwcApAQCAtOTgsNiArOTgsMTMgQEAgYm9vbCBHcmFwaGljc0Nv
bnRleHQzRDo6aXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0CiAjZW5kaWYKIH0KIAorI2lmICFVU0Uo
T1BFTkdMX0VTXzIpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGls
ZXIoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisjZW5kaWYKKwogR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGUoR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCiAgICAgOiBtX2NvbnRleHQoY29udGV4
dCkKICAgICAsIG1faG9zdFdpbmRvdyhob3N0V2luZG93KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151250</attachid>
            <date>2012-07-09 08:20:50 -0700</date>
            <delta_ts>2012-07-09 08:46:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90567-20120709112024.patch</filename>
            <type>text/plain</type>
            <size>67282</size>
            <attacher name="Joshua Netterfield">jnetterfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMTA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjAxZjhlMjRjMjlkYmI2
YjJjZjE5MTQ1OGJjNWJhY2ExMjk5MTFlYi4uZWMzMWM2ZGJjMzJiMzBiZWYxOTlhYzk0ZmU3MTRj
ZTEyYWI1NWVjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtODY1LDYgKzg2NSw5NiBAQAogICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjbGlwc0NvbXBvc2l0aW5nRGVzY2VuZGFudHMp
OgogICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKICAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck9iamVjdDo6aGFzQ2xpcE9yT3ZlcmZsb3dDbGlwKToKKzIwMTItMDctMDQgIEpvc2h1
YSBOZXR0ZXJmaWVsZCAgPGpuZXR0ZXJmaWVsZEByaW0uY29tPgorICAgICAgICBNYWtlIEdDM0Qg
YW5kIEUzRCBtb3JlIG1haW50YWluYWJsZSBmb3IgR0xFUyBwbGF0Zm9ybXMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwNTY3CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBjbGVhbnMgdXAg
Y29kZSBmb3IgV2ViR0wgb24gT3BlbkdMRVMgcGxhdGZvcm1zIHdoaWNoIHVzZSAKKyAgICAgICAg
R3JhcGhpY3NDb250ZXh0M0RPcGVuR0wqIGFuZCBFeHRlbnNpb25zM0RPcGVuR0wqLiBBbHRob3Vn
aAorICAgICAgICBHcmFwaGljc0NvbnRleHQzRE9wZW5HTCB3YXMgYWxyZWFkeSBzcGxpdCBpbnRv
IEdyYXBoaWNzQ29udGV4dDNET3BlbkdMLAorICAgICAgICBHcmFwaGljc0NvbnRleHQzRE9wZW5H
TENvbW1vbiwgYW5kICBHcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLCB0aGlzIHBhdGNoCisgICAg
ICAgIGlzIGFuIGF0dGVtcHQgdG8gcmVmYWN0b3IgdGhpcyBjb2RlIGluIGEgd2F5IHRoYXQgd2ls
bCBoZWxwIEJsYWNrQmVycnkgYW5kCisgICAgICAgIG90aGVyIHRlYW1zIHN1cHBvcnQgV2ViR0wg
b24gbW9iaWxlIHBsYXRmb3JtcyB3aXRoIGFzIGxpdHRsZSB1c2Ugb2YKKyAgICAgICAgIiNJRiBV
U0UoT1BFTkdMX0VTXzIpIiBpbiBjb21tb24gY29kZSBhcyBwb3NzaWJsZS4gQWxzbyBpbmNsdWRl
ZCBpcyB0aGUKKyAgICAgICAgc2VwYXJhdGlvbiBvZiBFeHRlbnNpb25zM0RPcGVuR0wgaW50byBF
eHRlbnNpb25zM0RPcGVuR0xDb21tb24sCisgICAgICAgIEV4dGVuc2lvbnMzRE9wZW5HTCwgYW5k
IEV4dGVuc2lvbnMzRE9wZW5HTEVTIGFzIHdlbGwgYXMgdGhlIGludHJvZHVjdGlvbgorICAgICAg
ICBvZiBPcGVuR0xFU1NoaW1zLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaXMgY3JlYXRlZCBpbiBs
YXJnZSBwYXJ0IGJ5IEpvbmF0aGFuIEZlbGRzdGVpbi4KKworICAgICAgICBObyBuZXcgdGVzdHM6
IG5vIG5ldyBiZWhhdmlvdXIuCisKKyAgICAgICAgKiBQbGF0Zm9ybUJsYWNrQmVycnkuY21ha2U6
IFJlY29nbml6ZSBCbGFja0JlcnJ5IGFzIE9QRU5HTCBFUywgYWRkIG5ldyBmaWxlcyB0byBidWls
ZAorICAgICAgICAqIFRhcmdldC5wcmk6IEFkZCBuZXcgRXh0ZW5zaW9uczNET3BlbkdMKiB0byBX
ZWJHTCBidWlsZHMKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQz
RC5oOiBBZGQgdmFsaWRhdGVEZXB0aFN0ZW5jaWwsIG1ha2Ugc3lzdGVtQWxsb3dzTXVsdGlzYW1w
bGluZ09uQVRJQ2FyZHMgYSBhIG1lbWJlciBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL09wZW5HTEVTU2hpbXMuaDogQWRkZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHA6IE1v
dmUgY29kZSB0byBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24gd2hlcmUgcG9zc2libGUKKyAgICAg
ICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTDo6RXh0ZW5zaW9uczNET3BlbkdMKTogUmVm
bGVjdCB0aGF0IGl0IGlzIG5vdyBpbmhlcml0cyBFeHRlbnNpb25zM0RDb21tb24KKyAgICAgICAg
KFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTDo6c3VwcG9ydHNFeHRlbnNpb24pOiBDb250YWlu
cyBPcGVuR0wgc3BlY2lmaWMgY29kZSBmcm9tIHN1cHBvcnRzCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTDo6Z2V0RXh0ZW5zaW9ucyk6IFJl
dHVybnMgYSBsaXN0IG9mIGV4dGVuc2lvbnMKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmg6IFJlbW92ZSBmdW5jdGlvbnMgbm93IGluIEV4dGVu
c2lvbnMzRE9wZW5HTENvbW1vbgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChFeHRlbnNp
b25zM0RPcGVuR0wpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNp
b25zM0RPcGVuR0xDb21tb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjpFeHRlbnNpb25zM0RPcGVuR0xD
b21tb24pOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjp+RXh0
ZW5zaW9uczNET3BlbkdMQ29tbW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbjo6c3VwcG9ydHMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3Bl
bkdMQ29tbW9uOjplbnN1cmVFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMz
RE9wZW5HTENvbW1vbjo6aXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMz
RE9wZW5HTENvbW1vbjo6Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQik6CisgICAgICAgIChXZWJD
b3JlOjpFeHRlbnNpb25zM0RPcGVuR0xDb21tb246OmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VB
TkdMRSk6IEV4aXN0ZWQgYmVmb3JlLCBidXQgZGlkIG5vdGhpbmcuIE5vdyBkb2VzIHdoYXQgaXMg
c2F5cyBpdCBkb2VzLgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9u
Ojppbml0aWFsaXplQXZhaWxhYmxlRXh0ZW5zaW9ucyk6IE1vdmVkIGZyb20gRXh0ZW5zaW9uczNE
T3BlbkdMOjpzdXBwb3J0cworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRl
bnNpb25zM0RPcGVuR0xDb21tb24uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChFeHRlbnNpb25zM0RPcGVuR0xDb21tb24pOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0xFUzo6
RXh0ZW5zaW9uczNET3BlbkdMRVMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3Bl
bkdMRVM6On5FeHRlbnNpb25zM0RPcGVuR0xFUyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNp
b25zM0RPcGVuR0xFUzo6ZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRyk6CisgICAg
ICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0xFUzo6cmVuZGVyYnVmZmVyU3RvcmFnZU11
bHRpc2FtcGxlSU1HKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTEVTOjpj
cmVhdGVWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVu
R0xFUzo6ZGVsZXRlVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9u
czNET3BlbkdMRVM6OmlzVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5z
aW9uczNET3BlbkdMRVM6OmJpbmRWZXJ0ZXhBcnJheU9FUyk6CisgICAgICAgIChXZWJDb3JlOjpF
eHRlbnNpb25zM0RPcGVuR0xFUzo6c3VwcG9ydHNFeHRlbnNpb24pOiBDb250YWlucyBPcGVuR0xF
UyBzcGVjaWZpYyBjb2RlIGZyb20gc3VwcG9ydHMKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lv
bnMzRE9wZW5HTEVTOjpnZXRFeHRlbnNpb25zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oLgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChFeHRlbnNpb25zM0RPcGVuR0xFUyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZUF0dHJpYnV0ZXMpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
cmVuZGVyYnVmZmVyU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3lz
dGVtQWxsb3dzTXVsdGlzYW1wbGluZ09uQVRJQ2FyZHMpOiBOb3cgYSBtZW1iZXIgZnVuY3Rpb24u
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXh0ZW5zaW9ucyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdM
Q29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0
ZURlcHRoU3RlbmNpbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y2xl
YXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzVGV4dHVyZSk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjps
aW5lV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmxpbmtQcm9n
cmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwaXhlbFN0b3JlaSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cG9seWdvbk9mZnNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlQnVmZmVyKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzQW5kQ29u
dmVydFRvQkdSQUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjp2YWxpZGF0ZUF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXh0ZW5zaW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3lzdGVtQWxsb3dzTXVsdGlzYW1wbGluZ09uQVRJQ2Fy
ZHMpOiBOb3cgYSBtZW1iZXIgZnVuY3Rpb24uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIpOgogCiAy
MDEyLTA3LTA1ICBZb25nanVuIFpoYW5nICA8eW9uZ2p1bl96aGFuZ0BhcHBsZS5jb20+CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDM1YjZkNWRlNDM2NmIxZDg1NGIwNmQ1MDE0
MDMxN2FkYTI2YzhlNWMuLjQ3MmYxNjMzYjY2N2Y1ZGI0YjZiMmZkYTA0ZTRhMjU0NjcxZGFhNDQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNjA1NCw2ICs2MDU0LDcgQEAgd2Vi
Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9PcGVu
R0xTaGltcy5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL09wZW5HTFNo
aW1zLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNp
b25zM0RPcGVuR0wuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
M0RPcGVuR0xDb21tb24uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJs
YWNrQmVycnkuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UK
aW5kZXggNTE2OWE1ZGQ1OTczYzdiMGUyODhkYTIxMjMxOTQ3MTg2NTMwZWE4MS4uNTg3ZWRlM2Qw
NjkwODAzNzNiZWQyYTMxMjI1MmE1NTc5MjFkY2ZjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
QmxhY2tCZXJyeS5jbWFrZQpAQCAtMjE4LDYgKzIxOCw3IEBAIGlmIChFTkFCTEVfUkVRVUVTVF9B
TklNQVRJT05fRlJBTUUpCiBFTkRJRiAoKQogCiBpZiAoRU5BQkxFX1dFQkdMKQorICAgIEFERF9E
RUZJTklUSU9OUyAoLURXVEZfVVNFX09QRU5HTF9FU18yPTEpCiAgICAgTElTVChBUFBFTkQgV2Vi
Q29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUiCiAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wiCkBAIC0yMjUsNiArMjI2LDExIEBAIGlmIChFTkFCTEVfV0VCR0wpCiAgICAgTElT
VChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNr
YmVycnkvRHJhd2luZ0J1ZmZlckJsYWNrQmVycnkuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2JsYWNrYmVycnkvR3JhcGhpY3NDb250ZXh0M0RCbGFja0JlcnJ5LmNwcAorICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3Bw
CisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5H
TEVTLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3Bl
bkdMQ29tbW9uLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9u
czNET3BlbkdMRVMuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFw
aGljc0NvbnRleHQzRC5jcHAKICAgICApCiBFTkRJRiAoKQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCA0ZDYy
YWQ4ZTAyZmU3ZTU2MjI3MjNmODg5NDE2ZWRmYWQ0OTM2M2U1Li5jY2Y1M2Y4NjBhYzIxNzg0ZDQx
N2E0M2RhMTAzMzc0ZTFlOTdlZmI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQu
cHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTM5NTgsMTUgKzM5NTgsMTkg
QEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1dFQkdMPTEpIHsKIAogICAgIGNvbnRhaW5zKFFU
X0NPTkZJRywgb3BlbmdsKSB8IGNvbnRhaW5zKFFUX0NPTkZJRywgb3BlbmdsZXMyKSB7CiAgICAg
ICAgICFjb250YWlucyhRVF9DT05GSUcsIG9wZW5nbGVzMikgewotICAgICAgICAgICAgU09VUkNF
UyArPSBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3Bw
CisgICAgICAgICAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAgXAorICAgICAgICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAKICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCisgICAgICAgICAgICBTT1VSQ0VTICs9IFwK
KyAgICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQz
RE9wZW5HTEVTLmNwcCBcCisgICAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
RXh0ZW5zaW9uczNET3BlbkdMRVMuY3BwCiAgICAgICAgIH0KIAogICAgICAgICBIRUFERVJTICs9
IHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaAogCiAgICAgICAg
IFNPVVJDRVMgKz0gXAotICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVu
c2lvbnMzRE9wZW5HTC5jcHAgXAorICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAgXAogICAgICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAogCiAgICAgICAg
IEFOR0xFX0RJUiA9ICQkcmVwbGFjZShQV0QsICJXZWJDb3JlIiwgIlRoaXJkUGFydHkvQU5HTEUi
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCmluZGV4IDgzN2I4YjQzMGIxNDM0YTU0NmYwMDBkMTgxMzU5YTRlMDZk
ZTczZGEuLmQxNWJhOGU0OGUzNThiZTQ1ODg1MTFjNWZkN2UzNjUyYjkzNWI3ZDggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKQEAgLTM4MDgsNiArMzgwOCw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL1dlYlRpbGVkTGF5ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL1dlYlRpbGVkTGF5ZXIubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0M0RPcGVuR0xDb21tb24uY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAxMDk0OWFiMGQ5Mzc5ZGUzMWE5MTY0M2NhNWMx
OTkxZDE4ZjdmNjRmLi45ZTQ3YjYzYzdlMmU5MTc4MjRhMTg4MWI2YTg5M2MwOTVhOWQ0NzBiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC0xMTkxLDYgKzExOTEsOCBAQAogCQk0NDlCMTlGNTBGQTcyRUNFMDAxNUNBNEEgLyogSFRN
TFBhcnNlclF1aXJrcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDQ5QjE5RjMwRkE3MkVDRTAwMTVDQTRBIC8qIEhUTUxQYXJzZXJRdWlya3MuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NEEyOEFBQzEy
REZCOEFDMDBBRTkyM0IgLyogTWF0aE1MRWxlbWVudEZhY3RvcnkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0QTI4QUFCMTJERkI4QUMwMEFFOTIzQiAv
KiBNYXRoTUxFbGVtZW50RmFjdG9yeS5oICovOyB9OwogCQk0NEEyOEFBRjEyREZCOEJGMDBBRTky
M0IgLyogTWF0aE1MTmFtZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ0QTI4QUFFMTJERkI4QkYwMEFFOTIzQiAvKiBNYXRoTUxOYW1lcy5oICovOyB9
OworCQk0NERBQjVCMTE1QTYyMzU4MDA5N0MxRTQgLyogRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9u
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0REFC
NUFGMTVBNjIzNTgwMDk3QzFFNCAvKiBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwICovOyB9
OworCQk0NERBQjVCMjE1QTYyMzU4MDA5N0MxRTQgLyogRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NERBQjVC
MDE1QTYyMzU4MDA5N0MxRTQgLyogRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmggKi87IH07CiAJ
CTQ1MDk5QzQxMTM3MEE3ODAwMDU4RDUxMyAvKiBJY29uVVJMLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1MDk5QzQwMTM3MEE3ODAwMDU4RDUxMyAv
KiBJY29uVVJMLmNwcCAqLzsgfTsKIAkJNDUwQ0VCRjAxNTA3M0JCRTAwMkJCMTQ5IC8qIExhYmVs
YWJsZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDUwQ0VCRUUxNTA3M0JCRTAwMkJCMTQ5IC8qIExhYmVsYWJsZUVsZW1lbnQuY3BwICov
OyB9OwogCQk0NTBDRUJGMTE1MDczQkJFMDAyQkIxNDkgLyogTGFiZWxhYmxlRWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDUwQ0VCRUYxNTA3
M0JCRTAwMkJCMTQ5IC8qIExhYmVsYWJsZUVsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtODI1Miw2ICs4MjU0LDggQEAKIAkJNDRBMjhB
QUUxMkRGQjhCRjAwQUU5MjNCIC8qIE1hdGhNTE5hbWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE1hdGhNTE5hbWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTQ0RDhEQTk4MTM5NTQ1QkUwMDMzN0I3NSAvKiBTVkdNUGF0aEVsZW1lbnQuaWRsICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IFNWR01QYXRoRWxlbWVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTQ0RDhEQTlBMTM5NTQ1Q0QwMDMzN0I3NSAvKiBTVkdBbmltYXRlTW90aW9uRWxl
bWVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQu
aWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NERBQjVBRjE1QTYyMzU4MDA5N0Mx
RTQgLyogRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTQ0REFCNUIwMTVBNjIzNTgwMDk3QzFFNCAvKiBFeHRlbnNpb25z
M0RPcGVuR0xDb21tb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ1MDk5
QzQwMTM3MEE3ODAwMDU4RDUxMyAvKiBJY29uVVJMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEljb25VUkwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0NTBDRUJFRTE1MDczQkJFMDAyQkIxNDkgLyogTGFiZWxhYmxlRWxlbWVudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYWJlbGFibGVFbGVtZW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDUwQ0VCRUYxNTA3M0JCRTAwMkJCMTQ5IC8qIExh
YmVsYWJsZUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGFiZWxh
YmxlRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjE2NjEsNiArMjE2
NjUsOCBAQAogCQlGQkMyMjBERDEyMzdGQkVCMDBCQ0Y3ODggLyogb3BlbmdsICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk0NERBQjVBRjE1QTYyMzU4MDA5
N0MxRTQgLyogRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcCAqLywKKwkJCQk0NERBQjVCMDE1
QTYyMzU4MDA5N0MxRTQgLyogRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmggKi8sCiAJCQkJNkU2
N0QyQTQxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5jcHAgKi8sCiAJCQkJ
NkU2N0QyQTUxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5oICovLAogCQkJ
CUZCQzIyMERFMTIzN0ZCRUIwMEJDRjc4OCAvKiBHcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAg
Ki8sCkBAIC0yNTE5Niw2ICsyNTIwMiw3IEBACiAJCQkJNzYyRjFFRDcxNTlEOTYwQTAwNzQwOEYy
IC8qIEhUTUxEaWFsb2dFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk3NjgwOEI1MDE1OURB
REZBMDAyQjUyMzMgLyogSlNIVE1MRGlhbG9nRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUZBRkJGMTkxNUE1RkE3NDAwMDgzQTIwIC8qIFVUSVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNDREQUI1QjIxNUE2MjM1ODAwOTdDMUU0IC8qIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1v
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yODI1Myw2ICsyODI2MCw3IEBACiAJCQkJNzYyRjFFREIx
NTlEOTY4QTAwNzQwOEYyIC8qIEhUTUxEaWFsb2dFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTc2ODA4QjRGMTU5REFERkEwMDJCNTIzMyAvKiBKU0hUTUxEaWFsb2dFbGVtZW50LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTFGQUZCRjE4MTVBNUZBNkUwMDA4M0EyMCAvKiBVVElVdGlsaXRp
ZXMubW0gaW4gU291cmNlcyAqLywKKwkJCQk0NERBQjVCMTE1QTYyMzU4MDA5N0MxRTQgLyogRXh0
ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKaW5kZXggZGJk
OWRmZWRlMDEzYTRjYWYzMzI0NjNhZDMyZmM0ZTE1MjgyNjQ2Ny4uYTQ2MjQwMTkxMWZmNjdiOTE1
ZDZkYWFhMjc5ZDlkMzNiYjkzNzY4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCkBAIC0yMCw3ICsyMCw3IEBACiAgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogICovCiAKICNpZm5kZWYgR3JhcGhpY3NDb250ZXh0M0RfaApAQCAtOTEsMTQg
KzkxLDEyIEBAIGNvbnN0IFBsYXRmb3JtM0RPYmplY3QgTnVsbFBsYXRmb3JtM0RPYmplY3QgPSAw
OwogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0NvbnRleHQuaD4KICNlbmRpZgogCi0jaWYgUExB
VEZPUk0oQkxBQ0tCRVJSWSkKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLSNlbmRpZgotCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBEcmF3aW5nQnVmZmVyOwogY2xhc3MgRXh0ZW5zaW9uczNE
OwotI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShRVCkgfHwg
UExBVEZPUk0oRUZMKQorI2lmIFVTRShPUEVOR0xfRVNfMikKK2NsYXNzIEV4dGVuc2lvbnMzRE9w
ZW5HTEVTOworI2Vsc2UKIGNsYXNzIEV4dGVuc2lvbnMzRE9wZW5HTDsKICNlbmRpZgogI2lmIFBM
QVRGT1JNKFFUKQpAQCAtOTI0LDYgKzkyMiw3IEBAIHB1YmxpYzoKICAgICAvLyBpbiBwYXJ0aWN1
bGFyIHN0ZW5jaWwgYW5kIGFudGlhbGlhcywgYW5kIGRldGVybWluZSB3aGljaCBjb3VsZCBvcgog
ICAgIC8vIGNvdWxkIG5vdCBiZSBob25vcmVkIGJhc2VkIG9uIHRoZSBjYXBhYmlsaXRpZXMgb2Yg
dGhlIE9wZW5HTAogICAgIC8vIGltcGxlbWVudGF0aW9uLgorICAgIHZvaWQgdmFsaWRhdGVEZXB0
aFN0ZW5jaWwoY29uc3QgY2hhciogcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKTsKICAgICB2
b2lkIHZhbGlkYXRlQXR0cmlidXRlcygpOwogCiAgICAgLy8gUmVhZCByZW5kZXJpbmcgcmVzdWx0
cyBpbnRvIGEgcGl4ZWwgYXJyYXkgd2l0aCB0aGUgc2FtZSBmb3JtYXQgYXMgdGhlCkBAIC05NTUs
MTYgKzk1NCwzMCBAQCBwdWJsaWM6CiAgICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBTaGFk
ZXJTb3VyY2VFbnRyeT4gbV9zaGFkZXJTb3VyY2VNYXA7CiAKICAgICBBTkdMRVdlYktpdEJyaWRn
ZSBtX2NvbXBpbGVyOworI2VuZGlmCiAKKyNpZiBQTEFURk9STShRVCkgJiYgZGVmaW5lZChRVF9P
UEVOR0xfRVNfMikKKyAgICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9uczNEUXQ7CisgICAgT3duUHRy
PEV4dGVuc2lvbnMzRFF0PiBtX2V4dGVuc2lvbnM7CisjZWxpZiBQTEFURk9STShCTEFDS0JFUlJZ
KQorICAgIGZyaWVuZCBjbGFzcyBFeHRlbnNpb25zM0RPcGVuR0xFUzsKKyAgICBPd25QdHI8RXh0
ZW5zaW9uczNET3BlbkdMRVM+IG1fZXh0ZW5zaW9uczsKKyNlbGlmICFQTEFURk9STShDSFJPTUlV
TSkKICAgICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9uczNET3BlbkdMOwogICAgIE93blB0cjxFeHRl
bnNpb25zM0RPcGVuR0w+IG1fZXh0ZW5zaW9uczsKKyNlbmRpZgorICAgIGZyaWVuZCBjbGFzcyBF
eHRlbnNpb25zM0RPcGVuR0xDb21tb247CiAKICAgICBBdHRyaWJ1dGVzIG1fYXR0cnM7CiAgICAg
VmVjdG9yPFZlY3RvcjxmbG9hdD4gPiBtX3ZlcnRleEFycmF5OwogCi0gICAgR0MzRHVpbnQgbV90
ZXh0dXJlLCBtX2NvbXBvc2l0b3JUZXh0dXJlOworICAgIEdDM0R1aW50IG1fdGV4dHVyZTsKKyNp
ZiAhUExBVEZPUk0oQkxBQ0tCRVJSWSkKKyAgICBHQzNEdWludCBtX2NvbXBvc2l0b3JUZXh0dXJl
OworI2VuZGlmCiAgICAgR0MzRHVpbnQgbV9mYm87Ci0jaWYgVVNFKE9QRU5HTF9FU18yKQorCisj
aWYgIVBMQVRGT1JNKEJMQUNLQkVSUlkpCiAgICAgR0MzRHVpbnQgbV9kZXB0aEJ1ZmZlcjsKICAg
ICBHQzNEdWludCBtX3N0ZW5jaWxCdWZmZXI7CiAjZW5kaWYKQEAgLTk4NSwxMCArOTk4LDExIEBA
IHB1YmxpYzoKIAogICAgIC8vIEVycm9ycyByYWlzZWQgYnkgc3ludGhlc2l6ZUdMRXJyb3IoKS4K
ICAgICBMaXN0SGFzaFNldDxHQzNEZW51bT4gbV9zeW50aGV0aWNFcnJvcnM7Ci0jZW5kaWYKIAog
ICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU7CiAgICAgT3duUHRyPEdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZT4gbV9wcml2YXRlOworCisgICAgYm9vbCBzeXN0ZW1BbGxv
d3NNdWx0aXNhbXBsaW5nT25BVElDYXJkcygpIGNvbnN0OyAKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL09w
ZW5HTEVTU2hpbXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL09wZW5HTEVT
U2hpbXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4wNTJhZjVlNDVjMDEzZjBkZTJkMzBiMmRiZmZmODdhNTdiNWEw
MTAyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
T3BlbkdMRVNTaGltcy5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIE9wZW5HTEVTU2hpbXNfaAorI2RlZmluZSBPcGVuR0xFU1NoaW1zX2gKKworI2lm
IFBMQVRGT1JNKEJMQUNLQkVSUlkpCisjZGVmaW5lIGdsQmluZEZyYW1lYnVmZmVyRVhUIGdsQmlu
ZEZyYW1lYnVmZmVyCisjZGVmaW5lIGdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQgZ2xGcmFtZWJ1
ZmZlclRleHR1cmUyRAorI2RlZmluZSBnbEJpbmRSZW5kZXJidWZmZXJFWFQgZ2xCaW5kUmVuZGVy
YnVmZmVyCisjZGVmaW5lIGdsUmVuZGVyYnVmZmVyU3RvcmFnZUVYVCBnbFJlbmRlcmJ1ZmZlclN0
b3JhZ2UKKyNkZWZpbmUgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVCBnbEZyYW1lYnVmZmVy
UmVuZGVyYnVmZmVyCisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9FWFQgR0xfUkVOREVSQlVGRkVS
CisjZGVmaW5lIEdMX1NURU5DSUxfQVRUQUNITUVOVF9FWFQgR0xfU1RFTkNJTF9BVFRBQ0hNRU5U
CisjZGVmaW5lIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVCBnbENoZWNrRnJhbWVidWZmZXJT
dGF0dXMKKyNkZWZpbmUgZ2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQgZ2xEZWxldGVGcmFtZWJ1ZmZl
cnMKKyNkZWZpbmUgZ2xEZWxldGVSZW5kZXJidWZmZXJzRVhUIGdsRGVsZXRlUmVuZGVyYnVmZmVy
cworI2RlZmluZSBnbEdlblJlbmRlcmJ1ZmZlcnNFWFQgZ2xHZW5SZW5kZXJidWZmZXJzCisjZGVm
aW5lIGdsR2VuRnJhbWVidWZmZXJzRVhUIGdsR2VuRnJhbWVidWZmZXJzCisjZGVmaW5lIGdsR2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXZFWFQgZ2xHZXRGcmFtZWJ1ZmZlckF0dGFj
aG1lbnRQYXJhbWV0ZXJpdgorI2RlZmluZSBnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2RVhU
IGdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYKKyNkZWZpbmUgZ2xJc1JlbmRlcmJ1ZmZlckVY
VCBnbElzUmVuZGVyYnVmZmVyCisjZGVmaW5lIGdsSXNGcmFtZWJ1ZmZlckVYVCBnbElzRnJhbWVi
dWZmZXIKKyNkZWZpbmUgZ2xHZW5lcmF0ZU1pcG1hcEVYVCBnbEdlbmVyYXRlTWlwbWFwCisjZGVm
aW5lIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCBHTF9DT0xPUl9BVFRBQ0hNRU5UMAorI2RlZmlu
ZSBHTF9ERVBUSF9BVFRBQ0hNRU5UX0VYVCBHTF9ERVBUSF9BVFRBQ0hNRU5UCisjZGVmaW5lIEdM
X0ZSQU1FQlVGRkVSX0NPTVBMRVRFX0VYVCBHTF9GUkFNRUJVRkZFUl9DT01QTEVURQorI2RlZmlu
ZSBHTF9GUkFNRUJVRkZFUl9FWFQgR0xfRlJBTUVCVUZGRVIKKyNkZWZpbmUgR0xfREVQVEgyNF9T
VEVOQ0lMOF9FWFQgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMKKyNkZWZpbmUgR0xfUkdCQTggR0xf
UkdCQThfT0VTCisjZGVmaW5lIEdMX1JHQjggR0xfUkdCOF9PRVMKKyNkZWZpbmUgR0xfUkVBRF9G
UkFNRUJVRkZFUl9FWFQgMHg4Q0E4CisjZGVmaW5lIEdMX0RSQVdfRlJBTUVCVUZGRVJfRVhUIDB4
OENBOQorI2RlZmluZSBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01VTFRJU0FNUExFX0VYVCAweDkx
MzQKKyNkZWZpbmUgR0xfTUFYX1NBTVBMRVNfRVhUIDB4OEQ1NworI2VuZGlmIC8vIFBMQVRGT1JN
KEJMQUNLQkVSUlkpCisKKyNlbmRpZiAvLyBPcGVuR0xFU1NoaW1zX2gKKwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RD
YWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGlj
c0NvbnRleHQzRENhaXJvLmNwcAppbmRleCBhYzI5MmQzNzUxNTc5MmVjYTMyMjllNmY2NzM4OGVi
MjhlNTFlMDk2Li5mZDFkYWQwOWYwMTFiNzZjOWU1OWU0ODUzOWFjOWMwM2RhYWRiMzZhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0Nv
bnRleHQzRENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1
ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZS5oIgogI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
ICNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJv
LmgiCiAjaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKQEAgLTE0Niw2ICsxNDcsMTEgQEAgR3JhcGhp
Y3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCgpCiAgICAgOjpnbERlbGV0ZUZyYW1lYnVm
ZmVyc0VYVCgxLCAmbV9mYm8pOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNl
U2hhZGVyQ29tcGlsZXIoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKIGJvb2wgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFnZSogaW1hZ2UsIHVuc2lnbmVkIGludCBm
b3JtYXQsIHVuc2lnbmVkIGludCB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdu
b3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsIFZlY3Rvcjx1aW50OF90PiYgb3V0cHV0VmVjdG9yKQog
ewogICAgIGlmICghaW1hZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzQ29udGV4dDNEQ2x1dHRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzQ29udGV4dDNEQ2x1dHRlci5j
cHAKaW5kZXggY2EwZmZkYzJiY2I5ZDg5Mzg2YjE1ZDQ4YzMyMzhlYjNlZjliMDk1NC4uN2UyMmY3
MjJkNGJkMzUzZDMzMWJkYzYwNzc1ZTdkNzFhYTA1ZTUxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0NvbnRleHQzRENsdXR0ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhp
Y3NDb250ZXh0M0RDbHV0dGVyLmNwcApAQCAtNTYsNiArNTYsMTEgQEAgR3JhcGhpY3NDb250ZXh0
M0Q6On5HcmFwaGljc0NvbnRleHQzRCgpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEo
SW1hZ2UqIGltYWdlLCB1bnNpZ25lZCBpbnQgZm9ybWF0LCB1bnNpZ25lZCBpbnQgdHlwZSwgYm9v
bCBwcmVtdWx0aXBseUFscGhhLCBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlLCBWZWN0
b3I8dWludDhfdD4mIG91dHB1dFZlY3RvcikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29u
dGV4dDNETWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBo
aWNzQ29udGV4dDNETWFjLm1tCmluZGV4IGNkMDE1MjJlZjIyZjYwZDZmYzkxMWMzMjljNmZlNTkx
MjMxMDY5ZWYuLmNlZDc1YWJhZDIxN2JkNmVkNTUxZjM4OTI1NzRkNmY0Y2E1MjZjMmQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRl
eHQzRE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3Jh
cGhpY3NDb250ZXh0M0RNYWMubW0KQEAgLTI4Miw2ICsyODIsMTEgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6c2V0RXJyb3JNZXNzYWdlQ2FsbGJhY2soUGFzc093blB0cjxFcnJvck1lc3NhZ2VD
YWxsYmFjaz4KIHsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNv
bXBpbGVyKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCiB9CiAKICNlbmRpZiAvLyBF
TkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwCmluZGV4IDRhYTM0MWMzMjZj
NzM1N2IxMTBjOTgzZDAzOWNjZDdiYzMzMTY2MTIuLmJiZTc3YmI3OTg1NGM5MjM3ZThjYjY3MDZj
OTc0NjU5OTU2MmI5MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwCkBAIC00Miw3ICs0
Miw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEV4dGVuc2lvbnMzRE9wZW5HTDo6RXh0ZW5z
aW9uczNET3BlbkdMKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQotICAgIDogbV9pbml0aWFs
aXplZEF2YWlsYWJsZUV4dGVuc2lvbnMoZmFsc2UpCisgICAgOiBFeHRlbnNpb25zM0RPcGVuR0xD
b21tb24oY29udGV4dCkKKyAgICAsIG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zKGZh
bHNlKQogICAgICwgbV9jb250ZXh0KGNvbnRleHQpCiB7CiB9CkBAIC01MSw5MSArNTIsNiBAQCBF
eHRlbnNpb25zM0RPcGVuR0w6On5FeHRlbnNpb25zM0RPcGVuR0woKQogewogfQogCi1ib29sIEV4
dGVuc2lvbnMzRE9wZW5HTDo6c3VwcG9ydHMoY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIC8v
IE5vdGUgb24gc3VwcG9ydCBmb3IgQkdSQToKLSAgICAvLwotICAgIC8vIEZvciBPcGVuR0wgRVMy
LjAsIHJlcXVpcmVzIGNoZWNraW5nIGZvcgotICAgIC8vIEdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9C
R1JBODg4OCBhbmQgR0xfRVhUX3JlYWRfZm9ybWF0X2JncmEuCi0gICAgLy8gRm9yIGRlc2t0b3Ag
R0wsIEJHUkEgaGFzIGJlZW4gc3VwcG9ydGVkIHNpbmNlIE9wZW5HTCAxLjIuCi0gICAgLy8KLSAg
ICAvLyBIb3dldmVyLCBub3RlIHRoYXQgdGhlIEdMIEVTMiBleHRlbnNpb24gcmVxdWlyZXMgdGhl
Ci0gICAgLy8gaW50ZXJuYWxGb3JtYXQgdG8gZ2xUZXhJbWFnZTJEKCkgYmUgR0xfQkdSQSwgd2hp
bGUgZGVza3RvcCBHTAotICAgIC8vIHdpbGwgbm90IGFjY2VwdCBHTF9CR1JBIChtdXN0IGJlIEdM
X1JHQkEpLCBzbyB0aGlzIG11c3QgYmUKLSAgICAvLyBjaGVja2VkIG9uIGVhY2ggcGxhdGZvcm0u
IERlc2t0b3AgR0wgb2ZmZXJzIG5laXRoZXIKLSAgICAvLyBHTF9FWFRfdGV4dHVyZV9mb3JtYXRf
QkdSQTg4ODggb3IgR0xfRVhUX3JlYWRfZm9ybWF0X2JncmEsIHNvCi0gICAgLy8gdHJlYXQgdGhl
bSBhcyB1bnN1cHBvcnRlZCBoZXJlLgotICAgIGlmICghbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4
dGVuc2lvbnMpIHsKLSAgICAgICAgU3RyaW5nIGV4dGVuc2lvbnNTdHJpbmcocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhHTF9FWFRFTlNJT05TKSkpOwotICAgICAg
ICBWZWN0b3I8U3RyaW5nPiBhdmFpbGFibGVFeHRlbnNpb25zOwotICAgICAgICBleHRlbnNpb25z
U3RyaW5nLnNwbGl0KCIgIiwgYXZhaWxhYmxlRXh0ZW5zaW9ucyk7Ci0gICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgYXZhaWxhYmxlRXh0ZW5zaW9ucy5zaXplKCk7ICsraSkKLSAgICAgICAg
ICAgIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5hZGQoYXZhaWxhYmxlRXh0ZW5zaW9uc1tpXSk7Ci0g
ICAgICAgIG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zID0gdHJ1ZTsKLSAgICB9Ci0g
ICAgCi0gICAgLy8gR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCBhbmQgR0xfQU5HTEVfZnJhbWVi
dWZmZXJfbXVsdGlzYW1wbGUgYXJlICJmYWtlIi4gVGhleSBhcmUgaW1wbGVtZW50ZWQgdXNpbmcg
b3RoZXIKLSAgICAvLyBleHRlbnNpb25zLiBJbiBwYXJ0aWN1bGFyIEdMX0VYVF9mcmFtZWJ1ZmZl
cl9ibGl0IGFuZCBHTF9FWFRfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUKLSAgICBpZiAobmFtZSA9
PSAiR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCIpCi0gICAgICAgIHJldHVybiBtX2F2YWlsYWJs
ZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0VYVF9mcmFtZWJ1ZmZlcl9ibGl0Iik7Ci0gICAgaWYg
KG5hbWUgPT0gIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIikKLSAgICAgICAgcmV0
dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfRVhUX2ZyYW1lYnVmZmVyX211
bHRpc2FtcGxlIik7Ci0KLSAgICAvLyBEZXNrdG9wIEdMIGFsd2F5cyBzdXBwb3J0cyBHTF9PRVNf
cmdiOF9yZ2JhOC4KLSAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3JnYjhfcmdiYTgiKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIElmIEdMX0FSQl90ZXh0dXJlX2Zsb2F0IGlzIGF2YWls
YWJsZSB0aGVuIHdlIHJlcG9ydCBHTF9PRVNfdGV4dHVyZV9mbG9hdCBhbmQKLSAgICAvLyBHTF9P
RVNfdGV4dHVyZV9oYWxmX2Zsb2F0IGFzIGF2YWlsYWJsZS4KLSAgICBpZiAobmFtZSA9PSAiR0xf
T0VTX3RleHR1cmVfZmxvYXQiIHx8IG5hbWUgPT0gIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQi
KQotICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9BUkJf
dGV4dHVyZV9mbG9hdCIpOwotICAgIAotICAgIC8vIEdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0
Ci0gICAgaWYgKG5hbWUgPT0gIkdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikKLSAgICAgICAg
cmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfQVBQTEVfdmVydGV4X2Fy
cmF5X29iamVjdCIpOwotCi0gICAgLy8gRGVza3RvcCBHTCBhbHdheXMgc3VwcG9ydHMgdGhlIHN0
YW5kYXJkIGRlcml2YXRpdmUgZnVuY3Rpb25zCi0gICAgaWYgKG5hbWUgPT0gIkdMX09FU19zdGFu
ZGFyZF9kZXJpdmF0aXZlcyIpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKG5hbWUg
PT0gIkdMX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpCi0gICAgICAgIHJldHVybiBt
X2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlz
b3Ryb3BpYyIpOwotCi0gICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucyhu
YW1lKTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RPcGVuR0w6OmVuc3VyZUVuYWJsZWQoY29uc3Qg
U3RyaW5nJiBuYW1lKQotewotI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oUVQpIHx8IFBM
QVRGT1JNKEdUSykKLSAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVz
IikgewotICAgICAgICAvLyBFbmFibGUgc3VwcG9ydCBpbiBBTkdMRSAoaWYgbm90IGVuYWJsZWQg
YWxyZWFkeSkKLSAgICAgICAgQU5HTEVXZWJLaXRCcmlkZ2UmIGNvbXBpbGVyID0gbV9jb250ZXh0
LT5tX2NvbXBpbGVyOwotICAgICAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgQU5HTEVSZXNvdXJjZXMg
PSBjb21waWxlci5nZXRSZXNvdXJjZXMoKTsKLSAgICAgICAgaWYgKCFBTkdMRVJlc291cmNlcy5P
RVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMpIHsKLSAgICAgICAgICAgIEFOR0xFUmVzb3VyY2VzLk9F
U19zdGFuZGFyZF9kZXJpdmF0aXZlcyA9IDE7Ci0gICAgICAgICAgICBjb21waWxlci5zZXRSZXNv
dXJjZXMoQU5HTEVSZXNvdXJjZXMpOwotICAgICAgICB9Ci0gICAgfQotI2Vsc2UKLSAgICBBU1NF
UlRfVU5VU0VEKG5hbWUsIHN1cHBvcnRzKG5hbWUpKTsKLSNlbmRpZgotfQotCi1ib29sIEV4dGVu
c2lvbnMzRE9wZW5HTDo6aXNFbmFibGVkKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSNpZiBQTEFU
Rk9STShNQUMpIHx8IFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEspCi0gICAgaWYgKG5hbWUg
PT0gIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpIHsKLSAgICAgICAgQU5HTEVXZWJLaXRC
cmlkZ2UmIGNvbXBpbGVyID0gbV9jb250ZXh0LT5tX2NvbXBpbGVyOwotICAgICAgICByZXR1cm4g
Y29tcGlsZXIuZ2V0UmVzb3VyY2VzKCkuT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzOwotICAgIH0K
LSNlbmRpZgotICAgIHJldHVybiBzdXBwb3J0cyhuYW1lKTsKLX0KLQotaW50IEV4dGVuc2lvbnMz
RE9wZW5HTDo6Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpCi17Ci0gICAgcmV0dXJuIEdyYXBo
aWNzQ29udGV4dDNEOjpOT19FUlJPUjsKLX0KIAogdm9pZCBFeHRlbnNpb25zM0RPcGVuR0w6OmJs
aXRGcmFtZWJ1ZmZlcihsb25nIHNyY1gwLCBsb25nIHNyY1kwLCBsb25nIHNyY1gxLCBsb25nIHNy
Y1kxLCBsb25nIGRzdFgwLCBsb25nIGRzdFkwLCBsb25nIGRzdFgxLCBsb25nIGRzdFkxLCB1bnNp
Z25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcgZmlsdGVyKQogewpAQCAtMTk0LDE5ICsxMTAs
NDkgQEAgdm9pZCBFeHRlbnNpb25zM0RPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9y
bTNET2JqZWN0IGFycmF5KQogI2VuZGlmCiB9CiAKLVN0cmluZyBFeHRlbnNpb25zM0RPcGVuR0w6
OmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikK
LXsKLSAgICBVTlVTRURfUEFSQU0oc2hhZGVyKTsKLSAgICByZXR1cm4gIiI7Ci0gICAgLy8gRklY
TUU6IGltcGxlbWVudCB0aGlzIGZ1bmN0aW9uIGFuZCBhZGQgR0xfQU5HTEVfdHJhbnNsYXRlZF9z
aGFkZXJfc291cmNlIGluIHN1cHBvcnRzKCkuCi19Ci0KIHZvaWQgRXh0ZW5zaW9uczNET3BlbkdM
Ojpjb3B5VGV4dHVyZUNIUk9NSVVNKEdDM0RlbnVtLCBQbGF0Zm9ybTNET2JqZWN0LCBQbGF0Zm9y
bTNET2JqZWN0LCBHQzNEaW50LCBHQzNEZW51bSkKIHsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50
IHRoaXMgZnVuY3Rpb24gYW5kIGFkZCBHTF9DSFJPTUlVTV9jb3B5X3RleHR1cmUgaW4gc3VwcG9y
dHMoKS4KICAgICByZXR1cm47CiB9CiAKK2Jvb2wgRXh0ZW5zaW9uczNET3BlbkdMOjpzdXBwb3J0
c0V4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgLy8gR0xfQU5HTEVfZnJhbWVi
dWZmZXJfYmxpdCBhbmQgR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUgYXJlICJmYWtl
Ii4gVGhleSBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgb3RoZXIKKyAgICAvLyBleHRlbnNpb25zLiBJ
biBwYXJ0aWN1bGFyIEdMX0VYVF9mcmFtZWJ1ZmZlcl9ibGl0IGFuZCBHTF9FWFRfZnJhbWVidWZm
ZXJfbXVsdGlzYW1wbGUKKyAgICBpZiAobmFtZSA9PSAiR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxp
dCIpCisgICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0VY
VF9mcmFtZWJ1ZmZlcl9ibGl0Iik7CisgICAgaWYgKG5hbWUgPT0gIkdMX0FOR0xFX2ZyYW1lYnVm
ZmVyX211bHRpc2FtcGxlIikKKyAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5j
b250YWlucygiR0xfRVhUX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIik7CisKKyAgICAvLyBEZXNr
dG9wIEdMIGFsd2F5cyBzdXBwb3J0cyBHTF9PRVNfcmdiOF9yZ2JhOC4KKyAgICBpZiAobmFtZSA9
PSAiR0xfT0VTX3JnYjhfcmdiYTgiKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIElm
IEdMX0FSQl90ZXh0dXJlX2Zsb2F0IGlzIGF2YWlsYWJsZSB0aGVuIHdlIHJlcG9ydCBHTF9PRVNf
dGV4dHVyZV9mbG9hdCBhbmQKKyAgICAvLyBHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IGFzIGF2
YWlsYWJsZS4KKyAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3RleHR1cmVfZmxvYXQiIHx8IG5hbWUg
PT0gIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQiKQorICAgICAgICByZXR1cm4gbV9hdmFpbGFi
bGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9BUkJfdGV4dHVyZV9mbG9hdCIpOworCisgICAgLy8g
R0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QKKyAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3ZlcnRl
eF9hcnJheV9vYmplY3QiKQorICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNv
bnRhaW5zKCJHTF9BUFBMRV92ZXJ0ZXhfYXJyYXlfb2JqZWN0Iik7CisKKyAgICAvLyBEZXNrdG9w
IEdMIGFsd2F5cyBzdXBwb3J0cyB0aGUgc3RhbmRhcmQgZGVyaXZhdGl2ZSBmdW5jdGlvbnMKKyAg
ICBpZiAobmFtZSA9PSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBpZiAobmFtZSA9PSAiR0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNv
dHJvcGljIikKKyAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygi
R0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7CisKKyAgICByZXR1cm4gbV9hdmFp
bGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKG5hbWUpOworfQorCitTdHJpbmcgRXh0ZW5zaW9uczNE
T3BlbkdMOjpnZXRFeHRlbnNpb25zKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgY2hhcio+KDo6Z2xHZXRTdHJpbmcoR0xfRVhURU5TSU9OUykpKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMz
RE9wZW5HTC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVu
c2lvbnMzRE9wZW5HTC5oCmluZGV4IDJiMmQzMGEwOTBlNTRmY2ExZDA2NDYyYWU3MWRkN2VjODcy
YjU0NGMuLjIwZjRiNzE0NWM1YmFmOWM5MmIwMDE1NTc4YzUwZDhmOWM2MDhkMTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RP
cGVuR0wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0
ZW5zaW9uczNET3BlbkdMLmgKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgRXh0ZW5zaW9uczNE
T3BlbkdMX2gKICNkZWZpbmUgRXh0ZW5zaW9uczNET3BlbkdMX2gKIAotI2luY2x1ZGUgIkV4dGVu
c2lvbnMzRC5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oIgogCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpAQCAt
MzQsMTUgKzM0LDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRXh0ZW5zaW9u
czNET3BlbkdMIDogcHVibGljIEV4dGVuc2lvbnMzRCB7CitjbGFzcyBFeHRlbnNpb25zM0RPcGVu
R0wgOiBwdWJsaWMgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uIHsKIHB1YmxpYzoKICAgICB2aXJ0
dWFsIH5FeHRlbnNpb25zM0RPcGVuR0woKTsKIAogICAgIC8vIEV4dGVuc2lvbnMzRCBtZXRob2Rz
LgotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0cyhjb25zdCBTdHJpbmcmKTsKLSAgICB2aXJ0dWFs
IHZvaWQgZW5zdXJlRW5hYmxlZChjb25zdCBTdHJpbmcmKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNF
bmFibGVkKGNvbnN0IFN0cmluZyYpOwotICAgIHZpcnR1YWwgaW50IGdldEdyYXBoaWNzUmVzZXRT
dGF0dXNBUkIoKTsKICAgICB2aXJ0dWFsIHZvaWQgYmxpdEZyYW1lYnVmZmVyKGxvbmcgc3JjWDAs
IGxvbmcgc3JjWTAsIGxvbmcgc3JjWDEsIGxvbmcgc3JjWTEsIGxvbmcgZHN0WDAsIGxvbmcgZHN0
WTAsIGxvbmcgZHN0WDEsIGxvbmcgZHN0WTEsIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQg
bG9uZyBmaWx0ZXIpOwogICAgIHZpcnR1YWwgdm9pZCByZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlz
YW1wbGUodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcywgdW5zaWdu
ZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9u
ZyBoZWlnaHQpOwogICAgIApAQCAtNTAsMTQgKzQ2LDE3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCk7CiAgICAgdmlydHVh
bCBHQzNEYm9vbGVhbiBpc1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpOwogICAgIHZp
cnR1YWwgdm9pZCBiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgdmly
dHVhbCBTdHJpbmcgZ2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRmb3JtM0RPYmpl
Y3QpOwogICAgIHZpcnR1YWwgdm9pZCBjb3B5VGV4dHVyZUNIUk9NSVVNKEdDM0RlbnVtLCBQbGF0
Zm9ybTNET2JqZWN0LCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEaW50LCBHQzNEZW51bSk7CiAKLXBy
aXZhdGU6Citwcm90ZWN0ZWQ6CiAgICAgLy8gVGhpcyBjbGFzcyBvbmx5IG5lZWRzIHRvIGJlIGlu
c3RhbnRpYXRlZCBieSBHcmFwaGljc0NvbnRleHQzRCBpbXBsZW1lbnRhdGlvbnMuCiAgICAgZnJp
ZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogICAgIEV4dGVuc2lvbnMzRE9wZW5HTChHcmFw
aGljc0NvbnRleHQzRCopOwogCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRXh0ZW5zaW9uKGNv
bnN0IFdURjo6U3RyaW5nJik7CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0RXh0ZW5zaW9ucygpOwor
Citwcml2YXRlOgogICAgIGJvb2wgbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnM7CiAg
ICAgSGFzaFNldDxTdHJpbmc+IG1fYXZhaWxhYmxlRXh0ZW5zaW9uczsKICAgICAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RP
cGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTc3MjM1NjBjOTZhZmIw
MTRiZDg1MzM1Nzg1ZDZmNWE0ODMyNjQ2NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3Bw
CkBAIC0wLDAgKzEsMTQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgRU5BQkxFKFdFQkdMKQorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTENv
bW1vbi5oIgorCisjaW5jbHVkZSAiQU5HTEVXZWJLaXRCcmlkZ2UuaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQzRC5oIgorCisjaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKKyNpbmNsdWRlIDxC
bGFja0JlcnJ5UGxhdGZvcm1Mb2cuaD4KKyNlbmRpZgorCisjaWYgVVNFKE9QRU5HTF9FU18yKQor
I2luY2x1ZGUgIk9wZW5HTEVTU2hpbXMuaCIKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNs
dWRlIDxHTEVTMi9nbDJleHQuaD4KKyNlbGlmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlIDxPcGVu
R0wvZ2wuaD4KKyNlbGlmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9S
TShRVCkKKyNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRXh0ZW5zaW9uczNET3BlbkdMQ29t
bW9uOjpFeHRlbnNpb25zM0RPcGVuR0xDb21tb24oR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQp
CisgICAgOiBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucyhmYWxzZSkKKyAgICAsIG1f
Y29udGV4dChjb250ZXh0KQoreworfQorCitFeHRlbnNpb25zM0RPcGVuR0xDb21tb246On5FeHRl
bnNpb25zM0RPcGVuR0xDb21tb24oKQoreworfQorCitib29sIEV4dGVuc2lvbnMzRE9wZW5HTENv
bW1vbjo6c3VwcG9ydHMoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmICghbV9pbml0aWFs
aXplZEF2YWlsYWJsZUV4dGVuc2lvbnMpCisgICAgICAgIGluaXRpYWxpemVBdmFpbGFibGVFeHRl
bnNpb25zKCk7CisKKyAgICByZXR1cm4gc3VwcG9ydHNFeHRlbnNpb24obmFtZSk7Cit9CisKK3Zv
aWQgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjplbnN1cmVFbmFibGVkKGNvbnN0IFN0cmluZyYg
bmFtZSkKK3sKKyAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikg
eworICAgICAgICAvLyBFbmFibGUgc3VwcG9ydCBpbiBBTkdMRSAoaWYgbm90IGVuYWJsZWQgYWxy
ZWFkeSkKKyAgICAgICAgQU5HTEVXZWJLaXRCcmlkZ2UmIGNvbXBpbGVyID0gbV9jb250ZXh0LT5t
X2NvbXBpbGVyOworICAgICAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgQU5HTEVSZXNvdXJjZXMgPSBj
b21waWxlci5nZXRSZXNvdXJjZXMoKTsKKyAgICAgICAgaWYgKCFBTkdMRVJlc291cmNlcy5PRVNf
c3RhbmRhcmRfZGVyaXZhdGl2ZXMpIHsKKyAgICAgICAgICAgIEFOR0xFUmVzb3VyY2VzLk9FU19z
dGFuZGFyZF9kZXJpdmF0aXZlcyA9IDE7CisgICAgICAgICAgICBjb21waWxlci5zZXRSZXNvdXJj
ZXMoQU5HTEVSZXNvdXJjZXMpOworICAgICAgICB9CisgICAgfQorfQorCitib29sIEV4dGVuc2lv
bnMzRE9wZW5HTENvbW1vbjo6aXNFbmFibGVkKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBp
ZiAobmFtZSA9PSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikgeworICAgICAgICBBTkdM
RVdlYktpdEJyaWRnZSYgY29tcGlsZXIgPSBtX2NvbnRleHQtPm1fY29tcGlsZXI7CisgICAgICAg
IHJldHVybiBjb21waWxlci5nZXRSZXNvdXJjZXMoKS5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXM7
CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0cyhuYW1lKTsKK30KKworaW50IEV4dGVuc2lvbnMz
RE9wZW5HTENvbW1vbjo6Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpCit7CisgICAgcmV0dXJu
IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUjsKK30KKworU3RyaW5nIEV4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbjo6Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRmb3JtM0RPYmpl
Y3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChzaGFkZXIpOworICAgIGludCBHTHNoYWRlclR5cGU7
CisgICAgQU5HTEVTaGFkZXJUeXBlIHNoYWRlclR5cGU7CisKKyAgICBBTkdMRVdlYktpdEJyaWRn
ZSYgY29tcGlsZXIgPSBtX2NvbnRleHQtPm1fY29tcGlsZXI7CisKKyAgICBtX2NvbnRleHQtPmdl
dFNoYWRlcml2KHNoYWRlciwgR3JhcGhpY3NDb250ZXh0M0Q6OlNIQURFUl9UWVBFLCAmR0xzaGFk
ZXJUeXBlKTsKKworICAgIGlmIChHTHNoYWRlclR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlZF
UlRFWF9TSEFERVIpCisgICAgICAgIHNoYWRlclR5cGUgPSBTSEFERVJfVFlQRV9WRVJURVg7Cisg
ICAgZWxzZSBpZiAoR0xzaGFkZXJUeXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9T
SEFERVIpCisgICAgICAgIHNoYWRlclR5cGUgPSBTSEFERVJfVFlQRV9GUkFHTUVOVDsKKyAgICBl
bHNlCisgICAgICAgIHJldHVybiAiIjsgLy8gSW52YWxpZCBzaGFkZXIgdHlwZS4KKworICAgIEhh
c2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlNoYWRlclNvdXJjZUVu
dHJ5Pjo6aXRlcmF0b3IgcmVzdWx0ID0gbV9jb250ZXh0LT5tX3NoYWRlclNvdXJjZU1hcC5maW5k
KHNoYWRlcik7CisKKyAgICBpZiAocmVzdWx0ID09IG1fY29udGV4dC0+bV9zaGFkZXJTb3VyY2VN
YXAuZW5kKCkpCisgICAgICAgIHJldHVybiAiIjsKKworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpT
aGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnNlY29uZDsKKworICAgIFN0cmluZyB0
cmFuc2xhdGVkU2hhZGVyU291cmNlOworICAgIFN0cmluZyBzaGFkZXJJbmZvTG9nOworCisgICAg
Ym9vbCBpc1ZhbGlkID0gY29tcGlsZXIudmFsaWRhdGVTaGFkZXJTb3VyY2UoZW50cnkuc291cmNl
LnV0ZjgoKS5kYXRhKCksIHNoYWRlclR5cGUsIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UsIHNoYWRl
ckluZm9Mb2cpOworCisgICAgZW50cnkubG9nID0gc2hhZGVySW5mb0xvZzsKKyAgICBlbnRyeS5p
c1ZhbGlkID0gaXNWYWxpZDsKKworICAgIGlmICghaXNWYWxpZCkKKyAgICAgICAgcmV0dXJuICIi
OworCisgICAgcmV0dXJuIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7Cit9CisKK3ZvaWQgRXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uOjppbml0aWFsaXplQXZhaWxhYmxlRXh0ZW5zaW9ucygpCit7Cisg
ICAgU3RyaW5nIGV4dGVuc2lvbnNTdHJpbmcgPSBnZXRFeHRlbnNpb25zKCk7CisgICAgVmVjdG9y
PFN0cmluZz4gYXZhaWxhYmxlRXh0ZW5zaW9uczsKKyAgICBleHRlbnNpb25zU3RyaW5nLnNwbGl0
KCIgIiwgYXZhaWxhYmxlRXh0ZW5zaW9ucyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBh
dmFpbGFibGVFeHRlbnNpb25zLnNpemUoKTsgKytpKQorICAgICAgICBtX2F2YWlsYWJsZUV4dGVu
c2lvbnMuYWRkKGF2YWlsYWJsZUV4dGVuc2lvbnNbaV0pOworICAgIG1faW5pdGlhbGl6ZWRBdmFp
bGFibGVFeHRlbnNpb25zID0gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmE1YTY2ZGEyYTc2NzMxNDVmZTUzYjZmMjhiNTJiMGY0N2RhZDcyZjMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uX2gKKyNkZWZpbmUgRXh0
ZW5zaW9uczNET3BlbkdMQ29tbW9uX2gKKworI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24gOiBwdWJsaWMgRXh0ZW5zaW9uczNEIHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5FeHRlbnNpb25zM0RPcGVuR0xDb21tb24oKTsKKworICAg
IC8vIEV4dGVuc2lvbnMzRCBtZXRob2RzLgorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0cyhjb25z
dCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5zdXJlRW5hYmxlZChjb25zdCBTdHJpbmcm
KTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNFbmFibGVkKGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1
YWwgaW50IGdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKTsKKworICAgIHZpcnR1YWwgUGxhdGZv
cm0zRE9iamVjdCBjcmVhdGVWZXJ0ZXhBcnJheU9FUygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCkgPSAwOworICAgIHZpcnR1YWwg
R0MzRGJvb2xlYW4gaXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KSA9IDA7CisK
KyAgICB2aXJ0dWFsIFN0cmluZyBnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoUGxhdGZv
cm0zRE9iamVjdCk7CisKK3Byb3RlY3RlZDoKKyAgICBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24o
R3JhcGhpY3NDb250ZXh0M0QqKTsKKworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0V4dGVuc2lv
bihjb25zdCBTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0RXh0ZW5zaW9ucygp
ID0gMDsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZUF2YWlsYWJsZUV4
dGVuc2lvbnMoKTsKKyAgICBib29sIG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zOwor
ICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2F2YWlsYWJsZUV4dGVuc2lvbnM7CisKKyAgICAvLyBXZWFr
IHBvaW50ZXIgYmFjayB0byBHcmFwaGljc0NvbnRleHQzRAorICAgIEdyYXBoaWNzQ29udGV4dDNE
KiBtX2NvbnRleHQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
eHRlbnNpb25zM0RPcGVuR0xDb21tb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZTIxZjU1OWFkZGZkNDM1ZmU2OGRkMDkwYjEzODU2ZjQ2NWMzNGY1MgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9F
eHRlbnNpb25zM0RPcGVuR0xFUy5jcHAKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgRU5BQkxFKFdFQkdMKQorI2luY2x1ZGUg
IkV4dGVuc2lvbnMzRE9wZW5HTEVTLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5o
IgorI2luY2x1ZGUgPEVHTC9lZ2wuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitFeHRlbnNpb25zM0RPcGVuR0xFUzo6RXh0ZW5zaW9uczNET3Bl
bkdMRVMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAgOiBFeHRlbnNpb25zM0RPcGVu
R0xDb21tb24oY29udGV4dCkKKyAgICAsIG1fc3VwcG9ydHNPRVN2ZXJ0ZXhBcnJheU9iamVjdChm
YWxzZSkKKyAgICAsIG1fc3VwcG9ydHNJTUdNdWx0aXNhbXBsZWRSZW5kZXJUb1RleHR1cmUoZmFs
c2UpCisgICAgLCBtX2dsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRygwKQorICAg
ICwgbV9nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRygwKQorICAgICwgbV9nbEJp
bmRWZXJ0ZXhBcnJheU9FUygwKQorICAgICwgbV9nbERlbGV0ZVZlcnRleEFycmF5c09FUygwKQor
ICAgICwgbV9nbEdlblZlcnRleEFycmF5c09FUygwKQorICAgICwgbV9nbElzVmVydGV4QXJyYXlP
RVMoMCkKK3sKK30KKworRXh0ZW5zaW9uczNET3BlbkdMRVM6On5FeHRlbnNpb25zM0RPcGVuR0xF
UygpCit7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uczNET3BlbkdMRVM6OmZyYW1lYnVmZmVyVGV4dHVy
ZTJETXVsdGlzYW1wbGVJTUcodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0
YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIHVuc2lnbmVkIGludCB0ZXh0dXJlLCBp
bnQgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcykKK3sKKyAgICBpZiAobV9nbEZyYW1lYnVm
ZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcpCisgICAgICAgIG1fZ2xGcmFtZWJ1ZmZlclRleHR1
cmUyRE11bHRpc2FtcGxlSU1HKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJl
LCBsZXZlbCwgc2FtcGxlcyk7CisgICAgZWxzZQorICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNp
emVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKK30KKwordm9pZCBFeHRlbnNpb25zM0RP
cGVuR0xFUzo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HKHVuc2lnbmVkIGxvbmcg
dGFyZ2V0LCB1bnNpZ25lZCBsb25nIHNhbXBsZXMsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3Jt
YXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQoreworICAgIGlm
IChtX2dsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HKQorICAgICAgICBtX2dsUmVu
ZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgIGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5zeW50
aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cit9CisKK1BsYXRmb3JtM0RPYmpl
Y3QgRXh0ZW5zaW9uczNET3BlbkdMRVM6OmNyZWF0ZVZlcnRleEFycmF5T0VTKCkKK3sKKyAgICBt
X2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmIChtX2dsR2VuVmVydGV4QXJy
YXlzT0VTKSB7CisgICAgICAgIEdMdWludCBhcnJheSA9IDA7CisgICAgICAgIG1fZ2xHZW5WZXJ0
ZXhBcnJheXNPRVMoMSwgJmFycmF5KTsKKyAgICAgICAgcmV0dXJuIGFycmF5OworICAgIH0KKwor
ICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgIHJldHVybiAwOworfQorCit2b2lkIEV4dGVuc2lvbnMzRE9wZW5HTEVTOjpkZWxldGVWZXJ0
ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQoreworICAgIGlmICghYXJyYXkpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgaWYgKG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMpCisgICAgICAgIG1fZ2xEZWxldGVWZXJ0
ZXhBcnJheXNPRVMoMSwgJmFycmF5KTsKKyAgICBlbHNlCisgICAgICAgIG1fY29udGV4dC0+c3lu
dGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworfQorCitHQzNEYm9vbGVhbiBF
eHRlbnNpb25zM0RPcGVuR0xFUzo6aXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFy
cmF5KQoreworICAgIGlmICghYXJyYXkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAg
IG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKG1fZ2xJc1ZlcnRleEFy
cmF5T0VTKQorICAgICAgICByZXR1cm4gbV9nbElzVmVydGV4QXJyYXlPRVMoYXJyYXkpOworCisg
ICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEV4dGVuc2lvbnMzRE9wZW5HTEVTOjpiaW5kVmVy
dGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKK3sKKyAgICBpZiAoIWFycmF5KQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIGlmIChtX2dsQmluZFZlcnRleEFycmF5T0VTKQorICAgICAgICBtX2dsQmluZFZlcnRleEFy
cmF5T0VTKGFycmF5KTsKKyAgICBlbHNlCisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdM
RXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworfQorCisKK2Jvb2wgRXh0ZW5zaW9uczNET3Bl
bkdMRVM6OnN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAo
bV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKG5hbWUpKSB7CisgICAgICAgIGlmIChuYW1l
ID09ICJHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdCIgJiYgIW1fc3VwcG9ydHNPRVN2ZXJ0ZXhB
cnJheU9iamVjdCkgeworICAgICAgICAgICAgbV9nbEJpbmRWZXJ0ZXhBcnJheU9FUyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8UEZOR0xCSU5EVkVSVEVYQVJSQVlPRVNQUk9DPihlZ2xHZXRQcm9jQWRkcmVz
cygiZ2xCaW5kVmVydGV4QXJyYXlPRVMiKSk7CisgICAgICAgICAgICBtX2dsR2VuVmVydGV4QXJy
YXlzT0VTID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTEdFTlZFUlRFWEFSUkFZU09FU1BST0M+KGVn
bEdldFByb2NBZGRyZXNzKCJnbEdlblZlcnRleEFycmF5c09FUyIpKTsKKyAgICAgICAgICAgIG1f
Z2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMgPSByZWludGVycHJldF9jYXN0PFBGTkdMREVMRVRFVkVS
VEVYQVJSQVlTT0VTUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsRGVsZXRlVmVydGV4QXJyYXlz
T0VTIikpOworICAgICAgICAgICAgbV9nbElzVmVydGV4QXJyYXlPRVMgPSByZWludGVycHJldF9j
YXN0PFBGTkdMSVNWRVJURVhBUlJBWU9FU1BST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbElzVmVy
dGV4QXJyYXlPRVMiKSk7CisgICAgICAgICAgICBtX3N1cHBvcnRzT0VTdmVydGV4QXJyYXlPYmpl
Y3QgPSB0cnVlOworICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gIkdMX0lNR19tdWx0aXNhbXBs
ZWRfcmVuZGVyX3RvX3RleHR1cmUiICYmICFtX3N1cHBvcnRzSU1HTXVsdGlzYW1wbGVkUmVuZGVy
VG9UZXh0dXJlKSB7CisgICAgICAgICAgICBtX2dsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNh
bXBsZUlNRyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xGUkFNRUJVRkZFUlRFWFRVUkUyRE1VTFRJ
U0FNUExFSU1HUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsRnJhbWVidWZmZXJUZXh0dXJlMkRN
dWx0aXNhbXBsZUlNRyIpKTsKKyAgICAgICAgICAgIG1fZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVs
dGlzYW1wbGVJTUcgPSByZWludGVycHJldF9jYXN0PFBGTkdMUkVOREVSQlVGRkVSU1RPUkFHRU1V
TFRJU0FNUExFSU1HUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsUmVuZGVyYnVmZmVyU3RvcmFn
ZU11bHRpc2FtcGxlSU1HIikpOworICAgICAgICAgICAgbV9zdXBwb3J0c0lNR011bHRpc2FtcGxl
ZFJlbmRlclRvVGV4dHVyZSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitTdHJpbmcgRXh0ZW5zaW9uczNET3Bl
bkdMRVM6OmdldEV4dGVuc2lvbnMoKQoreworICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhHTF9FWFRFTlNJT05TKSkpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNE
T3BlbkdMRVMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRl
bnNpb25zM0RPcGVuR0xFUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkwMjIyY2E0ZDdhOTRhMDhjMmY5NzU2MTRi
ZjJiYzYwZTAwMWUwOTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuaApAQCAtMCwwICsxLDY5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBFeHRlbnNpb25zM0RPcGVuR0xFU19oCisjZGVmaW5lIEV4dGVuc2lv
bnMzRE9wZW5HTEVTX2gKKworI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oIgor
CisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRXh0ZW5zaW9uczNET3BlbkdMRVMgOiBwdWJsaWMg
RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5FeHRlbnNp
b25zM0RPcGVuR0xFUygpOworCisgICAgdmlydHVhbCB2b2lkIGZyYW1lYnVmZmVyVGV4dHVyZTJE
TXVsdGlzYW1wbGVJTUcodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNo
bWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIHVuc2lnbmVkIGludCB0ZXh0dXJlLCBpbnQg
bGV2ZWwsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcyk7CisgICAgdmlydHVhbCB2b2lkIHJlbmRlcmJ1
ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRyh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQg
bG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25n
IHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7CisKKyAgICB2aXJ0dWFsIFBsYXRmb3JtM0RP
YmplY3QgY3JlYXRlVmVydGV4QXJyYXlPRVMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlVmVy
dGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCk7CisgICAgdmlydHVhbCBHQzNEYm9vbGVhbiBp
c1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpOworICAgIHZpcnR1YWwgdm9pZCBiaW5k
VmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCk7CisKK3Byb3RlY3RlZDoKKyAgICAvLyBU
aGlzIGNsYXNzIG9ubHkgbmVlZHMgdG8gYmUgaW5zdGFudGlhdGVkIGJ5IEdyYXBoaWNzQ29udGV4
dDNEIGltcGxlbWVudGF0aW9ucy4KKyAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7
CisgICAgRXh0ZW5zaW9uczNET3BlbkdMRVMoR3JhcGhpY3NDb250ZXh0M0QqKTsKKworICAgIHZp
cnR1YWwgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFs
IFN0cmluZyBnZXRFeHRlbnNpb25zKCk7CisKKyAgICBib29sIG1fc3VwcG9ydHNPRVN2ZXJ0ZXhB
cnJheU9iamVjdDsKKyAgICBib29sIG1fc3VwcG9ydHNJTUdNdWx0aXNhbXBsZWRSZW5kZXJUb1Rl
eHR1cmU7CisKKyAgICBQRk5HTEZSQU1FQlVGRkVSVEVYVFVSRTJETVVMVElTQU1QTEVJTUdQUk9D
IG1fZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HOworICAgIFBGTkdMUkVOREVS
QlVGRkVSU1RPUkFHRU1VTFRJU0FNUExFSU1HUFJPQyBtX2dsUmVuZGVyYnVmZmVyU3RvcmFnZU11
bHRpc2FtcGxlSU1HOworICAgIFBGTkdMQklORFZFUlRFWEFSUkFZT0VTUFJPQyBtX2dsQmluZFZl
cnRleEFycmF5T0VTOworICAgIFBGTkdMREVMRVRFVkVSVEVYQVJSQVlTT0VTUFJPQyBtX2dsRGVs
ZXRlVmVydGV4QXJyYXlzT0VTOworICAgIFBGTkdMR0VOVkVSVEVYQVJSQVlTT0VTUFJPQyBtX2ds
R2VuVmVydGV4QXJyYXlzT0VTOworICAgIFBGTkdMSVNWRVJURVhBUlJBWU9FU1BST0MgbV9nbElz
VmVydGV4QXJyYXlPRVM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFeHRlbnNpb25zM0RPcGVuR0xFU19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdM
LmNwcAppbmRleCAzZjQ3YjZlMjFlYjI1NTI0M2VlZWE0YmYzMTk4NTNhYmJmNzZhMmRjLi4wYTIy
OWZjYWM3ODc4M2FlM2Q5ODNmZjkyYjJkMzdiOGZkYThiNzViIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHQzRE9wZW5HTC5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zNCw2ICszNSwxMSBAQAogI2luY2x1ZGUgIkludFNpemUuaCIKICNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1
ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgorCiAjaWYgUExBVEZPUk0oTUFDKQogI2luY2x1ZGUgPE9wZW5HTC9n
bC5oPgogI2VsaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpIHx8IFBMQVRGT1JNKFFU
KQpAQCAtNDcsNiArNTMsMzIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVsc0Fu
ZENvbnZlcnRUb0JHUkFJZk5lY2Vzc2FyeShpbnQgeCwgaW50IHksIGludAogICAgIDo6Z2xSZWFk
UGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIEdMX0JHUkEsIEdMX1VOU0lHTkVEX0lOVF84Xzhf
OF84X1JFViwgcGl4ZWxzKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVB
dHRyaWJ1dGVzKCkKK3sKKyAgICBFeHRlbnNpb25zM0QqIGV4dGVuc2lvbnMgPSBnZXRFeHRlbnNp
b25zKCk7CisgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkgeworICAgICAgICBjb25zdCBjaGFyKiBw
YWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24gPSBpc0dMRVMyQ29tcGxpYW50KCkgPyAiR0xfT0VT
X3BhY2tlZF9kZXB0aF9zdGVuY2lsIiA6ICJHTF9FWFRfcGFja2VkX2RlcHRoX3N0ZW5jaWwiOwor
ICAgICAgICBpZiAoZXh0ZW5zaW9ucy0+c3VwcG9ydHMocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5z
aW9uKSkgeworICAgICAgICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZChwYWNrZWREZXB0
aFN0ZW5jaWxFeHRlbnNpb24pOworICAgICAgICAgICAgLy8gRm9yY2UgZGVwdGggaWYgc3RlbmNp
bCBpcyB0cnVlLgorICAgICAgICAgICAgbV9hdHRycy5kZXB0aCA9IHRydWU7CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgbV9hdHRycy5zdGVuY2lsID0gZmFsc2U7CisgICAgfQorICAgIGlm
IChtX2F0dHJzLmFudGlhbGlhcykgeworICAgICAgICBib29sIGlzVmFsaWRWZW5kb3IgPSB0cnVl
OworICAgICAgICAvLyBDdXJyZW50bHkgaW4gTWFjIHdlIG9ubHkgdHVybiBvbiBhbnRpYWxpYXMg
aWYgdmVuZG9yIGlzIE5WSURJQSwKKyAgICAgICAgLy8gb3IgaWYgQVRJIGFuZCBvbiAxMC43LjIg
YW5kIGFib3ZlLgorICAgICAgICBjb25zdCBjaGFyKiB2ZW5kb3IgPSByZWludGVycHJldF9jYXN0
PGNvbnN0IGNoYXIqPig6OmdsR2V0U3RyaW5nKEdMX1ZFTkRPUikpOworICAgICAgICBpZiAoIXZl
bmRvciB8fCAoIXN0ZDo6c3Ryc3RyKHZlbmRvciwgIk5WSURJQSIpICYmICEoc3RkOjpzdHJzdHIo
dmVuZG9yLCAiQVRJIikgJiYgc3lzdGVtQWxsb3dzTXVsdGlzYW1wbGluZ09uQVRJQ2FyZHMoKSkp
KQorICAgICAgICAgICAgaXNWYWxpZFZlbmRvciA9IGZhbHNlOworICAgICAgICBpZiAoIWlzVmFs
aWRWZW5kb3IgfHwgIWV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9t
dWx0aXNhbXBsZSIpIHx8IGlzR0xFUzJDb21wbGlhbnQoKSkKKyAgICAgICAgICAgIG1fYXR0cnMu
YW50aWFsaWFzID0gZmFsc2U7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGV4dGVuc2lvbnMt
PmVuc3VyZUVuYWJsZWQoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIik7CisgICAg
fQorfQorCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlRkJPcyhjb25zdCBJbnRTaXpl
JiBzaXplKQogewogICAgIGNvbnN0IGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsKQEAgLTI1Niw2
ICsyODgsMzMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJEZXB0aChHQzNEY2xhbXBm
IGRlcHRoKQogICAgIDo6Z2xDbGVhckRlcHRoKGRlcHRoKTsKIH0KIAorYm9vbCBHcmFwaGljc0Nv
bnRleHQzRDo6c3lzdGVtQWxsb3dzTXVsdGlzYW1wbGluZ09uQVRJQ2FyZHMoKSBjb25zdAorewor
I2lmIFBMQVRGT1JNKE1BQykKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQp
ICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xJT04pCisgICAgcmV0dXJuIHRydWU7CisjZWxzZQor
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgc3RhdGljIFNJbnQzMiB2ZXJzaW9uOwor
ICAgIGlmICghdmVyc2lvbikgeworICAgICAgICBpZiAoR2VzdGFsdChnZXN0YWx0U3lzdGVtVmVy
c2lvbiwgJnZlcnNpb24pICE9IG5vRXJyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3
OTIyIGZvciBtb3JlIGRldGFpbHMKKyAgICByZXR1cm4gdmVyc2lvbiA+PSAweDEwNzI7CisjZW5k
aWYgLy8gU05PV19MRU9QQVJEIGFuZCBMSU9OCisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNl
bmRpZiAvLyBQTEFURk9STShNQUMpCit9CisKK0V4dGVuc2lvbnMzRCogR3JhcGhpY3NDb250ZXh0
M0Q6OmdldEV4dGVuc2lvbnMoKQoreworICAgIGlmICghbV9leHRlbnNpb25zKQorICAgICAgICBt
X2V4dGVuc2lvbnMgPSBhZG9wdFB0cihuZXcgRXh0ZW5zaW9uczNET3BlbkdMKHRoaXMpKTsKKyAg
ICByZXR1cm4gbV9leHRlbnNpb25zLmdldCgpOworfQorCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUo
V0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcApp
bmRleCA0MjlmYzUxYzkwNDZjNDRhNTBlZmVjZTEyOWNiZjMxZjYwZDk5NzVlLi5mYWI0YTE4NzE1
YThiZGVmMTkzMmY4MDdkODc2NTI4YTUwYjk0M2NkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKQEAgLTEsNiArMSw4IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0
IChDKSAyMDEyIENoYW5nU2VvayBPaCA8c2hpdmFtaWRvd0BnbWFpbC5jb20+CisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDcgKzMyLDEyIEBACiAK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVy
aW5nQ29udGV4dC5oIgorI2lmIFVTRShPUEVOR0xfRVNfMikKKyNpbmNsdWRlICJFeHRlbnNpb25z
M0RPcGVuR0xFUy5oIgorI2Vsc2UKICNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0wuaCIKKyNl
bmRpZgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVy
LmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCkBAIC00OSwzOSArNTYsMjQgQEAKICNpbmNsdWRl
IDx3dGYvVW51c2VkUGFyYW0uaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKLSNp
ZiBQTEFURk9STShNQUMpCisjaWYgVVNFKE9QRU5HTF9FU18yKQorI2luY2x1ZGUgIk9wZW5HTEVT
U2hpbXMuaCIKKyNlbGlmIFBMQVRGT1JNKE1BQykKICNpbmNsdWRlIDxPcGVuR0wvZ2wuaD4KICNl
bGlmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShRVCkKICNpbmNs
dWRlICJPcGVuR0xTaGltcy5oIgogI2VuZGlmCiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKKyNpZiBQ
TEFURk9STShCTEFDS0JFUlJZKQorI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUxvZy5oPgor
I2VuZGlmCiAKLXN0YXRpYyBib29sIHN5c3RlbUFsbG93c011bHRpc2FtcGxpbmdPbkFUSUNhcmRz
KCkKLXsKLSNpZiBQTEFURk9STShNQUMpCi0jaWYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19M
RU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MSU9OKQotICAgIHJldHVybiB0cnVlOwot
I2Vsc2UKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIHN0YXRpYyBTSW50MzIgdmVy
c2lvbjsKLSAgICBpZiAoIXZlcnNpb24pIHsKLSAgICAgICAgaWYgKEdlc3RhbHQoZ2VzdGFsdFN5
c3RlbVZlcnNpb24sICZ2ZXJzaW9uKSAhPSBub0VycikKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03NzkyMiBmb3IgbW9yZSBkZXRhaWxzCi0gICAgcmV0dXJuIHZlcnNpb24gPj0gMHgxMDcy
OwotI2VuZGlmIC8vIFNOT1dfTEVPUEFSRCBhbmQgTElPTgotI2Vsc2UKLSAgICByZXR1cm4gZmFs
c2U7Ci0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQotfQorbmFtZXNwYWNlIFdlYkNvcmUgewogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZUF0dHJpYnV0ZXMoKQordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dmFsaWRhdGVEZXB0aFN0ZW5jaWwoY29uc3QgY2hhciogcGFja2VkRGVwdGhT
dGVuY2lsRXh0ZW5zaW9uKQogewogICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IGdldEV4
dGVuc2lvbnMoKTsKICAgICBpZiAobV9hdHRycy5zdGVuY2lsKSB7Ci0gICAgICAgIGNvbnN0IGNo
YXIqIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbiA9IGlzR0xFUzJDb21wbGlhbnQoKSA/ICJH
TF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiIDogIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNp
bCI7CiAgICAgICAgIGlmIChleHRlbnNpb25zLT5zdXBwb3J0cyhwYWNrZWREZXB0aFN0ZW5jaWxF
eHRlbnNpb24pKSB7CiAgICAgICAgICAgICBleHRlbnNpb25zLT5lbnN1cmVFbmFibGVkKHBhY2tl
ZERlcHRoU3RlbmNpbEV4dGVuc2lvbik7CiAgICAgICAgICAgICAvLyBGb3JjZSBkZXB0aCBpZiBz
dGVuY2lsIGlzIHRydWUuCkBAIC00MzksMzYgKzQzMSwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpjb21waWxlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQogICAgIEFTU0VSVChz
aGFkZXIpOwogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogCi0gICAgaW50IEdMc2hhZGVyVHlw
ZTsKLSAgICBBTkdMRVNoYWRlclR5cGUgc2hhZGVyVHlwZTsKLQotICAgIGdsR2V0U2hhZGVyaXYo
c2hhZGVyLCBTSEFERVJfVFlQRSwgJkdMc2hhZGVyVHlwZSk7Ci0gICAgCi0gICAgaWYgKEdMc2hh
ZGVyVHlwZSA9PSBWRVJURVhfU0hBREVSKQotICAgICAgICBzaGFkZXJUeXBlID0gU0hBREVSX1RZ
UEVfVkVSVEVYOwotICAgIGVsc2UgaWYgKEdMc2hhZGVyVHlwZSA9PSBGUkFHTUVOVF9TSEFERVIp
Ci0gICAgICAgIHNoYWRlclR5cGUgPSBTSEFERVJfVFlQRV9GUkFHTUVOVDsKLSAgICBlbHNlCi0g
ICAgICAgIHJldHVybjsgLy8gSW52YWxpZCBzaGFkZXIgdHlwZS4KLQotICAgIEhhc2hNYXA8UGxh
dGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRvciByZXN1bHQgPSBtX3No
YWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgU3RyaW5nIHRyYW5zbGF0ZWRTaGFkZXJT
b3VyY2UgPSBtX2V4dGVuc2lvbnMtPmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShzaGFk
ZXIpOwogCi0gICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKKyAgICBp
ZiAoIXRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+c2Vjb25kOwotCi0gICAgU3Ry
aW5nIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7Ci0gICAgU3RyaW5nIHNoYWRlckluZm9Mb2c7Ci0K
LSAgICBib29sIGlzVmFsaWQgPSBtX2NvbXBpbGVyLnZhbGlkYXRlU2hhZGVyU291cmNlKGVudHJ5
LnNvdXJjZS51dGY4KCkuZGF0YSgpLCBzaGFkZXJUeXBlLCB0cmFuc2xhdGVkU2hhZGVyU291cmNl
LCBzaGFkZXJJbmZvTG9nKTsKLQotICAgIGVudHJ5LmxvZyA9IHNoYWRlckluZm9Mb2c7Ci0gICAg
ZW50cnkuaXNWYWxpZCA9IGlzVmFsaWQ7Ci0KLSAgICBpZiAoIWlzVmFsaWQpCi0gICAgICAgIHJl
dHVybjsgLy8gU2hhZGVyIGRpZG4ndCB2YWxpZGF0ZSwgZG9uJ3QgbW92ZSBmb3J3YXJkIHdpdGgg
Y29tcGlsaW5nIHRyYW5zbGF0ZWQgc291cmNlLgotCiAgICAgaW50IHRyYW5zbGF0ZWRTaGFkZXJM
ZW5ndGggPSB0cmFuc2xhdGVkU2hhZGVyU291cmNlLmxlbmd0aCgpOwogCiAgICAgY29uc3QgQ1N0
cmluZyYgdHJhbnNsYXRlZFNoYWRlckNTdHJpbmcgPSB0cmFuc2xhdGVkU2hhZGVyU291cmNlLnV0
ZjgoKTsKQEAgLTgwMSwxOCArNzY4LDYxIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQ
aXhlbHMoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpCiAgICAg
ICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
LCBtX2Zibyk7CiAgICAgICAgIDo6Z2xGbHVzaCgpOwogICAgIH0KKyAgICAvLyBDdXJyZW50bHkg
b25seSBmb3JtYXQ9UkdCQSwgdHlwZT1VTlNJR05FRF9CWVRFIGlzIHN1cHBvcnRlZCBieSB0aGUg
c3BlY2lmaWNhdGlvbjogaHR0cDovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS93ZWJnbC9zcGVj
cy9sYXRlc3QvCisgICAgLy8gSWYgdGhpcyBldmVyIGNoYW5nZXMsIHRoaXMgY29kZSB3aWxsIG5l
ZWQgdG8gYmUgdXBkYXRlZC4KKworICAgIC8vIENhbGN1bGF0ZSB0aGUgc3RyaWRlcyBvZiBvdXIg
ZGF0YSBhbmQgY2FudmFzCisgICAgdW5zaWduZWQgaW50IGZvcm1hdFNpemUgPSA0OyAvLyBSR0JB
IFVOU0lHTkVEX0JZVEUKKyAgICB1bnNpZ25lZCBpbnQgZGF0YVN0cmlkZSA9IHdpZHRoICogZm9y
bWF0U2l6ZTsKKyAgICB1bnNpZ25lZCBpbnQgY2FudmFzU3RyaWRlID0gbV9jdXJyZW50V2lkdGgg
KiBmb3JtYXRTaXplOworCisgICAgLy8gSWYgd2UgYXJlIHVzaW5nIGEgcGFjayBhbGlnbm1lbnQg
b2YgOCwgdGhlbiB3ZSBuZWVkIHRvIGFsaWduIG91ciBzdHJpZGVzIHRvIDggYnl0ZSBib3VuZGFy
aWVzCisgICAgLy8gU2VlOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RhdGFfc3RydWN0
dXJlX2FsaWdubWVudCAoY29tcHV0aW5nIHBhZGRpbmcpCisgICAgaW50IHBhY2tBbGlnbm1lbnQ7
CisgICAgZ2xHZXRJbnRlZ2VydihHTF9QQUNLX0FMSUdOTUVOVCwgJnBhY2tBbGlnbm1lbnQpOwor
ICAgIGlmICg4ID09IHBhY2tBbGlnbm1lbnQpIHsKKyAgICAgICAgZGF0YVN0cmlkZSA9IChkYXRh
U3RyaWRlICsgNykgJiB+NzsKKyAgICAgICAgY2FudmFzU3RyaWRlID0gKGNhbnZhc1N0cmlkZSAr
IDcpICYgfjc7CisgICAgfQorCisgICAgdW5zaWduZWQgY2hhciogY2FudmFzRGF0YSA9IG5ldyB1
bnNpZ25lZCBjaGFyW2NhbnZhc1N0cmlkZSAqIG1fY3VycmVudEhlaWdodF07CisgICAgOjpnbFJl
YWRQaXhlbHMoMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwgZm9ybWF0LCB0
eXBlLCBjYW52YXNEYXRhKTsKKworICAgIC8vIElmIHdlIGZhaWxlZCB0byByZWFkIG91ciBjYW52
YXMgZGF0YSBkdWUgdG8gYSBHTCBlcnJvciwgZG9uJ3QgY29udGludWUKKyAgICBpbnQgZXJyb3Ig
PSBnbEdldEVycm9yKCk7CisgICAgaWYgKEdMX05PX0VSUk9SICE9IGVycm9yKSB7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIENsZWFyIG91ciBkYXRhIGluIGNhc2Ugc29tZSBvZiBpdCBsaWVzIG91dHNpZGUgdGhlIGJv
dW5kcyBvZiBvdXIgY2FudmFzCisgICAgLy8gVE9ETzogZG9uJ3QgZG8gdGhpcyBpZiBhbGwgb2Yg
dGhlIGRhdGEgbGllcyBpbnNpZGUgdGhlIGJvdW5kcyBvZiB0aGUgY2FudmFzCisgICAgbWVtc2V0
KGRhdGEsIDAsIGRhdGFTdHJpZGUgKiBoZWlnaHQpOworCisgICAgLy8gQ2FsY3VsYXRlIHRoZSBp
bnRlcnNlY3Rpb24gb2Ygb3VyIGNhbnZhcyBhbmQgZGF0YSBib3VuZHMKKyAgICBJbnRSZWN0IGRh
dGFSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIEludFJlY3QgY2FudmFzUmVjdCgwLCAw
LCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KTsKKyAgICBJbnRSZWN0IG5vblplcm9E
YXRhUmVjdCA9IGludGVyc2VjdGlvbihkYXRhUmVjdCwgY2FudmFzUmVjdCk7CisKKyAgICB1bnNp
Z25lZCBpbnQgeERhdGFPZmZzZXQgPSB4IDwgMCA/IC14ICogZm9ybWF0U2l6ZSA6IDA7CisgICAg
dW5zaWduZWQgaW50IHlEYXRhT2Zmc2V0ID0geSA8IDAgPyAteSAqIGRhdGFTdHJpZGUgOiAwOwor
ICAgIHVuc2lnbmVkIGludCB4Q2FudmFzT2Zmc2V0ID0gbm9uWmVyb0RhdGFSZWN0LngoKSAqIGZv
cm1hdFNpemU7CisgICAgdW5zaWduZWQgaW50IHlDYW52YXNPZmZzZXQgPSBub25aZXJvRGF0YVJl
Y3QueSgpICogY2FudmFzU3RyaWRlOworICAgIHVuc2lnbmVkIGNoYXIqIGRzdCA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXIqPihkYXRhKSArIHhEYXRhT2Zmc2V0ICsgeURhdGFPZmZzZXQ7Cisg
ICAgdW5zaWduZWQgY2hhciogc3JjID0gY2FudmFzRGF0YSArIHhDYW52YXNPZmZzZXQgKyB5Q2Fu
dmFzT2Zmc2V0OworICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG5vblplcm9EYXRhUmVjdC5o
ZWlnaHQoKTsgcm93KyspIHsKKyAgICAgICAgbWVtY3B5KGRzdCwgc3JjLCBub25aZXJvRGF0YVJl
Y3Qud2lkdGgoKSAqIGZvcm1hdFNpemUpOworICAgICAgICBkc3QgKz0gZGF0YVN0cmlkZTsKKyAg
ICAgICAgc3JjICs9IGNhbnZhc1N0cmlkZTsKKyAgICB9CisKKyAgICBkZWxldGUgW10gY2FudmFz
RGF0YTsKICAgICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5
cGUsIGRhdGEpOworCiAgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0g
bV9tdWx0aXNhbXBsZUZCTykKICAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQotewotICAgIC8vIEZJWE1F
OiBUaGlzIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiBkZXNrdG9wIE9wZW5HTC4gV2UgbmVlZCB0byBo
YXZlIGlmZGVmcyBmb3IgdGhlIGRpZmZlcmVudCBHTCB2YXJpYW50cy4KLSAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpzYW1wbGVDb3ZlcmFnZShHQzNEY2xhbXBmIHZhbHVlLCBHQzNEYm9vbGVhbiBpbnZl
cnQpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CkBAIC0xMzg2LDEzICsxMzk2LDYgQEAg
Ym9vbCBHcmFwaGljc0NvbnRleHQzRDo6bGF5ZXJDb21wb3NpdGVkKCkgY29uc3QKICAgICByZXR1
cm4gbV9sYXllckNvbXBvc2l0ZWQ7CiB9CiAKLUV4dGVuc2lvbnMzRCogR3JhcGhpY3NDb250ZXh0
M0Q6OmdldEV4dGVuc2lvbnMoKQotewotICAgIGlmICghbV9leHRlbnNpb25zKQotICAgICAgICBt
X2V4dGVuc2lvbnMgPSBhZG9wdFB0cihuZXcgRXh0ZW5zaW9uczNET3BlbkdMKHRoaXMpKTsKLSAg
ICByZXR1cm4gbV9leHRlbnNpb25zLmdldCgpOwotfQotCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUo
V0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAKaW5kZXggYjFi
ZDFkYzU2Y2E2ZmQ5MjgzZGIyZGFlMTIzODNjZTIyZmM5NDMwMi4uZTg1M2VhNzllYTIzOGJjZjFk
MWZjMGZlNWVkNDY3N2UzMzRmODcwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9w
ZW5HTEVTLmNwcApAQCAtMSw2ICsxLDggQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ2hhbmdT
ZW9rIE9oIDxzaGl2YW1pZG93QGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksOTMgKzMxLDI5IEBACiAjaWYgRU5BQkxFKFdFQkdM
KQogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLQotI2luY2x1ZGUgIkV4dGVuc2lv
bnMzRE9wZW5HTC5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTEVTLmgiCiAjaW5jbHVk
ZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJMYXllcldlYktp
dFRocmVhZC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0KLSNpZiBQTEFURk9STShH
VEspIHx8IFBMQVRGT1JNKFFUKQotI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCi0jZW5kaWYKKyNp
bmNsdWRlICJPcGVuR0xFU1NoaW1zLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVsc0FuZENvbnZlcnRUb0JHUkFJZk5lY2Vzc2FyeShp
bnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgdW5zaWduZWQgY2hhciogcGl4ZWxz
KQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKIHsKLSAg
ICBjb25zdCBpbnQgdG90YWxCeXRlcyA9IG1fY3VycmVudFdpZHRoICogbV9jdXJyZW50SGVpZ2h0
ICogNDsKLSAgICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBHTF9SR0JBLCBH
TF9VTlNJR05FRF9CWVRFLCBwaXhlbHMpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG90YWxC
eXRlczsgaSArPSA0KQotICAgICAgICBzdGQ6OnN3YXAocGl4ZWxzW2ldLCBwaXhlbHNbaSArIDJd
KTsgLy8gQ29udmVydCB0byBCR1JBLgorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6
Z2xSZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6
cmVzaGFwZUZCT3MoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnJlYWRQaXhlbHNBbmRDb252ZXJ0VG9CR1JBSWZOZWNlc3NhcnkoaW50IHgsIGludCB5LCBpbnQg
d2lkdGgsIGludCBoZWlnaHQsIHVuc2lnbmVkIGNoYXIqIHBpeGVscykKIHsKLSAgICBjb25zdCBp
bnQgd2lkdGggPSBzaXplLndpZHRoKCk7Ci0gICAgY29uc3QgaW50IGhlaWdodCA9IHNpemUuaGVp
Z2h0KCk7Ci0gICAgR0x1aW50IGNvbG9yRm9ybWF0ID0gMCwgcGl4ZWxEYXRhVHlwZSA9IDA7Ci0g
ICAgaWYgKG1fYXR0cnMuYWxwaGEpIHsKLSAgICAgICAgbV9pbnRlcm5hbENvbG9yRm9ybWF0ID0g
R0xfUkdCQTsKLSAgICAgICAgY29sb3JGb3JtYXQgPSBHTF9SR0JBOwotICAgICAgICBwaXhlbERh
dGFUeXBlID0gR0xfVU5TSUdORURfQllURTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX2ludGVy
bmFsQ29sb3JGb3JtYXQgPSBHTF9SR0I7Ci0gICAgICAgIGNvbG9yRm9ybWF0ID0gR0xfUkdCOwot
ICAgICAgICBwaXhlbERhdGFUeXBlID0gR0xfVU5TSUdORURfU0hPUlRfNV82XzU7Ci0gICAgfQot
Ci0gICAgLy8gV2UgZG9uJ3QgYWxsb3cgdGhlIGxvZ2ljIHdoZXJlIHN0ZW5jaWwgaXMgcmVxdWly
ZWQgYW5kIGRlcHRoIGlzIG5vdC4KLSAgICAvLyBTZWUgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlk
YXRlQXR0cmlidXRlcy4KLSAgICBib29sIHN1cHBvcnRQYWNrZWREZXB0aFN0ZW5jaWxCdWZmZXIg
PSAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpICYmIGdldEV4dGVuc2lvbnMoKS0+
c3VwcG9ydHMoIkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOwotCi0gICAgLy8gUmVzaXpl
IHJlZ3VsYXIgRkJPLgotICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKLSAgICBpZiAo
bV9ib3VuZEZCTyAhPSBtX2ZibykgewotICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7Ci0g
ICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSLCBtX2Zibyk7Ci0gICAgfQotCi0gICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQs
IG1fdGV4dHVyZSk7Ci0gICAgOjpnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgbV9pbnRl
cm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBjb2xvckZvcm1hdCwgcGl4ZWxEYXRh
VHlwZSwgMCk7Ci0gICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBH
TF9URVhUVVJFXzJELCBtX3RleHR1cmUsIDApOwotCi0gICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RF
WFRVUkVfMkQsIG1fY29tcG9zaXRvclRleHR1cmUpOwotICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RF
WFRVUkVfMkQsIDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgY29s
b3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIDApOwotICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9U
RVhUVVJFXzJELCAwKTsKLQotICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgYW50aWFsaWFzaW5nIHll
dC4gU2VlIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZUF0dHJpYnV0ZXMuCi0gICAgQVNTRVJU
KCFtX2F0dHJzLmFudGlhbGlhcyk7Ci0KLSAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0
cnMuZGVwdGgpIHsKLSAgICAgICAgLy8gVXNlIGEgMjQgYml0IGRlcHRoIGJ1ZmZlciB3aGVyZSB3
ZSBrbm93IHdlIGhhdmUgaXQuCi0gICAgICAgIGlmIChzdXBwb3J0UGFja2VkRGVwdGhTdGVuY2ls
QnVmZmVyKSB7Ci0gICAgICAgICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9k
ZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICAgICAgOjpnbFRleEltYWdlMkQoR0xfVEVYVFVS
RV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUwsIHdpZHRoLCBoZWlnaHQs
IDAsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMLCBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfSU5UXzI0XzgsIDApOwotICAgICAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkK
LSAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIs
IEdMX1NURU5DSUxfQVRUQUNITUVOVCwgR0xfVEVYVFVSRV8yRCwgbV9kZXB0aFN0ZW5jaWxCdWZm
ZXIsIDApOwotICAgICAgICAgICAgaWYgKG1fYXR0cnMuZGVwdGgpCi0gICAgICAgICAgICAgICAg
OjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9ERVBUSF9BVFRBQ0hN
RU5ULCBHTF9URVhUVVJFXzJELCBtX2RlcHRoU3RlbmNpbEJ1ZmZlciwgMCk7Ci0gICAgICAgICAg
ICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsKSB7Ci0gICAgICAgICAgICAgICAgOjpnbEJp
bmRSZW5kZXJidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9zdGVu
Y2lsQnVmZmVyKTsKLSAgICAgICAgICAgICAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZUVYVChH
cmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBHTF9TVEVOQ0lMX0lOREVYOCwgd2lkdGgs
IGhlaWdodCk7Ci0gICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhU
KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5D
SUxfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9zdGVuY2ls
QnVmZmVyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtX2F0dHJzLmRlcHRoKSB7
Ci0gICAgICAgICAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0
M0Q6OlJFTkRFUkJVRkZFUiwgbV9kZXB0aEJ1ZmZlcik7Ci0gICAgICAgICAgICAgICAgOjpnbFJl
bmRlcmJ1ZmZlclN0b3JhZ2VFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgR0xf
REVQVEhfQ09NUE9ORU5UMTYsIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICAgICAgICAgIDo6Z2xG
cmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIs
IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQzRDo6
UkVOREVSQlVGRkVSLCBtX2RlcHRoQnVmZmVyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIs
IDApOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChnbENoZWNrRnJhbWVidWZmZXJTdGF0dXNF
WFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6
RlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKLSAgICAgICAgLy8gRklYTUU6IGNsZWFudXAKLSAgICAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVp
Z2h0LCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhlbHMpOworICAgIGludCB0b3RhbEJ5
dGVzID0gd2lkdGggKiBoZWlnaHQgKiA0OworICAgIGlmIChpc0dMRVMyQ29tcGxpYW50KCkpIHsK
KyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQpCisgICAgICAg
ICAgICBzdGQ6OnN3YXAocGl4ZWxzW2ldLCBwaXhlbHNbaSArIDJdKTsgLy8gQ29udmVydCB0byBC
R1JBLgogICAgIH0KLQotICAgIHJldHVybiBtdXN0UmVzdG9yZUZCTzsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJbnRS
ZWN0JiByZWN0KQpAQCAtMTU2LDYgKzk0LDE3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRl
eEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0
cmlidXRlcygpCit7CisgICAgdmFsaWRhdGVEZXB0aFN0ZW5jaWwoIkdMX09FU19wYWNrZWRfZGVw
dGhfc3RlbmNpbCIpOworCisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAgIEV4
dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IGdldEV4dGVuc2lvbnMoKTsKKyAgICAgICAgaWYgKCFl
eHRlbnNpb25zLT5zdXBwb3J0cygiR0xfSU1HX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVy
ZSIpKQorICAgICAgICAgICAgbV9hdHRycy5hbnRpYWxpYXMgPSBmYWxzZTsKKyAgICB9Cit9CisK
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoUmFuZ2UoR0MzRGNsYW1wZiB6TmVhciwgR0Mz
RGNsYW1wZiB6RmFyKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwpAQCAtMTY4LDYgKzEx
NywxOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRlcHRoKEdDM0RjbGFtcGYgZGVw
dGgpCiAgICAgOjpnbENsZWFyRGVwdGhmKGRlcHRoKTsKIH0KIAotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCitFeHRlbnNpb25zM0QqIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25zKCkK
K3sKKyAgICBpZiAoIW1fZXh0ZW5zaW9ucykKKyAgICAgICAgbV9leHRlbnNpb25zID0gYWRvcHRQ
dHIobmV3IEV4dGVuc2lvbnMzRE9wZW5HTEVTKHRoaXMpKTsKKyAgICByZXR1cm4gbV9leHRlbnNp
b25zLmdldCgpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpzeXN0ZW1BbGxvd3NNdWx0
aXNhbXBsaW5nT25BVElDYXJkcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOyAvLyBub3Qg
YXBwbGljYWJsZQorfQorCit9CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4
dDNEUXQuY3BwCmluZGV4IDcyYjZiYjQzMDdiM2I2MWQzMmFlZDBkM2UzMDIxZjE1MjMyOTdlOGQu
LjlmY2RkYzA0NTMwNjk5YmE5Y2EwY2UwM2E1YWZlZTdlOWI1M2RiZDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4
dDNEUXQuY3BwCkBAIC05OCw2ICs5OCwxMyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc0dM
RVMyQ29tcGxpYW50KCkgY29uc3QKICNlbmRpZgogfQogCisjaWYgIVVTRShPUEVOR0xfRVNfMikK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKyNlbmRpZgorCiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgSG9z
dFdpbmRvdyogaG9zdFdpbmRvdykKICAgICA6IG1fY29udGV4dChjb250ZXh0KQogICAgICwgbV9o
b3N0V2luZG93KGhvc3RXaW5kb3cpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151255</attachid>
            <date>2012-07-09 08:46:27 -0700</date>
            <delta_ts>2012-07-10 10:51:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90567-20120709114601.patch</filename>
            <type>text/plain</type>
            <size>67237</size>
            <attacher name="Joshua Netterfield">jnetterfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMTA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjAxZjhlMjRjMjlkYmI2
YjJjZjE5MTQ1OGJjNWJhY2ExMjk5MTFlYi4uNTYwMWFiZTg2NjkyZTgxZWYyY2M0OGU1OWY1NGM5
NjJlM2RlYzhkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk0IEBACisyMDEyLTA3LTA5ICBKb3No
dWEgTmV0dGVyZmllbGQgIDxqbmV0dGVyZmllbGRAcmltLmNvbT4KKyAgICAgICAgTWFrZSBHQzNE
IGFuZCBFM0QgbW9yZSBtYWludGFpbmFibGUgZm9yIEdMRVMgcGxhdGZvcm1zCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDU2NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY2xlYW5zIHVw
IGNvZGUgZm9yIFdlYkdMIG9uIE9wZW5HTEVTIHBsYXRmb3JtcyB3aGljaCB1c2UgCisgICAgICAg
IEdyYXBoaWNzQ29udGV4dDNET3BlbkdMKiBhbmQgRXh0ZW5zaW9uczNET3BlbkdMKi4gQWx0aG91
Z2gKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wgd2FzIGFscmVhZHkgc3BsaXQgaW50
byBHcmFwaGljc0NvbnRleHQzRE9wZW5HTCwKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0RPcGVu
R0xDb21tb24sIGFuZCAgR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUywgdGhpcyBwYXRjaAorICAg
ICAgICBpcyBhbiBhdHRlbXB0IHRvIHJlZmFjdG9yIHRoaXMgY29kZSBpbiBhIHdheSB0aGF0IHdp
bGwgaGVscCBCbGFja0JlcnJ5IGFuZAorICAgICAgICBvdGhlciB0ZWFtcyBzdXBwb3J0IFdlYkdM
IG9uIG1vYmlsZSBwbGF0Zm9ybXMgd2l0aCBhcyBsaXR0bGUgdXNlIG9mCisgICAgICAgICIjSUYg
VVNFKE9QRU5HTF9FU18yKSIgaW4gY29tbW9uIGNvZGUgYXMgcG9zc2libGUuIEFsc28gaW5jbHVk
ZWQgaXMgdGhlCisgICAgICAgIHNlcGFyYXRpb24gb2YgRXh0ZW5zaW9uczNET3BlbkdMIGludG8g
RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLAorICAgICAgICBFeHRlbnNpb25zM0RPcGVuR0wsIGFu
ZCBFeHRlbnNpb25zM0RPcGVuR0xFUyBhcyB3ZWxsIGFzIHRoZSBpbnRyb2R1Y3Rpb24KKyAgICAg
ICAgb2YgT3BlbkdMRVNTaGltcy4KKworICAgICAgICBUaGlzIHBhdGNoIGlzIGNyZWF0ZWQgaW4g
bGFyZ2UgcGFydCBieSBKb25hdGhhbiBGZWxkc3RlaW4uCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
OiBubyBuZXcgYmVoYXZpb3VyLgorCisgICAgICAgICogUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtl
OiBSZWNvZ25pemUgQmxhY2tCZXJyeSBhcyBPUEVOR0wgRVMsIGFkZCBuZXcgZmlsZXMgdG8gYnVp
bGQKKyAgICAgICAgKiBUYXJnZXQucHJpOiBBZGQgbmV3IEV4dGVuc2lvbnMzRE9wZW5HTCogdG8g
V2ViR0wgYnVpbGRzCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
M0QuaDogQWRkIHZhbGlkYXRlRGVwdGhTdGVuY2lsLCBtYWtlIHN5c3RlbUFsbG93c011bHRpc2Ft
cGxpbmdPbkFUSUNhcmRzIGEgYSBtZW1iZXIgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9PcGVuR0xFU1NoaW1zLmg6IEFkZGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwOiBN
b3ZlIGNvZGUgdG8gRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uIHdoZXJlIHBvc3NpYmxlCisgICAg
ICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0w6OkV4dGVuc2lvbnMzRE9wZW5HTCk6IFJl
ZmxlY3QgdGhhdCBpdCBpcyBub3cgaW5oZXJpdHMgRXh0ZW5zaW9uczNEQ29tbW9uCisgICAgICAg
IChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0w6OnN1cHBvcnRzRXh0ZW5zaW9uKTogQ29udGFp
bnMgT3BlbkdMIHNwZWNpZmljIGNvZGUgZnJvbSBzdXBwb3J0cworICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0w6OmdldEV4dGVuc2lvbnMpOiBS
ZXR1cm5zIGEgbGlzdCBvZiBleHRlbnNpb25zCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oOiBSZW1vdmUgZnVuY3Rpb25zIG5vdyBpbiBFeHRl
bnNpb25zM0RPcGVuR0xDb21tb24KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRXh0ZW5z
aW9uczNET3BlbkdMKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6RXh0ZW5zaW9uczNET3BlbkdM
Q29tbW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6fkV4
dGVuc2lvbnMzRE9wZW5HTENvbW1vbik6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RP
cGVuR0xDb21tb246OnN1cHBvcnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbjo6ZW5zdXJlRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25z
M0RPcGVuR0xDb21tb246OmlzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25z
M0RPcGVuR0xDb21tb246OmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIpOgorICAgICAgICAoV2Vi
Q29yZTo6RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjpnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNl
QU5HTEUpOiBFeGlzdGVkIGJlZm9yZSwgYnV0IGRpZCBub3RoaW5nLiBOb3cgZG9lcyB3aGF0IGlz
IHNheXMgaXQgZG9lcy4KKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTENvbW1v
bjo6aW5pdGlhbGl6ZUF2YWlsYWJsZUV4dGVuc2lvbnMpOiBNb3ZlZCBmcm9tIEV4dGVuc2lvbnMz
RE9wZW5HTDo6c3VwcG9ydHMKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0
ZW5zaW9uczNET3BlbkdMQ29tbW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMRVM6
OkV4dGVuc2lvbnMzRE9wZW5HTEVTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9w
ZW5HTEVTOjp+RXh0ZW5zaW9uczNET3BlbkdMRVMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5z
aW9uczNET3BlbkdMRVM6OmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcpOgorICAg
ICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMRVM6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VN
dWx0aXNhbXBsZUlNRyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0xFUzo6
Y3JlYXRlVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3Bl
bkdMRVM6OmRlbGV0ZVZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lv
bnMzRE9wZW5HTEVTOjppc1ZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVu
c2lvbnMzRE9wZW5HTEVTOjpiaW5kVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6
RXh0ZW5zaW9uczNET3BlbkdMRVM6OnN1cHBvcnRzRXh0ZW5zaW9uKTogQ29udGFpbnMgT3BlbkdM
RVMgc3BlY2lmaWMgY29kZSBmcm9tIHN1cHBvcnRzCisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNp
b25zM0RPcGVuR0xFUzo6Z2V0RXh0ZW5zaW9ucyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaC4KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoRXh0ZW5zaW9uczNET3BlbkdMRVMpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVBdHRyaWJ1dGVzKToK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OnJlbmRlcmJ1ZmZlclN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OnRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN5
c3RlbUFsbG93c011bHRpc2FtcGxpbmdPbkFUSUNhcmRzKTogTm93IGEgbWVtYmVyIGZ1bmN0aW9u
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEV4dGVuc2lvbnMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5H
TENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRh
dGVEZXB0aFN0ZW5jaWwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNs
ZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc1RleHR1cmUpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
bGluZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpsaW5rUHJv
Z3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGl4ZWxTdG9yZWkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBvbHlnb25PZmZzZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUJ1ZmZlcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVsc0FuZENv
bnZlcnRUb0JHUkFJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6dmFsaWRhdGVBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEV4dGVuc2lvbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN5c3RlbUFsbG93c011bHRpc2FtcGxpbmdPbkFUSUNh
cmRzKTogTm93IGEgbWVtYmVyIGZ1bmN0aW9uLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKToKKwog
MjAxMi0wNy0wOSAgTWF0dCBGYWxrZW5oYWdlbiAgPGZhbGtlbkBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgQWRkIEVOQUJMRV9ESUFMT0dfRUxFTUVOVCBhbmQgc2tlbGV0b24gZmlsZXMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDM1YjZkNWRlNDM2NmIxZDg1NGIwNmQ1MDE0MDMx
N2FkYTI2YzhlNWMuLjQ3MmYxNjMzYjY2N2Y1ZGI0YjZiMmZkYTA0ZTRhMjU0NjcxZGFhNDQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNjA1NCw2ICs2MDU0LDcgQEAgd2ViY29y
ZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9PcGVuR0xT
aGltcy5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL09wZW5HTFNoaW1z
LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25z
M0RPcGVuR0wuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwIFwKIAlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RP
cGVuR0xDb21tb24uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNr
QmVycnkuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UKaW5k
ZXggNTE2OWE1ZGQ1OTczYzdiMGUyODhkYTIxMjMxOTQ3MTg2NTMwZWE4MS4uNTg3ZWRlM2QwNjkw
ODAzNzNiZWQyYTMxMjI1MmE1NTc5MjFkY2ZjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQmxh
Y2tCZXJyeS5jbWFrZQpAQCAtMjE4LDYgKzIxOCw3IEBAIGlmIChFTkFCTEVfUkVRVUVTVF9BTklN
QVRJT05fRlJBTUUpCiBFTkRJRiAoKQogCiBpZiAoRU5BQkxFX1dFQkdMKQorICAgIEFERF9ERUZJ
TklUSU9OUyAoLURXVEZfVVNFX09QRU5HTF9FU18yPTEpCiAgICAgTElTVChBUFBFTkQgV2ViQ29y
ZV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUiCiAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wiCkBAIC0yMjUsNiArMjI2LDExIEBAIGlmIChFTkFCTEVfV0VCR0wpCiAgICAgTElTVChB
UFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVy
cnkvRHJhd2luZ0J1ZmZlckJsYWNrQmVycnkuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2JsYWNrYmVycnkvR3JhcGhpY3NDb250ZXh0M0RCbGFja0JlcnJ5LmNwcAorICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCisg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVT
LmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdM
Q29tbW9uLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNE
T3BlbkdMRVMuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGlj
c0NvbnRleHQzRC5jcHAKICAgICApCiBFTkRJRiAoKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCA0ZDYyYWQ4
ZTAyZmU3ZTU2MjI3MjNmODg5NDE2ZWRmYWQ0OTM2M2U1Li5jY2Y1M2Y4NjBhYzIxNzg0ZDQxN2E0
M2RhMTAzMzc0ZTFlOTdlZmI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJp
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTM5NTgsMTUgKzM5NTgsMTkgQEAg
Y29udGFpbnMoREVGSU5FUywgRU5BQkxFX1dFQkdMPTEpIHsKIAogICAgIGNvbnRhaW5zKFFUX0NP
TkZJRywgb3BlbmdsKSB8IGNvbnRhaW5zKFFUX0NPTkZJRywgb3BlbmdsZXMyKSB7CiAgICAgICAg
ICFjb250YWlucyhRVF9DT05GSUcsIG9wZW5nbGVzMikgewotICAgICAgICAgICAgU09VUkNFUyAr
PSBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCisg
ICAgICAgICAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAgXAorICAgICAgICAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAKICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dy
YXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCisgICAgICAgICAgICBTT1VSQ0VTICs9IFwKKyAg
ICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9w
ZW5HTEVTLmNwcCBcCisgICAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0
ZW5zaW9uczNET3BlbkdMRVMuY3BwCiAgICAgICAgIH0KIAogICAgICAgICBIRUFERVJTICs9IHBs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaAogCiAgICAgICAgIFNP
VVJDRVMgKz0gXAotICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lv
bnMzRE9wZW5HTC5jcHAgXAorICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4
dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAgXAogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAogCiAgICAgICAgIEFO
R0xFX0RJUiA9ICQkcmVwbGFjZShQV0QsICJXZWJDb3JlIiwgIlRoaXJkUGFydHkvQU5HTEUiKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCmluZGV4IDgzN2I4YjQzMGIxNDM0YTU0NmYwMDBkMTgxMzU5YTRlMDZkZTcz
ZGEuLmQxNWJhOGU0OGUzNThiZTQ1ODg1MTFjNWZkN2UzNjUyYjkzNWI3ZDggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKQEAgLTM4MDgsNiArMzgwOCw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL1dlYlRpbGVkTGF5ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL1dlYlRpbGVkTGF5ZXIubW0nLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
M0RPcGVuR0xDb21tb24uY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAxMDk0OWFiMGQ5Mzc5ZGUzMWE5MTY0M2NhNWMxOTkx
ZDE4ZjdmNjRmLi45ZTQ3YjYzYzdlMmU5MTc4MjRhMTg4MWI2YTg5M2MwOTVhOWQ0NzBiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC0xMTkxLDYgKzExOTEsOCBAQAogCQk0NDlCMTlGNTBGQTcyRUNFMDAxNUNBNEEgLyogSFRNTFBh
cnNlclF1aXJrcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDQ5QjE5RjMwRkE3MkVDRTAwMTVDQTRBIC8qIEhUTUxQYXJzZXJRdWlya3MuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NEEyOEFBQzEyREZC
OEFDMDBBRTkyM0IgLyogTWF0aE1MRWxlbWVudEZhY3RvcnkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0QTI4QUFCMTJERkI4QUMwMEFFOTIzQiAvKiBN
YXRoTUxFbGVtZW50RmFjdG9yeS5oICovOyB9OwogCQk0NEEyOEFBRjEyREZCOEJGMDBBRTkyM0Ig
LyogTWF0aE1MTmFtZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ0QTI4QUFFMTJERkI4QkYwMEFFOTIzQiAvKiBNYXRoTUxOYW1lcy5oICovOyB9Owor
CQk0NERBQjVCMTE1QTYyMzU4MDA5N0MxRTQgLyogRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0REFCNUFG
MTVBNjIzNTgwMDk3QzFFNCAvKiBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwICovOyB9Owor
CQk0NERBQjVCMjE1QTYyMzU4MDA5N0MxRTQgLyogRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NERBQjVCMDE1
QTYyMzU4MDA5N0MxRTQgLyogRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmggKi87IH07CiAJCTQ1
MDk5QzQxMTM3MEE3ODAwMDU4RDUxMyAvKiBJY29uVVJMLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1MDk5QzQwMTM3MEE3ODAwMDU4RDUxMyAvKiBJ
Y29uVVJMLmNwcCAqLzsgfTsKIAkJNDUwQ0VCRjAxNTA3M0JCRTAwMkJCMTQ5IC8qIExhYmVsYWJs
ZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDUwQ0VCRUUxNTA3M0JCRTAwMkJCMTQ5IC8qIExhYmVsYWJsZUVsZW1lbnQuY3BwICovOyB9
OwogCQk0NTBDRUJGMTE1MDczQkJFMDAyQkIxNDkgLyogTGFiZWxhYmxlRWxlbWVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDUwQ0VCRUYxNTA3M0JC
RTAwMkJCMTQ5IC8qIExhYmVsYWJsZUVsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtODI1Miw2ICs4MjU0LDggQEAKIAkJNDRBMjhBQUUx
MkRGQjhCRjAwQUU5MjNCIC8qIE1hdGhNTE5hbWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1hdGhNTE5hbWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0
RDhEQTk4MTM5NTQ1QkUwMDMzN0I3NSAvKiBTVkdNUGF0aEVsZW1lbnQuaWRsICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IFNWR01QYXRoRWxlbWVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTQ0RDhEQTlBMTM5NTQ1Q0QwMDMzN0I3NSAvKiBTVkdBbmltYXRlTW90aW9uRWxlbWVu
dC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NERBQjVBRjE1QTYyMzU4MDA5N0MxRTQg
LyogRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTQ0REFCNUIwMTVBNjIzNTgwMDk3QzFFNCAvKiBFeHRlbnNpb25zM0RP
cGVuR0xDb21tb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5zaW9u
czNET3BlbkdMQ29tbW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ1MDk5QzQw
MTM3MEE3ODAwMDU4RDUxMyAvKiBJY29uVVJMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEljb25VUkwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
NTBDRUJFRTE1MDczQkJFMDAyQkIxNDkgLyogTGFiZWxhYmxlRWxlbWVudC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYWJlbGFibGVFbGVtZW50LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDUwQ0VCRUYxNTA3M0JCRTAwMkJCMTQ5IC8qIExhYmVs
YWJsZUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGFiZWxhYmxl
RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjE2NjEsNiArMjE2NjUs
OCBAQAogCQlGQkMyMjBERDEyMzdGQkVCMDBCQ0Y3ODggLyogb3BlbmdsICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk0NERBQjVBRjE1QTYyMzU4MDA5N0Mx
RTQgLyogRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcCAqLywKKwkJCQk0NERBQjVCMDE1QTYy
MzU4MDA5N0MxRTQgLyogRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmggKi8sCiAJCQkJNkU2N0Qy
QTQxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5jcHAgKi8sCiAJCQkJNkU2
N0QyQTUxMjgwRThBNDAwODc1OEY3IC8qIEV4dGVuc2lvbnMzRE9wZW5HTC5oICovLAogCQkJCUZC
QzIyMERFMTIzN0ZCRUIwMEJDRjc4OCAvKiBHcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAgKi8s
CkBAIC0yNTE5Niw2ICsyNTIwMiw3IEBACiAJCQkJNzYyRjFFRDcxNTlEOTYwQTAwNzQwOEYyIC8q
IEhUTUxEaWFsb2dFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk3NjgwOEI1MDE1OURBREZB
MDAyQjUyMzMgLyogSlNIVE1MRGlhbG9nRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUZB
RkJGMTkxNUE1RkE3NDAwMDgzQTIwIC8qIFVUSVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNDREQUI1QjIxNUE2MjM1ODAwOTdDMUU0IC8qIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CkBAIC0yODI1Myw2ICsyODI2MCw3IEBACiAJCQkJNzYyRjFFREIxNTlE
OTY4QTAwNzQwOEYyIC8qIEhUTUxEaWFsb2dFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTc2ODA4QjRGMTU5REFERkEwMDJCNTIzMyAvKiBKU0hUTUxEaWFsb2dFbGVtZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTFGQUZCRjE4MTVBNUZBNkUwMDA4M0EyMCAvKiBVVElVdGlsaXRpZXMu
bW0gaW4gU291cmNlcyAqLywKKwkJCQk0NERBQjVCMTE1QTYyMzU4MDA5N0MxRTQgLyogRXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKaW5kZXggZGJkOWRm
ZWRlMDEzYTRjYWYzMzI0NjNhZDMyZmM0ZTE1MjgyNjQ2Ny4uYTQ2MjQwMTkxMWZmNjdiOTE1ZDZk
YWFhMjc5ZDlkMzNiYjkzNzY4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCkBAIC0yMCw3ICsyMCw3IEBACiAgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgogICovCiAKICNpZm5kZWYgR3JhcGhpY3NDb250ZXh0M0RfaApAQCAtOTEsMTQgKzkx
LDEyIEBAIGNvbnN0IFBsYXRmb3JtM0RPYmplY3QgTnVsbFBsYXRmb3JtM0RPYmplY3QgPSAwOwog
I2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0NvbnRleHQuaD4KICNlbmRpZgogCi0jaWYgUExBVEZP
Uk0oQkxBQ0tCRVJSWSkKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLSNlbmRpZgotCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBjbGFzcyBEcmF3aW5nQnVmZmVyOwogY2xhc3MgRXh0ZW5zaW9uczNEOwot
I2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShRVCkgfHwgUExB
VEZPUk0oRUZMKQorI2lmIFVTRShPUEVOR0xfRVNfMikKK2NsYXNzIEV4dGVuc2lvbnMzRE9wZW5H
TEVTOworI2Vsc2UKIGNsYXNzIEV4dGVuc2lvbnMzRE9wZW5HTDsKICNlbmRpZgogI2lmIFBMQVRG
T1JNKFFUKQpAQCAtOTI0LDYgKzkyMiw3IEBAIHB1YmxpYzoKICAgICAvLyBpbiBwYXJ0aWN1bGFy
IHN0ZW5jaWwgYW5kIGFudGlhbGlhcywgYW5kIGRldGVybWluZSB3aGljaCBjb3VsZCBvcgogICAg
IC8vIGNvdWxkIG5vdCBiZSBob25vcmVkIGJhc2VkIG9uIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhl
IE9wZW5HTAogICAgIC8vIGltcGxlbWVudGF0aW9uLgorICAgIHZvaWQgdmFsaWRhdGVEZXB0aFN0
ZW5jaWwoY29uc3QgY2hhciogcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKTsKICAgICB2b2lk
IHZhbGlkYXRlQXR0cmlidXRlcygpOwogCiAgICAgLy8gUmVhZCByZW5kZXJpbmcgcmVzdWx0cyBp
bnRvIGEgcGl4ZWwgYXJyYXkgd2l0aCB0aGUgc2FtZSBmb3JtYXQgYXMgdGhlCkBAIC05NTUsMTYg
Kzk1NCwzMCBAQCBwdWJsaWM6CiAgICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJT
b3VyY2VFbnRyeT4gbV9zaGFkZXJTb3VyY2VNYXA7CiAKICAgICBBTkdMRVdlYktpdEJyaWRnZSBt
X2NvbXBpbGVyOworI2VuZGlmCiAKKyNpZiBQTEFURk9STShRVCkgJiYgZGVmaW5lZChRVF9PUEVO
R0xfRVNfMikKKyAgICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9uczNEUXQ7CisgICAgT3duUHRyPEV4
dGVuc2lvbnMzRFF0PiBtX2V4dGVuc2lvbnM7CisjZWxpZiBQTEFURk9STShCTEFDS0JFUlJZKQor
ICAgIGZyaWVuZCBjbGFzcyBFeHRlbnNpb25zM0RPcGVuR0xFUzsKKyAgICBPd25QdHI8RXh0ZW5z
aW9uczNET3BlbkdMRVM+IG1fZXh0ZW5zaW9uczsKKyNlbGlmICFQTEFURk9STShDSFJPTUlVTSkK
ICAgICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9uczNET3BlbkdMOwogICAgIE93blB0cjxFeHRlbnNp
b25zM0RPcGVuR0w+IG1fZXh0ZW5zaW9uczsKKyNlbmRpZgorICAgIGZyaWVuZCBjbGFzcyBFeHRl
bnNpb25zM0RPcGVuR0xDb21tb247CiAKICAgICBBdHRyaWJ1dGVzIG1fYXR0cnM7CiAgICAgVmVj
dG9yPFZlY3RvcjxmbG9hdD4gPiBtX3ZlcnRleEFycmF5OwogCi0gICAgR0MzRHVpbnQgbV90ZXh0
dXJlLCBtX2NvbXBvc2l0b3JUZXh0dXJlOworICAgIEdDM0R1aW50IG1fdGV4dHVyZTsKKyNpZiAh
UExBVEZPUk0oQkxBQ0tCRVJSWSkKKyAgICBHQzNEdWludCBtX2NvbXBvc2l0b3JUZXh0dXJlOwor
I2VuZGlmCiAgICAgR0MzRHVpbnQgbV9mYm87Ci0jaWYgVVNFKE9QRU5HTF9FU18yKQorCisjaWYg
IVBMQVRGT1JNKEJMQUNLQkVSUlkpCiAgICAgR0MzRHVpbnQgbV9kZXB0aEJ1ZmZlcjsKICAgICBH
QzNEdWludCBtX3N0ZW5jaWxCdWZmZXI7CiAjZW5kaWYKQEAgLTk4NSwxMCArOTk4LDExIEBAIHB1
YmxpYzoKIAogICAgIC8vIEVycm9ycyByYWlzZWQgYnkgc3ludGhlc2l6ZUdMRXJyb3IoKS4KICAg
ICBMaXN0SGFzaFNldDxHQzNEZW51bT4gbV9zeW50aGV0aWNFcnJvcnM7Ci0jZW5kaWYKIAogICAg
IGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU7CiAgICAgT3duUHRyPEdyYXBo
aWNzQ29udGV4dDNEUHJpdmF0ZT4gbV9wcml2YXRlOworCisgICAgYm9vbCBzeXN0ZW1BbGxvd3NN
dWx0aXNhbXBsaW5nT25BVElDYXJkcygpIGNvbnN0OyAKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL09wZW5H
TEVTU2hpbXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL09wZW5HTEVTU2hp
bXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4wNTJhZjVlNDVjMDEzZjBkZTJkMzBiMmRiZmZmODdhNTdiNWEwMTAy
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvT3Bl
bkdMRVNTaGltcy5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIE9wZW5HTEVTU2hpbXNfaAorI2RlZmluZSBPcGVuR0xFU1NoaW1zX2gKKworI2lmIFBM
QVRGT1JNKEJMQUNLQkVSUlkpCisjZGVmaW5lIGdsQmluZEZyYW1lYnVmZmVyRVhUIGdsQmluZEZy
YW1lYnVmZmVyCisjZGVmaW5lIGdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQgZ2xGcmFtZWJ1ZmZl
clRleHR1cmUyRAorI2RlZmluZSBnbEJpbmRSZW5kZXJidWZmZXJFWFQgZ2xCaW5kUmVuZGVyYnVm
ZmVyCisjZGVmaW5lIGdsUmVuZGVyYnVmZmVyU3RvcmFnZUVYVCBnbFJlbmRlcmJ1ZmZlclN0b3Jh
Z2UKKyNkZWZpbmUgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVCBnbEZyYW1lYnVmZmVyUmVu
ZGVyYnVmZmVyCisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9FWFQgR0xfUkVOREVSQlVGRkVSCisj
ZGVmaW5lIEdMX1NURU5DSUxfQVRUQUNITUVOVF9FWFQgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UCisj
ZGVmaW5lIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVCBnbENoZWNrRnJhbWVidWZmZXJTdGF0
dXMKKyNkZWZpbmUgZ2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMK
KyNkZWZpbmUgZ2xEZWxldGVSZW5kZXJidWZmZXJzRVhUIGdsRGVsZXRlUmVuZGVyYnVmZmVycwor
I2RlZmluZSBnbEdlblJlbmRlcmJ1ZmZlcnNFWFQgZ2xHZW5SZW5kZXJidWZmZXJzCisjZGVmaW5l
IGdsR2VuRnJhbWVidWZmZXJzRVhUIGdsR2VuRnJhbWVidWZmZXJzCisjZGVmaW5lIGdsR2V0RnJh
bWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXZFWFQgZ2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1l
bnRQYXJhbWV0ZXJpdgorI2RlZmluZSBnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2RVhUIGds
R2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYKKyNkZWZpbmUgZ2xJc1JlbmRlcmJ1ZmZlckVYVCBn
bElzUmVuZGVyYnVmZmVyCisjZGVmaW5lIGdsSXNGcmFtZWJ1ZmZlckVYVCBnbElzRnJhbWVidWZm
ZXIKKyNkZWZpbmUgZ2xHZW5lcmF0ZU1pcG1hcEVYVCBnbEdlbmVyYXRlTWlwbWFwCisjZGVmaW5l
IEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCBHTF9DT0xPUl9BVFRBQ0hNRU5UMAorI2RlZmluZSBH
TF9ERVBUSF9BVFRBQ0hNRU5UX0VYVCBHTF9ERVBUSF9BVFRBQ0hNRU5UCisjZGVmaW5lIEdMX0ZS
QU1FQlVGRkVSX0NPTVBMRVRFX0VYVCBHTF9GUkFNRUJVRkZFUl9DT01QTEVURQorI2RlZmluZSBH
TF9GUkFNRUJVRkZFUl9FWFQgR0xfRlJBTUVCVUZGRVIKKyNkZWZpbmUgR0xfREVQVEgyNF9TVEVO
Q0lMOF9FWFQgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMKKyNkZWZpbmUgR0xfUkdCQTggR0xfUkdC
QThfT0VTCisjZGVmaW5lIEdMX1JHQjggR0xfUkdCOF9PRVMKKyNkZWZpbmUgR0xfUkVBRF9GUkFN
RUJVRkZFUl9FWFQgMHg4Q0E4CisjZGVmaW5lIEdMX0RSQVdfRlJBTUVCVUZGRVJfRVhUIDB4OENB
OQorI2RlZmluZSBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01VTFRJU0FNUExFX0VYVCAweDkxMzQK
KyNkZWZpbmUgR0xfTUFYX1NBTVBMRVNfRVhUIDB4OEQ1NworI2VuZGlmIC8vIFBMQVRGT1JNKEJM
QUNLQkVSUlkpCisKKyNlbmRpZiAvLyBPcGVuR0xFU1NoaW1zX2gKKwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWly
by5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0Nv
bnRleHQzRENhaXJvLmNwcAppbmRleCBhYzI5MmQzNzUxNTc5MmVjYTMyMjllNmY2NzM4OGViMjhl
NTFlMDk2Li5mZDFkYWQwOWYwMTFiNzZjOWU1OWU0ODUzOWFjOWMwM2RhYWRiMzZhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRl
eHQzRENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUg
IkV4dGVuc2lvbnMzRE9wZW5HTC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZS5oIgogI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNp
bmNsdWRlICJPcGVuR0xTaGltcy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgi
CiAjaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKQEAgLTE0Niw2ICsxNDcsMTEgQEAgR3JhcGhpY3ND
b250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCgpCiAgICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVy
c0VYVCgxLCAmbV9mYm8pOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hh
ZGVyQ29tcGlsZXIoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKIGJvb2wgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFnZSogaW1hZ2UsIHVuc2lnbmVkIGludCBmb3Jt
YXQsIHVuc2lnbmVkIGludCB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3Jl
R2FtbWFBbmRDb2xvclByb2ZpbGUsIFZlY3Rvcjx1aW50OF90PiYgb3V0cHV0VmVjdG9yKQogewog
ICAgIGlmICghaW1hZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jbHV0dGVyL0dyYXBoaWNzQ29udGV4dDNEQ2x1dHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzQ29udGV4dDNEQ2x1dHRlci5jcHAK
aW5kZXggY2EwZmZkYzJiY2I5ZDg5Mzg2YjE1ZDQ4YzMyMzhlYjNlZjliMDk1NC4uN2UyMmY3MjJk
NGJkMzUzZDMzMWJkYzYwNzc1ZTdkNzFhYTA1ZTUxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0NvbnRleHQzRENsdXR0ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3ND
b250ZXh0M0RDbHV0dGVyLmNwcApAQCAtNTYsNiArNTYsMTEgQEAgR3JhcGhpY3NDb250ZXh0M0Q6
On5HcmFwaGljc0NvbnRleHQzRCgpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1h
Z2UqIGltYWdlLCB1bnNpZ25lZCBpbnQgZm9ybWF0LCB1bnNpZ25lZCBpbnQgdHlwZSwgYm9vbCBw
cmVtdWx0aXBseUFscGhhLCBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlLCBWZWN0b3I8
dWludDhfdD4mIG91dHB1dFZlY3RvcikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4
dDNETWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNz
Q29udGV4dDNETWFjLm1tCmluZGV4IGNkMDE1MjJlZjIyZjYwZDZmYzkxMWMzMjljNmZlNTkxMjMx
MDY5ZWYuLmNlZDc1YWJhZDIxN2JkNmVkNTUxZjM4OTI1NzRkNmY0Y2E1MjZjMmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQz
RE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhp
Y3NDb250ZXh0M0RNYWMubW0KQEAgLTI4Miw2ICsyODIsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6c2V0RXJyb3JNZXNzYWdlQ2FsbGJhY2soUGFzc093blB0cjxFcnJvck1lc3NhZ2VDYWxs
YmFjaz4KIHsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBp
bGVyKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCiB9CiAKICNlbmRpZiAvLyBFTkFC
TEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwCmluZGV4IDRhYTM0MWMzMjZjNzM1
N2IxMTBjOTgzZDAzOWNjZDdiYzMzMTY2MTIuLmJiZTc3YmI3OTg1NGM5MjM3ZThjYjY3MDZjOTc0
NjU5OTU2MmI5MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwCkBAIC00Miw3ICs0Miw4
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEV4dGVuc2lvbnMzRE9wZW5HTDo6RXh0ZW5zaW9u
czNET3BlbkdMKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQotICAgIDogbV9pbml0aWFsaXpl
ZEF2YWlsYWJsZUV4dGVuc2lvbnMoZmFsc2UpCisgICAgOiBFeHRlbnNpb25zM0RPcGVuR0xDb21t
b24oY29udGV4dCkKKyAgICAsIG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zKGZhbHNl
KQogICAgICwgbV9jb250ZXh0KGNvbnRleHQpCiB7CiB9CkBAIC01MSw5MSArNTIsNiBAQCBFeHRl
bnNpb25zM0RPcGVuR0w6On5FeHRlbnNpb25zM0RPcGVuR0woKQogewogfQogCi1ib29sIEV4dGVu
c2lvbnMzRE9wZW5HTDo6c3VwcG9ydHMoY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIC8vIE5v
dGUgb24gc3VwcG9ydCBmb3IgQkdSQToKLSAgICAvLwotICAgIC8vIEZvciBPcGVuR0wgRVMyLjAs
IHJlcXVpcmVzIGNoZWNraW5nIGZvcgotICAgIC8vIEdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JB
ODg4OCBhbmQgR0xfRVhUX3JlYWRfZm9ybWF0X2JncmEuCi0gICAgLy8gRm9yIGRlc2t0b3AgR0ws
IEJHUkEgaGFzIGJlZW4gc3VwcG9ydGVkIHNpbmNlIE9wZW5HTCAxLjIuCi0gICAgLy8KLSAgICAv
LyBIb3dldmVyLCBub3RlIHRoYXQgdGhlIEdMIEVTMiBleHRlbnNpb24gcmVxdWlyZXMgdGhlCi0g
ICAgLy8gaW50ZXJuYWxGb3JtYXQgdG8gZ2xUZXhJbWFnZTJEKCkgYmUgR0xfQkdSQSwgd2hpbGUg
ZGVza3RvcCBHTAotICAgIC8vIHdpbGwgbm90IGFjY2VwdCBHTF9CR1JBIChtdXN0IGJlIEdMX1JH
QkEpLCBzbyB0aGlzIG11c3QgYmUKLSAgICAvLyBjaGVja2VkIG9uIGVhY2ggcGxhdGZvcm0uIERl
c2t0b3AgR0wgb2ZmZXJzIG5laXRoZXIKLSAgICAvLyBHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdS
QTg4ODggb3IgR0xfRVhUX3JlYWRfZm9ybWF0X2JncmEsIHNvCi0gICAgLy8gdHJlYXQgdGhlbSBh
cyB1bnN1cHBvcnRlZCBoZXJlLgotICAgIGlmICghbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVu
c2lvbnMpIHsKLSAgICAgICAgU3RyaW5nIGV4dGVuc2lvbnNTdHJpbmcocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhHTF9FWFRFTlNJT05TKSkpOwotICAgICAgICBW
ZWN0b3I8U3RyaW5nPiBhdmFpbGFibGVFeHRlbnNpb25zOwotICAgICAgICBleHRlbnNpb25zU3Ry
aW5nLnNwbGl0KCIgIiwgYXZhaWxhYmxlRXh0ZW5zaW9ucyk7Ci0gICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgYXZhaWxhYmxlRXh0ZW5zaW9ucy5zaXplKCk7ICsraSkKLSAgICAgICAgICAg
IG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5hZGQoYXZhaWxhYmxlRXh0ZW5zaW9uc1tpXSk7Ci0gICAg
ICAgIG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zID0gdHJ1ZTsKLSAgICB9Ci0gICAg
Ci0gICAgLy8gR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCBhbmQgR0xfQU5HTEVfZnJhbWVidWZm
ZXJfbXVsdGlzYW1wbGUgYXJlICJmYWtlIi4gVGhleSBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgb3Ro
ZXIKLSAgICAvLyBleHRlbnNpb25zLiBJbiBwYXJ0aWN1bGFyIEdMX0VYVF9mcmFtZWJ1ZmZlcl9i
bGl0IGFuZCBHTF9FWFRfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUKLSAgICBpZiAobmFtZSA9PSAi
R0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCIpCi0gICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4
dGVuc2lvbnMuY29udGFpbnMoIkdMX0VYVF9mcmFtZWJ1ZmZlcl9ibGl0Iik7Ci0gICAgaWYgKG5h
bWUgPT0gIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIikKLSAgICAgICAgcmV0dXJu
IG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfRVhUX2ZyYW1lYnVmZmVyX211bHRp
c2FtcGxlIik7Ci0KLSAgICAvLyBEZXNrdG9wIEdMIGFsd2F5cyBzdXBwb3J0cyBHTF9PRVNfcmdi
OF9yZ2JhOC4KLSAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3JnYjhfcmdiYTgiKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgIC8vIElmIEdMX0FSQl90ZXh0dXJlX2Zsb2F0IGlzIGF2YWlsYWJs
ZSB0aGVuIHdlIHJlcG9ydCBHTF9PRVNfdGV4dHVyZV9mbG9hdCBhbmQKLSAgICAvLyBHTF9PRVNf
dGV4dHVyZV9oYWxmX2Zsb2F0IGFzIGF2YWlsYWJsZS4KLSAgICBpZiAobmFtZSA9PSAiR0xfT0VT
X3RleHR1cmVfZmxvYXQiIHx8IG5hbWUgPT0gIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQiKQot
ICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9BUkJfdGV4
dHVyZV9mbG9hdCIpOwotICAgIAotICAgIC8vIEdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Ci0g
ICAgaWYgKG5hbWUgPT0gIkdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikKLSAgICAgICAgcmV0
dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfQVBQTEVfdmVydGV4X2FycmF5
X29iamVjdCIpOwotCi0gICAgLy8gRGVza3RvcCBHTCBhbHdheXMgc3VwcG9ydHMgdGhlIHN0YW5k
YXJkIGRlcml2YXRpdmUgZnVuY3Rpb25zCi0gICAgaWYgKG5hbWUgPT0gIkdMX09FU19zdGFuZGFy
ZF9kZXJpdmF0aXZlcyIpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKG5hbWUgPT0g
IkdMX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpCi0gICAgICAgIHJldHVybiBtX2F2
YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ry
b3BpYyIpOwotCi0gICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucyhuYW1l
KTsKLX0KLQotdm9pZCBFeHRlbnNpb25zM0RPcGVuR0w6OmVuc3VyZUVuYWJsZWQoY29uc3QgU3Ry
aW5nJiBuYW1lKQotewotI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRG
T1JNKEdUSykKLSAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikg
ewotICAgICAgICAvLyBFbmFibGUgc3VwcG9ydCBpbiBBTkdMRSAoaWYgbm90IGVuYWJsZWQgYWxy
ZWFkeSkKLSAgICAgICAgQU5HTEVXZWJLaXRCcmlkZ2UmIGNvbXBpbGVyID0gbV9jb250ZXh0LT5t
X2NvbXBpbGVyOwotICAgICAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgQU5HTEVSZXNvdXJjZXMgPSBj
b21waWxlci5nZXRSZXNvdXJjZXMoKTsKLSAgICAgICAgaWYgKCFBTkdMRVJlc291cmNlcy5PRVNf
c3RhbmRhcmRfZGVyaXZhdGl2ZXMpIHsKLSAgICAgICAgICAgIEFOR0xFUmVzb3VyY2VzLk9FU19z
dGFuZGFyZF9kZXJpdmF0aXZlcyA9IDE7Ci0gICAgICAgICAgICBjb21waWxlci5zZXRSZXNvdXJj
ZXMoQU5HTEVSZXNvdXJjZXMpOwotICAgICAgICB9Ci0gICAgfQotI2Vsc2UKLSAgICBBU1NFUlRf
VU5VU0VEKG5hbWUsIHN1cHBvcnRzKG5hbWUpKTsKLSNlbmRpZgotfQotCi1ib29sIEV4dGVuc2lv
bnMzRE9wZW5HTDo6aXNFbmFibGVkKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSNpZiBQTEFURk9S
TShNQUMpIHx8IFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEspCi0gICAgaWYgKG5hbWUgPT0g
IkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpIHsKLSAgICAgICAgQU5HTEVXZWJLaXRCcmlk
Z2UmIGNvbXBpbGVyID0gbV9jb250ZXh0LT5tX2NvbXBpbGVyOwotICAgICAgICByZXR1cm4gY29t
cGlsZXIuZ2V0UmVzb3VyY2VzKCkuT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzOwotICAgIH0KLSNl
bmRpZgotICAgIHJldHVybiBzdXBwb3J0cyhuYW1lKTsKLX0KLQotaW50IEV4dGVuc2lvbnMzRE9w
ZW5HTDo6Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpCi17Ci0gICAgcmV0dXJuIEdyYXBoaWNz
Q29udGV4dDNEOjpOT19FUlJPUjsKLX0KIAogdm9pZCBFeHRlbnNpb25zM0RPcGVuR0w6OmJsaXRG
cmFtZWJ1ZmZlcihsb25nIHNyY1gwLCBsb25nIHNyY1kwLCBsb25nIHNyY1gxLCBsb25nIHNyY1kx
LCBsb25nIGRzdFgwLCBsb25nIGRzdFkwLCBsb25nIGRzdFgxLCBsb25nIGRzdFkxLCB1bnNpZ25l
ZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcgZmlsdGVyKQogewpAQCAtMTk0LDE5ICsxMTAsNDkg
QEAgdm9pZCBFeHRlbnNpb25zM0RPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNE
T2JqZWN0IGFycmF5KQogI2VuZGlmCiB9CiAKLVN0cmluZyBFeHRlbnNpb25zM0RPcGVuR0w6Omdl
dFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsK
LSAgICBVTlVTRURfUEFSQU0oc2hhZGVyKTsKLSAgICByZXR1cm4gIiI7Ci0gICAgLy8gRklYTUU6
IGltcGxlbWVudCB0aGlzIGZ1bmN0aW9uIGFuZCBhZGQgR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFk
ZXJfc291cmNlIGluIHN1cHBvcnRzKCkuCi19Ci0KIHZvaWQgRXh0ZW5zaW9uczNET3BlbkdMOjpj
b3B5VGV4dHVyZUNIUk9NSVVNKEdDM0RlbnVtLCBQbGF0Zm9ybTNET2JqZWN0LCBQbGF0Zm9ybTNE
T2JqZWN0LCBHQzNEaW50LCBHQzNEZW51bSkKIHsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRo
aXMgZnVuY3Rpb24gYW5kIGFkZCBHTF9DSFJPTUlVTV9jb3B5X3RleHR1cmUgaW4gc3VwcG9ydHMo
KS4KICAgICByZXR1cm47CiB9CiAKK2Jvb2wgRXh0ZW5zaW9uczNET3BlbkdMOjpzdXBwb3J0c0V4
dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgLy8gR0xfQU5HTEVfZnJhbWVidWZm
ZXJfYmxpdCBhbmQgR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUgYXJlICJmYWtlIi4g
VGhleSBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgb3RoZXIKKyAgICAvLyBleHRlbnNpb25zLiBJbiBw
YXJ0aWN1bGFyIEdMX0VYVF9mcmFtZWJ1ZmZlcl9ibGl0IGFuZCBHTF9FWFRfZnJhbWVidWZmZXJf
bXVsdGlzYW1wbGUKKyAgICBpZiAobmFtZSA9PSAiR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCIp
CisgICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0VYVF9m
cmFtZWJ1ZmZlcl9ibGl0Iik7CisgICAgaWYgKG5hbWUgPT0gIkdMX0FOR0xFX2ZyYW1lYnVmZmVy
X211bHRpc2FtcGxlIikKKyAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250
YWlucygiR0xfRVhUX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIik7CisKKyAgICAvLyBEZXNrdG9w
IEdMIGFsd2F5cyBzdXBwb3J0cyBHTF9PRVNfcmdiOF9yZ2JhOC4KKyAgICBpZiAobmFtZSA9PSAi
R0xfT0VTX3JnYjhfcmdiYTgiKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIElmIEdM
X0FSQl90ZXh0dXJlX2Zsb2F0IGlzIGF2YWlsYWJsZSB0aGVuIHdlIHJlcG9ydCBHTF9PRVNfdGV4
dHVyZV9mbG9hdCBhbmQKKyAgICAvLyBHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IGFzIGF2YWls
YWJsZS4KKyAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3RleHR1cmVfZmxvYXQiIHx8IG5hbWUgPT0g
IkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQiKQorICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVF
eHRlbnNpb25zLmNvbnRhaW5zKCJHTF9BUkJfdGV4dHVyZV9mbG9hdCIpOworCisgICAgLy8gR0xf
T0VTX3ZlcnRleF9hcnJheV9vYmplY3QKKyAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3ZlcnRleF9h
cnJheV9vYmplY3QiKQorICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRh
aW5zKCJHTF9BUFBMRV92ZXJ0ZXhfYXJyYXlfb2JqZWN0Iik7CisKKyAgICAvLyBEZXNrdG9wIEdM
IGFsd2F5cyBzdXBwb3J0cyB0aGUgc3RhbmRhcmQgZGVyaXZhdGl2ZSBmdW5jdGlvbnMKKyAgICBp
ZiAobmFtZSA9PSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICBpZiAobmFtZSA9PSAiR0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJv
cGljIikKKyAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xf
RVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7CisKKyAgICByZXR1cm4gbV9hdmFpbGFi
bGVFeHRlbnNpb25zLmNvbnRhaW5zKG5hbWUpOworfQorCitTdHJpbmcgRXh0ZW5zaW9uczNET3Bl
bkdMOjpnZXRFeHRlbnNpb25zKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgY2hhcio+KDo6Z2xHZXRTdHJpbmcoR0xfRVhURU5TSU9OUykpKTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9w
ZW5HTC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lv
bnMzRE9wZW5HTC5oCmluZGV4IDJiMmQzMGEwOTBlNTRmY2ExZDA2NDYyYWU3MWRkN2VjODcyYjU0
NGMuLjIwZjRiNzE0NWM1YmFmOWM5MmIwMDE1NTc4YzUwZDhmOWM2MDhkMTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVu
R0wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5z
aW9uczNET3BlbkdMLmgKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgRXh0ZW5zaW9uczNET3Bl
bkdMX2gKICNkZWZpbmUgRXh0ZW5zaW9uczNET3BlbkdMX2gKIAotI2luY2x1ZGUgIkV4dGVuc2lv
bnMzRC5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oIgogCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpAQCAtMzQs
MTUgKzM0LDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRXh0ZW5zaW9uczNE
T3BlbkdMIDogcHVibGljIEV4dGVuc2lvbnMzRCB7CitjbGFzcyBFeHRlbnNpb25zM0RPcGVuR0wg
OiBwdWJsaWMgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFs
IH5FeHRlbnNpb25zM0RPcGVuR0woKTsKIAogICAgIC8vIEV4dGVuc2lvbnMzRCBtZXRob2RzLgot
ICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0cyhjb25zdCBTdHJpbmcmKTsKLSAgICB2aXJ0dWFsIHZv
aWQgZW5zdXJlRW5hYmxlZChjb25zdCBTdHJpbmcmKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNFbmFi
bGVkKGNvbnN0IFN0cmluZyYpOwotICAgIHZpcnR1YWwgaW50IGdldEdyYXBoaWNzUmVzZXRTdGF0
dXNBUkIoKTsKICAgICB2aXJ0dWFsIHZvaWQgYmxpdEZyYW1lYnVmZmVyKGxvbmcgc3JjWDAsIGxv
bmcgc3JjWTAsIGxvbmcgc3JjWDEsIGxvbmcgc3JjWTEsIGxvbmcgZHN0WDAsIGxvbmcgZHN0WTAs
IGxvbmcgZHN0WDEsIGxvbmcgZHN0WTEsIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQgbG9u
ZyBmaWx0ZXIpOwogICAgIHZpcnR1YWwgdm9pZCByZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1w
bGUodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcywgdW5zaWduZWQg
bG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBo
ZWlnaHQpOwogICAgIApAQCAtNTAsMTQgKzQ2LDE3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCk7CiAgICAgdmlydHVhbCBH
QzNEYm9vbGVhbiBpc1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpOwogICAgIHZpcnR1
YWwgdm9pZCBiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgdmlydHVh
bCBTdHJpbmcgZ2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRmb3JtM0RPYmplY3Qp
OwogICAgIHZpcnR1YWwgdm9pZCBjb3B5VGV4dHVyZUNIUk9NSVVNKEdDM0RlbnVtLCBQbGF0Zm9y
bTNET2JqZWN0LCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEaW50LCBHQzNEZW51bSk7CiAKLXByaXZh
dGU6Citwcm90ZWN0ZWQ6CiAgICAgLy8gVGhpcyBjbGFzcyBvbmx5IG5lZWRzIHRvIGJlIGluc3Rh
bnRpYXRlZCBieSBHcmFwaGljc0NvbnRleHQzRCBpbXBsZW1lbnRhdGlvbnMuCiAgICAgZnJpZW5k
IGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogICAgIEV4dGVuc2lvbnMzRE9wZW5HTChHcmFwaGlj
c0NvbnRleHQzRCopOwogCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0
IFdURjo6U3RyaW5nJik7CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0RXh0ZW5zaW9ucygpOworCitw
cml2YXRlOgogICAgIGJvb2wgbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnM7CiAgICAg
SGFzaFNldDxTdHJpbmc+IG1fYXZhaWxhYmxlRXh0ZW5zaW9uczsKICAgICAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVu
R0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4
dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTc3MjM1NjBjOTZhZmIwMTRi
ZDg1MzM1Nzg1ZDZmNWE0ODMyNjQ2NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwCkBA
IC0wLDAgKzEsMTQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90
aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaWYgRU5BQkxFKFdFQkdMKQorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTENvbW1v
bi5oIgorCisjaW5jbHVkZSAiQU5HTEVXZWJLaXRCcmlkZ2UuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQzRC5oIgorCisjaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKKyNpbmNsdWRlIDxCbGFj
a0JlcnJ5UGxhdGZvcm1Mb2cuaD4KKyNlbmRpZgorCisjaWYgVVNFKE9QRU5HTF9FU18yKQorI2lu
Y2x1ZGUgIk9wZW5HTEVTU2hpbXMuaCIKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNsdWRl
IDxHTEVTMi9nbDJleHQuaD4KKyNlbGlmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlIDxPcGVuR0wv
Z2wuaD4KKyNlbGlmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShR
VCkKKyNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9u
OjpFeHRlbnNpb25zM0RPcGVuR0xDb21tb24oR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisg
ICAgOiBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9ucyhmYWxzZSkKKyAgICAsIG1fY29u
dGV4dChjb250ZXh0KQoreworfQorCitFeHRlbnNpb25zM0RPcGVuR0xDb21tb246On5FeHRlbnNp
b25zM0RPcGVuR0xDb21tb24oKQoreworfQorCitib29sIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1v
bjo6c3VwcG9ydHMoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmICghbV9pbml0aWFsaXpl
ZEF2YWlsYWJsZUV4dGVuc2lvbnMpCisgICAgICAgIGluaXRpYWxpemVBdmFpbGFibGVFeHRlbnNp
b25zKCk7CisKKyAgICByZXR1cm4gc3VwcG9ydHNFeHRlbnNpb24obmFtZSk7Cit9CisKK3ZvaWQg
RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjplbnN1cmVFbmFibGVkKGNvbnN0IFN0cmluZyYgbmFt
ZSkKK3sKKyAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikgewor
ICAgICAgICAvLyBFbmFibGUgc3VwcG9ydCBpbiBBTkdMRSAoaWYgbm90IGVuYWJsZWQgYWxyZWFk
eSkKKyAgICAgICAgQU5HTEVXZWJLaXRCcmlkZ2UmIGNvbXBpbGVyID0gbV9jb250ZXh0LT5tX2Nv
bXBpbGVyOworICAgICAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgQU5HTEVSZXNvdXJjZXMgPSBjb21w
aWxlci5nZXRSZXNvdXJjZXMoKTsKKyAgICAgICAgaWYgKCFBTkdMRVJlc291cmNlcy5PRVNfc3Rh
bmRhcmRfZGVyaXZhdGl2ZXMpIHsKKyAgICAgICAgICAgIEFOR0xFUmVzb3VyY2VzLk9FU19zdGFu
ZGFyZF9kZXJpdmF0aXZlcyA9IDE7CisgICAgICAgICAgICBjb21waWxlci5zZXRSZXNvdXJjZXMo
QU5HTEVSZXNvdXJjZXMpOworICAgICAgICB9CisgICAgfQorfQorCitib29sIEV4dGVuc2lvbnMz
RE9wZW5HTENvbW1vbjo6aXNFbmFibGVkKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAo
bmFtZSA9PSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikgeworICAgICAgICBBTkdMRVdl
YktpdEJyaWRnZSYgY29tcGlsZXIgPSBtX2NvbnRleHQtPm1fY29tcGlsZXI7CisgICAgICAgIHJl
dHVybiBjb21waWxlci5nZXRSZXNvdXJjZXMoKS5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXM7Cisg
ICAgfQorICAgIHJldHVybiBzdXBwb3J0cyhuYW1lKTsKK30KKworaW50IEV4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbjo6Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpCit7CisgICAgcmV0dXJuIEdy
YXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUjsKK30KKworU3RyaW5nIEV4dGVuc2lvbnMzRE9wZW5H
TENvbW1vbjo6Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRmb3JtM0RPYmplY3Qg
c2hhZGVyKQoreworICAgIEFTU0VSVChzaGFkZXIpOworICAgIGludCBHTHNoYWRlclR5cGU7Cisg
ICAgQU5HTEVTaGFkZXJUeXBlIHNoYWRlclR5cGU7CisKKyAgICBBTkdMRVdlYktpdEJyaWRnZSYg
Y29tcGlsZXIgPSBtX2NvbnRleHQtPm1fY29tcGlsZXI7CisKKyAgICBtX2NvbnRleHQtPmdldFNo
YWRlcml2KHNoYWRlciwgR3JhcGhpY3NDb250ZXh0M0Q6OlNIQURFUl9UWVBFLCAmR0xzaGFkZXJU
eXBlKTsKKworICAgIGlmIChHTHNoYWRlclR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRF
WF9TSEFERVIpCisgICAgICAgIHNoYWRlclR5cGUgPSBTSEFERVJfVFlQRV9WRVJURVg7CisgICAg
ZWxzZSBpZiAoR0xzaGFkZXJUeXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFE
RVIpCisgICAgICAgIHNoYWRlclR5cGUgPSBTSEFERVJfVFlQRV9GUkFHTUVOVDsKKyAgICBlbHNl
CisgICAgICAgIHJldHVybiAiIjsgLy8gSW52YWxpZCBzaGFkZXIgdHlwZS4KKworICAgIEhhc2hN
YXA8UGxhdGZvcm0zRE9iamVjdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlNoYWRlclNvdXJjZUVudHJ5
Pjo6aXRlcmF0b3IgcmVzdWx0ID0gbV9jb250ZXh0LT5tX3NoYWRlclNvdXJjZU1hcC5maW5kKHNo
YWRlcik7CisKKyAgICBpZiAocmVzdWx0ID09IG1fY29udGV4dC0+bV9zaGFkZXJTb3VyY2VNYXAu
ZW5kKCkpCisgICAgICAgIHJldHVybiAiIjsKKworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpTaGFk
ZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnNlY29uZDsKKworICAgIFN0cmluZyB0cmFu
c2xhdGVkU2hhZGVyU291cmNlOworICAgIFN0cmluZyBzaGFkZXJJbmZvTG9nOworCisgICAgYm9v
bCBpc1ZhbGlkID0gY29tcGlsZXIudmFsaWRhdGVTaGFkZXJTb3VyY2UoZW50cnkuc291cmNlLnV0
ZjgoKS5kYXRhKCksIHNoYWRlclR5cGUsIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UsIHNoYWRlcklu
Zm9Mb2cpOworCisgICAgZW50cnkubG9nID0gc2hhZGVySW5mb0xvZzsKKyAgICBlbnRyeS5pc1Zh
bGlkID0gaXNWYWxpZDsKKworICAgIGlmICghaXNWYWxpZCkKKyAgICAgICAgcmV0dXJuICIiOwor
CisgICAgcmV0dXJuIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7Cit9CisKK3ZvaWQgRXh0ZW5zaW9u
czNET3BlbkdMQ29tbW9uOjppbml0aWFsaXplQXZhaWxhYmxlRXh0ZW5zaW9ucygpCit7CisgICAg
U3RyaW5nIGV4dGVuc2lvbnNTdHJpbmcgPSBnZXRFeHRlbnNpb25zKCk7CisgICAgVmVjdG9yPFN0
cmluZz4gYXZhaWxhYmxlRXh0ZW5zaW9uczsKKyAgICBleHRlbnNpb25zU3RyaW5nLnNwbGl0KCIg
IiwgYXZhaWxhYmxlRXh0ZW5zaW9ucyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhdmFp
bGFibGVFeHRlbnNpb25zLnNpemUoKTsgKytpKQorICAgICAgICBtX2F2YWlsYWJsZUV4dGVuc2lv
bnMuYWRkKGF2YWlsYWJsZUV4dGVuc2lvbnNbaV0pOworICAgIG1faW5pdGlhbGl6ZWRBdmFpbGFi
bGVFeHRlbnNpb25zID0gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmE1YTY2ZGEyYTc2NzMxNDVmZTUzYjZmMjhiNTJiMGY0N2RhZDcyZjMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0
ZW5zaW9uczNET3BlbkdMQ29tbW9uLmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uX2gKKyNkZWZpbmUgRXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uX2gKKworI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24gOiBwdWJsaWMgRXh0ZW5zaW9uczNEIHsKK3B1
YmxpYzoKKyAgICB2aXJ0dWFsIH5FeHRlbnNpb25zM0RPcGVuR0xDb21tb24oKTsKKworICAgIC8v
IEV4dGVuc2lvbnMzRCBtZXRob2RzLgorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0cyhjb25zdCBT
dHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5zdXJlRW5hYmxlZChjb25zdCBTdHJpbmcmKTsK
KyAgICB2aXJ0dWFsIGJvb2wgaXNFbmFibGVkKGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwg
aW50IGdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKTsKKworICAgIHZpcnR1YWwgUGxhdGZvcm0z
RE9iamVjdCBjcmVhdGVWZXJ0ZXhBcnJheU9FUygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVs
ZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCkgPSAwOworICAgIHZpcnR1YWwgR0Mz
RGJvb2xlYW4gaXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KSA9IDA7CisKKyAg
ICB2aXJ0dWFsIFN0cmluZyBnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoUGxhdGZvcm0z
RE9iamVjdCk7CisKK3Byb3RlY3RlZDoKKyAgICBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24oR3Jh
cGhpY3NDb250ZXh0M0QqKTsKKworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihj
b25zdCBTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0RXh0ZW5zaW9ucygpID0g
MDsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZUF2YWlsYWJsZUV4dGVu
c2lvbnMoKTsKKyAgICBib29sIG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zOworICAg
IEhhc2hTZXQ8U3RyaW5nPiBtX2F2YWlsYWJsZUV4dGVuc2lvbnM7CisKKyAgICAvLyBXZWFrIHBv
aW50ZXIgYmFjayB0byBHcmFwaGljc0NvbnRleHQzRAorICAgIEdyYXBoaWNzQ29udGV4dDNEKiBt
X2NvbnRleHQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFeHRl
bnNpb25zM0RPcGVuR0xDb21tb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZTIxZjU1OWFkZGZkNDM1ZmU2OGRkMDkwYjEzODU2ZjQ2NWMzNGY1MgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRl
bnNpb25zM0RPcGVuR0xFUy5jcHAKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgRU5BQkxFKFdFQkdMKQorI2luY2x1ZGUgIkV4
dGVuc2lvbnMzRE9wZW5HTEVTLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgor
I2luY2x1ZGUgPEVHTC9lZ2wuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitFeHRlbnNpb25zM0RPcGVuR0xFUzo6RXh0ZW5zaW9uczNET3BlbkdM
RVMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAgOiBFeHRlbnNpb25zM0RPcGVuR0xD
b21tb24oY29udGV4dCkKKyAgICAsIG1fc3VwcG9ydHNPRVN2ZXJ0ZXhBcnJheU9iamVjdChmYWxz
ZSkKKyAgICAsIG1fc3VwcG9ydHNJTUdNdWx0aXNhbXBsZWRSZW5kZXJUb1RleHR1cmUoZmFsc2Up
CisgICAgLCBtX2dsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRygwKQorICAgICwg
bV9nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRygwKQorICAgICwgbV9nbEJpbmRW
ZXJ0ZXhBcnJheU9FUygwKQorICAgICwgbV9nbERlbGV0ZVZlcnRleEFycmF5c09FUygwKQorICAg
ICwgbV9nbEdlblZlcnRleEFycmF5c09FUygwKQorICAgICwgbV9nbElzVmVydGV4QXJyYXlPRVMo
MCkKK3sKK30KKworRXh0ZW5zaW9uczNET3BlbkdMRVM6On5FeHRlbnNpb25zM0RPcGVuR0xFUygp
Cit7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uczNET3BlbkdMRVM6OmZyYW1lYnVmZmVyVGV4dHVyZTJE
TXVsdGlzYW1wbGVJTUcodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNo
bWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIHVuc2lnbmVkIGludCB0ZXh0dXJlLCBpbnQg
bGV2ZWwsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcykKK3sKKyAgICBpZiAobV9nbEZyYW1lYnVmZmVy
VGV4dHVyZTJETXVsdGlzYW1wbGVJTUcpCisgICAgICAgIG1fZ2xGcmFtZWJ1ZmZlclRleHR1cmUy
RE11bHRpc2FtcGxlSU1HKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBs
ZXZlbCwgc2FtcGxlcyk7CisgICAgZWxzZQorICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVH
TEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKK30KKwordm9pZCBFeHRlbnNpb25zM0RPcGVu
R0xFUzo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HKHVuc2lnbmVkIGxvbmcgdGFy
Z2V0LCB1bnNpZ25lZCBsb25nIHNhbXBsZXMsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQs
IHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQoreworICAgIGlmICht
X2dsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HKQorICAgICAgICBtX2dsUmVuZGVy
YnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HKHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQpOworICAgIGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVz
aXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cit9CisKK1BsYXRmb3JtM0RPYmplY3Qg
RXh0ZW5zaW9uczNET3BlbkdMRVM6OmNyZWF0ZVZlcnRleEFycmF5T0VTKCkKK3sKKyAgICBtX2Nv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmIChtX2dsR2VuVmVydGV4QXJyYXlz
T0VTKSB7CisgICAgICAgIEdMdWludCBhcnJheSA9IDA7CisgICAgICAgIG1fZ2xHZW5WZXJ0ZXhB
cnJheXNPRVMoMSwgJmFycmF5KTsKKyAgICAgICAgcmV0dXJuIGFycmF5OworICAgIH0KKworICAg
IG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
IHJldHVybiAwOworfQorCit2b2lkIEV4dGVuc2lvbnMzRE9wZW5HTEVTOjpkZWxldGVWZXJ0ZXhB
cnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQoreworICAgIGlmICghYXJyYXkpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
aWYgKG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMpCisgICAgICAgIG1fZ2xEZWxldGVWZXJ0ZXhB
cnJheXNPRVMoMSwgJmFycmF5KTsKKyAgICBlbHNlCisgICAgICAgIG1fY29udGV4dC0+c3ludGhl
c2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworfQorCitHQzNEYm9vbGVhbiBFeHRl
bnNpb25zM0RPcGVuR0xFUzo6aXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5
KQoreworICAgIGlmICghYXJyYXkpCisgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKworICAgIG1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKG1fZ2xJc1ZlcnRleEFycmF5
T0VTKQorICAgICAgICByZXR1cm4gbV9nbElzVmVydGV4QXJyYXlPRVMoYXJyYXkpOworCisgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIEV4dGVuc2lvbnMzRE9wZW5HTEVTOjpiaW5kVmVydGV4
QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKK3sKKyAgICBpZiAoIWFycmF5KQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IGlmIChtX2dsQmluZFZlcnRleEFycmF5T0VTKQorICAgICAgICBtX2dsQmluZFZlcnRleEFycmF5
T0VTKGFycmF5KTsKKyAgICBlbHNlCisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworfQorCisKK2Jvb2wgRXh0ZW5zaW9uczNET3BlbkdM
RVM6OnN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAobV9h
dmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKG5hbWUpKSB7CisgICAgICAgIGlmIChuYW1lID09
ICJHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdCIgJiYgIW1fc3VwcG9ydHNPRVN2ZXJ0ZXhBcnJh
eU9iamVjdCkgeworICAgICAgICAgICAgbV9nbEJpbmRWZXJ0ZXhBcnJheU9FUyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8UEZOR0xCSU5EVkVSVEVYQVJSQVlPRVNQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygi
Z2xCaW5kVmVydGV4QXJyYXlPRVMiKSk7CisgICAgICAgICAgICBtX2dsR2VuVmVydGV4QXJyYXlz
T0VTID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTEdFTlZFUlRFWEFSUkFZU09FU1BST0M+KGVnbEdl
dFByb2NBZGRyZXNzKCJnbEdlblZlcnRleEFycmF5c09FUyIpKTsKKyAgICAgICAgICAgIG1fZ2xE
ZWxldGVWZXJ0ZXhBcnJheXNPRVMgPSByZWludGVycHJldF9jYXN0PFBGTkdMREVMRVRFVkVSVEVY
QVJSQVlTT0VTUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsRGVsZXRlVmVydGV4QXJyYXlzT0VT
IikpOworICAgICAgICAgICAgbV9nbElzVmVydGV4QXJyYXlPRVMgPSByZWludGVycHJldF9jYXN0
PFBGTkdMSVNWRVJURVhBUlJBWU9FU1BST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbElzVmVydGV4
QXJyYXlPRVMiKSk7CisgICAgICAgICAgICBtX3N1cHBvcnRzT0VTdmVydGV4QXJyYXlPYmplY3Qg
PSB0cnVlOworICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gIkdMX0lNR19tdWx0aXNhbXBsZWRf
cmVuZGVyX3RvX3RleHR1cmUiICYmICFtX3N1cHBvcnRzSU1HTXVsdGlzYW1wbGVkUmVuZGVyVG9U
ZXh0dXJlKSB7CisgICAgICAgICAgICBtX2dsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBs
ZUlNRyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xGUkFNRUJVRkZFUlRFWFRVUkUyRE1VTFRJU0FN
UExFSU1HUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0
aXNhbXBsZUlNRyIpKTsKKyAgICAgICAgICAgIG1fZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlz
YW1wbGVJTUcgPSByZWludGVycHJldF9jYXN0PFBGTkdMUkVOREVSQlVGRkVSU1RPUkFHRU1VTFRJ
U0FNUExFSU1HUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsUmVuZGVyYnVmZmVyU3RvcmFnZU11
bHRpc2FtcGxlSU1HIikpOworICAgICAgICAgICAgbV9zdXBwb3J0c0lNR011bHRpc2FtcGxlZFJl
bmRlclRvVGV4dHVyZSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitTdHJpbmcgRXh0ZW5zaW9uczNET3BlbkdM
RVM6OmdldEV4dGVuc2lvbnMoKQoreworICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhHTF9FWFRFTlNJT05TKSkpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3Bl
bkdMRVMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNp
b25zM0RPcGVuR0xFUy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNjNDYwZjllMmFjZDNjNTQ5OTI1MmZiMTJjZWU4
NTY0NDEzYTY1NWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuaApAQCAtMCwwICsxLDcwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBFeHRlbnNpb25zM0RPcGVuR0xFU19oCisjZGVm
aW5lIEV4dGVuc2lvbnMzRE9wZW5HTEVTX2gKKworI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5H
TENvbW1vbi5oIgorCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjaW5jbHVkZSA8R0xFUzIvZ2wy
ZXh0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRXh0ZW5zaW9uczNET3BlbkdM
RVMgOiBwdWJsaWMgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uIHsKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIH5FeHRlbnNpb25zM0RPcGVuR0xFUygpOworCisgICAgdmlydHVhbCB2b2lkIGZyYW1lYnVm
ZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVk
IGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIHVuc2lnbmVkIGludCB0
ZXh0dXJlLCBpbnQgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcyk7CisgICAgdmlydHVhbCB2
b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRyh1bnNpZ25lZCBsb25nIHRhcmdl
dCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1
bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7CisKKyAgICB2aXJ0dWFs
IFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlVmVydGV4QXJyYXlPRVMoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCk7CisgICAgdmlydHVhbCBH
QzNEYm9vbGVhbiBpc1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpOworICAgIHZpcnR1
YWwgdm9pZCBiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCk7CisKK3Byb3RlY3Rl
ZDoKKyAgICAvLyBUaGlzIGNsYXNzIG9ubHkgbmVlZHMgdG8gYmUgaW5zdGFudGlhdGVkIGJ5IEdy
YXBoaWNzQ29udGV4dDNEIGltcGxlbWVudGF0aW9ucy4KKyAgICBmcmllbmQgY2xhc3MgR3JhcGhp
Y3NDb250ZXh0M0Q7CisgICAgRXh0ZW5zaW9uczNET3BlbkdMRVMoR3JhcGhpY3NDb250ZXh0M0Qq
KTsKKworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBTdHJpbmcmKTsK
KyAgICB2aXJ0dWFsIFN0cmluZyBnZXRFeHRlbnNpb25zKCk7CisKKyAgICBib29sIG1fc3VwcG9y
dHNPRVN2ZXJ0ZXhBcnJheU9iamVjdDsKKyAgICBib29sIG1fc3VwcG9ydHNJTUdNdWx0aXNhbXBs
ZWRSZW5kZXJUb1RleHR1cmU7CisKKyAgICBQRk5HTEZSQU1FQlVGRkVSVEVYVFVSRTJETVVMVElT
QU1QTEVJTUdQUk9DIG1fZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HOworICAg
IFBGTkdMUkVOREVSQlVGRkVSU1RPUkFHRU1VTFRJU0FNUExFSU1HUFJPQyBtX2dsUmVuZGVyYnVm
ZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HOworICAgIFBGTkdMQklORFZFUlRFWEFSUkFZT0VTUFJP
QyBtX2dsQmluZFZlcnRleEFycmF5T0VTOworICAgIFBGTkdMREVMRVRFVkVSVEVYQVJSQVlTT0VT
UFJPQyBtX2dsRGVsZXRlVmVydGV4QXJyYXlzT0VTOworICAgIFBGTkdMR0VOVkVSVEVYQVJSQVlT
T0VTUFJPQyBtX2dsR2VuVmVydGV4QXJyYXlzT0VTOworICAgIFBGTkdMSVNWRVJURVhBUlJBWU9F
U1BST0MgbV9nbElzVmVydGV4QXJyYXlPRVM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFeHRlbnNpb25zM0RPcGVuR0xFU19oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dDNET3BlbkdMLmNwcAppbmRleCAzZjQ3YjZlMjFlYjI1NTI0M2VlZWE0YmYzMTk4NTNhYmJm
NzZhMmRjLi4wYTIyOWZjYWM3ODc4M2FlM2Q5ODNmZjkyYjJkMzdiOGZkYThiNzViIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0M0RPcGVuR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCw2ICszNSwxMSBAQAogI2luY2x1ZGUgIklu
dFNpemUuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogCisjaW5jbHVkZSA8YWxnb3Jp
dGhtPgorI2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCiAjaWYgUExBVEZPUk0oTUFDKQogI2luY2x1
ZGUgPE9wZW5HTC9nbC5oPgogI2VsaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpIHx8
IFBMQVRGT1JNKFFUKQpAQCAtNDcsNiArNTMsMzIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
cmVhZFBpeGVsc0FuZENvbnZlcnRUb0JHUkFJZk5lY2Vzc2FyeShpbnQgeCwgaW50IHksIGludAog
ICAgIDo6Z2xSZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIEdMX0JHUkEsIEdMX1VOU0lH
TkVEX0lOVF84XzhfOF84X1JFViwgcGl4ZWxzKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dmFsaWRhdGVBdHRyaWJ1dGVzKCkKK3sKKyAgICBFeHRlbnNpb25zM0QqIGV4dGVuc2lvbnMg
PSBnZXRFeHRlbnNpb25zKCk7CisgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkgeworICAgICAgICBj
b25zdCBjaGFyKiBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24gPSBpc0dMRVMyQ29tcGxpYW50
KCkgPyAiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsIiA6ICJHTF9FWFRfcGFja2VkX2RlcHRo
X3N0ZW5jaWwiOworICAgICAgICBpZiAoZXh0ZW5zaW9ucy0+c3VwcG9ydHMocGFja2VkRGVwdGhT
dGVuY2lsRXh0ZW5zaW9uKSkgeworICAgICAgICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxl
ZChwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pOworICAgICAgICAgICAgLy8gRm9yY2UgZGVw
dGggaWYgc3RlbmNpbCBpcyB0cnVlLgorICAgICAgICAgICAgbV9hdHRycy5kZXB0aCA9IHRydWU7
CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9hdHRycy5zdGVuY2lsID0gZmFsc2U7Cisg
ICAgfQorICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgeworICAgICAgICBib29sIGlzVmFsaWRW
ZW5kb3IgPSB0cnVlOworICAgICAgICAvLyBDdXJyZW50bHkgaW4gTWFjIHdlIG9ubHkgdHVybiBv
biBhbnRpYWxpYXMgaWYgdmVuZG9yIGlzIE5WSURJQSwKKyAgICAgICAgLy8gb3IgaWYgQVRJIGFu
ZCBvbiAxMC43LjIgYW5kIGFib3ZlLgorICAgICAgICBjb25zdCBjaGFyKiB2ZW5kb3IgPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPig6OmdsR2V0U3RyaW5nKEdMX1ZFTkRPUikpOworICAg
ICAgICBpZiAoIXZlbmRvciB8fCAoIXN0ZDo6c3Ryc3RyKHZlbmRvciwgIk5WSURJQSIpICYmICEo
c3RkOjpzdHJzdHIodmVuZG9yLCAiQVRJIikgJiYgc3lzdGVtQWxsb3dzTXVsdGlzYW1wbGluZ09u
QVRJQ2FyZHMoKSkpKQorICAgICAgICAgICAgaXNWYWxpZFZlbmRvciA9IGZhbHNlOworICAgICAg
ICBpZiAoIWlzVmFsaWRWZW5kb3IgfHwgIWV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9BTkdMRV9m
cmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpIHx8IGlzR0xFUzJDb21wbGlhbnQoKSkKKyAgICAgICAg
ICAgIG1fYXR0cnMuYW50aWFsaWFzID0gZmFsc2U7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2Ft
cGxlIik7CisgICAgfQorfQorCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlRkJPcyhj
b25zdCBJbnRTaXplJiBzaXplKQogewogICAgIGNvbnN0IGludCB3aWR0aCA9IHNpemUud2lkdGgo
KTsKQEAgLTI1Niw2ICsyODgsMzMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJEZXB0
aChHQzNEY2xhbXBmIGRlcHRoKQogICAgIDo6Z2xDbGVhckRlcHRoKGRlcHRoKTsKIH0KIAorYm9v
bCBHcmFwaGljc0NvbnRleHQzRDo6c3lzdGVtQWxsb3dzTXVsdGlzYW1wbGluZ09uQVRJQ2FyZHMo
KSBjb25zdAoreworI2lmIFBMQVRGT1JNKE1BQykKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9T
Tk9XX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xJT04pCisgICAgcmV0dXJuIHRy
dWU7CisjZWxzZQorICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgc3RhdGljIFNJbnQz
MiB2ZXJzaW9uOworICAgIGlmICghdmVyc2lvbikgeworICAgICAgICBpZiAoR2VzdGFsdChnZXN0
YWx0U3lzdGVtVmVyc2lvbiwgJnZlcnNpb24pICE9IG5vRXJyKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTc3OTIyIGZvciBtb3JlIGRldGFpbHMKKyAgICByZXR1cm4gdmVyc2lvbiA+PSAw
eDEwNzI7CisjZW5kaWYgLy8gU05PV19MRU9QQVJEIGFuZCBMSU9OCisjZWxzZQorICAgIHJldHVy
biBmYWxzZTsKKyNlbmRpZiAvLyBQTEFURk9STShNQUMpCit9CisKK0V4dGVuc2lvbnMzRCogR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldEV4dGVuc2lvbnMoKQoreworICAgIGlmICghbV9leHRlbnNpb25z
KQorICAgICAgICBtX2V4dGVuc2lvbnMgPSBhZG9wdFB0cihuZXcgRXh0ZW5zaW9uczNET3BlbkdM
KHRoaXMpKTsKKyAgICByZXR1cm4gbV9leHRlbnNpb25zLmdldCgpOworfQorCiB9CiAKICNlbmRp
ZiAvLyBFTkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdM
Q29tbW9uLmNwcAppbmRleCA0MjlmYzUxYzkwNDZjNDRhNTBlZmVjZTEyOWNiZjMxZjYwZDk5NzVl
Li5mYWI0YTE4NzE1YThiZGVmMTkzMmY4MDdkODc2NTI4YTUwYjk0M2NkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RP
cGVuR0xDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKQEAgLTEsNiArMSw4IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogQ29weXJpZ2h0IChDKSAyMDEyIENoYW5nU2VvayBPaCA8c2hpdmFtaWRvd0BnbWFpbC5jb20+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDcg
KzMyLDEyIEBACiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogCisjaW5jbHVkZSAi
Q2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgorI2lmIFVTRShPUEVOR0xfRVNfMikKKyNpbmNsdWRl
ICJFeHRlbnNpb25zM0RPcGVuR0xFUy5oIgorI2Vsc2UKICNpbmNsdWRlICJFeHRlbnNpb25zM0RP
cGVuR0wuaCIKKyNlbmRpZgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUg
IkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCkBAIC00OSwzOSArNTYsMjQg
QEAKICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgVVNFKE9QRU5HTF9FU18yKQorI2luY2x1
ZGUgIk9wZW5HTEVTU2hpbXMuaCIKKyNlbGlmIFBMQVRGT1JNKE1BQykKICNpbmNsdWRlIDxPcGVu
R0wvZ2wuaD4KICNlbGlmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9S
TShRVCkKICNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgogI2VuZGlmCiAKLW5hbWVzcGFjZSBXZWJD
b3JlIHsKKyNpZiBQTEFURk9STShCTEFDS0JFUlJZKQorI2luY2x1ZGUgPEJsYWNrQmVycnlQbGF0
Zm9ybUxvZy5oPgorI2VuZGlmCiAKLXN0YXRpYyBib29sIHN5c3RlbUFsbG93c011bHRpc2FtcGxp
bmdPbkFUSUNhcmRzKCkKLXsKLSNpZiBQTEFURk9STShNQUMpCi0jaWYgIWRlZmluZWQoQlVJTERJ
TkdfT05fU05PV19MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MSU9OKQotICAgIHJl
dHVybiB0cnVlOwotI2Vsc2UKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIHN0YXRp
YyBTSW50MzIgdmVyc2lvbjsKLSAgICBpZiAoIXZlcnNpb24pIHsKLSAgICAgICAgaWYgKEdlc3Rh
bHQoZ2VzdGFsdFN5c3RlbVZlcnNpb24sICZ2ZXJzaW9uKSAhPSBub0VycikKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03NzkyMiBmb3IgbW9yZSBkZXRhaWxzCi0gICAgcmV0dXJuIHZlcnNp
b24gPj0gMHgxMDcyOwotI2VuZGlmIC8vIFNOT1dfTEVPUEFSRCBhbmQgTElPTgotI2Vsc2UKLSAg
ICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQotfQorbmFtZXNwYWNlIFdl
YkNvcmUgewogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZUF0dHJpYnV0ZXMoKQor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVEZXB0aFN0ZW5jaWwoY29uc3QgY2hhciog
cGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKQogewogICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5z
aW9ucyA9IGdldEV4dGVuc2lvbnMoKTsKICAgICBpZiAobV9hdHRycy5zdGVuY2lsKSB7Ci0gICAg
ICAgIGNvbnN0IGNoYXIqIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbiA9IGlzR0xFUzJDb21w
bGlhbnQoKSA/ICJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiIDogIkdMX0VYVF9wYWNrZWRf
ZGVwdGhfc3RlbmNpbCI7CiAgICAgICAgIGlmIChleHRlbnNpb25zLT5zdXBwb3J0cyhwYWNrZWRE
ZXB0aFN0ZW5jaWxFeHRlbnNpb24pKSB7CiAgICAgICAgICAgICBleHRlbnNpb25zLT5lbnN1cmVF
bmFibGVkKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbik7CiAgICAgICAgICAgICAvLyBGb3Jj
ZSBkZXB0aCBpZiBzdGVuY2lsIGlzIHRydWUuCkBAIC00MzksMzYgKzQzMSwxMSBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQog
ICAgIEFTU0VSVChzaGFkZXIpOwogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogCi0gICAgaW50
IEdMc2hhZGVyVHlwZTsKLSAgICBBTkdMRVNoYWRlclR5cGUgc2hhZGVyVHlwZTsKLQotICAgIGds
R2V0U2hhZGVyaXYoc2hhZGVyLCBTSEFERVJfVFlQRSwgJkdMc2hhZGVyVHlwZSk7Ci0gICAgCi0g
ICAgaWYgKEdMc2hhZGVyVHlwZSA9PSBWRVJURVhfU0hBREVSKQotICAgICAgICBzaGFkZXJUeXBl
ID0gU0hBREVSX1RZUEVfVkVSVEVYOwotICAgIGVsc2UgaWYgKEdMc2hhZGVyVHlwZSA9PSBGUkFH
TUVOVF9TSEFERVIpCi0gICAgICAgIHNoYWRlclR5cGUgPSBTSEFERVJfVFlQRV9GUkFHTUVOVDsK
LSAgICBlbHNlCi0gICAgICAgIHJldHVybjsgLy8gSW52YWxpZCBzaGFkZXIgdHlwZS4KLQotICAg
IEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRvciBy
ZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgU3RyaW5nIHRyYW5z
bGF0ZWRTaGFkZXJTb3VyY2UgPSBtX2V4dGVuc2lvbnMtPmdldFRyYW5zbGF0ZWRTaGFkZXJTb3Vy
Y2VBTkdMRShzaGFkZXIpOwogCi0gICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5l
bmQoKSkKKyAgICBpZiAoIXRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UubGVuZ3RoKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+c2Vjb25k
OwotCi0gICAgU3RyaW5nIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7Ci0gICAgU3RyaW5nIHNoYWRl
ckluZm9Mb2c7Ci0KLSAgICBib29sIGlzVmFsaWQgPSBtX2NvbXBpbGVyLnZhbGlkYXRlU2hhZGVy
U291cmNlKGVudHJ5LnNvdXJjZS51dGY4KCkuZGF0YSgpLCBzaGFkZXJUeXBlLCB0cmFuc2xhdGVk
U2hhZGVyU291cmNlLCBzaGFkZXJJbmZvTG9nKTsKLQotICAgIGVudHJ5LmxvZyA9IHNoYWRlcklu
Zm9Mb2c7Ci0gICAgZW50cnkuaXNWYWxpZCA9IGlzVmFsaWQ7Ci0KLSAgICBpZiAoIWlzVmFsaWQp
Ci0gICAgICAgIHJldHVybjsgLy8gU2hhZGVyIGRpZG4ndCB2YWxpZGF0ZSwgZG9uJ3QgbW92ZSBm
b3J3YXJkIHdpdGggY29tcGlsaW5nIHRyYW5zbGF0ZWQgc291cmNlLgotCiAgICAgaW50IHRyYW5z
bGF0ZWRTaGFkZXJMZW5ndGggPSB0cmFuc2xhdGVkU2hhZGVyU291cmNlLmxlbmd0aCgpOwogCiAg
ICAgY29uc3QgQ1N0cmluZyYgdHJhbnNsYXRlZFNoYWRlckNTdHJpbmcgPSB0cmFuc2xhdGVkU2hh
ZGVyU291cmNlLnV0ZjgoKTsKQEAgLTgwMSwxOCArNzY4LDYxIEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnJlYWRQaXhlbHMoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwg
R0MzRHNpCiAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQU1FQlVGRkVSLCBtX2Zibyk7CiAgICAgICAgIDo6Z2xGbHVzaCgpOwogICAgIH0KKyAgICAv
LyBDdXJyZW50bHkgb25seSBmb3JtYXQ9UkdCQSwgdHlwZT1VTlNJR05FRF9CWVRFIGlzIHN1cHBv
cnRlZCBieSB0aGUgc3BlY2lmaWNhdGlvbjogaHR0cDovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3Ry
eS93ZWJnbC9zcGVjcy9sYXRlc3QvCisgICAgLy8gSWYgdGhpcyBldmVyIGNoYW5nZXMsIHRoaXMg
Y29kZSB3aWxsIG5lZWQgdG8gYmUgdXBkYXRlZC4KKworICAgIC8vIENhbGN1bGF0ZSB0aGUgc3Ry
aWRlcyBvZiBvdXIgZGF0YSBhbmQgY2FudmFzCisgICAgdW5zaWduZWQgaW50IGZvcm1hdFNpemUg
PSA0OyAvLyBSR0JBIFVOU0lHTkVEX0JZVEUKKyAgICB1bnNpZ25lZCBpbnQgZGF0YVN0cmlkZSA9
IHdpZHRoICogZm9ybWF0U2l6ZTsKKyAgICB1bnNpZ25lZCBpbnQgY2FudmFzU3RyaWRlID0gbV9j
dXJyZW50V2lkdGggKiBmb3JtYXRTaXplOworCisgICAgLy8gSWYgd2UgYXJlIHVzaW5nIGEgcGFj
ayBhbGlnbm1lbnQgb2YgOCwgdGhlbiB3ZSBuZWVkIHRvIGFsaWduIG91ciBzdHJpZGVzIHRvIDgg
Ynl0ZSBib3VuZGFyaWVzCisgICAgLy8gU2VlOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtp
L0RhdGFfc3RydWN0dXJlX2FsaWdubWVudCAoY29tcHV0aW5nIHBhZGRpbmcpCisgICAgaW50IHBh
Y2tBbGlnbm1lbnQ7CisgICAgZ2xHZXRJbnRlZ2VydihHTF9QQUNLX0FMSUdOTUVOVCwgJnBhY2tB
bGlnbm1lbnQpOworICAgIGlmICg4ID09IHBhY2tBbGlnbm1lbnQpIHsKKyAgICAgICAgZGF0YVN0
cmlkZSA9IChkYXRhU3RyaWRlICsgNykgJiB+NzsKKyAgICAgICAgY2FudmFzU3RyaWRlID0gKGNh
bnZhc1N0cmlkZSArIDcpICYgfjc7CisgICAgfQorCisgICAgdW5zaWduZWQgY2hhciogY2FudmFz
RGF0YSA9IG5ldyB1bnNpZ25lZCBjaGFyW2NhbnZhc1N0cmlkZSAqIG1fY3VycmVudEhlaWdodF07
CisgICAgOjpnbFJlYWRQaXhlbHMoMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdo
dCwgZm9ybWF0LCB0eXBlLCBjYW52YXNEYXRhKTsKKworICAgIC8vIElmIHdlIGZhaWxlZCB0byBy
ZWFkIG91ciBjYW52YXMgZGF0YSBkdWUgdG8gYSBHTCBlcnJvciwgZG9uJ3QgY29udGludWUKKyAg
ICBpbnQgZXJyb3IgPSBnbEdldEVycm9yKCk7CisgICAgaWYgKEdMX05PX0VSUk9SICE9IGVycm9y
KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9yKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIENsZWFyIG91ciBkYXRhIGluIGNhc2Ugc29tZSBvZiBpdCBsaWVzIG91
dHNpZGUgdGhlIGJvdW5kcyBvZiBvdXIgY2FudmFzCisgICAgLy8gVE9ETzogZG9uJ3QgZG8gdGhp
cyBpZiBhbGwgb2YgdGhlIGRhdGEgbGllcyBpbnNpZGUgdGhlIGJvdW5kcyBvZiB0aGUgY2FudmFz
CisgICAgbWVtc2V0KGRhdGEsIDAsIGRhdGFTdHJpZGUgKiBoZWlnaHQpOworCisgICAgLy8gQ2Fs
Y3VsYXRlIHRoZSBpbnRlcnNlY3Rpb24gb2Ygb3VyIGNhbnZhcyBhbmQgZGF0YSBib3VuZHMKKyAg
ICBJbnRSZWN0IGRhdGFSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIEludFJlY3QgY2Fu
dmFzUmVjdCgwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KTsKKyAgICBJbnRS
ZWN0IG5vblplcm9EYXRhUmVjdCA9IGludGVyc2VjdGlvbihkYXRhUmVjdCwgY2FudmFzUmVjdCk7
CisKKyAgICB1bnNpZ25lZCBpbnQgeERhdGFPZmZzZXQgPSB4IDwgMCA/IC14ICogZm9ybWF0U2l6
ZSA6IDA7CisgICAgdW5zaWduZWQgaW50IHlEYXRhT2Zmc2V0ID0geSA8IDAgPyAteSAqIGRhdGFT
dHJpZGUgOiAwOworICAgIHVuc2lnbmVkIGludCB4Q2FudmFzT2Zmc2V0ID0gbm9uWmVyb0RhdGFS
ZWN0LngoKSAqIGZvcm1hdFNpemU7CisgICAgdW5zaWduZWQgaW50IHlDYW52YXNPZmZzZXQgPSBu
b25aZXJvRGF0YVJlY3QueSgpICogY2FudmFzU3RyaWRlOworICAgIHVuc2lnbmVkIGNoYXIqIGRz
dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihkYXRhKSArIHhEYXRhT2Zmc2V0ICsgeURh
dGFPZmZzZXQ7CisgICAgdW5zaWduZWQgY2hhciogc3JjID0gY2FudmFzRGF0YSArIHhDYW52YXNP
ZmZzZXQgKyB5Q2FudmFzT2Zmc2V0OworICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG5vblpl
cm9EYXRhUmVjdC5oZWlnaHQoKTsgcm93KyspIHsKKyAgICAgICAgbWVtY3B5KGRzdCwgc3JjLCBu
b25aZXJvRGF0YVJlY3Qud2lkdGgoKSAqIGZvcm1hdFNpemUpOworICAgICAgICBkc3QgKz0gZGF0
YVN0cmlkZTsKKyAgICAgICAgc3JjICs9IGNhbnZhc1N0cmlkZTsKKyAgICB9CisKKyAgICBkZWxl
dGUgW10gY2FudmFzRGF0YTsKICAgICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBmb3JtYXQsIHR5cGUsIGRhdGEpOworCiAgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1f
Ym91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKICAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZl
ckVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQotewot
ICAgIC8vIEZJWE1FOiBUaGlzIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiBkZXNrdG9wIE9wZW5HTC4g
V2UgbmVlZCB0byBoYXZlIGlmZGVmcyBmb3IgdGhlIGRpZmZlcmVudCBHTCB2YXJpYW50cy4KLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpzYW1wbGVDb3ZlcmFnZShHQzNEY2xhbXBmIHZhbHVlLCBHQzNE
Ym9vbGVhbiBpbnZlcnQpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CkBAIC0xMzg2LDEz
ICsxMzk2LDYgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6bGF5ZXJDb21wb3NpdGVkKCkgY29u
c3QKICAgICByZXR1cm4gbV9sYXllckNvbXBvc2l0ZWQ7CiB9CiAKLUV4dGVuc2lvbnMzRCogR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldEV4dGVuc2lvbnMoKQotewotICAgIGlmICghbV9leHRlbnNpb25z
KQotICAgICAgICBtX2V4dGVuc2lvbnMgPSBhZG9wdFB0cihuZXcgRXh0ZW5zaW9uczNET3BlbkdM
KHRoaXMpKTsKLSAgICByZXR1cm4gbV9leHRlbnNpb25zLmdldCgpOwotfQotCiB9CiAKICNlbmRp
ZiAvLyBFTkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5j
cHAKaW5kZXggYjFiZDFkYzU2Y2E2ZmQ5MjgzZGIyZGFlMTIzODNjZTIyZmM5NDMwMi4uZTg1M2Vh
NzllYTIzOGJjZjFkMWZjMGZlNWVkNDY3N2UzMzRmODcwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHQzRE9wZW5HTEVTLmNwcApAQCAtMSw2ICsxLDggQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQ2hhbmdTZW9rIE9oIDxzaGl2YW1pZG93QGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAo
QykgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksOTMgKzMxLDI5IEBACiAjaWYg
RU5BQkxFKFdFQkdMKQogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLQotI2luY2x1
ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTC5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTEVT
LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRl
ICJMYXllcldlYktpdFRocmVhZC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0KLSNp
ZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFFUKQotI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgi
Ci0jZW5kaWYKKyNpbmNsdWRlICJPcGVuR0xFU1NoaW1zLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVsc0FuZENvbnZlcnRUb0JHUkFJ
Zk5lY2Vzc2FyeShpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgdW5zaWduZWQg
Y2hhciogcGl4ZWxzKQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBp
bGVyKCkKIHsKLSAgICBjb25zdCBpbnQgdG90YWxCeXRlcyA9IG1fY3VycmVudFdpZHRoICogbV9j
dXJyZW50SGVpZ2h0ICogNDsKLSAgICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhlbHMpOwotICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgdG90YWxCeXRlczsgaSArPSA0KQotICAgICAgICBzdGQ6OnN3YXAocGl4ZWxzW2ldLCBw
aXhlbHNbaSArIDJdKTsgLy8gQ29udmVydCB0byBCR1JBLgorICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIDo6Z2xSZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKIH0KIAotYm9vbCBHcmFwaGlj
c0NvbnRleHQzRDo6cmVzaGFwZUZCT3MoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnJlYWRQaXhlbHNBbmRDb252ZXJ0VG9CR1JBSWZOZWNlc3NhcnkoaW50IHgs
IGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVuc2lnbmVkIGNoYXIqIHBpeGVscykKIHsK
LSAgICBjb25zdCBpbnQgd2lkdGggPSBzaXplLndpZHRoKCk7Ci0gICAgY29uc3QgaW50IGhlaWdo
dCA9IHNpemUuaGVpZ2h0KCk7Ci0gICAgR0x1aW50IGNvbG9yRm9ybWF0ID0gMCwgcGl4ZWxEYXRh
VHlwZSA9IDA7Ci0gICAgaWYgKG1fYXR0cnMuYWxwaGEpIHsKLSAgICAgICAgbV9pbnRlcm5hbENv
bG9yRm9ybWF0ID0gR0xfUkdCQTsKLSAgICAgICAgY29sb3JGb3JtYXQgPSBHTF9SR0JBOwotICAg
ICAgICBwaXhlbERhdGFUeXBlID0gR0xfVU5TSUdORURfQllURTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBtX2ludGVybmFsQ29sb3JGb3JtYXQgPSBHTF9SR0I7Ci0gICAgICAgIGNvbG9yRm9ybWF0
ID0gR0xfUkdCOwotICAgICAgICBwaXhlbERhdGFUeXBlID0gR0xfVU5TSUdORURfU0hPUlRfNV82
XzU7Ci0gICAgfQotCi0gICAgLy8gV2UgZG9uJ3QgYWxsb3cgdGhlIGxvZ2ljIHdoZXJlIHN0ZW5j
aWwgaXMgcmVxdWlyZWQgYW5kIGRlcHRoIGlzIG5vdC4KLSAgICAvLyBTZWUgR3JhcGhpY3NDb250
ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRlcy4KLSAgICBib29sIHN1cHBvcnRQYWNrZWREZXB0aFN0
ZW5jaWxCdWZmZXIgPSAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpICYmIGdldEV4
dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOwotCi0g
ICAgLy8gUmVzaXplIHJlZ3VsYXIgRkJPLgotICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSBmYWxz
ZTsKLSAgICBpZiAobV9ib3VuZEZCTyAhPSBtX2ZibykgewotICAgICAgICBtdXN0UmVzdG9yZUZC
TyA9IHRydWU7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgfQotCi0gICAgOjpnbEJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfMkQsIG1fdGV4dHVyZSk7Ci0gICAgOjpnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8y
RCwgMCwgbV9pbnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBjb2xvckZvcm1h
dCwgcGl4ZWxEYXRhVHlwZSwgMCk7Ci0gICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FU
VEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBtX3RleHR1cmUsIDApOwotCi0gICAgOjpnbEJpbmRU
ZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fY29tcG9zaXRvclRleHR1cmUpOwotICAgIDo6Z2xUZXhJ
bWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIDApOwotICAgIDo6Z2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKLQotICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgYW50
aWFsaWFzaW5nIHlldC4gU2VlIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZUF0dHJpYnV0ZXMu
Ci0gICAgQVNTRVJUKCFtX2F0dHJzLmFudGlhbGlhcyk7Ci0KLSAgICBpZiAobV9hdHRycy5zdGVu
Y2lsIHx8IG1fYXR0cnMuZGVwdGgpIHsKLSAgICAgICAgLy8gVXNlIGEgMjQgYml0IGRlcHRoIGJ1
ZmZlciB3aGVyZSB3ZSBrbm93IHdlIGhhdmUgaXQuCi0gICAgICAgIGlmIChzdXBwb3J0UGFja2Vk
RGVwdGhTdGVuY2lsQnVmZmVyKSB7Ci0gICAgICAgICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVY
VFVSRV8yRCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICAgICAgOjpnbFRleEltYWdl
MkQoR0xfVEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUwsIHdp
ZHRoLCBoZWlnaHQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMLCBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfSU5UXzI0XzgsIDApOwotICAgICAgICAgICAgaWYgKG1fYXR0
cnMuc3RlbmNpbCkKLSAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xf
RlJBTUVCVUZGRVIsIEdMX1NURU5DSUxfQVRUQUNITUVOVCwgR0xfVEVYVFVSRV8yRCwgbV9kZXB0
aFN0ZW5jaWxCdWZmZXIsIDApOwotICAgICAgICAgICAgaWYgKG1fYXR0cnMuZGVwdGgpCi0gICAg
ICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9E
RVBUSF9BVFRBQ0hNRU5ULCBHTF9URVhUVVJFXzJELCBtX2RlcHRoU3RlbmNpbEJ1ZmZlciwgMCk7
Ci0gICAgICAgICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAobV9hdHRycy5zdGVuY2lsKSB7Ci0gICAgICAgICAg
ICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJV
RkZFUiwgbV9zdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgICAgICAgICA6OmdsUmVuZGVyYnVmZmVy
U3RvcmFnZUVYVChHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBHTF9TVEVOQ0lMX0lO
REVYOCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVu
ZGVyYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250
ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZF
UiwgbV9zdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtX2F0
dHJzLmRlcHRoKSB7Ci0gICAgICAgICAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR3Jh
cGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9kZXB0aEJ1ZmZlcik7Ci0gICAgICAgICAg
ICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRF
UkJVRkZFUiwgR0xfREVQVEhfQ09NUE9ORU5UMTYsIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICAg
ICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6
RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5ULCBHcmFwaGlj
c0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX2RlcHRoQnVmZmVyKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpS
RU5ERVJCVUZGRVIsIDApOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChnbENoZWNrRnJhbWVi
dWZmZXJTdGF0dXNFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKLSAgICAgICAgLy8gRklYTUU6IGNs
ZWFudXAKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICA6OmdsUmVhZFBpeGVscyh4LCB5
LCB3aWR0aCwgaGVpZ2h0LCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBwaXhlbHMpOworICAg
IGludCB0b3RhbEJ5dGVzID0gd2lkdGggKiBoZWlnaHQgKiA0OworICAgIGlmIChpc0dMRVMyQ29t
cGxpYW50KCkpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9
IDQpCisgICAgICAgICAgICBzdGQ6OnN3YXAocGl4ZWxzW2ldLCBwaXhlbHNbaSArIDJdKTsgLy8g
Q29udmVydCB0byBCR1JBLgogICAgIH0KLQotICAgIHJldHVybiBtdXN0UmVzdG9yZUZCTzsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2Fy
eShjb25zdCBJbnRSZWN0JiByZWN0KQpAQCAtMTU2LDYgKzk0LDE3IEBAIGJvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
ZW51bSBpbnRlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnZhbGlkYXRlQXR0cmlidXRlcygpCit7CisgICAgdmFsaWRhdGVEZXB0aFN0ZW5jaWwoIkdMX09F
U19wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOworCisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7
CisgICAgICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IGdldEV4dGVuc2lvbnMoKTsKKyAg
ICAgICAgaWYgKCFleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfSU1HX211bHRpc2FtcGxlZF9yZW5k
ZXJfdG9fdGV4dHVyZSIpKQorICAgICAgICAgICAgbV9hdHRycy5hbnRpYWxpYXMgPSBmYWxzZTsK
KyAgICB9Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoUmFuZ2UoR0MzRGNsYW1w
ZiB6TmVhciwgR0MzRGNsYW1wZiB6RmFyKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwpA
QCAtMTY4LDYgKzExNywxOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhckRlcHRoKEdD
M0RjbGFtcGYgZGVwdGgpCiAgICAgOjpnbENsZWFyRGVwdGhmKGRlcHRoKTsKIH0KIAotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCitFeHRlbnNpb25zM0QqIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRF
eHRlbnNpb25zKCkKK3sKKyAgICBpZiAoIW1fZXh0ZW5zaW9ucykKKyAgICAgICAgbV9leHRlbnNp
b25zID0gYWRvcHRQdHIobmV3IEV4dGVuc2lvbnMzRE9wZW5HTEVTKHRoaXMpKTsKKyAgICByZXR1
cm4gbV9leHRlbnNpb25zLmdldCgpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpzeXN0
ZW1BbGxvd3NNdWx0aXNhbXBsaW5nT25BVElDYXJkcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZh
bHNlOyAvLyBub3QgYXBwbGljYWJsZQorfQorCit9CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGlj
c0NvbnRleHQzRFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dy
YXBoaWNzQ29udGV4dDNEUXQuY3BwCmluZGV4IDcyYjZiYjQzMDdiM2I2MWQzMmFlZDBkM2UzMDIx
ZjE1MjMyOTdlOGQuLjlmY2RkYzA0NTMwNjk5YmE5Y2EwY2UwM2E1YWZlZTdlOWI1M2RiZDAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29u
dGV4dDNEUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dy
YXBoaWNzQ29udGV4dDNEUXQuY3BwCkBAIC05OCw2ICs5OCwxMyBAQCBib29sIEdyYXBoaWNzQ29u
dGV4dDNEOjppc0dMRVMyQ29tcGxpYW50KCkgY29uc3QKICNlbmRpZgogfQogCisjaWYgIVVTRShP
UEVOR0xfRVNfMikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxl
cigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKyNlbmRpZgorCiBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCwgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKICAgICA6IG1fY29udGV4dChjb250ZXh0
KQogICAgICwgbV9ob3N0V2luZG93KGhvc3RXaW5kb3cpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151485</attachid>
            <date>2012-07-10 10:51:15 -0700</date>
            <delta_ts>2012-07-10 12:52:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90567-20120710135048.patch</filename>
            <type>text/plain</type>
            <size>69417</size>
            <attacher name="Joshua Netterfield">jnetterfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIyMjIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTQ2NmU1ZWIwZDgyY2I3
M2YyMmQwNmUxMjA5OTZkYjVkMDA5MjZmYy4uYjMxNGMyYzU5ZmQwMTMzOTVhNWJkMTMwZjU0NmZk
NmQ5MjZmNGQ3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk0IEBACisyMDEyLTA3LTA5ICBKb3No
dWEgTmV0dGVyZmllbGQgIDxqbmV0dGVyZmllbGRAcmltLmNvbT4KKyAgICAgICAgTWFrZSBHQzNE
IGFuZCBFM0QgbW9yZSBtYWludGFpbmFibGUgZm9yIEdMRVMgcGxhdGZvcm1zCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MDU2NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY2xlYW5zIHVw
IGNvZGUgZm9yIFdlYkdMIG9uIE9wZW5HTEVTIHBsYXRmb3JtcyB3aGljaCB1c2UgCisgICAgICAg
IEdyYXBoaWNzQ29udGV4dDNET3BlbkdMKiBhbmQgRXh0ZW5zaW9uczNET3BlbkdMKi4gQWx0aG91
Z2gKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wgd2FzIGFscmVhZHkgc3BsaXQgaW50
byBHcmFwaGljc0NvbnRleHQzRE9wZW5HTCwKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0RPcGVu
R0xDb21tb24sIGFuZCAgR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUywgdGhpcyBwYXRjaAorICAg
ICAgICBpcyBhbiBhdHRlbXB0IHRvIHJlZmFjdG9yIHRoaXMgY29kZSBpbiBhIHdheSB0aGF0IHdp
bGwgaGVscCBCbGFja0JlcnJ5IGFuZAorICAgICAgICBvdGhlciB0ZWFtcyBzdXBwb3J0IFdlYkdM
IG9uIG1vYmlsZSBwbGF0Zm9ybXMgd2l0aCBhcyBsaXR0bGUgdXNlIG9mCisgICAgICAgICIjSUYg
VVNFKE9QRU5HTF9FU18yKSIgaW4gY29tbW9uIGNvZGUgYXMgcG9zc2libGUuIEFsc28gaW5jbHVk
ZWQgaXMgdGhlCisgICAgICAgIHNlcGFyYXRpb24gb2YgRXh0ZW5zaW9uczNET3BlbkdMIGludG8g
RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLAorICAgICAgICBFeHRlbnNpb25zM0RPcGVuR0wsIGFu
ZCBFeHRlbnNpb25zM0RPcGVuR0xFUyBhcyB3ZWxsIGFzIHRoZSBpbnRyb2R1Y3Rpb24KKyAgICAg
ICAgb2YgT3BlbkdMRVNTaGltcy4KKworICAgICAgICBUaGlzIHBhdGNoIGlzIGNyZWF0ZWQgaW4g
bGFyZ2UgcGFydCBieSBKb25hdGhhbiBGZWxkc3RlaW4uCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
OiBubyBuZXcgYmVoYXZpb3VyLgorCisgICAgICAgICogUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtl
OiBSZWNvZ25pemUgQmxhY2tCZXJyeSBhcyBPUEVOR0wgRVMsIGFkZCBuZXcgZmlsZXMgdG8gYnVp
bGQKKyAgICAgICAgKiBUYXJnZXQucHJpOiBBZGQgbmV3IEV4dGVuc2lvbnMzRE9wZW5HTCogdG8g
V2ViR0wgYnVpbGRzCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
M0QuaDogQWRkIHZhbGlkYXRlRGVwdGhTdGVuY2lsLCBtYWtlIHN5c3RlbUFsbG93c011bHRpc2Ft
cGxpbmdPbkFUSUNhcmRzIGEgYSBtZW1iZXIgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9PcGVuR0xFU1NoaW1zLmg6IEFkZGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwOiBN
b3ZlIGNvZGUgdG8gRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uIHdoZXJlIHBvc3NpYmxlCisgICAg
ICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0w6OkV4dGVuc2lvbnMzRE9wZW5HTCk6IFJl
ZmxlY3QgdGhhdCBpdCBpcyBub3cgaW5oZXJpdHMgRXh0ZW5zaW9uczNEQ29tbW9uCisgICAgICAg
IChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0w6OnN1cHBvcnRzRXh0ZW5zaW9uKTogQ29udGFp
bnMgT3BlbkdMIHNwZWNpZmljIGNvZGUgZnJvbSBzdXBwb3J0cworICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0w6OmdldEV4dGVuc2lvbnMpOiBS
ZXR1cm5zIGEgbGlzdCBvZiBleHRlbnNpb25zCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oOiBSZW1vdmUgZnVuY3Rpb25zIG5vdyBpbiBFeHRl
bnNpb25zM0RPcGVuR0xDb21tb24KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRXh0ZW5z
aW9uczNET3BlbkdMKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6RXh0ZW5zaW9uczNET3BlbkdM
Q29tbW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6fkV4
dGVuc2lvbnMzRE9wZW5HTENvbW1vbik6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RP
cGVuR0xDb21tb246OnN1cHBvcnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbjo6ZW5zdXJlRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25z
M0RPcGVuR0xDb21tb246OmlzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25z
M0RPcGVuR0xDb21tb246OmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIpOgorICAgICAgICAoV2Vi
Q29yZTo6RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjpnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNl
QU5HTEUpOiBFeGlzdGVkIGJlZm9yZSwgYnV0IGRpZCBub3RoaW5nLiBOb3cgZG9lcyB3aGF0IGlz
IHNheXMgaXQgZG9lcy4KKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTENvbW1v
bjo6aW5pdGlhbGl6ZUF2YWlsYWJsZUV4dGVuc2lvbnMpOiBNb3ZlZCBmcm9tIEV4dGVuc2lvbnMz
RE9wZW5HTDo6c3VwcG9ydHMKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0
ZW5zaW9uczNET3BlbkdMQ29tbW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMRVM6
OkV4dGVuc2lvbnMzRE9wZW5HTEVTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9w
ZW5HTEVTOjp+RXh0ZW5zaW9uczNET3BlbkdMRVMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5z
aW9uczNET3BlbkdMRVM6OmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcpOgorICAg
ICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMRVM6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VN
dWx0aXNhbXBsZUlNRyk6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0xFUzo6
Y3JlYXRlVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3Bl
bkdMRVM6OmRlbGV0ZVZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lv
bnMzRE9wZW5HTEVTOjppc1ZlcnRleEFycmF5T0VTKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVu
c2lvbnMzRE9wZW5HTEVTOjpiaW5kVmVydGV4QXJyYXlPRVMpOgorICAgICAgICAoV2ViQ29yZTo6
RXh0ZW5zaW9uczNET3BlbkdMRVM6OnN1cHBvcnRzRXh0ZW5zaW9uKTogQ29udGFpbnMgT3BlbkdM
RVMgc3BlY2lmaWMgY29kZSBmcm9tIHN1cHBvcnRzCisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNp
b25zM0RPcGVuR0xFUzo6Z2V0RXh0ZW5zaW9ucyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaC4KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoRXh0ZW5zaW9uczNET3BlbkdMRVMpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVBdHRyaWJ1dGVzKToK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OnJlbmRlcmJ1ZmZlclN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OnRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN5
c3RlbUFsbG93c011bHRpc2FtcGxpbmdPbkFUSUNhcmRzKTogTm93IGEgbWVtYmVyIGZ1bmN0aW9u
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEV4dGVuc2lvbnMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5H
TENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRh
dGVEZXB0aFN0ZW5jaWwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNs
ZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc1RleHR1cmUpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
bGluZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpsaW5rUHJv
Z3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGl4ZWxTdG9yZWkp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBvbHlnb25PZmZzZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUJ1ZmZlcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVsc0FuZENv
bnZlcnRUb0JHUkFJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6dmFsaWRhdGVBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEV4dGVuc2lvbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN5c3RlbUFsbG93c011bHRpc2FtcGxpbmdPbkFUSUNh
cmRzKTogTm93IGEgbWVtYmVyIGZ1bmN0aW9uLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKToKKwog
MjAxMi0wNy0xMCAgSHVhbmcgRG9uZ3N1bmcgIDxsdXh0ZWxsYUBjb21wYW55MTAwLm5ldD4KIAog
ICAgICAgICBEb24ndCBkZXN0cm95IHRoZSBkZWNvZGVkIGRhdGEgb2YgYW4gaW1hZ2UgaWYgV2Vi
S2l0IGlzIGFib3V0IHRvIHJlbmRlciB0aGUgaW1hZ2UuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQppbmRleCBhYjFlNDU5NzVjMGRlNjdiNTllODY2NzA2ZDZmZDRiMThiYTAwM2U3Li4zNzgx
NzI3YWE2YTBlNGUxNTRlOWViZjc2MTllYTlmMmNlM2M4NDNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0KQEAgLTYwNTQsNiArNjA1NCw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvT3BlbkdMU2hpbXMuY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9PcGVuR0xTaGltcy5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcCBcCisJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5H
TENvbW1vbi5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9F
eHRlbnNpb25zM0RPcGVuR0wuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlIGIvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1CbGFja0JlcnJ5LmNtYWtlCmluZGV4IDUxNjlhNWRkNTk3M2M3
YjBlMjg4ZGEyMTIzMTk0NzE4NjUzMGVhODEuLjU4N2VkZTNkMDY5MDgwMzczYmVkMmEzMTIyNTJh
NTU3OTIxZGNmY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQmxhY2tCZXJy
eS5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUJsYWNrQmVycnkuY21ha2UKQEAg
LTIxOCw2ICsyMTgsNyBAQCBpZiAoRU5BQkxFX1JFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQogRU5E
SUYgKCkKIAogaWYgKEVOQUJMRV9XRUJHTCkKKyAgICBBRERfREVGSU5JVElPTlMgKC1EV1RGX1VT
RV9PUEVOR0xfRVNfMj0xKQogICAgIExJU1QoQVBQRU5EIFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RP
UklFUwogICAgICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1IgogICAg
ICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsIgpAQCAtMjI1LDYg
KzIyNiwxMSBAQCBpZiAoRU5BQkxFX1dFQkdMKQogICAgIExJU1QoQVBQRU5EIFdlYkNvcmVfU09V
UkNFUwogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0RyYXdpbmdCdWZmZXJC
bGFja0JlcnJ5LmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L0dyYXBo
aWNzQ29udGV4dDNEQmxhY2tCZXJyeS5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAorICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAKKyAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKKyAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmNwcAorICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuY3BwCiAg
ICAgKQogRU5ESUYgKCkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBi
L1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggMGMxNDAwZmRmNWQ1MTg3ZjNhMjYwNmJi
Y2IxZmNhM2MxZWZlMTM0NS4uYjkxNDk3NTUzZjRhMGU0YjkzNGNjNWFmNGM0YTYyNzUyMDYzMmY1
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9UYXJnZXQucHJpCkBAIC0zOTYwLDE2ICszOTYwLDMwIEBAIGNvbnRhaW5zKERFRklORVMs
IFdURl9VU0VfM0RfR1JBUEhJQ1M9MSkgewogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQzRC5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2lu
Z0J1ZmZlci5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvcXQvRHJhd2luZ0J1
ZmZlclF0LmNwcCBcCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25z
M0RPcGVuR0wuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dDNET3BlbkdMQ29tbW9uLmNwcCBcCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKIAotICAgIGNvbnRhaW5z
KFFUX0NPTkZJRywgb3BlbmdsZXMyKSB7Ci0gICAgICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCi0gICAgfSBlbHNlIHsK
LSAgICAgICAgU09VUkNFUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0M0RPcGVuR0wuY3BwCisgICAgSU5DTFVERVBBVEggKz0gJCRQV0QvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1CisKKyAgICBjb250YWlucyhRVF9DT05GSUcsIG9wZW5nbCkgfCBjb250YWlucyhRVF9D
T05GSUcsIG9wZW5nbGVzMikgeworICAgICAgICAhY29udGFpbnMoUVRfQ09ORklHLCBvcGVuZ2xl
czIpIHsKKyAgICAgICAgICAgIFNPVVJDRVMgKz0gXAorICAgICAgICAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcCBcCisgICAgICAgICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcAorICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgU09VUkNFUyArPSBcCisgICAgICAgICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAgXAor
ICAgICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5H
TEVTLmNwcAorICAgICAgICB9CisKKyAgICAgICAgSEVBREVSUyArPSBwbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmgKKworICAgICAgICBTT1VSQ0VTICs9IFwKKyAg
ICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21t
b24uY3BwIFwKKyAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHQzRE9wZW5HTENvbW1vbi5jcHAKICAgICB9CiAKICAgICBBTkdMRV9ESVIgPSAkJHJlcGxh
Y2UoUFdELCAiV2ViQ29yZSIsICJUaGlyZFBhcnR5L0FOR0xFIikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRl
eCA1MGVmZTEwZWNjM2VlZTk4Y2Y4YWFkYjEzMWUwYWY2Y2YxMWNkZWFiLi5jZmI4MmExNjcyZDRh
MWEzMjYzYzUzYWQyZjQyMzU3ODQ3ODJlNGM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zODA4LDYg
KzM4MDgsNyBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJUaWxlZExh
eWVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJUaWxlZExheWVy
Lm1tJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNE
T3BlbkdMLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVu
c2lvbnMzRE9wZW5HTENvbW1vbi5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNw
cCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKaW5kZXggNzc1ZjQyNWNlZTA3OGRlYzU5Y2I4NGUwNmRhYWVhNGNmMjFlYzRiNS4uYzEyNmM5
NWFmOWM5OTU3ODFhNmEwYzFlMzQyNDc0ZjI0NDg1YWM1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTE5MSw2ICsxMTkxLDgg
QEAKIAkJNDQ5QjE5RjUwRkE3MkVDRTAwMTVDQTRBIC8qIEhUTUxQYXJzZXJRdWlya3MuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0OUIxOUYzMEZBNzJF
Q0UwMDE1Q0E0QSAvKiBIVE1MUGFyc2VyUXVpcmtzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDRBMjhBQUMxMkRGQjhBQzAwQUU5MjNCIC8qIE1h
dGhNTEVsZW1lbnRGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0NEEyOEFBQjEyREZCOEFDMDBBRTkyM0IgLyogTWF0aE1MRWxlbWVudEZhY3Rv
cnkuaCAqLzsgfTsKIAkJNDRBMjhBQUYxMkRGQjhCRjAwQUU5MjNCIC8qIE1hdGhNTE5hbWVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NEEyOEFBRTEy
REZCOEJGMDBBRTkyM0IgLyogTWF0aE1MTmFtZXMuaCAqLzsgfTsKKwkJNDREQUI1QjExNUE2MjM1
ODAwOTdDMUU0IC8qIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NERBQjVBRjE1QTYyMzU4MDA5N0MxRTQg
LyogRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcCAqLzsgfTsKKwkJNDREQUI1QjIxNUE2MjM1
ODAwOTdDMUU0IC8qIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDREQUI1QjAxNUE2MjM1ODAwOTdDMUU0IC8q
IEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oICovOyB9OwogCQk0NTA5OUM0MTEzNzBBNzgwMDA1
OEQ1MTMgLyogSWNvblVSTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0NTA5OUM0MDEzNzBBNzgwMDA1OEQ1MTMgLyogSWNvblVSTC5jcHAgKi87IH07
CiAJCTQ1MENFQkYwMTUwNzNCQkUwMDJCQjE0OSAvKiBMYWJlbGFibGVFbGVtZW50LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1MENFQkVFMTUwNzNC
QkUwMDJCQjE0OSAvKiBMYWJlbGFibGVFbGVtZW50LmNwcCAqLzsgfTsKIAkJNDUwQ0VCRjExNTA3
M0JCRTAwMkJCMTQ5IC8qIExhYmVsYWJsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1MENFQkVGMTUwNzNCQkUwMDJCQjE0OSAvKiBMYWJl
bGFibGVFbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTgyNTIsNiArODI1NCw4IEBACiAJCTQ0QTI4QUFFMTJERkI4QkYwMEFFOTIzQiAv
KiBNYXRoTUxOYW1lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXRoTUxO
YW1lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NEQ4REE5ODEzOTU0NUJFMDAz
MzdCNzUgLyogU1ZHTVBhdGhFbGVtZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTVkdN
UGF0aEVsZW1lbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NEQ4REE5QTEz
OTU0NUNEMDAzMzdCNzUgLyogU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuaWRsICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNDREQUI1QUYxNUE2MjM1ODAwOTdDMUU0IC8qIEV4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFeHRl
bnNpb25zM0RPcGVuR0xDb21tb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
NERBQjVCMDE1QTYyMzU4MDA5N0MxRTQgLyogRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NTA5OUM0MDEzNzBBNzgwMDA1OEQ1MTMg
LyogSWNvblVSTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJY29u
VVJMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDUwQ0VCRUUxNTA3M0JCRTAw
MkJCMTQ5IC8qIExhYmVsYWJsZUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gTGFiZWxhYmxlRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTQ1MENFQkVGMTUwNzNCQkUwMDJCQjE0OSAvKiBMYWJlbGFibGVFbGVtZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExhYmVsYWJsZUVsZW1lbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxNjYxLDYgKzIxNjY1LDggQEAKIAkJRkJDMjIwREQx
MjM3RkJFQjAwQkNGNzg4IC8qIG9wZW5nbCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCisJCQkJNDREQUI1QUYxNUE2MjM1ODAwOTdDMUU0IC8qIEV4dGVuc2lvbnMz
RE9wZW5HTENvbW1vbi5jcHAgKi8sCisJCQkJNDREQUI1QjAxNUE2MjM1ODAwOTdDMUU0IC8qIEV4
dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oICovLAogCQkJCTZFNjdEMkE0MTI4MEU4QTQwMDg3NThG
NyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuY3BwICovLAogCQkJCTZFNjdEMkE1MTI4MEU4QTQwMDg3
NThGNyAvKiBFeHRlbnNpb25zM0RPcGVuR0wuaCAqLywKIAkJCQlGQkMyMjBERTEyMzdGQkVCMDBC
Q0Y3ODggLyogR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwICovLApAQCAtMjUxOTYsNiArMjUy
MDIsNyBAQAogCQkJCTc2MkYxRUQ3MTU5RDk2MEEwMDc0MDhGMiAvKiBIVE1MRGlhbG9nRWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzY4MDhCNTAxNTlEQURGQTAwMkI1MjMzIC8qIEpTSFRN
TERpYWxvZ0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFGQUZCRjE5MTVBNUZBNzQwMDA4
M0EyMCAvKiBVVElVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ0REFCNUIyMTVBNjIz
NTgwMDk3QzFFNCAvKiBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24uaCBpbiBIZWFkZXJzICovLAog
CQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpA
QCAtMjgyNTMsNiArMjgyNjAsNyBAQAogCQkJCTc2MkYxRURCMTU5RDk2OEEwMDc0MDhGMiAvKiBI
VE1MRGlhbG9nRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3NjgwOEI0RjE1OURBREZB
MDAyQjUyMzMgLyogSlNIVE1MRGlhbG9nRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
RkFGQkYxODE1QTVGQTZFMDAwODNBMjAgLyogVVRJVXRpbGl0aWVzLm1tIGluIFNvdXJjZXMgKi8s
CisJCQkJNDREQUI1QjExNUE2MjM1ODAwOTdDMUU0IC8qIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1v
bi5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCmluZGV4IGRiZDlkZmVkZTAxM2E0Y2FmMzMyNDYz
YWQzMmZjNGUxNTI4MjY0NjcuLjUxZWVmMDljNWViZDE0N2Y1OTg4YjJjOTQ5MjllOTkyNDBiNWZl
MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dDNELmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0M0QuaApAQCAtMjAsNyArMjAsNyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAj
aWZuZGVmIEdyYXBoaWNzQ29udGV4dDNEX2gKQEAgLTkxLDE0ICs5MSwxMiBAQCBjb25zdCBQbGF0
Zm9ybTNET2JqZWN0IE51bGxQbGF0Zm9ybTNET2JqZWN0ID0gMDsKICNpbmNsdWRlIDxDb3JlR3Jh
cGhpY3MvQ0dDb250ZXh0Lmg+CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCi0j
aW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xh
c3MgRHJhd2luZ0J1ZmZlcjsKIGNsYXNzIEV4dGVuc2lvbnMzRDsKLSNpZiBQTEFURk9STShNQUMp
IHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkKKyNpZiBV
U0UoT1BFTkdMX0VTXzIpCitjbGFzcyBFeHRlbnNpb25zM0RPcGVuR0xFUzsKKyNlbHNlCiBjbGFz
cyBFeHRlbnNpb25zM0RPcGVuR0w7CiAjZW5kaWYKICNpZiBQTEFURk9STShRVCkKQEAgLTkyNCw2
ICs5MjIsNyBAQCBwdWJsaWM6CiAgICAgLy8gaW4gcGFydGljdWxhciBzdGVuY2lsIGFuZCBhbnRp
YWxpYXMsIGFuZCBkZXRlcm1pbmUgd2hpY2ggY291bGQgb3IKICAgICAvLyBjb3VsZCBub3QgYmUg
aG9ub3JlZCBiYXNlZCBvbiB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBPcGVuR0wKICAgICAvLyBp
bXBsZW1lbnRhdGlvbi4KKyAgICB2b2lkIHZhbGlkYXRlRGVwdGhTdGVuY2lsKGNvbnN0IGNoYXIq
IHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbik7CiAgICAgdm9pZCB2YWxpZGF0ZUF0dHJpYnV0
ZXMoKTsKIAogICAgIC8vIFJlYWQgcmVuZGVyaW5nIHJlc3VsdHMgaW50byBhIHBpeGVsIGFycmF5
IHdpdGggdGhlIHNhbWUgZm9ybWF0IGFzIHRoZQpAQCAtOTU1LDE2ICs5NTQsMzAgQEAgcHVibGlj
OgogICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+IG1fc2hh
ZGVyU291cmNlTWFwOwogCiAgICAgQU5HTEVXZWJLaXRCcmlkZ2UgbV9jb21waWxlcjsKKyNlbmRp
ZgogCisjaWYgUExBVEZPUk0oUVQpICYmIGRlZmluZWQoUVRfT1BFTkdMX0VTXzIpCisgICAgZnJp
ZW5kIGNsYXNzIEV4dGVuc2lvbnMzRFF0OworICAgIE93blB0cjxFeHRlbnNpb25zM0RRdD4gbV9l
eHRlbnNpb25zOworI2VsaWYgUExBVEZPUk0oQkxBQ0tCRVJSWSkKKyAgICBmcmllbmQgY2xhc3Mg
RXh0ZW5zaW9uczNET3BlbkdMRVM7CisgICAgT3duUHRyPEV4dGVuc2lvbnMzRE9wZW5HTEVTPiBt
X2V4dGVuc2lvbnM7CisjZWxpZiAhUExBVEZPUk0oQ0hST01JVU0pCiAgICAgZnJpZW5kIGNsYXNz
IEV4dGVuc2lvbnMzRE9wZW5HTDsKICAgICBPd25QdHI8RXh0ZW5zaW9uczNET3BlbkdMPiBtX2V4
dGVuc2lvbnM7CisjZW5kaWYKKyAgICBmcmllbmQgY2xhc3MgRXh0ZW5zaW9uczNET3BlbkdMQ29t
bW9uOwogCiAgICAgQXR0cmlidXRlcyBtX2F0dHJzOwogICAgIFZlY3RvcjxWZWN0b3I8ZmxvYXQ+
ID4gbV92ZXJ0ZXhBcnJheTsKIAotICAgIEdDM0R1aW50IG1fdGV4dHVyZSwgbV9jb21wb3NpdG9y
VGV4dHVyZTsKKyAgICBHQzNEdWludCBtX3RleHR1cmU7CisjaWYgIVBMQVRGT1JNKEJMQUNLQkVS
UlkpCisgICAgR0MzRHVpbnQgbV9jb21wb3NpdG9yVGV4dHVyZTsKKyNlbmRpZgogICAgIEdDM0R1
aW50IG1fZmJvOwotI2lmIFVTRShPUEVOR0xfRVNfMikKKworI2lmICFQTEFURk9STShCTEFDS0JF
UlJZKQogICAgIEdDM0R1aW50IG1fZGVwdGhCdWZmZXI7CiAgICAgR0MzRHVpbnQgbV9zdGVuY2ls
QnVmZmVyOwogI2VuZGlmCkBAIC05ODUsMTAgKzk5OCwxMSBAQCBwdWJsaWM6CiAKICAgICAvLyBF
cnJvcnMgcmFpc2VkIGJ5IHN5bnRoZXNpemVHTEVycm9yKCkuCiAgICAgTGlzdEhhc2hTZXQ8R0Mz
RGVudW0+IG1fc3ludGhldGljRXJyb3JzOwotI2VuZGlmCiAKICAgICBmcmllbmQgY2xhc3MgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOwogICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU+IG1fcHJpdmF0ZTsKKworICAgIGJvb2wgc3lzdGVtQWxsb3dzTXVsdGlzYW1wbGluZ09uQVRJ
Q2FyZHMoKSBjb25zdDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL09wZW5HTEVTU2hpbXMuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL09wZW5HTEVTU2hpbXMuaAppbmRleCBlNjlkZTI5
YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi4wNTJhZjVlNDVjMDEzZjBkZTJkMzBi
MmRiZmZmODdhNTdiNWEwMTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9PcGVuR0xFU1NoaW1zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvT3BlbkdMRVNTaGltcy5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIE9wZW5HTEVTU2hpbXNfaAorI2RlZmluZSBPcGVuR0xFU1NoaW1zX2gK
KworI2lmIFBMQVRGT1JNKEJMQUNLQkVSUlkpCisjZGVmaW5lIGdsQmluZEZyYW1lYnVmZmVyRVhU
IGdsQmluZEZyYW1lYnVmZmVyCisjZGVmaW5lIGdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQgZ2xG
cmFtZWJ1ZmZlclRleHR1cmUyRAorI2RlZmluZSBnbEJpbmRSZW5kZXJidWZmZXJFWFQgZ2xCaW5k
UmVuZGVyYnVmZmVyCisjZGVmaW5lIGdsUmVuZGVyYnVmZmVyU3RvcmFnZUVYVCBnbFJlbmRlcmJ1
ZmZlclN0b3JhZ2UKKyNkZWZpbmUgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVCBnbEZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyCisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9FWFQgR0xfUkVOREVS
QlVGRkVSCisjZGVmaW5lIEdMX1NURU5DSUxfQVRUQUNITUVOVF9FWFQgR0xfU1RFTkNJTF9BVFRB
Q0hNRU5UCisjZGVmaW5lIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVCBnbENoZWNrRnJhbWVi
dWZmZXJTdGF0dXMKKyNkZWZpbmUgZ2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQgZ2xEZWxldGVGcmFt
ZWJ1ZmZlcnMKKyNkZWZpbmUgZ2xEZWxldGVSZW5kZXJidWZmZXJzRVhUIGdsRGVsZXRlUmVuZGVy
YnVmZmVycworI2RlZmluZSBnbEdlblJlbmRlcmJ1ZmZlcnNFWFQgZ2xHZW5SZW5kZXJidWZmZXJz
CisjZGVmaW5lIGdsR2VuRnJhbWVidWZmZXJzRVhUIGdsR2VuRnJhbWVidWZmZXJzCisjZGVmaW5l
IGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXZFWFQgZ2xHZXRGcmFtZWJ1ZmZl
ckF0dGFjaG1lbnRQYXJhbWV0ZXJpdgorI2RlZmluZSBnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRl
cml2RVhUIGdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYKKyNkZWZpbmUgZ2xJc1JlbmRlcmJ1
ZmZlckVYVCBnbElzUmVuZGVyYnVmZmVyCisjZGVmaW5lIGdsSXNGcmFtZWJ1ZmZlckVYVCBnbElz
RnJhbWVidWZmZXIKKyNkZWZpbmUgZ2xHZW5lcmF0ZU1pcG1hcEVYVCBnbEdlbmVyYXRlTWlwbWFw
CisjZGVmaW5lIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCBHTF9DT0xPUl9BVFRBQ0hNRU5UMAor
I2RlZmluZSBHTF9ERVBUSF9BVFRBQ0hNRU5UX0VYVCBHTF9ERVBUSF9BVFRBQ0hNRU5UCisjZGVm
aW5lIEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFX0VYVCBHTF9GUkFNRUJVRkZFUl9DT01QTEVURQor
I2RlZmluZSBHTF9GUkFNRUJVRkZFUl9FWFQgR0xfRlJBTUVCVUZGRVIKKyNkZWZpbmUgR0xfREVQ
VEgyNF9TVEVOQ0lMOF9FWFQgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMKKyNkZWZpbmUgR0xfUkdC
QTggR0xfUkdCQThfT0VTCisjZGVmaW5lIEdMX1JHQjggR0xfUkdCOF9PRVMKKyNkZWZpbmUgR0xf
UkVBRF9GUkFNRUJVRkZFUl9FWFQgMHg4Q0E4CisjZGVmaW5lIEdMX0RSQVdfRlJBTUVCVUZGRVJf
RVhUIDB4OENBOQorI2RlZmluZSBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01VTFRJU0FNUExFX0VY
VCAweDkxMzQKKyNkZWZpbmUgR0xfTUFYX1NBTVBMRVNfRVhUIDB4OEQ1NworI2VuZGlmIC8vIFBM
QVRGT1JNKEJMQUNLQkVSUlkpCisKKyNlbmRpZiAvLyBPcGVuR0xFU1NoaW1zX2gKKwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250
ZXh0M0RDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
cmFwaGljc0NvbnRleHQzRENhaXJvLmNwcAppbmRleCA2YmI4NWMzODNiNzE5OTMzMGFmZDk0ZGZj
YmI4ODg5OGY2N2JhZDBkLi42MmRhMWExNmM5MTFiNDA0YWNhMDM3NTM0MTY3M2YyNzY4MTkyNWY2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHQzRENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcApAQCAtMzMsNiArMzMsNyBAQAog
I2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZS5oIgogI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKICNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4
dENhaXJvLmgiCiAjaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKQEAgLTE0Niw2ICsxNDcsMTEgQEAg
R3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCgpCiAgICAgOjpnbERlbGV0ZUZy
YW1lYnVmZmVyc0VYVCgxLCAmbV9mYm8pOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpy
ZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKIGJv
b2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFnZSogaW1hZ2UsIHVuc2lnbmVk
IGludCBmb3JtYXQsIHVuc2lnbmVkIGludCB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJv
b2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsIFZlY3Rvcjx1aW50OF90PiYgb3V0cHV0VmVj
dG9yKQogewogICAgIGlmICghaW1hZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzQ29udGV4dDNEQ2x1dHRlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzQ29udGV4dDNEQ2x1
dHRlci5jcHAKaW5kZXggZGNlMTI0YTJjZTMxNWIxZTI3ZTM4OTA4Y2IzYTZlY2RiYTFlMTQzMS4u
NGI0YjBlMzlkYmFlNTE2M2EwYTE1MTkxNzAxZWU4MjJjZGExMWMwNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0NvbnRleHQzRENs
dXR0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIv
R3JhcGhpY3NDb250ZXh0M0RDbHV0dGVyLmNwcApAQCAtNTYsNiArNTYsMTEgQEAgR3JhcGhpY3ND
b250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCgpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0K
IAordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFn
ZURhdGEoSW1hZ2UqIGltYWdlLCB1bnNpZ25lZCBpbnQgZm9ybWF0LCB1bnNpZ25lZCBpbnQgdHlw
ZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxl
LCBWZWN0b3I8dWludDhfdD4mIG91dHB1dFZlY3RvcikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBo
aWNzQ29udGV4dDNETWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCmluZGV4IDAwNTcyMjM3YjlhODkwZWY5OTQyNDkxYTZm
NDdjZmZhOGQ5ZTQ4NDcuLmQwNDJjNjYwY2YzMDJhNTY5ZjBjMGY5ZTQ1ZjZlYTkzNmZiNGIzODUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGlj
c0NvbnRleHQzRE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0KQEAgLTI4Miw2ICsyODIsMTIgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6c2V0RXJyb3JNZXNzYWdlQ2FsbGJhY2soUGFzc093blB0cjxFcnJvck1l
c3NhZ2VDYWxsYmFjaz4KIHsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNo
YWRlckNvbXBpbGVyKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCiB9CiAKICNlbmRpZiAvLyBVU0UoM0RfR1JBUEhJQ1MpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNE
T3BlbkdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRl
bnNpb25zM0RPcGVuR0wuY3BwCmluZGV4IDEzZjdmODMxYWQ3MTE1OGQ5Mjk5MmQ3NjhhYzg5N2Vm
MGU5NzI4YjEuLjkzMTlmZjhkMzgwMDUyZTdiOTE2YmIxZDBkN2JlN2UxNzE3ZDA1MWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25z
M0RPcGVuR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwCkBAIC00Miw4ICs0Miw3IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIEV4dGVuc2lvbnMzRE9wZW5HTDo6RXh0ZW5zaW9uczNET3BlbkdMKEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0KQotICAgIDogbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lv
bnMoZmFsc2UpCi0gICAgLCBtX2NvbnRleHQoY29udGV4dCkKKyAgICA6IEV4dGVuc2lvbnMzRE9w
ZW5HTENvbW1vbihjb250ZXh0KQogewogfQogCkBAIC01MSw5MSArNTAsNiBAQCBFeHRlbnNpb25z
M0RPcGVuR0w6On5FeHRlbnNpb25zM0RPcGVuR0woKQogewogfQogCi1ib29sIEV4dGVuc2lvbnMz
RE9wZW5HTDo6c3VwcG9ydHMoY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIC8vIE5vdGUgb24g
c3VwcG9ydCBmb3IgQkdSQToKLSAgICAvLwotICAgIC8vIEZvciBPcGVuR0wgRVMyLjAsIHJlcXVp
cmVzIGNoZWNraW5nIGZvcgotICAgIC8vIEdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCBh
bmQgR0xfRVhUX3JlYWRfZm9ybWF0X2JncmEuCi0gICAgLy8gRm9yIGRlc2t0b3AgR0wsIEJHUkEg
aGFzIGJlZW4gc3VwcG9ydGVkIHNpbmNlIE9wZW5HTCAxLjIuCi0gICAgLy8KLSAgICAvLyBIb3dl
dmVyLCBub3RlIHRoYXQgdGhlIEdMIEVTMiBleHRlbnNpb24gcmVxdWlyZXMgdGhlCi0gICAgLy8g
aW50ZXJuYWxGb3JtYXQgdG8gZ2xUZXhJbWFnZTJEKCkgYmUgR0xfQkdSQSwgd2hpbGUgZGVza3Rv
cCBHTAotICAgIC8vIHdpbGwgbm90IGFjY2VwdCBHTF9CR1JBIChtdXN0IGJlIEdMX1JHQkEpLCBz
byB0aGlzIG11c3QgYmUKLSAgICAvLyBjaGVja2VkIG9uIGVhY2ggcGxhdGZvcm0uIERlc2t0b3Ag
R0wgb2ZmZXJzIG5laXRoZXIKLSAgICAvLyBHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgg
b3IgR0xfRVhUX3JlYWRfZm9ybWF0X2JncmEsIHNvCi0gICAgLy8gdHJlYXQgdGhlbSBhcyB1bnN1
cHBvcnRlZCBoZXJlLgotICAgIGlmICghbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnMp
IHsKLSAgICAgICAgU3RyaW5nIGV4dGVuc2lvbnNTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25z
dCBjaGFyKj4oOjpnbEdldFN0cmluZyhHTF9FWFRFTlNJT05TKSkpOwotICAgICAgICBWZWN0b3I8
U3RyaW5nPiBhdmFpbGFibGVFeHRlbnNpb25zOwotICAgICAgICBleHRlbnNpb25zU3RyaW5nLnNw
bGl0KCIgIiwgYXZhaWxhYmxlRXh0ZW5zaW9ucyk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgYXZhaWxhYmxlRXh0ZW5zaW9ucy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIG1fYXZh
aWxhYmxlRXh0ZW5zaW9ucy5hZGQoYXZhaWxhYmxlRXh0ZW5zaW9uc1tpXSk7Ci0gICAgICAgIG1f
aW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAg
Ly8gR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCBhbmQgR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVs
dGlzYW1wbGUgYXJlICJmYWtlIi4gVGhleSBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgb3RoZXIKLSAg
ICAvLyBleHRlbnNpb25zLiBJbiBwYXJ0aWN1bGFyIEdMX0VYVF9mcmFtZWJ1ZmZlcl9ibGl0IGFu
ZCBHTF9FWFRfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUKLSAgICBpZiAobmFtZSA9PSAiR0xfQU5H
TEVfZnJhbWVidWZmZXJfYmxpdCIpCi0gICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lv
bnMuY29udGFpbnMoIkdMX0VYVF9mcmFtZWJ1ZmZlcl9ibGl0Iik7Ci0gICAgaWYgKG5hbWUgPT0g
IkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIikKLSAgICAgICAgcmV0dXJuIG1fYXZh
aWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfRVhUX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxl
Iik7Ci0KLSAgICAvLyBEZXNrdG9wIEdMIGFsd2F5cyBzdXBwb3J0cyBHTF9PRVNfcmdiOF9yZ2Jh
OC4KLSAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3JnYjhfcmdiYTgiKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLQotICAgIC8vIElmIEdMX0FSQl90ZXh0dXJlX2Zsb2F0IGlzIGF2YWlsYWJsZSB0aGVu
IHdlIHJlcG9ydCBHTF9PRVNfdGV4dHVyZV9mbG9hdCBhbmQKLSAgICAvLyBHTF9PRVNfdGV4dHVy
ZV9oYWxmX2Zsb2F0IGFzIGF2YWlsYWJsZS4KLSAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3RleHR1
cmVfZmxvYXQiIHx8IG5hbWUgPT0gIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQiKQotICAgICAg
ICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9BUkJfdGV4dHVyZV9m
bG9hdCIpOwotICAgIAotICAgIC8vIEdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Ci0gICAgaWYg
KG5hbWUgPT0gIkdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikKLSAgICAgICAgcmV0dXJuIG1f
YXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfQVBQTEVfdmVydGV4X2FycmF5X29iamVj
dCIpOwotCi0gICAgLy8gRGVza3RvcCBHTCBhbHdheXMgc3VwcG9ydHMgdGhlIHN0YW5kYXJkIGRl
cml2YXRpdmUgZnVuY3Rpb25zCi0gICAgaWYgKG5hbWUgPT0gIkdMX09FU19zdGFuZGFyZF9kZXJp
dmF0aXZlcyIpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKG5hbWUgPT0gIkdMX0VY
VF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpCi0gICAgICAgIHJldHVybiBtX2F2YWlsYWJs
ZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIp
OwotCi0gICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucyhuYW1lKTsKLX0K
LQotdm9pZCBFeHRlbnNpb25zM0RPcGVuR0w6OmVuc3VyZUVuYWJsZWQoY29uc3QgU3RyaW5nJiBu
YW1lKQotewotI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdU
SykKLSAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikgewotICAg
ICAgICAvLyBFbmFibGUgc3VwcG9ydCBpbiBBTkdMRSAoaWYgbm90IGVuYWJsZWQgYWxyZWFkeSkK
LSAgICAgICAgQU5HTEVXZWJLaXRCcmlkZ2UmIGNvbXBpbGVyID0gbV9jb250ZXh0LT5tX2NvbXBp
bGVyOwotICAgICAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgQU5HTEVSZXNvdXJjZXMgPSBjb21waWxl
ci5nZXRSZXNvdXJjZXMoKTsKLSAgICAgICAgaWYgKCFBTkdMRVJlc291cmNlcy5PRVNfc3RhbmRh
cmRfZGVyaXZhdGl2ZXMpIHsKLSAgICAgICAgICAgIEFOR0xFUmVzb3VyY2VzLk9FU19zdGFuZGFy
ZF9kZXJpdmF0aXZlcyA9IDE7Ci0gICAgICAgICAgICBjb21waWxlci5zZXRSZXNvdXJjZXMoQU5H
TEVSZXNvdXJjZXMpOwotICAgICAgICB9Ci0gICAgfQotI2Vsc2UKLSAgICBBU1NFUlRfVU5VU0VE
KG5hbWUsIHN1cHBvcnRzKG5hbWUpKTsKLSNlbmRpZgotfQotCi1ib29sIEV4dGVuc2lvbnMzRE9w
ZW5HTDo6aXNFbmFibGVkKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSNpZiBQTEFURk9STShNQUMp
IHx8IFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEspCi0gICAgaWYgKG5hbWUgPT0gIkdMX09F
U19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpIHsKLSAgICAgICAgQU5HTEVXZWJLaXRCcmlkZ2UmIGNv
bXBpbGVyID0gbV9jb250ZXh0LT5tX2NvbXBpbGVyOwotICAgICAgICByZXR1cm4gY29tcGlsZXIu
Z2V0UmVzb3VyY2VzKCkuT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzOwotICAgIH0KLSNlbmRpZgot
ICAgIHJldHVybiBzdXBwb3J0cyhuYW1lKTsKLX0KLQotaW50IEV4dGVuc2lvbnMzRE9wZW5HTDo6
Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpCi17Ci0gICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4
dDNEOjpOT19FUlJPUjsKLX0KIAogdm9pZCBFeHRlbnNpb25zM0RPcGVuR0w6OmJsaXRGcmFtZWJ1
ZmZlcihsb25nIHNyY1gwLCBsb25nIHNyY1kwLCBsb25nIHNyY1gxLCBsb25nIHNyY1kxLCBsb25n
IGRzdFgwLCBsb25nIGRzdFkwLCBsb25nIGRzdFgxLCBsb25nIGRzdFkxLCB1bnNpZ25lZCBsb25n
IG1hc2ssIHVuc2lnbmVkIGxvbmcgZmlsdGVyKQogewpAQCAtMTk0LDE5ICsxMDgsNDkgQEAgdm9p
ZCBFeHRlbnNpb25zM0RPcGVuR0w6OmJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0
IGFycmF5KQogI2VuZGlmCiB9CiAKLVN0cmluZyBFeHRlbnNpb25zM0RPcGVuR0w6OmdldFRyYW5z
bGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKLXsKLSAgICBV
TlVTRURfUEFSQU0oc2hhZGVyKTsKLSAgICByZXR1cm4gIiI7Ci0gICAgLy8gRklYTUU6IGltcGxl
bWVudCB0aGlzIGZ1bmN0aW9uIGFuZCBhZGQgR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291
cmNlIGluIHN1cHBvcnRzKCkuCi19Ci0KIHZvaWQgRXh0ZW5zaW9uczNET3BlbkdMOjpjb3B5VGV4
dHVyZUNIUk9NSVVNKEdDM0RlbnVtLCBQbGF0Zm9ybTNET2JqZWN0LCBQbGF0Zm9ybTNET2JqZWN0
LCBHQzNEaW50LCBHQzNEZW51bSkKIHsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMgZnVu
Y3Rpb24gYW5kIGFkZCBHTF9DSFJPTUlVTV9jb3B5X3RleHR1cmUgaW4gc3VwcG9ydHMoKS4KICAg
ICByZXR1cm47CiB9CiAKK2Jvb2wgRXh0ZW5zaW9uczNET3BlbkdMOjpzdXBwb3J0c0V4dGVuc2lv
bihjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgLy8gR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxp
dCBhbmQgR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUgYXJlICJmYWtlIi4gVGhleSBh
cmUgaW1wbGVtZW50ZWQgdXNpbmcgb3RoZXIKKyAgICAvLyBleHRlbnNpb25zLiBJbiBwYXJ0aWN1
bGFyIEdMX0VYVF9mcmFtZWJ1ZmZlcl9ibGl0IGFuZCBHTF9FWFRfZnJhbWVidWZmZXJfbXVsdGlz
YW1wbGUKKyAgICBpZiAobmFtZSA9PSAiR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCIpCisgICAg
ICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0VYVF9mcmFtZWJ1
ZmZlcl9ibGl0Iik7CisgICAgaWYgKG5hbWUgPT0gIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRp
c2FtcGxlIikKKyAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygi
R0xfRVhUX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIik7CisKKyAgICAvLyBEZXNrdG9wIEdMIGFs
d2F5cyBzdXBwb3J0cyBHTF9PRVNfcmdiOF9yZ2JhOC4KKyAgICBpZiAobmFtZSA9PSAiR0xfT0VT
X3JnYjhfcmdiYTgiKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIElmIEdMX0FSQl90
ZXh0dXJlX2Zsb2F0IGlzIGF2YWlsYWJsZSB0aGVuIHdlIHJlcG9ydCBHTF9PRVNfdGV4dHVyZV9m
bG9hdCBhbmQKKyAgICAvLyBHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IGFzIGF2YWlsYWJsZS4K
KyAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3RleHR1cmVfZmxvYXQiIHx8IG5hbWUgPT0gIkdMX09F
U190ZXh0dXJlX2hhbGZfZmxvYXQiKQorICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNp
b25zLmNvbnRhaW5zKCJHTF9BUkJfdGV4dHVyZV9mbG9hdCIpOworCisgICAgLy8gR0xfT0VTX3Zl
cnRleF9hcnJheV9vYmplY3QKKyAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3ZlcnRleF9hcnJheV9v
YmplY3QiKQorICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJH
TF9BUFBMRV92ZXJ0ZXhfYXJyYXlfb2JqZWN0Iik7CisKKyAgICAvLyBEZXNrdG9wIEdMIGFsd2F5
cyBzdXBwb3J0cyB0aGUgc3RhbmRhcmQgZGVyaXZhdGl2ZSBmdW5jdGlvbnMKKyAgICBpZiAobmFt
ZSA9PSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBpZiAobmFtZSA9PSAiR0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIikK
KyAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfRVhUX3Rl
eHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7CisKKyAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRl
bnNpb25zLmNvbnRhaW5zKG5hbWUpOworfQorCitTdHJpbmcgRXh0ZW5zaW9uczNET3BlbkdMOjpn
ZXRFeHRlbnNpb25zKCkKK3sKKyAgICByZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgY2hhcio+KDo6Z2xHZXRTdHJpbmcoR0xfRVhURU5TSU9OUykpKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gVVNFKDNEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5H
TC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMz
RE9wZW5HTC5oCmluZGV4IDJiMmQzMGEwOTBlNTRmY2ExZDA2NDYyYWU3MWRkN2VjODcyYjU0NGMu
LjcyZWZmOTIxODkyYTZhMDBkNTY0ZjU0YTEyOWUyM2FhYTdjMWJhZDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9u
czNET3BlbkdMLmgKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgRXh0ZW5zaW9uczNET3BlbkdM
X2gKICNkZWZpbmUgRXh0ZW5zaW9uczNET3BlbkdMX2gKIAotI2luY2x1ZGUgIkV4dGVuc2lvbnMz
RC5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oIgogCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpAQCAtMzQsMTUg
KzM0LDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRXh0ZW5zaW9uczNET3Bl
bkdMIDogcHVibGljIEV4dGVuc2lvbnMzRCB7CitjbGFzcyBFeHRlbnNpb25zM0RPcGVuR0wgOiBw
dWJsaWMgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5F
eHRlbnNpb25zM0RPcGVuR0woKTsKIAogICAgIC8vIEV4dGVuc2lvbnMzRCBtZXRob2RzLgotICAg
IHZpcnR1YWwgYm9vbCBzdXBwb3J0cyhjb25zdCBTdHJpbmcmKTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZW5zdXJlRW5hYmxlZChjb25zdCBTdHJpbmcmKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNFbmFibGVk
KGNvbnN0IFN0cmluZyYpOwotICAgIHZpcnR1YWwgaW50IGdldEdyYXBoaWNzUmVzZXRTdGF0dXNB
UkIoKTsKICAgICB2aXJ0dWFsIHZvaWQgYmxpdEZyYW1lYnVmZmVyKGxvbmcgc3JjWDAsIGxvbmcg
c3JjWTAsIGxvbmcgc3JjWDEsIGxvbmcgc3JjWTEsIGxvbmcgZHN0WDAsIGxvbmcgZHN0WTAsIGxv
bmcgZHN0WDEsIGxvbmcgZHN0WTEsIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQgbG9uZyBm
aWx0ZXIpOwogICAgIHZpcnR1YWwgdm9pZCByZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcywgdW5zaWduZWQgbG9u
ZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWln
aHQpOwogICAgIApAQCAtNTAsMTkgKzQ2LDE1IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
ZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCk7CiAgICAgdmlydHVhbCBHQzNE
Ym9vbGVhbiBpc1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpOwogICAgIHZpcnR1YWwg
dm9pZCBiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgdmlydHVhbCBT
dHJpbmcgZ2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRmb3JtM0RPYmplY3QpOwog
ICAgIHZpcnR1YWwgdm9pZCBjb3B5VGV4dHVyZUNIUk9NSVVNKEdDM0RlbnVtLCBQbGF0Zm9ybTNE
T2JqZWN0LCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEaW50LCBHQzNEZW51bSk7CiAKLXByaXZhdGU6
Citwcm90ZWN0ZWQ6CiAgICAgLy8gVGhpcyBjbGFzcyBvbmx5IG5lZWRzIHRvIGJlIGluc3RhbnRp
YXRlZCBieSBHcmFwaGljc0NvbnRleHQzRCBpbXBsZW1lbnRhdGlvbnMuCiAgICAgZnJpZW5kIGNs
YXNzIEdyYXBoaWNzQ29udGV4dDNEOwogICAgIEV4dGVuc2lvbnMzRE9wZW5HTChHcmFwaGljc0Nv
bnRleHQzRCopOwogCi0gICAgYm9vbCBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5zaW9uczsK
LSAgICBIYXNoU2V0PFN0cmluZz4gbV9hdmFpbGFibGVFeHRlbnNpb25zOwotICAgIAotICAgIC8v
IFdlYWsgcG9pbnRlciBiYWNrIHRvIEdyYXBoaWNzQ29udGV4dDNECi0gICAgR3JhcGhpY3NDb250
ZXh0M0QqIG1fY29udGV4dDsKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNFeHRlbnNpb24oY29u
c3QgV1RGOjpTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRFeHRlbnNpb25zKCk7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xD
b21tb24uY3BwCmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEu
LjU3NzIzNTYwYzk2YWZiMDE0YmQ4NTMzNTc4NWQ2ZjVhNDgzMjY0NjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xD
b21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9F
eHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwCkBAIC0wLDAgKzEsMTQ4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQkdMKQorI2lu
Y2x1ZGUgIkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oIgorCisjaW5jbHVkZSAiQU5HTEVXZWJL
aXRCcmlkZ2UuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorCisjaWYgUExBVEZP
Uk0oQkxBQ0tCRVJSWSkKKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1Mb2cuaD4KKyNlbmRp
ZgorCisjaWYgVVNFKE9QRU5HTF9FU18yKQorI2luY2x1ZGUgIk9wZW5HTEVTU2hpbXMuaCIKKyNp
bmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KKyNlbGlmIFBM
QVRGT1JNKE1BQykKKyNpbmNsdWRlIDxPcGVuR0wvZ2wuaD4KKyNlbGlmIFBMQVRGT1JNKEdUSykg
fHwgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShRVCkKKyNpbmNsdWRlICJPcGVuR0xTaGltcy5o
IgorI2VuZGlmCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjpFeHRlbnNpb25zM0RPcGVuR0xDb21tb24o
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCisgICAgOiBtX2luaXRpYWxpemVkQXZhaWxhYmxl
RXh0ZW5zaW9ucyhmYWxzZSkKKyAgICAsIG1fY29udGV4dChjb250ZXh0KQoreworfQorCitFeHRl
bnNpb25zM0RPcGVuR0xDb21tb246On5FeHRlbnNpb25zM0RPcGVuR0xDb21tb24oKQoreworfQor
Citib29sIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6c3VwcG9ydHMoY29uc3QgU3RyaW5nJiBu
YW1lKQoreworICAgIGlmICghbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnMpCisgICAg
ICAgIGluaXRpYWxpemVBdmFpbGFibGVFeHRlbnNpb25zKCk7CisKKyAgICByZXR1cm4gc3VwcG9y
dHNFeHRlbnNpb24obmFtZSk7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjpl
bnN1cmVFbmFibGVkKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAobmFtZSA9PSAiR0xf
T0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikgeworICAgICAgICAvLyBFbmFibGUgc3VwcG9ydCBp
biBBTkdMRSAoaWYgbm90IGVuYWJsZWQgYWxyZWFkeSkKKyAgICAgICAgQU5HTEVXZWJLaXRCcmlk
Z2UmIGNvbXBpbGVyID0gbV9jb250ZXh0LT5tX2NvbXBpbGVyOworICAgICAgICBTaEJ1aWx0SW5S
ZXNvdXJjZXMgQU5HTEVSZXNvdXJjZXMgPSBjb21waWxlci5nZXRSZXNvdXJjZXMoKTsKKyAgICAg
ICAgaWYgKCFBTkdMRVJlc291cmNlcy5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMpIHsKKyAgICAg
ICAgICAgIEFOR0xFUmVzb3VyY2VzLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA9IDE7CisgICAg
ICAgICAgICBjb21waWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOworICAgICAgICB9
CisgICAgfQorfQorCitib29sIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6aXNFbmFibGVkKGNv
bnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAobmFtZSA9PSAiR0xfT0VTX3N0YW5kYXJkX2Rl
cml2YXRpdmVzIikgeworICAgICAgICBBTkdMRVdlYktpdEJyaWRnZSYgY29tcGlsZXIgPSBtX2Nv
bnRleHQtPm1fY29tcGlsZXI7CisgICAgICAgIHJldHVybiBjb21waWxlci5nZXRSZXNvdXJjZXMo
KS5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXM7CisgICAgfQorICAgIHJldHVybiBzdXBwb3J0cyhu
YW1lKTsKK30KKworaW50IEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6Z2V0R3JhcGhpY3NSZXNl
dFN0YXR1c0FSQigpCit7CisgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUjsK
K30KKworU3RyaW5nIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6Z2V0VHJhbnNsYXRlZFNoYWRl
clNvdXJjZUFOR0xFKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQoreworICAgIEFTU0VSVChzaGFk
ZXIpOworICAgIGludCBHTHNoYWRlclR5cGU7CisgICAgQU5HTEVTaGFkZXJUeXBlIHNoYWRlclR5
cGU7CisKKyAgICBBTkdMRVdlYktpdEJyaWRnZSYgY29tcGlsZXIgPSBtX2NvbnRleHQtPm1fY29t
cGlsZXI7CisKKyAgICBtX2NvbnRleHQtPmdldFNoYWRlcml2KHNoYWRlciwgR3JhcGhpY3NDb250
ZXh0M0Q6OlNIQURFUl9UWVBFLCAmR0xzaGFkZXJUeXBlKTsKKworICAgIGlmIChHTHNoYWRlclR5
cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIpCisgICAgICAgIHNoYWRlclR5
cGUgPSBTSEFERVJfVFlQRV9WRVJURVg7CisgICAgZWxzZSBpZiAoR0xzaGFkZXJUeXBlID09IEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVIpCisgICAgICAgIHNoYWRlclR5cGUgPSBT
SEFERVJfVFlQRV9GUkFHTUVOVDsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiAiIjsgLy8gSW52
YWxpZCBzaGFkZXIgdHlwZS4KKworICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNoYWRlclNvdXJjZUVudHJ5Pjo6aXRlcmF0b3IgcmVzdWx0ID0gbV9jb250
ZXh0LT5tX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisKKyAgICBpZiAocmVzdWx0ID09
IG1fY29udGV4dC0+bV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiAiIjsK
KworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1
bHQtPnNlY29uZDsKKworICAgIFN0cmluZyB0cmFuc2xhdGVkU2hhZGVyU291cmNlOworICAgIFN0
cmluZyBzaGFkZXJJbmZvTG9nOworCisgICAgYm9vbCBpc1ZhbGlkID0gY29tcGlsZXIudmFsaWRh
dGVTaGFkZXJTb3VyY2UoZW50cnkuc291cmNlLnV0ZjgoKS5kYXRhKCksIHNoYWRlclR5cGUsIHRy
YW5zbGF0ZWRTaGFkZXJTb3VyY2UsIHNoYWRlckluZm9Mb2cpOworCisgICAgZW50cnkubG9nID0g
c2hhZGVySW5mb0xvZzsKKyAgICBlbnRyeS5pc1ZhbGlkID0gaXNWYWxpZDsKKworICAgIGlmICgh
aXNWYWxpZCkKKyAgICAgICAgcmV0dXJuICIiOworCisgICAgcmV0dXJuIHRyYW5zbGF0ZWRTaGFk
ZXJTb3VyY2U7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjppbml0aWFsaXpl
QXZhaWxhYmxlRXh0ZW5zaW9ucygpCit7CisgICAgU3RyaW5nIGV4dGVuc2lvbnNTdHJpbmcgPSBn
ZXRFeHRlbnNpb25zKCk7CisgICAgVmVjdG9yPFN0cmluZz4gYXZhaWxhYmxlRXh0ZW5zaW9uczsK
KyAgICBleHRlbnNpb25zU3RyaW5nLnNwbGl0KCIgIiwgYXZhaWxhYmxlRXh0ZW5zaW9ucyk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhdmFpbGFibGVFeHRlbnNpb25zLnNpemUoKTsgKytp
KQorICAgICAgICBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuYWRkKGF2YWlsYWJsZUV4dGVuc2lvbnNb
aV0pOworICAgIG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zID0gdHJ1ZTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMz
RE9wZW5HTENvbW1vbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oCmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlh
ZTc3NWFkOGMyZTQ4YzUzOTEuLjI3OTZkNmZjOTMwOTY1Y2RmMWViNDc0YzczNzE3YjJkMTM1N2Ux
MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9F
eHRlbnNpb25zM0RPcGVuR0xDb21tb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmgKQEAgLTAsMCArMSw3MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9u
X2gKKyNkZWZpbmUgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uX2gKKworI2luY2x1ZGUgIkV4dGVu
c2lvbnMzRC5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBFeHRlbnNpb25zM0RPcGVuR0xDb21tb24gOiBwdWJsaWMg
RXh0ZW5zaW9uczNEIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5FeHRlbnNpb25zM0RPcGVuR0xD
b21tb24oKTsKKworICAgIC8vIEV4dGVuc2lvbnMzRCBtZXRob2RzLgorICAgIHZpcnR1YWwgYm9v
bCBzdXBwb3J0cyhjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5zdXJlRW5hYmxl
ZChjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNFbmFibGVkKGNvbnN0IFN0cmlu
ZyYpOworICAgIHZpcnR1YWwgaW50IGdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKTsKKworICAg
IHZpcnR1YWwgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVWZXJ0ZXhBcnJheU9FUygpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGVsZXRlVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCkgPSAw
OworICAgIHZpcnR1YWwgR0MzRGJvb2xlYW4gaXNWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2Jq
ZWN0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNE
T2JqZWN0KSA9IDA7CisKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRUcmFuc2xhdGVkU2hhZGVyU291
cmNlQU5HTEUoUGxhdGZvcm0zRE9iamVjdCk7CisKK3Byb3RlY3RlZDoKKyAgICBFeHRlbnNpb25z
M0RPcGVuR0xDb21tb24oR3JhcGhpY3NDb250ZXh0M0QqKTsKKworICAgIHZpcnR1YWwgYm9vbCBz
dXBwb3J0c0V4dGVuc2lvbihjb25zdCBTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcg
Z2V0RXh0ZW5zaW9ucygpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplQXZhaWxh
YmxlRXh0ZW5zaW9ucygpOworCisgICAgYm9vbCBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5z
aW9uczsKKyAgICBIYXNoU2V0PFN0cmluZz4gbV9hdmFpbGFibGVFeHRlbnNpb25zOworCisgICAg
Ly8gV2VhayBwb2ludGVyIGJhY2sgdG8gR3JhcGhpY3NDb250ZXh0M0QKKyAgICBHcmFwaGljc0Nv
bnRleHQzRCogbV9jb250ZXh0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdM
RVMuY3BwCmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEuLmUy
MWY1NTlhZGRmZDQzNWZlNjhkZDA5MGIxMzg1NmY0NjVjMzRmNTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lv
bnMzRE9wZW5HTEVTLmNwcApAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpZiBFTkFCTEUoV0VCR0wpCisjaW5jbHVkZSAiRXh0ZW5z
aW9uczNET3BlbkdMRVMuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5j
bHVkZSA8RUdML2VnbC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK0V4dGVuc2lvbnMzRE9wZW5HTEVTOjpFeHRlbnNpb25zM0RPcGVuR0xFUyhH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKKyAgICA6IEV4dGVuc2lvbnMzRE9wZW5HTENvbW1v
bihjb250ZXh0KQorICAgICwgbV9zdXBwb3J0c09FU3ZlcnRleEFycmF5T2JqZWN0KGZhbHNlKQor
ICAgICwgbV9zdXBwb3J0c0lNR011bHRpc2FtcGxlZFJlbmRlclRvVGV4dHVyZShmYWxzZSkKKyAg
ICAsIG1fZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HKDApCisgICAgLCBtX2ds
UmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HKDApCisgICAgLCBtX2dsQmluZFZlcnRl
eEFycmF5T0VTKDApCisgICAgLCBtX2dsRGVsZXRlVmVydGV4QXJyYXlzT0VTKDApCisgICAgLCBt
X2dsR2VuVmVydGV4QXJyYXlzT0VTKDApCisgICAgLCBtX2dsSXNWZXJ0ZXhBcnJheU9FUygwKQor
eworfQorCitFeHRlbnNpb25zM0RPcGVuR0xFUzo6fkV4dGVuc2lvbnMzRE9wZW5HTEVTKCkKK3sK
K30KKwordm9pZCBFeHRlbnNpb25zM0RPcGVuR0xFUzo6ZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0
aXNhbXBsZUlNRyh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50
LCB1bnNpZ25lZCBsb25nIHRleHRhcmdldCwgdW5zaWduZWQgaW50IHRleHR1cmUsIGludCBsZXZl
bCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzKQoreworICAgIGlmIChtX2dsRnJhbWVidWZmZXJUZXh0
dXJlMkRNdWx0aXNhbXBsZUlNRykKKyAgICAgICAgbV9nbEZyYW1lYnVmZmVyVGV4dHVyZTJETXVs
dGlzYW1wbGVJTUcodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVs
LCBzYW1wbGVzKTsKKyAgICBlbHNlCisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworfQorCit2b2lkIEV4dGVuc2lvbnMzRE9wZW5HTEVT
OjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUcodW5zaWduZWQgbG9uZyB0YXJnZXQs
IHVuc2lnbmVkIGxvbmcgc2FtcGxlcywgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5z
aWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCit7CisgICAgaWYgKG1fZ2xS
ZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUcpCisgICAgICAgIG1fZ2xSZW5kZXJidWZm
ZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUcodGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCk7CisgICAgZWxzZQorICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVH
TEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKK30KKworUGxhdGZvcm0zRE9iamVjdCBFeHRl
bnNpb25zM0RPcGVuR0xFUzo6Y3JlYXRlVmVydGV4QXJyYXlPRVMoKQoreworICAgIG1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKG1fZ2xHZW5WZXJ0ZXhBcnJheXNPRVMp
IHsKKyAgICAgICAgR0x1aW50IGFycmF5ID0gMDsKKyAgICAgICAgbV9nbEdlblZlcnRleEFycmF5
c09FUygxLCAmYXJyYXkpOworICAgICAgICByZXR1cm4gYXJyYXk7CisgICAgfQorCisgICAgbV9j
b250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgcmV0
dXJuIDA7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uczNET3BlbkdMRVM6OmRlbGV0ZVZlcnRleEFycmF5
T0VTKFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCit7CisgICAgaWYgKCFhcnJheSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAo
bV9nbERlbGV0ZVZlcnRleEFycmF5c09FUykKKyAgICAgICAgbV9nbERlbGV0ZVZlcnRleEFycmF5
c09FUygxLCAmYXJyYXkpOworICAgIGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cit9CisKK0dDM0Rib29sZWFuIEV4dGVuc2lv
bnMzRE9wZW5HTEVTOjppc1ZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QgYXJyYXkpCit7
CisgICAgaWYgKCFhcnJheSkKKyAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworCisgICAgbV9jb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAobV9nbElzVmVydGV4QXJyYXlPRVMp
CisgICAgICAgIHJldHVybiBtX2dsSXNWZXJ0ZXhBcnJheU9FUyhhcnJheSk7CisKKyAgICBtX2Nv
bnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uczNET3BlbkdMRVM6OmJpbmRWZXJ0ZXhBcnJh
eU9FUyhQbGF0Zm9ybTNET2JqZWN0IGFycmF5KQoreworICAgIGlmICghYXJyYXkpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYg
KG1fZ2xCaW5kVmVydGV4QXJyYXlPRVMpCisgICAgICAgIG1fZ2xCaW5kVmVydGV4QXJyYXlPRVMo
YXJyYXkpOworICAgIGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Cit9CisKKworYm9vbCBFeHRlbnNpb25zM0RPcGVuR0xFUzo6
c3VwcG9ydHNFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmIChtX2F2YWls
YWJsZUV4dGVuc2lvbnMuY29udGFpbnMobmFtZSkpIHsKKyAgICAgICAgaWYgKG5hbWUgPT0gIkdM
X09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IiAmJiAhbV9zdXBwb3J0c09FU3ZlcnRleEFycmF5T2Jq
ZWN0KSB7CisgICAgICAgICAgICBtX2dsQmluZFZlcnRleEFycmF5T0VTID0gcmVpbnRlcnByZXRf
Y2FzdDxQRk5HTEJJTkRWRVJURVhBUlJBWU9FU1BST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbEJp
bmRWZXJ0ZXhBcnJheU9FUyIpKTsKKyAgICAgICAgICAgIG1fZ2xHZW5WZXJ0ZXhBcnJheXNPRVMg
PSByZWludGVycHJldF9jYXN0PFBGTkdMR0VOVkVSVEVYQVJSQVlTT0VTUFJPQz4oZWdsR2V0UHJv
Y0FkZHJlc3MoImdsR2VuVmVydGV4QXJyYXlzT0VTIikpOworICAgICAgICAgICAgbV9nbERlbGV0
ZVZlcnRleEFycmF5c09FUyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xERUxFVEVWRVJURVhBUlJB
WVNPRVNQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMiKSk7
CisgICAgICAgICAgICBtX2dsSXNWZXJ0ZXhBcnJheU9FUyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZO
R0xJU1ZFUlRFWEFSUkFZT0VTUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsSXNWZXJ0ZXhBcnJh
eU9FUyIpKTsKKyAgICAgICAgICAgIG1fc3VwcG9ydHNPRVN2ZXJ0ZXhBcnJheU9iamVjdCA9IHRy
dWU7CisgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiR0xfSU1HX211bHRpc2FtcGxlZF9yZW5k
ZXJfdG9fdGV4dHVyZSIgJiYgIW1fc3VwcG9ydHNJTUdNdWx0aXNhbXBsZWRSZW5kZXJUb1RleHR1
cmUpIHsKKyAgICAgICAgICAgIG1fZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1H
ID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTEZSQU1FQlVGRkVSVEVYVFVSRTJETVVMVElTQU1QTEVJ
TUdQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2Ft
cGxlSU1HIikpOworICAgICAgICAgICAgbV9nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBs
ZUlNRyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xSRU5ERVJCVUZGRVJTVE9SQUdFTVVMVElTQU1Q
TEVJTUdQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlz
YW1wbGVJTUciKSk7CisgICAgICAgICAgICBtX3N1cHBvcnRzSU1HTXVsdGlzYW1wbGVkUmVuZGVy
VG9UZXh0dXJlID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1N0cmluZyBFeHRlbnNpb25zM0RPcGVuR0xFUzo6
Z2V0RXh0ZW5zaW9ucygpCit7CisgICAgcmV0dXJuIFN0cmluZyhyZWludGVycHJldF9jYXN0PGNv
bnN0IGNoYXIqPig6OmdsR2V0U3RyaW5nKEdMX0VYVEVOU0lPTlMpKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xF
Uy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMz
RE9wZW5HTEVTLmgKaW5kZXggZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5
MS4uM2M0NjBmOWUyYWNkM2M1NDk5MjUyZmIxMmNlZTg1NjQ0MTNhNjU1YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5H
TEVTLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVu
c2lvbnMzRE9wZW5HTEVTLmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEyIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgRXh0ZW5zaW9uczNET3BlbkdMRVNfaAorI2RlZmluZSBFeHRlbnNpb25zM0RPcGVu
R0xFU19oCisKKyNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0xDb21tb24uaCIKKworI2luY2x1
ZGUgPEdMRVMyL2dsMi5oPgorI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEV4dGVuc2lvbnMzRE9wZW5HTEVTIDogcHVibGljIEV4dGVuc2lv
bnMzRE9wZW5HTENvbW1vbiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+RXh0ZW5zaW9uczNET3Bl
bkdMRVMoKTsKKworICAgIHZpcnR1YWwgdm9pZCBmcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2Ft
cGxlSU1HKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVu
c2lnbmVkIGxvbmcgdGV4dGFyZ2V0LCB1bnNpZ25lZCBpbnQgdGV4dHVyZSwgaW50IGxldmVsLCB1
bnNpZ25lZCBsb25nIHNhbXBsZXMpOworICAgIHZpcnR1YWwgdm9pZCByZW5kZXJidWZmZXJTdG9y
YWdlTXVsdGlzYW1wbGVJTUcodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgc2Ft
cGxlcywgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwg
dW5zaWduZWQgbG9uZyBoZWlnaHQpOworCisgICAgdmlydHVhbCBQbGF0Zm9ybTNET2JqZWN0IGNy
ZWF0ZVZlcnRleEFycmF5T0VTKCk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVZlcnRleEFycmF5
T0VTKFBsYXRmb3JtM0RPYmplY3QpOworICAgIHZpcnR1YWwgR0MzRGJvb2xlYW4gaXNWZXJ0ZXhB
cnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgYmluZFZlcnRleEFy
cmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpOworCitwcm90ZWN0ZWQ6CisgICAgLy8gVGhpcyBjbGFz
cyBvbmx5IG5lZWRzIHRvIGJlIGluc3RhbnRpYXRlZCBieSBHcmFwaGljc0NvbnRleHQzRCBpbXBs
ZW1lbnRhdGlvbnMuCisgICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworICAgIEV4
dGVuc2lvbnMzRE9wZW5HTEVTKEdyYXBoaWNzQ29udGV4dDNEKik7CisKKyAgICB2aXJ0dWFsIGJv
b2wgc3VwcG9ydHNFeHRlbnNpb24oY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCBTdHJpbmcg
Z2V0RXh0ZW5zaW9ucygpOworCisgICAgYm9vbCBtX3N1cHBvcnRzT0VTdmVydGV4QXJyYXlPYmpl
Y3Q7CisgICAgYm9vbCBtX3N1cHBvcnRzSU1HTXVsdGlzYW1wbGVkUmVuZGVyVG9UZXh0dXJlOwor
CisgICAgUEZOR0xGUkFNRUJVRkZFUlRFWFRVUkUyRE1VTFRJU0FNUExFSU1HUFJPQyBtX2dsRnJh
bWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRzsKKyAgICBQRk5HTFJFTkRFUkJVRkZFUlNU
T1JBR0VNVUxUSVNBTVBMRUlNR1BST0MgbV9nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBs
ZUlNRzsKKyAgICBQRk5HTEJJTkRWRVJURVhBUlJBWU9FU1BST0MgbV9nbEJpbmRWZXJ0ZXhBcnJh
eU9FUzsKKyAgICBQRk5HTERFTEVURVZFUlRFWEFSUkFZU09FU1BST0MgbV9nbERlbGV0ZVZlcnRl
eEFycmF5c09FUzsKKyAgICBQRk5HTEdFTlZFUlRFWEFSUkFZU09FU1BST0MgbV9nbEdlblZlcnRl
eEFycmF5c09FUzsKKyAgICBQRk5HTElTVkVSVEVYQVJSQVlPRVNQUk9DIG1fZ2xJc1ZlcnRleEFy
cmF5T0VTOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRXh0ZW5z
aW9uczNET3BlbkdMRVNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKaW5k
ZXggYWM5OThkYzJkYmZlOWE1OGUxODZiNjRkNzQwNDkxZDNmZTVhNzk0ZC4uNjc1MzQ0NGY4ZTkx
MDE1ZTc4YWE2OWYzMTRlZWY4NTA2ZTUzZDg3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
M0RPcGVuR0wuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzQsNiArMzUsMTIgQEAKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKIAorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxjc3Ry
aW5nPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1VudXNlZFBh
cmFtLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCiAjaWYgUExBVEZPUk0oTUFD
KQogI2luY2x1ZGUgPE9wZW5HTC9nbC5oPgogI2VsaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9S
TShFRkwpIHx8IFBMQVRGT1JNKFFUKQpAQCAtNDcsNiArNTQsMjQgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6cmVhZFBpeGVsc0FuZENvbnZlcnRUb0JHUkFJZk5lY2Vzc2FyeShpbnQgeCwgaW50
IHksIGludAogICAgIDo6Z2xSZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIEdMX0JHUkEs
IEdMX1VOU0lHTkVEX0lOVF84XzhfOF84X1JFViwgcGl4ZWxzKTsKIH0KIAordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dmFsaWRhdGVBdHRyaWJ1dGVzKCkKK3sKKyAgICBFeHRlbnNpb25zM0QqIGV4
dGVuc2lvbnMgPSBnZXRFeHRlbnNpb25zKCk7CisgICAgdmFsaWRhdGVEZXB0aFN0ZW5jaWwoIkdM
X0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOworICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykg
eworICAgICAgICBib29sIGlzVmFsaWRWZW5kb3IgPSB0cnVlOworICAgICAgICAvLyBDdXJyZW50
bHkgaW4gTWFjIHdlIG9ubHkgdHVybiBvbiBhbnRpYWxpYXMgaWYgdmVuZG9yIGlzIE5WSURJQSwK
KyAgICAgICAgLy8gb3IgaWYgQVRJIGFuZCBvbiAxMC43LjIgYW5kIGFib3ZlLgorICAgICAgICBj
b25zdCBjaGFyKiB2ZW5kb3IgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPig6OmdsR2V0
U3RyaW5nKEdMX1ZFTkRPUikpOworICAgICAgICBpZiAoIXZlbmRvciB8fCAoIXN0ZDo6c3Ryc3Ry
KHZlbmRvciwgIk5WSURJQSIpICYmICEoc3RkOjpzdHJzdHIodmVuZG9yLCAiQVRJIikgJiYgc3lz
dGVtQWxsb3dzTXVsdGlzYW1wbGluZ09uQVRJQ2FyZHMoKSkpKQorICAgICAgICAgICAgaXNWYWxp
ZFZlbmRvciA9IGZhbHNlOworICAgICAgICBpZiAoIWlzVmFsaWRWZW5kb3IgfHwgIWV4dGVuc2lv
bnMtPnN1cHBvcnRzKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpIHx8IGlzR0xF
UzJDb21wbGlhbnQoKSkKKyAgICAgICAgICAgIG1fYXR0cnMuYW50aWFsaWFzID0gZmFsc2U7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQoIkdMX0FO
R0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIik7CisgICAgfQorfQorCiBib29sIEdyYXBoaWNz
Q29udGV4dDNEOjpyZXNoYXBlRkJPcyhjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIGNvbnN0
IGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsKQEAgLTI1Niw2ICsyODEsNDkgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6Y2xlYXJEZXB0aChHQzNEY2xhbXBmIGRlcHRoKQogICAgIDo6Z2xDbGVh
ckRlcHRoKGRlcHRoKTsKIH0KIAorYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6c3lzdGVtQWxsb3dz
TXVsdGlzYW1wbGluZ09uQVRJQ2FyZHMoKSBjb25zdAoreworI2lmIFBMQVRGT1JNKE1BQykKKyNp
ZiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5H
X09OX0xJT04pCisgICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CisgICAgc3RhdGljIFNJbnQzMiB2ZXJzaW9uOworICAgIGlmICghdmVyc2lvbikgewor
ICAgICAgICBpZiAoR2VzdGFsdChnZXN0YWx0U3lzdGVtVmVyc2lvbiwgJnZlcnNpb24pICE9IG5v
RXJyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAvLyBTZWUgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3OTIyIGZvciBtb3JlIGRldGFpbHMK
KyAgICByZXR1cm4gdmVyc2lvbiA+PSAweDEwNzI7CisjZW5kaWYgLy8gU05PV19MRU9QQVJEIGFu
ZCBMSU9OCisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZiAvLyBQTEFURk9STShNQUMp
Cit9CisKK0V4dGVuc2lvbnMzRCogR3JhcGhpY3NDb250ZXh0M0Q6OmdldEV4dGVuc2lvbnMoKQor
eworICAgIGlmICghbV9leHRlbnNpb25zKQorICAgICAgICBtX2V4dGVuc2lvbnMgPSBhZG9wdFB0
cihuZXcgRXh0ZW5zaW9uczNET3BlbkdMKHRoaXMpKTsKKyAgICByZXR1cm4gbV9leHRlbnNpb25z
LmdldCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzKEdDM0RpbnQg
eCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgdm9pZCogZGF0YSkKK3sKKyAgICAvLyBGSVhNRTogcmVt
b3ZlIHRoZSB0d28gZ2xGbHVzaCBjYWxscyB3aGVuIHRoZSBkcml2ZXIgYnVnIGlzIGZpeGVkLCBp
LmUuLAorICAgIC8vIGFsbCBwcmV2aW91cyByZW5kZXJpbmcgY2FsbHMgc2hvdWxkIGJlIGRvbmUg
YmVmb3JlIHJlYWRpbmcgcGl4ZWxzLgorICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6
Z2xGbHVzaCgpOworICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1f
bXVsdGlzYW1wbGVGQk8pIHsKKyAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2Fy
eShJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1
ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICAgICAg
OjpnbEZsdXNoKCk7CisgICAgfQorICAgIDo6Z2xSZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWln
aHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1f
Ym91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZl
ckVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwor
fQorCiB9CiAKICNlbmRpZiAvLyBVU0UoM0RfR1JBUEhJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xD
b21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBo
aWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAppbmRleCA1ZDMyM2JmZGJiY2E4MWRlNDgzODNi
YjljYjA0ZGY0NTkzMDRlYzQ0Li45YTdmNDI1MGQ1N2UzYjg5NzNiMzc1OTZkYjc1YmQ1M2RkYzk2
OGFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAK
QEAgLTEsNiArMSw4IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEyIENoYW5nU2VvayBPaCA8c2hp
dmFtaWRvd0BnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90
aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTMwLDcgKzMyLDEyIEBACiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQz
RC5oIgogCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgorI2lmIFVTRShPUEVO
R0xfRVNfMikKKyNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0xFUy5oIgorI2Vsc2UKICNpbmNs
dWRlICJFeHRlbnNpb25zM0RPcGVuR0wuaCIKKyNlbmRpZgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgi
CkBAIC00OSwzOSArNTYsMjQgQEAKICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgVVNFKE9Q
RU5HTF9FU18yKQorI2luY2x1ZGUgIk9wZW5HTEVTU2hpbXMuaCIKKyNlbGlmIFBMQVRGT1JNKE1B
QykKICNpbmNsdWRlIDxPcGVuR0wvZ2wuaD4KICNlbGlmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZP
Uk0oRUZMKSB8fCBQTEFURk9STShRVCkKICNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgogI2VuZGlm
CiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKKyNpZiBQTEFURk9STShCTEFDS0JFUlJZKQorI2luY2x1
ZGUgPEJsYWNrQmVycnlQbGF0Zm9ybUxvZy5oPgorI2VuZGlmCiAKLXN0YXRpYyBib29sIHN5c3Rl
bUFsbG93c011bHRpc2FtcGxpbmdPbkFUSUNhcmRzKCkKLXsKLSNpZiBQTEFURk9STShNQUMpCi0j
aWYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKSAmJiAhZGVmaW5lZChCVUlMRElO
R19PTl9MSU9OKQotICAgIHJldHVybiB0cnVlOwotI2Vsc2UKLSAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwotICAgIHN0YXRpYyBTSW50MzIgdmVyc2lvbjsKLSAgICBpZiAoIXZlcnNpb24pIHsK
LSAgICAgICAgaWYgKEdlc3RhbHQoZ2VzdGFsdFN5c3RlbVZlcnNpb24sICZ2ZXJzaW9uKSAhPSBu
b0VycikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgLy8gU2VlIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzkyMiBmb3IgbW9yZSBkZXRhaWxz
Ci0gICAgcmV0dXJuIHZlcnNpb24gPj0gMHgxMDcyOwotI2VuZGlmIC8vIFNOT1dfTEVPUEFSRCBh
bmQgTElPTgotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYgLy8gUExBVEZPUk0oTUFD
KQotfQorbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxp
ZGF0ZUF0dHJpYnV0ZXMoKQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVEZXB0aFN0
ZW5jaWwoY29uc3QgY2hhciogcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKQogewogICAgIEV4
dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IGdldEV4dGVuc2lvbnMoKTsKICAgICBpZiAobV9hdHRy
cy5zdGVuY2lsKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVu
c2lvbiA9IGlzR0xFUzJDb21wbGlhbnQoKSA/ICJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwi
IDogIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCI7CiAgICAgICAgIGlmIChleHRlbnNpb25z
LT5zdXBwb3J0cyhwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb24pKSB7CiAgICAgICAgICAgICBl
eHRlbnNpb25zLT5lbnN1cmVFbmFibGVkKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbik7CiAg
ICAgICAgICAgICAvLyBGb3JjZSBkZXB0aCBpZiBzdGVuY2lsIGlzIHRydWUuCkBAIC00MzksMzYg
KzQzMSwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hhZGVyKFBsYXRmb3Jt
M0RPYmplY3Qgc2hhZGVyKQogICAgIEFTU0VSVChzaGFkZXIpOwogICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwogCi0gICAgaW50IEdMc2hhZGVyVHlwZTsKLSAgICBBTkdMRVNoYWRlclR5cGUgc2hh
ZGVyVHlwZTsKLQotICAgIGdsR2V0U2hhZGVyaXYoc2hhZGVyLCBTSEFERVJfVFlQRSwgJkdMc2hh
ZGVyVHlwZSk7Ci0gICAgCi0gICAgaWYgKEdMc2hhZGVyVHlwZSA9PSBWRVJURVhfU0hBREVSKQot
ICAgICAgICBzaGFkZXJUeXBlID0gU0hBREVSX1RZUEVfVkVSVEVYOwotICAgIGVsc2UgaWYgKEdM
c2hhZGVyVHlwZSA9PSBGUkFHTUVOVF9TSEFERVIpCi0gICAgICAgIHNoYWRlclR5cGUgPSBTSEFE
RVJfVFlQRV9GUkFHTUVOVDsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybjsgLy8gSW52YWxpZCBz
aGFkZXIgdHlwZS4KLQotICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNl
RW50cnk+OjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7
CisgICAgU3RyaW5nIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UgPSBtX2V4dGVuc2lvbnMtPmdldFRy
YW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShzaGFkZXIpOwogCi0gICAgaWYgKHJlc3VsdCA9PSBt
X3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKKyAgICBpZiAoIXRyYW5zbGF0ZWRTaGFkZXJTb3VyY2Uu
bGVuZ3RoKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFNoYWRlclNvdXJjZUVudHJ5JiBlbnRy
eSA9IHJlc3VsdC0+c2Vjb25kOwotCi0gICAgU3RyaW5nIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7
Ci0gICAgU3RyaW5nIHNoYWRlckluZm9Mb2c7Ci0KLSAgICBib29sIGlzVmFsaWQgPSBtX2NvbXBp
bGVyLnZhbGlkYXRlU2hhZGVyU291cmNlKGVudHJ5LnNvdXJjZS51dGY4KCkuZGF0YSgpLCBzaGFk
ZXJUeXBlLCB0cmFuc2xhdGVkU2hhZGVyU291cmNlLCBzaGFkZXJJbmZvTG9nKTsKLQotICAgIGVu
dHJ5LmxvZyA9IHNoYWRlckluZm9Mb2c7Ci0gICAgZW50cnkuaXNWYWxpZCA9IGlzVmFsaWQ7Ci0K
LSAgICBpZiAoIWlzVmFsaWQpCi0gICAgICAgIHJldHVybjsgLy8gU2hhZGVyIGRpZG4ndCB2YWxp
ZGF0ZSwgZG9uJ3QgbW92ZSBmb3J3YXJkIHdpdGggY29tcGlsaW5nIHRyYW5zbGF0ZWQgc291cmNl
LgotCiAgICAgaW50IHRyYW5zbGF0ZWRTaGFkZXJMZW5ndGggPSB0cmFuc2xhdGVkU2hhZGVyU291
cmNlLmxlbmd0aCgpOwogCiAgICAgY29uc3QgQ1N0cmluZyYgdHJhbnNsYXRlZFNoYWRlckNTdHJp
bmcgPSB0cmFuc2xhdGVkU2hhZGVyU291cmNlLnV0ZjgoKTsKQEAgLTc5MCwyOSArNzU3LDYgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cG9seWdvbk9mZnNldChHQzNEZmxvYXQgZmFjdG9yLCBH
QzNEZmxvYXQgdW5pdHMpCiAgICAgOjpnbFBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMoR0MzRGludCB4LCBHQzNEaW50
IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBH
QzNEZW51bSB0eXBlLCB2b2lkKiBkYXRhKQotewotICAgIC8vIEZJWE1FOiByZW1vdmUgdGhlIHR3
byBnbEZsdXNoIGNhbGxzIHdoZW4gdGhlIGRyaXZlciBidWcgaXMgZml4ZWQsIGkuZS4sCi0gICAg
Ly8gYWxsIHByZXZpb3VzIHJlbmRlcmluZyBjYWxscyBzaG91bGQgYmUgZG9uZSBiZWZvcmUgcmVh
ZGluZyBwaXhlbHMuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEZsdXNoKCk7
Ci0gICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBs
ZUZCTykgewotICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KEludFJlY3Qo
eCwgeSwgd2lkdGgsIGhlaWdodCkpOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwotICAgICAgICA6OmdsRmx1c2go
KTsKLSAgICB9Ci0gICAgOjpnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0
LCB0eXBlLCBkYXRhKTsKLSAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9
PSBtX211bHRpc2FtcGxlRkJPKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCi17Ci0gICAgLy8gRklY
TUU6IFRoaXMgaXMgbm90IGltcGxlbWVudGVkIG9uIGRlc2t0b3AgT3BlbkdMLiBXZSBuZWVkIHRv
IGhhdmUgaWZkZWZzIGZvciB0aGUgZGlmZmVyZW50IEdMIHZhcmlhbnRzLgotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KIHZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnNhbXBsZUNvdmVyYWdlKEdDM0RjbGFtcGYgdmFsdWUsIEdDM0Rib29sZWFuIGlu
dmVydCkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKQEAgLTEzODYsMTMgKzEzMzAsNiBA
QCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpsYXllckNvbXBvc2l0ZWQoKSBjb25zdAogICAgIHJl
dHVybiBtX2xheWVyQ29tcG9zaXRlZDsKIH0KIAotRXh0ZW5zaW9uczNEKiBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0RXh0ZW5zaW9ucygpCi17Ci0gICAgaWYgKCFtX2V4dGVuc2lvbnMpCi0gICAgICAg
IG1fZXh0ZW5zaW9ucyA9IGFkb3B0UHRyKG5ldyBFeHRlbnNpb25zM0RPcGVuR0wodGhpcykpOwot
ICAgIHJldHVybiBtX2V4dGVuc2lvbnMuZ2V0KCk7Ci19Ci0KIH0KIAogI2VuZGlmIC8vIFVTRSgz
RF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAppbmRl
eCAyNzkwY2FmNDM5YTM4MTJiMjNjODllZjg1NmU0MjA1MjBhZmQ3NjIwLi5lNGFjNjg3NmUwNmZl
OWNkZjU0ZmJkYzdmZGYyOTA4NTViMGMzMTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dDNET3BlbkdMRVMuY3BwCkBAIC0xLDYgKzEsOCBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMiBD
aGFuZ1Nlb2sgT2ggPHNoaXZhbWlkb3dAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDEy
IFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw5MyArMzEsODYgQEAKICNpZiBVU0UoM0Rf
R1JBUEhJQ1MpCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotCi0jaW5jbHVkZSAi
RXh0ZW5zaW9uczNET3BlbkdMLmgiCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMRVMuaCIK
ICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIkxh
eWVyV2ViS2l0VGhyZWFkLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLQotI2lmIFBM
QVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpCi0jaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKLSNl
bmRpZgorI2luY2x1ZGUgIk9wZW5HTEVTU2hpbXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzQW5kQ29udmVydFRvQkdSQUlmTmVj
ZXNzYXJ5KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBjaGFy
KiBwaXhlbHMpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIo
KQogewotICAgIGNvbnN0IGludCB0b3RhbEJ5dGVzID0gbV9jdXJyZW50V2lkdGggKiBtX2N1cnJl
bnRIZWlnaHQgKiA0OwotICAgIDo6Z2xSZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIEdM
X1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIHBpeGVscyk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkg
PCB0b3RhbEJ5dGVzOyBpICs9IDQpCi0gICAgICAgIHN0ZDo6c3dhcChwaXhlbHNbaV0sIHBpeGVs
c1tpICsgMl0pOyAvLyBDb252ZXJ0IHRvIEJHUkEuCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgOjpnbFJlbGVhc2VTaGFkZXJDb21waWxlcigpOwogfQogCi1ib29sIEdyYXBoaWNzQ29u
dGV4dDNEOjpyZXNoYXBlRkJPcyhjb25zdCBJbnRTaXplJiBzaXplKQordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIHZvaWQq
IGRhdGEpCiB7Ci0gICAgY29uc3QgaW50IHdpZHRoID0gc2l6ZS53aWR0aCgpOwotICAgIGNvbnN0
IGludCBoZWlnaHQgPSBzaXplLmhlaWdodCgpOwotICAgIEdMdWludCBjb2xvckZvcm1hdCA9IDAs
IHBpeGVsRGF0YVR5cGUgPSAwOwotICAgIGlmIChtX2F0dHJzLmFscGhhKSB7Ci0gICAgICAgIG1f
aW50ZXJuYWxDb2xvckZvcm1hdCA9IEdMX1JHQkE7Ci0gICAgICAgIGNvbG9yRm9ybWF0ID0gR0xf
UkdCQTsKLSAgICAgICAgcGl4ZWxEYXRhVHlwZSA9IEdMX1VOU0lHTkVEX0JZVEU7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgbV9pbnRlcm5hbENvbG9yRm9ybWF0ID0gR0xfUkdCOwotICAgICAgICBj
b2xvckZvcm1hdCA9IEdMX1JHQjsKLSAgICAgICAgcGl4ZWxEYXRhVHlwZSA9IEdMX1VOU0lHTkVE
X1NIT1JUXzVfNl81OworICAgIC8vIEN1cnJlbnRseSBvbmx5IGZvcm1hdD1SR0JBLCB0eXBlPVVO
U0lHTkVEX0JZVEUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBzcGVjaWZpY2F0aW9uOiBodHRwOi8vd3d3
Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L3dlYmdsL3NwZWNzL2xhdGVzdC8KKyAgICAvLyBJZiB0aGlz
IGV2ZXIgY2hhbmdlcywgdGhpcyBjb2RlIHdpbGwgbmVlZCB0byBiZSB1cGRhdGVkLgorCisgICAg
Ly8gQ2FsY3VsYXRlIHRoZSBzdHJpZGVzIG9mIG91ciBkYXRhIGFuZCBjYW52YXMKKyAgICB1bnNp
Z25lZCBpbnQgZm9ybWF0U2l6ZSA9IDQ7IC8vIFJHQkEgVU5TSUdORURfQllURQorICAgIHVuc2ln
bmVkIGludCBkYXRhU3RyaWRlID0gd2lkdGggKiBmb3JtYXRTaXplOworICAgIHVuc2lnbmVkIGlu
dCBjYW52YXNTdHJpZGUgPSBtX2N1cnJlbnRXaWR0aCAqIGZvcm1hdFNpemU7CisKKyAgICAvLyBJ
ZiB3ZSBhcmUgdXNpbmcgYSBwYWNrIGFsaWdubWVudCBvZiA4LCB0aGVuIHdlIG5lZWQgdG8gYWxp
Z24gb3VyIHN0cmlkZXMgdG8gOCBieXRlIGJvdW5kYXJpZXMKKyAgICAvLyBTZWU6IGh0dHA6Ly9l
bi53aWtpcGVkaWEub3JnL3dpa2kvRGF0YV9zdHJ1Y3R1cmVfYWxpZ25tZW50IChjb21wdXRpbmcg
cGFkZGluZykKKyAgICBpbnQgcGFja0FsaWdubWVudDsKKyAgICBnbEdldEludGVnZXJ2KEdMX1BB
Q0tfQUxJR05NRU5ULCAmcGFja0FsaWdubWVudCk7CisgICAgaWYgKDggPT0gcGFja0FsaWdubWVu
dCkgeworICAgICAgICBkYXRhU3RyaWRlID0gKGRhdGFTdHJpZGUgKyA3KSAmIH43OworICAgICAg
ICBjYW52YXNTdHJpZGUgPSAoY2FudmFzU3RyaWRlICsgNykgJiB+NzsKICAgICB9CiAKLSAgICAv
LyBXZSBkb24ndCBhbGxvdyB0aGUgbG9naWMgd2hlcmUgc3RlbmNpbCBpcyByZXF1aXJlZCBhbmQg
ZGVwdGggaXMgbm90LgotICAgIC8vIFNlZSBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVBdHRy
aWJ1dGVzLgotICAgIGJvb2wgc3VwcG9ydFBhY2tlZERlcHRoU3RlbmNpbEJ1ZmZlciA9IChtX2F0
dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkgJiYgZ2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0
cygiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7CisgICAgdW5zaWduZWQgY2hhciogY2Fu
dmFzRGF0YSA9IG5ldyB1bnNpZ25lZCBjaGFyW2NhbnZhc1N0cmlkZSAqIG1fY3VycmVudEhlaWdo
dF07CisgICAgOjpnbFJlYWRQaXhlbHMoMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhl
aWdodCwgZm9ybWF0LCB0eXBlLCBjYW52YXNEYXRhKTsKIAotICAgIC8vIFJlc2l6ZSByZWd1bGFy
IEZCTy4KLSAgICBib29sIG11c3RSZXN0b3JlRkJPID0gZmFsc2U7Ci0gICAgaWYgKG1fYm91bmRG
Qk8gIT0gbV9mYm8pIHsKLSAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOwotICAgICAgICA6
OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9m
Ym8pOworICAgIC8vIElmIHdlIGZhaWxlZCB0byByZWFkIG91ciBjYW52YXMgZGF0YSBkdWUgdG8g
YSBHTCBlcnJvciwgZG9uJ3QgY29udGludWUKKyAgICBpbnQgZXJyb3IgPSBnbEdldEVycm9yKCk7
CisgICAgaWYgKEdMX05PX0VSUk9SICE9IGVycm9yKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKGVycm9yKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIDo6Z2xCaW5kVGV4dHVy
ZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOwotICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRV
UkVfMkQsIDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgY29sb3JG
b3JtYXQsIHBpeGVsRGF0YVR5cGUsIDApOwotICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyREVY
VChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xP
Ul9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAwKTsKLQotICAgIDo6Z2xC
aW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAgICA6Omds
VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKLSAgICA6Omds
QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7Ci0KLSAgICAvLyBXZSBkb24ndCBzdXBwb3J0
IGFudGlhbGlhc2luZyB5ZXQuIFNlZSBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVBdHRyaWJ1
dGVzLgotICAgIEFTU0VSVCghbV9hdHRycy5hbnRpYWxpYXMpOwotCi0gICAgaWYgKG1fYXR0cnMu
c3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKSB7Ci0gICAgICAgIC8vIFVzZSBhIDI0IGJpdCBkZXB0
aCBidWZmZXIgd2hlcmUgd2Uga25vdyB3ZSBoYXZlIGl0LgotICAgICAgICBpZiAoc3VwcG9ydFBh
Y2tlZERlcHRoU3RlbmNpbEJ1ZmZlcikgewotICAgICAgICAgICAgOjpnbEJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfMkQsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgICAgIDo6Z2xUZXhJ
bWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lM
LCB3aWR0aCwgaGVpZ2h0LCAwLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8yNF84LCAwKTsKLSAgICAgICAgICAgIGlmICht
X2F0dHJzLnN0ZW5jaWwpCi0gICAgICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJE
KEdMX0ZSQU1FQlVGRkVSLCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQsIEdMX1RFWFRVUkVfMkQsIG1f
ZGVwdGhTdGVuY2lsQnVmZmVyLCAwKTsKLSAgICAgICAgICAgIGlmIChtX2F0dHJzLmRlcHRoKQot
ICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwg
R0xfREVQVEhfQVRUQUNITUVOVCwgR0xfVEVYVFVSRV8yRCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIs
IDApOwotICAgICAgICAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkgewotICAgICAg
ICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5E
RVJCVUZGRVIsIG1fc3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgICAgICAgICAgOjpnbFJlbmRlcmJ1
ZmZlclN0b3JhZ2VFWFQoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgR0xfU1RFTkNJ
TF9JTkRFWDgsIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNz
Q29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJC
VUZGRVIsIG1fc3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAo
bV9hdHRycy5kZXB0aCkgewotICAgICAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhU
KEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fZGVwdGhCdWZmZXIpOwotICAgICAg
ICAgICAgICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpS
RU5ERVJCVUZGRVIsIEdMX0RFUFRIX0NPTVBPTkVOVDE2LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAg
ICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9kZXB0aEJ1ZmZlcik7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHcmFwaGljc0NvbnRleHQz
RDo6UkVOREVSQlVGRkVSLCAwKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoZ2xDaGVja0Zy
YW1lYnVmZmVyU3RhdHVzRVhUKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7Ci0gICAgICAgIC8vIEZJWE1F
OiBjbGVhbnVwCi0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgLy8gQ2xlYXIgb3VyIGRh
dGEgaW4gY2FzZSBzb21lIG9mIGl0IGxpZXMgb3V0c2lkZSB0aGUgYm91bmRzIG9mIG91ciBjYW52
YXMKKyAgICAvLyBUT0RPOiBkb24ndCBkbyB0aGlzIGlmIGFsbCBvZiB0aGUgZGF0YSBsaWVzIGlu
c2lkZSB0aGUgYm91bmRzIG9mIHRoZSBjYW52YXMKKyAgICBtZW1zZXQoZGF0YSwgMCwgZGF0YVN0
cmlkZSAqIGhlaWdodCk7CisKKyAgICAvLyBDYWxjdWxhdGUgdGhlIGludGVyc2VjdGlvbiBvZiBv
dXIgY2FudmFzIGFuZCBkYXRhIGJvdW5kcworICAgIEludFJlY3QgZGF0YVJlY3QoeCwgeSwgd2lk
dGgsIGhlaWdodCk7CisgICAgSW50UmVjdCBjYW52YXNSZWN0KDAsIDAsIG1fY3VycmVudFdpZHRo
LCBtX2N1cnJlbnRIZWlnaHQpOworICAgIEludFJlY3Qgbm9uWmVyb0RhdGFSZWN0ID0gaW50ZXJz
ZWN0aW9uKGRhdGFSZWN0LCBjYW52YXNSZWN0KTsKKworICAgIHVuc2lnbmVkIGludCB4RGF0YU9m
ZnNldCA9IHggPCAwID8gLXggKiBmb3JtYXRTaXplIDogMDsKKyAgICB1bnNpZ25lZCBpbnQgeURh
dGFPZmZzZXQgPSB5IDwgMCA/IC15ICogZGF0YVN0cmlkZSA6IDA7CisgICAgdW5zaWduZWQgaW50
IHhDYW52YXNPZmZzZXQgPSBub25aZXJvRGF0YVJlY3QueCgpICogZm9ybWF0U2l6ZTsKKyAgICB1
bnNpZ25lZCBpbnQgeUNhbnZhc09mZnNldCA9IG5vblplcm9EYXRhUmVjdC55KCkgKiBjYW52YXNT
dHJpZGU7CisgICAgdW5zaWduZWQgY2hhciogZHN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cio+KGRhdGEpICsgeERhdGFPZmZzZXQgKyB5RGF0YU9mZnNldDsKKyAgICB1bnNpZ25lZCBjaGFy
KiBzcmMgPSBjYW52YXNEYXRhICsgeENhbnZhc09mZnNldCArIHlDYW52YXNPZmZzZXQ7CisgICAg
Zm9yIChpbnQgcm93ID0gMDsgcm93IDwgbm9uWmVyb0RhdGFSZWN0LmhlaWdodCgpOyByb3crKykg
eworICAgICAgICBtZW1jcHkoZHN0LCBzcmMsIG5vblplcm9EYXRhUmVjdC53aWR0aCgpICogZm9y
bWF0U2l6ZSk7CisgICAgICAgIGRzdCArPSBkYXRhU3RyaWRlOworICAgICAgICBzcmMgKz0gY2Fu
dmFzU3RyaWRlOwogICAgIH0KIAotICAgIHJldHVybiBtdXN0UmVzdG9yZUZCTzsKKyAgICBkZWxl
dGUgW10gY2FudmFzRGF0YTsKKyAgICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBmb3JtYXQsIHR5cGUsIGRhdGEpOworCisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1f
Ym91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZl
ckVYVChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzQW5kQ29udmVydFRvQkdSQUlm
TmVjZXNzYXJ5KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1bnNpZ25lZCBj
aGFyKiBwaXhlbHMpCit7CisgICAgOjpnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwg
R0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgcGl4ZWxzKTsKKyAgICBpbnQgdG90YWxCeXRlcyA9
IHdpZHRoICogaGVpZ2h0ICogNDsKKyAgICBpZiAoaXNHTEVTMkNvbXBsaWFudCgpKSB7CisgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG90YWxCeXRlczsgaSArPSA0KQorICAgICAgICAgICAg
c3RkOjpzd2FwKHBpeGVsc1tpXSwgcGl4ZWxzW2kgKyAyXSk7IC8vIENvbnZlcnQgdG8gQkdSQS4K
KyAgICB9CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc29sdmVNdWx0aXNhbXBsaW5n
SWZOZWNlc3NhcnkoY29uc3QgSW50UmVjdCYgcmVjdCkKQEAgLTE1Niw2ICsxNTEsMTcgQEAgYm9v
bCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RlbnVtIGludGUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dmFsaWRhdGVBdHRyaWJ1dGVzKCkKK3sKKyAgICB2YWxpZGF0ZURlcHRoU3Rl
bmNpbCgiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7CisKKyAgICBpZiAobV9hdHRycy5h
bnRpYWxpYXMpIHsKKyAgICAgICAgRXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0gZ2V0RXh0ZW5z
aW9ucygpOworICAgICAgICBpZiAoIWV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9JTUdfbXVsdGlz
YW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIikpCisgICAgICAgICAgICBtX2F0dHJzLmFudGlhbGlh
cyA9IGZhbHNlOworICAgIH0KK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhSYW5n
ZShHQzNEY2xhbXBmIHpOZWFyLCBHQzNEY2xhbXBmIHpGYXIpCiB7CiAgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CkBAIC0xNjgsNiArMTc0LDE5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNs
ZWFyRGVwdGgoR0MzRGNsYW1wZiBkZXB0aCkKICAgICA6OmdsQ2xlYXJEZXB0aGYoZGVwdGgpOwog
fQogCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK0V4dGVuc2lvbnMzRCogR3JhcGhpY3NDb250
ZXh0M0Q6OmdldEV4dGVuc2lvbnMoKQoreworICAgIGlmICghbV9leHRlbnNpb25zKQorICAgICAg
ICBtX2V4dGVuc2lvbnMgPSBhZG9wdFB0cihuZXcgRXh0ZW5zaW9uczNET3BlbkdMRVModGhpcykp
OworICAgIHJldHVybiBtX2V4dGVuc2lvbnMuZ2V0KCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250
ZXh0M0Q6OnN5c3RlbUFsbG93c011bHRpc2FtcGxpbmdPbkFUSUNhcmRzKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gZmFsc2U7IC8vIG5vdCBhcHBsaWNhYmxlCit9CisKK30KIAogI2VuZGlmIC8vIFVT
RSgzRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKaW5kZXggZjEyZjBmZWFmZjVhMzcz
OTczZDQxZmVhMzc4ZGE0MzFkMWZhZDcwNi4uYzcxOTFlMzViZTc2NjBiM2QyNDUzMWJmOGI4ODU1
MjIwYTU2YmNmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKQEAgLTk0LDYgKzk0LDEzIEBAIGJv
b2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJDb21wbGlhbnQoKSBjb25zdAogI2VuZGlmCiB9
CiAKKyNpZiAhVVNFKE9QRU5HTF9FU18yKQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFz
ZVNoYWRlckNvbXBpbGVyKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorI2VuZGlmCisK
IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0LCBIb3N0V2luZG93KiBob3N0V2luZG93KQogICAgIDogbV9j
b250ZXh0KGNvbnRleHQpCiAgICAgLCBtX2hvc3RXaW5kb3coaG9zdFdpbmRvdykK
</data>

          </attachment>
      

    </bug>

</bugzilla>