<?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>60262</bug_id>
          
          <creation_ts>2011-05-05 04:36:07 -0700</creation_ts>
          <short_desc>Eliminate WebCore/dom/InputElement.{cpp,h}</short_desc>
          <delta_ts>2011-05-06 21:24:34 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Minor</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>59678</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kent Tamura">tkent</reporter>
          <assigned_to name="Kent Tamura">tkent</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>rniwa</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>398659</commentid>
    <comment_count>0</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-05-05 04:36:07 -0700</bug_when>
    <thetext>InputElement is not needed anymore because WML was removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398661</commentid>
    <comment_count>1</comment_count>
      <attachid>92403</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-05-05 04:40:04 -0700</bug_when>
    <thetext>Created attachment 92403
Try</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398662</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-05 04:42:15 -0700</bug_when>
    <thetext>Attachment 92403 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/W...&quot; exit_code: 1

Source/WebCore/html/HTMLInputElement.cpp:1021:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Total errors found: 1 in 17 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>398663</commentid>
    <comment_count>3</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-05-05 05:00:33 -0700</bug_when>
    <thetext>Attachment 92403 did not build on qt:
Build output: http://queues.webkit.org/results/8551863</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398667</commentid>
    <comment_count>4</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-05-05 05:12:01 -0700</bug_when>
    <thetext>Attachment 92403 did not build on win:
Build output: http://queues.webkit.org/results/8554884</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398701</commentid>
    <comment_count>5</comment_count>
      <attachid>92412</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-05-05 06:58:31 -0700</bug_when>
    <thetext>Created attachment 92412
Try 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398716</commentid>
    <comment_count>6</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-05-05 08:10:09 -0700</bug_when>
    <thetext>This looks awesome! Yay! Can&apos;t wait to see the patch that&apos;s ready for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398833</commentid>
    <comment_count>7</comment_count>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-05-05 10:52:10 -0700</bug_when>
    <thetext>Attachment 92412 did not build on gtk:
Build output: http://queues.webkit.org/results/8571466</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398844</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-05-05 11:09:15 -0700</bug_when>
    <thetext>Awesome!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398994</commentid>
    <comment_count>9</comment_count>
      <attachid>92460</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-05-05 13:55:13 -0700</bug_when>
    <thetext>Created attachment 92460
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399072</commentid>
    <comment_count>10</comment_count>
      <attachid>92476</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-05-05 14:54:13 -0700</bug_when>
    <thetext>Created attachment 92476
Patch 2

Rebase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399317</commentid>
    <comment_count>11</comment_count>
      <attachid>92538</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-05-05 21:47:28 -0700</bug_when>
    <thetext>Created attachment 92538
Patch 3

GTK build fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399734</commentid>
    <comment_count>12</comment_count>
      <attachid>92538</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-05-06 12:39:59 -0700</bug_when>
    <thetext>Comment on attachment 92538
Patch 3

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

&gt; Source/WebCore/html/HTMLInputElement.cpp:518
&gt; +        m_value =  sanitizeValue(fastGetAttribute(valueAttr));

Nit: Two spaces after =.

&gt; Source/WebCore/html/HTMLInputElement.cpp:649
&gt; +        int maxLength = attr-&gt;isNull() ? maximumLength : attr-&gt;value().toInt();
&gt; +        if (maxLength &lt;= 0 || maxLength &gt; maximumLength)
&gt; +            maxLength = maximumLength;
&gt; +        int oldMaxLength = m_maxLength;
&gt; +        m_maxLength = maxLength;
&gt; +        if (oldMaxLength != maxLength)
&gt; +            updateValueIfNeeded();

I would have preferred to keep this in a helper function.

&gt; Source/WebCore/html/HTMLInputElement.cpp:655
&gt; +        if (renderer())
&gt; +            renderer()-&gt;setNeedsLayoutAndPrefWidthsRecalc();

Maybe we need to call setNeedsStyleRecalc here as well because we could have a style rule that matches size attribute such as input[size=5]. Of course, that would be a separate patch.

&gt; Source/WebCore/html/HTMLInputElement.cpp:1519
&gt; +static inline const AtomicString&amp; formatCodes()
&gt; +{
&gt; +    DEFINE_STATIC_LOCAL(AtomicString, codes, (&quot;AaNnXxMm&quot;));
&gt; +    return codes;
&gt; +}

This entire section needs to be cleaned up at some point :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400009</commentid>
    <comment_count>13</comment_count>
      <attachid>92538</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-05-06 19:25:52 -0700</bug_when>
    <thetext>Comment on attachment 92538
Patch 3

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

&gt;&gt; Source/WebCore/html/HTMLInputElement.cpp:518
&gt;&gt; +        m_value =  sanitizeValue(fastGetAttribute(valueAttr));
&gt; 
&gt; Nit: Two spaces after =.

Fixed.

&gt;&gt; Source/WebCore/html/HTMLInputElement.cpp:649
&gt;&gt; +            updateValueIfNeeded();
&gt; 
&gt; I would have preferred to keep this in a helper function.

ok, I revived parseMaxLengthAttribute().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400010</commentid>
    <comment_count>14</comment_count>
      <attachid>92678</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-05-06 19:27:20 -0700</bug_when>
    <thetext>Created attachment 92678
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400027</commentid>
    <comment_count>15</comment_count>
      <attachid>92678</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-05-06 21:24:26 -0700</bug_when>
    <thetext>Comment on attachment 92678
Patch for landing

Clearing flags on attachment: 92678

Committed r85998: &lt;http://trac.webkit.org/changeset/85998&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400028</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-05-06 21:24:34 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92403</attachid>
            <date>2011-05-05 04:40:04 -0700</date>
            <delta_ts>2011-05-05 06:58:23 -0700</delta_ts>
            <desc>Try</desc>
            <filename>bug-60262-20110505204001.patch</filename>
            <type>text/plain</type>
            <size>90671</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODU4NDcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggOTI3OWIw
ZmYwYzIwMTQzZGNhZGIzMmNiNTY4NjdhMDdmYzUyZDMzMS4uY2QxMWQ2YzgwNGZjODc0OGI5YzVi
MzkzNzgwNTM0YzJkZDY1ZWM4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTU3MCw3ICs1NzAs
NiBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgZG9tL0V4Y2VwdGlvbkJhc2UuY3BwCiAgICAg
ZG9tL0V4Y2VwdGlvbkNvZGUuY3BwCiAgICAgZG9tL0ljb25VUkwuY3BwCi0gICAgZG9tL0lucHV0
RWxlbWVudC5jcHAKICAgICBkb20vS2V5Ym9hcmRFdmVudC5jcHAKICAgICBkb20vTWVzc2FnZUNo
YW5uZWwuY3BwCiAgICAgZG9tL01lc3NhZ2VFdmVudC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3Y2E4OGQ2
MDc3YTBiNmE0ZWI5Yzc3MWFkZGExODJiMWYyZjdhZTAwLi44Mzk5MmNkZmIzMmVhMTMwOWYzYzQ2
ZjRhYTk3ZWZmNjI3Mjg4YmYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTA0IEBACisyMDExLTA1
LTA1ICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbGltaW5hdGUgV2ViQ29yZS9kb20vSW5w
dXRFbGVtZW50LntjcHAsaH0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTYwMjYyCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisgICAgICAgICogQ01h
a2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBX
ZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29y
ZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvQVhPYmplY3RDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hl
Ojp0ZXh0TWFya2VyRGF0YUZvclZpc2libGVQb3NpdGlvbik6CisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzUGFzc3dvcmRGaWVsZCk6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc0luZGV0ZXJtaW5hdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNOYXRpdmVDaGVja2JveE9y
UmFkaW8pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXND
aGVja2VkKToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpjaGVja09u
ZVNlbGVjdG9yKToKKyAgICAgICAgKiBkb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDaGVja2VkUmFkaW9CdXR0b25zOjpyZW1vdmVCdXR0b24pOgorICAgICAg
ICAqIGRvbS9JbnB1dEVsZW1lbnQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGRvbS9JbnB1dEVs
ZW1lbnQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpOb2RlOjp0b0lucHV0RWxlbWVudCk6CisgICAgICAgICogZG9tL05vZGUuaDoKKyAgICAg
ICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElu
cHV0RWxlbWVudDo6SFRNTElucHV0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5w
dXRFbGVtZW50Ojpmb3JtQ29udHJvbE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0
RWxlbWVudDo6dG9vTG9uZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojp1
cGRhdGVGb2N1c0FwcGVhcmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVu
dDo6YWJvdXRUb1VubG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojpo
YW5kbGVGb2N1c0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6Omhh
bmRsZUJsdXJFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojp1cGRh
dGVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6Y29weU5vbkF0dHJpYnV0ZVByb3Bl
cnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6dmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c3VnZ2VzdGVkVmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0U3VnZ2VzdGVkVmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWVGcm9tUmVuZGVyZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0RmlsZUxpc3RGcm9tUmVuZGVyZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0RGVmYXVsdE5hbWUpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6bWF4TGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxJbnB1dEVsZW1lbnQ6OmNhY2hlU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmZv
cm1hdENvZGVzKToKKyAgICAgICAgKFdlYkNvcmU6OmN1cnNvclBvc2l0aW9uVG9NYXNrSW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6aXNDb25mb3JtVG9JbnB1dE1h
c2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6dmFsaWRhdGVJbnB1dE1h
c2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0V2FwSW5wdXRGb3Jt
YXQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6cmVwbGFjZUVPTEFuZExp
bWl0TGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNhbml0aXpl
VXNlcklucHV0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6aGFu
ZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0
RWxlbWVudDo6bm90aWZ5Rm9ybVN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
SW5wdXRFbGVtZW50Ojp1cGRhdGVWYWx1ZUlmTmVlZGVkKToKKyAgICAgICAgKiBodG1sL0hUTUxJ
bnB1dEVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnRvSW5w
dXRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmlzSW5kZXRl
cm1pbmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojppc0F1dG9maWxs
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c3VwcG9ydHNNYXhMZW5n
dGgpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6Y2FjaGVkU2VsZWN0aW9u
U3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6Y2FjaGVkU2VsZWN0
aW9uRW5kKToKKyAgICAgICAgKiBodG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwOgorICAgICAg
ICAqIGh0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRG
aWVsZElucHV0VHlwZTo6c2FuaXRpemVWYWx1ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmFkZFNlYXJjaFJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnN0b3BTZWFy
Y2hFdmVudFRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZTo6c2hvd1BvcHVwKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6aGlkZVBvcHVwKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZTo6c3VidHJlZUhhc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lOjp1cGRhdGVGcm9tRWxlbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZUlubmVyQmxvY2tTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZVJl
c3VsdHNCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6OmNyZWF0ZUNhbmNlbEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y3JlYXRlSW5uZXJTcGluQnV0dG9uU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjcmVhdGVPdXRl
clNwaW5CdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6OmNyZWF0ZVNwZWVjaEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6dmlzaWJpbGl0eUZvckNhbmNlbEJ1dHRvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnN0YXJ0U2VhcmNo
RXZlbnRUaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmU6OnNlYXJjaEV2ZW50VGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmU6OnZhbHVlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNldFRleHRGcm9tSXRlbSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmlucHV0RWxlbWVudCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUaGVtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6
aXNDaGVja2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjppc0luZGV0ZXJtaW5h
dGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnNob3VsZEhhdmVTcGluQnV0dG9u
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuaDoKKwogMjAxMS0wNS0wNCAgWXVy
eSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBQYXZlbCBGZWxkbWFuLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggYWQzMTI2
Y2NiOWVmMmMzZDZmOTIzNmQ0NDQ1NjZkYjQwYjE0ZTQxNi4uMWMwMjFlYTViZjc3YjhhY2RkYmJk
ODgyNTE1M2QxMjVjMTdlN2U5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0x
MTUzLDggKzExNTMsNiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2Rv
bS9JZ25vcmVEZXN0cnVjdGl2ZVdyaXRlQ291bnRJbmNyZW1lbnRlci5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9kb20vSWNvblVSTC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9JY29uVVJMLmggXAot
CVNvdXJjZS9XZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9k
b20vSW5wdXRFbGVtZW50LmggXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9IYXNoQ2hhbmdlRXZlbnQu
aCBcCiAJU291cmNlL1dlYkNvcmUvZG9tL0tleWJvYXJkRXZlbnQuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9kb20vS2V5Ym9hcmRFdmVudC5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZXhwLmluIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXggZGVhODk1
MDdkZjNmYTU1OTM4OGE0NzJkYzVlYjk4N2EzNzUyNDI1Ny4uMmI0ZjBiZjk0NTQwNjJjYTQ0Njcx
MzcwNzk4NGYzNmExZGMwNjliZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5l
eHAuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTQzNiw2ICs0MzYs
NyBAQCBfX1pON1dlYkNvcmUxNkZvbnRGYWxsYmFja0xpc3QxNXJlbGVhc2VGb250RGF0YUV2CiBf
X1pON1dlYkNvcmUxNkZvbnRQbGF0Zm9ybURhdGFDMUVQNk5TRm9udGZiYk5TXzE1Rm9udE9yaWVu
dGF0aW9uRU5TXzE1VGV4dE9yaWVudGF0aW9uRU5TXzE2Rm9udFdpZHRoVmFyaWFudEUKIF9fWk43
V2ViQ29yZTE2Rm9udFBsYXRmb3JtRGF0YUQxRXYKIF9fWk43V2ViQ29yZTE2SFRNTElucHV0RWxl
bWVudDEzc2V0QXV0b2ZpbGxlZEViCitfX1pON1dlYkNvcmUxNkhUTUxJbnB1dEVsZW1lbnQxNXNl
dFZhbHVlRm9yVXNlckVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTE2SWNvbkRhdGFiYXNl
QmFzZTI4c3luY2hyb25vdXNJY29uVVJMRm9yUGFnZVVSTEVSS04zV1RGNlN0cmluZ0UKIF9fWk43
V2ViQ29yZTE2SWNvbkRhdGFiYXNlQmFzZTRvcGVuRVJLTjNXVEY2U3RyaW5nRVM0XwogX19aTjdX
ZWJDb3JlMTZMZWdhY3lXZWJBcmNoaXZlMTljcmVhdGVGcm9tU2VsZWN0aW9uRVBOU181RnJhbWVF
CkBAIC0xMTQwLDcgKzExNDEsOSBAQCBfX1pOSzdXZWJDb3JlMTVWaXNpYmxlUG9zaXRpb24xOWFi
c29sdXRlQ2FyZXRCb3VuZHNFdgogX19aTks3V2ViQ29yZTE1VmlzaWJsZVBvc2l0aW9uNG5leHRF
TlNfMjdFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGVFCiBfX1pOSzdXZWJDb3JlMTVWaXNpYmxl
UG9zaXRpb244cHJldmlvdXNFTlNfMjdFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGVFCiBfX1pO
SzdXZWJDb3JlMTZGb250RmFsbGJhY2tMaXN0MTBmb250RGF0YUF0RVBLTlNfNEZvbnRFagorX19a
Tks3V2ViQ29yZTE2SFRNTElucHV0RWxlbWVudDExaXNUZXh0RmllbGRFdgogX19aTks3V2ViQ29y
ZTE2SFRNTElucHV0RWxlbWVudDEyYXV0b0NvbXBsZXRlRXYKK19fWk5LN1dlYkNvcmUxNkhUTUxJ
bnB1dEVsZW1lbnQxNWlzUGFzc3dvcmRGaWVsZEV2CiBfX1pOSzdXZWJDb3JlMTZIVE1MSW5wdXRF
bGVtZW50MjFsYXN0Q2hhbmdlV2FzVXNlckVkaXRFdgogX19aTks3V2ViQ29yZTE2SWNvbkRhdGFi
YXNlQmFzZTEyZGF0YWJhc2VQYXRoRXYKIF9fWk5LN1dlYkNvcmUxNlJlc291cmNlUmVzcG9uc2Ux
M25zVVJMUmVzcG9uc2VFdgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGUxODVhZjg2NzM1MTQ0ZTk2OWIw
NTIxMjU1YmM2YWQyZWJjZmU2Y2IuLmE4M2UxNzQyZjhiNDAwMjc1MmZlMTUwMWVlMjdmZDNhYzc4
YmY3OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTUyOSw3ICs1MjksNiBAQAogICAgICAgICAgICAg
J2RvbS9FdmVudFRhcmdldC5oJywKICAgICAgICAgICAgICdkb20vRXhjZXB0aW9uQ29kZS5oJywK
ICAgICAgICAgICAgICdkb20vRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uLmgnLAotICAgICAg
ICAgICAgJ2RvbS9JbnB1dEVsZW1lbnQuaCcsCiAgICAgICAgICAgICAnZG9tL0tleWJvYXJkRXZl
bnQuaCcsCiAgICAgICAgICAgICAnZG9tL01hcHBlZEF0dHJpYnV0ZUVudHJ5LmgnLAogICAgICAg
ICAgICAgJ2RvbS9NZXNzYWdlUG9ydC5oJywKQEAgLTI0NzMsNyArMjQ3Miw2IEBACiAgICAgICAg
ICAgICAnZG9tL0lnbm9yZURlc3RydWN0aXZlV3JpdGVDb3VudEluY3JlbWVudGVyLmgnLAogICAg
ICAgICAgICAgJ2RvbS9JY29uVVJMLmNwcCcsCiAgICAgICAgICAgICAnZG9tL0ljb25VUkwuaCcs
Ci0gICAgICAgICAgICAnZG9tL0lucHV0RWxlbWVudC5jcHAnLAogICAgICAgICAgICAgJ2RvbS9L
ZXlib2FyZEV2ZW50LmNwcCcsCiAgICAgICAgICAgICAnZG9tL01lc3NhZ2VDaGFubmVsLmNwcCcs
CiAgICAgICAgICAgICAnZG9tL01lc3NhZ2VDaGFubmVsLmgnLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCBi
M2MwNTYxY2YwOGNjNjQzOGNiOTZmNjFmNjA3MTQzMzM1ZTNhNWZlLi5jYTkxMDY5ZDMyOTgwNTZi
MDlhMTYyODI1YWE2NzlhM2FiMWQyMjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnBybworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtNDkzLDcgKzQ5Myw2
IEBAIFNPVVJDRVMgKz0gXAogICAgIGRvbS9FeGNlcHRpb25CYXNlLmNwcCBcCiAgICAgZG9tL0V4
Y2VwdGlvbkNvZGUuY3BwIFwKICAgICBkb20vSWNvblVSTC5jcHAgXAotICAgIGRvbS9JbnB1dEVs
ZW1lbnQuY3BwIFwKICAgICBkb20vS2V5Ym9hcmRFdmVudC5jcHAgXAogICAgIGRvbS9NZXNzYWdl
Q2hhbm5lbC5jcHAgXAogICAgIGRvbS9NZXNzYWdlRXZlbnQuY3BwIFwKQEAgLTE0NjksNyArMTQ2
OCw2IEBAIEhFQURFUlMgKz0gXAogICAgIGRvbS9FeGNlcHRpb25CYXNlLmggXAogICAgIGRvbS9F
eGNlcHRpb25Db2RlLmggXAogICAgIGRvbS9GcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24uaCBc
Ci0gICAgZG9tL0lucHV0RWxlbWVudC5oIFwKICAgICBkb20vS2V5Ym9hcmRFdmVudC5oIFwKICAg
ICBkb20vTWVzc2FnZUNoYW5uZWwuaCBcCiAgICAgZG9tL01lc3NhZ2VFdmVudC5oIFwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggZTUzYmRmNjI4
NDBlMGI2MTdlZjA1MTg2NzdiNDgxY2EzOGZiZjRjYy4uZjFkOWVmNWU0ZDQwNjNkODQxNmExNjJk
YjIwYTFhMmRhNDliOGIxMSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oKQEAgLTQ0NTY2LDYyICs0NDU2Niw2IEBACiAJCQkJPgogCQkJPC9GaWxlPgog
CQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxJbnB1dEVsZW1lbnQuY3BwIgotCQkJ
CT4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iRGVidWd8V2luMzIiCi0JCQkJ
CUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1l
PSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0J
CQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCi0JCQkJCUV4
Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJW
Q0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJ
PEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IkRlYnVnX0NhaXJvX0NGTGl0ZXxXaW4zMiIK
LQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJ
CU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlv
bj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iUmVsZWFzZV9DYWlyb19DRkxp
dGV8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxU
b29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNv
bmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IkRlYnVnX0Fs
bHxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJCT4KLQkJCQkJPFRv
b2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29u
ZmlndXJhdGlvbj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iUHJvZHVjdGlv
bnxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJCT4KLQkJCQkJPFRv
b2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29u
ZmlndXJhdGlvbj4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxk
b21cSW5wdXRFbGVtZW50LmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKIAkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXGRvbVxLZXlib2FyZEV2ZW50LmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25m
aWd1cmF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggZDBjZjY5NmFlYzBkMTZkNGFjNTk4M2U2ZjU2ZWY1MjkwODQ0NWRlMC4u
MzU1ZjAzNzU1OWYzNjE1ZjRlZjM0MzEwNWE4YjMyOTc2ZTBlMzBmZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtOTUsMTQgKzk1
LDEyIEBACiAJCTA4NTRCMDIzMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdSb290SW5saW5lQm94Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODU0QjAxMTEy
NTVFNEU2MDBCOUNERDAgLyogU1ZHUm9vdElubGluZUJveC5oICovOyB9OwogCQkwODU0QjAyNTEy
NTVFNEU2MDBCOUNERDAgLyogU1ZHVGV4dFF1ZXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODU0QjAxMzEyNTVFNEU2MDBCOUNERDAgLyogU1ZHVGV4
dFF1ZXJ5LmggKi87IH07CiAJCTA4NTc5NzA5MTI3ODM5NEMwMEE4RUM1RiAvKiBTVkdBbmltYXRl
ZEJvb2xlYW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDA4NTc5NzA4MTI3ODM5NEMwMEE4RUM1RiAvKiBTVkdBbmltYXRlZEJvb2xlYW4uaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwODU5MUFBNTBGMDg1
QzRFMDA5QkFDQjEgLyogSW5wdXRFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwODU5MUFBNDBGMDg1QzRFMDA5QkFDQjEgLyogSW5wdXRFbGVt
ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MDg1QTE1OTMxMjg5QThERDAwMjcxMEUzIC8qIFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdFByb3Bl
cnR5VGVhck9mZi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDg1QTE1OTIxMjg5QThERDAwMjcxMEUzIC8qIFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdFBy
b3BlcnR5VGVhck9mZi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTA4NUI5MkJBMEVGREU3M0QwMEU2MTIzQyAvKiBGb3JtRGF0YUJ1aWxkZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg1QjkyQjgw
RUZERTczRDAwRTYxMjNDIC8qIEZvcm1EYXRhQnVpbGRlci5jcHAgKi87IH07CiAJCTA4NUI5MkJC
MEVGREU3M0QwMEU2MTIzQyAvKiBGb3JtRGF0YUJ1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NUI5MkI5MEVGREU3M0QwMEU2MTIzQyAvKiBG
b3JtRGF0YUJ1aWxkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9Owog
CQkwODY0MUQ0NzEyMTQyRjdEMDA4REU5RjYgLyogUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1h
Z2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg2
NDFENDUxMjE0MkY3RDAwOERFOUY2IC8qIFJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlLmNw
cCAqLzsgfTsKIAkJMDg2NDFENDgxMjE0MkY3RDAwOERFOUY2IC8qIFJlbmRlckltYWdlUmVzb3Vy
Y2VTdHlsZUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwODY0MUQ0NjEyMTQyRjdEMDA4REU5RjYgLyogUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxl
SW1hZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwODZCQkQwRjEzNjAzOUMyMDA4QjE1RDggLyogR2x5cGguaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NkJCRDBFMTM2MDM5QzIwMDhCMTVEOCAvKiBH
bHlwaC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0J
CTA4NzAwQkU3MEYwODZDNTMwMDkxOTQxOSAvKiBJbnB1dEVsZW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg3MDBCRTYwRjA4NkM1MzAwOTE5
NDE5IC8qIElucHV0RWxlbWVudC5jcHAgKi87IH07CiAJCTA4NzI4MTU1MEYyNkI5QjYwMEFGQzU5
NiAvKiBPcHRpb25FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDA4NzI4MTUxMEYyNkI5QjYwMEFGQzU5NiAvKiBPcHRpb25FbGVtZW50LmNw
cCAqLzsgfTsKIAkJMDg3MjgxNTYwRjI2QjlCNjAwQUZDNTk2IC8qIE9wdGlvbkVsZW1lbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NzI4MTUyMEYy
NkI5QjYwMEFGQzU5NiAvKiBPcHRpb25FbGVtZW50LmggKi87IH07CiAJCTA4NzI4MTU3MEYyNkI5
QjYwMEFGQzU5NiAvKiBPcHRpb25Hcm91cEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg3MjgxNTMwRjI2QjlCNjAwQUZDNTk2IC8qIE9w
dGlvbkdyb3VwRWxlbWVudC5jcHAgKi87IH07CkBAIC02NDU2LDE0ICs2NDU0LDEyIEBACiAJCTA4
NTRCMDEyMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdUZXh0UXVlcnkuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHVGV4dFF1ZXJ5LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMDg1NEIwMTMxMjU1RTRFNjAwQjlDREQwIC8qIFNWR1RleHRRdWVyeS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdUZXh0UXVlcnkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg1Nzk3MDgxMjc4Mzk0QzAwQThFQzVGIC8qIFNWR0Fu
aW1hdGVkQm9vbGVhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmlt
YXRlZEJvb2xlYW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDg1OTFBQTQwRjA4
NUM0RTAwOUJBQ0IxIC8qIElucHV0RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbnB1dEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg1
QTE1OTIxMjg5QThERDAwMjcxMEUzIC8qIFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdFByb3BlcnR5
VGVhck9mZi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRlZFRy
YW5zZm9ybUxpc3RQcm9wZXJ0eVRlYXJPZmYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMDg1QjkyQjgwRUZERTczRDAwRTYxMjNDIC8qIEZvcm1EYXRhQnVpbGRlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb3JtRGF0YUJ1aWxkZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODVCOTJCOTBFRkRFNzNEMDBFNjEyM0MgLyogRm9y
bURhdGFCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvcm1EYXRh
QnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODY0MUQ0NTEyMTQyRjdE
MDA4REU5RjYgLyogUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODY0MUQ0NjEyMTQyRjdEMDA4REU5
RjYgLyogUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg2QkJEMEUxMzYwMzlDMjAwOEIxNUQ4IC8qIEdseXBoLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdseXBoLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTA4NzAwQkU2MEYwODZDNTMwMDkxOTQxOSAvKiBJbnB1dEVsZW1lbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5wdXRFbGVtZW50LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg3MjgxNTEwRjI2QjlCNjAwQUZDNTk2
IC8qIE9wdGlvbkVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gT3B0aW9uRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NzI4
MTUyMEYyNkI5QjYwMEFGQzU5NiAvKiBPcHRpb25FbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE9wdGlvbkVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMDg3MjgxNTMwRjI2QjlCNjAwQUZDNTk2IC8qIE9wdGlvbkdyb3VwRWxlbWVudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcHRpb25Hcm91cEVsZW1lbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTkyNDQsOCArMTkyNDAsNiBAQAog
CQkJCTI0NDJCQkY4MTE5NEM5RDMwMEQ0OTQ2OSAvKiBIYXNoQ2hhbmdlRXZlbnQuaCAqLywKIAkJ
CQk4NDgyQjc0NDExOThDMzJFMDBCRkIwMDUgLyogSGFzaENoYW5nZUV2ZW50LmlkbCAqLywKIAkJ
CQk4QUI0QkM3NjEyNkZEQjcxMDBERUI3MjcgLyogSWdub3JlRGVzdHJ1Y3RpdmVXcml0ZUNvdW50
SW5jcmVtZW50ZXIuaCAqLywKLQkJCQkwODcwMEJFNjBGMDg2QzUzMDA5MTk0MTkgLyogSW5wdXRF
bGVtZW50LmNwcCAqLywKLQkJCQkwODU5MUFBNDBGMDg1QzRFMDA5QkFDQjEgLyogSW5wdXRFbGVt
ZW50LmggKi8sCiAJCQkJODUwMzFCMkQwQTQ0RUZDNzAwRjk5MkUwIC8qIEtleWJvYXJkRXZlbnQu
Y3BwICovLAogCQkJCTg1MDMxQjJFMEE0NEVGQzcwMEY5OTJFMCAvKiBLZXlib2FyZEV2ZW50Lmgg
Ki8sCiAJCQkJMTRDRjdDMjAwOUY3MTEwNjAwRUIzNjY1IC8qIEtleWJvYXJkRXZlbnQuaWRsICov
LApAQCAtMjExNDgsNyArMjExNDIsNiBAQAogCQkJCUE4Q0ZGNUUzMEExNTVBMDUwMDBBNDIzNCAv
KiBJbmxpbmVGbG93Qm94LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0U3ODkxNjExMjBENjA4MDA2
MEVDRTUgLyogSW5saW5lSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUE0ODVBMDk3
RDkzMDIwMDk0QzlFNCAvKiBJbmxpbmVUZXh0Qm94LmggaW4gSGVhZGVycyAqLywKLQkJCQkwODU5
MUFBNTBGMDg1QzRFMDA5QkFDQjEgLyogSW5wdXRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkzN0UzNTI0RDEyNDUwQzY2MDBCQUY1RDkgLyogSW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5MzMwOURFQTA5OUU2NDkyMDA1NkU1ODEgLyogSW5zZXJ0SW50b1RleHROb2RlQ29tbWFu
ZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlERUMwOTlFNjQ5MjAwNTZFNTgxIC8qIEluc2Vy
dExpbmVCcmVha0NvbW1hbmQuaCBpbiBIZWFkZXJzICovLApAQCAtMjM5MzcsNyArMjM5MzAsNiBA
QAogCQkJCUE4Q0ZGNUU2MEExNTVBMDUwMDBBNDIzNCAvKiBJbmxpbmVCb3guY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQThDRkY1RTQwQTE1NUEwNTAwMEE0MjM0IC8qIElubGluZUZsb3dCb3guY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFQTQ4NTkwOTdEOTMwMjAwOTRDOUU0IC8qIElubGluZVRl
eHRCb3guY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMDg3MDBCRTcwRjA4NkM1MzAwOTE5NDE5IC8q
IElucHV0RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzN0UzNTI0QjEyNDUwQzUyMDBC
QUY1RDkgLyogSW5wdXRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5REU5MDk5RTY0
OTIwMDU2RTU4MSAvKiBJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTkzMzA5REVCMDk5RTY0OTIwMDU2RTU4MSAvKiBJbnNlcnRMaW5lQnJlYWtDb21tYW5k
LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BWE9iamVjdENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5jcHAKaW5kZXggYjQ3MTIwMTkzNjdiZjUyYWZhYTEwYmViZWRlZTJjNDcxOTU0
YzJkNS4uMTlhNDVkZDVhOWFmNDkwMWNkNWU4ZjU5MTY1M2FmZjU4YzJlNWMwMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCkBAIC01NSwxMSAr
NTUsMTEgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxBcmVhRWxlbWVudC5o
IgogI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSW5wdXRFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaWYgRU5BQkxFKFZJREVPKQogI2luY2x1
ZGUgIk1lZGlhQ29udHJvbEVsZW1lbnRzLmgiCiAjZW5kaWYKLSNpbmNsdWRlICJJbnB1dEVsZW1l
bnQuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEJveC5oIgogI2lu
Y2x1ZGUgIlJlbmRlck1lbnVMaXN0LmgiCkBAIC02MTYsNyArNjE2LDcgQEAgdm9pZCBBWE9iamVj
dENhY2hlOjp0ZXh0TWFya2VyRGF0YUZvclZpc2libGVQb3NpdGlvbihUZXh0TWFya2VyRGF0YSYg
dGV4dE1hcmtlckQKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGlmIChkb21Ob2RlLT5pc0hU
TUxFbGVtZW50KCkpIHsKLSAgICAgICAgSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBkb21O
b2RlLT50b0lucHV0RWxlbWVudCgpOworICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVs
ZW1lbnQgPSBkb21Ob2RlLT50b0lucHV0RWxlbWVudCgpOwogICAgICAgICBpZiAoaW5wdXRFbGVt
ZW50ICYmIGlucHV0RWxlbWVudC0+aXNQYXNzd29yZEZpZWxkKCkpCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKaW5kZXggMjUwNzhjNWE0NmJlMGExZjQxNjUy
YTM2ZmE0YWZhMzAzNjY4ODIwOC4uMzczM2RhMjJiYTZjMTA0N2JhYTMxNWVlZGE5ODU0M2QxYzk3
YjdkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCkBAIC00OTYsNyArNDk2LDcgQEAgYm9vbCBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc1Bhc3N3b3JkRmllbGQoKSBjb25zdAogICAgIGlmIChh
cmlhUm9sZUF0dHJpYnV0ZSgpICE9IFVua25vd25Sb2xlKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IG1fcmVuZGVyZXItPm5vZGUoKS0+
dG9JbnB1dEVsZW1lbnQoKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBt
X3JlbmRlcmVyLT5ub2RlKCktPnRvSW5wdXRFbGVtZW50KCk7CiAgICAgaWYgKCFpbnB1dEVsZW1l
bnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNTg5LDcgKzU4OSw3IEBAIGJvb2wgQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNJbmRldGVybWluYXRlKCkgY29uc3QKICAgICBpZiAo
IW1fcmVuZGVyZXItPm5vZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSW5wdXRF
bGVtZW50KiBpbnB1dEVsZW1lbnQgPSBtX3JlbmRlcmVyLT5ub2RlKCktPnRvSW5wdXRFbGVtZW50
KCk7CisgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gbV9yZW5kZXJlci0+bm9k
ZSgpLT50b0lucHV0RWxlbWVudCgpOwogICAgIGlmICghaW5wdXRFbGVtZW50KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKQEAgLTYwMCw3ICs2MDAsNyBAQCBib29sIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OmlzTmF0aXZlQ2hlY2tib3hPclJhZGlvKCkgY29uc3QKIHsKICAgICBOb2RlKiBl
bGVtZW50Tm9kZSA9IG5vZGUoKTsKICAgICBpZiAoZWxlbWVudE5vZGUpIHsKLSAgICAgICAgSW5w
dXRFbGVtZW50KiBpbnB1dCA9IGVsZW1lbnROb2RlLT50b0lucHV0RWxlbWVudCgpOworICAgICAg
ICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IGVsZW1lbnROb2RlLT50b0lucHV0RWxlbWVudCgp
OwogICAgICAgICBpZiAoaW5wdXQpCiAgICAgICAgICAgICByZXR1cm4gaW5wdXQtPmlzQ2hlY2ti
b3goKSB8fCBpbnB1dC0+aXNSYWRpb0J1dHRvbigpOwogICAgIH0KQEAgLTYxNSw3ICs2MTUsNyBA
QCBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzQ2hlY2tlZCgpIGNvbnN0CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIEZpcnN0IHRlc3QgZm9yIG5hdGl2ZSBjaGVja2Vk
bmVzcyBzZW1hbnRpY3MKLSAgICBJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IG1fcmVuZGVy
ZXItPm5vZGUoKS0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1
dEVsZW1lbnQgPSBtX3JlbmRlcmVyLT5ub2RlKCktPnRvSW5wdXRFbGVtZW50KCk7CiAgICAgaWYg
KGlucHV0RWxlbWVudCkKICAgICAgICAgcmV0dXJuIGlucHV0RWxlbWVudC0+aXNDaGVja2VkKCk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAppbmRleCA4NDExODE1ZjI1
OTIwZDczOWY0MWI3ZmNkOTEwODg5OTgwYTIwZmE0Li40ODhkYTk2MmM4ZTJjNGI5NzgyMTUxNzE1
NzA5ZThlMTUxODVhMjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVT
ZWxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3Bw
CkBAIC0xMDY5LDggKzEwNjksOCBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNhblNoYXJlU3R5
bGVXaXRoRWxlbWVudChOb2RlKiBub2RlKSBjb25zdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBpZiAoaXNDb250cm9sKSB7Ci0gICAgICAgIElucHV0RWxlbWVudCogdGhpc0lucHV0RWxl
bWVudCA9IGVsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCk7Ci0gICAgICAgIElucHV0RWxlbWVudCog
b3RoZXJJbnB1dEVsZW1lbnQgPSBtX2VsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCk7CisgICAgICAg
IEhUTUxJbnB1dEVsZW1lbnQqIHRoaXNJbnB1dEVsZW1lbnQgPSBlbGVtZW50LT50b0lucHV0RWxl
bWVudCgpOworICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBvdGhlcklucHV0RWxlbWVudCA9IG1f
ZWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKTsKIAogICAgICAgICBpZiAoIXRoaXNJbnB1dEVsZW1l
bnQgfHwgIW90aGVySW5wdXRFbGVtZW50KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
Mjc3Myw3ICsyNzczLDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6
OmNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWUKICAgICAgICAgICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0F1dG9maWxsOiB7CiAgICAgICAgICAgICAgICAgaWYgKCFl
IHx8ICFlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQogICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICBpZiAoSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBlLT50
b0lucHV0RWxlbWVudCgpKQorICAgICAgICAgICAgICAgIGlmIChIVE1MSW5wdXRFbGVtZW50KiBp
bnB1dEVsZW1lbnQgPSBlLT50b0lucHV0RWxlbWVudCgpKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gaW5wdXRFbGVtZW50LT5pc0F1dG9maWxsZWQoKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KQEAgLTI4NjYsNyArMjg2Niw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxl
Y3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWws
IEVsZW1lCiAgICAgICAgICAgICAgICAgLy8gRXZlbiB0aG91Z2ggV2luSUUgYWxsb3dzIGNoZWNr
ZWQgYW5kIGluZGV0ZXJtaW5hdGUgdG8gY28tZXhpc3QsIHRoZSBDU1Mgc2VsZWN0b3Igc3BlYyBz
YXlzIHRoYXQKICAgICAgICAgICAgICAgICAvLyB5b3UgY2FuJ3QgYmUgYm90aCBjaGVja2VkIGFu
ZCBpbmRldGVybWluYXRlLiAgV2Ugd2lsbCBiZWhhdmUgbGlrZSBXaW5JRSBiZWhpbmQgdGhlIHNj
ZW5lcyBhbmQganVzdAogICAgICAgICAgICAgICAgIC8vIG9iZXkgdGhlIENTUyBzcGVjIGhlcmUg
aW4gdGhlIHRlc3QgZm9yIG1hdGNoaW5nIHRoZSBwc2V1ZG8uCi0gICAgICAgICAgICAgICAgSW5w
dXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBlLT50b0lucHV0RWxlbWVudCgpOworICAgICAgICAg
ICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGUtPnRvSW5wdXRFbGVtZW50
KCk7CiAgICAgICAgICAgICAgICAgaWYgKGlucHV0RWxlbWVudCAmJiBpbnB1dEVsZW1lbnQtPmlz
Q2hlY2tlZCgpICYmICFpbnB1dEVsZW1lbnQtPmlzSW5kZXRlcm1pbmF0ZSgpKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI4NzQs
NyArMjg3NCw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpjaGVj
a09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lCiAgICAgICAgICAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9JbmRldGVybWluYXRlOiB7CiAgICAgICAgICAgICAgICAgaWYgKCFl
IHx8ICFlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQogICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICBJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGUtPnRvSW5w
dXRFbGVtZW50KCk7CisgICAgICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVt
ZW50ID0gZS0+dG9JbnB1dEVsZW1lbnQoKTsKICAgICAgICAgICAgICAgICBpZiAoaW5wdXRFbGVt
ZW50ICYmIGlucHV0RWxlbWVudC0+aXNJbmRldGVybWluYXRlKCkpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuY3BwCmluZGV4IDc1MjMzNzI1MWFlYzk1ZDNlOWUyYzVm
YTVlNjU4MzljOTA0NTViZjIuLjJhMGZlYTQwNmU2NjVkMmUyYjU3MGExN2Q1MDYzMzI3OTc5MGJi
YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5jcHAKQEAgLTc3
LDcgKzc3LDcgQEAgdm9pZCBDaGVja2VkUmFkaW9CdXR0b25zOjpyZW1vdmVCdXR0b24oSFRNTEZv
cm1Db250cm9sRWxlbWVudCogZWxlbWVudCkKICAgICBpZiAoaXQgPT0gbV9uYW1lVG9DaGVja2Vk
UmFkaW9CdXR0b25NYXAtPmVuZCgpIHx8IGl0LT5zZWNvbmQgIT0gZWxlbWVudCkKICAgICAgICAg
cmV0dXJuOwogICAgIAotICAgIElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gZWxlbWVudC0+
dG9JbnB1dEVsZW1lbnQoKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBl
bGVtZW50LT50b0lucHV0RWxlbWVudCgpOwogICAgIEFTU0VSVF9VTlVTRUQoaW5wdXRFbGVtZW50
LCBpbnB1dEVsZW1lbnQpOwogICAgIEFTU0VSVChpbnB1dEVsZW1lbnQtPmlzQ2hlY2tlZCgpKTsK
ICAgICBBU1NFUlQoZWxlbWVudC0+aXNSYWRpb0J1dHRvbigpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0lucHV0
RWxlbWVudC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiZGYyZjRiNWY5MTc1
ZjczMjgxNWMyNTcxNjUyNzQ3MDgxMDlkMDAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSw0MTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBU
b3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1v
YmlsZS5jb20vKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklucHV0RWxlbWVu
dC5oIgotCi0jaW5jbHVkZSAiQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuaCIKLQotI2lmIEVOQUJM
RShXQ1NTKQotI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJDU1NSdWxl
LmgiCi0jaW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIK
LSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgIkF0dHJp
YnV0ZS5oIgotI2luY2x1ZGUgIkNocm9tZS5oIgotI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgot
I2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRXZlbnQuaCIKLSNpbmNsdWRlICJFdmVu
dE5hbWVzLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVk
ZSAiUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgiCi0jaW5jbHVkZSAiU2VsZWN0aW9uQ29u
dHJvbGxlci5oIgotI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLS8vIEZJWE1FOiBBY2NvcmRpbmcgdG8gSFRNTDQsIHRoZSBsZW5ndGggYXR0cmlidXRl
J3MgdmFsdWUgY2FuIGJlIGFyYml0cmFyaWx5Ci0vLyBsYXJnZS4gSG93ZXZlciwgZHVlIHRvIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDUzNiB0aGluZ3MKLS8vIGdl
dCByYXRoZXIgc2x1Z2dpc2ggd2hlbiBhIHRleHQgZmllbGQgaGFzIGEgbGFyZ2VyIG51bWJlciBv
ZiBjaGFyYWN0ZXJzIHRoYW4KLS8vIHRoaXMsIGV2ZW4gd2hlbiBqdXN0IGNsaWNraW5nIGluIHRo
ZSB0ZXh0IGZpZWxkLgotY29uc3QgaW50IElucHV0RWxlbWVudDo6c19tYXhpbXVtTGVuZ3RoID0g
NTI0Mjg4OwotY29uc3QgaW50IElucHV0RWxlbWVudDo6c19kZWZhdWx0U2l6ZSA9IDIwOwotCi12
b2lkIElucHV0RWxlbWVudDo6ZGlzcGF0Y2hGb2N1c0V2ZW50KElucHV0RWxlbWVudCogaW5wdXRF
bGVtZW50LCBFbGVtZW50KiBlbGVtZW50KQotewotICAgIGlmICghaW5wdXRFbGVtZW50LT5pc1Rl
eHRGaWVsZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBl
bGVtZW50LT5kb2N1bWVudCgpOwotICAgIGlmIChpbnB1dEVsZW1lbnQtPmlzUGFzc3dvcmRGaWVs
ZCgpICYmIGRvY3VtZW50LT5mcmFtZSgpKQotICAgICAgICBkb2N1bWVudC0+c2V0VXNlU2VjdXJl
S2V5Ym9hcmRFbnRyeVdoZW5BY3RpdmUodHJ1ZSk7Ci19Ci0KLXZvaWQgSW5wdXRFbGVtZW50Ojpk
aXNwYXRjaEJsdXJFdmVudChJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCwgRWxlbWVudCogZWxl
bWVudCkKLXsKLSAgICBpZiAoIWlucHV0RWxlbWVudC0+aXNUZXh0RmllbGQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZWxlbWVudC0+ZG9jdW1lbnQoKTsK
LSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoaW5wdXRFbGVtZW50LT5pc1Bhc3N3b3JkRmllbGQo
KSkKLSAgICAgICAgZG9jdW1lbnQtPnNldFVzZVNlY3VyZUtleWJvYXJkRW50cnlXaGVuQWN0aXZl
KGZhbHNlKTsKLQotICAgIGZyYW1lLT5lZGl0b3IoKS0+dGV4dEZpZWxkRGlkRW5kRWRpdGluZyhl
bGVtZW50KTsKLX0KLQotdm9pZCBJbnB1dEVsZW1lbnQ6OnVwZGF0ZUZvY3VzQXBwZWFyYW5jZShJ
bnB1dEVsZW1lbnREYXRhJiBkYXRhLCBJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCwgRWxlbWVu
dCogZWxlbWVudCwgYm9vbCByZXN0b3JlUHJldmlvdXNTZWxlY3Rpb24pCi17Ci0gICAgQVNTRVJU
KGlucHV0RWxlbWVudC0+aXNUZXh0RmllbGQoKSk7Ci0KLSAgICBpZiAoIXJlc3RvcmVQcmV2aW91
c1NlbGVjdGlvbiB8fCBkYXRhLmNhY2hlZFNlbGVjdGlvblN0YXJ0KCkgPT0gLTEpCi0gICAgICAg
IGlucHV0RWxlbWVudC0+c2VsZWN0KCk7Ci0gICAgZWxzZQotICAgICAgICAvLyBSZXN0b3JlIHRo
ZSBjYWNoZWQgc2VsZWN0aW9uLgotICAgICAgICB1cGRhdGVTZWxlY3Rpb25SYW5nZShpbnB1dEVs
ZW1lbnQsIGVsZW1lbnQsIGRhdGEuY2FjaGVkU2VsZWN0aW9uU3RhcnQoKSwgZGF0YS5jYWNoZWRT
ZWxlY3Rpb25FbmQoKSk7Ci0KLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBlbGVtZW50LT5kb2N1
bWVudCgpOwotICAgIGlmIChkb2N1bWVudCAmJiBkb2N1bWVudC0+ZnJhbWUoKSkKLSAgICAgICAg
ZG9jdW1lbnQtPmZyYW1lKCktPnNlbGVjdGlvbigpLT5yZXZlYWxTZWxlY3Rpb24oKTsKLX0KLQot
dm9pZCBJbnB1dEVsZW1lbnQ6OnVwZGF0ZVNlbGVjdGlvblJhbmdlKElucHV0RWxlbWVudCogaW5w
dXRFbGVtZW50LCBFbGVtZW50KiBlbGVtZW50LCBpbnQgc3RhcnQsIGludCBlbmQpCi17Ci0gICAg
aWYgKCFpbnB1dEVsZW1lbnQtPmlzVGV4dEZpZWxkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IHNldFNlbGVjdGlvblJhbmdlKGVsZW1lbnQsIHN0YXJ0LCBlbmQpOwotfQotCi12b2lkIElucHV0
RWxlbWVudDo6YWJvdXRUb1VubG9hZChJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCwgRWxlbWVu
dCogZWxlbWVudCkKLXsKLSAgICBpZiAoIWlucHV0RWxlbWVudC0+aXNUZXh0RmllbGQoKSB8fCAh
ZWxlbWVudC0+Zm9jdXNlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBEb2N1bWVudCogZG9j
dW1lbnQgPSBlbGVtZW50LT5kb2N1bWVudCgpOwotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50
LT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZyYW1l
LT5lZGl0b3IoKS0+dGV4dEZpZWxkRGlkRW5kRWRpdGluZyhlbGVtZW50KTsKLX0KLQotdm9pZCBJ
bnB1dEVsZW1lbnQ6OnNldFZhbHVlRnJvbVJlbmRlcmVyKElucHV0RWxlbWVudERhdGEmIGRhdGEs
IElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50LCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBTdHJp
bmcmIHZhbHVlKQotewotICAgIC8vIFJlbmRlcmVyIGFuZCBvdXIgZXZlbnQgaGFuZGxlciBhcmUg
cmVzcG9uc2libGUgZm9yIHNhbml0aXppbmcgdmFsdWVzLgotICAgIEFTU0VSVF9VTlVTRUQoaW5w
dXRFbGVtZW50LCB2YWx1ZSA9PSBpbnB1dEVsZW1lbnQtPnNhbml0aXplVmFsdWUodmFsdWUpIHx8
IGlucHV0RWxlbWVudC0+c2FuaXRpemVWYWx1ZSh2YWx1ZSkuaXNFbXB0eSgpKTsKLQotICAgIC8v
IFdvcmthcm91bmQgZm9yIGJ1ZyB3aGVyZSB0cmFpbGluZyBcbiBpcyBpbmNsdWRlZCBpbiB0aGUg
cmVzdWx0IG9mIHRleHRDb250ZW50LgotICAgIC8vIFRoZSBhc3NlcnQgbWFjcm8gYWJvdmUgbWF5
IGFsc28gYmUgc2ltcGxpZmllZCB0bzogIHZhbHVlID09IGNvbnN0cmFpblZhbHVlKHZhbHVlKQot
ICAgIC8vIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2NjEKLSAgICBp
ZiAodmFsdWUgPT0gIlxuIikKLSAgICAgICAgZGF0YS5zZXRWYWx1ZSgiIik7Ci0gICAgZWxzZQot
ICAgICAgICBkYXRhLnNldFZhbHVlKHZhbHVlKTsKLQotICAgIGVsZW1lbnQtPnNldEZvcm1Db250
cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIodHJ1ZSk7Ci0KLSAgICAvLyBJbnB1dCBldmVudCBpcyBm
aXJlZCBieSB0aGUgTm9kZTo6ZGVmYXVsdEV2ZW50SGFuZGxlciBmb3IgZWRpdGFibGUgY29udHJv
bHMuCi0gICAgaWYgKCFpbnB1dEVsZW1lbnQtPmlzVGV4dEZpZWxkKCkpCi0gICAgICAgIGVsZW1l
bnQtPmRpc3BhdGNoSW5wdXRFdmVudCgpOwotICAgIG5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQoZWxl
bWVudCk7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgcmVwbGFjZUVPTEFuZExpbWl0TGVuZ3RoKGNvbnN0
IElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50LCBjb25zdCBTdHJpbmcmIHByb3Bvc2VkVmFsdWUs
IGludCBtYXhMZW5ndGgpCi17Ci0gICAgaWYgKCFpbnB1dEVsZW1lbnQtPmlzVGV4dEZpZWxkKCkp
Ci0gICAgICAgIHJldHVybiBwcm9wb3NlZFZhbHVlOwotCi0gICAgU3RyaW5nIHN0cmluZyA9IHBy
b3Bvc2VkVmFsdWU7Ci0gICAgc3RyaW5nLnJlcGxhY2UoIlxyXG4iLCAiICIpOwotICAgIHN0cmlu
Zy5yZXBsYWNlKCdccicsICcgJyk7Ci0gICAgc3RyaW5nLnJlcGxhY2UoJ1xuJywgJyAnKTsKLQot
ICAgIHVuc2lnbmVkIG5ld0xlbmd0aCA9IG51bUNoYXJhY3RlcnNJbkdyYXBoZW1lQ2x1c3RlcnMo
c3RyaW5nLCBtYXhMZW5ndGgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuZXdMZW5n
dGg7ICsraSkgewotICAgICAgICBjb25zdCBVQ2hhciBjdXJyZW50ID0gc3RyaW5nW2ldOwotICAg
ICAgICBpZiAoY3VycmVudCA8ICcgJyAmJiBjdXJyZW50ICE9ICdcdCcpIHsKLSAgICAgICAgICAg
IG5ld0xlbmd0aCA9IGk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAg
ICByZXR1cm4gc3RyaW5nLmxlZnQobmV3TGVuZ3RoKTsKLX0KLQotU3RyaW5nIElucHV0RWxlbWVu
dDo6c2FuaXRpemVWYWx1ZUZvclRleHRGaWVsZChjb25zdCBJbnB1dEVsZW1lbnQqIGlucHV0RWxl
bWVudCwgY29uc3QgU3RyaW5nJiBwcm9wb3NlZFZhbHVlKQotewotI2lmIEVOQUJMRShXQ1NTKQot
ICAgIElucHV0RWxlbWVudERhdGEgZGF0YSA9IGNvbnN0X2Nhc3Q8SW5wdXRFbGVtZW50Kj4oaW5w
dXRFbGVtZW50KS0+ZGF0YSgpOwotICAgIGlmICghaXNDb25mb3JtVG9JbnB1dE1hc2soZGF0YSwg
cHJvcG9zZWRWYWx1ZSkpIHsKLSAgICAgICAgaWYgKGlzQ29uZm9ybVRvSW5wdXRNYXNrKGRhdGEs
IGRhdGEudmFsdWUoKSkpCi0gICAgICAgICAgICByZXR1cm4gZGF0YS52YWx1ZSgpOwotICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgfQotI2VuZGlmCi0gICAgcmV0dXJuIHJlcGxhY2VFT0xB
bmRMaW1pdExlbmd0aChpbnB1dEVsZW1lbnQsIHByb3Bvc2VkVmFsdWUsIHNfbWF4aW11bUxlbmd0
aCk7Ci19Ci0KLVN0cmluZyBJbnB1dEVsZW1lbnQ6OnNhbml0aXplVXNlcklucHV0VmFsdWUoY29u
c3QgSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQsIGNvbnN0IFN0cmluZyYgcHJvcG9zZWRWYWx1
ZSwgaW50IG1heExlbmd0aCkKLXsKLSAgICByZXR1cm4gcmVwbGFjZUVPTEFuZExpbWl0TGVuZ3Ro
KGlucHV0RWxlbWVudCwgcHJvcG9zZWRWYWx1ZSwgbWF4TGVuZ3RoKTsKLX0KLQotdm9pZCBJbnB1
dEVsZW1lbnQ6OmhhbmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KElucHV0RWxlbWVudERhdGEm
IGRhdGEsIElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50LCBFbGVtZW50KiBlbGVtZW50LCBFdmVu
dCogZXZlbnQpCi17Ci0gICAgQVNTRVJUKGV2ZW50LT5pc0JlZm9yZVRleHRJbnNlcnRlZEV2ZW50
KCkpOwotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSB0ZXh0IHRvIGJlIGluc2VydGVkIHdpbGwg
bm90IHZpb2xhdGUgdGhlIG1heExlbmd0aC4KLQotICAgIC8vIFdlIHVzZSBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OnRleHQoKSBpbnN0ZWFkIG9mIElucHV0RWxlbWVudDo6dmFsdWUoKQot
ICAgIC8vIGJlY2F1c2UgdGhleSBjYW4gYmUgbWlzbWF0Y2hlZCBieSBzYW5pdGl6ZVZhbHVlKCkg
aW4KLSAgICAvLyBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnN1YnRyZWVIYXNDaGFuZ2Vk
KCkgaW4gc29tZSBjYXNlcy4KLSAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBudW1HcmFwaGVtZUNs
dXN0ZXJzKHRvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKGVsZW1lbnQtPnJlbmRlcmVyKCkp
LT50ZXh0KCkpOwotCi0gICAgLy8gc2VsZWN0aW9uTGVuZ3RoIHJlcHJlc2VudHMgdGhlIHNlbGVj
dGlvbiBsZW5ndGggb2YgdGhpcyB0ZXh0IGZpZWxkIHRvIGJlCi0gICAgLy8gcmVtb3ZlZCBieSB0
aGlzIGluc2VydGlvbi4KLSAgICAvLyBJZiB0aGUgdGV4dCBmaWVsZCBoYXMgbm8gZm9jdXMsIHdl
IGRvbid0IG5lZWQgdG8gdGFrZSBhY2NvdW50IG9mIHRoZQotICAgIC8vIHNlbGVjdGlvbiBsZW5n
dGguIFRoZSBzZWxlY3Rpb24gaXMgdGhlIHNvdXJjZSBvZiB0ZXh0IGRyYWctYW5kLWRyb3AgaW4K
LSAgICAvLyB0aGF0IGNhc2UsIGFuZCBub3RoaW5nIGluIHRoZSB0ZXh0IGZpZWxkIHdpbGwgYmUg
cmVtb3ZlZC4KLSAgICB1bnNpZ25lZCBzZWxlY3Rpb25MZW5ndGggPSBlbGVtZW50LT5mb2N1c2Vk
KCkgPyBudW1HcmFwaGVtZUNsdXN0ZXJzKHBsYWluVGV4dChlbGVtZW50LT5kb2N1bWVudCgpLT5m
cmFtZSgpLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQo
KSkpIDogMDsKLSAgICBBU1NFUlQob2xkTGVuZ3RoID49IHNlbGVjdGlvbkxlbmd0aCk7Ci0KLSAg
ICAvLyBTZWxlY3RlZCBjaGFyYWN0ZXJzIHdpbGwgYmUgcmVtb3ZlZCBieSB0aGUgbmV4dCB0ZXh0
IGV2ZW50LgotICAgIHVuc2lnbmVkIGJhc2VMZW5ndGggPSBvbGRMZW5ndGggLSBzZWxlY3Rpb25M
ZW5ndGg7Ci0gICAgdW5zaWduZWQgbWF4TGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlu
cHV0RWxlbWVudC0+c3VwcG9ydHNNYXhMZW5ndGgoKSA/IGRhdGEubWF4TGVuZ3RoKCkgOiBzX21h
eGltdW1MZW5ndGgpOyAvLyBtYXhMZW5ndGgoKSBjYW4gbmV2ZXIgYmUgbmVnYXRpdmUuCi0gICAg
dW5zaWduZWQgYXBwZW5kYWJsZUxlbmd0aCA9IG1heExlbmd0aCA+IGJhc2VMZW5ndGggPyBtYXhM
ZW5ndGggLSBiYXNlTGVuZ3RoIDogMDsKLQotICAgIC8vIFRydW5jYXRlIHRoZSBpbnNlcnRlZCB0
ZXh0IHRvIGF2b2lkIHZpb2xhdGluZyB0aGUgbWF4TGVuZ3RoIGFuZCBvdGhlciBjb25zdHJhaW50
cy4KLSAgICBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCogdGV4dEV2ZW50ID0gc3RhdGljX2Nhc3Q8
QmVmb3JlVGV4dEluc2VydGVkRXZlbnQqPihldmVudCk7Ci0jaWYgRU5BQkxFKFdDU1MpCi0gICAg
UmVmUHRyPFJhbmdlPiByYW5nZSA9IGVsZW1lbnQtPmRvY3VtZW50KCktPmZyYW1lKCktPnNlbGVj
dGlvbigpLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIFN0cmluZyBjYW5k
aWRhdGVTdHJpbmcgPSB0b1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShlbGVtZW50LT5yZW5k
ZXJlcigpKS0+dGV4dCgpOwotICAgIGlmIChzZWxlY3Rpb25MZW5ndGgpCi0gICAgICAgIGNhbmRp
ZGF0ZVN0cmluZy5yZXBsYWNlKHJhbmdlLT5zdGFydE9mZnNldCgpLCByYW5nZS0+ZW5kT2Zmc2V0
KCksIHRleHRFdmVudC0+dGV4dCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGNhbmRpZGF0ZVN0cmlu
Zy5pbnNlcnQodGV4dEV2ZW50LT50ZXh0KCksIHJhbmdlLT5zdGFydE9mZnNldCgpKTsKLSAgICBp
ZiAoIWlzQ29uZm9ybVRvSW5wdXRNYXNrKGlucHV0RWxlbWVudC0+ZGF0YSgpLCBjYW5kaWRhdGVT
dHJpbmcpKSB7Ci0gICAgICAgIHRleHRFdmVudC0+c2V0VGV4dCgiIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0jZW5kaWYKLSAgICB0ZXh0RXZlbnQtPnNldFRleHQoc2FuaXRpemVVc2VySW5w
dXRWYWx1ZShpbnB1dEVsZW1lbnQsIHRleHRFdmVudC0+dGV4dCgpLCBhcHBlbmRhYmxlTGVuZ3Ro
KSk7Ci19Ci0KLXZvaWQgSW5wdXRFbGVtZW50OjpwYXJzZVNpemVBdHRyaWJ1dGUoSW5wdXRFbGVt
ZW50RGF0YSYgZGF0YSwgRWxlbWVudCogZWxlbWVudCwgQXR0cmlidXRlKiBhdHRyaWJ1dGUpCi17
Ci0gICAgZGF0YS5zZXRTaXplKGF0dHJpYnV0ZS0+aXNOdWxsKCkgPyBJbnB1dEVsZW1lbnQ6OnNf
ZGVmYXVsdFNpemUgOiBhdHRyaWJ1dGUtPnZhbHVlKCkudG9JbnQoKSk7Ci0KLSAgICBpZiAoUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciA9IGVsZW1lbnQtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJlbmRl
cmVyLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKLX0KLQotdm9pZCBJbnB1
dEVsZW1lbnQ6OnBhcnNlTWF4TGVuZ3RoQXR0cmlidXRlKElucHV0RWxlbWVudERhdGEmIGRhdGEs
IElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50LCBFbGVtZW50KiBlbGVtZW50LCBBdHRyaWJ1dGUq
IGF0dHJpYnV0ZSkKLXsKLSAgICBpbnQgbWF4TGVuZ3RoID0gYXR0cmlidXRlLT5pc051bGwoKSA/
IElucHV0RWxlbWVudDo6c19tYXhpbXVtTGVuZ3RoIDogYXR0cmlidXRlLT52YWx1ZSgpLnRvSW50
KCk7Ci0gICAgaWYgKG1heExlbmd0aCA8PSAwIHx8IG1heExlbmd0aCA+IElucHV0RWxlbWVudDo6
c19tYXhpbXVtTGVuZ3RoKQotICAgICAgICBtYXhMZW5ndGggPSBJbnB1dEVsZW1lbnQ6OnNfbWF4
aW11bUxlbmd0aDsKLQotICAgIGludCBvbGRNYXhMZW5ndGggPSBkYXRhLm1heExlbmd0aCgpOwot
ICAgIGRhdGEuc2V0TWF4TGVuZ3RoKG1heExlbmd0aCk7Ci0KLSAgICBpZiAob2xkTWF4TGVuZ3Ro
ICE9IG1heExlbmd0aCkKLSAgICAgICAgdXBkYXRlVmFsdWVJZk5lZWRlZChkYXRhLCBpbnB1dEVs
ZW1lbnQpOwotCi0gICAgZWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOwotfQotCi12b2lk
IElucHV0RWxlbWVudDo6dXBkYXRlVmFsdWVJZk5lZWRlZChJbnB1dEVsZW1lbnREYXRhJiBkYXRh
LCBJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCkKLXsKLSAgICBTdHJpbmcgb2xkVmFsdWUgPSBk
YXRhLnZhbHVlKCk7Ci0gICAgU3RyaW5nIG5ld1ZhbHVlID0gaW5wdXRFbGVtZW50LT5zYW5pdGl6
ZVZhbHVlKG9sZFZhbHVlKTsKLSAgICBpZiAobmV3VmFsdWUgIT0gb2xkVmFsdWUpCi0gICAgICAg
IGlucHV0RWxlbWVudC0+c2V0VmFsdWUobmV3VmFsdWUpOwotfQotCi12b2lkIElucHV0RWxlbWVu
dDo6bm90aWZ5Rm9ybVN0YXRlQ2hhbmdlZChFbGVtZW50KiBlbGVtZW50KQotewotICAgIERvY3Vt
ZW50KiBkb2N1bWVudCA9IGVsZW1lbnQtPmRvY3VtZW50KCk7Ci0gICAgRnJhbWUqIGZyYW1lID0g
ZG9jdW1lbnQtPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKQotICAgICAgICBwYWdlLT5jaHJvbWUo
KS0+Y2xpZW50KCktPmZvcm1TdGF0ZURpZENoYW5nZShlbGVtZW50KTsKLX0KLQotLy8gSW5wdXRF
bGVtZW50RGF0YQotSW5wdXRFbGVtZW50RGF0YTo6SW5wdXRFbGVtZW50RGF0YSgpCi0gICAgOiBt
X3NpemUoSW5wdXRFbGVtZW50OjpzX2RlZmF1bHRTaXplKQotICAgICwgbV9tYXhMZW5ndGgoSW5w
dXRFbGVtZW50OjpzX21heGltdW1MZW5ndGgpCi0gICAgLCBtX2NhY2hlZFNlbGVjdGlvblN0YXJ0
KC0xKQotICAgICwgbV9jYWNoZWRTZWxlY3Rpb25FbmQoLTEpCi0jaWYgRU5BQkxFKFdDU1MpCi0g
ICAgLCBtX2lucHV0Rm9ybWF0TWFzaygiKm0iKQotICAgICwgbV9tYXhJbnB1dENoYXJzQWxsb3dl
ZChJbnB1dEVsZW1lbnQ6OnNfbWF4aW11bUxlbmd0aCkKLSNlbmRpZgotewotfQotCi1JbnB1dEVs
ZW1lbnREYXRhOjp+SW5wdXRFbGVtZW50RGF0YSgpCi17Ci19Ci0KLWNvbnN0IEF0b21pY1N0cmlu
ZyYgSW5wdXRFbGVtZW50RGF0YTo6bmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbmFtZS5p
c051bGwoKSA/IGVtcHR5QXRvbSA6IG1fbmFtZTsKLX0KLQotI2lmIEVOQUJMRShXQ1NTKQotc3Rh
dGljIGlubGluZSBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1hdENvZGVzKCkKLXsKLSAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgY29kZXMsICgiQWFOblh4TW0iKSk7Ci0gICAg
cmV0dXJuIGNvZGVzOwotfQotCi1zdGF0aWMgdW5zaWduZWQgY3Vyc29yUG9zaXRpb25Ub01hc2tJ
bmRleChjb25zdCBTdHJpbmcmIGlucHV0Rm9ybWF0TWFzaywgdW5zaWduZWQgY3Vyc29yUG9zaXRp
b24pCi17Ci0gICAgVUNoYXIgbWFzazsKLSAgICBpbnQgaW5kZXggPSAtMTsKLSAgICBkbyB7Ci0g
ICAgICAgIG1hc2sgPSBpbnB1dEZvcm1hdE1hc2tbKytpbmRleF07Ci0gICAgICAgIGlmIChtYXNr
ID09ICdcXCcpCi0gICAgICAgICAgICArK2luZGV4OwotICAgICAgICBlbHNlIGlmIChtYXNrID09
ICcqJyB8fCAoaXNBU0NJSURpZ2l0KG1hc2spICYmIG1hc2sgIT0gJzAnKSkgewotICAgICAgICAg
ICAgaW5kZXggPSBpbnB1dEZvcm1hdE1hc2subGVuZ3RoKCkgLSAxOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICB9IHdoaWxlIChjdXJzb3JQb3NpdGlvbi0tKTsKLQotICAgIHJl
dHVybiBpbmRleDsKLX0KLQotYm9vbCBJbnB1dEVsZW1lbnQ6OmlzQ29uZm9ybVRvSW5wdXRNYXNr
KGNvbnN0IElucHV0RWxlbWVudERhdGEmIGRhdGEsIGNvbnN0IFN0cmluZyYgaW5wdXRDaGFycykK
LXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5wdXRDaGFycy5sZW5ndGgoKTsgKytp
KQotICAgICAgICBpZiAoIWlzQ29uZm9ybVRvSW5wdXRNYXNrKGRhdGEsIGlucHV0Q2hhcnNbaV0s
IGkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1i
b29sIElucHV0RWxlbWVudDo6aXNDb25mb3JtVG9JbnB1dE1hc2soY29uc3QgSW5wdXRFbGVtZW50
RGF0YSYgZGF0YSwgVUNoYXIgaW5DaGFyLCB1bnNpZ25lZCBjdXJzb3JQb3NpdGlvbikKLXsKLSAg
ICBTdHJpbmcgaW5wdXRGb3JtYXRNYXNrID0gZGF0YS5pbnB1dEZvcm1hdE1hc2soKTsKLQotICAg
IGlmIChpbnB1dEZvcm1hdE1hc2suaXNFbXB0eSgpIHx8IGlucHV0Rm9ybWF0TWFzayA9PSAiKk0i
IHx8IGlucHV0Rm9ybWF0TWFzayA9PSAiKm0iKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
IGlmIChjdXJzb3JQb3NpdGlvbiA+PSBkYXRhLm1heElucHV0Q2hhcnNBbGxvd2VkKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIHVuc2lnbmVkIG1hc2tJbmRleCA9IGN1cnNvclBvc2l0
aW9uVG9NYXNrSW5kZXgoaW5wdXRGb3JtYXRNYXNrLCBjdXJzb3JQb3NpdGlvbik7Ci0gICAgYm9v
bCBvayA9IHRydWU7Ci0gICAgVUNoYXIgbWFzayA9IGlucHV0Rm9ybWF0TWFza1ttYXNrSW5kZXhd
OwotICAgIC8vIE1hdGNoIHRoZSBpbnB1dGVkIGNoYXJhY3RlciB3aXRoIGlucHV0IG1hc2sKLSAg
ICBzd2l0Y2ggKG1hc2spIHsKLSAgICBjYXNlICdBJzoKLSAgICAgICAgb2sgPSAhaXNBU0NJSURp
Z2l0KGluQ2hhcikgJiYgIWlzQVNDSUlMb3dlcihpbkNoYXIpICYmIGlzQVNDSUlQcmludGFibGUo
aW5DaGFyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAnYSc6Ci0gICAgICAgIG9rID0gIWlz
QVNDSUlEaWdpdChpbkNoYXIpICYmICFpc0FTQ0lJVXBwZXIoaW5DaGFyKSAmJiBpc0FTQ0lJUHJp
bnRhYmxlKGluQ2hhcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgJ04nOgotICAgICAgICBv
ayA9IGlzQVNDSUlEaWdpdChpbkNoYXIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlICduJzoK
LSAgICAgICAgb2sgPSAhaXNBU0NJSUFscGhhKGluQ2hhcikgJiYgaXNBU0NJSVByaW50YWJsZShp
bkNoYXIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlICdYJzoKLSAgICAgICAgb2sgPSAhaXNB
U0NJSUxvd2VyKGluQ2hhcikgJiYgaXNBU0NJSVByaW50YWJsZShpbkNoYXIpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlICd4JzoKLSAgICAgICAgb2sgPSAhaXNBU0NJSVVwcGVyKGluQ2hhcikg
JiYgaXNBU0NJSVByaW50YWJsZShpbkNoYXIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlICdN
JzoKLSAgICBjYXNlICdtJzoKLSAgICAgICAgb2sgPSBpc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7
Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIG9rID0gKG1hc2sgPT0gaW5D
aGFyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIG9rOwotfQotCi1TdHJp
bmcgSW5wdXRFbGVtZW50Ojp2YWxpZGF0ZUlucHV0TWFzayhJbnB1dEVsZW1lbnREYXRhJiBkYXRh
LCBTdHJpbmcmIGlucHV0TWFzaykKLXsKLSAgICBpbnB1dE1hc2sucmVwbGFjZSgiXFxcXCIsICJc
XCIpOwotCi0gICAgYm9vbCBpc1ZhbGlkID0gdHJ1ZTsKLSAgICBib29sIGhhc1dpbGRjYXJkID0g
ZmFsc2U7Ci0gICAgdW5zaWduZWQgZXNjYXBlQ2hhckNvdW50ID0gMDsKLSAgICB1bnNpZ25lZCBt
YXNrTGVuZ3RoID0gaW5wdXRNYXNrLmxlbmd0aCgpOwotICAgIFVDaGFyIGZvcm1hdENvZGU7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1hc2tMZW5ndGg7ICsraSkgewotICAgICAgICBm
b3JtYXRDb2RlID0gaW5wdXRNYXNrW2ldOwotICAgICAgICBpZiAoZm9ybWF0Q29kZXMoKS5maW5k
KGZvcm1hdENvZGUpID09IC0xKSB7Ci0gICAgICAgICAgICBpZiAoZm9ybWF0Q29kZSA9PSAnKicg
fHwgKGlzQVNDSUlEaWdpdChmb3JtYXRDb2RlKSAmJiBmb3JtYXRDb2RlICE9ICcwJykpIHsKLSAg
ICAgICAgICAgICAgICAvLyBWYWxpZGF0ZSBjb2RlcyB3aGljaCBlbmRzIHdpdGggJypmJyBvciAn
bmYnCi0gICAgICAgICAgICAgICAgZm9ybWF0Q29kZSA9IGlucHV0TWFza1srK2ldOwotICAgICAg
ICAgICAgICAgIGlmICgoaSArIDEgIT0gbWFza0xlbmd0aCkgfHwgZm9ybWF0Q29kZXMoKS5maW5k
KGZvcm1hdENvZGUpID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxz
ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGhhc1dpbGRjYXJkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9y
bWF0Q29kZSA9PSAnXFwnKSB7Ci0gICAgICAgICAgICAgICAgLy8gc2tpcCBvdmVyIHRoZSBuZXh0
IG1hc2sgY2hhcmFjdGVyCi0gICAgICAgICAgICAgICAgKytpOwotICAgICAgICAgICAgICAgICsr
ZXNjYXBlQ2hhckNvdW50OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBp
c1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWlzVmFsaWQpCi0gICAgICAgIHJldHVybiBTdHJp
bmcoKTsKLSAgICAvLyBjYWxjdWxhdGUgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFsbG93ZWQg
dG8gYmUgZW50ZXJlZCBieSBpbnB1dCBtYXNrCi0gICAgdW5zaWduZWQgYWxsb3dlZExlbmd0aCA9
IG1hc2tMZW5ndGg7Ci0gICAgaWYgKGVzY2FwZUNoYXJDb3VudCkKLSAgICAgICAgYWxsb3dlZExl
bmd0aCAtPSBlc2NhcGVDaGFyQ291bnQ7Ci0KLSAgICBpZiAoaGFzV2lsZGNhcmQpIHsKLSAgICAg
ICAgZm9ybWF0Q29kZSA9IGlucHV0TWFza1ttYXNrTGVuZ3RoIC0gMl07Ci0gICAgICAgIGlmIChm
b3JtYXRDb2RlID09ICcqJykKLSAgICAgICAgICAgIGFsbG93ZWRMZW5ndGggPSBkYXRhLm1heElu
cHV0Q2hhcnNBbGxvd2VkKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgdW5zaWduZWQg
bGVmdExlbiA9IFN0cmluZygmZm9ybWF0Q29kZSkudG9JbnQoKTsKLSAgICAgICAgICAgIGFsbG93
ZWRMZW5ndGggPSBsZWZ0TGVuICsgYWxsb3dlZExlbmd0aCAtIDI7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBpZiAoYWxsb3dlZExlbmd0aCA8IGRhdGEubWF4SW5wdXRDaGFyc0FsbG93ZWQoKSkK
LSAgICAgICAgZGF0YS5zZXRNYXhJbnB1dENoYXJzQWxsb3dlZChhbGxvd2VkTGVuZ3RoKTsKLQot
ICAgIHJldHVybiBpbnB1dE1hc2s7Ci19Ci0KLSNlbmRpZgotCi19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vSW5wdXRF
bGVtZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhNGU5NWQxOWZiNjQzODY0
YzY0NjEyYmUxNDdmZGQxMjk3OGFmNDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5oCisrKyAvZGV2
L251bGwKQEAgLTEsMTY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2gg
TW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUu
Y29tLykKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0g
KgotICovCi0KLSNpZm5kZWYgSW5wdXRFbGVtZW50X2gKLSNkZWZpbmUgSW5wdXRFbGVtZW50X2gK
LQotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbWlj
U3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQXR0cmlidXRlOwotY2xh
c3MgRG9jdW1lbnQ7Ci1jbGFzcyBFbGVtZW50OwotY2xhc3MgRXZlbnQ7Ci1jbGFzcyBJbnB1dEVs
ZW1lbnREYXRhOwotCi1jbGFzcyBJbnB1dEVsZW1lbnQgewotcHVibGljOgotICAgIHZpcnR1YWwg
fklucHV0RWxlbWVudCgpIHsgfQotCi0gICAgdmlydHVhbCBib29sIGlzQXV0b2ZpbGxlZCgpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNDaGVja2VkKCkgY29uc3QgPSAwOwotICAgIHZp
cnR1YWwgYm9vbCBpc0luZGV0ZXJtaW5hdGUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29s
IGlzSW5wdXRUeXBlSGlkZGVuKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc1Bhc3N3
b3JkRmllbGQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzU2VhcmNoRmllbGQoKSBj
b25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzVGV4dEZpZWxkKCkgY29uc3QgPSAwOwotICAg
IHZpcnR1YWwgYm9vbCBpc1JhZGlvQnV0dG9uKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9v
bCBpc0NoZWNrYm94KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc1JhbmdlQ29udHJv
bCgpIGNvbnN0ID0gMDsKLSAgICAKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNNYXhMZW5ndGgo
KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzU3RlcHBhYmxlKCkgY29uc3QgPSAwOwot
I2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCi0gICAgdmlydHVhbCBib29sIGlzU3BlZWNoRW5hYmxl
ZCgpIGNvbnN0ID0gMDsKLSNlbmRpZiAgICAKLQotICAgIHZpcnR1YWwgYm9vbCBzZWFyY2hFdmVu
dHNTaG91bGRCZURpc3BhdGNoZWQoKSBjb25zdCA9IDA7Ci0KLSAgICB2aXJ0dWFsIGludCBzaXpl
KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRWYWx1ZSgp
IGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0ID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiwgYm9vbCBzZW5kQ2hhbmdlRXZlbnQg
PSBmYWxzZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUZvclVzZXIoY29uc3QgU3Ry
aW5nJikgPSAwOwotICAgIC8vIFRoZSB2YWx1ZSB3aGljaCBpcyBkcmF3biBieSBhIHJlbmRlcmVy
LgotICAgIHZpcnR1YWwgU3RyaW5nIHZpc2libGVWYWx1ZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0
dWFsIFN0cmluZyBjb252ZXJ0RnJvbVZpc2libGVWYWx1ZShjb25zdCBTdHJpbmcmKSBjb25zdCA9
IDA7Ci0KLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHNwZWNpZmllZCBzdHJpbmcgY2FuIGJl
IHNldCBhcyB0aGUgdmFsdWUgb2YgSW5wdXRFbGVtZW50LgotICAgIHZpcnR1YWwgYm9vbCBpc0Fj
Y2VwdGFibGVWYWx1ZShjb25zdCBTdHJpbmcmKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBTdHJp
bmcgc2FuaXRpemVWYWx1ZShjb25zdCBTdHJpbmcmKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHNldFZhbHVlRnJvbVJlbmRlcmVyKGNvbnN0IFN0cmluZyYpID0gMDsKLQotICAgIHZpcnR1
YWwgdm9pZCBjYWNoZVNlbGVjdGlvbihpbnQgc3RhcnQsIGludCBlbmQpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgc2VsZWN0KCkgPSAwOwotICAKLSNpZiBFTkFCTEUoV0NTUykKLSAgICB2aXJ0dWFs
IElucHV0RWxlbWVudERhdGEgZGF0YSgpIGNvbnN0ID0gMDsgCi0jZW5kaWYKLQotICAgIHN0YXRp
YyBjb25zdCBpbnQgc19tYXhpbXVtTGVuZ3RoOwotICAgIHN0YXRpYyBjb25zdCBpbnQgc19kZWZh
dWx0U2l6ZTsKLQotICAgIC8vIFJlcGxhY2VzIENScyBhbmQgTEZzLCBzaHJpbmtzIHRoZSB2YWx1
ZSBmb3Igc19tYXhpbXVtTGVuZ3RoLgotICAgIC8vIFRoaXMgc2hvdWxkIGJlIGFwcGxpZWQgdG8g
dmFsdWVzIGZyb20gdGhlIEhUTUwgdmFsdWUgYXR0cmlidXRlIGFuZCB0aGUgRE9NIHZhbHVlIHBy
b3BlcnR5LgotICAgIC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGJ5IHNh
bml0aXplVmFsdWUoKSBpbXBsZW1lbnRhdGlvbnMuCi0gICAgLy8gUHVibGljIHNvIGl0IGNhbiBi
ZSBjYWxsZWQgYnkgSW5wdXRUeXBlLgotICAgIHN0YXRpYyBTdHJpbmcgc2FuaXRpemVWYWx1ZUZv
clRleHRGaWVsZChjb25zdCBJbnB1dEVsZW1lbnQqLCBjb25zdCBTdHJpbmcmKTsKLQotcHJvdGVj
dGVkOgotICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoRm9jdXNFdmVudChJbnB1dEVsZW1lbnQqLCBF
bGVtZW50Kik7Ci0gICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hCbHVyRXZlbnQoSW5wdXRFbGVtZW50
KiwgRWxlbWVudCopOwotICAgIHN0YXRpYyB2b2lkIHVwZGF0ZUZvY3VzQXBwZWFyYW5jZShJbnB1
dEVsZW1lbnREYXRhJiwgSW5wdXRFbGVtZW50KiwgRWxlbWVudCosIGJvb2wgcmVzdG9yZVByZXZp
b3VzU2VsZWN0aW9uKTsKLSAgICBzdGF0aWMgdm9pZCB1cGRhdGVTZWxlY3Rpb25SYW5nZShJbnB1
dEVsZW1lbnQqLCBFbGVtZW50KiwgaW50IHN0YXJ0LCBpbnQgZW5kKTsKLSAgICBzdGF0aWMgdm9p
ZCBhYm91dFRvVW5sb2FkKElucHV0RWxlbWVudCosIEVsZW1lbnQqKTsKLSAgICBzdGF0aWMgdm9p
ZCBzZXRWYWx1ZUZyb21SZW5kZXJlcihJbnB1dEVsZW1lbnREYXRhJiwgSW5wdXRFbGVtZW50Kiwg
RWxlbWVudCosIGNvbnN0IFN0cmluZyYpOwotICAgIC8vIFJlcGxhY2VzIENScyBhbmQgTEZzLCBz
aHJpbmtzIHRoZSB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBtYXhpbXVtIGxlbmd0aC4KLSAgICAv
LyBUaGlzIHNob3VsZCBiZSBhcHBsaWVkIHRvIHZhbHVlcyBzcGVjaWZpZWQgYnkgdXNlcnMuCi0g
ICAgLy8gVGhlIGlucHV0IHN0cmluZyBtYXkgYmUgYSBmcmFnbWVudCBvZiB0aGUgd2hvbGUgdmFs
dWUuCi0gICAgc3RhdGljIFN0cmluZyBzYW5pdGl6ZVVzZXJJbnB1dFZhbHVlKGNvbnN0IElucHV0
RWxlbWVudCosIGNvbnN0IFN0cmluZyYsIGludCk7Ci0gICAgc3RhdGljIHZvaWQgaGFuZGxlQmVm
b3JlVGV4dEluc2VydGVkRXZlbnQoSW5wdXRFbGVtZW50RGF0YSYsIElucHV0RWxlbWVudCosIEVs
ZW1lbnQqLCBFdmVudCopOwotICAgIHN0YXRpYyB2b2lkIHBhcnNlU2l6ZUF0dHJpYnV0ZShJbnB1
dEVsZW1lbnREYXRhJiwgRWxlbWVudCosIEF0dHJpYnV0ZSopOwotICAgIHN0YXRpYyB2b2lkIHBh
cnNlTWF4TGVuZ3RoQXR0cmlidXRlKElucHV0RWxlbWVudERhdGEmLCBJbnB1dEVsZW1lbnQqLCBF
bGVtZW50KiwgQXR0cmlidXRlKik7Ci0gICAgc3RhdGljIHZvaWQgdXBkYXRlVmFsdWVJZk5lZWRl
ZChJbnB1dEVsZW1lbnREYXRhJiwgSW5wdXRFbGVtZW50Kik7Ci0gICAgc3RhdGljIHZvaWQgbm90
aWZ5Rm9ybVN0YXRlQ2hhbmdlZChFbGVtZW50Kik7Ci0jaWYgRU5BQkxFKFdDU1MpCi0gICAgc3Rh
dGljIGJvb2wgaXNDb25mb3JtVG9JbnB1dE1hc2soY29uc3QgSW5wdXRFbGVtZW50RGF0YSYsIGNv
bnN0IFN0cmluZyYpOwotICAgIHN0YXRpYyBib29sIGlzQ29uZm9ybVRvSW5wdXRNYXNrKGNvbnN0
IElucHV0RWxlbWVudERhdGEmLCBVQ2hhciwgdW5zaWduZWQpOwotICAgIHN0YXRpYyBTdHJpbmcg
dmFsaWRhdGVJbnB1dE1hc2soSW5wdXRFbGVtZW50RGF0YSYsIFN0cmluZyYpOwotI2VuZGlmCi19
OwotCi0vLyBIVE1MSW5wdXRFbGVtZW50IGhvbGQgdGhpcyBzdHJ1Y3QgYXMgbWVtYmVyIHZhcmlh
YmxlCi0vLyBhbmQgcGFzcyBpdCB0byB0aGUgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMgaW4gSW5w
dXRFbGVtZW50Ci1jbGFzcyBJbnB1dEVsZW1lbnREYXRhIHsKLXB1YmxpYzoKLSAgICBJbnB1dEVs
ZW1lbnREYXRhKCk7Ci0gICAgfklucHV0RWxlbWVudERhdGEoKTsKLQotICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgbmFtZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0TmFtZShjb25zdCBBdG9taWNTdHJp
bmcmIHZhbHVlKSB7IG1fbmFtZSA9IHZhbHVlOyB9Ci0KLSAgICAvLyBUaGUgbnVsbCBTdHJpbmcg
cmVwcmVzZW50cyAidXNlIHRoZSBkZWZhdWx0IHZhbHVlLCIgYW5kIHRoZSBlbXB0eSBTdHJpbmcK
LSAgICAvLyByZXByZXNlbnRzIHRoZSBlbXB0eSB2YWx1ZS4KLSAgICBTdHJpbmcgdmFsdWUoKSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Ci0gICAgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcm
IHZhbHVlKSB7IG1fdmFsdWUgPSB2YWx1ZTsgfQotCi0gICAgY29uc3QgU3RyaW5nJiBzdWdnZXN0
ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VnZ2VzdGVkVmFsdWU7IH0KLSAgICB2b2lkIHNl
dFN1Z2dlc3RlZFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpIHsgbV9zdWdnZXN0ZWRWYWx1ZSA9
IHZhbHVlOyB9Ci0KLSAgICBpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotICAg
IHZvaWQgc2V0U2l6ZShpbnQgdmFsdWUpIHsgbV9zaXplID0gdmFsdWU7IH0KLQotICAgIGludCBt
YXhMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX21heExlbmd0aDsgfQotICAgIHZvaWQgc2V0TWF4
TGVuZ3RoKGludCB2YWx1ZSkgeyBtX21heExlbmd0aCA9IHZhbHVlOyB9Ci0KLSAgICBpbnQgY2Fj
aGVkU2VsZWN0aW9uU3RhcnQoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZFNlbGVjdGlvblN0YXJ0
OyB9Ci0gICAgdm9pZCBzZXRDYWNoZWRTZWxlY3Rpb25TdGFydChpbnQgdmFsdWUpIHsgbV9jYWNo
ZWRTZWxlY3Rpb25TdGFydCA9IHZhbHVlOyB9Ci0KLSAgICBpbnQgY2FjaGVkU2VsZWN0aW9uRW5k
KCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRTZWxlY3Rpb25FbmQ7IH0KLSAgICB2b2lkIHNldENh
Y2hlZFNlbGVjdGlvbkVuZChpbnQgdmFsdWUpIHsgbV9jYWNoZWRTZWxlY3Rpb25FbmQgPSB2YWx1
ZTsgfQotCi0jaWYgRU5BQkxFKFdDU1MpCi0gICAgU3RyaW5nIGlucHV0Rm9ybWF0TWFzaygpIGNv
bnN0IHsgcmV0dXJuIG1faW5wdXRGb3JtYXRNYXNrOyB9Ci0gICAgdm9pZCBzZXRJbnB1dEZvcm1h
dE1hc2soY29uc3QgU3RyaW5nJiBtYXNrKSB7IG1faW5wdXRGb3JtYXRNYXNrID0gbWFzazsgfQot
IAotICAgIHVuc2lnbmVkIG1heElucHV0Q2hhcnNBbGxvd2VkKCkgY29uc3QgeyByZXR1cm4gbV9t
YXhJbnB1dENoYXJzQWxsb3dlZDsgfQotICAgIHZvaWQgc2V0TWF4SW5wdXRDaGFyc0FsbG93ZWQo
dW5zaWduZWQgbWF4TGVuZ3RoKSB7IG1fbWF4SW5wdXRDaGFyc0FsbG93ZWQgPSBtYXhMZW5ndGg7
IH0KLSAgCi0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBBdG9taWNTdHJpbmcgbV9uYW1lOwotICAg
IFN0cmluZyBtX3ZhbHVlOwotICAgIFN0cmluZyBtX3N1Z2dlc3RlZFZhbHVlOwotICAgIGludCBt
X3NpemU7Ci0gICAgaW50IG1fbWF4TGVuZ3RoOwotICAgIGludCBtX2NhY2hlZFNlbGVjdGlvblN0
YXJ0OwotICAgIGludCBtX2NhY2hlZFNlbGVjdGlvbkVuZDsKLSNpZiBFTkFCTEUoV0NTUykKLSAg
ICBTdHJpbmcgbV9pbnB1dEZvcm1hdE1hc2s7Ci0gICAgdW5zaWduZWQgbV9tYXhJbnB1dENoYXJz
QWxsb3dlZDsKLSNlbmRpZgotfTsKLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCAw
ZmM0MDBjNGMyNWE4Y2I3NTZmYjhiZjk1NDllYTY3YTkwMzZlODgzLi40NzdkYTc2MzJkOTQ2MzU0
YmUxMzZlMzk4MWFlNjYxMTUxNDAzNDY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC01NTksMTIgKzU1
OSwxMiBAQCB2b2lkIE5vZGU6OnNldFNoYWRvd0hvc3QoRWxlbWVudCogaG9zdCkKICAgICBzZXRQ
YXJlbnQoaG9zdCk7CiB9CiAKLUlucHV0RWxlbWVudCogTm9kZTo6dG9JbnB1dEVsZW1lbnQoKQor
SFRNTElucHV0RWxlbWVudCogTm9kZTo6dG9JbnB1dEVsZW1lbnQoKQogewogICAgIC8vIElmIG9u
ZSBvZiB0aGUgYmVsb3cgQVNTRVJUcyB0cmlnZ2VyLCB5b3UgYXJlIGNhbGxpbmcgdGhpcyBmdW5j
dGlvbgogICAgIC8vIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgZnJvbSBhIGNvbnN0cnVjdG9yIG9y
IGRlc3RydWN0b3Igb2YgdGhpcyBvYmplY3QuCiAgICAgLy8gRG9uJ3QgZG8gdGhpcyEKLSAgICBB
U1NFUlQoIShpc0hUTUxFbGVtZW50KCkgJiYgaGFzVGFnTmFtZShpbnB1dFRhZykpKTsKKyAgICBB
U1NFUlQoIShpc0hUTUxFbGVtZW50KCkgJiYgKGhhc1RhZ05hbWUoaW5wdXRUYWcpIHx8IGhhc1Rh
Z05hbWUoaXNpbmRleFRhZykpKSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCmluZGV4
IDA1NzFkZmFjNTk0ZDQwZGRkNTExYWMxYzY5ZmFmNGVkMzMxZTFmOWUuLmMyODhkMWY5YWIxNmY4
MzRlMGZlNjQ5ZDg2YWEzN2UwMjdiNjNjMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaApAQCAtNTQsNyArNTQsNyBA
QCBjbGFzcyBFdmVudENvbnRleHQ7CiBjbGFzcyBFdmVudExpc3RlbmVyOwogY2xhc3MgRmxvYXRQ
b2ludDsKIGNsYXNzIEZyYW1lOwotY2xhc3MgSW5wdXRFbGVtZW50OworY2xhc3MgSFRNTElucHV0
RWxlbWVudDsKIGNsYXNzIEludFJlY3Q7CiBjbGFzcyBLZXlib2FyZEV2ZW50OwogY2xhc3MgTlNS
ZXNvbHZlcjsKQEAgLTUyNCw3ICs1MjQsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIE5vZGUq
IHRvTm9kZSgpIHsgcmV0dXJuIHRoaXM7IH0KIAotICAgIHZpcnR1YWwgSW5wdXRFbGVtZW50KiB0
b0lucHV0RWxlbWVudCgpOworICAgIHZpcnR1YWwgSFRNTElucHV0RWxlbWVudCogdG9JbnB1dEVs
ZW1lbnQoKTsKIAogICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVt
ZW50LmNwcAppbmRleCBmOWNjYWY5MDRjNzczMGM3OWU4OTZhNzljNTliZTY0MzIyNDA3ZWMyLi5i
MDcxMzQ0OGRiYTQyZDU4MDE0MTRhYzgwOTA1NTk0NjA1MjZhMTc5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKQEAgLTYsNiArNiw3IEBACiAgKiAgICAgICAgICAg
KEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAbnlwb3AuY29tKQogICogQ29weXJpZ2h0
IChDKSAyMDA3IFNhbXVlbCBXZWluaWcgKHNhbUB3ZWJraXQub3JnKQogICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cu
dG9yY2htb2JpbGUuY29tLykKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzAsMTEgKzMxLDE0IEBA
CiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2lu
Y2x1ZGUgIkJlZm9yZVRleHRJbnNlcnRlZEV2ZW50LmgiCisjaW5jbHVkZSAiQ2hyb21lLmgiCisj
aW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgog
I2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGaWxlTGlzdC5oIgorI2luY2x1ZGUgIkZyYW1l
LmgiCiAjaW5jbHVkZSAiSFRNTENvbGxlY3Rpb24uaCIKICNpbmNsdWRlICJIVE1MRGF0YUxpc3RF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCkBAIC00NSwxMSArNDksMTQg
QEAKICNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5n
cy5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2wuaCIK
ICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCIKICNpbmNsdWRlICJSZW5k
ZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRl
ICJTY3JpcHRFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5j
bHVkZSAiV2hlZWxFdmVudC5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgpAQCAtNjAsMTAgKzY3LDIwIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAorLy8gRklYTUU6IEFjY29yZGlu
ZyB0byBIVE1MNCwgdGhlIGxlbmd0aCBhdHRyaWJ1dGUncyB2YWx1ZSBjYW4gYmUgYXJiaXRyYXJp
bHkKKy8vIGxhcmdlLiBIb3dldmVyLCBkdWUgdG8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0NTM2IHRoaW5ncworLy8gZ2V0IHJhdGhlciBzbHVnZ2lzaCB3aGVuIGEg
dGV4dCBmaWVsZCBoYXMgYSBsYXJnZXIgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhbgorLy8gdGhp
cywgZXZlbiB3aGVuIGp1c3QgY2xpY2tpbmcgaW4gdGhlIHRleHQgZmllbGQuCitjb25zdCBpbnQg
SFRNTElucHV0RWxlbWVudDo6c19tYXhpbXVtTGVuZ3RoID0gNTI0Mjg4OworY29uc3QgaW50IEhU
TUxJbnB1dEVsZW1lbnQ6OnNfZGVmYXVsdFNpemUgPSAyMDsKIGNvbnN0IGludCBtYXhTYXZlZFJl
c3VsdHMgPSAyNTY7CiAKIEhUTUxJbnB1dEVsZW1lbnQ6OkhUTUxJbnB1dEVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBIVE1MRm9ybUVsZW1l
bnQqIGZvcm0sIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQogICAgIDogSFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQsIGZvcm0pCisgICAgLCBtX3NpemUoc19kZWZhdWx0
U2l6ZSkKKyAgICAsIG1fbWF4TGVuZ3RoKHNfbWF4aW11bUxlbmd0aCkKKyAgICAsIG1fY2FjaGVk
U2VsZWN0aW9uU3RhcnQoLTEpCisgICAgLCBtX2NhY2hlZFNlbGVjdGlvbkVuZCgtMSkKICAgICAs
IG1fbWF4UmVzdWx0cygtMSkKICAgICAsIG1faXNDaGVja2VkKGZhbHNlKQogICAgICwgbV9yZWZs
ZWN0c0NoZWNrZWRBdHRyaWJ1dGUodHJ1ZSkKQEAgLTk4LDcgKzExNSw3IEBAIEhUTUxJbnB1dEVs
ZW1lbnQ6On5IVE1MSW5wdXRFbGVtZW50KCkKIAogY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MSW5w
dXRFbGVtZW50Ojpmb3JtQ29udHJvbE5hbWUoKSBjb25zdAogewotICAgIHJldHVybiBtX2RhdGEu
bmFtZSgpOworICAgIHJldHVybiBtX25hbWUuaXNOdWxsKCkgPyBlbXB0eUF0b20gOiBtX25hbWU7
CiB9CiAKIGJvb2wgSFRNTElucHV0RWxlbWVudDo6YXV0b0NvbXBsZXRlKCkgY29uc3QKQEAgLTIw
MCw3ICsyMTcsNyBAQCBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OnRvb0xvbmcoY29uc3QgU3RyaW5n
JiB2YWx1ZSwgTmVlZHNUb0NoZWNrRGlydHlGbGFnIGNoZWNrKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgaWYgKGNoZWNrID09IENoZWNrRGlydHlGbGFnKSB7CiAgICAgICAgIC8vIFJldHVy
biBmYWxzZSBmb3IgdGhlIGRlZmF1bHQgdmFsdWUgZXZlbiBpZiBpdCBpcyBsb25nZXIgdGhhbiBt
YXhMZW5ndGguCi0gICAgICAgIGJvb2wgdXNlckVkaXRlZCA9ICFtX2RhdGEudmFsdWUoKS5pc051
bGwoKTsKKyAgICAgICAgYm9vbCB1c2VyRWRpdGVkID0gIW1fdmFsdWUuaXNOdWxsKCk7CiAgICAg
ICAgIGlmICghdXNlckVkaXRlZCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBA
IC0zOTMsMTUgKzQxMCwyOSBAQCBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmlzTW91c2VGb2N1c2Fi
bGUoKSBjb25zdAogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnVwZGF0ZUZvY3VzQXBwZWFyYW5j
ZShib29sIHJlc3RvcmVQcmV2aW91c1NlbGVjdGlvbikKIHsKLSAgICBpZiAoaXNUZXh0RmllbGQo
KSkKLSAgICAgICAgSW5wdXRFbGVtZW50Ojp1cGRhdGVGb2N1c0FwcGVhcmFuY2UobV9kYXRhLCB0
aGlzLCB0aGlzLCByZXN0b3JlUHJldmlvdXNTZWxlY3Rpb24pOwotICAgIGVsc2UKKyAgICBpZiAo
aXNUZXh0RmllbGQoKSkgeworICAgICAgICBpZiAoIXJlc3RvcmVQcmV2aW91c1NlbGVjdGlvbiB8
fCBtX2NhY2hlZFNlbGVjdGlvblN0YXJ0ID09IC0xKQorICAgICAgICAgICAgc2VsZWN0KCk7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gUmVzdG9yZSB0aGUgY2FjaGVkIHNlbGVjdGlv
bi4KKyAgICAgICAgICAgIFdlYkNvcmU6OnNldFNlbGVjdGlvblJhbmdlKHRoaXMsIG1fY2FjaGVk
U2VsZWN0aW9uU3RhcnQsIG1fY2FjaGVkU2VsZWN0aW9uRW5kKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoZG9jdW1lbnQoKS0+ZnJhbWUoKSkKKyAgICAgICAgICAgIGRvY3VtZW50KCktPmZyYW1l
KCktPnNlbGVjdGlvbigpLT5yZXZlYWxTZWxlY3Rpb24oKTsKKyAgICB9IGVsc2UKICAgICAgICAg
SFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6dXBkYXRlRm9jdXNBcHBlYXJhbmNlKHJl
c3RvcmVQcmV2aW91c1NlbGVjdGlvbik7CiB9CiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6YWJv
dXRUb1VubG9hZCgpCiB7Ci0gICAgSW5wdXRFbGVtZW50OjphYm91dFRvVW5sb2FkKHRoaXMsIHRo
aXMpOworICAgIGlmICghaXNUZXh0RmllbGQoKSB8fCAhZm9jdXNlZCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOworICAgIGlmICgh
ZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIGZyYW1lLT5lZGl0b3IoKS0+dGV4dEZpZWxk
RGlkRW5kRWRpdGluZyh0aGlzKTsKIH0KIAogYm9vbCBIVE1MSW5wdXRFbGVtZW50OjpzaG91bGRV
c2VJbnB1dE1ldGhvZCgpIGNvbnN0CkBAIC00MTEsMTMgKzQ0MiwyNCBAQCBib29sIEhUTUxJbnB1
dEVsZW1lbnQ6OnNob3VsZFVzZUlucHV0TWV0aG9kKCkgY29uc3QKIAogdm9pZCBIVE1MSW5wdXRF
bGVtZW50OjpoYW5kbGVGb2N1c0V2ZW50KCkKIHsKLSAgICBJbnB1dEVsZW1lbnQ6OmRpc3BhdGNo
Rm9jdXNFdmVudCh0aGlzLCB0aGlzKTsKKyAgICBpZiAoIWlzVGV4dEZpZWxkKCkpCisgICAgICAg
IHJldHVybjsKKyAgICBpZiAoaXNQYXNzd29yZEZpZWxkKCkgJiYgZG9jdW1lbnQoKS0+ZnJhbWUo
KSkKKyAgICAgICAgZG9jdW1lbnQoKS0+c2V0VXNlU2VjdXJlS2V5Ym9hcmRFbnRyeVdoZW5BY3Rp
dmUodHJ1ZSk7CiB9CiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6aGFuZGxlQmx1ckV2ZW50KCkK
IHsKICAgICBtX2lucHV0VHlwZS0+aGFuZGxlQmx1ckV2ZW50KCk7Ci0gICAgSW5wdXRFbGVtZW50
OjpkaXNwYXRjaEJsdXJFdmVudCh0aGlzLCB0aGlzKTsKKworICAgIGlmICghaXNUZXh0RmllbGQo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1l
KCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChpc1Bhc3N3b3Jk
RmllbGQoKSkKKyAgICAgICAgZG9jdW1lbnQoKS0+c2V0VXNlU2VjdXJlS2V5Ym9hcmRFbnRyeVdo
ZW5BY3RpdmUoZmFsc2UpOworICAgIGZyYW1lLT5lZGl0b3IoKS0+dGV4dEZpZWxkRGlkRW5kRWRp
dGluZyh0aGlzKTsKIH0KIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRUeXBlKGNvbnN0IFN0
cmluZyYgdHlwZSkKQEAgLTQ2NiwxNCArNTA4LDE0IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6
dXBkYXRlVHlwZSgpCiAKICAgICBib29sIHdpbGxTdG9yZVZhbHVlID0gbV9pbnB1dFR5cGUtPnN0
b3Jlc1ZhbHVlU2VwYXJhdGVGcm9tQXR0cmlidXRlKCk7CiAKLSAgICBpZiAoZGlkU3RvcmVWYWx1
ZSAmJiAhd2lsbFN0b3JlVmFsdWUgJiYgIW1fZGF0YS52YWx1ZSgpLmlzTnVsbCgpKSB7Ci0gICAg
ICAgIHNldEF0dHJpYnV0ZSh2YWx1ZUF0dHIsIG1fZGF0YS52YWx1ZSgpKTsKLSAgICAgICAgbV9k
YXRhLnNldFZhbHVlKFN0cmluZygpKTsKKyAgICBpZiAoZGlkU3RvcmVWYWx1ZSAmJiAhd2lsbFN0
b3JlVmFsdWUgJiYgIW1fdmFsdWUuaXNOdWxsKCkpIHsKKyAgICAgICAgc2V0QXR0cmlidXRlKHZh
bHVlQXR0ciwgbV92YWx1ZSk7CisgICAgICAgIG1fdmFsdWUgPSBTdHJpbmcoKTsKICAgICB9CiAg
ICAgaWYgKCFkaWRTdG9yZVZhbHVlICYmIHdpbGxTdG9yZVZhbHVlKQotICAgICAgICBtX2RhdGEu
c2V0VmFsdWUoc2FuaXRpemVWYWx1ZShmYXN0R2V0QXR0cmlidXRlKHZhbHVlQXR0cikpKTsKKyAg
ICAgICAgbV92YWx1ZSA9ICBzYW5pdGl6ZVZhbHVlKGZhc3RHZXRBdHRyaWJ1dGUodmFsdWVBdHRy
KSk7CiAgICAgZWxzZQotICAgICAgICBJbnB1dEVsZW1lbnQ6OnVwZGF0ZVZhbHVlSWZOZWVkZWQo
bV9kYXRhLCB0aGlzKTsKKyAgICAgICAgdXBkYXRlVmFsdWVJZk5lZWRlZCgpOwogCiAgICAgaWYg
KG5lZWRlZEFjdGl2YXRpb25DYWxsYmFjaykKICAgICAgICAgdW5yZWdpc3RlckZvckFjdGl2YXRp
b25DYWxsYmFja0lmTmVlZGVkKCk7CkBAIC01MDIsNyArNTQ0LDcgQEAgdm9pZCBIVE1MSW5wdXRF
bGVtZW50Ojp1cGRhdGVUeXBlKCkKICAgICBjaGVja2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0dG9u
KHRoaXMpOwogCiAgICAgc2V0TmVlZHNWYWxpZGl0eUNoZWNrKCk7Ci0gICAgSW5wdXRFbGVtZW50
Ojpub3RpZnlGb3JtU3RhdGVDaGFuZ2VkKHRoaXMpOworICAgIG5vdGlmeUZvcm1TdGF0ZUNoYW5n
ZWQoKTsKIH0KIAogY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MSW5wdXRFbGVtZW50Ojpmb3JtQ29u
dHJvbFR5cGUoKSBjb25zdApAQCAtNTYwLDcgKzYwMiw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewogICAgIGlmIChhdHRy
LT5uYW1lKCkgPT0gbmFtZUF0dHIpIHsKICAgICAgICAgY2hlY2tlZFJhZGlvQnV0dG9ucygpLnJl
bW92ZUJ1dHRvbih0aGlzKTsKLSAgICAgICAgbV9kYXRhLnNldE5hbWUoYXR0ci0+dmFsdWUoKSk7
CisgICAgICAgIG1fbmFtZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgICAgIGNoZWNrZWRSYWRpb0J1
dHRvbnMoKS5hZGRCdXR0b24odGhpcyk7CiAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRX
aXRoU3RhdGU6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogICAgIH0gZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IGF1dG9jb21wbGV0ZUF0dHIpIHsKQEAgLTU4Miw3ICs2MjQsNyBAQCB2b2lk
IEhUTUxJbnB1dEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikK
ICAgICAgICAgdXBkYXRlVHlwZSgpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHZh
bHVlQXR0cikgewogICAgICAgICAvLyBXZSBvbmx5IG5lZWQgdG8gc2V0Q2hhbmdlZCBpZiB0aGUg
Zm9ybSBpcyBsb29raW5nIGF0IHRoZSBkZWZhdWx0IHZhbHVlIHJpZ2h0IG5vdy4KLSAgICAgICAg
aWYgKG1fZGF0YS52YWx1ZSgpLmlzTnVsbCgpKQorICAgICAgICBpZiAobV92YWx1ZS5pc051bGwo
KSkKICAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICAgICAgc2V0Rm9ybUNv
bnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcihmYWxzZSk7CiAgICAgICAgIHNldE5lZWRzVmFsaWRp
dHlDaGVjaygpOwpAQCAtNTk2LDExICs2MzgsMjAgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiAgICAgICAgICAgICBtX3JlZmxl
Y3RzQ2hlY2tlZEF0dHJpYnV0ZSA9IHRydWU7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBtYXhsZW5ndGhBdHRyKSB7Ci0gICAgICAgIElucHV0RWxlbWVudDo6cGFy
c2VNYXhMZW5ndGhBdHRyaWJ1dGUobV9kYXRhLCB0aGlzLCB0aGlzLCBhdHRyKTsKKyAgICAgICAg
aW50IG1heExlbmd0aCA9IGF0dHItPmlzTnVsbCgpID8gc19tYXhpbXVtTGVuZ3RoIDogYXR0ci0+
dmFsdWUoKS50b0ludCgpOworICAgICAgICBpZiAobWF4TGVuZ3RoIDw9IDAgfHwgbWF4TGVuZ3Ro
ID4gc19tYXhpbXVtTGVuZ3RoKQorICAgICAgICAgICAgbWF4TGVuZ3RoID0gc19tYXhpbXVtTGVu
Z3RoOworICAgICAgICBpbnQgb2xkTWF4TGVuZ3RoID0gbV9tYXhMZW5ndGg7CisgICAgICAgIG1f
bWF4TGVuZ3RoID0gbWF4TGVuZ3RoOworICAgICAgICBpZiAob2xkTWF4TGVuZ3RoICE9IG1heExl
bmd0aCkKKyAgICAgICAgICAgIHVwZGF0ZVZhbHVlSWZOZWVkZWQoKTsKKyAgICAgICAgc2V0TmVl
ZHNTdHlsZVJlY2FsYygpOwogICAgICAgICBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKLSAgICB9
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBzaXplQXR0cikKLSAgICAgICAgSW5wdXRFbGVtZW50
OjpwYXJzZVNpemVBdHRyaWJ1dGUobV9kYXRhLCB0aGlzLCBhdHRyKTsKLSAgICBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gYWx0QXR0cikKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBz
aXplQXR0cikgeworICAgICAgICBtX3NpemUgPSBhdHRyLT5pc051bGwoKSA/IHNfZGVmYXVsdFNp
emUgOiBhdHRyLT52YWx1ZSgpLnRvSW50KCk7CisgICAgICAgIGlmIChyZW5kZXJlcigpKQorICAg
ICAgICAgICAgcmVuZGVyZXIoKS0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7
CisgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYWx0QXR0cikKICAgICAgICAgbV9pbnB1
dFR5cGUtPmFsdEF0dHJpYnV0ZUNoYW5nZWQoKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gc3JjQXR0cikKICAgICAgICAgbV9pbnB1dFR5cGUtPnNyY0F0dHJpYnV0ZUNoYW5nZWQoKTsK
QEAgLTgwOCwxNCArODU5LDE0IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0SW5kZXRlcm1p
bmF0ZShib29sIG5ld1ZhbHVlKQogCiBpbnQgSFRNTElucHV0RWxlbWVudDo6c2l6ZSgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG1fZGF0YS5zaXplKCk7CisgICAgcmV0dXJuIG1fc2l6ZTsKIH0KIAog
dm9pZCBIVE1MSW5wdXRFbGVtZW50Ojpjb3B5Tm9uQXR0cmlidXRlUHJvcGVydGllcyhjb25zdCBF
bGVtZW50KiBzb3VyY2UpCiB7CiAgICAgY29uc3QgSFRNTElucHV0RWxlbWVudCogc291cmNlRWxl
bWVudCA9IHN0YXRpY19jYXN0PGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQqPihzb3VyY2UpOwogCi0g
ICAgbV9kYXRhLnNldFZhbHVlKHNvdXJjZUVsZW1lbnQtPm1fZGF0YS52YWx1ZSgpKTsKKyAgICBt
X3ZhbHVlID0gc291cmNlRWxlbWVudC0+bV92YWx1ZTsKICAgICBzZXRDaGVja2VkKHNvdXJjZUVs
ZW1lbnQtPm1faXNDaGVja2VkKTsKICAgICBtX3JlZmxlY3RzQ2hlY2tlZEF0dHJpYnV0ZSA9IHNv
dXJjZUVsZW1lbnQtPm1fcmVmbGVjdHNDaGVja2VkQXR0cmlidXRlOwogICAgIG1faXNJbmRldGVy
bWluYXRlID0gc291cmNlRWxlbWVudC0+bV9pc0luZGV0ZXJtaW5hdGU7CkBAIC04MjksNyArODgw
LDcgQEAgU3RyaW5nIEhUTUxJbnB1dEVsZW1lbnQ6OnZhbHVlKCkgY29uc3QKICAgICBpZiAobV9p
bnB1dFR5cGUtPmdldFR5cGVTcGVjaWZpY1ZhbHVlKHZhbHVlKSkKICAgICAgICAgcmV0dXJuIHZh
bHVlOwogCi0gICAgdmFsdWUgPSBtX2RhdGEudmFsdWUoKTsKKyAgICB2YWx1ZSA9IG1fdmFsdWU7
CiAgICAgaWYgKCF2YWx1ZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIHZhbHVlOwogCkBAIC04
NTcsNyArOTA4LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1ZUZvclVzZXIoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKIAogY29uc3QgU3RyaW5nJiBIVE1MSW5wdXRFbGVtZW50OjpzdWdn
ZXN0ZWRWYWx1ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZGF0YS5zdWdnZXN0ZWRWYWx1ZSgp
OworICAgIHJldHVybiBtX3N1Z2dlc3RlZFZhbHVlOwogfQogCiB2b2lkIEhUTUxJbnB1dEVsZW1l
bnQ6OnNldFN1Z2dlc3RlZFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCkBAIC04NjUsNyArOTE2
LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRTdWdnZXN0ZWRWYWx1ZShjb25zdCBTdHJp
bmcmIHZhbHVlKQogICAgIGlmICghbV9pbnB1dFR5cGUtPmNhblNldFN1Z2dlc3RlZFZhbHVlKCkp
CiAgICAgICAgIHJldHVybjsKICAgICBzZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVy
KGZhbHNlKTsKLSAgICBtX2RhdGEuc2V0U3VnZ2VzdGVkVmFsdWUoc2FuaXRpemVWYWx1ZSh2YWx1
ZSkpOworICAgIG1fc3VnZ2VzdGVkVmFsdWUgPSBzYW5pdGl6ZVZhbHVlKHZhbHVlKTsKICAgICB1
cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkoZmFsc2UpOwogICAgIGlmIChyZW5kZXJlcigpKQog
ICAgICAgICByZW5kZXJlcigpLT51cGRhdGVGcm9tRWxlbWVudCgpOwpAQCAtODgyLDcgKzkzMyw3
IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSwg
Ym9vbCBzZW5kQ2hhbmdlRXZlbnQpCiAgICAgICAgIGlmIChmaWxlcygpKQogICAgICAgICAgICAg
ZmlsZXMoKS0+Y2xlYXIoKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBtX2RhdGEuc2V0
VmFsdWUoc2FuaXRpemVWYWx1ZSh2YWx1ZSkpOworICAgICAgICAgICAgbV92YWx1ZSA9IHNhbml0
aXplVmFsdWUodmFsdWUpOwogICAgICAgICAgICAgaWYgKGlzVGV4dEZpZWxkKCkpCiAgICAgICAg
ICAgICAgICAgdXBkYXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KGZhbHNlKTsKICAgICAgICAgfQpA
QCAtODkzLDEyICs5NDQsMTIgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1ZShjb25z
dCBTdHJpbmcmIHZhbHVlLCBib29sIHNlbmRDaGFuZ2VFdmVudCkKICAgICBzZXROZWVkc1ZhbGlk
aXR5Q2hlY2soKTsKIAogICAgIGlmIChpc1RleHRGaWVsZCgpKSB7Ci0gICAgICAgIHVuc2lnbmVk
IG1heCA9IG1fZGF0YS52YWx1ZSgpLmxlbmd0aCgpOworICAgICAgICB1bnNpZ25lZCBtYXggPSBt
X3ZhbHVlLmxlbmd0aCgpOwogICAgICAgICBpZiAoZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSA9
PSB0aGlzKQotICAgICAgICAgICAgSW5wdXRFbGVtZW50Ojp1cGRhdGVTZWxlY3Rpb25SYW5nZSh0
aGlzLCB0aGlzLCBtYXgsIG1heCk7CisgICAgICAgICAgICBXZWJDb3JlOjpzZXRTZWxlY3Rpb25S
YW5nZSh0aGlzLCBtYXgsIG1heCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNhY2hlU2Vs
ZWN0aW9uKG1heCwgbWF4KTsKLSAgICAgICAgbV9kYXRhLnNldFN1Z2dlc3RlZFZhbHVlKFN0cmlu
ZygpKTsKKyAgICAgICAgbV9zdWdnZXN0ZWRWYWx1ZSA9IFN0cmluZygpOwogICAgIH0KICAgICBt
X2lucHV0VHlwZS0+dmFsdWVDaGFuZ2VkKCk7CiAKQEAgLTkxNCw3ICs5NjUsNyBAQCB2b2lkIEhU
TUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgc2VuZENo
YW5nZUV2ZW50KQogICAgIGlmIChpc1RleHQoKSAmJiAoIWZvY3VzZWQoKSB8fCAhc2VuZENoYW5n
ZUV2ZW50KSkKICAgICAgICAgc2V0VGV4dEFzT2ZMYXN0Rm9ybUNvbnRyb2xDaGFuZ2VFdmVudCh2
YWx1ZSk7CiAKLSAgICBJbnB1dEVsZW1lbnQ6Om5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQodGhpcyk7
CisgICAgbm90aWZ5Rm9ybVN0YXRlQ2hhbmdlZCgpOwogfQogCiBkb3VibGUgSFRNTElucHV0RWxl
bWVudDo6dmFsdWVBc0RhdGUoKSBjb25zdApAQCAtOTYxLDggKzEwMTIsMjMgQEAgdm9pZCBIVE1M
SW5wdXRFbGVtZW50OjpzZXRWYWx1ZUZyb21SZW5kZXJlcihjb25zdCBTdHJpbmcmIHZhbHVlKQog
ICAgIC8vIEZpbGUgdXBsb2FkIGNvbnRyb2xzIHdpbGwgYWx3YXlzIHVzZSBzZXRGaWxlTGlzdEZy
b21SZW5kZXJlci4KICAgICBBU1NFUlQoIWlzRmlsZVVwbG9hZCgpKTsKIAotICAgIG1fZGF0YS5z
ZXRTdWdnZXN0ZWRWYWx1ZShTdHJpbmcoKSk7Ci0gICAgSW5wdXRFbGVtZW50OjpzZXRWYWx1ZUZy
b21SZW5kZXJlcihtX2RhdGEsIHRoaXMsIHRoaXMsIHZhbHVlKTsKKyAgICBtX3N1Z2dlc3RlZFZh
bHVlID0gU3RyaW5nKCk7CisKKyAgICAvLyBSZW5kZXJlciBhbmQgb3VyIGV2ZW50IGhhbmRsZXIg
YXJlIHJlc3BvbnNpYmxlIGZvciBzYW5pdGl6aW5nIHZhbHVlcy4KKyAgICBBU1NFUlQodmFsdWUg
PT0gc2FuaXRpemVWYWx1ZSh2YWx1ZSkgfHwgc2FuaXRpemVWYWx1ZSh2YWx1ZSkuaXNFbXB0eSgp
KTsKKworICAgIC8vIFdvcmthcm91bmQgZm9yIGJ1ZyB3aGVyZSB0cmFpbGluZyBcbiBpcyBpbmNs
dWRlZCBpbiB0aGUgcmVzdWx0IG9mIHRleHRDb250ZW50LgorICAgIC8vIFRoZSBhc3NlcnQgbWFj
cm8gYWJvdmUgbWF5IGFsc28gYmUgc2ltcGxpZmllZCB0bzogIHZhbHVlID09IGNvbnN0cmFpblZh
bHVlKHZhbHVlKQorICAgIC8vIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTk2NjEKKyAgICBtX3ZhbHVlID0gdmFsdWUgPT0gIlxuIiA/IFN0cmluZygiIikgOiB2YWx1ZTsK
KworICAgIHNldEZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIodHJ1ZSk7CisKKyAgICAv
LyBJbnB1dCBldmVudCBpcyBmaXJlZCBieSB0aGUgTm9kZTo6ZGVmYXVsdEV2ZW50SGFuZGxlciBm
b3IgZWRpdGFibGUgY29udHJvbHMuCisgICAgaWYgKCFpc1RleHRGaWVsZCgpKQorICAgICAgICBk
aXNwYXRjaElucHV0RXZlbnQoKTsKKyAgICBub3RpZnlGb3JtU3RhdGVDaGFuZ2VkKCk7CisKICAg
ICB1cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkoZmFsc2UpOwogICAgIHNldE5lZWRzVmFsaWRp
dHlDaGVjaygpOwogCkBAIC05NzUsNyArMTA0MSw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6
c2V0RmlsZUxpc3RGcm9tUmVuZGVyZXIoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzKQogICAg
IG1faW5wdXRUeXBlLT5zZXRGaWxlTGlzdChwYXRocyk7CiAKICAgICBzZXRGb3JtQ29udHJvbFZh
bHVlTWF0Y2hlc1JlbmRlcmVyKHRydWUpOwotICAgIElucHV0RWxlbWVudDo6bm90aWZ5Rm9ybVN0
YXRlQ2hhbmdlZCh0aGlzKTsKKyAgICBub3RpZnlGb3JtU3RhdGVDaGFuZ2VkKCk7CiAgICAgc2V0
TmVlZHNWYWxpZGl0eUNoZWNrKCk7CiB9CiAKQEAgLTExMDUsNyArMTE3MSw3IEBAIHZvaWQgSFRN
TElucHV0RWxlbWVudDo6c2V0RGVmYXVsdFZhbHVlKGNvbnN0IFN0cmluZyAmdmFsdWUpCiAKIHZv
aWQgSFRNTElucHV0RWxlbWVudDo6c2V0RGVmYXVsdE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBu
YW1lKQogewotICAgIG1fZGF0YS5zZXROYW1lKG5hbWUpOworICAgIG1fbmFtZSA9IG5hbWU7CiB9
CiAKIFN0cmluZyBIVE1MSW5wdXRFbGVtZW50OjphY2NlcHQoKSBjb25zdApAQCAtMTEyMCw3ICsx
MTg2LDcgQEAgU3RyaW5nIEhUTUxJbnB1dEVsZW1lbnQ6OmFsdCgpIGNvbnN0CiAKIGludCBIVE1M
SW5wdXRFbGVtZW50OjptYXhMZW5ndGgoKSBjb25zdAogewotICAgIHJldHVybiBtX2RhdGEubWF4
TGVuZ3RoKCk7CisgICAgcmV0dXJuIG1fbWF4TGVuZ3RoOwogfQogCiB2b2lkIEhUTUxJbnB1dEVs
ZW1lbnQ6OnNldE1heExlbmd0aChpbnQgbWF4TGVuZ3RoLCBFeGNlcHRpb25Db2RlJiBlYykKQEAg
LTEyMTksOCArMTI4NSw4IEBAIGJvb2wgSFRNTElucHV0RWxlbWVudDo6aXNSZXF1aXJlZEZvcm1D
b250cm9sKCkgY29uc3QKIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpjYWNoZVNlbGVjdGlvbihp
bnQgc3RhcnQsIGludCBlbmQpCiB7Ci0gICAgbV9kYXRhLnNldENhY2hlZFNlbGVjdGlvblN0YXJ0
KHN0YXJ0KTsKLSAgICBtX2RhdGEuc2V0Q2FjaGVkU2VsZWN0aW9uRW5kKGVuZCk7CisgICAgbV9j
YWNoZWRTZWxlY3Rpb25TdGFydCA9IHN0YXJ0OworICAgIG1fY2FjaGVkU2VsZWN0aW9uRW5kID0g
ZW5kOwogfQogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmFkZFNlYXJjaFJlc3VsdCgpCkBAIC0x
NDQ0LDExICsxNTEwLDEzOSBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnN0ZXBVcEZyb21SZW5k
ZXJlcihpbnQgbikKIAogI2lmIEVOQUJMRShXQ1NTKQogCitzdGF0aWMgaW5saW5lIGNvbnN0IEF0
b21pY1N0cmluZyYgZm9ybWF0Q29kZXMoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRv
bWljU3RyaW5nLCBjb2RlcywgKCJBYU5uWHhNbSIpKTsKKyAgICByZXR1cm4gY29kZXM7Cit9CisK
K3N0YXRpYyB1bnNpZ25lZCBjdXJzb3JQb3NpdGlvblRvTWFza0luZGV4KGNvbnN0IFN0cmluZyYg
aW5wdXRGb3JtYXRNYXNrLCB1bnNpZ25lZCBjdXJzb3JQb3NpdGlvbikKK3sKKyAgICBVQ2hhciBt
YXNrOworICAgIGludCBpbmRleCA9IC0xOworICAgIGRvIHsKKyAgICAgICAgbWFzayA9IGlucHV0
Rm9ybWF0TWFza1srK2luZGV4XTsKKyAgICAgICAgaWYgKG1hc2sgPT0gJ1xcJykKKyAgICAgICAg
ICAgICsraW5kZXg7CisgICAgICAgIGVsc2UgaWYgKG1hc2sgPT0gJyonIHx8IChpc0FTQ0lJRGln
aXQobWFzaykgJiYgbWFzayAhPSAnMCcpKSB7CisgICAgICAgICAgICBpbmRleCA9IGlucHV0Rm9y
bWF0TWFzay5sZW5ndGgoKSAtIDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IH0gd2hpbGUgKGN1cnNvclBvc2l0aW9uLS0pOworCisgICAgcmV0dXJuIGluZGV4OworfQorCiti
b29sIEhUTUxJbnB1dEVsZW1lbnQ6OmlzQ29uZm9ybVRvSW5wdXRNYXNrKGNvbnN0IFN0cmluZyYg
aW5wdXRDaGFycykgY29uc3QKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5wdXRD
aGFycy5sZW5ndGgoKTsgKytpKQorICAgICAgICBpZiAoIWlzQ29uZm9ybVRvSW5wdXRNYXNrKGlu
cHV0Q2hhcnNbaV0sIGkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmlzQ29uZm9ybVRvSW5wdXRNYXNrKFVD
aGFyIGluQ2hhciwgdW5zaWduZWQgY3Vyc29yUG9zaXRpb24pIGNvbnN0Cit7CisgICAgaWYgKG1f
aW5wdXRGb3JtYXRNYXNrLmlzRW1wdHkoKSB8fCBtX2lucHV0Rm9ybWF0TWFzayA9PSAiKk0iIHx8
IG1faW5wdXRGb3JtYXRNYXNrID09ICIqbSIpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
aWYgKGN1cnNvclBvc2l0aW9uID49IG1fbWF4SW5wdXRDaGFyc0FsbG93ZWQoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgdW5zaWduZWQgbWFza0luZGV4ID0gY3Vyc29yUG9zaXRpb25U
b01hc2tJbmRleChtX2lucHV0Rm9ybWF0TWFzaywgY3Vyc29yUG9zaXRpb24pOworICAgIGJvb2wg
b2sgPSB0cnVlOworICAgIFVDaGFyIG1hc2sgPSBtX2lucHV0Rm9ybWF0TWFza1ttYXNrSW5kZXhd
OworICAgIC8vIE1hdGNoIHRoZSBpbnB1dGVkIGNoYXJhY3RlciB3aXRoIGlucHV0IG1hc2sKKyAg
ICBzd2l0Y2ggKG1hc2spIHsKKyAgICBjYXNlICdBJzoKKyAgICAgICAgb2sgPSAhaXNBU0NJSURp
Z2l0KGluQ2hhcikgJiYgIWlzQVNDSUlMb3dlcihpbkNoYXIpICYmIGlzQVNDSUlQcmludGFibGUo
aW5DaGFyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAnYSc6CisgICAgICAgIG9rID0gIWlz
QVNDSUlEaWdpdChpbkNoYXIpICYmICFpc0FTQ0lJVXBwZXIoaW5DaGFyKSAmJiBpc0FTQ0lJUHJp
bnRhYmxlKGluQ2hhcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ04nOgorICAgICAgICBv
ayA9IGlzQVNDSUlEaWdpdChpbkNoYXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlICduJzoK
KyAgICAgICAgb2sgPSAhaXNBU0NJSUFscGhhKGluQ2hhcikgJiYgaXNBU0NJSVByaW50YWJsZShp
bkNoYXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlICdYJzoKKyAgICAgICAgb2sgPSAhaXNB
U0NJSUxvd2VyKGluQ2hhcikgJiYgaXNBU0NJSVByaW50YWJsZShpbkNoYXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlICd4JzoKKyAgICAgICAgb2sgPSAhaXNBU0NJSVVwcGVyKGluQ2hhcikg
JiYgaXNBU0NJSVByaW50YWJsZShpbkNoYXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlICdN
JzoKKyAgICBjYXNlICdtJzoKKyAgICAgICAgb2sgPSBpc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIG9rID0gKG1hc2sgPT0gaW5D
aGFyKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIG9rOworfQorCitTdHJp
bmcgSFRNTElucHV0RWxlbWVudDo6dmFsaWRhdGVJbnB1dE1hc2soU3RyaW5nJiBpbnB1dE1hc2sp
Cit7CisgICAgaW5wdXRNYXNrLnJlcGxhY2UoIlxcXFwiLCAiXFwiKTsKKworICAgIGJvb2wgaXNW
YWxpZCA9IHRydWU7CisgICAgYm9vbCBoYXNXaWxkY2FyZCA9IGZhbHNlOworICAgIHVuc2lnbmVk
IGVzY2FwZUNoYXJDb3VudCA9IDA7CisgICAgdW5zaWduZWQgbWFza0xlbmd0aCA9IGlucHV0TWFz
ay5sZW5ndGgoKTsKKyAgICBVQ2hhciBmb3JtYXRDb2RlOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtYXNrTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgZm9ybWF0Q29kZSA9IGlucHV0TWFz
a1tpXTsKKyAgICAgICAgaWYgKGZvcm1hdENvZGVzKCkuZmluZChmb3JtYXRDb2RlKSA9PSAtMSkg
eworICAgICAgICAgICAgaWYgKGZvcm1hdENvZGUgPT0gJyonIHx8IChpc0FTQ0lJRGlnaXQoZm9y
bWF0Q29kZSkgJiYgZm9ybWF0Q29kZSAhPSAnMCcpKSB7CisgICAgICAgICAgICAgICAgLy8gVmFs
aWRhdGUgY29kZXMgd2hpY2ggZW5kcyB3aXRoICcqZicgb3IgJ25mJworICAgICAgICAgICAgICAg
IGZvcm1hdENvZGUgPSBpbnB1dE1hc2tbKytpXTsKKyAgICAgICAgICAgICAgICBpZiAoKGkgKyAx
ICE9IG1hc2tMZW5ndGgpIHx8IGZvcm1hdENvZGVzKCkuZmluZChmb3JtYXRDb2RlKSA9PSAtMSkg
eworICAgICAgICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBoYXNXaWxkY2Fy
ZCA9IHRydWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdENvZGUgPT0gJ1xcJykgewor
ICAgICAgICAgICAgICAgIC8vIHNraXAgb3ZlciB0aGUgbmV4dCBtYXNrIGNoYXJhY3RlcgorICAg
ICAgICAgICAgICAgICsraTsKKyAgICAgICAgICAgICAgICArK2VzY2FwZUNoYXJDb3VudDsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgaWYgKCFpc1ZhbGlkKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgLy8gY2FsY3Vs
YXRlIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBhbGxvd2VkIHRvIGJlIGVudGVyZWQgYnkgaW5w
dXQgbWFzaworICAgIHVuc2lnbmVkIGFsbG93ZWRMZW5ndGggPSBtYXNrTGVuZ3RoOworICAgIGlm
IChlc2NhcGVDaGFyQ291bnQpCisgICAgICAgIGFsbG93ZWRMZW5ndGggLT0gZXNjYXBlQ2hhckNv
dW50OworCisgICAgaWYgKGhhc1dpbGRjYXJkKSB7CisgICAgICAgIGZvcm1hdENvZGUgPSBpbnB1
dE1hc2tbbWFza0xlbmd0aCAtIDJdOworICAgICAgICBpZiAoZm9ybWF0Q29kZSA9PSAnKicpCisg
ICAgICAgICAgICBhbGxvd2VkTGVuZ3RoID0gbV9tYXhJbnB1dENoYXJzQWxsb3dlZDsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICB1bnNpZ25lZCBsZWZ0TGVuID0gU3RyaW5nKCZmb3JtYXRD
b2RlKS50b0ludCgpOworICAgICAgICAgICAgYWxsb3dlZExlbmd0aCA9IGxlZnRMZW4gKyBhbGxv
d2VkTGVuZ3RoIC0gMjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChhbGxvd2VkTGVuZ3Ro
IDwgbV9tYXhJbnB1dENoYXJzQWxsb3dlZCkKKyAgICAgICAgbV9tYXhJbnB1dENoYXJzQWxsb3dl
ZCA9IGFsbG93ZWRMZW5ndGg7CisKKyAgICByZXR1cm4gaW5wdXRNYXNrOworfQorCiB2b2lkIEhU
TUxJbnB1dEVsZW1lbnQ6OnNldFdhcElucHV0Rm9ybWF0KFN0cmluZyYgbWFzaykKIHsKLSAgICBT
dHJpbmcgdmFsaWRhdGVNYXNrID0gdmFsaWRhdGVJbnB1dE1hc2sobV9kYXRhLCBtYXNrKTsKKyAg
ICBTdHJpbmcgdmFsaWRhdGVNYXNrID0gdmFsaWRhdGVJbnB1dE1hc2sobWFzayk7CiAgICAgaWYg
KCF2YWxpZGF0ZU1hc2suaXNFbXB0eSgpKQotICAgICAgICBtX2RhdGEuc2V0SW5wdXRGb3JtYXRN
YXNrKHZhbGlkYXRlTWFzayk7CisgICAgICAgIG1faW5wdXRGb3JtYXRNYXNrID0gdmFsaWRhdGVN
YXNrOwogfQogCiAjZW5kaWYKQEAgLTE1NjAsOSArMTc1NCw4NiBAQCBDaGVja2VkUmFkaW9CdXR0
b25zJiBIVE1MSW5wdXRFbGVtZW50OjpjaGVja2VkUmFkaW9CdXR0b25zKCkgY29uc3QKICAgICBy
ZXR1cm4gZG9jdW1lbnQoKS0+Y2hlY2tlZFJhZGlvQnV0dG9ucygpOwogfQogCitTdHJpbmcgSFRN
TElucHV0RWxlbWVudDo6cmVwbGFjZUVPTEFuZExpbWl0TGVuZ3RoKGNvbnN0IFN0cmluZyYgcHJv
cG9zZWRWYWx1ZSwgaW50IG1heExlbmd0aCkKK3sKKyAgICBTdHJpbmcgc3RyaW5nID0gcHJvcG9z
ZWRWYWx1ZTsKKyAgICBzdHJpbmcucmVwbGFjZSgiXHJcbiIsICIgIik7CisgICAgc3RyaW5nLnJl
cGxhY2UoJ1xyJywgJyAnKTsKKyAgICBzdHJpbmcucmVwbGFjZSgnXG4nLCAnICcpOworCisgICAg
dW5zaWduZWQgbmV3TGVuZ3RoID0gbnVtQ2hhcmFjdGVyc0luR3JhcGhlbWVDbHVzdGVycyhzdHJp
bmcsIG1heExlbmd0aCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5ld0xlbmd0aDsg
KytpKSB7CisgICAgICAgIGNvbnN0IFVDaGFyIGN1cnJlbnQgPSBzdHJpbmdbaV07CisgICAgICAg
IGlmIChjdXJyZW50IDwgJyAnICYmIGN1cnJlbnQgIT0gJ1x0JykgeworICAgICAgICAgICAgbmV3
TGVuZ3RoID0gaTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHJl
dHVybiBzdHJpbmcubGVmdChuZXdMZW5ndGgpOworfQorCitTdHJpbmcgSFRNTElucHV0RWxlbWVu
dDo6c2FuaXRpemVVc2VySW5wdXRWYWx1ZShjb25zdCBTdHJpbmcmIHByb3Bvc2VkVmFsdWUsIGlu
dCBtYXhMZW5ndGgpIGNvbnN0Cit7CisgICAgaWYgKCFpc1RleHRGaWVsZCgpKQorICAgICAgICBy
ZXR1cm4gcHJvcG9zZWRWYWx1ZTsKKyAgICByZXR1cm4gcmVwbGFjZUVPTEFuZExpbWl0TGVuZ3Ro
KHByb3Bvc2VkVmFsdWUsIG1heExlbmd0aCk7Cit9CisKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6
aGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoRXZlbnQqIGV2ZW50KQogewotICAgIElucHV0
RWxlbWVudDo6aGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQobV9kYXRhLCB0aGlzLCB0aGlz
LCBldmVudCk7CisgICAgQVNTRVJUKGV2ZW50LT5pc0JlZm9yZVRleHRJbnNlcnRlZEV2ZW50KCkp
OworICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSB0ZXh0IHRvIGJlIGluc2VydGVkIHdpbGwgbm90
IHZpb2xhdGUgdGhlIG1heExlbmd0aC4KKworICAgIC8vIFdlIHVzZSBSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OnRleHQoKSBpbnN0ZWFkIG9mIElucHV0RWxlbWVudDo6dmFsdWUoKQorICAg
IC8vIGJlY2F1c2UgdGhleSBjYW4gYmUgbWlzbWF0Y2hlZCBieSBzYW5pdGl6ZVZhbHVlKCkgaW4K
KyAgICAvLyBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnN1YnRyZWVIYXNDaGFuZ2VkKCkg
aW4gc29tZSBjYXNlcy4KKyAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBudW1HcmFwaGVtZUNsdXN0
ZXJzKHRvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKHJlbmRlcmVyKCkpLT50ZXh0KCkpOwor
CisgICAgLy8gc2VsZWN0aW9uTGVuZ3RoIHJlcHJlc2VudHMgdGhlIHNlbGVjdGlvbiBsZW5ndGgg
b2YgdGhpcyB0ZXh0IGZpZWxkIHRvIGJlCisgICAgLy8gcmVtb3ZlZCBieSB0aGlzIGluc2VydGlv
bi4KKyAgICAvLyBJZiB0aGUgdGV4dCBmaWVsZCBoYXMgbm8gZm9jdXMsIHdlIGRvbid0IG5lZWQg
dG8gdGFrZSBhY2NvdW50IG9mIHRoZQorICAgIC8vIHNlbGVjdGlvbiBsZW5ndGguIFRoZSBzZWxl
Y3Rpb24gaXMgdGhlIHNvdXJjZSBvZiB0ZXh0IGRyYWctYW5kLWRyb3AgaW4KKyAgICAvLyB0aGF0
IGNhc2UsIGFuZCBub3RoaW5nIGluIHRoZSB0ZXh0IGZpZWxkIHdpbGwgYmUgcmVtb3ZlZC4KKyAg
ICB1bnNpZ25lZCBzZWxlY3Rpb25MZW5ndGggPSBmb2N1c2VkKCkgPyBudW1HcmFwaGVtZUNsdXN0
ZXJzKHBsYWluVGV4dChkb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9u
KCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSkpIDogMDsKKyAgICBBU1NFUlQob2xkTGVuZ3Ro
ID49IHNlbGVjdGlvbkxlbmd0aCk7CisKKyAgICAvLyBTZWxlY3RlZCBjaGFyYWN0ZXJzIHdpbGwg
YmUgcmVtb3ZlZCBieSB0aGUgbmV4dCB0ZXh0IGV2ZW50LgorICAgIHVuc2lnbmVkIGJhc2VMZW5n
dGggPSBvbGRMZW5ndGggLSBzZWxlY3Rpb25MZW5ndGg7CisgICAgdW5zaWduZWQgbWF4TGVuZ3Ro
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1cHBvcnRzTWF4TGVuZ3RoKCkgPyBtX21heExlbmd0
aCA6IHNfbWF4aW11bUxlbmd0aCk7IC8vIG1fbWF4TGVuZ3RoIGNhbiBuZXZlciBiZSBuZWdhdGl2
ZS4KKyAgICB1bnNpZ25lZCBhcHBlbmRhYmxlTGVuZ3RoID0gbWF4TGVuZ3RoID4gYmFzZUxlbmd0
aCA/IG1heExlbmd0aCAtIGJhc2VMZW5ndGggOiAwOworCisgICAgLy8gVHJ1bmNhdGUgdGhlIGlu
c2VydGVkIHRleHQgdG8gYXZvaWQgdmlvbGF0aW5nIHRoZSBtYXhMZW5ndGggYW5kIG90aGVyIGNv
bnN0cmFpbnRzLgorICAgIEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KiB0ZXh0RXZlbnQgPSBzdGF0
aWNfY2FzdDxCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCo+KGV2ZW50KTsKKyNpZiBFTkFCTEUoV0NT
UykKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0
aW9uKCktPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgU3RyaW5nIGNhbmRp
ZGF0ZVN0cmluZyA9IHRvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKHJlbmRlcmVyKCkpLT50
ZXh0KCk7CisgICAgaWYgKHNlbGVjdGlvbkxlbmd0aCkKKyAgICAgICAgY2FuZGlkYXRlU3RyaW5n
LnJlcGxhY2UocmFuZ2UtPnN0YXJ0T2Zmc2V0KCksIHJhbmdlLT5lbmRPZmZzZXQoKSwgdGV4dEV2
ZW50LT50ZXh0KCkpOworICAgIGVsc2UKKyAgICAgICAgY2FuZGlkYXRlU3RyaW5nLmluc2VydCh0
ZXh0RXZlbnQtPnRleHQoKSwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpOworICAgIGlmICghaXNDb25m
b3JtVG9JbnB1dE1hc2soY2FuZGlkYXRlU3RyaW5nKSkgeworICAgICAgICB0ZXh0RXZlbnQtPnNl
dFRleHQoIiIpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgdGV4dEV2ZW50
LT5zZXRUZXh0KHNhbml0aXplVXNlcklucHV0VmFsdWUodGV4dEV2ZW50LT50ZXh0KCksIGFwcGVu
ZGFibGVMZW5ndGgpKTsKK30KKwordm9pZCBIVE1MSW5wdXRFbGVtZW50Ojpub3RpZnlGb3JtU3Rh
dGVDaGFuZ2VkKCkKK3sKKyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOwor
ICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChQYWdlKiBwYWdlID0g
ZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5mb3JtU3Rh
dGVEaWRDaGFuZ2UodGhpcyk7Cit9CisKK3ZvaWQgSFRNTElucHV0RWxlbWVudDo6dXBkYXRlVmFs
dWVJZk5lZWRlZCgpCit7CisgICAgU3RyaW5nIG5ld1ZhbHVlID0gc2FuaXRpemVWYWx1ZShtX3Zh
bHVlKTsKKyAgICBpZiAobmV3VmFsdWUgIT0gbV92YWx1ZSkKKyAgICAgICAgc2V0VmFsdWUobmV3
VmFsdWUpOwogfQogCiB9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MSW5wdXRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVs
ZW1lbnQuaAppbmRleCA1YmU3MzY2ODc5NjBmYzlkZGJiM2I5YTY5ZTVjN2IzOTA3ZDQwOTcwLi5j
MzlmNWUyZWE1MmJlYmQyOWY0ZjIwYzEyYWUwYjQ0ZDMwMjlhNDUzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxJbnB1dEVsZW1lbnQuaApAQCAtMjUsNyArMjUsNiBAQAogI2RlZmluZSBIVE1MSW5w
dXRFbGVtZW50X2gKIAogI2luY2x1ZGUgIkhUTUxGb3JtQ29udHJvbEVsZW1lbnQuaCIKLSNpbmNs
dWRlICJJbnB1dEVsZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNSwxNCAr
MzQsMTQgQEAgY2xhc3MgSFRNTE9wdGlvbkVsZW1lbnQ7CiBjbGFzcyBJbnB1dFR5cGU7CiBjbGFz
cyBLVVJMOwogCi1jbGFzcyBIVE1MSW5wdXRFbGVtZW50IDogcHVibGljIEhUTUxUZXh0Rm9ybUNv
bnRyb2xFbGVtZW50LCBwdWJsaWMgSW5wdXRFbGVtZW50IHsKK2NsYXNzIEhUTUxJbnB1dEVsZW1l
bnQgOiBwdWJsaWMgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQgewogcHVibGljOgogICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWRO
YW1lJiwgRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqLCBib29sIGNyZWF0ZWRCeVBhcnNlcik7
CiAgICAgdmlydHVhbCB+SFRNTElucHV0RWxlbWVudCgpOwogCiAgICAgREVGSU5FX0FUVFJJQlVU
RV9FVkVOVF9MSVNURU5FUih3ZWJraXRzcGVlY2hjaGFuZ2UpOwogCi0gICAgdmlydHVhbCBJbnB1
dEVsZW1lbnQqIHRvSW5wdXRFbGVtZW50KCkgeyByZXR1cm4gdGhpczsgfQorICAgIHZpcnR1YWwg
SFRNTElucHV0RWxlbWVudCogdG9JbnB1dEVsZW1lbnQoKSB7IHJldHVybiB0aGlzOyB9CiAKICAg
ICBib29sIGF1dG9Db21wbGV0ZSgpIGNvbnN0OwogCkBAIC03OCwxOCArNzcsMTggQEAgcHVibGlj
OgogICAgIHZvaWQgc3RlcFVwKEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHN0ZXBVcCgxLCBlYyk7IH0K
ICAgICB2b2lkIHN0ZXBEb3duKEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHN0ZXBEb3duKDEsIGVjKTsg
fQogICAgIC8vIHN0ZXBVcCgpL3N0ZXBEb3duKCkgZm9yIHVzZXItaW50ZXJhY3Rpb24uCi0gICAg
dmlydHVhbCBib29sIGlzU3RlcHBhYmxlKCkgY29uc3Q7CisgICAgYm9vbCBpc1N0ZXBwYWJsZSgp
IGNvbnN0OwogICAgIHZvaWQgc3RlcFVwRnJvbVJlbmRlcmVyKGludCk7CiAKICAgICBib29sIGlz
VGV4dEJ1dHRvbigpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIGlzUmFkaW9CdXR0b24oKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0RmllbGQoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGJvb2wgaXNTZWFyY2hGaWVsZCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0lucHV0VHlw
ZUhpZGRlbigpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc1Bhc3N3b3JkRmllbGQoKSBjb25z
dDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNDaGVja2JveCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9v
bCBpc1JhbmdlQ29udHJvbCgpIGNvbnN0OworICAgIGJvb2wgaXNUZXh0RmllbGQoKSBjb25zdDsK
KyAgICBib29sIGlzU2VhcmNoRmllbGQoKSBjb25zdDsKKyAgICBib29sIGlzSW5wdXRUeXBlSGlk
ZGVuKCkgY29uc3Q7CisgICAgYm9vbCBpc1Bhc3N3b3JkRmllbGQoKSBjb25zdDsKKyAgICBib29s
IGlzQ2hlY2tib3goKSBjb25zdDsKKyAgICBib29sIGlzUmFuZ2VDb250cm9sKCkgY29uc3Q7CiAK
ICAgICAvLyBGSVhNRTogSXQncyBoaWdobHkgbGlrZWx5IHRoYXQgYW55IGNhbGwgc2l0ZSBjYWxs
aW5nIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGluc3RlYWQKICAgICAvLyBiZSB1c2luZyBhIGRpZmZl
cmVudCBvbmUuIE1hbnkgaW5wdXQgZWxlbWVudHMgYmVoYXZlIGxpa2UgdGV4dCBmaWVsZHMsIGFu
ZCBpbiBhZGRpdGlvbgpAQCAtMTA2LDcgKzEwNSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzVVJM
RmllbGQoKSBjb25zdDsKIAogI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCi0gICAgdmlydHVhbCBi
b29sIGlzU3BlZWNoRW5hYmxlZCgpIGNvbnN0OworICAgIGJvb2wgaXNTcGVlY2hFbmFibGVkKCkg
Y29uc3Q7CiAjZW5kaWYKIAogICAgIGJvb2wgY2hlY2tlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXND
aGVja2VkOyB9CkBAIC0xMTYsMTggKzExNSwzMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpbmRldGVy
bWluYXRlKCkgY29uc3QgeyByZXR1cm4gbV9pc0luZGV0ZXJtaW5hdGU7IH0KICAgICB2b2lkIHNl
dEluZGV0ZXJtaW5hdGUoYm9vbCk7CiAKLSAgICB2aXJ0dWFsIGludCBzaXplKCkgY29uc3Q7Cisg
ICAgLy8gaXNDaGVja2VkIGlzIHVzZWQgYnkgdGhlIHJlbmRlcmluZyB0cmVlL0NTUyB3aGlsZSBj
aGVja2VkKCkgaXMgdXNlZCBieSBKUyB0byBkZXRlcm1pbmUgY2hlY2tlZCBzdGF0ZQorICAgIHZp
cnR1YWwgYm9vbCBpc0NoZWNrZWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNJbmRldGVy
bWluYXRlKCkgY29uc3QgeyByZXR1cm4gaW5kZXRlcm1pbmF0ZSgpOyB9CisKKyAgICBpbnQgc2l6
ZSgpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRUeXBlKGNvbnN0IFN0cmluZyYpOwogCi0gICAgdmly
dHVhbCBTdHJpbmcgdmFsdWUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWUoY29u
c3QgU3RyaW5nJiwgYm9vbCBzZW5kQ2hhbmdlRXZlbnQgPSBmYWxzZSk7Ci0gICAgdmlydHVhbCB2
b2lkIHNldFZhbHVlRm9yVXNlcihjb25zdCBTdHJpbmcmKTsKKyAgICBTdHJpbmcgdmFsdWUoKSBj
b25zdDsKKyAgICB2b2lkIHNldFZhbHVlKGNvbnN0IFN0cmluZyYsIGJvb2wgc2VuZENoYW5nZUV2
ZW50ID0gZmFsc2UpOworICAgIHZvaWQgc2V0VmFsdWVGb3JVc2VyKGNvbnN0IFN0cmluZyYpOwog
ICAgIC8vIENoZWNrcyBpZiB0aGUgc3BlY2lmaWVkIHN0cmluZyB3b3VsZCBiZSBhIHZhbGlkIHZh
bHVlLgogICAgIC8vIFdlIHNob3VsZCBub3QgY2FsbCB0aGlzIGZvciB0eXBlcyB3aXRoIG5vIHN0
cmluZyB2YWx1ZSBzdWNoIGFzIENIRUNLQk9YIGFuZCBSQURJTy4KICAgICBib29sIGlzVmFsaWRW
YWx1ZShjb25zdCBTdHJpbmcmKSBjb25zdDsKIAotICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nJiBz
dWdnZXN0ZWRWYWx1ZSgpIGNvbnN0OworICAgIFN0cmluZyBzYW5pdGl6ZVZhbHVlKGNvbnN0IFN0
cmluZyYpIGNvbnN0OworCisgICAgLy8gVGhlIHZhbHVlIHdoaWNoIGlzIGRyYXduIGJ5IGEgcmVu
ZGVyZXIuCisgICAgU3RyaW5nIHZpc2libGVWYWx1ZSgpIGNvbnN0OworICAgIFN0cmluZyBjb252
ZXJ0RnJvbVZpc2libGVWYWx1ZShjb25zdCBTdHJpbmcmKSBjb25zdDsKKyAgICAvLyBSZXR1cm5z
IHRydWUgaWYgdGhlIHNwZWNpZmllZCBzdHJpbmcgY2FuIGJlIHNldCBhcyB0aGUgdmFsdWUgb2Yg
SFRNTElucHV0RWxlbWVudC4KKyAgICBib29sIGlzQWNjZXB0YWJsZVZhbHVlKGNvbnN0IFN0cmlu
ZyYpIGNvbnN0OworCisgICAgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRWYWx1ZSgpIGNvbnN0Owog
ICAgIHZvaWQgc2V0U3VnZ2VzdGVkVmFsdWUoY29uc3QgU3RyaW5nJik7CiAKICAgICBkb3VibGUg
dmFsdWVBc0RhdGUoKSBjb25zdDsKQEAgLTE0MSwxMSArMTUyLDEwIEBAIHB1YmxpYzoKIAogICAg
IFN0cmluZyB2YWx1ZVdpdGhEZWZhdWx0KCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0
VmFsdWVGcm9tUmVuZGVyZXIoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBzZXRWYWx1ZUZyb21S
ZW5kZXJlcihjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHNldEZpbGVMaXN0RnJvbVJlbmRlcmVy
KGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CiAKICAgICBib29sIGNhbkhhdmVTZWxlY3Rpb24oKSBj
b25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0KCkgeyBIVE1MVGV4dEZvcm1Db250cm9sRWxl
bWVudDo6c2VsZWN0KCk7IH0KIAogICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJl
bmRlclN0eWxlKik7CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJl
bmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKQEAgLTE3OCwxMyArMTg4LDE0IEBAIHB1YmxpYzoK
IAogICAgIGJvb2wgbXVsdGlwbGUoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgYm9vbCBpc0F1dG9m
aWxsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzQXV0b2ZpbGxlZDsgfQorICAgIGJvb2wgaXNBdXRv
ZmlsbGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0F1dG9maWxsZWQ7IH0KICAgICB2b2lkIHNldEF1
dG9maWxsZWQoYm9vbCA9IHRydWUpOwogCiAgICAgRmlsZUxpc3QqIGZpbGVzKCk7CiAKICAgICB2
b2lkIGFkZFNlYXJjaFJlc3VsdCgpOwogICAgIHZvaWQgb25TZWFyY2goKTsKKyAgICBib29sIHNl
YXJjaEV2ZW50c1Nob3VsZEJlRGlzcGF0Y2hlZCgpIGNvbnN0OwogCiAjaWYgRU5BQkxFKERBVEFM
SVNUKQogICAgIEhUTUxFbGVtZW50KiBsaXN0KCkgY29uc3Q7CkBAIC0yMDIsNyArMjEzLDEzIEBA
IHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZUNoZWNrZWRSYWRpb0J1dHRvbnMoKTsKIAogICAgIGJv
b2wgbGFzdENoYW5nZVdhc1VzZXJFZGl0KCkgY29uc3Q7Ci0gICAgCisgICAgdm9pZCBjYWNoZVNl
bGVjdGlvbihpbnQgc3RhcnQsIGludCBlbmQpOworCisgICAgc3RhdGljIFN0cmluZyByZXBsYWNl
RU9MQW5kTGltaXRMZW5ndGgoY29uc3QgU3RyaW5nJiwgaW50IG1heExlbmd0aCk7CisKKyAgICBz
dGF0aWMgY29uc3QgaW50IHNfbWF4aW11bUxlbmd0aDsKKyAgICBzdGF0aWMgY29uc3QgaW50IHNf
ZGVmYXVsdFNpemU7CisKIHByb3RlY3RlZDoKICAgICBIVE1MSW5wdXRFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCosIGJvb2wgY3JlYXRlZEJ5
UGFyc2VyKTsKIApAQCAtMjIzLDE4ICsyNDAsMTIgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwg
Y29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbE5hbWUoKSBjb25zdDsKIAotICAgIC8vIGlz
Q2hlY2tlZCBpcyB1c2VkIGJ5IHRoZSByZW5kZXJpbmcgdHJlZS9DU1Mgd2hpbGUgY2hlY2tlZCgp
IGlzIHVzZWQgYnkgSlMgdG8gZGV0ZXJtaW5lIGNoZWNrZWQgc3RhdGUKLSAgICB2aXJ0dWFsIGJv
b2wgaXNDaGVja2VkKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzSW5kZXRlcm1pbmF0ZSgp
IGNvbnN0IHsgcmV0dXJuIGluZGV0ZXJtaW5hdGUoKTsgfQotCiAgICAgdmlydHVhbCBib29sIGlz
VGV4dEZvcm1Db250cm9sKCkgY29uc3QgeyByZXR1cm4gaXNUZXh0RmllbGQoKTsgfQogCiAgICAg
dmlydHVhbCBib29sIGNhblRyaWdnZXJJbXBsaWNpdFN1Ym1pc3Npb24oKSBjb25zdCB7IHJldHVy
biBpc1RleHRGaWVsZCgpOyB9CiAKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9y
bUNvbnRyb2xUeXBlKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgc2VhcmNoRXZlbnRzU2hv
dWxkQmVEaXNwYXRjaGVkKCkgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIGJvb2wgc2F2ZUZvcm1Db250
cm9sU3RhdGUoU3RyaW5nJiB2YWx1ZSkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHJlc3RvcmVG
b3JtQ29udHJvbFN0YXRlKGNvbnN0IFN0cmluZyYpOwogCkBAIC0yNjEsMTIgKzI3Miw2IEBAIHBy
aXZhdGU6CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlKikgY29u
c3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgY2FjaGVTZWxlY3Rpb24oaW50IHN0YXJ0LCBpbnQgZW5k
KTsKLQotICAgIHZpcnR1YWwgU3RyaW5nIHZpc2libGVWYWx1ZSgpIGNvbnN0OwotICAgIHZpcnR1
YWwgU3RyaW5nIGNvbnZlcnRGcm9tVmlzaWJsZVZhbHVlKGNvbnN0IFN0cmluZyYpIGNvbnN0Owot
ICAgIHZpcnR1YWwgYm9vbCBpc0FjY2VwdGFibGVWYWx1ZShjb25zdCBTdHJpbmcmKSBjb25zdDsK
LSAgICB2aXJ0dWFsIFN0cmluZyBzYW5pdGl6ZVZhbHVlKGNvbnN0IFN0cmluZyYpIGNvbnN0Owog
ICAgIHZpcnR1YWwgYm9vbCBoYXNVbmFjY2VwdGFibGVWYWx1ZSgpIGNvbnN0OwogCiAgICAgdmly
dHVhbCBib29sIGlzSW5SYW5nZSgpIGNvbnN0OwpAQCAtMjgwLDcgKzI4NSw3IEBAIHByaXZhdGU6
CiAgICAgdm9pZCByZWdpc3RlckZvckFjdGl2YXRpb25DYWxsYmFja0lmTmVlZGVkKCk7CiAgICAg
dm9pZCB1bnJlZ2lzdGVyRm9yQWN0aXZhdGlvbkNhbGxiYWNrSWZOZWVkZWQoKTsKIAotICAgIHZp
cnR1YWwgYm9vbCBzdXBwb3J0c01heExlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIGlzVGV4dFR5cGUo
KTsgfQorICAgIGJvb2wgc3VwcG9ydHNNYXhMZW5ndGgoKSBjb25zdCB7IHJldHVybiBpc1RleHRU
eXBlKCk7IH0KICAgICBib29sIGlzVGV4dFR5cGUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9v
bCBzdXBwb3J0c1BsYWNlaG9sZGVyKCkgY29uc3Q7CkBAIC0yODgsOCArMjkzLDggQEAgcHJpdmF0
ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eVN1Z2dlc3RlZFZhbHVlKCkgY29uc3QgeyByZXR1
cm4gc3VnZ2VzdGVkVmFsdWUoKS5pc0VtcHR5KCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxl
Rm9jdXNFdmVudCgpOwogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVCbHVyRXZlbnQoKTsKLSAgICB2
aXJ0dWFsIGludCBjYWNoZWRTZWxlY3Rpb25TdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5j
YWNoZWRTZWxlY3Rpb25TdGFydCgpOyB9Ci0gICAgdmlydHVhbCBpbnQgY2FjaGVkU2VsZWN0aW9u
RW5kKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmNhY2hlZFNlbGVjdGlvbkVuZCgpOyB9CisgICAg
dmlydHVhbCBpbnQgY2FjaGVkU2VsZWN0aW9uU3RhcnQoKSBjb25zdCB7IHJldHVybiBtX2NhY2hl
ZFNlbGVjdGlvblN0YXJ0OyB9CisgICAgdmlydHVhbCBpbnQgY2FjaGVkU2VsZWN0aW9uRW5kKCkg
Y29uc3QgeyByZXR1cm4gbV9jYWNoZWRTZWxlY3Rpb25FbmQ7IH0KIAogICAgIHZpcnR1YWwgYm9v
bCBpc09wdGlvbmFsRm9ybUNvbnRyb2woKSBjb25zdCB7IHJldHVybiAhaXNSZXF1aXJlZEZvcm1D
b250cm9sKCk7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNSZXF1aXJlZEZvcm1Db250cm9sKCkgY29u
c3Q7CkBAIC0zMDMsMTIgKzMwOCwyOSBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShEQVRBTElTVCkK
ICAgICBIVE1MRGF0YUxpc3RFbGVtZW50KiBkYXRhTGlzdCgpIGNvbnN0OwogI2VuZGlmCi0KKyAg
ICAvLyBSZXBsYWNlcyBDUnMgYW5kIExGcywgc2hyaW5rcyB0aGUgdmFsdWUgZm9yIHRoZSBzcGVj
aWZpZWQgbWF4aW11bSBsZW5ndGguCisgICAgLy8gVGhpcyBzaG91bGQgYmUgYXBwbGllZCB0byB2
YWx1ZXMgc3BlY2lmaWVkIGJ5IHVzZXJzLgorICAgIC8vIFRoZSBpbnB1dCBzdHJpbmcgbWF5IGJl
IGEgZnJhZ21lbnQgb2YgdGhlIHdob2xlIHZhbHVlLgorICAgIFN0cmluZyBzYW5pdGl6ZVVzZXJJ
bnB1dFZhbHVlKGNvbnN0IFN0cmluZyYsIGludCBtYXhMZW5ndGgpIGNvbnN0OworICAgIHZvaWQg
bm90aWZ5Rm9ybVN0YXRlQ2hhbmdlZCgpOworICAgIHZvaWQgdXBkYXRlVmFsdWVJZk5lZWRlZCgp
OwogI2lmIEVOQUJMRShXQ1NTKQotICAgIHZpcnR1YWwgSW5wdXRFbGVtZW50RGF0YSBkYXRhKCkg
Y29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CisgICAgYm9vbCBpc0NvbmZvcm1Ub0lucHV0TWFzayhj
b25zdCBTdHJpbmcmKSBjb25zdDsKKyAgICBib29sIGlzQ29uZm9ybVRvSW5wdXRNYXNrKFVDaGFy
LCB1bnNpZ25lZCkgY29uc3Q7CisgICAgU3RyaW5nIHZhbGlkYXRlSW5wdXRNYXNrKFN0cmluZyYp
OwogI2VuZGlmCiAKLSAgICBJbnB1dEVsZW1lbnREYXRhIG1fZGF0YTsKKyAgICBBdG9taWNTdHJp
bmcgbV9uYW1lOworICAgIFN0cmluZyBtX3ZhbHVlOworICAgIFN0cmluZyBtX3N1Z2dlc3RlZFZh
bHVlOworICAgIGludCBtX3NpemU7CisgICAgaW50IG1fbWF4TGVuZ3RoOworICAgIGludCBtX2Nh
Y2hlZFNlbGVjdGlvblN0YXJ0OworICAgIGludCBtX2NhY2hlZFNlbGVjdGlvbkVuZDsKKyNpZiBF
TkFCTEUoV0NTUykKKyAgICBTdHJpbmcgbV9pbnB1dEZvcm1hdE1hc2s7CisgICAgdW5zaWduZWQg
bV9tYXhJbnB1dENoYXJzQWxsb3dlZDsKKyNlbmRpZgogICAgIHNob3J0IG1fbWF4UmVzdWx0czsK
ICAgICBib29sIG1faXNDaGVja2VkIDogMTsKICAgICBib29sIG1fcmVmbGVjdHNDaGVja2VkQXR0
cmlidXRlIDogMTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVh
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3Bw
CmluZGV4IGUwNDYzZmZkZTc5MTI1ZmJhMmIxNDZjNDY4NDhjNzRiZDdlMDE3MWUuLmEyOTliMThj
NjFlMTlmNDEyZGVlMDM5Y2RmOTA5YzFmYTFmYzUyMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcApAQCAtMzksNyArMzksNiBAQAogI2luY2x1ZGUgIkZv
cm1EYXRhTGlzdC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgi
Ci0jaW5jbHVkZSAiSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUg
IlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaCIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcAppbmRleCBmZmVhMmY0
ZTBiMGNhYWQ0NGI4MzVhNmQyMGFiNTk5YzZkN2E0Yzk0Li5mZWY3ZjQ4NTU2YzgxZDJkOTVlZmMw
ZjNkOWNiMmUwNDZjZGY3ZWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRG
aWVsZElucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1
dFR5cGUuY3BwCkBAIC0xMjEsNyArMTIxLDcgQEAgYm9vbCBUZXh0RmllbGRJbnB1dFR5cGU6OnNo
b3VsZFVzZUlucHV0TWV0aG9kKCkgY29uc3QKIAogU3RyaW5nIFRleHRGaWVsZElucHV0VHlwZTo6
c2FuaXRpemVWYWx1ZShjb25zdCBTdHJpbmcmIHByb3Bvc2VkVmFsdWUpCiB7Ci0gICAgcmV0dXJu
IElucHV0RWxlbWVudDo6c2FuaXRpemVWYWx1ZUZvclRleHRGaWVsZChlbGVtZW50KCksIHByb3Bv
c2VkVmFsdWUpOworICAgIHJldHVybiBIVE1MSW5wdXRFbGVtZW50OjpyZXBsYWNlRU9MQW5kTGlt
aXRMZW5ndGgocHJvcG9zZWRWYWx1ZSwgSFRNTElucHV0RWxlbWVudDo6c19tYXhpbXVtTGVuZ3Ro
KTsKIH0KIAogYm9vbCBUZXh0RmllbGRJbnB1dFR5cGU6OnNob3VsZFJlc3BlY3RMaXN0QXR0cmli
dXRlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZS5jcHAKaW5kZXggMzBiZDk2MThhMTk2YzFlMmY0ZGY2ZTRiMjNmMTA0
YTU3NzQxOTQwZi4uM2VhNWRkZDJlZTcwYjY2M2NjNzE3NjhmMDQ5NzE4NmIwMTVjYjljZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZS5jcHAKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5o
IgotI2luY2x1ZGUgIklucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3Mu
aCIKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2
ZW50LmgiCkBAIC03NSw2ICs3NCw4IEBAIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6UmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKE5vZGUqIG5vZGUsIGJvb2wgcGxhY2VoCiAgICAgLCBt
X3NlYXJjaEV2ZW50VGltZXIodGhpcywgJlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2Vh
cmNoRXZlbnRUaW1lckZpcmVkKQogICAgICwgbV9zZWFyY2hQb3B1cCgwKQogeworICAgIEFTU0VS
VChub2RlLT5pc0hUTUxFbGVtZW50KCkpOworICAgIEFTU0VSVChub2RlLT50b0lucHV0RWxlbWVu
dCgpKTsKIH0KIAogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp+UmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lKCkKQEAgLTEwNiw4ICsxMDcsNyBAQCBSZW5kZXJTdHlsZSogUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lOjp0ZXh0QmFzZVN0eWxlKCkgY29uc3QKIAogdm9pZCBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OmFkZFNlYXJjaFJlc3VsdCgpCiB7Ci0gICAgQVNTRVJUKG5v
ZGUoKS0+aXNIVE1MRWxlbWVudCgpKTsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0
YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihub2RlKCkpOworICAgIEhUTUxJbnB1dEVsZW1l
bnQqIGlucHV0ID0gaW5wdXRFbGVtZW50KCk7CiAgICAgaWYgKGlucHV0LT5tYXhSZXN1bHRzKCkg
PD0gMCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMzgsMTMgKzEzOCwxMSBAQCB2b2lkIFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZTo6YWRkU2VhcmNoUmVzdWx0KCkKIAogdm9pZCBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OnN0b3BTZWFyY2hFdmVudFRpbWVyKCkKIHsKLSAgICBBU1NF
UlQobm9kZSgpLT5pc0hUTUxFbGVtZW50KCkpOwogICAgIG1fc2VhcmNoRXZlbnRUaW1lci5zdG9w
KCk7CiB9CiAKIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzaG93UG9wdXAoKQog
ewotICAgIEFTU0VSVChub2RlKCktPmlzSFRNTEVsZW1lbnQoKSk7CiAgICAgaWYgKG1fc2VhcmNo
UG9wdXBJc1Zpc2libGUpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTYwLDcgKzE1OCw3IEBAIHZv
aWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzaG93UG9wdXAoKQogICAgIG1fc2VhcmNo
UG9wdXAtPmxvYWRSZWNlbnRTZWFyY2hlcyhuYW1lLCBtX3JlY2VudFNlYXJjaGVzKTsKIAogICAg
IC8vIFRyaW0gdGhlIHJlY2VudCBzZWFyY2hlcyBsaXN0IGlmIHRoZSBtYXhpbXVtIHNpemUgaGFz
IGNoYW5nZWQgc2luY2Ugd2UgbGFzdCBzYXZlZC4KLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1
dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihub2RlKCkpOworICAgIEhUTUxJbnB1
dEVsZW1lbnQqIGlucHV0ID0gaW5wdXRFbGVtZW50KCk7CiAgICAgaWYgKHN0YXRpY19jYXN0PGlu
dD4obV9yZWNlbnRTZWFyY2hlcy5zaXplKCkpID4gaW5wdXQtPm1heFJlc3VsdHMoKSkgewogICAg
ICAgICBkbyB7CiAgICAgICAgICAgICBtX3JlY2VudFNlYXJjaGVzLnJlbW92ZUxhc3QoKTsKQEAg
LTE3NCw3ICsxNzIsNiBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2hvd1Bv
cHVwKCkKIAogdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmhpZGVQb3B1cCgpCiB7
Ci0gICAgQVNTRVJUKG5vZGUoKS0+aXNIVE1MRWxlbWVudCgpKTsKICAgICBpZiAobV9zZWFyY2hQ
b3B1cCkKICAgICAgICAgbV9zZWFyY2hQb3B1cC0+cG9wdXBNZW51KCktPmhpZGUoKTsKIH0KQEAg
LTE4OCwxOCArMTg1LDE2IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzdWJ0
cmVlSGFzQ2hhbmdlZCgpCiAgICAgYm9vbCB3YXNDaGFuZ2VkID0gZWxlbWVudC0+d2FzQ2hhbmdl
ZFNpbmNlTGFzdEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKTsKICAgICBlbGVtZW50LT5zZXRDaGFu
Z2VkU2luY2VMYXN0Rm9ybUNvbnRyb2xDaGFuZ2VFdmVudCh0cnVlKTsKIAotICAgIElucHV0RWxl
bWVudCogaW5wdXQgPSBpbnB1dEVsZW1lbnQoKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1
dCA9IGlucHV0RWxlbWVudCgpOwogICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gY2FsbCBzYW5pdGl6
ZVVzZXJJbnB1dFZhbHVlKCkgZnVuY3Rpb24gaGVyZSBiZWNhdXNlCi0gICAgLy8gSW5wdXRFbGVt
ZW50OjpoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCgpIGhhcyBhbHJlYWR5IGNhbGxlZAor
ICAgIC8vIEhUTUxJbnB1dEVsZW1lbnQ6OmhhbmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KCkg
aGFzIGFscmVhZHkgY2FsbGVkCiAgICAgLy8gc2FuaXRpemVVc2VySW5wdXRWYWx1ZSgpLgogICAg
IC8vIHNhbml0aXplVmFsdWUoKSBpcyBuZWVkZWQgYmVjYXVzZSBJTUUgaW5wdXQgZG9lc24ndCBk
aXNwYXRjaCBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC4KICAgICBTdHJpbmcgdmFsdWUgPSB0ZXh0
KCk7CiAgICAgaWYgKGlucHV0LT5pc0FjY2VwdGFibGVWYWx1ZSh2YWx1ZSkpCiAgICAgICAgIGlu
cHV0LT5zZXRWYWx1ZUZyb21SZW5kZXJlcihpbnB1dC0+c2FuaXRpemVWYWx1ZShpbnB1dC0+Y29u
dmVydEZyb21WaXNpYmxlVmFsdWUodmFsdWUpKSk7Ci0gICAgaWYgKG5vZGUoKS0+aXNIVE1MRWxl
bWVudCgpKSB7Ci0gICAgICAgIC8vIFJlY2FsYyBmb3IgOmludmFsaWQgYW5kIGhhc1VuYWNjZXB0
YWJsZVZhbHVlKCkgY2hhbmdlLgotICAgICAgICBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50
Kj4oaW5wdXQpLT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7Ci0gICAgfQorICAgIC8vIFJlY2FsYyBm
b3IgOmludmFsaWQgYW5kIGhhc1VuYWNjZXB0YWJsZVZhbHVlKCkgY2hhbmdlLgorICAgIGlucHV0
LT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAKICAgICBpZiAobV9jYW5jZWxCdXR0b24pCiAgICAg
ICAgIHVwZGF0ZUNhbmNlbEJ1dHRvblZpc2liaWxpdHkoKTsKQEAgLTcxMCw3ICs3MDUsNyBAQCB2
b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6dXBkYXRlRnJvbUVsZW1lbnQoKQogICAg
ICAgICAgICAgLy8gRm9yIEhUTUxJbnB1dEVsZW1lbnQsIHVwZGF0ZSB0aGUgcmVuZGVyZXIgdmFs
dWUgaWYgdGhlIGZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIoKQogICAgICAgICAgICAg
Ly8gZmxhZyBpcyBmYWxzZS4gSXQgcHJvdGVjdHMgYW4gdW5hY2NlcHRhYmxlIHJlbmRlcmVyIHZh
bHVlIGZyb20KICAgICAgICAgICAgIC8vIGJlaW5nIG92ZXJ3cml0dGVuIHdpdGggdGhlIERPTSB2
YWx1ZS4KLSAgICAgICAgICAgIGlmICghc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5v
ZGUoKSktPmZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIoKSkKKyAgICAgICAgICAgIGlm
ICghaW5wdXRFbGVtZW50KCktPmZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIoKSkKICAg
ICAgICAgICAgICAgICBzZXRJbm5lclRleHRWYWx1ZShpbnB1dEVsZW1lbnQoKS0+dmlzaWJsZVZh
bHVlKCkpOwogICAgICAgICB9CiAgICAgfQpAQCAtNzU1LDggKzc1MCw2IEBAIFBhc3NSZWZQdHI8
UmVuZGVyU3R5bGU+IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y3JlYXRlSW5uZXJUZXh0
U3R5bGUoY29uc3QKIAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjpjcmVhdGVJbm5lckJsb2NrU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0
U3R5bGUpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKG5vZGUoKS0+aXNIVE1MRWxlbWVudCgpKTsKLQog
ICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gaW5uZXJCbG9ja1N0eWxlID0gUmVuZGVyU3R5bGU6OmNy
ZWF0ZSgpOwogICAgIGlubmVyQmxvY2tTdHlsZS0+aW5oZXJpdEZyb20oc3RhcnRTdHlsZSk7CiAK
QEAgLTc3MSw4ICs3NjQsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OmNyZWF0ZUlubmVyQmxvY2tTdHlsZShjb25zdAogCiBQYXNzUmVmUHRy
PFJlbmRlclN0eWxlPiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZVJlc3VsdHNC
dXR0b25TdHlsZShjb25zdCBSZW5kZXJTdHlsZSogc3RhcnRTdHlsZSkgY29uc3QKIHsKLSAgICBB
U1NFUlQobm9kZSgpLT5pc0hUTUxFbGVtZW50KCkpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlu
cHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5vZGUoKSk7CisgICAgSFRNTElu
cHV0RWxlbWVudCogaW5wdXQgPSBpbnB1dEVsZW1lbnQoKTsKIAogICAgIFJlZlB0cjxSZW5kZXJT
dHlsZT4gcmVzdWx0c0Jsb2NrU3R5bGU7CiAgICAgaWYgKGlucHV0LT5tYXhSZXN1bHRzKCkgPCAw
KQpAQCAtNzkzLDcgKzc4NSw2IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6Y3JlYXRlUmVzdWx0c0J1dHRvblN0eWxlKGNvCiAKIFBhc3NSZWZQ
dHI8UmVuZGVyU3R5bGU+IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y3JlYXRlQ2FuY2Vs
QnV0dG9uU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUpIGNvbnN0CiB7Ci0gICAg
QVNTRVJUKG5vZGUoKS0+aXNIVE1MRWxlbWVudCgpKTsKICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+
IGNhbmNlbEJsb2NrU3R5bGU7CiAgICAgCiAgICAgaWYgKFJlZlB0cjxSZW5kZXJTdHlsZT4gcHNl
dWRvU3R5bGUgPSBnZXRDYWNoZWRQc2V1ZG9TdHlsZShTRUFSQ0hfQ0FOQ0VMX0JVVFRPTikpCkBA
IC04MTEsNyArODAyLDYgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjpjcmVhdGVDYW5jZWxCdXR0b25TdHlsZShjb24KIAogUGFzc1JlZlB0cjxS
ZW5kZXJTdHlsZT4gUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjcmVhdGVJbm5lclNwaW5C
dXR0b25TdHlsZSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKG5vZGUoKS0+aXNIVE1MRWxlbWVudCgp
KTsKICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGJ1dHRvblN0eWxlID0gZ2V0Q2FjaGVkUHNldWRv
U3R5bGUoSU5ORVJfU1BJTl9CVVRUT04pOwogICAgIGlmICghYnV0dG9uU3R5bGUpCiAgICAgICAg
IGJ1dHRvblN0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwpAQCAtODIxLDcgKzgxMSw2IEBA
IFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y3Jl
YXRlSW5uZXJTcGluQnV0dG9uU3R5bGUoCiAKIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZTo6Y3JlYXRlT3V0ZXJTcGluQnV0dG9uU3R5bGUoKSBjb25z
dAogewotICAgIEFTU0VSVChub2RlKCktPmlzSFRNTEVsZW1lbnQoKSk7CiAgICAgUmVmUHRyPFJl
bmRlclN0eWxlPiBidXR0b25TdHlsZSA9IGdldENhY2hlZFBzZXVkb1N0eWxlKE9VVEVSX1NQSU5f
QlVUVE9OKTsKICAgICBpZiAoIWJ1dHRvblN0eWxlKQogICAgICAgICBidXR0b25TdHlsZSA9IFJl
bmRlclN0eWxlOjpjcmVhdGUoKTsKQEAgLTgzMiw3ICs4MjEsNiBAQCBQYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZU91dGVyU3BpbkJ1dHRv
blN0eWxlKAogI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxl
PiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZVNwZWVjaEJ1dHRvblN0eWxlKCkg
Y29uc3QKIHsKLSAgICBBU1NFUlQobm9kZSgpLT5pc0hUTUxFbGVtZW50KCkpOwogICAgIFJlZlB0
cjxSZW5kZXJTdHlsZT4gYnV0dG9uU3R5bGUgPSBnZXRDYWNoZWRQc2V1ZG9TdHlsZShJTlBVVF9T
UEVFQ0hfQlVUVE9OKTsKICAgICBpZiAoIWJ1dHRvblN0eWxlKQogICAgICAgICBidXR0b25TdHls
ZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKQEAgLTg1OCw5ICs4NDYsNyBAQCB2b2lkIFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZTo6dXBkYXRlQ2FuY2VsQnV0dG9uVmlzaWJpbGl0eSgpIGNv
bnN0CiAKIEVWaXNpYmlsaXR5IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6dmlzaWJpbGl0
eUZvckNhbmNlbEJ1dHRvbigpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKG5vZGUoKS0+aXNIVE1MRWxl
bWVudCgpKTsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJ
bnB1dEVsZW1lbnQqPihub2RlKCkpOwotICAgIHJldHVybiBpbnB1dC0+dmFsdWUoKS5pc0VtcHR5
KCkgPyBISURERU4gOiBWSVNJQkxFOworICAgIHJldHVybiBpbnB1dEVsZW1lbnQoKS0+dmFsdWUo
KS5pc0VtcHR5KCkgPyBISURERU4gOiBWSVNJQkxFOwogfQogCiBjb25zdCBBdG9taWNTdHJpbmcm
IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6YXV0b3NhdmVOYW1lKCkgY29uc3QKQEAgLTg3
MCwxMyArODU2LDEyIEBAIGNvbnN0IEF0b21pY1N0cmluZyYgUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjphdXRvc2F2ZU5hbWUoKSBjb25zdAogCiB2b2lkIFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6c3RhcnRTZWFyY2hFdmVudFRpbWVyKCkKIHsKLSAgICBBU1NFUlQobm9kZSgpLT5p
c0hUTUxFbGVtZW50KCkpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRleHQoKS5sZW5ndGgoKTsK
IAogICAgIC8vIElmIHRoZXJlJ3Mgbm8gdGV4dCwgZmlyZSB0aGUgZXZlbnQgcmlnaHQgYXdheS4K
ICAgICBpZiAoIWxlbmd0aCkgewogICAgICAgICBzdG9wU2VhcmNoRXZlbnRUaW1lcigpOwotICAg
ICAgICBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obm9kZSgpKS0+b25TZWFyY2goKTsK
KyAgICAgICAgaW5wdXRFbGVtZW50KCktPm9uU2VhcmNoKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKQEAgLTg4NywxNiArODcyLDE0IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lOjpzdGFydFNlYXJjaEV2ZW50VGltZXIoKQogCiB2b2lkIFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6c2VhcmNoRXZlbnRUaW1lckZpcmVkKFRpbWVyPFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZT4qKQogewotICAgIEFTU0VSVChub2RlKCktPmlzSFRNTEVsZW1lbnQoKSk7Ci0gICAg
c3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5vZGUoKSktPm9uU2VhcmNoKCk7CisgICAg
aW5wdXRFbGVtZW50KCktPm9uU2VhcmNoKCk7CiB9CiAKIC8vIFBvcHVwTWVudUNsaWVudCBtZXRo
b2RzCiB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6dmFsdWVDaGFuZ2VkKHVuc2ln
bmVkIGxpc3RJbmRleCwgYm9vbCBmaXJlRXZlbnRzKQogewotICAgIEFTU0VSVChub2RlKCktPmlz
SFRNTEVsZW1lbnQoKSk7CiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4obGlzdEluZGV4KSA8
IGxpc3RTaXplKCkpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8
SFRNTElucHV0RWxlbWVudCo+KG5vZGUoKSk7CisgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQg
PSBpbnB1dEVsZW1lbnQoKTsKICAgICBpZiAoc3RhdGljX2Nhc3Q8aW50PihsaXN0SW5kZXgpID09
IChsaXN0U2l6ZSgpIC0gMSkpIHsKICAgICAgICAgaWYgKGZpcmVFdmVudHMpIHsKICAgICAgICAg
ICAgIG1fcmVjZW50U2VhcmNoZXMuY2xlYXIoKTsKQEAgLTEwMzAsOCArMTAxMyw3IEBAIGJvb2wg
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppdGVtSXNTZWxlY3RlZCh1bnNpZ25lZCkgY29u
c3QKIAogdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNldFRleHRGcm9tSXRlbSh1
bnNpZ25lZCBsaXN0SW5kZXgpCiB7Ci0gICAgQVNTRVJUKG5vZGUoKS0+aXNIVE1MRWxlbWVudCgp
KTsKLSAgICBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obm9kZSgpKS0+c2V0VmFsdWUo
aXRlbVRleHQobGlzdEluZGV4KSk7CisgICAgaW5wdXRFbGVtZW50KCktPnNldFZhbHVlKGl0ZW1U
ZXh0KGxpc3RJbmRleCkpOwogfQogCiBGb250U2VsZWN0b3IqIFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6Zm9udFNlbGVjdG9yKCkgY29uc3QKQEAgLTExMTgsNyArMTEwMCw3IEBAIFBhc3NS
ZWZQdHI8U2Nyb2xsYmFyPiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZVNjcm9s
bGJhcihTY3JvbGxhYmxlQXJlCiAgICAgcmV0dXJuIHdpZGdldC5yZWxlYXNlKCk7CiB9CiAKLUlu
cHV0RWxlbWVudCogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppbnB1dEVsZW1lbnQoKSBj
b25zdAorSFRNTElucHV0RWxlbWVudCogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppbnB1
dEVsZW1lbnQoKSBjb25zdAogewogICAgIHJldHVybiBub2RlKCktPnRvSW5wdXRFbGVtZW50KCk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lLmgKaW5kZXggMThlNWZjOGJjNDkwM2IzYzJiOGM1YTJmNTM3Y2Q4OGM2Nzhh
NmViYS4uZjQzYWExYjNhOWFkMmIyMDU4MGExYWY5NDBlMTJjZTRkZjIzYThjNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmUuaApAQCAtMzAsNyArMzAsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIElu
cHV0RWxlbWVudDsKK2NsYXNzIEhUTUxJbnB1dEVsZW1lbnQ7CiBjbGFzcyBJbnB1dEZpZWxkU3Bl
ZWNoQnV0dG9uRWxlbWVudDsKIGNsYXNzIFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uRWxlbWVudDsK
IGNsYXNzIFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbkVsZW1lbnQ7CkBAIC0xNDIsNyArMTQyLDcg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3coKSBjb25zdDsK
ICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoU2Nyb2xs
YWJsZUFyZWEqLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUpOwog
Ci0gICAgSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQoKSBjb25zdDsKKyAgICBIVE1MSW5wdXRF
bGVtZW50KiBpbnB1dEVsZW1lbnQoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgaW50IHRleHRCbG9j
a0luc2V0TGVmdCgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IHRleHRCbG9ja0luc2V0UmlnaHQo
KSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCmluZGV4IGZj
ZDI2ODhhZGI1M2FlNWY0YjNlZDg4ZTMyNTdkMjUzM2FlODBmMTUuLmI3OGRmZGMzMzljOGMwNTEw
NzQyYzVjZjg0MTIzNjcxNWUyYzdiZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lLmNwcApAQCAtNzUxLDcgKzc1MSw3IEBAIGJvb2wgUmVuZGVyVGhlbWU6OmlzQ2hlY2tl
ZChjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0CiAgICAgaWYgKCFvLT5ub2RlKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gby0+
bm9kZSgpLT50b0lucHV0RWxlbWVudCgpOworICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxl
bWVudCA9IG8tPm5vZGUoKS0+dG9JbnB1dEVsZW1lbnQoKTsKICAgICBpZiAoIWlucHV0RWxlbWVu
dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC03NjMsNyArNzYzLDcgQEAgYm9vbCBSZW5k
ZXJUaGVtZTo6aXNJbmRldGVybWluYXRlKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKICAg
ICBpZiAoIW8tPm5vZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSW5wdXRFbGVt
ZW50KiBpbnB1dEVsZW1lbnQgPSBvLT5ub2RlKCktPnRvSW5wdXRFbGVtZW50KCk7CisgICAgSFRN
TElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gby0+bm9kZSgpLT50b0lucHV0RWxlbWVudCgp
OwogICAgIGlmICghaW5wdXRFbGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTk2
NSw3ICs5NjUsNyBAQCB2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKENT
U1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbgogfQogI2VuZGlmCiAKLWJvb2wg
UmVuZGVyVGhlbWU6OnNob3VsZEhhdmVTcGluQnV0dG9uKElucHV0RWxlbWVudCogaW5wdXRFbGVt
ZW50KSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZTo6c2hvdWxkSGF2ZVNwaW5CdXR0b24oSFRNTElu
cHV0RWxlbWVudCogaW5wdXRFbGVtZW50KSBjb25zdAogewogICAgIHJldHVybiBpbnB1dEVsZW1l
bnQtPmlzU3RlcHBhYmxlKCkgJiYgIWlucHV0RWxlbWVudC0+aXNSYW5nZUNvbnRyb2woKTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgKaW5kZXggZTEzZTFiYTA0MWU5NWIw
ZGMwMGIzMTk1Zjk3MTEzYjAzZDIzYjljNS4uMTU3YmEzYTVkMmQ4YWU2OGZhOTQwYjcyOGFlZjg4
Y2I1YWUwM2JmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgKQEAgLTM2
LDYgKzM2LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRWxlbWVudDsKK2NsYXNz
IEhUTUxJbnB1dEVsZW1lbnQ7CiBjbGFzcyBQb3B1cE1lbnU7CiBjbGFzcyBSZW5kZXJNZW51TGlz
dDsKICNpZiBFTkFCTEUoTUVURVJfVEFHKQpAQCAtMjAxLDcgKzIwMiw3IEBAIHB1YmxpYzoKICNl
bmRpZgogICAgIAogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTaG93UGxhY2Vob2xkZXJXaGVuRm9j
dXNlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIHNob3VsZEhh
dmVTcGluQnV0dG9uKElucHV0RWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzaG91
bGRIYXZlU3BpbkJ1dHRvbihIVE1MSW5wdXRFbGVtZW50KikgY29uc3Q7CiAKIHByb3RlY3RlZDoK
ICAgICAvLyBUaGUgcGxhdGZvcm0gc2VsZWN0aW9uIGNvbG9yLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwppbmRleCAzYzFjYzUyMzgxMTA5NTVkZDk4ODU1M2RiYzNhNGFkZDM1MWU3YjdhLi5mMDQ3
NmU5ZGI3NjM3MTFhZGJlYjU3NmNhZWFjMjE4MTk2MjJlNTU1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDExLTA1LTA1ICBLZW50IFRhbXVyYSAgPHRrZW50
QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBFbGltaW5hdGUgV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LntjcHAsaH0KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMjYyCisKKyAgICAg
ICAgKiBzcmMvV2ViSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6dG9XZWJJbnB1
dEVsZW1lbnQpOgorCiAyMDExLTA1LTAzICBIYW5zIFdlbm5ib3JnICA8aGFuc0BjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU3RldmUgQmxvY2suCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbnB1dEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViSW5wdXRFbGVtZW50LmNwcAppbmRleCAzNDQ4YmI2YjMyODA2ZGI3
YWRkMTRhMjZlMTA3NWIzYWU2MTY0NGY2Li5mMGM0MTgzZjMwYTFmZmViMjAyNDFhNzg0NmVjMmU0
MzlhNjdhYjFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbnB1
dEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklucHV0RWxl
bWVudC5jcHAKQEAgLTE3MywxMiArMTczLDEwIEBAIFdlYklucHV0RWxlbWVudDo6b3BlcmF0b3Ig
UGFzc1JlZlB0cjxIVE1MSW5wdXRFbGVtZW50PigpIGNvbnN0CiAKIFdlYklucHV0RWxlbWVudCog
dG9XZWJJbnB1dEVsZW1lbnQoV2ViRWxlbWVudCogd2ViRWxlbWVudCkKIHsKLSAgICBJbnB1dEVs
ZW1lbnQqIGlucHV0RWxlbWVudCA9IHdlYkVsZW1lbnQtPnVud3JhcDxFbGVtZW50PigpLT50b0lu
cHV0RWxlbWVudCgpOworICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IHdlYkVs
ZW1lbnQtPnVud3JhcDxFbGVtZW50PigpLT50b0lucHV0RWxlbWVudCgpOwogICAgIGlmICghaW5w
dXRFbGVtZW50KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIEFTU0VSVCh3ZWJFbGVtZW50LT51
bndyYXA8RWxlbWVudD4oKS0+aXNIVE1MRWxlbWVudCgpKTsKLQogICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxXZWJJbnB1dEVsZW1lbnQqPih3ZWJFbGVtZW50KTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92412</attachid>
            <date>2011-05-05 06:58:31 -0700</date>
            <delta_ts>2011-05-05 13:55:05 -0700</delta_ts>
            <desc>Try 2</desc>
            <filename>bug-60262-20110505225827.patch</filename>
            <type>text/plain</type>
            <size>94219</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODU4NDcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggOTI3OWIw
ZmYwYzIwMTQzZGNhZGIzMmNiNTY4NjdhMDdmYzUyZDMzMS4uY2QxMWQ2YzgwNGZjODc0OGI5YzVi
MzkzNzgwNTM0YzJkZDY1ZWM4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTU3MCw3ICs1NzAs
NiBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgZG9tL0V4Y2VwdGlvbkJhc2UuY3BwCiAgICAg
ZG9tL0V4Y2VwdGlvbkNvZGUuY3BwCiAgICAgZG9tL0ljb25VUkwuY3BwCi0gICAgZG9tL0lucHV0
RWxlbWVudC5jcHAKICAgICBkb20vS2V5Ym9hcmRFdmVudC5jcHAKICAgICBkb20vTWVzc2FnZUNo
YW5uZWwuY3BwCiAgICAgZG9tL01lc3NhZ2VFdmVudC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3Y2E4OGQ2
MDc3YTBiNmE0ZWI5Yzc3MWFkZGExODJiMWYyZjdhZTAwLi44Mzk5MmNkZmIzMmVhMTMwOWYzYzQ2
ZjRhYTk3ZWZmNjI3Mjg4YmYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTA0IEBACisyMDExLTA1
LTA1ICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbGltaW5hdGUgV2ViQ29yZS9kb20vSW5w
dXRFbGVtZW50LntjcHAsaH0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTYwMjYyCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisgICAgICAgICogQ01h
a2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBX
ZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29y
ZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvQVhPYmplY3RDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hl
Ojp0ZXh0TWFya2VyRGF0YUZvclZpc2libGVQb3NpdGlvbik6CisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzUGFzc3dvcmRGaWVsZCk6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc0luZGV0ZXJtaW5hdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNOYXRpdmVDaGVja2JveE9y
UmFkaW8pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXND
aGVja2VkKToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpjaGVja09u
ZVNlbGVjdG9yKToKKyAgICAgICAgKiBkb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDaGVja2VkUmFkaW9CdXR0b25zOjpyZW1vdmVCdXR0b24pOgorICAgICAg
ICAqIGRvbS9JbnB1dEVsZW1lbnQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGRvbS9JbnB1dEVs
ZW1lbnQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpOb2RlOjp0b0lucHV0RWxlbWVudCk6CisgICAgICAgICogZG9tL05vZGUuaDoKKyAgICAg
ICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElu
cHV0RWxlbWVudDo6SFRNTElucHV0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5w
dXRFbGVtZW50Ojpmb3JtQ29udHJvbE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0
RWxlbWVudDo6dG9vTG9uZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojp1
cGRhdGVGb2N1c0FwcGVhcmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVu
dDo6YWJvdXRUb1VubG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojpo
YW5kbGVGb2N1c0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6Omhh
bmRsZUJsdXJFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojp1cGRh
dGVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6Y29weU5vbkF0dHJpYnV0ZVByb3Bl
cnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6dmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c3VnZ2VzdGVkVmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0U3VnZ2VzdGVkVmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWVGcm9tUmVuZGVyZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0RmlsZUxpc3RGcm9tUmVuZGVyZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0RGVmYXVsdE5hbWUpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6bWF4TGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxJbnB1dEVsZW1lbnQ6OmNhY2hlU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmZv
cm1hdENvZGVzKToKKyAgICAgICAgKFdlYkNvcmU6OmN1cnNvclBvc2l0aW9uVG9NYXNrSW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6aXNDb25mb3JtVG9JbnB1dE1h
c2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6dmFsaWRhdGVJbnB1dE1h
c2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0V2FwSW5wdXRGb3Jt
YXQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6cmVwbGFjZUVPTEFuZExp
bWl0TGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNhbml0aXpl
VXNlcklucHV0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6aGFu
ZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0
RWxlbWVudDo6bm90aWZ5Rm9ybVN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
SW5wdXRFbGVtZW50Ojp1cGRhdGVWYWx1ZUlmTmVlZGVkKToKKyAgICAgICAgKiBodG1sL0hUTUxJ
bnB1dEVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnRvSW5w
dXRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmlzSW5kZXRl
cm1pbmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojppc0F1dG9maWxs
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c3VwcG9ydHNNYXhMZW5n
dGgpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6Y2FjaGVkU2VsZWN0aW9u
U3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6Y2FjaGVkU2VsZWN0
aW9uRW5kKToKKyAgICAgICAgKiBodG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwOgorICAgICAg
ICAqIGh0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRG
aWVsZElucHV0VHlwZTo6c2FuaXRpemVWYWx1ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmFkZFNlYXJjaFJlc3VsdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnN0b3BTZWFy
Y2hFdmVudFRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZTo6c2hvd1BvcHVwKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6aGlkZVBvcHVwKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZTo6c3VidHJlZUhhc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lOjp1cGRhdGVGcm9tRWxlbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZUlubmVyQmxvY2tTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZVJl
c3VsdHNCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6OmNyZWF0ZUNhbmNlbEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y3JlYXRlSW5uZXJTcGluQnV0dG9uU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjcmVhdGVPdXRl
clNwaW5CdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6OmNyZWF0ZVNwZWVjaEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6dmlzaWJpbGl0eUZvckNhbmNlbEJ1dHRvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnN0YXJ0U2VhcmNo
RXZlbnRUaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmU6OnNlYXJjaEV2ZW50VGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmU6OnZhbHVlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNldFRleHRGcm9tSXRlbSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmlucHV0RWxlbWVudCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUaGVtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6
aXNDaGVja2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjppc0luZGV0ZXJtaW5h
dGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnNob3VsZEhhdmVTcGluQnV0dG9u
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuaDoKKwogMjAxMS0wNS0wNCAgWXVy
eSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBQYXZlbCBGZWxkbWFuLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggYWQzMTI2
Y2NiOWVmMmMzZDZmOTIzNmQ0NDQ1NjZkYjQwYjE0ZTQxNi4uMWMwMjFlYTViZjc3YjhhY2RkYmJk
ODgyNTE1M2QxMjVjMTdlN2U5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0x
MTUzLDggKzExNTMsNiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2Rv
bS9JZ25vcmVEZXN0cnVjdGl2ZVdyaXRlQ291bnRJbmNyZW1lbnRlci5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9kb20vSWNvblVSTC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9JY29uVVJMLmggXAot
CVNvdXJjZS9XZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9k
b20vSW5wdXRFbGVtZW50LmggXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9IYXNoQ2hhbmdlRXZlbnQu
aCBcCiAJU291cmNlL1dlYkNvcmUvZG9tL0tleWJvYXJkRXZlbnQuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9kb20vS2V5Ym9hcmRFdmVudC5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZXhwLmluIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXggZGVhODk1
MDdkZjNmYTU1OTM4OGE0NzJkYzVlYjk4N2EzNzUyNDI1Ny4uMmI0ZjBiZjk0NTQwNjJjYTQ0Njcx
MzcwNzk4NGYzNmExZGMwNjliZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5l
eHAuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTQzNiw2ICs0MzYs
NyBAQCBfX1pON1dlYkNvcmUxNkZvbnRGYWxsYmFja0xpc3QxNXJlbGVhc2VGb250RGF0YUV2CiBf
X1pON1dlYkNvcmUxNkZvbnRQbGF0Zm9ybURhdGFDMUVQNk5TRm9udGZiYk5TXzE1Rm9udE9yaWVu
dGF0aW9uRU5TXzE1VGV4dE9yaWVudGF0aW9uRU5TXzE2Rm9udFdpZHRoVmFyaWFudEUKIF9fWk43
V2ViQ29yZTE2Rm9udFBsYXRmb3JtRGF0YUQxRXYKIF9fWk43V2ViQ29yZTE2SFRNTElucHV0RWxl
bWVudDEzc2V0QXV0b2ZpbGxlZEViCitfX1pON1dlYkNvcmUxNkhUTUxJbnB1dEVsZW1lbnQxNXNl
dFZhbHVlRm9yVXNlckVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTE2SWNvbkRhdGFiYXNl
QmFzZTI4c3luY2hyb25vdXNJY29uVVJMRm9yUGFnZVVSTEVSS04zV1RGNlN0cmluZ0UKIF9fWk43
V2ViQ29yZTE2SWNvbkRhdGFiYXNlQmFzZTRvcGVuRVJLTjNXVEY2U3RyaW5nRVM0XwogX19aTjdX
ZWJDb3JlMTZMZWdhY3lXZWJBcmNoaXZlMTljcmVhdGVGcm9tU2VsZWN0aW9uRVBOU181RnJhbWVF
CkBAIC0xMTQwLDcgKzExNDEsOSBAQCBfX1pOSzdXZWJDb3JlMTVWaXNpYmxlUG9zaXRpb24xOWFi
c29sdXRlQ2FyZXRCb3VuZHNFdgogX19aTks3V2ViQ29yZTE1VmlzaWJsZVBvc2l0aW9uNG5leHRF
TlNfMjdFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGVFCiBfX1pOSzdXZWJDb3JlMTVWaXNpYmxl
UG9zaXRpb244cHJldmlvdXNFTlNfMjdFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGVFCiBfX1pO
SzdXZWJDb3JlMTZGb250RmFsbGJhY2tMaXN0MTBmb250RGF0YUF0RVBLTlNfNEZvbnRFagorX19a
Tks3V2ViQ29yZTE2SFRNTElucHV0RWxlbWVudDExaXNUZXh0RmllbGRFdgogX19aTks3V2ViQ29y
ZTE2SFRNTElucHV0RWxlbWVudDEyYXV0b0NvbXBsZXRlRXYKK19fWk5LN1dlYkNvcmUxNkhUTUxJ
bnB1dEVsZW1lbnQxNWlzUGFzc3dvcmRGaWVsZEV2CiBfX1pOSzdXZWJDb3JlMTZIVE1MSW5wdXRF
bGVtZW50MjFsYXN0Q2hhbmdlV2FzVXNlckVkaXRFdgogX19aTks3V2ViQ29yZTE2SWNvbkRhdGFi
YXNlQmFzZTEyZGF0YWJhc2VQYXRoRXYKIF9fWk5LN1dlYkNvcmUxNlJlc291cmNlUmVzcG9uc2Ux
M25zVVJMUmVzcG9uc2VFdgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGUxODVhZjg2NzM1MTQ0ZTk2OWIw
NTIxMjU1YmM2YWQyZWJjZmU2Y2IuLmE4M2UxNzQyZjhiNDAwMjc1MmZlMTUwMWVlMjdmZDNhYzc4
YmY3OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTUyOSw3ICs1MjksNiBAQAogICAgICAgICAgICAg
J2RvbS9FdmVudFRhcmdldC5oJywKICAgICAgICAgICAgICdkb20vRXhjZXB0aW9uQ29kZS5oJywK
ICAgICAgICAgICAgICdkb20vRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uLmgnLAotICAgICAg
ICAgICAgJ2RvbS9JbnB1dEVsZW1lbnQuaCcsCiAgICAgICAgICAgICAnZG9tL0tleWJvYXJkRXZl
bnQuaCcsCiAgICAgICAgICAgICAnZG9tL01hcHBlZEF0dHJpYnV0ZUVudHJ5LmgnLAogICAgICAg
ICAgICAgJ2RvbS9NZXNzYWdlUG9ydC5oJywKQEAgLTI0NzMsNyArMjQ3Miw2IEBACiAgICAgICAg
ICAgICAnZG9tL0lnbm9yZURlc3RydWN0aXZlV3JpdGVDb3VudEluY3JlbWVudGVyLmgnLAogICAg
ICAgICAgICAgJ2RvbS9JY29uVVJMLmNwcCcsCiAgICAgICAgICAgICAnZG9tL0ljb25VUkwuaCcs
Ci0gICAgICAgICAgICAnZG9tL0lucHV0RWxlbWVudC5jcHAnLAogICAgICAgICAgICAgJ2RvbS9L
ZXlib2FyZEV2ZW50LmNwcCcsCiAgICAgICAgICAgICAnZG9tL01lc3NhZ2VDaGFubmVsLmNwcCcs
CiAgICAgICAgICAgICAnZG9tL01lc3NhZ2VDaGFubmVsLmgnLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCBi
M2MwNTYxY2YwOGNjNjQzOGNiOTZmNjFmNjA3MTQzMzM1ZTNhNWZlLi5jYTkxMDY5ZDMyOTgwNTZi
MDlhMTYyODI1YWE2NzlhM2FiMWQyMjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnBybworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtNDkzLDcgKzQ5Myw2
IEBAIFNPVVJDRVMgKz0gXAogICAgIGRvbS9FeGNlcHRpb25CYXNlLmNwcCBcCiAgICAgZG9tL0V4
Y2VwdGlvbkNvZGUuY3BwIFwKICAgICBkb20vSWNvblVSTC5jcHAgXAotICAgIGRvbS9JbnB1dEVs
ZW1lbnQuY3BwIFwKICAgICBkb20vS2V5Ym9hcmRFdmVudC5jcHAgXAogICAgIGRvbS9NZXNzYWdl
Q2hhbm5lbC5jcHAgXAogICAgIGRvbS9NZXNzYWdlRXZlbnQuY3BwIFwKQEAgLTE0NjksNyArMTQ2
OCw2IEBAIEhFQURFUlMgKz0gXAogICAgIGRvbS9FeGNlcHRpb25CYXNlLmggXAogICAgIGRvbS9F
eGNlcHRpb25Db2RlLmggXAogICAgIGRvbS9GcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24uaCBc
Ci0gICAgZG9tL0lucHV0RWxlbWVudC5oIFwKICAgICBkb20vS2V5Ym9hcmRFdmVudC5oIFwKICAg
ICBkb20vTWVzc2FnZUNoYW5uZWwuaCBcCiAgICAgZG9tL01lc3NhZ2VFdmVudC5oIFwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggZTUzYmRmNjI4
NDBlMGI2MTdlZjA1MTg2NzdiNDgxY2EzOGZiZjRjYy4uZjFkOWVmNWU0ZDQwNjNkODQxNmExNjJk
YjIwYTFhMmRhNDliOGIxMSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oKQEAgLTQ0NTY2LDYyICs0NDU2Niw2IEBACiAJCQkJPgogCQkJPC9GaWxlPgog
CQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxJbnB1dEVsZW1lbnQuY3BwIgotCQkJ
CT4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iRGVidWd8V2luMzIiCi0JCQkJ
CUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1l
PSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0J
CQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCi0JCQkJCUV4
Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJW
Q0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJ
PEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IkRlYnVnX0NhaXJvX0NGTGl0ZXxXaW4zMiIK
LQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJ
CU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlv
bj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iUmVsZWFzZV9DYWlyb19DRkxp
dGV8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxU
b29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNv
bmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IkRlYnVnX0Fs
bHxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJCT4KLQkJCQkJPFRv
b2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29u
ZmlndXJhdGlvbj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iUHJvZHVjdGlv
bnxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJCT4KLQkJCQkJPFRv
b2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29u
ZmlndXJhdGlvbj4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxk
b21cSW5wdXRFbGVtZW50LmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKIAkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXGRvbVxLZXlib2FyZEV2ZW50LmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25m
aWd1cmF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggZDBjZjY5NmFlYzBkMTZkNGFjNTk4M2U2ZjU2ZWY1MjkwODQ0NWRlMC4u
MzU1ZjAzNzU1OWYzNjE1ZjRlZjM0MzEwNWE4YjMyOTc2ZTBlMzBmZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtOTUsMTQgKzk1
LDEyIEBACiAJCTA4NTRCMDIzMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdSb290SW5saW5lQm94Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODU0QjAxMTEy
NTVFNEU2MDBCOUNERDAgLyogU1ZHUm9vdElubGluZUJveC5oICovOyB9OwogCQkwODU0QjAyNTEy
NTVFNEU2MDBCOUNERDAgLyogU1ZHVGV4dFF1ZXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODU0QjAxMzEyNTVFNEU2MDBCOUNERDAgLyogU1ZHVGV4
dFF1ZXJ5LmggKi87IH07CiAJCTA4NTc5NzA5MTI3ODM5NEMwMEE4RUM1RiAvKiBTVkdBbmltYXRl
ZEJvb2xlYW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDA4NTc5NzA4MTI3ODM5NEMwMEE4RUM1RiAvKiBTVkdBbmltYXRlZEJvb2xlYW4uaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwODU5MUFBNTBGMDg1
QzRFMDA5QkFDQjEgLyogSW5wdXRFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwODU5MUFBNDBGMDg1QzRFMDA5QkFDQjEgLyogSW5wdXRFbGVt
ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MDg1QTE1OTMxMjg5QThERDAwMjcxMEUzIC8qIFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdFByb3Bl
cnR5VGVhck9mZi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDg1QTE1OTIxMjg5QThERDAwMjcxMEUzIC8qIFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdFBy
b3BlcnR5VGVhck9mZi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTA4NUI5MkJBMEVGREU3M0QwMEU2MTIzQyAvKiBGb3JtRGF0YUJ1aWxkZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg1QjkyQjgw
RUZERTczRDAwRTYxMjNDIC8qIEZvcm1EYXRhQnVpbGRlci5jcHAgKi87IH07CiAJCTA4NUI5MkJC
MEVGREU3M0QwMEU2MTIzQyAvKiBGb3JtRGF0YUJ1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NUI5MkI5MEVGREU3M0QwMEU2MTIzQyAvKiBG
b3JtRGF0YUJ1aWxkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9Owog
CQkwODY0MUQ0NzEyMTQyRjdEMDA4REU5RjYgLyogUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1h
Z2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg2
NDFENDUxMjE0MkY3RDAwOERFOUY2IC8qIFJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlLmNw
cCAqLzsgfTsKIAkJMDg2NDFENDgxMjE0MkY3RDAwOERFOUY2IC8qIFJlbmRlckltYWdlUmVzb3Vy
Y2VTdHlsZUltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwODY0MUQ0NjEyMTQyRjdEMDA4REU5RjYgLyogUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxl
SW1hZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwODZCQkQwRjEzNjAzOUMyMDA4QjE1RDggLyogR2x5cGguaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NkJCRDBFMTM2MDM5QzIwMDhCMTVEOCAvKiBH
bHlwaC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0J
CTA4NzAwQkU3MEYwODZDNTMwMDkxOTQxOSAvKiBJbnB1dEVsZW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg3MDBCRTYwRjA4NkM1MzAwOTE5
NDE5IC8qIElucHV0RWxlbWVudC5jcHAgKi87IH07CiAJCTA4NzI4MTU1MEYyNkI5QjYwMEFGQzU5
NiAvKiBPcHRpb25FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDA4NzI4MTUxMEYyNkI5QjYwMEFGQzU5NiAvKiBPcHRpb25FbGVtZW50LmNw
cCAqLzsgfTsKIAkJMDg3MjgxNTYwRjI2QjlCNjAwQUZDNTk2IC8qIE9wdGlvbkVsZW1lbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NzI4MTUyMEYy
NkI5QjYwMEFGQzU5NiAvKiBPcHRpb25FbGVtZW50LmggKi87IH07CiAJCTA4NzI4MTU3MEYyNkI5
QjYwMEFGQzU5NiAvKiBPcHRpb25Hcm91cEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg3MjgxNTMwRjI2QjlCNjAwQUZDNTk2IC8qIE9w
dGlvbkdyb3VwRWxlbWVudC5jcHAgKi87IH07CkBAIC02NDU2LDE0ICs2NDU0LDEyIEBACiAJCTA4
NTRCMDEyMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdUZXh0UXVlcnkuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHVGV4dFF1ZXJ5LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMDg1NEIwMTMxMjU1RTRFNjAwQjlDREQwIC8qIFNWR1RleHRRdWVyeS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdUZXh0UXVlcnkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg1Nzk3MDgxMjc4Mzk0QzAwQThFQzVGIC8qIFNWR0Fu
aW1hdGVkQm9vbGVhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmlt
YXRlZEJvb2xlYW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDg1OTFBQTQwRjA4
NUM0RTAwOUJBQ0IxIC8qIElucHV0RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbnB1dEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg1
QTE1OTIxMjg5QThERDAwMjcxMEUzIC8qIFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdFByb3BlcnR5
VGVhck9mZi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRlZFRy
YW5zZm9ybUxpc3RQcm9wZXJ0eVRlYXJPZmYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMDg1QjkyQjgwRUZERTczRDAwRTYxMjNDIC8qIEZvcm1EYXRhQnVpbGRlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb3JtRGF0YUJ1aWxkZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODVCOTJCOTBFRkRFNzNEMDBFNjEyM0MgLyogRm9y
bURhdGFCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvcm1EYXRh
QnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODY0MUQ0NTEyMTQyRjdE
MDA4REU5RjYgLyogUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODY0MUQ0NjEyMTQyRjdEMDA4REU5
RjYgLyogUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg2QkJEMEUxMzYwMzlDMjAwOEIxNUQ4IC8qIEdseXBoLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdseXBoLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTA4NzAwQkU2MEYwODZDNTMwMDkxOTQxOSAvKiBJbnB1dEVsZW1lbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5wdXRFbGVtZW50LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg3MjgxNTEwRjI2QjlCNjAwQUZDNTk2
IC8qIE9wdGlvbkVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gT3B0aW9uRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NzI4
MTUyMEYyNkI5QjYwMEFGQzU5NiAvKiBPcHRpb25FbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE9wdGlvbkVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMDg3MjgxNTMwRjI2QjlCNjAwQUZDNTk2IC8qIE9wdGlvbkdyb3VwRWxlbWVudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcHRpb25Hcm91cEVsZW1lbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTkyNDQsOCArMTkyNDAsNiBAQAog
CQkJCTI0NDJCQkY4MTE5NEM5RDMwMEQ0OTQ2OSAvKiBIYXNoQ2hhbmdlRXZlbnQuaCAqLywKIAkJ
CQk4NDgyQjc0NDExOThDMzJFMDBCRkIwMDUgLyogSGFzaENoYW5nZUV2ZW50LmlkbCAqLywKIAkJ
CQk4QUI0QkM3NjEyNkZEQjcxMDBERUI3MjcgLyogSWdub3JlRGVzdHJ1Y3RpdmVXcml0ZUNvdW50
SW5jcmVtZW50ZXIuaCAqLywKLQkJCQkwODcwMEJFNjBGMDg2QzUzMDA5MTk0MTkgLyogSW5wdXRF
bGVtZW50LmNwcCAqLywKLQkJCQkwODU5MUFBNDBGMDg1QzRFMDA5QkFDQjEgLyogSW5wdXRFbGVt
ZW50LmggKi8sCiAJCQkJODUwMzFCMkQwQTQ0RUZDNzAwRjk5MkUwIC8qIEtleWJvYXJkRXZlbnQu
Y3BwICovLAogCQkJCTg1MDMxQjJFMEE0NEVGQzcwMEY5OTJFMCAvKiBLZXlib2FyZEV2ZW50Lmgg
Ki8sCiAJCQkJMTRDRjdDMjAwOUY3MTEwNjAwRUIzNjY1IC8qIEtleWJvYXJkRXZlbnQuaWRsICov
LApAQCAtMjExNDgsNyArMjExNDIsNiBAQAogCQkJCUE4Q0ZGNUUzMEExNTVBMDUwMDBBNDIzNCAv
KiBJbmxpbmVGbG93Qm94LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0U3ODkxNjExMjBENjA4MDA2
MEVDRTUgLyogSW5saW5lSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUE0ODVBMDk3
RDkzMDIwMDk0QzlFNCAvKiBJbmxpbmVUZXh0Qm94LmggaW4gSGVhZGVycyAqLywKLQkJCQkwODU5
MUFBNTBGMDg1QzRFMDA5QkFDQjEgLyogSW5wdXRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkzN0UzNTI0RDEyNDUwQzY2MDBCQUY1RDkgLyogSW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5MzMwOURFQTA5OUU2NDkyMDA1NkU1ODEgLyogSW5zZXJ0SW50b1RleHROb2RlQ29tbWFu
ZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlERUMwOTlFNjQ5MjAwNTZFNTgxIC8qIEluc2Vy
dExpbmVCcmVha0NvbW1hbmQuaCBpbiBIZWFkZXJzICovLApAQCAtMjM5MzcsNyArMjM5MzAsNiBA
QAogCQkJCUE4Q0ZGNUU2MEExNTVBMDUwMDBBNDIzNCAvKiBJbmxpbmVCb3guY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQThDRkY1RTQwQTE1NUEwNTAwMEE0MjM0IC8qIElubGluZUZsb3dCb3guY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFQTQ4NTkwOTdEOTMwMjAwOTRDOUU0IC8qIElubGluZVRl
eHRCb3guY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMDg3MDBCRTcwRjA4NkM1MzAwOTE5NDE5IC8q
IElucHV0RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzN0UzNTI0QjEyNDUwQzUyMDBC
QUY1RDkgLyogSW5wdXRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5REU5MDk5RTY0
OTIwMDU2RTU4MSAvKiBJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTkzMzA5REVCMDk5RTY0OTIwMDU2RTU4MSAvKiBJbnNlcnRMaW5lQnJlYWtDb21tYW5k
LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BWE9iamVjdENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5jcHAKaW5kZXggYjQ3MTIwMTkzNjdiZjUyYWZhYTEwYmViZWRlZTJjNDcxOTU0
YzJkNS4uMTlhNDVkZDVhOWFmNDkwMWNkNWU4ZjU5MTY1M2FmZjU4YzJlNWMwMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCkBAIC01NSwxMSAr
NTUsMTEgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxBcmVhRWxlbWVudC5o
IgogI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSW5wdXRFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaWYgRU5BQkxFKFZJREVPKQogI2luY2x1
ZGUgIk1lZGlhQ29udHJvbEVsZW1lbnRzLmgiCiAjZW5kaWYKLSNpbmNsdWRlICJJbnB1dEVsZW1l
bnQuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEJveC5oIgogI2lu
Y2x1ZGUgIlJlbmRlck1lbnVMaXN0LmgiCkBAIC02MTYsNyArNjE2LDcgQEAgdm9pZCBBWE9iamVj
dENhY2hlOjp0ZXh0TWFya2VyRGF0YUZvclZpc2libGVQb3NpdGlvbihUZXh0TWFya2VyRGF0YSYg
dGV4dE1hcmtlckQKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGlmIChkb21Ob2RlLT5pc0hU
TUxFbGVtZW50KCkpIHsKLSAgICAgICAgSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBkb21O
b2RlLT50b0lucHV0RWxlbWVudCgpOworICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVs
ZW1lbnQgPSBkb21Ob2RlLT50b0lucHV0RWxlbWVudCgpOwogICAgICAgICBpZiAoaW5wdXRFbGVt
ZW50ICYmIGlucHV0RWxlbWVudC0+aXNQYXNzd29yZEZpZWxkKCkpCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKaW5kZXggMjUwNzhjNWE0NmJlMGExZjQxNjUy
YTM2ZmE0YWZhMzAzNjY4ODIwOC4uMzczM2RhMjJiYTZjMTA0N2JhYTMxNWVlZGE5ODU0M2QxYzk3
YjdkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCkBAIC00OTYsNyArNDk2LDcgQEAgYm9vbCBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc1Bhc3N3b3JkRmllbGQoKSBjb25zdAogICAgIGlmIChh
cmlhUm9sZUF0dHJpYnV0ZSgpICE9IFVua25vd25Sb2xlKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IG1fcmVuZGVyZXItPm5vZGUoKS0+
dG9JbnB1dEVsZW1lbnQoKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBt
X3JlbmRlcmVyLT5ub2RlKCktPnRvSW5wdXRFbGVtZW50KCk7CiAgICAgaWYgKCFpbnB1dEVsZW1l
bnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNTg5LDcgKzU4OSw3IEBAIGJvb2wgQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNJbmRldGVybWluYXRlKCkgY29uc3QKICAgICBpZiAo
IW1fcmVuZGVyZXItPm5vZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSW5wdXRF
bGVtZW50KiBpbnB1dEVsZW1lbnQgPSBtX3JlbmRlcmVyLT5ub2RlKCktPnRvSW5wdXRFbGVtZW50
KCk7CisgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gbV9yZW5kZXJlci0+bm9k
ZSgpLT50b0lucHV0RWxlbWVudCgpOwogICAgIGlmICghaW5wdXRFbGVtZW50KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKQEAgLTYwMCw3ICs2MDAsNyBAQCBib29sIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OmlzTmF0aXZlQ2hlY2tib3hPclJhZGlvKCkgY29uc3QKIHsKICAgICBOb2RlKiBl
bGVtZW50Tm9kZSA9IG5vZGUoKTsKICAgICBpZiAoZWxlbWVudE5vZGUpIHsKLSAgICAgICAgSW5w
dXRFbGVtZW50KiBpbnB1dCA9IGVsZW1lbnROb2RlLT50b0lucHV0RWxlbWVudCgpOworICAgICAg
ICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IGVsZW1lbnROb2RlLT50b0lucHV0RWxlbWVudCgp
OwogICAgICAgICBpZiAoaW5wdXQpCiAgICAgICAgICAgICByZXR1cm4gaW5wdXQtPmlzQ2hlY2ti
b3goKSB8fCBpbnB1dC0+aXNSYWRpb0J1dHRvbigpOwogICAgIH0KQEAgLTYxNSw3ICs2MTUsNyBA
QCBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzQ2hlY2tlZCgpIGNvbnN0CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIEZpcnN0IHRlc3QgZm9yIG5hdGl2ZSBjaGVja2Vk
bmVzcyBzZW1hbnRpY3MKLSAgICBJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IG1fcmVuZGVy
ZXItPm5vZGUoKS0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1
dEVsZW1lbnQgPSBtX3JlbmRlcmVyLT5ub2RlKCktPnRvSW5wdXRFbGVtZW50KCk7CiAgICAgaWYg
KGlucHV0RWxlbWVudCkKICAgICAgICAgcmV0dXJuIGlucHV0RWxlbWVudC0+aXNDaGVja2VkKCk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAppbmRleCA4NDExODE1ZjI1
OTIwZDczOWY0MWI3ZmNkOTEwODg5OTgwYTIwZmE0Li40ODhkYTk2MmM4ZTJjNGI5NzgyMTUxNzE1
NzA5ZThlMTUxODVhMjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVT
ZWxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3Bw
CkBAIC0xMDY5LDggKzEwNjksOCBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNhblNoYXJlU3R5
bGVXaXRoRWxlbWVudChOb2RlKiBub2RlKSBjb25zdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBpZiAoaXNDb250cm9sKSB7Ci0gICAgICAgIElucHV0RWxlbWVudCogdGhpc0lucHV0RWxl
bWVudCA9IGVsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCk7Ci0gICAgICAgIElucHV0RWxlbWVudCog
b3RoZXJJbnB1dEVsZW1lbnQgPSBtX2VsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCk7CisgICAgICAg
IEhUTUxJbnB1dEVsZW1lbnQqIHRoaXNJbnB1dEVsZW1lbnQgPSBlbGVtZW50LT50b0lucHV0RWxl
bWVudCgpOworICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBvdGhlcklucHV0RWxlbWVudCA9IG1f
ZWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKTsKIAogICAgICAgICBpZiAoIXRoaXNJbnB1dEVsZW1l
bnQgfHwgIW90aGVySW5wdXRFbGVtZW50KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
Mjc3Myw3ICsyNzczLDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6
OmNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWUKICAgICAgICAgICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0F1dG9maWxsOiB7CiAgICAgICAgICAgICAgICAgaWYgKCFl
IHx8ICFlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQogICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICBpZiAoSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBlLT50
b0lucHV0RWxlbWVudCgpKQorICAgICAgICAgICAgICAgIGlmIChIVE1MSW5wdXRFbGVtZW50KiBp
bnB1dEVsZW1lbnQgPSBlLT50b0lucHV0RWxlbWVudCgpKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gaW5wdXRFbGVtZW50LT5pc0F1dG9maWxsZWQoKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KQEAgLTI4NjYsNyArMjg2Niw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxl
Y3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWws
IEVsZW1lCiAgICAgICAgICAgICAgICAgLy8gRXZlbiB0aG91Z2ggV2luSUUgYWxsb3dzIGNoZWNr
ZWQgYW5kIGluZGV0ZXJtaW5hdGUgdG8gY28tZXhpc3QsIHRoZSBDU1Mgc2VsZWN0b3Igc3BlYyBz
YXlzIHRoYXQKICAgICAgICAgICAgICAgICAvLyB5b3UgY2FuJ3QgYmUgYm90aCBjaGVja2VkIGFu
ZCBpbmRldGVybWluYXRlLiAgV2Ugd2lsbCBiZWhhdmUgbGlrZSBXaW5JRSBiZWhpbmQgdGhlIHNj
ZW5lcyBhbmQganVzdAogICAgICAgICAgICAgICAgIC8vIG9iZXkgdGhlIENTUyBzcGVjIGhlcmUg
aW4gdGhlIHRlc3QgZm9yIG1hdGNoaW5nIHRoZSBwc2V1ZG8uCi0gICAgICAgICAgICAgICAgSW5w
dXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBlLT50b0lucHV0RWxlbWVudCgpOworICAgICAgICAg
ICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGUtPnRvSW5wdXRFbGVtZW50
KCk7CiAgICAgICAgICAgICAgICAgaWYgKGlucHV0RWxlbWVudCAmJiBpbnB1dEVsZW1lbnQtPmlz
Q2hlY2tlZCgpICYmICFpbnB1dEVsZW1lbnQtPmlzSW5kZXRlcm1pbmF0ZSgpKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI4NzQs
NyArMjg3NCw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpjaGVj
a09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lCiAgICAgICAgICAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9JbmRldGVybWluYXRlOiB7CiAgICAgICAgICAgICAgICAgaWYgKCFl
IHx8ICFlLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQogICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICBJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGUtPnRvSW5w
dXRFbGVtZW50KCk7CisgICAgICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVt
ZW50ID0gZS0+dG9JbnB1dEVsZW1lbnQoKTsKICAgICAgICAgICAgICAgICBpZiAoaW5wdXRFbGVt
ZW50ICYmIGlucHV0RWxlbWVudC0+aXNJbmRldGVybWluYXRlKCkpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuY3BwCmluZGV4IDc1MjMzNzI1MWFlYzk1ZDNlOWUyYzVm
YTVlNjU4MzljOTA0NTViZjIuLjJhMGZlYTQwNmU2NjVkMmUyYjU3MGExN2Q1MDYzMzI3OTc5MGJi
YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5jcHAKQEAgLTc3
LDcgKzc3LDcgQEAgdm9pZCBDaGVja2VkUmFkaW9CdXR0b25zOjpyZW1vdmVCdXR0b24oSFRNTEZv
cm1Db250cm9sRWxlbWVudCogZWxlbWVudCkKICAgICBpZiAoaXQgPT0gbV9uYW1lVG9DaGVja2Vk
UmFkaW9CdXR0b25NYXAtPmVuZCgpIHx8IGl0LT5zZWNvbmQgIT0gZWxlbWVudCkKICAgICAgICAg
cmV0dXJuOwogICAgIAotICAgIElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gZWxlbWVudC0+
dG9JbnB1dEVsZW1lbnQoKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBl
bGVtZW50LT50b0lucHV0RWxlbWVudCgpOwogICAgIEFTU0VSVF9VTlVTRUQoaW5wdXRFbGVtZW50
LCBpbnB1dEVsZW1lbnQpOwogICAgIEFTU0VSVChpbnB1dEVsZW1lbnQtPmlzQ2hlY2tlZCgpKTsK
ICAgICBBU1NFUlQoZWxlbWVudC0+aXNSYWRpb0J1dHRvbigpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9ET01BbGxJbk9uZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NQWxs
SW5PbmUuY3BwCmluZGV4IDU1Njc0ZGZlZTkxMzZiMzBiMWI3NTk0YTIwZGU4ZjI0YWE5OTA4MDUu
LmYyOTQ5YjE3NWI2NTYwMzA2OTdmMzA4MmE5Y2Y1MjVjY2VlYWU3ZTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9ET01BbGxJbk9uZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L0RPTUFsbEluT25lLmNwcApAQCAtNzYsNyArNzYsNiBAQAogI2luY2x1ZGUgIkV4Y2VwdGlvbkJh
c2UuY3BwIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuY3BwIgogI2luY2x1ZGUgIkljb25VUkwu
Y3BwIgotI2luY2x1ZGUgIklucHV0RWxlbWVudC5jcHAiCiAjaW5jbHVkZSAiS2V5Ym9hcmRFdmVu
dC5jcHAiCiAjaW5jbHVkZSAiTWVzc2FnZUNoYW5uZWwuY3BwIgogI2luY2x1ZGUgIk1lc3NhZ2VF
dmVudC5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBiYmRmMmY0YjVmOTE3NWY3MzI4MTVjMjU3MTY1Mjc0NzA4MTA5ZDAwLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9JbnB1dEVsZW1lbnQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDE0ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJJbnB1dEVsZW1lbnQuaCIKLQotI2luY2x1ZGUgIkJlZm9yZVRleHRJ
bnNlcnRlZEV2ZW50LmgiCi0KLSNpZiBFTkFCTEUoV0NTUykKLSNpbmNsdWRlICJDU1NQcm9wZXJ0
eU5hbWVzLmgiCi0jaW5jbHVkZSAiQ1NTUnVsZS5oIgotI2luY2x1ZGUgIkNTU1J1bGVMaXN0Lmgi
Ci0jaW5jbHVkZSAiQ1NTU3R5bGVSdWxlLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5o
IgotI2VuZGlmCi0KLSNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJDaHJvbWUuaCIK
LSNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1
ZGUgIkV2ZW50LmgiCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkZyYW1lLmgi
Ci0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZS5oIgotI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJUZXh0SXRl
cmF0b3IuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBGSVhNRTogQWNjb3JkaW5nIHRv
IEhUTUw0LCB0aGUgbGVuZ3RoIGF0dHJpYnV0ZSdzIHZhbHVlIGNhbiBiZSBhcmJpdHJhcmlseQot
Ly8gbGFyZ2UuIEhvd2V2ZXIsIGR1ZSB0byBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQ1MzYgdGhpbmdzCi0vLyBnZXQgcmF0aGVyIHNsdWdnaXNoIHdoZW4gYSB0ZXh0
IGZpZWxkIGhhcyBhIGxhcmdlciBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGFuCi0vLyB0aGlzLCBl
dmVuIHdoZW4ganVzdCBjbGlja2luZyBpbiB0aGUgdGV4dCBmaWVsZC4KLWNvbnN0IGludCBJbnB1
dEVsZW1lbnQ6OnNfbWF4aW11bUxlbmd0aCA9IDUyNDI4ODsKLWNvbnN0IGludCBJbnB1dEVsZW1l
bnQ6OnNfZGVmYXVsdFNpemUgPSAyMDsKLQotdm9pZCBJbnB1dEVsZW1lbnQ6OmRpc3BhdGNoRm9j
dXNFdmVudChJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCwgRWxlbWVudCogZWxlbWVudCkKLXsK
LSAgICBpZiAoIWlucHV0RWxlbWVudC0+aXNUZXh0RmllbGQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZWxlbWVudC0+ZG9jdW1lbnQoKTsKLSAgICBpZiAo
aW5wdXRFbGVtZW50LT5pc1Bhc3N3b3JkRmllbGQoKSAmJiBkb2N1bWVudC0+ZnJhbWUoKSkKLSAg
ICAgICAgZG9jdW1lbnQtPnNldFVzZVNlY3VyZUtleWJvYXJkRW50cnlXaGVuQWN0aXZlKHRydWUp
OwotfQotCi12b2lkIElucHV0RWxlbWVudDo6ZGlzcGF0Y2hCbHVyRXZlbnQoSW5wdXRFbGVtZW50
KiBpbnB1dEVsZW1lbnQsIEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgaWYgKCFpbnB1dEVsZW1l
bnQtPmlzVGV4dEZpZWxkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIERvY3VtZW50KiBkb2N1
bWVudCA9IGVsZW1lbnQtPmRvY3VtZW50KCk7Ci0gICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQt
PmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGlu
cHV0RWxlbWVudC0+aXNQYXNzd29yZEZpZWxkKCkpCi0gICAgICAgIGRvY3VtZW50LT5zZXRVc2VT
ZWN1cmVLZXlib2FyZEVudHJ5V2hlbkFjdGl2ZShmYWxzZSk7Ci0KLSAgICBmcmFtZS0+ZWRpdG9y
KCktPnRleHRGaWVsZERpZEVuZEVkaXRpbmcoZWxlbWVudCk7Ci19Ci0KLXZvaWQgSW5wdXRFbGVt
ZW50Ojp1cGRhdGVGb2N1c0FwcGVhcmFuY2UoSW5wdXRFbGVtZW50RGF0YSYgZGF0YSwgSW5wdXRF
bGVtZW50KiBpbnB1dEVsZW1lbnQsIEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgcmVzdG9yZVByZXZp
b3VzU2VsZWN0aW9uKQotewotICAgIEFTU0VSVChpbnB1dEVsZW1lbnQtPmlzVGV4dEZpZWxkKCkp
OwotCi0gICAgaWYgKCFyZXN0b3JlUHJldmlvdXNTZWxlY3Rpb24gfHwgZGF0YS5jYWNoZWRTZWxl
Y3Rpb25TdGFydCgpID09IC0xKQotICAgICAgICBpbnB1dEVsZW1lbnQtPnNlbGVjdCgpOwotICAg
IGVsc2UKLSAgICAgICAgLy8gUmVzdG9yZSB0aGUgY2FjaGVkIHNlbGVjdGlvbi4KLSAgICAgICAg
dXBkYXRlU2VsZWN0aW9uUmFuZ2UoaW5wdXRFbGVtZW50LCBlbGVtZW50LCBkYXRhLmNhY2hlZFNl
bGVjdGlvblN0YXJ0KCksIGRhdGEuY2FjaGVkU2VsZWN0aW9uRW5kKCkpOwotCi0gICAgRG9jdW1l
bnQqIGRvY3VtZW50ID0gZWxlbWVudC0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoZG9jdW1lbnQgJiYg
ZG9jdW1lbnQtPmZyYW1lKCkpCi0gICAgICAgIGRvY3VtZW50LT5mcmFtZSgpLT5zZWxlY3Rpb24o
KS0+cmV2ZWFsU2VsZWN0aW9uKCk7Ci19Ci0KLXZvaWQgSW5wdXRFbGVtZW50Ojp1cGRhdGVTZWxl
Y3Rpb25SYW5nZShJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCwgRWxlbWVudCogZWxlbWVudCwg
aW50IHN0YXJ0LCBpbnQgZW5kKQotewotICAgIGlmICghaW5wdXRFbGVtZW50LT5pc1RleHRGaWVs
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzZXRTZWxlY3Rpb25SYW5nZShlbGVtZW50LCBz
dGFydCwgZW5kKTsKLX0KLQotdm9pZCBJbnB1dEVsZW1lbnQ6OmFib3V0VG9VbmxvYWQoSW5wdXRF
bGVtZW50KiBpbnB1dEVsZW1lbnQsIEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgaWYgKCFpbnB1
dEVsZW1lbnQtPmlzVGV4dEZpZWxkKCkgfHwgIWVsZW1lbnQtPmZvY3VzZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZWxlbWVudC0+ZG9jdW1lbnQoKTsK
LSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBmcmFtZS0+ZWRpdG9yKCktPnRleHRGaWVsZERpZEVuZEVk
aXRpbmcoZWxlbWVudCk7Ci19Ci0KLXZvaWQgSW5wdXRFbGVtZW50OjpzZXRWYWx1ZUZyb21SZW5k
ZXJlcihJbnB1dEVsZW1lbnREYXRhJiBkYXRhLCBJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCwg
RWxlbWVudCogZWxlbWVudCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICAvLyBSZW5kZXJl
ciBhbmQgb3VyIGV2ZW50IGhhbmRsZXIgYXJlIHJlc3BvbnNpYmxlIGZvciBzYW5pdGl6aW5nIHZh
bHVlcy4KLSAgICBBU1NFUlRfVU5VU0VEKGlucHV0RWxlbWVudCwgdmFsdWUgPT0gaW5wdXRFbGVt
ZW50LT5zYW5pdGl6ZVZhbHVlKHZhbHVlKSB8fCBpbnB1dEVsZW1lbnQtPnNhbml0aXplVmFsdWUo
dmFsdWUpLmlzRW1wdHkoKSk7Ci0KLSAgICAvLyBXb3JrYXJvdW5kIGZvciBidWcgd2hlcmUgdHJh
aWxpbmcgXG4gaXMgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdCBvZiB0ZXh0Q29udGVudC4KLSAgICAv
LyBUaGUgYXNzZXJ0IG1hY3JvIGFib3ZlIG1heSBhbHNvIGJlIHNpbXBsaWZpZWQgdG86ICB2YWx1
ZSA9PSBjb25zdHJhaW5WYWx1ZSh2YWx1ZSkKLSAgICAvLyBodHRwOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD05NjYxCi0gICAgaWYgKHZhbHVlID09ICJcbiIpCi0gICAgICAgIGRh
dGEuc2V0VmFsdWUoIiIpOwotICAgIGVsc2UKLSAgICAgICAgZGF0YS5zZXRWYWx1ZSh2YWx1ZSk7
Ci0KLSAgICBlbGVtZW50LT5zZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKHRydWUp
OwotCi0gICAgLy8gSW5wdXQgZXZlbnQgaXMgZmlyZWQgYnkgdGhlIE5vZGU6OmRlZmF1bHRFdmVu
dEhhbmRsZXIgZm9yIGVkaXRhYmxlIGNvbnRyb2xzLgotICAgIGlmICghaW5wdXRFbGVtZW50LT5p
c1RleHRGaWVsZCgpKQotICAgICAgICBlbGVtZW50LT5kaXNwYXRjaElucHV0RXZlbnQoKTsKLSAg
ICBub3RpZnlGb3JtU3RhdGVDaGFuZ2VkKGVsZW1lbnQpOwotfQotCi1zdGF0aWMgU3RyaW5nIHJl
cGxhY2VFT0xBbmRMaW1pdExlbmd0aChjb25zdCBJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCwg
Y29uc3QgU3RyaW5nJiBwcm9wb3NlZFZhbHVlLCBpbnQgbWF4TGVuZ3RoKQotewotICAgIGlmICgh
aW5wdXRFbGVtZW50LT5pc1RleHRGaWVsZCgpKQotICAgICAgICByZXR1cm4gcHJvcG9zZWRWYWx1
ZTsKLQotICAgIFN0cmluZyBzdHJpbmcgPSBwcm9wb3NlZFZhbHVlOwotICAgIHN0cmluZy5yZXBs
YWNlKCJcclxuIiwgIiAiKTsKLSAgICBzdHJpbmcucmVwbGFjZSgnXHInLCAnICcpOwotICAgIHN0
cmluZy5yZXBsYWNlKCdcbicsICcgJyk7Ci0KLSAgICB1bnNpZ25lZCBuZXdMZW5ndGggPSBudW1D
aGFyYWN0ZXJzSW5HcmFwaGVtZUNsdXN0ZXJzKHN0cmluZywgbWF4TGVuZ3RoKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbmV3TGVuZ3RoOyArK2kpIHsKLSAgICAgICAgY29uc3QgVUNo
YXIgY3VycmVudCA9IHN0cmluZ1tpXTsKLSAgICAgICAgaWYgKGN1cnJlbnQgPCAnICcgJiYgY3Vy
cmVudCAhPSAnXHQnKSB7Ci0gICAgICAgICAgICBuZXdMZW5ndGggPSBpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHN0cmluZy5sZWZ0KG5ld0xlbmd0
aCk7Ci19Ci0KLVN0cmluZyBJbnB1dEVsZW1lbnQ6OnNhbml0aXplVmFsdWVGb3JUZXh0RmllbGQo
Y29uc3QgSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQsIGNvbnN0IFN0cmluZyYgcHJvcG9zZWRW
YWx1ZSkKLXsKLSNpZiBFTkFCTEUoV0NTUykKLSAgICBJbnB1dEVsZW1lbnREYXRhIGRhdGEgPSBj
b25zdF9jYXN0PElucHV0RWxlbWVudCo+KGlucHV0RWxlbWVudCktPmRhdGEoKTsKLSAgICBpZiAo
IWlzQ29uZm9ybVRvSW5wdXRNYXNrKGRhdGEsIHByb3Bvc2VkVmFsdWUpKSB7Ci0gICAgICAgIGlm
IChpc0NvbmZvcm1Ub0lucHV0TWFzayhkYXRhLCBkYXRhLnZhbHVlKCkpKQotICAgICAgICAgICAg
cmV0dXJuIGRhdGEudmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIH0KLSNl
bmRpZgotICAgIHJldHVybiByZXBsYWNlRU9MQW5kTGltaXRMZW5ndGgoaW5wdXRFbGVtZW50LCBw
cm9wb3NlZFZhbHVlLCBzX21heGltdW1MZW5ndGgpOwotfQotCi1TdHJpbmcgSW5wdXRFbGVtZW50
OjpzYW5pdGl6ZVVzZXJJbnB1dFZhbHVlKGNvbnN0IElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50
LCBjb25zdCBTdHJpbmcmIHByb3Bvc2VkVmFsdWUsIGludCBtYXhMZW5ndGgpCi17Ci0gICAgcmV0
dXJuIHJlcGxhY2VFT0xBbmRMaW1pdExlbmd0aChpbnB1dEVsZW1lbnQsIHByb3Bvc2VkVmFsdWUs
IG1heExlbmd0aCk7Ci19Ci0KLXZvaWQgSW5wdXRFbGVtZW50OjpoYW5kbGVCZWZvcmVUZXh0SW5z
ZXJ0ZWRFdmVudChJbnB1dEVsZW1lbnREYXRhJiBkYXRhLCBJbnB1dEVsZW1lbnQqIGlucHV0RWxl
bWVudCwgRWxlbWVudCogZWxlbWVudCwgRXZlbnQqIGV2ZW50KQotewotICAgIEFTU0VSVChldmVu
dC0+aXNCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCgpKTsKLSAgICAvLyBNYWtlIHN1cmUgdGhhdCB0
aGUgdGV4dCB0byBiZSBpbnNlcnRlZCB3aWxsIG5vdCB2aW9sYXRlIHRoZSBtYXhMZW5ndGguCi0K
LSAgICAvLyBXZSB1c2UgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp0ZXh0KCkgaW5zdGVh
ZCBvZiBJbnB1dEVsZW1lbnQ6OnZhbHVlKCkKLSAgICAvLyBiZWNhdXNlIHRoZXkgY2FuIGJlIG1p
c21hdGNoZWQgYnkgc2FuaXRpemVWYWx1ZSgpIGluCi0gICAgLy8gUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjpzdWJ0cmVlSGFzQ2hhbmdlZCgpIGluIHNvbWUgY2FzZXMuCi0gICAgdW5zaWdu
ZWQgb2xkTGVuZ3RoID0gbnVtR3JhcGhlbWVDbHVzdGVycyh0b1JlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZShlbGVtZW50LT5yZW5kZXJlcigpKS0+dGV4dCgpKTsKLQotICAgIC8vIHNlbGVjdGlv
bkxlbmd0aCByZXByZXNlbnRzIHRoZSBzZWxlY3Rpb24gbGVuZ3RoIG9mIHRoaXMgdGV4dCBmaWVs
ZCB0byBiZQotICAgIC8vIHJlbW92ZWQgYnkgdGhpcyBpbnNlcnRpb24uCi0gICAgLy8gSWYgdGhl
IHRleHQgZmllbGQgaGFzIG5vIGZvY3VzLCB3ZSBkb24ndCBuZWVkIHRvIHRha2UgYWNjb3VudCBv
ZiB0aGUKLSAgICAvLyBzZWxlY3Rpb24gbGVuZ3RoLiBUaGUgc2VsZWN0aW9uIGlzIHRoZSBzb3Vy
Y2Ugb2YgdGV4dCBkcmFnLWFuZC1kcm9wIGluCi0gICAgLy8gdGhhdCBjYXNlLCBhbmQgbm90aGlu
ZyBpbiB0aGUgdGV4dCBmaWVsZCB3aWxsIGJlIHJlbW92ZWQuCi0gICAgdW5zaWduZWQgc2VsZWN0
aW9uTGVuZ3RoID0gZWxlbWVudC0+Zm9jdXNlZCgpID8gbnVtR3JhcGhlbWVDbHVzdGVycyhwbGFp
blRleHQoZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNlbGVjdGlv
bigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpKSA6IDA7Ci0gICAgQVNTRVJUKG9sZExlbmd0
aCA+PSBzZWxlY3Rpb25MZW5ndGgpOwotCi0gICAgLy8gU2VsZWN0ZWQgY2hhcmFjdGVycyB3aWxs
IGJlIHJlbW92ZWQgYnkgdGhlIG5leHQgdGV4dCBldmVudC4KLSAgICB1bnNpZ25lZCBiYXNlTGVu
Z3RoID0gb2xkTGVuZ3RoIC0gc2VsZWN0aW9uTGVuZ3RoOwotICAgIHVuc2lnbmVkIG1heExlbmd0
aCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbnB1dEVsZW1lbnQtPnN1cHBvcnRzTWF4TGVuZ3Ro
KCkgPyBkYXRhLm1heExlbmd0aCgpIDogc19tYXhpbXVtTGVuZ3RoKTsgLy8gbWF4TGVuZ3RoKCkg
Y2FuIG5ldmVyIGJlIG5lZ2F0aXZlLgotICAgIHVuc2lnbmVkIGFwcGVuZGFibGVMZW5ndGggPSBt
YXhMZW5ndGggPiBiYXNlTGVuZ3RoID8gbWF4TGVuZ3RoIC0gYmFzZUxlbmd0aCA6IDA7Ci0KLSAg
ICAvLyBUcnVuY2F0ZSB0aGUgaW5zZXJ0ZWQgdGV4dCB0byBhdm9pZCB2aW9sYXRpbmcgdGhlIG1h
eExlbmd0aCBhbmQgb3RoZXIgY29uc3RyYWludHMuCi0gICAgQmVmb3JlVGV4dEluc2VydGVkRXZl
bnQqIHRleHRFdmVudCA9IHN0YXRpY19jYXN0PEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50Kj4oZXZl
bnQpOwotI2lmIEVOQUJMRShXQ1NTKQotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBlbGVtZW50
LT5kb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKTsKLSAgICBTdHJpbmcgY2FuZGlkYXRlU3RyaW5nID0gdG9SZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUoZWxlbWVudC0+cmVuZGVyZXIoKSktPnRleHQoKTsKLSAgICBpZiAoc2Vs
ZWN0aW9uTGVuZ3RoKQotICAgICAgICBjYW5kaWRhdGVTdHJpbmcucmVwbGFjZShyYW5nZS0+c3Rh
cnRPZmZzZXQoKSwgcmFuZ2UtPmVuZE9mZnNldCgpLCB0ZXh0RXZlbnQtPnRleHQoKSk7Ci0gICAg
ZWxzZQotICAgICAgICBjYW5kaWRhdGVTdHJpbmcuaW5zZXJ0KHRleHRFdmVudC0+dGV4dCgpLCBy
YW5nZS0+c3RhcnRPZmZzZXQoKSk7Ci0gICAgaWYgKCFpc0NvbmZvcm1Ub0lucHV0TWFzayhpbnB1
dEVsZW1lbnQtPmRhdGEoKSwgY2FuZGlkYXRlU3RyaW5nKSkgewotICAgICAgICB0ZXh0RXZlbnQt
PnNldFRleHQoIiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0gICAgdGV4dEV2
ZW50LT5zZXRUZXh0KHNhbml0aXplVXNlcklucHV0VmFsdWUoaW5wdXRFbGVtZW50LCB0ZXh0RXZl
bnQtPnRleHQoKSwgYXBwZW5kYWJsZUxlbmd0aCkpOwotfQotCi12b2lkIElucHV0RWxlbWVudDo6
cGFyc2VTaXplQXR0cmlidXRlKElucHV0RWxlbWVudERhdGEmIGRhdGEsIEVsZW1lbnQqIGVsZW1l
bnQsIEF0dHJpYnV0ZSogYXR0cmlidXRlKQotewotICAgIGRhdGEuc2V0U2l6ZShhdHRyaWJ1dGUt
PmlzTnVsbCgpID8gSW5wdXRFbGVtZW50OjpzX2RlZmF1bHRTaXplIDogYXR0cmlidXRlLT52YWx1
ZSgpLnRvSW50KCkpOwotCi0gICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBlbGVtZW50
LT5yZW5kZXJlcigpKQotICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lk
dGhzUmVjYWxjKCk7Ci19Ci0KLXZvaWQgSW5wdXRFbGVtZW50OjpwYXJzZU1heExlbmd0aEF0dHJp
YnV0ZShJbnB1dEVsZW1lbnREYXRhJiBkYXRhLCBJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCwg
RWxlbWVudCogZWxlbWVudCwgQXR0cmlidXRlKiBhdHRyaWJ1dGUpCi17Ci0gICAgaW50IG1heExl
bmd0aCA9IGF0dHJpYnV0ZS0+aXNOdWxsKCkgPyBJbnB1dEVsZW1lbnQ6OnNfbWF4aW11bUxlbmd0
aCA6IGF0dHJpYnV0ZS0+dmFsdWUoKS50b0ludCgpOwotICAgIGlmIChtYXhMZW5ndGggPD0gMCB8
fCBtYXhMZW5ndGggPiBJbnB1dEVsZW1lbnQ6OnNfbWF4aW11bUxlbmd0aCkKLSAgICAgICAgbWF4
TGVuZ3RoID0gSW5wdXRFbGVtZW50OjpzX21heGltdW1MZW5ndGg7Ci0KLSAgICBpbnQgb2xkTWF4
TGVuZ3RoID0gZGF0YS5tYXhMZW5ndGgoKTsKLSAgICBkYXRhLnNldE1heExlbmd0aChtYXhMZW5n
dGgpOwotCi0gICAgaWYgKG9sZE1heExlbmd0aCAhPSBtYXhMZW5ndGgpCi0gICAgICAgIHVwZGF0
ZVZhbHVlSWZOZWVkZWQoZGF0YSwgaW5wdXRFbGVtZW50KTsKLQotICAgIGVsZW1lbnQtPnNldE5l
ZWRzU3R5bGVSZWNhbGMoKTsKLX0KLQotdm9pZCBJbnB1dEVsZW1lbnQ6OnVwZGF0ZVZhbHVlSWZO
ZWVkZWQoSW5wdXRFbGVtZW50RGF0YSYgZGF0YSwgSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQp
Ci17Ci0gICAgU3RyaW5nIG9sZFZhbHVlID0gZGF0YS52YWx1ZSgpOwotICAgIFN0cmluZyBuZXdW
YWx1ZSA9IGlucHV0RWxlbWVudC0+c2FuaXRpemVWYWx1ZShvbGRWYWx1ZSk7Ci0gICAgaWYgKG5l
d1ZhbHVlICE9IG9sZFZhbHVlKQotICAgICAgICBpbnB1dEVsZW1lbnQtPnNldFZhbHVlKG5ld1Zh
bHVlKTsKLX0KLQotdm9pZCBJbnB1dEVsZW1lbnQ6Om5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQoRWxl
bWVudCogZWxlbWVudCkKLXsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBlbGVtZW50LT5kb2N1
bWVudCgpOwotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwotICAgIGlmICgh
ZnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUtPnBh
Z2UoKSkKLSAgICAgICAgcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5mb3JtU3RhdGVEaWRDaGFu
Z2UoZWxlbWVudCk7Ci19Ci0KLS8vIElucHV0RWxlbWVudERhdGEKLUlucHV0RWxlbWVudERhdGE6
OklucHV0RWxlbWVudERhdGEoKQotICAgIDogbV9zaXplKElucHV0RWxlbWVudDo6c19kZWZhdWx0
U2l6ZSkKLSAgICAsIG1fbWF4TGVuZ3RoKElucHV0RWxlbWVudDo6c19tYXhpbXVtTGVuZ3RoKQot
ICAgICwgbV9jYWNoZWRTZWxlY3Rpb25TdGFydCgtMSkKLSAgICAsIG1fY2FjaGVkU2VsZWN0aW9u
RW5kKC0xKQotI2lmIEVOQUJMRShXQ1NTKQotICAgICwgbV9pbnB1dEZvcm1hdE1hc2soIiptIikK
LSAgICAsIG1fbWF4SW5wdXRDaGFyc0FsbG93ZWQoSW5wdXRFbGVtZW50OjpzX21heGltdW1MZW5n
dGgpCi0jZW5kaWYKLXsKLX0KLQotSW5wdXRFbGVtZW50RGF0YTo6fklucHV0RWxlbWVudERhdGEo
KQotewotfQotCi1jb25zdCBBdG9taWNTdHJpbmcmIElucHV0RWxlbWVudERhdGE6Om5hbWUoKSBj
b25zdAotewotICAgIHJldHVybiBtX25hbWUuaXNOdWxsKCkgPyBlbXB0eUF0b20gOiBtX25hbWU7
Ci19Ci0KLSNpZiBFTkFCTEUoV0NTUykKLXN0YXRpYyBpbmxpbmUgY29uc3QgQXRvbWljU3RyaW5n
JiBmb3JtYXRDb2RlcygpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcs
IGNvZGVzLCAoIkFhTm5YeE1tIikpOwotICAgIHJldHVybiBjb2RlczsKLX0KLQotc3RhdGljIHVu
c2lnbmVkIGN1cnNvclBvc2l0aW9uVG9NYXNrSW5kZXgoY29uc3QgU3RyaW5nJiBpbnB1dEZvcm1h
dE1hc2ssIHVuc2lnbmVkIGN1cnNvclBvc2l0aW9uKQotewotICAgIFVDaGFyIG1hc2s7Ci0gICAg
aW50IGluZGV4ID0gLTE7Ci0gICAgZG8gewotICAgICAgICBtYXNrID0gaW5wdXRGb3JtYXRNYXNr
WysraW5kZXhdOwotICAgICAgICBpZiAobWFzayA9PSAnXFwnKQotICAgICAgICAgICAgKytpbmRl
eDsKLSAgICAgICAgZWxzZSBpZiAobWFzayA9PSAnKicgfHwgKGlzQVNDSUlEaWdpdChtYXNrKSAm
JiBtYXNrICE9ICcwJykpIHsKLSAgICAgICAgICAgIGluZGV4ID0gaW5wdXRGb3JtYXRNYXNrLmxl
bmd0aCgpIC0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfSB3aGlsZSAo
Y3Vyc29yUG9zaXRpb24tLSk7Ci0KLSAgICByZXR1cm4gaW5kZXg7Ci19Ci0KLWJvb2wgSW5wdXRF
bGVtZW50Ojppc0NvbmZvcm1Ub0lucHV0TWFzayhjb25zdCBJbnB1dEVsZW1lbnREYXRhJiBkYXRh
LCBjb25zdCBTdHJpbmcmIGlucHV0Q2hhcnMpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGlucHV0Q2hhcnMubGVuZ3RoKCk7ICsraSkKLSAgICAgICAgaWYgKCFpc0NvbmZvcm1Ub0lu
cHV0TWFzayhkYXRhLCBpbnB1dENoYXJzW2ldLCBpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJbnB1dEVsZW1lbnQ6OmlzQ29uZm9ybVRv
SW5wdXRNYXNrKGNvbnN0IElucHV0RWxlbWVudERhdGEmIGRhdGEsIFVDaGFyIGluQ2hhciwgdW5z
aWduZWQgY3Vyc29yUG9zaXRpb24pCi17Ci0gICAgU3RyaW5nIGlucHV0Rm9ybWF0TWFzayA9IGRh
dGEuaW5wdXRGb3JtYXRNYXNrKCk7Ci0KLSAgICBpZiAoaW5wdXRGb3JtYXRNYXNrLmlzRW1wdHko
KSB8fCBpbnB1dEZvcm1hdE1hc2sgPT0gIipNIiB8fCBpbnB1dEZvcm1hdE1hc2sgPT0gIiptIikK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoY3Vyc29yUG9zaXRpb24gPj0gZGF0YS5t
YXhJbnB1dENoYXJzQWxsb3dlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB1bnNp
Z25lZCBtYXNrSW5kZXggPSBjdXJzb3JQb3NpdGlvblRvTWFza0luZGV4KGlucHV0Rm9ybWF0TWFz
aywgY3Vyc29yUG9zaXRpb24pOwotICAgIGJvb2wgb2sgPSB0cnVlOwotICAgIFVDaGFyIG1hc2sg
PSBpbnB1dEZvcm1hdE1hc2tbbWFza0luZGV4XTsKLSAgICAvLyBNYXRjaCB0aGUgaW5wdXRlZCBj
aGFyYWN0ZXIgd2l0aCBpbnB1dCBtYXNrCi0gICAgc3dpdGNoIChtYXNrKSB7Ci0gICAgY2FzZSAn
QSc6Ci0gICAgICAgIG9rID0gIWlzQVNDSUlEaWdpdChpbkNoYXIpICYmICFpc0FTQ0lJTG93ZXIo
aW5DaGFyKSAmJiBpc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgJ2EnOgotICAgICAgICBvayA9ICFpc0FTQ0lJRGlnaXQoaW5DaGFyKSAmJiAhaXNBU0NJ
SVVwcGVyKGluQ2hhcikgJiYgaXNBU0NJSVByaW50YWJsZShpbkNoYXIpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlICdOJzoKLSAgICAgICAgb2sgPSBpc0FTQ0lJRGlnaXQoaW5DaGFyKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSAnbic6Ci0gICAgICAgIG9rID0gIWlzQVNDSUlBbHBoYShp
bkNoYXIpICYmIGlzQVNDSUlQcmludGFibGUoaW5DaGFyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSAnWCc6Ci0gICAgICAgIG9rID0gIWlzQVNDSUlMb3dlcihpbkNoYXIpICYmIGlzQVNDSUlQ
cmludGFibGUoaW5DaGFyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAneCc6Ci0gICAgICAg
IG9rID0gIWlzQVNDSUlVcHBlcihpbkNoYXIpICYmIGlzQVNDSUlQcmludGFibGUoaW5DaGFyKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAnTSc6Ci0gICAgY2FzZSAnbSc6Ci0gICAgICAgIG9r
ID0gaXNBU0NJSVByaW50YWJsZShpbkNoYXIpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0
OgotICAgICAgICBvayA9IChtYXNrID09IGluQ2hhcik7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LQotICAgIHJldHVybiBvazsKLX0KLQotU3RyaW5nIElucHV0RWxlbWVudDo6dmFsaWRhdGVJbnB1
dE1hc2soSW5wdXRFbGVtZW50RGF0YSYgZGF0YSwgU3RyaW5nJiBpbnB1dE1hc2spCi17Ci0gICAg
aW5wdXRNYXNrLnJlcGxhY2UoIlxcXFwiLCAiXFwiKTsKLQotICAgIGJvb2wgaXNWYWxpZCA9IHRy
dWU7Ci0gICAgYm9vbCBoYXNXaWxkY2FyZCA9IGZhbHNlOwotICAgIHVuc2lnbmVkIGVzY2FwZUNo
YXJDb3VudCA9IDA7Ci0gICAgdW5zaWduZWQgbWFza0xlbmd0aCA9IGlucHV0TWFzay5sZW5ndGgo
KTsKLSAgICBVQ2hhciBmb3JtYXRDb2RlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
YXNrTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgZm9ybWF0Q29kZSA9IGlucHV0TWFza1tpXTsKLSAg
ICAgICAgaWYgKGZvcm1hdENvZGVzKCkuZmluZChmb3JtYXRDb2RlKSA9PSAtMSkgewotICAgICAg
ICAgICAgaWYgKGZvcm1hdENvZGUgPT0gJyonIHx8IChpc0FTQ0lJRGlnaXQoZm9ybWF0Q29kZSkg
JiYgZm9ybWF0Q29kZSAhPSAnMCcpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVmFsaWRhdGUgY29k
ZXMgd2hpY2ggZW5kcyB3aXRoICcqZicgb3IgJ25mJwotICAgICAgICAgICAgICAgIGZvcm1hdENv
ZGUgPSBpbnB1dE1hc2tbKytpXTsKLSAgICAgICAgICAgICAgICBpZiAoKGkgKyAxICE9IG1hc2tM
ZW5ndGgpIHx8IGZvcm1hdENvZGVzKCkuZmluZChmb3JtYXRDb2RlKSA9PSAtMSkgewotICAgICAg
ICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBoYXNXaWxkY2FyZCA9IHRydWU7
Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdENvZGUgPT0gJ1xcJykgewotICAgICAgICAg
ICAgICAgIC8vIHNraXAgb3ZlciB0aGUgbmV4dCBtYXNrIGNoYXJhY3RlcgotICAgICAgICAgICAg
ICAgICsraTsKLSAgICAgICAgICAgICAgICArK2VzY2FwZUNoYXJDb3VudDsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFp
c1ZhbGlkKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgLy8gY2FsY3VsYXRlIHRoZSBu
dW1iZXIgb2YgY2hhcmFjdGVycyBhbGxvd2VkIHRvIGJlIGVudGVyZWQgYnkgaW5wdXQgbWFzawot
ICAgIHVuc2lnbmVkIGFsbG93ZWRMZW5ndGggPSBtYXNrTGVuZ3RoOwotICAgIGlmIChlc2NhcGVD
aGFyQ291bnQpCi0gICAgICAgIGFsbG93ZWRMZW5ndGggLT0gZXNjYXBlQ2hhckNvdW50OwotCi0g
ICAgaWYgKGhhc1dpbGRjYXJkKSB7Ci0gICAgICAgIGZvcm1hdENvZGUgPSBpbnB1dE1hc2tbbWFz
a0xlbmd0aCAtIDJdOwotICAgICAgICBpZiAoZm9ybWF0Q29kZSA9PSAnKicpCi0gICAgICAgICAg
ICBhbGxvd2VkTGVuZ3RoID0gZGF0YS5tYXhJbnB1dENoYXJzQWxsb3dlZCgpOwotICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGxlZnRMZW4gPSBTdHJpbmcoJmZvcm1hdENvZGUp
LnRvSW50KCk7Ci0gICAgICAgICAgICBhbGxvd2VkTGVuZ3RoID0gbGVmdExlbiArIGFsbG93ZWRM
ZW5ndGggLSAyOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGFsbG93ZWRMZW5ndGggPCBk
YXRhLm1heElucHV0Q2hhcnNBbGxvd2VkKCkpCi0gICAgICAgIGRhdGEuc2V0TWF4SW5wdXRDaGFy
c0FsbG93ZWQoYWxsb3dlZExlbmd0aCk7Ci0KLSAgICByZXR1cm4gaW5wdXRNYXNrOwotfQotCi0j
ZW5kaWYKLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5o
IGIvU291cmNlL1dlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA1YTRlOTVkMTlmYjY0Mzg2NGM2NDYxMmJlMTQ3ZmRkMTI5NzhhZjQ5Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9JbnB1dEVsZW1lbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2NiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIElucHV0RWxlbWVu
dF9oCi0jZGVmaW5lIElucHV0RWxlbWVudF9oCi0KLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5o
IgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIEF0dHJpYnV0ZTsKLWNsYXNzIERvY3VtZW50OwotY2xhc3MgRWxlbWVudDsK
LWNsYXNzIEV2ZW50OwotY2xhc3MgSW5wdXRFbGVtZW50RGF0YTsKLQotY2xhc3MgSW5wdXRFbGVt
ZW50IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5JbnB1dEVsZW1lbnQoKSB7IH0KLQotICAgIHZp
cnR1YWwgYm9vbCBpc0F1dG9maWxsZWQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlz
Q2hlY2tlZCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNJbmRldGVybWluYXRlKCkg
Y29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc0lucHV0VHlwZUhpZGRlbigpIGNvbnN0ID0g
MDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNQYXNzd29yZEZpZWxkKCkgY29uc3QgPSAwOwotICAgIHZp
cnR1YWwgYm9vbCBpc1NlYXJjaEZpZWxkKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBp
c1RleHRGaWVsZCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNSYWRpb0J1dHRvbigp
IGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNDaGVja2JveCgpIGNvbnN0ID0gMDsKLSAg
ICB2aXJ0dWFsIGJvb2wgaXNSYW5nZUNvbnRyb2woKSBjb25zdCA9IDA7Ci0gICAgCi0gICAgdmly
dHVhbCBib29sIHN1cHBvcnRzTWF4TGVuZ3RoKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9v
bCBpc1N0ZXBwYWJsZSgpIGNvbnN0ID0gMDsKLSNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQotICAg
IHZpcnR1YWwgYm9vbCBpc1NwZWVjaEVuYWJsZWQoKSBjb25zdCA9IDA7Ci0jZW5kaWYgICAgCi0K
LSAgICB2aXJ0dWFsIGJvb2wgc2VhcmNoRXZlbnRzU2hvdWxkQmVEaXNwYXRjaGVkKCkgY29uc3Qg
PSAwOwotCi0gICAgdmlydHVhbCBpbnQgc2l6ZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGNv
bnN0IFN0cmluZyYgc3VnZ2VzdGVkVmFsdWUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBTdHJp
bmcgdmFsdWUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldFZhbHVlKGNvbnN0IFN0
cmluZyYsIGJvb2wgc2VuZENoYW5nZUV2ZW50ID0gZmFsc2UpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0VmFsdWVGb3JVc2VyKGNvbnN0IFN0cmluZyYpID0gMDsKLSAgICAvLyBUaGUgdmFsdWUg
d2hpY2ggaXMgZHJhd24gYnkgYSByZW5kZXJlci4KLSAgICB2aXJ0dWFsIFN0cmluZyB2aXNpYmxl
VmFsdWUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcgY29udmVydEZyb21WaXNpYmxl
VmFsdWUoY29uc3QgU3RyaW5nJikgY29uc3QgPSAwOwotCi0gICAgLy8gUmV0dXJucyB0cnVlIGlm
IHRoZSBzcGVjaWZpZWQgc3RyaW5nIGNhbiBiZSBzZXQgYXMgdGhlIHZhbHVlIG9mIElucHV0RWxl
bWVudC4KLSAgICB2aXJ0dWFsIGJvb2wgaXNBY2NlcHRhYmxlVmFsdWUoY29uc3QgU3RyaW5nJikg
Y29uc3QgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIHNhbml0aXplVmFsdWUoY29uc3QgU3RyaW5n
JikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUZyb21SZW5kZXJlcihjb25z
dCBTdHJpbmcmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY2FjaGVTZWxlY3Rpb24oaW50IHN0
YXJ0LCBpbnQgZW5kKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNlbGVjdCgpID0gMDsKLSAgCi0j
aWYgRU5BQkxFKFdDU1MpCi0gICAgdmlydHVhbCBJbnB1dEVsZW1lbnREYXRhIGRhdGEoKSBjb25z
dCA9IDA7IAotI2VuZGlmCi0KLSAgICBzdGF0aWMgY29uc3QgaW50IHNfbWF4aW11bUxlbmd0aDsK
LSAgICBzdGF0aWMgY29uc3QgaW50IHNfZGVmYXVsdFNpemU7Ci0KLSAgICAvLyBSZXBsYWNlcyBD
UnMgYW5kIExGcywgc2hyaW5rcyB0aGUgdmFsdWUgZm9yIHNfbWF4aW11bUxlbmd0aC4KLSAgICAv
LyBUaGlzIHNob3VsZCBiZSBhcHBsaWVkIHRvIHZhbHVlcyBmcm9tIHRoZSBIVE1MIHZhbHVlIGF0
dHJpYnV0ZSBhbmQgdGhlIERPTSB2YWx1ZSBwcm9wZXJ0eS4KLSAgICAvLyBUaGlzIGZ1bmN0aW9u
IHNob3VsZCBiZSBjYWxsZWQgb25seSBieSBzYW5pdGl6ZVZhbHVlKCkgaW1wbGVtZW50YXRpb25z
LgotICAgIC8vIFB1YmxpYyBzbyBpdCBjYW4gYmUgY2FsbGVkIGJ5IElucHV0VHlwZS4KLSAgICBz
dGF0aWMgU3RyaW5nIHNhbml0aXplVmFsdWVGb3JUZXh0RmllbGQoY29uc3QgSW5wdXRFbGVtZW50
KiwgY29uc3QgU3RyaW5nJik7Ci0KLXByb3RlY3RlZDoKLSAgICBzdGF0aWMgdm9pZCBkaXNwYXRj
aEZvY3VzRXZlbnQoSW5wdXRFbGVtZW50KiwgRWxlbWVudCopOwotICAgIHN0YXRpYyB2b2lkIGRp
c3BhdGNoQmx1ckV2ZW50KElucHV0RWxlbWVudCosIEVsZW1lbnQqKTsKLSAgICBzdGF0aWMgdm9p
ZCB1cGRhdGVGb2N1c0FwcGVhcmFuY2UoSW5wdXRFbGVtZW50RGF0YSYsIElucHV0RWxlbWVudCos
IEVsZW1lbnQqLCBib29sIHJlc3RvcmVQcmV2aW91c1NlbGVjdGlvbik7Ci0gICAgc3RhdGljIHZv
aWQgdXBkYXRlU2VsZWN0aW9uUmFuZ2UoSW5wdXRFbGVtZW50KiwgRWxlbWVudCosIGludCBzdGFy
dCwgaW50IGVuZCk7Ci0gICAgc3RhdGljIHZvaWQgYWJvdXRUb1VubG9hZChJbnB1dEVsZW1lbnQq
LCBFbGVtZW50Kik7Ci0gICAgc3RhdGljIHZvaWQgc2V0VmFsdWVGcm9tUmVuZGVyZXIoSW5wdXRF
bGVtZW50RGF0YSYsIElucHV0RWxlbWVudCosIEVsZW1lbnQqLCBjb25zdCBTdHJpbmcmKTsKLSAg
ICAvLyBSZXBsYWNlcyBDUnMgYW5kIExGcywgc2hyaW5rcyB0aGUgdmFsdWUgZm9yIHRoZSBzcGVj
aWZpZWQgbWF4aW11bSBsZW5ndGguCi0gICAgLy8gVGhpcyBzaG91bGQgYmUgYXBwbGllZCB0byB2
YWx1ZXMgc3BlY2lmaWVkIGJ5IHVzZXJzLgotICAgIC8vIFRoZSBpbnB1dCBzdHJpbmcgbWF5IGJl
IGEgZnJhZ21lbnQgb2YgdGhlIHdob2xlIHZhbHVlLgotICAgIHN0YXRpYyBTdHJpbmcgc2FuaXRp
emVVc2VySW5wdXRWYWx1ZShjb25zdCBJbnB1dEVsZW1lbnQqLCBjb25zdCBTdHJpbmcmLCBpbnQp
OwotICAgIHN0YXRpYyB2b2lkIGhhbmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KElucHV0RWxl
bWVudERhdGEmLCBJbnB1dEVsZW1lbnQqLCBFbGVtZW50KiwgRXZlbnQqKTsKLSAgICBzdGF0aWMg
dm9pZCBwYXJzZVNpemVBdHRyaWJ1dGUoSW5wdXRFbGVtZW50RGF0YSYsIEVsZW1lbnQqLCBBdHRy
aWJ1dGUqKTsKLSAgICBzdGF0aWMgdm9pZCBwYXJzZU1heExlbmd0aEF0dHJpYnV0ZShJbnB1dEVs
ZW1lbnREYXRhJiwgSW5wdXRFbGVtZW50KiwgRWxlbWVudCosIEF0dHJpYnV0ZSopOwotICAgIHN0
YXRpYyB2b2lkIHVwZGF0ZVZhbHVlSWZOZWVkZWQoSW5wdXRFbGVtZW50RGF0YSYsIElucHV0RWxl
bWVudCopOwotICAgIHN0YXRpYyB2b2lkIG5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQoRWxlbWVudCop
OwotI2lmIEVOQUJMRShXQ1NTKQotICAgIHN0YXRpYyBib29sIGlzQ29uZm9ybVRvSW5wdXRNYXNr
KGNvbnN0IElucHV0RWxlbWVudERhdGEmLCBjb25zdCBTdHJpbmcmKTsKLSAgICBzdGF0aWMgYm9v
bCBpc0NvbmZvcm1Ub0lucHV0TWFzayhjb25zdCBJbnB1dEVsZW1lbnREYXRhJiwgVUNoYXIsIHVu
c2lnbmVkKTsKLSAgICBzdGF0aWMgU3RyaW5nIHZhbGlkYXRlSW5wdXRNYXNrKElucHV0RWxlbWVu
dERhdGEmLCBTdHJpbmcmKTsKLSNlbmRpZgotfTsKLQotLy8gSFRNTElucHV0RWxlbWVudCBob2xk
IHRoaXMgc3RydWN0IGFzIG1lbWJlciB2YXJpYWJsZQotLy8gYW5kIHBhc3MgaXQgdG8gdGhlIHN0
YXRpYyBoZWxwZXIgZnVuY3Rpb25zIGluIElucHV0RWxlbWVudAotY2xhc3MgSW5wdXRFbGVtZW50
RGF0YSB7Ci1wdWJsaWM6Ci0gICAgSW5wdXRFbGVtZW50RGF0YSgpOwotICAgIH5JbnB1dEVsZW1l
bnREYXRhKCk7Ci0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUoKSBjb25zdDsKLSAgICB2
b2lkIHNldE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkgeyBtX25hbWUgPSB2YWx1ZTsg
fQotCi0gICAgLy8gVGhlIG51bGwgU3RyaW5nIHJlcHJlc2VudHMgInVzZSB0aGUgZGVmYXVsdCB2
YWx1ZSwiIGFuZCB0aGUgZW1wdHkgU3RyaW5nCi0gICAgLy8gcmVwcmVzZW50cyB0aGUgZW1wdHkg
dmFsdWUuCi0gICAgU3RyaW5nIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQotICAg
IHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkgeyBtX3ZhbHVlID0gdmFsdWU7IH0K
LQotICAgIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3N1
Z2dlc3RlZFZhbHVlOyB9Ci0gICAgdm9pZCBzZXRTdWdnZXN0ZWRWYWx1ZShjb25zdCBTdHJpbmcm
IHZhbHVlKSB7IG1fc3VnZ2VzdGVkVmFsdWUgPSB2YWx1ZTsgfQotCi0gICAgaW50IHNpemUoKSBj
b25zdCB7IHJldHVybiBtX3NpemU7IH0KLSAgICB2b2lkIHNldFNpemUoaW50IHZhbHVlKSB7IG1f
c2l6ZSA9IHZhbHVlOyB9Ci0KLSAgICBpbnQgbWF4TGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9t
YXhMZW5ndGg7IH0KLSAgICB2b2lkIHNldE1heExlbmd0aChpbnQgdmFsdWUpIHsgbV9tYXhMZW5n
dGggPSB2YWx1ZTsgfQotCi0gICAgaW50IGNhY2hlZFNlbGVjdGlvblN0YXJ0KCkgY29uc3QgeyBy
ZXR1cm4gbV9jYWNoZWRTZWxlY3Rpb25TdGFydDsgfQotICAgIHZvaWQgc2V0Q2FjaGVkU2VsZWN0
aW9uU3RhcnQoaW50IHZhbHVlKSB7IG1fY2FjaGVkU2VsZWN0aW9uU3RhcnQgPSB2YWx1ZTsgfQot
Ci0gICAgaW50IGNhY2hlZFNlbGVjdGlvbkVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkU2Vs
ZWN0aW9uRW5kOyB9Ci0gICAgdm9pZCBzZXRDYWNoZWRTZWxlY3Rpb25FbmQoaW50IHZhbHVlKSB7
IG1fY2FjaGVkU2VsZWN0aW9uRW5kID0gdmFsdWU7IH0KLQotI2lmIEVOQUJMRShXQ1NTKQotICAg
IFN0cmluZyBpbnB1dEZvcm1hdE1hc2soKSBjb25zdCB7IHJldHVybiBtX2lucHV0Rm9ybWF0TWFz
azsgfQotICAgIHZvaWQgc2V0SW5wdXRGb3JtYXRNYXNrKGNvbnN0IFN0cmluZyYgbWFzaykgeyBt
X2lucHV0Rm9ybWF0TWFzayA9IG1hc2s7IH0KLSAKLSAgICB1bnNpZ25lZCBtYXhJbnB1dENoYXJz
QWxsb3dlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4SW5wdXRDaGFyc0FsbG93ZWQ7IH0KLSAgICB2
b2lkIHNldE1heElucHV0Q2hhcnNBbGxvd2VkKHVuc2lnbmVkIG1heExlbmd0aCkgeyBtX21heElu
cHV0Q2hhcnNBbGxvd2VkID0gbWF4TGVuZ3RoOyB9Ci0gIAotI2VuZGlmCi0KLXByaXZhdGU6Ci0g
ICAgQXRvbWljU3RyaW5nIG1fbmFtZTsKLSAgICBTdHJpbmcgbV92YWx1ZTsKLSAgICBTdHJpbmcg
bV9zdWdnZXN0ZWRWYWx1ZTsKLSAgICBpbnQgbV9zaXplOwotICAgIGludCBtX21heExlbmd0aDsK
LSAgICBpbnQgbV9jYWNoZWRTZWxlY3Rpb25TdGFydDsKLSAgICBpbnQgbV9jYWNoZWRTZWxlY3Rp
b25FbmQ7Ci0jaWYgRU5BQkxFKFdDU1MpCi0gICAgU3RyaW5nIG1faW5wdXRGb3JtYXRNYXNrOwot
ICAgIHVuc2lnbmVkIG1fbWF4SW5wdXRDaGFyc0FsbG93ZWQ7Ci0jZW5kaWYKLX07Ci0KLX0KLQot
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggMGZjNDAwYzRjMjVhOGNiNzU2ZmI4YmY5NTQ5ZWE2
N2E5MDM2ZTg4My4uNDQyOGZmYWM0M2IwYWJhY2Q0YjUxZDljNTEyZjM5MmEyNzE1MDk1NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmNwcApAQCAtNTU5LDcgKzU1OSw3IEBAIHZvaWQgTm9kZTo6c2V0U2hhZG93SG9z
dChFbGVtZW50KiBob3N0KQogICAgIHNldFBhcmVudChob3N0KTsKIH0KIAotSW5wdXRFbGVtZW50
KiBOb2RlOjp0b0lucHV0RWxlbWVudCgpCitIVE1MSW5wdXRFbGVtZW50KiBOb2RlOjp0b0lucHV0
RWxlbWVudCgpCiB7CiAgICAgLy8gSWYgb25lIG9mIHRoZSBiZWxvdyBBU1NFUlRzIHRyaWdnZXIs
IHlvdSBhcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uCiAgICAgLy8gZGlyZWN0bHkgb3IgaW5kaXJl
Y3RseSBmcm9tIGEgY29uc3RydWN0b3Igb3IgZGVzdHJ1Y3RvciBvZiB0aGlzIG9iamVjdC4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5oCmluZGV4IDA1NzFkZmFjNTk0ZDQwZGRkNTExYWMxYzY5ZmFmNGVkMzMxZTFmOWUuLmMy
ODhkMWY5YWIxNmY4MzRlMGZlNjQ5ZDg2YWEzN2UwMjdiNjNjMTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Ob2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaApAQCAt
NTQsNyArNTQsNyBAQCBjbGFzcyBFdmVudENvbnRleHQ7CiBjbGFzcyBFdmVudExpc3RlbmVyOwog
Y2xhc3MgRmxvYXRQb2ludDsKIGNsYXNzIEZyYW1lOwotY2xhc3MgSW5wdXRFbGVtZW50OworY2xh
c3MgSFRNTElucHV0RWxlbWVudDsKIGNsYXNzIEludFJlY3Q7CiBjbGFzcyBLZXlib2FyZEV2ZW50
OwogY2xhc3MgTlNSZXNvbHZlcjsKQEAgLTUyNCw3ICs1MjQsNyBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIE5vZGUqIHRvTm9kZSgpIHsgcmV0dXJuIHRoaXM7IH0KIAotICAgIHZpcnR1YWwgSW5w
dXRFbGVtZW50KiB0b0lucHV0RWxlbWVudCgpOworICAgIHZpcnR1YWwgSFRNTElucHV0RWxlbWVu
dCogdG9JbnB1dEVsZW1lbnQoKTsKIAogICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MSW5wdXRFbGVtZW50LmNwcAppbmRleCBmOWNjYWY5MDRjNzczMGM3OWU4OTZhNzljNTliZTY0
MzIyNDA3ZWMyLi5lMGFhODQ2NzMzZjI0MjhjNzYzM2JiNzBlYWU5MDE0Mzc3NGQ5NjE1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKQEAgLTYsNiArNiw3IEBACiAg
KiAgICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAbnlwb3AuY29tKQog
ICogQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcgKHNhbUB3ZWJraXQub3JnKQogICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4g
KGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzAs
MTEgKzMxLDE0IEBACiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkF0dHJp
YnV0ZS5oIgogI2luY2x1ZGUgIkJlZm9yZVRleHRJbnNlcnRlZEV2ZW50LmgiCisjaW5jbHVkZSAi
Q2hyb21lLmgiCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVy
dHlOYW1lcy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5o
IgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGaWxlTGlzdC5oIgorI2lu
Y2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSFRNTENvbGxlY3Rpb24uaCIKICNpbmNsdWRlICJI
VE1MRGF0YUxpc3RFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCkBAIC00
NSwxMSArNDksMTQgQEAKICNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiTG9j
YWxpemVkU3RyaW5ncy5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQYWdl
LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUmVuZGVyVGV4
dENvbnRyb2wuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCIKICNp
bmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMu
aCIKICNpbmNsdWRlICJTY3JpcHRFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiVGV4dEl0ZXJh
dG9yLmgiCiAjaW5jbHVkZSAiV2hlZWxFdmVudC5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgpAQCAtNjAsMTAgKzY3LDIwIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAorLy8gRklY
TUU6IEFjY29yZGluZyB0byBIVE1MNCwgdGhlIGxlbmd0aCBhdHRyaWJ1dGUncyB2YWx1ZSBjYW4g
YmUgYXJiaXRyYXJpbHkKKy8vIGxhcmdlLiBIb3dldmVyLCBkdWUgdG8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NTM2IHRoaW5ncworLy8gZ2V0IHJhdGhlciBzbHVn
Z2lzaCB3aGVuIGEgdGV4dCBmaWVsZCBoYXMgYSBsYXJnZXIgbnVtYmVyIG9mIGNoYXJhY3RlcnMg
dGhhbgorLy8gdGhpcywgZXZlbiB3aGVuIGp1c3QgY2xpY2tpbmcgaW4gdGhlIHRleHQgZmllbGQu
Citjb25zdCBpbnQgSFRNTElucHV0RWxlbWVudDo6bWF4aW11bUxlbmd0aCA9IDUyNDI4ODsKK2Nv
bnN0IGludCBkZWZhdWx0U2l6ZSA9IDIwOwogY29uc3QgaW50IG1heFNhdmVkUmVzdWx0cyA9IDI1
NjsKIAogSFRNTElucHV0RWxlbWVudDo6SFRNTElucHV0RWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIEhUTUxGb3JtRWxlbWVudCogZm9ybSwg
Ym9vbCBjcmVhdGVkQnlQYXJzZXIpCiAgICAgOiBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCh0
YWdOYW1lLCBkb2N1bWVudCwgZm9ybSkKKyAgICAsIG1fc2l6ZShkZWZhdWx0U2l6ZSkKKyAgICAs
IG1fbWF4TGVuZ3RoKG1heGltdW1MZW5ndGgpCisgICAgLCBtX2NhY2hlZFNlbGVjdGlvblN0YXJ0
KC0xKQorICAgICwgbV9jYWNoZWRTZWxlY3Rpb25FbmQoLTEpCiAgICAgLCBtX21heFJlc3VsdHMo
LTEpCiAgICAgLCBtX2lzQ2hlY2tlZChmYWxzZSkKICAgICAsIG1fcmVmbGVjdHNDaGVja2VkQXR0
cmlidXRlKHRydWUpCkBAIC05OCw3ICsxMTUsNyBAQCBIVE1MSW5wdXRFbGVtZW50Ojp+SFRNTElu
cHV0RWxlbWVudCgpCiAKIGNvbnN0IEF0b21pY1N0cmluZyYgSFRNTElucHV0RWxlbWVudDo6Zm9y
bUNvbnRyb2xOYW1lKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9kYXRhLm5hbWUoKTsKKyAgICBy
ZXR1cm4gbV9uYW1lLmlzTnVsbCgpID8gZW1wdHlBdG9tIDogbV9uYW1lOwogfQogCiBib29sIEhU
TUxJbnB1dEVsZW1lbnQ6OmF1dG9Db21wbGV0ZSgpIGNvbnN0CkBAIC0yMDAsNyArMjE3LDcgQEAg
Ym9vbCBIVE1MSW5wdXRFbGVtZW50Ojp0b29Mb25nKGNvbnN0IFN0cmluZyYgdmFsdWUsIE5lZWRz
VG9DaGVja0RpcnR5RmxhZyBjaGVjaykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChj
aGVjayA9PSBDaGVja0RpcnR5RmxhZykgewogICAgICAgICAvLyBSZXR1cm4gZmFsc2UgZm9yIHRo
ZSBkZWZhdWx0IHZhbHVlIGV2ZW4gaWYgaXQgaXMgbG9uZ2VyIHRoYW4gbWF4TGVuZ3RoLgotICAg
ICAgICBib29sIHVzZXJFZGl0ZWQgPSAhbV9kYXRhLnZhbHVlKCkuaXNOdWxsKCk7CisgICAgICAg
IGJvb2wgdXNlckVkaXRlZCA9ICFtX3ZhbHVlLmlzTnVsbCgpOwogICAgICAgICBpZiAoIXVzZXJF
ZGl0ZWQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMzkzLDE1ICs0MTAs
MjkgQEAgYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojppc01vdXNlRm9jdXNhYmxlKCkgY29uc3QKIAog
dm9pZCBIVE1MSW5wdXRFbGVtZW50Ojp1cGRhdGVGb2N1c0FwcGVhcmFuY2UoYm9vbCByZXN0b3Jl
UHJldmlvdXNTZWxlY3Rpb24pCiB7Ci0gICAgaWYgKGlzVGV4dEZpZWxkKCkpCi0gICAgICAgIElu
cHV0RWxlbWVudDo6dXBkYXRlRm9jdXNBcHBlYXJhbmNlKG1fZGF0YSwgdGhpcywgdGhpcywgcmVz
dG9yZVByZXZpb3VzU2VsZWN0aW9uKTsKLSAgICBlbHNlCisgICAgaWYgKGlzVGV4dEZpZWxkKCkp
IHsKKyAgICAgICAgaWYgKCFyZXN0b3JlUHJldmlvdXNTZWxlY3Rpb24gfHwgbV9jYWNoZWRTZWxl
Y3Rpb25TdGFydCA9PSAtMSkKKyAgICAgICAgICAgIHNlbGVjdCgpOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIC8vIFJlc3RvcmUgdGhlIGNhY2hlZCBzZWxlY3Rpb24uCisgICAgICAgICAg
ICBXZWJDb3JlOjpzZXRTZWxlY3Rpb25SYW5nZSh0aGlzLCBtX2NhY2hlZFNlbGVjdGlvblN0YXJ0
LCBtX2NhY2hlZFNlbGVjdGlvbkVuZCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRvY3VtZW50
KCktPmZyYW1lKCkpCisgICAgICAgICAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24o
KS0+cmV2ZWFsU2VsZWN0aW9uKCk7CisgICAgfSBlbHNlCiAgICAgICAgIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnRXaXRoU3RhdGU6OnVwZGF0ZUZvY3VzQXBwZWFyYW5jZShyZXN0b3JlUHJldmlvdXNT
ZWxlY3Rpb24pOwogfQogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmFib3V0VG9VbmxvYWQoKQog
ewotICAgIElucHV0RWxlbWVudDo6YWJvdXRUb1VubG9hZCh0aGlzLCB0aGlzKTsKKyAgICBpZiAo
IWlzVGV4dEZpZWxkKCkgfHwgIWZvY3VzZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRnJh
bWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAg
ICByZXR1cm47CisKKyAgICBmcmFtZS0+ZWRpdG9yKCktPnRleHRGaWVsZERpZEVuZEVkaXRpbmco
dGhpcyk7CiB9CiAKIGJvb2wgSFRNTElucHV0RWxlbWVudDo6c2hvdWxkVXNlSW5wdXRNZXRob2Qo
KSBjb25zdApAQCAtNDExLDEzICs0NDIsMjQgQEAgYm9vbCBIVE1MSW5wdXRFbGVtZW50OjpzaG91
bGRVc2VJbnB1dE1ldGhvZCgpIGNvbnN0CiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6aGFuZGxl
Rm9jdXNFdmVudCgpCiB7Ci0gICAgSW5wdXRFbGVtZW50OjpkaXNwYXRjaEZvY3VzRXZlbnQodGhp
cywgdGhpcyk7CisgICAgaWYgKCFpc1RleHRGaWVsZCgpKQorICAgICAgICByZXR1cm47CisgICAg
aWYgKGlzUGFzc3dvcmRGaWVsZCgpICYmIGRvY3VtZW50KCktPmZyYW1lKCkpCisgICAgICAgIGRv
Y3VtZW50KCktPnNldFVzZVNlY3VyZUtleWJvYXJkRW50cnlXaGVuQWN0aXZlKHRydWUpOwogfQog
CiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmhhbmRsZUJsdXJFdmVudCgpCiB7CiAgICAgbV9pbnB1
dFR5cGUtPmhhbmRsZUJsdXJFdmVudCgpOwotICAgIElucHV0RWxlbWVudDo6ZGlzcGF0Y2hCbHVy
RXZlbnQodGhpcywgdGhpcyk7CisKKyAgICBpZiAoIWlzVGV4dEZpZWxkKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOworICAgIGlmICgh
ZnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoaXNQYXNzd29yZEZpZWxkKCkpCisgICAg
ICAgIGRvY3VtZW50KCktPnNldFVzZVNlY3VyZUtleWJvYXJkRW50cnlXaGVuQWN0aXZlKGZhbHNl
KTsKKyAgICBmcmFtZS0+ZWRpdG9yKCktPnRleHRGaWVsZERpZEVuZEVkaXRpbmcodGhpcyk7CiB9
CiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0VHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCkBA
IC00NjYsMTQgKzUwOCwxNCBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnVwZGF0ZVR5cGUoKQog
CiAgICAgYm9vbCB3aWxsU3RvcmVWYWx1ZSA9IG1faW5wdXRUeXBlLT5zdG9yZXNWYWx1ZVNlcGFy
YXRlRnJvbUF0dHJpYnV0ZSgpOwogCi0gICAgaWYgKGRpZFN0b3JlVmFsdWUgJiYgIXdpbGxTdG9y
ZVZhbHVlICYmICFtX2RhdGEudmFsdWUoKS5pc051bGwoKSkgewotICAgICAgICBzZXRBdHRyaWJ1
dGUodmFsdWVBdHRyLCBtX2RhdGEudmFsdWUoKSk7Ci0gICAgICAgIG1fZGF0YS5zZXRWYWx1ZShT
dHJpbmcoKSk7CisgICAgaWYgKGRpZFN0b3JlVmFsdWUgJiYgIXdpbGxTdG9yZVZhbHVlICYmICFt
X3ZhbHVlLmlzTnVsbCgpKSB7CisgICAgICAgIHNldEF0dHJpYnV0ZSh2YWx1ZUF0dHIsIG1fdmFs
dWUpOworICAgICAgICBtX3ZhbHVlID0gU3RyaW5nKCk7CiAgICAgfQogICAgIGlmICghZGlkU3Rv
cmVWYWx1ZSAmJiB3aWxsU3RvcmVWYWx1ZSkKLSAgICAgICAgbV9kYXRhLnNldFZhbHVlKHNhbml0
aXplVmFsdWUoZmFzdEdldEF0dHJpYnV0ZSh2YWx1ZUF0dHIpKSk7CisgICAgICAgIG1fdmFsdWUg
PSAgc2FuaXRpemVWYWx1ZShmYXN0R2V0QXR0cmlidXRlKHZhbHVlQXR0cikpOwogICAgIGVsc2UK
LSAgICAgICAgSW5wdXRFbGVtZW50Ojp1cGRhdGVWYWx1ZUlmTmVlZGVkKG1fZGF0YSwgdGhpcyk7
CisgICAgICAgIHVwZGF0ZVZhbHVlSWZOZWVkZWQoKTsKIAogICAgIGlmIChuZWVkZWRBY3RpdmF0
aW9uQ2FsbGJhY2spCiAgICAgICAgIHVucmVnaXN0ZXJGb3JBY3RpdmF0aW9uQ2FsbGJhY2tJZk5l
ZWRlZCgpOwpAQCAtNTAyLDcgKzU0NCw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6dXBkYXRl
VHlwZSgpCiAgICAgY2hlY2tlZFJhZGlvQnV0dG9ucygpLmFkZEJ1dHRvbih0aGlzKTsKIAogICAg
IHNldE5lZWRzVmFsaWRpdHlDaGVjaygpOwotICAgIElucHV0RWxlbWVudDo6bm90aWZ5Rm9ybVN0
YXRlQ2hhbmdlZCh0aGlzKTsKKyAgICBub3RpZnlGb3JtU3RhdGVDaGFuZ2VkKCk7CiB9CiAKIGNv
bnN0IEF0b21pY1N0cmluZyYgSFRNTElucHV0RWxlbWVudDo6Zm9ybUNvbnRyb2xUeXBlKCkgY29u
c3QKQEAgLTU2MCw3ICs2MDIsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IG5h
bWVBdHRyKSB7CiAgICAgICAgIGNoZWNrZWRSYWRpb0J1dHRvbnMoKS5yZW1vdmVCdXR0b24odGhp
cyk7Ci0gICAgICAgIG1fZGF0YS5zZXROYW1lKGF0dHItPnZhbHVlKCkpOworICAgICAgICBtX25h
bWUgPSBhdHRyLT52YWx1ZSgpOwogICAgICAgICBjaGVja2VkUmFkaW9CdXR0b25zKCkuYWRkQnV0
dG9uKHRoaXMpOwogICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBh
dXRvY29tcGxldGVBdHRyKSB7CkBAIC01ODIsNyArNjI0LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiAgICAgICAgIHVwZGF0
ZVR5cGUoKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSB2YWx1ZUF0dHIpIHsKICAg
ICAgICAgLy8gV2Ugb25seSBuZWVkIHRvIHNldENoYW5nZWQgaWYgdGhlIGZvcm0gaXMgbG9va2lu
ZyBhdCB0aGUgZGVmYXVsdCB2YWx1ZSByaWdodCBub3cuCi0gICAgICAgIGlmIChtX2RhdGEudmFs
dWUoKS5pc051bGwoKSkKKyAgICAgICAgaWYgKG1fdmFsdWUuaXNOdWxsKCkpCiAgICAgICAgICAg
ICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgICAgIHNldEZvcm1Db250cm9sVmFsdWVNYXRj
aGVzUmVuZGVyZXIoZmFsc2UpOwogICAgICAgICBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKQEAg
LTU5NiwxMSArNjM4LDIwIEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogICAgICAgICAgICAgbV9yZWZsZWN0c0NoZWNrZWRBdHRy
aWJ1dGUgPSB0cnVlOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
bWF4bGVuZ3RoQXR0cikgewotICAgICAgICBJbnB1dEVsZW1lbnQ6OnBhcnNlTWF4TGVuZ3RoQXR0
cmlidXRlKG1fZGF0YSwgdGhpcywgdGhpcywgYXR0cik7CisgICAgICAgIGludCBtYXhMZW5ndGgg
PSBhdHRyLT5pc051bGwoKSA/IG1heGltdW1MZW5ndGggOiBhdHRyLT52YWx1ZSgpLnRvSW50KCk7
CisgICAgICAgIGlmIChtYXhMZW5ndGggPD0gMCB8fCBtYXhMZW5ndGggPiBtYXhpbXVtTGVuZ3Ro
KQorICAgICAgICAgICAgbWF4TGVuZ3RoID0gbWF4aW11bUxlbmd0aDsKKyAgICAgICAgaW50IG9s
ZE1heExlbmd0aCA9IG1fbWF4TGVuZ3RoOworICAgICAgICBtX21heExlbmd0aCA9IG1heExlbmd0
aDsKKyAgICAgICAgaWYgKG9sZE1heExlbmd0aCAhPSBtYXhMZW5ndGgpCisgICAgICAgICAgICB1
cGRhdGVWYWx1ZUlmTmVlZGVkKCk7CisgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKICAg
ICAgICAgc2V0TmVlZHNWYWxpZGl0eUNoZWNrKCk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gc2l6ZUF0dHIpCi0gICAgICAgIElucHV0RWxlbWVudDo6cGFyc2VTaXplQXR0cmlidXRl
KG1fZGF0YSwgdGhpcywgYXR0cik7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGFsdEF0
dHIpCisgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gc2l6ZUF0dHIpIHsKKyAgICAgICAg
bV9zaXplID0gYXR0ci0+aXNOdWxsKCkgPyBkZWZhdWx0U2l6ZSA6IGF0dHItPnZhbHVlKCkudG9J
bnQoKTsKKyAgICAgICAgaWYgKHJlbmRlcmVyKCkpCisgICAgICAgICAgICByZW5kZXJlcigpLT5z
ZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKKyAgICB9IGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBhbHRBdHRyKQogICAgICAgICBtX2lucHV0VHlwZS0+YWx0QXR0cmlidXRlQ2hh
bmdlZCgpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBzcmNBdHRyKQogICAgICAgICBt
X2lucHV0VHlwZS0+c3JjQXR0cmlidXRlQ2hhbmdlZCgpOwpAQCAtODA4LDE0ICs4NTksMTQgQEAg
dm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRJbmRldGVybWluYXRlKGJvb2wgbmV3VmFsdWUpCiAK
IGludCBIVE1MSW5wdXRFbGVtZW50OjpzaXplKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9kYXRh
LnNpemUoKTsKKyAgICByZXR1cm4gbV9zaXplOwogfQogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6
OmNvcHlOb25BdHRyaWJ1dGVQcm9wZXJ0aWVzKGNvbnN0IEVsZW1lbnQqIHNvdXJjZSkKIHsKICAg
ICBjb25zdCBIVE1MSW5wdXRFbGVtZW50KiBzb3VyY2VFbGVtZW50ID0gc3RhdGljX2Nhc3Q8Y29u
c3QgSFRNTElucHV0RWxlbWVudCo+KHNvdXJjZSk7CiAKLSAgICBtX2RhdGEuc2V0VmFsdWUoc291
cmNlRWxlbWVudC0+bV9kYXRhLnZhbHVlKCkpOworICAgIG1fdmFsdWUgPSBzb3VyY2VFbGVtZW50
LT5tX3ZhbHVlOwogICAgIHNldENoZWNrZWQoc291cmNlRWxlbWVudC0+bV9pc0NoZWNrZWQpOwog
ICAgIG1fcmVmbGVjdHNDaGVja2VkQXR0cmlidXRlID0gc291cmNlRWxlbWVudC0+bV9yZWZsZWN0
c0NoZWNrZWRBdHRyaWJ1dGU7CiAgICAgbV9pc0luZGV0ZXJtaW5hdGUgPSBzb3VyY2VFbGVtZW50
LT5tX2lzSW5kZXRlcm1pbmF0ZTsKQEAgLTgyOSw3ICs4ODAsNyBAQCBTdHJpbmcgSFRNTElucHV0
RWxlbWVudDo6dmFsdWUoKSBjb25zdAogICAgIGlmIChtX2lucHV0VHlwZS0+Z2V0VHlwZVNwZWNp
ZmljVmFsdWUodmFsdWUpKQogICAgICAgICByZXR1cm4gdmFsdWU7CiAKLSAgICB2YWx1ZSA9IG1f
ZGF0YS52YWx1ZSgpOworICAgIHZhbHVlID0gbV92YWx1ZTsKICAgICBpZiAoIXZhbHVlLmlzTnVs
bCgpKQogICAgICAgICByZXR1cm4gdmFsdWU7CiAKQEAgLTg1Nyw3ICs5MDgsNyBAQCB2b2lkIEhU
TUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlRm9yVXNlcihjb25zdCBTdHJpbmcmIHZhbHVlKQogCiBj
b25zdCBTdHJpbmcmIEhUTUxJbnB1dEVsZW1lbnQ6OnN1Z2dlc3RlZFZhbHVlKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbV9kYXRhLnN1Z2dlc3RlZFZhbHVlKCk7CisgICAgcmV0dXJuIG1fc3VnZ2Vz
dGVkVmFsdWU7CiB9CiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0U3VnZ2VzdGVkVmFsdWUo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKQEAgLTg2NSw3ICs5MTYsNyBAQCB2b2lkIEhUTUxJbnB1dEVs
ZW1lbnQ6OnNldFN1Z2dlc3RlZFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgaWYgKCFt
X2lucHV0VHlwZS0+Y2FuU2V0U3VnZ2VzdGVkVmFsdWUoKSkKICAgICAgICAgcmV0dXJuOwogICAg
IHNldEZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIoZmFsc2UpOwotICAgIG1fZGF0YS5z
ZXRTdWdnZXN0ZWRWYWx1ZShzYW5pdGl6ZVZhbHVlKHZhbHVlKSk7CisgICAgbV9zdWdnZXN0ZWRW
YWx1ZSA9IHNhbml0aXplVmFsdWUodmFsdWUpOwogICAgIHVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJp
bGl0eShmYWxzZSk7CiAgICAgaWYgKHJlbmRlcmVyKCkpCiAgICAgICAgIHJlbmRlcmVyKCktPnVw
ZGF0ZUZyb21FbGVtZW50KCk7CkBAIC04ODIsNyArOTMzLDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVt
ZW50OjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIHNlbmRDaGFuZ2VFdmVudCkK
ICAgICAgICAgaWYgKGZpbGVzKCkpCiAgICAgICAgICAgICBmaWxlcygpLT5jbGVhcigpOwogICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIG1fZGF0YS5zZXRWYWx1ZShzYW5pdGl6ZVZhbHVlKHZh
bHVlKSk7CisgICAgICAgICAgICBtX3ZhbHVlID0gc2FuaXRpemVWYWx1ZSh2YWx1ZSk7CiAgICAg
ICAgICAgICBpZiAoaXNUZXh0RmllbGQoKSkKICAgICAgICAgICAgICAgICB1cGRhdGVQbGFjZWhv
bGRlclZpc2liaWxpdHkoZmFsc2UpOwogICAgICAgICB9CkBAIC04OTMsMTIgKzk0NCwxMiBAQCB2
b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wg
c2VuZENoYW5nZUV2ZW50KQogICAgIHNldE5lZWRzVmFsaWRpdHlDaGVjaygpOwogCiAgICAgaWYg
KGlzVGV4dEZpZWxkKCkpIHsKLSAgICAgICAgdW5zaWduZWQgbWF4ID0gbV9kYXRhLnZhbHVlKCku
bGVuZ3RoKCk7CisgICAgICAgIHVuc2lnbmVkIG1heCA9IG1fdmFsdWUubGVuZ3RoKCk7CiAgICAg
ICAgIGlmIChkb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpID09IHRoaXMpCi0gICAgICAgICAgICBJ
bnB1dEVsZW1lbnQ6OnVwZGF0ZVNlbGVjdGlvblJhbmdlKHRoaXMsIHRoaXMsIG1heCwgbWF4KTsK
KyAgICAgICAgICAgIFdlYkNvcmU6OnNldFNlbGVjdGlvblJhbmdlKHRoaXMsIG1heCwgbWF4KTsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgY2FjaGVTZWxlY3Rpb24obWF4LCBtYXgpOwotICAg
ICAgICBtX2RhdGEuc2V0U3VnZ2VzdGVkVmFsdWUoU3RyaW5nKCkpOworICAgICAgICBtX3N1Z2dl
c3RlZFZhbHVlID0gU3RyaW5nKCk7CiAgICAgfQogICAgIG1faW5wdXRUeXBlLT52YWx1ZUNoYW5n
ZWQoKTsKIApAQCAtOTE0LDcgKzk2NSw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0VmFs
dWUoY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBzZW5kQ2hhbmdlRXZlbnQpCiAgICAgaWYgKGlz
VGV4dCgpICYmICghZm9jdXNlZCgpIHx8ICFzZW5kQ2hhbmdlRXZlbnQpKQogICAgICAgICBzZXRU
ZXh0QXNPZkxhc3RGb3JtQ29udHJvbENoYW5nZUV2ZW50KHZhbHVlKTsKIAotICAgIElucHV0RWxl
bWVudDo6bm90aWZ5Rm9ybVN0YXRlQ2hhbmdlZCh0aGlzKTsKKyAgICBub3RpZnlGb3JtU3RhdGVD
aGFuZ2VkKCk7CiB9CiAKIGRvdWJsZSBIVE1MSW5wdXRFbGVtZW50Ojp2YWx1ZUFzRGF0ZSgpIGNv
bnN0CkBAIC05NjEsOCArMTAxMiwyMyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVl
RnJvbVJlbmRlcmVyKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgLy8gRmlsZSB1cGxvYWQgY29u
dHJvbHMgd2lsbCBhbHdheXMgdXNlIHNldEZpbGVMaXN0RnJvbVJlbmRlcmVyLgogICAgIEFTU0VS
VCghaXNGaWxlVXBsb2FkKCkpOwogCi0gICAgbV9kYXRhLnNldFN1Z2dlc3RlZFZhbHVlKFN0cmlu
ZygpKTsKLSAgICBJbnB1dEVsZW1lbnQ6OnNldFZhbHVlRnJvbVJlbmRlcmVyKG1fZGF0YSwgdGhp
cywgdGhpcywgdmFsdWUpOworICAgIG1fc3VnZ2VzdGVkVmFsdWUgPSBTdHJpbmcoKTsKKworICAg
IC8vIFJlbmRlcmVyIGFuZCBvdXIgZXZlbnQgaGFuZGxlciBhcmUgcmVzcG9uc2libGUgZm9yIHNh
bml0aXppbmcgdmFsdWVzLgorICAgIEFTU0VSVCh2YWx1ZSA9PSBzYW5pdGl6ZVZhbHVlKHZhbHVl
KSB8fCBzYW5pdGl6ZVZhbHVlKHZhbHVlKS5pc0VtcHR5KCkpOworCisgICAgLy8gV29ya2Fyb3Vu
ZCBmb3IgYnVnIHdoZXJlIHRyYWlsaW5nIFxuIGlzIGluY2x1ZGVkIGluIHRoZSByZXN1bHQgb2Yg
dGV4dENvbnRlbnQuCisgICAgLy8gVGhlIGFzc2VydCBtYWNybyBhYm92ZSBtYXkgYWxzbyBiZSBz
aW1wbGlmaWVkIHRvOiB2YWx1ZSA9PSBjb25zdHJhaW5WYWx1ZSh2YWx1ZSkKKyAgICAvLyBodHRw
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjYxCisgICAgbV92YWx1ZSA9IHZh
bHVlID09ICJcbiIgPyBTdHJpbmcoIiIpIDogdmFsdWU7CisKKyAgICBzZXRGb3JtQ29udHJvbFZh
bHVlTWF0Y2hlc1JlbmRlcmVyKHRydWUpOworCisgICAgLy8gSW5wdXQgZXZlbnQgaXMgZmlyZWQg
YnkgdGhlIE5vZGU6OmRlZmF1bHRFdmVudEhhbmRsZXIgZm9yIGVkaXRhYmxlIGNvbnRyb2xzLgor
ICAgIGlmICghaXNUZXh0RmllbGQoKSkKKyAgICAgICAgZGlzcGF0Y2hJbnB1dEV2ZW50KCk7Cisg
ICAgbm90aWZ5Rm9ybVN0YXRlQ2hhbmdlZCgpOworCiAgICAgdXBkYXRlUGxhY2Vob2xkZXJWaXNp
YmlsaXR5KGZhbHNlKTsKICAgICBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKIApAQCAtOTc1LDcg
KzEwNDEsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldEZpbGVMaXN0RnJvbVJlbmRlcmVy
KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocykKICAgICBtX2lucHV0VHlwZS0+c2V0RmlsZUxp
c3QocGF0aHMpOwogCiAgICAgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcih0cnVl
KTsKLSAgICBJbnB1dEVsZW1lbnQ6Om5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQodGhpcyk7CisgICAg
bm90aWZ5Rm9ybVN0YXRlQ2hhbmdlZCgpOwogICAgIHNldE5lZWRzVmFsaWRpdHlDaGVjaygpOwog
fQogCkBAIC0xMTA1LDcgKzExNzEsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldERlZmF1
bHRWYWx1ZShjb25zdCBTdHJpbmcgJnZhbHVlKQogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNl
dERlZmF1bHROYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKIHsKLSAgICBtX2RhdGEuc2V0
TmFtZShuYW1lKTsKKyAgICBtX25hbWUgPSBuYW1lOwogfQogCiBTdHJpbmcgSFRNTElucHV0RWxl
bWVudDo6YWNjZXB0KCkgY29uc3QKQEAgLTExMjAsNyArMTE4Niw3IEBAIFN0cmluZyBIVE1MSW5w
dXRFbGVtZW50OjphbHQoKSBjb25zdAogCiBpbnQgSFRNTElucHV0RWxlbWVudDo6bWF4TGVuZ3Ro
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9kYXRhLm1heExlbmd0aCgpOworICAgIHJldHVybiBt
X21heExlbmd0aDsKIH0KIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRNYXhMZW5ndGgoaW50
IG1heExlbmd0aCwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0xMjE5LDggKzEyODUsOCBAQCBib29s
IEhUTUxJbnB1dEVsZW1lbnQ6OmlzUmVxdWlyZWRGb3JtQ29udHJvbCgpIGNvbnN0CiAKIHZvaWQg
SFRNTElucHV0RWxlbWVudDo6Y2FjaGVTZWxlY3Rpb24oaW50IHN0YXJ0LCBpbnQgZW5kKQogewot
ICAgIG1fZGF0YS5zZXRDYWNoZWRTZWxlY3Rpb25TdGFydChzdGFydCk7Ci0gICAgbV9kYXRhLnNl
dENhY2hlZFNlbGVjdGlvbkVuZChlbmQpOworICAgIG1fY2FjaGVkU2VsZWN0aW9uU3RhcnQgPSBz
dGFydDsKKyAgICBtX2NhY2hlZFNlbGVjdGlvbkVuZCA9IGVuZDsKIH0KIAogdm9pZCBIVE1MSW5w
dXRFbGVtZW50OjphZGRTZWFyY2hSZXN1bHQoKQpAQCAtMTQ0NCwxMSArMTUxMCwxNDAgQEAgdm9p
ZCBIVE1MSW5wdXRFbGVtZW50OjpzdGVwVXBGcm9tUmVuZGVyZXIoaW50IG4pCiAKICNpZiBFTkFC
TEUoV0NTUykKIAorc3RhdGljIGlubGluZSBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1hdENvZGVz
KCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgY29kZXMsICgiQWFO
blh4TW0iKSk7CisgICAgcmV0dXJuIGNvZGVzOworfQorCitzdGF0aWMgdW5zaWduZWQgY3Vyc29y
UG9zaXRpb25Ub01hc2tJbmRleChjb25zdCBTdHJpbmcmIGlucHV0Rm9ybWF0TWFzaywgdW5zaWdu
ZWQgY3Vyc29yUG9zaXRpb24pCit7CisgICAgVUNoYXIgbWFzazsKKyAgICBpbnQgaW5kZXggPSAt
MTsKKyAgICBkbyB7CisgICAgICAgIG1hc2sgPSBpbnB1dEZvcm1hdE1hc2tbKytpbmRleF07Cisg
ICAgICAgIGlmIChtYXNrID09ICdcXCcpCisgICAgICAgICAgICArK2luZGV4OworICAgICAgICBl
bHNlIGlmIChtYXNrID09ICcqJyB8fCAoaXNBU0NJSURpZ2l0KG1hc2spICYmIG1hc2sgIT0gJzAn
KSkgeworICAgICAgICAgICAgaW5kZXggPSBpbnB1dEZvcm1hdE1hc2subGVuZ3RoKCkgLSAxOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChjdXJzb3JQb3NpdGlv
bi0tKTsKKworICAgIHJldHVybiBpbmRleDsKK30KKworYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojpp
c0NvbmZvcm1Ub0lucHV0TWFzayhjb25zdCBTdHJpbmcmIGlucHV0Q2hhcnMpIGNvbnN0Cit7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGlucHV0Q2hhcnMubGVuZ3RoKCk7ICsraSkgewor
ICAgICAgICBpZiAoIWlzQ29uZm9ybVRvSW5wdXRNYXNrKGlucHV0Q2hhcnNbaV0sIGkpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBIVE1MSW5wdXRFbGVtZW50Ojppc0NvbmZvcm1Ub0lucHV0TWFzayhVQ2hhciBpbkNoYXIsIHVu
c2lnbmVkIGN1cnNvclBvc2l0aW9uKSBjb25zdAoreworICAgIGlmIChtX2lucHV0Rm9ybWF0TWFz
ay5pc0VtcHR5KCkgfHwgbV9pbnB1dEZvcm1hdE1hc2sgPT0gIipNIiB8fCBtX2lucHV0Rm9ybWF0
TWFzayA9PSAiKm0iKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChjdXJzb3JQb3Np
dGlvbiA+PSBtX21heElucHV0Q2hhcnNBbGxvd2VkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHVuc2lnbmVkIG1hc2tJbmRleCA9IGN1cnNvclBvc2l0aW9uVG9NYXNrSW5kZXgobV9p
bnB1dEZvcm1hdE1hc2ssIGN1cnNvclBvc2l0aW9uKTsKKyAgICBib29sIG9rID0gdHJ1ZTsKKyAg
ICBVQ2hhciBtYXNrID0gbV9pbnB1dEZvcm1hdE1hc2tbbWFza0luZGV4XTsKKyAgICAvLyBNYXRj
aCB0aGUgaW5wdXRlZCBjaGFyYWN0ZXIgd2l0aCBpbnB1dCBtYXNrCisgICAgc3dpdGNoIChtYXNr
KSB7CisgICAgY2FzZSAnQSc6CisgICAgICAgIG9rID0gIWlzQVNDSUlEaWdpdChpbkNoYXIpICYm
ICFpc0FTQ0lJTG93ZXIoaW5DaGFyKSAmJiBpc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgJ2EnOgorICAgICAgICBvayA9ICFpc0FTQ0lJRGlnaXQoaW5D
aGFyKSAmJiAhaXNBU0NJSVVwcGVyKGluQ2hhcikgJiYgaXNBU0NJSVByaW50YWJsZShpbkNoYXIp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlICdOJzoKKyAgICAgICAgb2sgPSBpc0FTQ0lJRGln
aXQoaW5DaGFyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAnbic6CisgICAgICAgIG9rID0g
IWlzQVNDSUlBbHBoYShpbkNoYXIpICYmIGlzQVNDSUlQcmludGFibGUoaW5DaGFyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSAnWCc6CisgICAgICAgIG9rID0gIWlzQVNDSUlMb3dlcihpbkNo
YXIpICYmIGlzQVNDSUlQcmludGFibGUoaW5DaGFyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSAneCc6CisgICAgICAgIG9rID0gIWlzQVNDSUlVcHBlcihpbkNoYXIpICYmIGlzQVNDSUlQcmlu
dGFibGUoaW5DaGFyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAnTSc6CisgICAgY2FzZSAn
bSc6CisgICAgICAgIG9rID0gaXNBU0NJSVByaW50YWJsZShpbkNoYXIpOworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBvayA9IChtYXNrID09IGluQ2hhcik7CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBvazsKK30KKworU3RyaW5nIEhUTUxJbnB1dEVs
ZW1lbnQ6OnZhbGlkYXRlSW5wdXRNYXNrKFN0cmluZyYgaW5wdXRNYXNrKQoreworICAgIGlucHV0
TWFzay5yZXBsYWNlKCJcXFxcIiwgIlxcIik7CisKKyAgICBib29sIGlzVmFsaWQgPSB0cnVlOwor
ICAgIGJvb2wgaGFzV2lsZGNhcmQgPSBmYWxzZTsKKyAgICB1bnNpZ25lZCBlc2NhcGVDaGFyQ291
bnQgPSAwOworICAgIHVuc2lnbmVkIG1hc2tMZW5ndGggPSBpbnB1dE1hc2subGVuZ3RoKCk7Cisg
ICAgVUNoYXIgZm9ybWF0Q29kZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWFza0xl
bmd0aDsgKytpKSB7CisgICAgICAgIGZvcm1hdENvZGUgPSBpbnB1dE1hc2tbaV07CisgICAgICAg
IGlmIChmb3JtYXRDb2RlcygpLmZpbmQoZm9ybWF0Q29kZSkgPT0gLTEpIHsKKyAgICAgICAgICAg
IGlmIChmb3JtYXRDb2RlID09ICcqJyB8fCAoaXNBU0NJSURpZ2l0KGZvcm1hdENvZGUpICYmIGZv
cm1hdENvZGUgIT0gJzAnKSkgeworICAgICAgICAgICAgICAgIC8vIFZhbGlkYXRlIGNvZGVzIHdo
aWNoIGVuZHMgd2l0aCAnKmYnIG9yICduZicKKyAgICAgICAgICAgICAgICBmb3JtYXRDb2RlID0g
aW5wdXRNYXNrWysraV07CisgICAgICAgICAgICAgICAgaWYgKChpICsgMSAhPSBtYXNrTGVuZ3Ro
KSB8fCBmb3JtYXRDb2RlcygpLmZpbmQoZm9ybWF0Q29kZSkgPT0gLTEpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaXNWYWxpZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaGFzV2lsZGNhcmQgPSB0cnVlOworICAg
ICAgICAgICAgfSBlbHNlIGlmIChmb3JtYXRDb2RlID09ICdcXCcpIHsKKyAgICAgICAgICAgICAg
ICAvLyBza2lwIG92ZXIgdGhlIG5leHQgbWFzayBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICAr
K2k7CisgICAgICAgICAgICAgICAgKytlc2NhcGVDaGFyQ291bnQ7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghaXNWYWxp
ZCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIC8vIGNhbGN1bGF0ZSB0aGUgbnVtYmVy
IG9mIGNoYXJhY3RlcnMgYWxsb3dlZCB0byBiZSBlbnRlcmVkIGJ5IGlucHV0IG1hc2sKKyAgICB1
bnNpZ25lZCBhbGxvd2VkTGVuZ3RoID0gbWFza0xlbmd0aDsKKyAgICBpZiAoZXNjYXBlQ2hhckNv
dW50KQorICAgICAgICBhbGxvd2VkTGVuZ3RoIC09IGVzY2FwZUNoYXJDb3VudDsKKworICAgIGlm
IChoYXNXaWxkY2FyZCkgeworICAgICAgICBmb3JtYXRDb2RlID0gaW5wdXRNYXNrW21hc2tMZW5n
dGggLSAyXTsKKyAgICAgICAgaWYgKGZvcm1hdENvZGUgPT0gJyonKQorICAgICAgICAgICAgYWxs
b3dlZExlbmd0aCA9IG1fbWF4SW5wdXRDaGFyc0FsbG93ZWQ7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgdW5zaWduZWQgbGVmdExlbiA9IFN0cmluZygmZm9ybWF0Q29kZSkudG9JbnQoKTsK
KyAgICAgICAgICAgIGFsbG93ZWRMZW5ndGggPSBsZWZ0TGVuICsgYWxsb3dlZExlbmd0aCAtIDI7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYWxsb3dlZExlbmd0aCA8IG1fbWF4SW5wdXRD
aGFyc0FsbG93ZWQpCisgICAgICAgIG1fbWF4SW5wdXRDaGFyc0FsbG93ZWQgPSBhbGxvd2VkTGVu
Z3RoOworCisgICAgcmV0dXJuIGlucHV0TWFzazsKK30KKwogdm9pZCBIVE1MSW5wdXRFbGVtZW50
OjpzZXRXYXBJbnB1dEZvcm1hdChTdHJpbmcmIG1hc2spCiB7Ci0gICAgU3RyaW5nIHZhbGlkYXRl
TWFzayA9IHZhbGlkYXRlSW5wdXRNYXNrKG1fZGF0YSwgbWFzayk7CisgICAgU3RyaW5nIHZhbGlk
YXRlTWFzayA9IHZhbGlkYXRlSW5wdXRNYXNrKG1hc2spOwogICAgIGlmICghdmFsaWRhdGVNYXNr
LmlzRW1wdHkoKSkKLSAgICAgICAgbV9kYXRhLnNldElucHV0Rm9ybWF0TWFzayh2YWxpZGF0ZU1h
c2spOworICAgICAgICBtX2lucHV0Rm9ybWF0TWFzayA9IHZhbGlkYXRlTWFzazsKIH0KIAogI2Vu
ZGlmCkBAIC0xNTYwLDkgKzE3NTUsODYgQEAgQ2hlY2tlZFJhZGlvQnV0dG9ucyYgSFRNTElucHV0
RWxlbWVudDo6Y2hlY2tlZFJhZGlvQnV0dG9ucygpIGNvbnN0CiAgICAgcmV0dXJuIGRvY3VtZW50
KCktPmNoZWNrZWRSYWRpb0J1dHRvbnMoKTsKIH0KIAorU3RyaW5nIEhUTUxJbnB1dEVsZW1lbnQ6
OnJlcGxhY2VFT0xBbmRMaW1pdExlbmd0aChjb25zdCBTdHJpbmcmIHByb3Bvc2VkVmFsdWUsIGlu
dCBtYXhMZW5ndGgpCit7CisgICAgU3RyaW5nIHN0cmluZyA9IHByb3Bvc2VkVmFsdWU7CisgICAg
c3RyaW5nLnJlcGxhY2UoIlxyXG4iLCAiICIpOworICAgIHN0cmluZy5yZXBsYWNlKCdccicsICcg
Jyk7CisgICAgc3RyaW5nLnJlcGxhY2UoJ1xuJywgJyAnKTsKKworICAgIHVuc2lnbmVkIG5ld0xl
bmd0aCA9IG51bUNoYXJhY3RlcnNJbkdyYXBoZW1lQ2x1c3RlcnMoc3RyaW5nLCBtYXhMZW5ndGgp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuZXdMZW5ndGg7ICsraSkgeworICAgICAg
ICBjb25zdCBVQ2hhciBjdXJyZW50ID0gc3RyaW5nW2ldOworICAgICAgICBpZiAoY3VycmVudCA8
ICcgJyAmJiBjdXJyZW50ICE9ICdcdCcpIHsKKyAgICAgICAgICAgIG5ld0xlbmd0aCA9IGk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc3RyaW5nLmxl
ZnQobmV3TGVuZ3RoKTsKK30KKworU3RyaW5nIEhUTUxJbnB1dEVsZW1lbnQ6OnNhbml0aXplVXNl
cklucHV0VmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wb3NlZFZhbHVlLCBpbnQgbWF4TGVuZ3RoKSBj
b25zdAoreworICAgIGlmICghaXNUZXh0RmllbGQoKSkKKyAgICAgICAgcmV0dXJuIHByb3Bvc2Vk
VmFsdWU7CisgICAgcmV0dXJuIHJlcGxhY2VFT0xBbmRMaW1pdExlbmd0aChwcm9wb3NlZFZhbHVl
LCBtYXhMZW5ndGgpOworfQorCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmhhbmRsZUJlZm9yZVRl
eHRJbnNlcnRlZEV2ZW50KEV2ZW50KiBldmVudCkKIHsKLSAgICBJbnB1dEVsZW1lbnQ6OmhhbmRs
ZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KG1fZGF0YSwgdGhpcywgdGhpcywgZXZlbnQpOworICAg
IEFTU0VSVChldmVudC0+aXNCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCgpKTsKKyAgICAvLyBNYWtl
IHN1cmUgdGhhdCB0aGUgdGV4dCB0byBiZSBpbnNlcnRlZCB3aWxsIG5vdCB2aW9sYXRlIHRoZSBt
YXhMZW5ndGguCisKKyAgICAvLyBXZSB1c2UgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp0
ZXh0KCkgaW5zdGVhZCBvZiBJbnB1dEVsZW1lbnQ6OnZhbHVlKCkKKyAgICAvLyBiZWNhdXNlIHRo
ZXkgY2FuIGJlIG1pc21hdGNoZWQgYnkgc2FuaXRpemVWYWx1ZSgpIGluCisgICAgLy8gUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzdWJ0cmVlSGFzQ2hhbmdlZCgpIGluIHNvbWUgY2FzZXMu
CisgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0gbnVtR3JhcGhlbWVDbHVzdGVycyh0b1JlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZShyZW5kZXJlcigpKS0+dGV4dCgpKTsKKworICAgIC8vIHNlbGVj
dGlvbkxlbmd0aCByZXByZXNlbnRzIHRoZSBzZWxlY3Rpb24gbGVuZ3RoIG9mIHRoaXMgdGV4dCBm
aWVsZCB0byBiZQorICAgIC8vIHJlbW92ZWQgYnkgdGhpcyBpbnNlcnRpb24uCisgICAgLy8gSWYg
dGhlIHRleHQgZmllbGQgaGFzIG5vIGZvY3VzLCB3ZSBkb24ndCBuZWVkIHRvIHRha2UgYWNjb3Vu
dCBvZiB0aGUKKyAgICAvLyBzZWxlY3Rpb24gbGVuZ3RoLiBUaGUgc2VsZWN0aW9uIGlzIHRoZSBz
b3VyY2Ugb2YgdGV4dCBkcmFnLWFuZC1kcm9wIGluCisgICAgLy8gdGhhdCBjYXNlLCBhbmQgbm90
aGluZyBpbiB0aGUgdGV4dCBmaWVsZCB3aWxsIGJlIHJlbW92ZWQuCisgICAgdW5zaWduZWQgc2Vs
ZWN0aW9uTGVuZ3RoID0gZm9jdXNlZCgpID8gbnVtR3JhcGhlbWVDbHVzdGVycyhwbGFpblRleHQo
ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnRvTm9ybWFsaXpl
ZFJhbmdlKCkuZ2V0KCkpKSA6IDA7CisgICAgQVNTRVJUKG9sZExlbmd0aCA+PSBzZWxlY3Rpb25M
ZW5ndGgpOworCisgICAgLy8gU2VsZWN0ZWQgY2hhcmFjdGVycyB3aWxsIGJlIHJlbW92ZWQgYnkg
dGhlIG5leHQgdGV4dCBldmVudC4KKyAgICB1bnNpZ25lZCBiYXNlTGVuZ3RoID0gb2xkTGVuZ3Ro
IC0gc2VsZWN0aW9uTGVuZ3RoOworICAgIHVuc2lnbmVkIG1heExlbmd0aCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihzdXBwb3J0c01heExlbmd0aCgpID8gbV9tYXhMZW5ndGggOiBtYXhpbXVtTGVu
Z3RoKTsgLy8gbV9tYXhMZW5ndGggY2FuIG5ldmVyIGJlIG5lZ2F0aXZlLgorICAgIHVuc2lnbmVk
IGFwcGVuZGFibGVMZW5ndGggPSBtYXhMZW5ndGggPiBiYXNlTGVuZ3RoID8gbWF4TGVuZ3RoIC0g
YmFzZUxlbmd0aCA6IDA7CisKKyAgICAvLyBUcnVuY2F0ZSB0aGUgaW5zZXJ0ZWQgdGV4dCB0byBh
dm9pZCB2aW9sYXRpbmcgdGhlIG1heExlbmd0aCBhbmQgb3RoZXIgY29uc3RyYWludHMuCisgICAg
QmVmb3JlVGV4dEluc2VydGVkRXZlbnQqIHRleHRFdmVudCA9IHN0YXRpY19jYXN0PEJlZm9yZVRl
eHRJbnNlcnRlZEV2ZW50Kj4oZXZlbnQpOworI2lmIEVOQUJMRShXQ1NTKQorICAgIFJlZlB0cjxS
YW5nZT4gcmFuZ2UgPSBkb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9u
KCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBTdHJpbmcgY2FuZGlkYXRlU3RyaW5nID0gdG9S
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUocmVuZGVyZXIoKSktPnRleHQoKTsKKyAgICBpZiAo
c2VsZWN0aW9uTGVuZ3RoKQorICAgICAgICBjYW5kaWRhdGVTdHJpbmcucmVwbGFjZShyYW5nZS0+
c3RhcnRPZmZzZXQoKSwgcmFuZ2UtPmVuZE9mZnNldCgpLCB0ZXh0RXZlbnQtPnRleHQoKSk7Cisg
ICAgZWxzZQorICAgICAgICBjYW5kaWRhdGVTdHJpbmcuaW5zZXJ0KHRleHRFdmVudC0+dGV4dCgp
LCByYW5nZS0+c3RhcnRPZmZzZXQoKSk7CisgICAgaWYgKCFpc0NvbmZvcm1Ub0lucHV0TWFzayhj
YW5kaWRhdGVTdHJpbmcpKSB7CisgICAgICAgIHRleHRFdmVudC0+c2V0VGV4dCgiIik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICB0ZXh0RXZlbnQtPnNldFRleHQoc2FuaXRp
emVVc2VySW5wdXRWYWx1ZSh0ZXh0RXZlbnQtPnRleHQoKSwgYXBwZW5kYWJsZUxlbmd0aCkpOwor
fQorCit2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6Om5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQoKQorewor
ICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKQor
ICAgICAgICBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPmZvcm1TdGF0ZURpZENoYW5nZSh0aGlz
KTsKK30KKwordm9pZCBIVE1MSW5wdXRFbGVtZW50Ojp1cGRhdGVWYWx1ZUlmTmVlZGVkKCkKK3sK
KyAgICBTdHJpbmcgbmV3VmFsdWUgPSBzYW5pdGl6ZVZhbHVlKG1fdmFsdWUpOworICAgIGlmIChu
ZXdWYWx1ZSAhPSBtX3ZhbHVlKQorICAgICAgICBzZXRWYWx1ZShuZXdWYWx1ZSk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVs
ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCmluZGV4IDVi
ZTczNjY4Nzk2MGZjOWRkYmIzYjlhNjllNWM3YjM5MDdkNDA5NzAuLmM3YTA4Y2M1MTgxZDlkZGVl
YWI1OTk1Yzk2NWY3MGI0NDBlMWRhNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTElucHV0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxl
bWVudC5oCkBAIC0yNSw3ICsyNSw2IEBACiAjZGVmaW5lIEhUTUxJbnB1dEVsZW1lbnRfaAogCiAj
aW5jbHVkZSAiSFRNTEZvcm1Db250cm9sRWxlbWVudC5oIgotI2luY2x1ZGUgIklucHV0RWxlbWVu
dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM1LDE0ICszNCwxNCBAQCBjbGFzcyBI
VE1MT3B0aW9uRWxlbWVudDsKIGNsYXNzIElucHV0VHlwZTsKIGNsYXNzIEtVUkw7CiAKLWNsYXNz
IEhUTUxJbnB1dEVsZW1lbnQgOiBwdWJsaWMgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQsIHB1
YmxpYyBJbnB1dEVsZW1lbnQgeworY2xhc3MgSFRNTElucHV0RWxlbWVudCA6IHB1YmxpYyBIVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
SFRNTElucHV0RWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCos
IEhUTUxGb3JtRWxlbWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKICAgICB2aXJ0dWFsIH5I
VE1MSW5wdXRFbGVtZW50KCk7CiAKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVS
KHdlYmtpdHNwZWVjaGNoYW5nZSk7CiAKLSAgICB2aXJ0dWFsIElucHV0RWxlbWVudCogdG9JbnB1
dEVsZW1lbnQoKSB7IHJldHVybiB0aGlzOyB9CisgICAgdmlydHVhbCBIVE1MSW5wdXRFbGVtZW50
KiB0b0lucHV0RWxlbWVudCgpIHsgcmV0dXJuIHRoaXM7IH0KIAogICAgIGJvb2wgYXV0b0NvbXBs
ZXRlKCkgY29uc3Q7CiAKQEAgLTc4LDE4ICs3NywxOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdGVw
VXAoRXhjZXB0aW9uQ29kZSYgZWMpIHsgc3RlcFVwKDEsIGVjKTsgfQogICAgIHZvaWQgc3RlcERv
d24oRXhjZXB0aW9uQ29kZSYgZWMpIHsgc3RlcERvd24oMSwgZWMpOyB9CiAgICAgLy8gc3RlcFVw
KCkvc3RlcERvd24oKSBmb3IgdXNlci1pbnRlcmFjdGlvbi4KLSAgICB2aXJ0dWFsIGJvb2wgaXNT
dGVwcGFibGUoKSBjb25zdDsKKyAgICBib29sIGlzU3RlcHBhYmxlKCkgY29uc3Q7CiAgICAgdm9p
ZCBzdGVwVXBGcm9tUmVuZGVyZXIoaW50KTsKIAogICAgIGJvb2wgaXNUZXh0QnV0dG9uKCkgY29u
c3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNSYWRpb0J1dHRvbigpIGNvbnN0OwotICAgIHZpcnR1
YWwgYm9vbCBpc1RleHRGaWVsZCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc1NlYXJjaEZp
ZWxkKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzSW5wdXRUeXBlSGlkZGVuKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBib29sIGlzUGFzc3dvcmRGaWVsZCgpIGNvbnN0OwotICAgIHZpcnR1YWwg
Ym9vbCBpc0NoZWNrYm94KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzUmFuZ2VDb250cm9s
KCkgY29uc3Q7CisgICAgYm9vbCBpc1RleHRGaWVsZCgpIGNvbnN0OworICAgIGJvb2wgaXNTZWFy
Y2hGaWVsZCgpIGNvbnN0OworICAgIGJvb2wgaXNJbnB1dFR5cGVIaWRkZW4oKSBjb25zdDsKKyAg
ICBib29sIGlzUGFzc3dvcmRGaWVsZCgpIGNvbnN0OworICAgIGJvb2wgaXNDaGVja2JveCgpIGNv
bnN0OworICAgIGJvb2wgaXNSYW5nZUNvbnRyb2woKSBjb25zdDsKIAogICAgIC8vIEZJWE1FOiBJ
dCdzIGhpZ2hseSBsaWtlbHkgdGhhdCBhbnkgY2FsbCBzaXRlIGNhbGxpbmcgdGhpcyBmdW5jdGlv
biBzaG91bGQgaW5zdGVhZAogICAgIC8vIGJlIHVzaW5nIGEgZGlmZmVyZW50IG9uZS4gTWFueSBp
bnB1dCBlbGVtZW50cyBiZWhhdmUgbGlrZSB0ZXh0IGZpZWxkcywgYW5kIGluIGFkZGl0aW9uCkBA
IC0xMDYsNyArMTA1LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNVUkxGaWVsZCgpIGNvbnN0Owog
CiAjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKLSAgICB2aXJ0dWFsIGJvb2wgaXNTcGVlY2hFbmFi
bGVkKCkgY29uc3Q7CisgICAgYm9vbCBpc1NwZWVjaEVuYWJsZWQoKSBjb25zdDsKICNlbmRpZgog
CiAgICAgYm9vbCBjaGVja2VkKCkgY29uc3QgeyByZXR1cm4gbV9pc0NoZWNrZWQ7IH0KQEAgLTEx
NiwxOCArMTE1LDMwIEBAIHB1YmxpYzoKICAgICBib29sIGluZGV0ZXJtaW5hdGUoKSBjb25zdCB7
IHJldHVybiBtX2lzSW5kZXRlcm1pbmF0ZTsgfQogICAgIHZvaWQgc2V0SW5kZXRlcm1pbmF0ZShi
b29sKTsKIAotICAgIHZpcnR1YWwgaW50IHNpemUoKSBjb25zdDsKKyAgICAvLyBpc0NoZWNrZWQg
aXMgdXNlZCBieSB0aGUgcmVuZGVyaW5nIHRyZWUvQ1NTIHdoaWxlIGNoZWNrZWQoKSBpcyB1c2Vk
IGJ5IEpTIHRvIGRldGVybWluZSBjaGVja2VkIHN0YXRlCisgICAgdmlydHVhbCBib29sIGlzQ2hl
Y2tlZCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc0luZGV0ZXJtaW5hdGUoKSBjb25zdCB7
IHJldHVybiBpbmRldGVybWluYXRlKCk7IH0KKworICAgIGludCBzaXplKCkgY29uc3Q7CiAKICAg
ICB2b2lkIHNldFR5cGUoY29uc3QgU3RyaW5nJik7CiAKLSAgICB2aXJ0dWFsIFN0cmluZyB2YWx1
ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmLCBib29s
IHNlbmRDaGFuZ2VFdmVudCA9IGZhbHNlKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVGb3JV
c2VyKGNvbnN0IFN0cmluZyYpOworICAgIFN0cmluZyB2YWx1ZSgpIGNvbnN0OworICAgIHZvaWQg
c2V0VmFsdWUoY29uc3QgU3RyaW5nJiwgYm9vbCBzZW5kQ2hhbmdlRXZlbnQgPSBmYWxzZSk7Cisg
ICAgdm9pZCBzZXRWYWx1ZUZvclVzZXIoY29uc3QgU3RyaW5nJik7CiAgICAgLy8gQ2hlY2tzIGlm
IHRoZSBzcGVjaWZpZWQgc3RyaW5nIHdvdWxkIGJlIGEgdmFsaWQgdmFsdWUuCiAgICAgLy8gV2Ug
c2hvdWxkIG5vdCBjYWxsIHRoaXMgZm9yIHR5cGVzIHdpdGggbm8gc3RyaW5nIHZhbHVlIHN1Y2gg
YXMgQ0hFQ0tCT1ggYW5kIFJBRElPLgogICAgIGJvb2wgaXNWYWxpZFZhbHVlKGNvbnN0IFN0cmlu
ZyYpIGNvbnN0OwogCi0gICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFZhbHVlKCkg
Y29uc3Q7CisgICAgU3RyaW5nIHNhbml0aXplVmFsdWUoY29uc3QgU3RyaW5nJikgY29uc3Q7CisK
KyAgICAvLyBUaGUgdmFsdWUgd2hpY2ggaXMgZHJhd24gYnkgYSByZW5kZXJlci4KKyAgICBTdHJp
bmcgdmlzaWJsZVZhbHVlKCkgY29uc3Q7CisgICAgU3RyaW5nIGNvbnZlcnRGcm9tVmlzaWJsZVZh
bHVlKGNvbnN0IFN0cmluZyYpIGNvbnN0OworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3Bl
Y2lmaWVkIHN0cmluZyBjYW4gYmUgc2V0IGFzIHRoZSB2YWx1ZSBvZiBIVE1MSW5wdXRFbGVtZW50
LgorICAgIGJvb2wgaXNBY2NlcHRhYmxlVmFsdWUoY29uc3QgU3RyaW5nJikgY29uc3Q7CisKKyAg
ICBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFZhbHVlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRTdWdn
ZXN0ZWRWYWx1ZShjb25zdCBTdHJpbmcmKTsKIAogICAgIGRvdWJsZSB2YWx1ZUFzRGF0ZSgpIGNv
bnN0OwpAQCAtMTQxLDExICsxNTIsMTAgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIHZhbHVlV2l0
aERlZmF1bHQoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUZyb21SZW5kZXJl
cihjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHNldFZhbHVlRnJvbVJlbmRlcmVyKGNvbnN0IFN0
cmluZyYpOwogICAgIHZvaWQgc2V0RmlsZUxpc3RGcm9tUmVuZGVyZXIoY29uc3QgVmVjdG9yPFN0
cmluZz4mKTsKIAogICAgIGJvb2wgY2FuSGF2ZVNlbGVjdGlvbigpIGNvbnN0OwotICAgIHZpcnR1
YWwgdm9pZCBzZWxlY3QoKSB7IEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZWxlY3QoKTsg
fQogCiAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqKTsKICAg
ICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5k
ZXJTdHlsZSopOwpAQCAtMTc4LDEzICsxODgsMTQgQEAgcHVibGljOgogCiAgICAgYm9vbCBtdWx0
aXBsZSgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIGlzQXV0b2ZpbGxlZCgpIGNvbnN0IHsg
cmV0dXJuIG1faXNBdXRvZmlsbGVkOyB9CisgICAgYm9vbCBpc0F1dG9maWxsZWQoKSBjb25zdCB7
IHJldHVybiBtX2lzQXV0b2ZpbGxlZDsgfQogICAgIHZvaWQgc2V0QXV0b2ZpbGxlZChib29sID0g
dHJ1ZSk7CiAKICAgICBGaWxlTGlzdCogZmlsZXMoKTsKIAogICAgIHZvaWQgYWRkU2VhcmNoUmVz
dWx0KCk7CiAgICAgdm9pZCBvblNlYXJjaCgpOworICAgIGJvb2wgc2VhcmNoRXZlbnRzU2hvdWxk
QmVEaXNwYXRjaGVkKCkgY29uc3Q7CiAKICNpZiBFTkFCTEUoREFUQUxJU1QpCiAgICAgSFRNTEVs
ZW1lbnQqIGxpc3QoKSBjb25zdDsKQEAgLTIwMiw3ICsyMTMsMTIgQEAgcHVibGljOgogICAgIHZv
aWQgdXBkYXRlQ2hlY2tlZFJhZGlvQnV0dG9ucygpOwogCiAgICAgYm9vbCBsYXN0Q2hhbmdlV2Fz
VXNlckVkaXQoKSBjb25zdDsKLSAgICAKKyAgICB2b2lkIGNhY2hlU2VsZWN0aW9uKGludCBzdGFy
dCwgaW50IGVuZCk7CisKKyAgICBzdGF0aWMgU3RyaW5nIHJlcGxhY2VFT0xBbmRMaW1pdExlbmd0
aChjb25zdCBTdHJpbmcmLCBpbnQgbWF4TGVuZ3RoKTsKKworICAgIHN0YXRpYyBjb25zdCBpbnQg
bWF4aW11bUxlbmd0aDsKKwogcHJvdGVjdGVkOgogICAgIEhUTUxJbnB1dEVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50KiwgYm9vbCBjcmVhdGVk
QnlQYXJzZXIpOwogCkBAIC0yMjMsMTggKzIzOSwxMiBAQCBwcml2YXRlOgogCiAgICAgdmlydHVh
bCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sTmFtZSgpIGNvbnN0OwogCi0gICAgLy8g
aXNDaGVja2VkIGlzIHVzZWQgYnkgdGhlIHJlbmRlcmluZyB0cmVlL0NTUyB3aGlsZSBjaGVja2Vk
KCkgaXMgdXNlZCBieSBKUyB0byBkZXRlcm1pbmUgY2hlY2tlZCBzdGF0ZQotICAgIHZpcnR1YWwg
Ym9vbCBpc0NoZWNrZWQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNJbmRldGVybWluYXRl
KCkgY29uc3QgeyByZXR1cm4gaW5kZXRlcm1pbmF0ZSgpOyB9Ci0KICAgICB2aXJ0dWFsIGJvb2wg
aXNUZXh0Rm9ybUNvbnRyb2woKSBjb25zdCB7IHJldHVybiBpc1RleHRGaWVsZCgpOyB9CiAKICAg
ICB2aXJ0dWFsIGJvb2wgY2FuVHJpZ2dlckltcGxpY2l0U3VibWlzc2lvbigpIGNvbnN0IHsgcmV0
dXJuIGlzVGV4dEZpZWxkKCk7IH0KIAogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBm
b3JtQ29udHJvbFR5cGUoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgYm9vbCBzZWFyY2hFdmVudHNT
aG91bGRCZURpc3BhdGNoZWQoKSBjb25zdDsKLQogICAgIHZpcnR1YWwgYm9vbCBzYXZlRm9ybUNv
bnRyb2xTdGF0ZShTdHJpbmcmIHZhbHVlKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcmVzdG9y
ZUZvcm1Db250cm9sU3RhdGUoY29uc3QgU3RyaW5nJik7CiAKQEAgLTI2MSwxMiArMjcxLDYgQEAg
cHJpdmF0ZToKIAogICAgIHZpcnR1YWwgYm9vbCBpc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUqKSBj
b25zdDsKIAotICAgIHZpcnR1YWwgdm9pZCBjYWNoZVNlbGVjdGlvbihpbnQgc3RhcnQsIGludCBl
bmQpOwotCi0gICAgdmlydHVhbCBTdHJpbmcgdmlzaWJsZVZhbHVlKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBTdHJpbmcgY29udmVydEZyb21WaXNpYmxlVmFsdWUoY29uc3QgU3RyaW5nJikgY29uc3Q7
Ci0gICAgdmlydHVhbCBib29sIGlzQWNjZXB0YWJsZVZhbHVlKGNvbnN0IFN0cmluZyYpIGNvbnN0
OwotICAgIHZpcnR1YWwgU3RyaW5nIHNhbml0aXplVmFsdWUoY29uc3QgU3RyaW5nJikgY29uc3Q7
CiAgICAgdmlydHVhbCBib29sIGhhc1VuYWNjZXB0YWJsZVZhbHVlKCkgY29uc3Q7CiAKICAgICB2
aXJ0dWFsIGJvb2wgaXNJblJhbmdlKCkgY29uc3Q7CkBAIC0yODAsNyArMjg0LDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHJlZ2lzdGVyRm9yQWN0aXZhdGlvbkNhbGxiYWNrSWZOZWVkZWQoKTsKICAg
ICB2b2lkIHVucmVnaXN0ZXJGb3JBY3RpdmF0aW9uQ2FsbGJhY2tJZk5lZWRlZCgpOwogCi0gICAg
dmlydHVhbCBib29sIHN1cHBvcnRzTWF4TGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gaXNUZXh0VHlw
ZSgpOyB9CisgICAgYm9vbCBzdXBwb3J0c01heExlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIGlzVGV4
dFR5cGUoKTsgfQogICAgIGJvb2wgaXNUZXh0VHlwZSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBi
b29sIHN1cHBvcnRzUGxhY2Vob2xkZXIoKSBjb25zdDsKQEAgLTI4OCw4ICsyOTIsOCBAQCBwcml2
YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc0VtcHR5U3VnZ2VzdGVkVmFsdWUoKSBjb25zdCB7IHJl
dHVybiBzdWdnZXN0ZWRWYWx1ZSgpLmlzRW1wdHkoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBoYW5k
bGVGb2N1c0V2ZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUJsdXJFdmVudCgpOwotICAg
IHZpcnR1YWwgaW50IGNhY2hlZFNlbGVjdGlvblN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9kYXRh
LmNhY2hlZFNlbGVjdGlvblN0YXJ0KCk7IH0KLSAgICB2aXJ0dWFsIGludCBjYWNoZWRTZWxlY3Rp
b25FbmQoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuY2FjaGVkU2VsZWN0aW9uRW5kKCk7IH0KKyAg
ICB2aXJ0dWFsIGludCBjYWNoZWRTZWxlY3Rpb25TdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fY2Fj
aGVkU2VsZWN0aW9uU3RhcnQ7IH0KKyAgICB2aXJ0dWFsIGludCBjYWNoZWRTZWxlY3Rpb25FbmQo
KSBjb25zdCB7IHJldHVybiBtX2NhY2hlZFNlbGVjdGlvbkVuZDsgfQogCiAgICAgdmlydHVhbCBi
b29sIGlzT3B0aW9uYWxGb3JtQ29udHJvbCgpIGNvbnN0IHsgcmV0dXJuICFpc1JlcXVpcmVkRm9y
bUNvbnRyb2woKTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1JlcXVpcmVkRm9ybUNvbnRyb2woKSBj
b25zdDsKQEAgLTMwMywxMiArMzA3LDI5IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKERBVEFMSVNU
KQogICAgIEhUTUxEYXRhTGlzdEVsZW1lbnQqIGRhdGFMaXN0KCkgY29uc3Q7CiAjZW5kaWYKLQor
ICAgIC8vIFJlcGxhY2VzIENScyBhbmQgTEZzLCBzaHJpbmtzIHRoZSB2YWx1ZSBmb3IgdGhlIHNw
ZWNpZmllZCBtYXhpbXVtIGxlbmd0aC4KKyAgICAvLyBUaGlzIHNob3VsZCBiZSBhcHBsaWVkIHRv
IHZhbHVlcyBzcGVjaWZpZWQgYnkgdXNlcnMuCisgICAgLy8gVGhlIGlucHV0IHN0cmluZyBtYXkg
YmUgYSBmcmFnbWVudCBvZiB0aGUgd2hvbGUgdmFsdWUuCisgICAgU3RyaW5nIHNhbml0aXplVXNl
cklucHV0VmFsdWUoY29uc3QgU3RyaW5nJiwgaW50IG1heExlbmd0aCkgY29uc3Q7CisgICAgdm9p
ZCBub3RpZnlGb3JtU3RhdGVDaGFuZ2VkKCk7CisgICAgdm9pZCB1cGRhdGVWYWx1ZUlmTmVlZGVk
KCk7CiAjaWYgRU5BQkxFKFdDU1MpCi0gICAgdmlydHVhbCBJbnB1dEVsZW1lbnREYXRhIGRhdGEo
KSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KKyAgICBib29sIGlzQ29uZm9ybVRvSW5wdXRNYXNr
KGNvbnN0IFN0cmluZyYpIGNvbnN0OworICAgIGJvb2wgaXNDb25mb3JtVG9JbnB1dE1hc2soVUNo
YXIsIHVuc2lnbmVkKSBjb25zdDsKKyAgICBTdHJpbmcgdmFsaWRhdGVJbnB1dE1hc2soU3RyaW5n
Jik7CiAjZW5kaWYKIAotICAgIElucHV0RWxlbWVudERhdGEgbV9kYXRhOworICAgIEF0b21pY1N0
cmluZyBtX25hbWU7CisgICAgU3RyaW5nIG1fdmFsdWU7CisgICAgU3RyaW5nIG1fc3VnZ2VzdGVk
VmFsdWU7CisgICAgaW50IG1fc2l6ZTsKKyAgICBpbnQgbV9tYXhMZW5ndGg7CisgICAgaW50IG1f
Y2FjaGVkU2VsZWN0aW9uU3RhcnQ7CisgICAgaW50IG1fY2FjaGVkU2VsZWN0aW9uRW5kOworI2lm
IEVOQUJMRShXQ1NTKQorICAgIFN0cmluZyBtX2lucHV0Rm9ybWF0TWFzazsKKyAgICB1bnNpZ25l
ZCBtX21heElucHV0Q2hhcnNBbGxvd2VkOworI2VuZGlmCiAgICAgc2hvcnQgbV9tYXhSZXN1bHRz
OwogICAgIGJvb2wgbV9pc0NoZWNrZWQgOiAxOwogICAgIGJvb2wgbV9yZWZsZWN0c0NoZWNrZWRB
dHRyaWJ1dGUgOiAxOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFy
ZWFFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5j
cHAKaW5kZXggZTA0NjNmZmRlNzkxMjVmYmEyYjE0NmM0Njg0OGM3NGJkN2UwMTcxZS4uYTI5OWIx
OGM2MWUxOWY0MTJkZWUwMzljZGY5MDljMWZhMWZjNTIyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSAi
Rm9ybURhdGFMaXN0LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKLSNpbmNsdWRlICJJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5o
IgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCmluZGV4IGZmZWEy
ZjRlMGIwY2FhZDQ0YjgzNWE2ZDIwYWI1OTljNmQ3YTRjOTQuLmNmODQxYzBiYjYxOWNiN2Y4OTQx
NDg5ZjFlOGNiNTZkODZjY2NkODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4
dEZpZWxkSW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElu
cHV0VHlwZS5jcHAKQEAgLTEyMSw3ICsxMjEsNyBAQCBib29sIFRleHRGaWVsZElucHV0VHlwZTo6
c2hvdWxkVXNlSW5wdXRNZXRob2QoKSBjb25zdAogCiBTdHJpbmcgVGV4dEZpZWxkSW5wdXRUeXBl
OjpzYW5pdGl6ZVZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcG9zZWRWYWx1ZSkKIHsKLSAgICByZXR1
cm4gSW5wdXRFbGVtZW50OjpzYW5pdGl6ZVZhbHVlRm9yVGV4dEZpZWxkKGVsZW1lbnQoKSwgcHJv
cG9zZWRWYWx1ZSk7CisgICAgcmV0dXJuIEhUTUxJbnB1dEVsZW1lbnQ6OnJlcGxhY2VFT0xBbmRM
aW1pdExlbmd0aChwcm9wb3NlZFZhbHVlLCBIVE1MSW5wdXRFbGVtZW50OjptYXhpbXVtTGVuZ3Ro
KTsKIH0KIAogYm9vbCBUZXh0RmllbGRJbnB1dFR5cGU6OnNob3VsZFJlc3BlY3RMaXN0QXR0cmli
dXRlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZS5jcHAKaW5kZXggMzBiZDk2MThhMTk2YzFlMmY0ZGY2ZTRiMjNmMTA0
YTU3NzQxOTQwZi4uM2VhNWRkZDJlZTcwYjY2M2NjNzE3NjhmMDQ5NzE4NmIwMTVjYjljZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZS5jcHAKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5o
IgotI2luY2x1ZGUgIklucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3Mu
aCIKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2
ZW50LmgiCkBAIC03NSw2ICs3NCw4IEBAIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6UmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKE5vZGUqIG5vZGUsIGJvb2wgcGxhY2VoCiAgICAgLCBt
X3NlYXJjaEV2ZW50VGltZXIodGhpcywgJlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2Vh
cmNoRXZlbnRUaW1lckZpcmVkKQogICAgICwgbV9zZWFyY2hQb3B1cCgwKQogeworICAgIEFTU0VS
VChub2RlLT5pc0hUTUxFbGVtZW50KCkpOworICAgIEFTU0VSVChub2RlLT50b0lucHV0RWxlbWVu
dCgpKTsKIH0KIAogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp+UmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lKCkKQEAgLTEwNiw4ICsxMDcsNyBAQCBSZW5kZXJTdHlsZSogUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lOjp0ZXh0QmFzZVN0eWxlKCkgY29uc3QKIAogdm9pZCBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OmFkZFNlYXJjaFJlc3VsdCgpCiB7Ci0gICAgQVNTRVJUKG5v
ZGUoKS0+aXNIVE1MRWxlbWVudCgpKTsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0
YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihub2RlKCkpOworICAgIEhUTUxJbnB1dEVsZW1l
bnQqIGlucHV0ID0gaW5wdXRFbGVtZW50KCk7CiAgICAgaWYgKGlucHV0LT5tYXhSZXN1bHRzKCkg
PD0gMCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMzgsMTMgKzEzOCwxMSBAQCB2b2lkIFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZTo6YWRkU2VhcmNoUmVzdWx0KCkKIAogdm9pZCBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OnN0b3BTZWFyY2hFdmVudFRpbWVyKCkKIHsKLSAgICBBU1NF
UlQobm9kZSgpLT5pc0hUTUxFbGVtZW50KCkpOwogICAgIG1fc2VhcmNoRXZlbnRUaW1lci5zdG9w
KCk7CiB9CiAKIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzaG93UG9wdXAoKQog
ewotICAgIEFTU0VSVChub2RlKCktPmlzSFRNTEVsZW1lbnQoKSk7CiAgICAgaWYgKG1fc2VhcmNo
UG9wdXBJc1Zpc2libGUpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTYwLDcgKzE1OCw3IEBAIHZv
aWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzaG93UG9wdXAoKQogICAgIG1fc2VhcmNo
UG9wdXAtPmxvYWRSZWNlbnRTZWFyY2hlcyhuYW1lLCBtX3JlY2VudFNlYXJjaGVzKTsKIAogICAg
IC8vIFRyaW0gdGhlIHJlY2VudCBzZWFyY2hlcyBsaXN0IGlmIHRoZSBtYXhpbXVtIHNpemUgaGFz
IGNoYW5nZWQgc2luY2Ugd2UgbGFzdCBzYXZlZC4KLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1
dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihub2RlKCkpOworICAgIEhUTUxJbnB1
dEVsZW1lbnQqIGlucHV0ID0gaW5wdXRFbGVtZW50KCk7CiAgICAgaWYgKHN0YXRpY19jYXN0PGlu
dD4obV9yZWNlbnRTZWFyY2hlcy5zaXplKCkpID4gaW5wdXQtPm1heFJlc3VsdHMoKSkgewogICAg
ICAgICBkbyB7CiAgICAgICAgICAgICBtX3JlY2VudFNlYXJjaGVzLnJlbW92ZUxhc3QoKTsKQEAg
LTE3NCw3ICsxNzIsNiBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2hvd1Bv
cHVwKCkKIAogdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmhpZGVQb3B1cCgpCiB7
Ci0gICAgQVNTRVJUKG5vZGUoKS0+aXNIVE1MRWxlbWVudCgpKTsKICAgICBpZiAobV9zZWFyY2hQ
b3B1cCkKICAgICAgICAgbV9zZWFyY2hQb3B1cC0+cG9wdXBNZW51KCktPmhpZGUoKTsKIH0KQEAg
LTE4OCwxOCArMTg1LDE2IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzdWJ0
cmVlSGFzQ2hhbmdlZCgpCiAgICAgYm9vbCB3YXNDaGFuZ2VkID0gZWxlbWVudC0+d2FzQ2hhbmdl
ZFNpbmNlTGFzdEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKTsKICAgICBlbGVtZW50LT5zZXRDaGFu
Z2VkU2luY2VMYXN0Rm9ybUNvbnRyb2xDaGFuZ2VFdmVudCh0cnVlKTsKIAotICAgIElucHV0RWxl
bWVudCogaW5wdXQgPSBpbnB1dEVsZW1lbnQoKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1
dCA9IGlucHV0RWxlbWVudCgpOwogICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gY2FsbCBzYW5pdGl6
ZVVzZXJJbnB1dFZhbHVlKCkgZnVuY3Rpb24gaGVyZSBiZWNhdXNlCi0gICAgLy8gSW5wdXRFbGVt
ZW50OjpoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCgpIGhhcyBhbHJlYWR5IGNhbGxlZAor
ICAgIC8vIEhUTUxJbnB1dEVsZW1lbnQ6OmhhbmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KCkg
aGFzIGFscmVhZHkgY2FsbGVkCiAgICAgLy8gc2FuaXRpemVVc2VySW5wdXRWYWx1ZSgpLgogICAg
IC8vIHNhbml0aXplVmFsdWUoKSBpcyBuZWVkZWQgYmVjYXVzZSBJTUUgaW5wdXQgZG9lc24ndCBk
aXNwYXRjaCBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC4KICAgICBTdHJpbmcgdmFsdWUgPSB0ZXh0
KCk7CiAgICAgaWYgKGlucHV0LT5pc0FjY2VwdGFibGVWYWx1ZSh2YWx1ZSkpCiAgICAgICAgIGlu
cHV0LT5zZXRWYWx1ZUZyb21SZW5kZXJlcihpbnB1dC0+c2FuaXRpemVWYWx1ZShpbnB1dC0+Y29u
dmVydEZyb21WaXNpYmxlVmFsdWUodmFsdWUpKSk7Ci0gICAgaWYgKG5vZGUoKS0+aXNIVE1MRWxl
bWVudCgpKSB7Ci0gICAgICAgIC8vIFJlY2FsYyBmb3IgOmludmFsaWQgYW5kIGhhc1VuYWNjZXB0
YWJsZVZhbHVlKCkgY2hhbmdlLgotICAgICAgICBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50
Kj4oaW5wdXQpLT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7Ci0gICAgfQorICAgIC8vIFJlY2FsYyBm
b3IgOmludmFsaWQgYW5kIGhhc1VuYWNjZXB0YWJsZVZhbHVlKCkgY2hhbmdlLgorICAgIGlucHV0
LT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAKICAgICBpZiAobV9jYW5jZWxCdXR0b24pCiAgICAg
ICAgIHVwZGF0ZUNhbmNlbEJ1dHRvblZpc2liaWxpdHkoKTsKQEAgLTcxMCw3ICs3MDUsNyBAQCB2
b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6dXBkYXRlRnJvbUVsZW1lbnQoKQogICAg
ICAgICAgICAgLy8gRm9yIEhUTUxJbnB1dEVsZW1lbnQsIHVwZGF0ZSB0aGUgcmVuZGVyZXIgdmFs
dWUgaWYgdGhlIGZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIoKQogICAgICAgICAgICAg
Ly8gZmxhZyBpcyBmYWxzZS4gSXQgcHJvdGVjdHMgYW4gdW5hY2NlcHRhYmxlIHJlbmRlcmVyIHZh
bHVlIGZyb20KICAgICAgICAgICAgIC8vIGJlaW5nIG92ZXJ3cml0dGVuIHdpdGggdGhlIERPTSB2
YWx1ZS4KLSAgICAgICAgICAgIGlmICghc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5v
ZGUoKSktPmZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIoKSkKKyAgICAgICAgICAgIGlm
ICghaW5wdXRFbGVtZW50KCktPmZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIoKSkKICAg
ICAgICAgICAgICAgICBzZXRJbm5lclRleHRWYWx1ZShpbnB1dEVsZW1lbnQoKS0+dmlzaWJsZVZh
bHVlKCkpOwogICAgICAgICB9CiAgICAgfQpAQCAtNzU1LDggKzc1MCw2IEBAIFBhc3NSZWZQdHI8
UmVuZGVyU3R5bGU+IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y3JlYXRlSW5uZXJUZXh0
U3R5bGUoY29uc3QKIAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjpjcmVhdGVJbm5lckJsb2NrU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0
U3R5bGUpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKG5vZGUoKS0+aXNIVE1MRWxlbWVudCgpKTsKLQog
ICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gaW5uZXJCbG9ja1N0eWxlID0gUmVuZGVyU3R5bGU6OmNy
ZWF0ZSgpOwogICAgIGlubmVyQmxvY2tTdHlsZS0+aW5oZXJpdEZyb20oc3RhcnRTdHlsZSk7CiAK
QEAgLTc3MSw4ICs3NjQsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OmNyZWF0ZUlubmVyQmxvY2tTdHlsZShjb25zdAogCiBQYXNzUmVmUHRy
PFJlbmRlclN0eWxlPiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZVJlc3VsdHNC
dXR0b25TdHlsZShjb25zdCBSZW5kZXJTdHlsZSogc3RhcnRTdHlsZSkgY29uc3QKIHsKLSAgICBB
U1NFUlQobm9kZSgpLT5pc0hUTUxFbGVtZW50KCkpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlu
cHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5vZGUoKSk7CisgICAgSFRNTElu
cHV0RWxlbWVudCogaW5wdXQgPSBpbnB1dEVsZW1lbnQoKTsKIAogICAgIFJlZlB0cjxSZW5kZXJT
dHlsZT4gcmVzdWx0c0Jsb2NrU3R5bGU7CiAgICAgaWYgKGlucHV0LT5tYXhSZXN1bHRzKCkgPCAw
KQpAQCAtNzkzLDcgKzc4NSw2IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6Y3JlYXRlUmVzdWx0c0J1dHRvblN0eWxlKGNvCiAKIFBhc3NSZWZQ
dHI8UmVuZGVyU3R5bGU+IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y3JlYXRlQ2FuY2Vs
QnV0dG9uU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUpIGNvbnN0CiB7Ci0gICAg
QVNTRVJUKG5vZGUoKS0+aXNIVE1MRWxlbWVudCgpKTsKICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+
IGNhbmNlbEJsb2NrU3R5bGU7CiAgICAgCiAgICAgaWYgKFJlZlB0cjxSZW5kZXJTdHlsZT4gcHNl
dWRvU3R5bGUgPSBnZXRDYWNoZWRQc2V1ZG9TdHlsZShTRUFSQ0hfQ0FOQ0VMX0JVVFRPTikpCkBA
IC04MTEsNyArODAyLDYgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjpjcmVhdGVDYW5jZWxCdXR0b25TdHlsZShjb24KIAogUGFzc1JlZlB0cjxS
ZW5kZXJTdHlsZT4gUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjcmVhdGVJbm5lclNwaW5C
dXR0b25TdHlsZSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKG5vZGUoKS0+aXNIVE1MRWxlbWVudCgp
KTsKICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGJ1dHRvblN0eWxlID0gZ2V0Q2FjaGVkUHNldWRv
U3R5bGUoSU5ORVJfU1BJTl9CVVRUT04pOwogICAgIGlmICghYnV0dG9uU3R5bGUpCiAgICAgICAg
IGJ1dHRvblN0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwpAQCAtODIxLDcgKzgxMSw2IEBA
IFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y3Jl
YXRlSW5uZXJTcGluQnV0dG9uU3R5bGUoCiAKIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZTo6Y3JlYXRlT3V0ZXJTcGluQnV0dG9uU3R5bGUoKSBjb25z
dAogewotICAgIEFTU0VSVChub2RlKCktPmlzSFRNTEVsZW1lbnQoKSk7CiAgICAgUmVmUHRyPFJl
bmRlclN0eWxlPiBidXR0b25TdHlsZSA9IGdldENhY2hlZFBzZXVkb1N0eWxlKE9VVEVSX1NQSU5f
QlVUVE9OKTsKICAgICBpZiAoIWJ1dHRvblN0eWxlKQogICAgICAgICBidXR0b25TdHlsZSA9IFJl
bmRlclN0eWxlOjpjcmVhdGUoKTsKQEAgLTgzMiw3ICs4MjEsNiBAQCBQYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZU91dGVyU3BpbkJ1dHRv
blN0eWxlKAogI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxl
PiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZVNwZWVjaEJ1dHRvblN0eWxlKCkg
Y29uc3QKIHsKLSAgICBBU1NFUlQobm9kZSgpLT5pc0hUTUxFbGVtZW50KCkpOwogICAgIFJlZlB0
cjxSZW5kZXJTdHlsZT4gYnV0dG9uU3R5bGUgPSBnZXRDYWNoZWRQc2V1ZG9TdHlsZShJTlBVVF9T
UEVFQ0hfQlVUVE9OKTsKICAgICBpZiAoIWJ1dHRvblN0eWxlKQogICAgICAgICBidXR0b25TdHls
ZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKQEAgLTg1OCw5ICs4NDYsNyBAQCB2b2lkIFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZTo6dXBkYXRlQ2FuY2VsQnV0dG9uVmlzaWJpbGl0eSgpIGNv
bnN0CiAKIEVWaXNpYmlsaXR5IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6dmlzaWJpbGl0
eUZvckNhbmNlbEJ1dHRvbigpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKG5vZGUoKS0+aXNIVE1MRWxl
bWVudCgpKTsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJ
bnB1dEVsZW1lbnQqPihub2RlKCkpOwotICAgIHJldHVybiBpbnB1dC0+dmFsdWUoKS5pc0VtcHR5
KCkgPyBISURERU4gOiBWSVNJQkxFOworICAgIHJldHVybiBpbnB1dEVsZW1lbnQoKS0+dmFsdWUo
KS5pc0VtcHR5KCkgPyBISURERU4gOiBWSVNJQkxFOwogfQogCiBjb25zdCBBdG9taWNTdHJpbmcm
IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6YXV0b3NhdmVOYW1lKCkgY29uc3QKQEAgLTg3
MCwxMyArODU2LDEyIEBAIGNvbnN0IEF0b21pY1N0cmluZyYgUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjphdXRvc2F2ZU5hbWUoKSBjb25zdAogCiB2b2lkIFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6c3RhcnRTZWFyY2hFdmVudFRpbWVyKCkKIHsKLSAgICBBU1NFUlQobm9kZSgpLT5p
c0hUTUxFbGVtZW50KCkpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRleHQoKS5sZW5ndGgoKTsK
IAogICAgIC8vIElmIHRoZXJlJ3Mgbm8gdGV4dCwgZmlyZSB0aGUgZXZlbnQgcmlnaHQgYXdheS4K
ICAgICBpZiAoIWxlbmd0aCkgewogICAgICAgICBzdG9wU2VhcmNoRXZlbnRUaW1lcigpOwotICAg
ICAgICBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obm9kZSgpKS0+b25TZWFyY2goKTsK
KyAgICAgICAgaW5wdXRFbGVtZW50KCktPm9uU2VhcmNoKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKQEAgLTg4NywxNiArODcyLDE0IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lOjpzdGFydFNlYXJjaEV2ZW50VGltZXIoKQogCiB2b2lkIFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6c2VhcmNoRXZlbnRUaW1lckZpcmVkKFRpbWVyPFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZT4qKQogewotICAgIEFTU0VSVChub2RlKCktPmlzSFRNTEVsZW1lbnQoKSk7Ci0gICAg
c3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5vZGUoKSktPm9uU2VhcmNoKCk7CisgICAg
aW5wdXRFbGVtZW50KCktPm9uU2VhcmNoKCk7CiB9CiAKIC8vIFBvcHVwTWVudUNsaWVudCBtZXRo
b2RzCiB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6dmFsdWVDaGFuZ2VkKHVuc2ln
bmVkIGxpc3RJbmRleCwgYm9vbCBmaXJlRXZlbnRzKQogewotICAgIEFTU0VSVChub2RlKCktPmlz
SFRNTEVsZW1lbnQoKSk7CiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4obGlzdEluZGV4KSA8
IGxpc3RTaXplKCkpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8
SFRNTElucHV0RWxlbWVudCo+KG5vZGUoKSk7CisgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQg
PSBpbnB1dEVsZW1lbnQoKTsKICAgICBpZiAoc3RhdGljX2Nhc3Q8aW50PihsaXN0SW5kZXgpID09
IChsaXN0U2l6ZSgpIC0gMSkpIHsKICAgICAgICAgaWYgKGZpcmVFdmVudHMpIHsKICAgICAgICAg
ICAgIG1fcmVjZW50U2VhcmNoZXMuY2xlYXIoKTsKQEAgLTEwMzAsOCArMTAxMyw3IEBAIGJvb2wg
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppdGVtSXNTZWxlY3RlZCh1bnNpZ25lZCkgY29u
c3QKIAogdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNldFRleHRGcm9tSXRlbSh1
bnNpZ25lZCBsaXN0SW5kZXgpCiB7Ci0gICAgQVNTRVJUKG5vZGUoKS0+aXNIVE1MRWxlbWVudCgp
KTsKLSAgICBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obm9kZSgpKS0+c2V0VmFsdWUo
aXRlbVRleHQobGlzdEluZGV4KSk7CisgICAgaW5wdXRFbGVtZW50KCktPnNldFZhbHVlKGl0ZW1U
ZXh0KGxpc3RJbmRleCkpOwogfQogCiBGb250U2VsZWN0b3IqIFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6Zm9udFNlbGVjdG9yKCkgY29uc3QKQEAgLTExMTgsNyArMTEwMCw3IEBAIFBhc3NS
ZWZQdHI8U2Nyb2xsYmFyPiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZVNjcm9s
bGJhcihTY3JvbGxhYmxlQXJlCiAgICAgcmV0dXJuIHdpZGdldC5yZWxlYXNlKCk7CiB9CiAKLUlu
cHV0RWxlbWVudCogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppbnB1dEVsZW1lbnQoKSBj
b25zdAorSFRNTElucHV0RWxlbWVudCogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppbnB1
dEVsZW1lbnQoKSBjb25zdAogewogICAgIHJldHVybiBub2RlKCktPnRvSW5wdXRFbGVtZW50KCk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lLmgKaW5kZXggMThlNWZjOGJjNDkwM2IzYzJiOGM1YTJmNTM3Y2Q4OGM2Nzhh
NmViYS4uZjQzYWExYjNhOWFkMmIyMDU4MGExYWY5NDBlMTJjZTRkZjIzYThjNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmUuaApAQCAtMzAsNyArMzAsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIElu
cHV0RWxlbWVudDsKK2NsYXNzIEhUTUxJbnB1dEVsZW1lbnQ7CiBjbGFzcyBJbnB1dEZpZWxkU3Bl
ZWNoQnV0dG9uRWxlbWVudDsKIGNsYXNzIFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uRWxlbWVudDsK
IGNsYXNzIFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbkVsZW1lbnQ7CkBAIC0xNDIsNyArMTQyLDcg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3coKSBjb25zdDsK
ICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoU2Nyb2xs
YWJsZUFyZWEqLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUpOwog
Ci0gICAgSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQoKSBjb25zdDsKKyAgICBIVE1MSW5wdXRF
bGVtZW50KiBpbnB1dEVsZW1lbnQoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgaW50IHRleHRCbG9j
a0luc2V0TGVmdCgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IHRleHRCbG9ja0luc2V0UmlnaHQo
KSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCmluZGV4IGZj
ZDI2ODhhZGI1M2FlNWY0YjNlZDg4ZTMyNTdkMjUzM2FlODBmMTUuLmI3OGRmZGMzMzljOGMwNTEw
NzQyYzVjZjg0MTIzNjcxNWUyYzdiZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lLmNwcApAQCAtNzUxLDcgKzc1MSw3IEBAIGJvb2wgUmVuZGVyVGhlbWU6OmlzQ2hlY2tl
ZChjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0CiAgICAgaWYgKCFvLT5ub2RlKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gby0+
bm9kZSgpLT50b0lucHV0RWxlbWVudCgpOworICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxl
bWVudCA9IG8tPm5vZGUoKS0+dG9JbnB1dEVsZW1lbnQoKTsKICAgICBpZiAoIWlucHV0RWxlbWVu
dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC03NjMsNyArNzYzLDcgQEAgYm9vbCBSZW5k
ZXJUaGVtZTo6aXNJbmRldGVybWluYXRlKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKICAg
ICBpZiAoIW8tPm5vZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSW5wdXRFbGVt
ZW50KiBpbnB1dEVsZW1lbnQgPSBvLT5ub2RlKCktPnRvSW5wdXRFbGVtZW50KCk7CisgICAgSFRN
TElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gby0+bm9kZSgpLT50b0lucHV0RWxlbWVudCgp
OwogICAgIGlmICghaW5wdXRFbGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTk2
NSw3ICs5NjUsNyBAQCB2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKENT
U1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbgogfQogI2VuZGlmCiAKLWJvb2wg
UmVuZGVyVGhlbWU6OnNob3VsZEhhdmVTcGluQnV0dG9uKElucHV0RWxlbWVudCogaW5wdXRFbGVt
ZW50KSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZTo6c2hvdWxkSGF2ZVNwaW5CdXR0b24oSFRNTElu
cHV0RWxlbWVudCogaW5wdXRFbGVtZW50KSBjb25zdAogewogICAgIHJldHVybiBpbnB1dEVsZW1l
bnQtPmlzU3RlcHBhYmxlKCkgJiYgIWlucHV0RWxlbWVudC0+aXNSYW5nZUNvbnRyb2woKTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgKaW5kZXggZTEzZTFiYTA0MWU5NWIw
ZGMwMGIzMTk1Zjk3MTEzYjAzZDIzYjljNS4uMTU3YmEzYTVkMmQ4YWU2OGZhOTQwYjcyOGFlZjg4
Y2I1YWUwM2JmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgKQEAgLTM2
LDYgKzM2LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRWxlbWVudDsKK2NsYXNz
IEhUTUxJbnB1dEVsZW1lbnQ7CiBjbGFzcyBQb3B1cE1lbnU7CiBjbGFzcyBSZW5kZXJNZW51TGlz
dDsKICNpZiBFTkFCTEUoTUVURVJfVEFHKQpAQCAtMjAxLDcgKzIwMiw3IEBAIHB1YmxpYzoKICNl
bmRpZgogICAgIAogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTaG93UGxhY2Vob2xkZXJXaGVuRm9j
dXNlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIHNob3VsZEhh
dmVTcGluQnV0dG9uKElucHV0RWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzaG91
bGRIYXZlU3BpbkJ1dHRvbihIVE1MSW5wdXRFbGVtZW50KikgY29uc3Q7CiAKIHByb3RlY3RlZDoK
ICAgICAvLyBUaGUgcGxhdGZvcm0gc2VsZWN0aW9uIGNvbG9yLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwppbmRleCAzYzFjYzUyMzgxMTA5NTVkZDk4ODU1M2RiYzNhNGFkZDM1MWU3YjdhLi5mMDQ3
NmU5ZGI3NjM3MTFhZGJlYjU3NmNhZWFjMjE4MTk2MjJlNTU1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDExLTA1LTA1ICBLZW50IFRhbXVyYSAgPHRrZW50
QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBFbGltaW5hdGUgV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LntjcHAsaH0KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMjYyCisKKyAgICAg
ICAgKiBzcmMvV2ViSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6dG9XZWJJbnB1
dEVsZW1lbnQpOgorCiAyMDExLTA1LTAzICBIYW5zIFdlbm5ib3JnICA8aGFuc0BjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU3RldmUgQmxvY2suCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbnB1dEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViSW5wdXRFbGVtZW50LmNwcAppbmRleCAzNDQ4YmI2YjMyODA2ZGI3
YWRkMTRhMjZlMTA3NWIzYWU2MTY0NGY2Li44YTIxZWQ5MWRmYWI4Nzk0NjFhOWZlMzI4Nzk2YTE4
NjFkNmFmZWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbnB1
dEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklucHV0RWxl
bWVudC5jcHAKQEAgLTE1Miw3ICsxNTIsNyBAQCBib29sIFdlYklucHV0RWxlbWVudDo6aXNDaGVj
a2VkKCkgY29uc3QKIAogaW50IFdlYklucHV0RWxlbWVudDo6ZGVmYXVsdE1heExlbmd0aCgpCiB7
Ci0gICAgcmV0dXJuIEhUTUxJbnB1dEVsZW1lbnQ6OnNfbWF4aW11bUxlbmd0aDsKKyAgICByZXR1
cm4gSFRNTElucHV0RWxlbWVudDo6bWF4aW11bUxlbmd0aDsKIH0KIAogV2ViSW5wdXRFbGVtZW50
OjpXZWJJbnB1dEVsZW1lbnQoY29uc3QgUGFzc1JlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiYgZWxl
bSkKQEAgLTE3MywxMiArMTczLDEwIEBAIFdlYklucHV0RWxlbWVudDo6b3BlcmF0b3IgUGFzc1Jl
ZlB0cjxIVE1MSW5wdXRFbGVtZW50PigpIGNvbnN0CiAKIFdlYklucHV0RWxlbWVudCogdG9XZWJJ
bnB1dEVsZW1lbnQoV2ViRWxlbWVudCogd2ViRWxlbWVudCkKIHsKLSAgICBJbnB1dEVsZW1lbnQq
IGlucHV0RWxlbWVudCA9IHdlYkVsZW1lbnQtPnVud3JhcDxFbGVtZW50PigpLT50b0lucHV0RWxl
bWVudCgpOworICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IHdlYkVsZW1lbnQt
PnVud3JhcDxFbGVtZW50PigpLT50b0lucHV0RWxlbWVudCgpOwogICAgIGlmICghaW5wdXRFbGVt
ZW50KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIEFTU0VSVCh3ZWJFbGVtZW50LT51bndyYXA8
RWxlbWVudD4oKS0+aXNIVE1MRWxlbWVudCgpKTsKLQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxX
ZWJJbnB1dEVsZW1lbnQqPih3ZWJFbGVtZW50KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5j
cHAKaW5kZXggMjkwM2NlZWQ5YjgyMjU2Yjk4OWNmZmU0ZWM2NGIzZDhjNTc4MmZhOC4uYWI1NmE3
NDYyZjZjYzRhZmUzZWQ3ZmYwN2FjMDRmNWViMGJmZjcwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRH
dGsuY3BwCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSAiR0NDb250cm9sbGVyLmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgot
I2luY2x1ZGUgIklucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCiAjaW5j
bHVkZSAiSlNEb2N1bWVudC5oIgogI2luY2x1ZGUgIkpTRWxlbWVudC5oIgpAQCAtNzUwLDExICs3
NDksMTEgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNldEF1dG9maWxsZWQoSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgbm8KICAgICBFbGVtZW50KiBlbGVtZW50ID0g
dG9FbGVtZW50KHRvSlMoZXhlYywgbm9kZU9iamVjdCkpOwogICAgIGlmICghZWxlbWVudCkKICAg
ICAgICAgcmV0dXJuOwotICAgIElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gZWxlbWVudC0+
dG9JbnB1dEVsZW1lbnQoKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBl
bGVtZW50LT50b0lucHV0RWxlbWVudCgpOwogICAgIGlmICghaW5wdXRFbGVtZW50KQogICAgICAg
ICByZXR1cm47CiAKLSAgICBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oaW5wdXRFbGVt
ZW50KS0+c2V0QXV0b2ZpbGxlZChhdXRvZmlsbGVkKTsKKyAgICBpbnB1dEVsZW1lbnQtPnNldEF1
dG9maWxsZWQoYXV0b2ZpbGxlZCk7CiB9CiAKIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3Rr
OjpzZXRWYWx1ZUZvclVzZXIoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgbm9kZU9i
amVjdCwgSlNTdHJpbmdSZWYgdmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0Fw
aS9xd2VicGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKaW5kZXgg
YjQ1OWNiMmEzYmFiZDA0MGQ1OWM2OTg2YzQzMTMxNGFlZDhjMjBjYi4uOTc1YzQ0YTBkZDU3ZmIy
MjliNGVkNThjMDQ1OWViODcxMmZhNmIzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9B
cGkvcXdlYnBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcApA
QCAtMTQ0Niw3ICsxNDQ2LDcgQEAgUVZhcmlhbnQgUVdlYlBhZ2U6OmlucHV0TWV0aG9kUXVlcnko
UXQ6OklucHV0TWV0aG9kUXVlcnkgcHJvcGVydHkpIGNvbnN0CiAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gUVZhcmlhbnQoaW5wdXRFbGVtZW50LT5tYXhMZW5ndGgoKSk7CiAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IFFWYXJpYW50KElucHV0RWxlbWVudDo6c19tYXhpbXVtTGVuZ3RoKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gUVZhcmlhbnQoSFRNTElucHV0RWxlbWVudDo6bWF4aW11bUxlbmd0aCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gUVZhcmlhbnQoMCk7CiAgICAgICAgIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVT
dXBwb3J0UXQuY3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVy
VHJlZVN1cHBvcnRRdC5jcHAKaW5kZXggOWZhNDMyNGUxMWFmMDk2N2VlZDlmOWEwOWFiZmEzZGFk
Y2M3Nzg2NC4uZTQwM2EwNjI2YjUxY2I4YmIwYjEyNTIxODI0ZjMwOTRjNGIwNDZhNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVy
VHJlZVN1cHBvcnRRdC5jcHAKQEAgLTUzLDcgKzUzLDYgQEAKICNpbmNsdWRlICJHZW9sb2NhdGlv
blBvc2l0aW9uLmgiCiAjaW5jbHVkZSAiSGlzdG9yeUl0ZW0uaCIKICNpbmNsdWRlICJIVE1MSW5w
dXRFbGVtZW50LmgiCi0jaW5jbHVkZSAiSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVj
dG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIk5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiTm90aWZp
Y2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuaCIKQEAgLTI0MywxMSArMjQyLDExIEBAIHZvaWQgRHVt
cFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldEF1dG9maWxsZWQoY29uc3QgUVdlYkVsZW1lbnQmIGVs
ZW1lbnQsIGJvb2wgaXNBCiAgICAgV2ViQ29yZTo6RWxlbWVudCogd2ViRWxlbWVudCA9IGVsZW1l
bnQubV9lbGVtZW50OwogICAgIGlmICghd2ViRWxlbWVudCkKICAgICAgICAgcmV0dXJuOwotICAg
IElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gd2ViRWxlbWVudC0+dG9JbnB1dEVsZW1lbnQo
KTsKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSB3ZWJFbGVtZW50LT50b0lu
cHV0RWxlbWVudCgpOwogICAgIGlmICghaW5wdXRFbGVtZW50KQogICAgICAgICByZXR1cm47CiAK
LSAgICBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oaW5wdXRFbGVtZW50KS0+c2V0QXV0
b2ZpbGxlZChpc0F1dG9maWxsZWQpOworICAgIGlucHV0RWxlbWVudC0+c2V0QXV0b2ZpbGxlZChp
c0F1dG9maWxsZWQpOwogfQogCiB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRKYXZh
U2NyaXB0UHJvZmlsaW5nRW5hYmxlZChRV2ViRnJhbWUqIGZyYW1lLCBib29sIGVuYWJsZWQpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92460</attachid>
            <date>2011-05-05 13:55:13 -0700</date>
            <delta_ts>2011-05-05 14:54:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60262-20110506055508.patch</filename>
            <type>text/plain</type>
            <size>99789</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODU4NDcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggOTI3OWIw
ZmYwYzIwMTQzZGNhZGIzMmNiNTY4NjdhMDdmYzUyZDMzMS4uY2QxMWQ2YzgwNGZjODc0OGI5YzVi
MzkzNzgwNTM0YzJkZDY1ZWM4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTU3MCw3ICs1NzAs
NiBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgZG9tL0V4Y2VwdGlvbkJhc2UuY3BwCiAgICAg
ZG9tL0V4Y2VwdGlvbkNvZGUuY3BwCiAgICAgZG9tL0ljb25VUkwuY3BwCi0gICAgZG9tL0lucHV0
RWxlbWVudC5jcHAKICAgICBkb20vS2V5Ym9hcmRFdmVudC5jcHAKICAgICBkb20vTWVzc2FnZUNo
YW5uZWwuY3BwCiAgICAgZG9tL01lc3NhZ2VFdmVudC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3Y2E4OGQ2
MDc3YTBiNmE0ZWI5Yzc3MWFkZGExODJiMWYyZjdhZTAwLi4wNjk2ZjkxZjQ4ZDI1NjQwNmEyYWYz
YzYzMzliZjExYTQwMmZjYmUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTI4IEBACisyMDExLTA1
LTA1ICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbGltaW5hdGUgV2ViQ29yZS9kb20vSW5w
dXRFbGVtZW50LntjcHAsaH0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTYwMjYyCisKKyAgICAgICAgLSBGb2xkIGluIGFsbCBvZiB0aGUgY29kZSBvZiBJ
bnB1dEVsZW1lbnQue2NwcCxofSBpbnRvIEhUTUxJbnB1dEVsZW1lbnQKKyAgICAgICAgICBhbmQg
VGV4dEZpZWxkSW5wdXRUeXBlLgorICAgICAgICAtIENoYW5nZSB0aGUgcmV0dXJuIHR5cGUgY2hh
bmdlIG9mIE5vZGU6OnRvSW5wdXRFbGVtZW50KCk6CisgICAgICAgICAgSW5wdXRFbGVtZW50KiAt
PiBIVE1MSW5wdXRFbGVtZW50KgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyBjaGFuZ2Ug
c2hvdWxkIG5vdCBjaGFuZ2UgdGhlIGV4aXN0aW5nIGJlaGF2aW91ci4KKworICAgICAgICAqIENN
YWtlTGlzdHMudHh0OiBSZW1vdmUgSW5wdW50RWxlbWVudC5jcHAgYW5kL29yIElucHV0RWxlbWVu
dC5oLgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06IGRpdHRvLgorICAgICAgICAqIFdl
YkNvcmUuZXhwLmluOiBBZGQgc3ltYm9scyBvZiBmdW5jdGlvbnMgZXhwb3NlZCB0byBXZWJLaXQu
CisgICAgICAgICogV2ViQ29yZS5neXBpOiBSZW1vdmUgSW5wdW50RWxlbWVudC5jcHAgYW5kL29y
IElucHV0RWxlbWVudC5oLgorICAgICAgICAqIFdlYkNvcmUucHJvOiBkaXR0by4KKyAgICAgICAg
KiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajogZGl0dG8uCisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBkaXR0by4KKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6
dGV4dE1hcmtlckRhdGFGb3JWaXNpYmxlUG9zaXRpb24pOgorICAgICAgICAgIEZvbGxvdyB0aGUg
cmV0dXJuIHR5cGUgY2hhbmdlIG9mIE5vZGU6OnRvSW5wdXRFbGVtZW50KCkuCisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzUGFzc3dvcmRGaWVsZCk6IGRpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNJbmRldGVy
bWluYXRlKTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0Ojppc05hdGl2ZUNoZWNrYm94T3JSYWRpbyk6IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNDaGVja2VkKTogZGl0dG8uCisgICAgICAgICog
Y3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxl
Y3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KTogZGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IpOiBk
aXR0by4KKyAgICAgICAgKiBkb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDaGVja2VkUmFkaW9CdXR0b25zOjpyZW1vdmVCdXR0b24pOiBkaXR0by4KKyAgICAg
ICAgKiBkb20vRE9NQWxsSW5PbmUuY3BwOiBSZW1vdmUgSW5wdXRFbGVtZW50LmguCisgICAgICAg
ICogZG9tL0lucHV0RWxlbWVudC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogZG9tL0lucHV0RWxl
bWVudC5oOiBSZW1vdmVkLgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok5vZGU6OnRvSW5wdXRFbGVtZW50KToKKyAgICAgICAgICBDaGFuZ2UgdGhlIHJldHVybiB0
eXBlIGZyb20gSW5wdXRFbGVtZW50KiB0byBIVE1MSW5wdXRFbGVtZW50Ki4KKyAgICAgICAgKiBk
b20vTm9kZS5oOiBkaXR0by4KKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6SFRNTElucHV0RWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojpmb3JtQ29udHJvbE5hbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6dG9vTG9uZyk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MSW5wdXRFbGVtZW50Ojp1cGRhdGVGb2N1c0FwcGVhcmFuY2UpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6YWJvdXRUb1VubG9hZCk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MSW5wdXRFbGVtZW50OjpoYW5kbGVGb2N1c0V2ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmhhbmRsZUJsdXJFdmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MSW5wdXRFbGVtZW50Ojp1cGRhdGVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJ
bnB1dEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxJbnB1dEVsZW1lbnQ6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVu
dDo6Y29weU5vbkF0dHJpYnV0ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElu
cHV0RWxlbWVudDo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6
c3VnZ2VzdGVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0
U3VnZ2VzdGVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWVGcm9t
UmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0RmlsZUxp
c3RGcm9tUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0
RGVmYXVsdE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6bWF4TGVu
Z3RoKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmNhY2hlU2VsZWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OmZvcm1hdENvZGVzKTogTW92ZWQgZnJvbSBJbnB1dEVsZW1l
bnQuCisgICAgICAgIChXZWJDb3JlOjpjdXJzb3JQb3NpdGlvblRvTWFza0luZGV4KTogZGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojppc0NvbmZvcm1Ub0lucHV0TWFz
ayk6IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6dmFsaWRhdGVJ
bnB1dE1hc2spOiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNl
dFdhcElucHV0Rm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6Omhh
bmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1
dEVsZW1lbnQ6Om5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TElucHV0RWxlbWVudDo6dXBkYXRlVmFsdWVJZk5lZWRlZCk6CisgICAgICAgICogaHRtbC9IVE1M
SW5wdXRFbGVtZW50Lmg6CisgICAgICAgICAgLSBBZGQgZGF0YSBtZW1iZXJzIHdoaWNoIHdlcmUg
ZGVmaW5lZCBpbiBJbnB1dEVsZW1lbnREYXRhLgorICAgICAgICAgIC0gTWFrZSBzb21lIGZ1bmN0
aW9ucyBwdWJsaWMgYmVjYXVzZSB0aGUgcHVibGljIGludGVyZmFjZSBJbnB1dEVsZW1lbnQgaXMg
cmVtb3ZlZC4KKyAgICAgICAgICAtIE1ha2Ugc29tZSBmdW5jdGlvbnMgbm9uLXZpcnR1YWwgYmVj
YXVzZSB0aGV5IGRvbid0IG92ZXJyaWRlCisgICAgICAgICAgICBjb3JyZXNwb25kaW5nIHZpcnR1
YWwgZnVuY3Rpb25zIG9mIElucHV0RWxlbWVudCBhbnltb3JlLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTElucHV0RWxlbWVudDo6dG9JbnB1dEVsZW1lbnQpOgorICAgICAgICAgIEZvbGxvdyB0aGUg
cmV0dXJuIHR5cGUgY2hhbmdlIG9mIE5vZGU6OnRvSW5wdXRFbGVtZW50KCkuCisgICAgICAgIChX
ZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojppc0luZGV0ZXJtaW5hdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTElucHV0RWxlbWVudDo6aXNBdXRvZmlsbGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxJbnB1dEVsZW1lbnQ6OnN1cHBvcnRzTWF4TGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxJbnB1dEVsZW1lbnQ6OmNhY2hlZFNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmNhY2hlZFNlbGVjdGlvbkVuZCk6CisgICAgICAgICogaHRt
bC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcDogUmVtb3ZlIHVudXNlZCBJbnB1dEVsZW1lbnQuaC4K
KyAgICAgICAgKiBodG1sL0lucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5
cGU6OnNhbml0aXplVmFsdWUpOiBNYWtlIGl0IGNvbnN0LgorICAgICAgICAoV2ViQ29yZTo6SW5w
dXRUeXBlOjpzYW5pdGl6ZVVzZXJJbnB1dFZhbHVlKTogQWRkZWQuCisgICAgICAgICogaHRtbC9J
bnB1dFR5cGUuaDogVXBkYXRlIGZvciB0aGUgYWJvdmUuCisgICAgICAgICogaHRtbC9UZXh0Rmll
bGRJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVwbGFjZUVPTEFuZExpbWl0TGVu
Z3RoKTogTW92ZWQgZnJvbSBJbnB1dEVsZW1lbnQuY3BwLgorICAgICAgICAoV2ViQ29yZTo6VGV4
dEZpZWxkSW5wdXRUeXBlOjpzYW5pdGl6ZVZhbHVlKTogSW1wbGVtZW50IHdpdGggcmVwbGFjZUVP
TEFuZExpbWl0TGVuZ3RoKCkuCisgICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGRJbnB1dFR5cGU6
OnNhbml0aXplVXNlcklucHV0VmFsdWUpOiBkaXR0by4KKyAgICAgICAgKiBodG1sL1RleHRGaWVs
ZElucHV0VHlwZS5oOiBVcGRhdGUgZGVjbGFyYXRpb25zLgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwOgorICAgICAgICAgIC0gUmVtb3ZlIEFTU0VS
VChub2RlKCktPmlzSFRNTEVsZW1lbnQoKSkgYmVjYXVzZSBpdCBpcyBjaGVja2VkIGluIHRoZSBj
b25zdHJ1Y3Rvci4KKyAgICAgICAgICAtIEZvbGxvdyB0aGUgcmV0dXJuIHR5cGUgY2hhbmdlIG9m
IGlucHV0RWxlbWVudCgpLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUpOgorICAgICAgICAgIE1ha2Ugc3Vy
ZSBub2RlKCkgaXMgYW4gSFRNTElucHV0RWxlbWVudCBpbnN0YW5jZS4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6YWRkU2VhcmNoUmVzdWx0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c3RvcFNlYXJjaEV2ZW50
VGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpz
aG93UG9wdXApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
OjpoaWRlUG9wdXApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lOjpzdWJ0cmVlSGFzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OnVwZGF0ZUZyb21FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y3JlYXRlSW5uZXJCbG9ja1N0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y3JlYXRlUmVzdWx0c0J1
dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6Y3JlYXRlQ2FuY2VsQnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lOjpjcmVhdGVJbm5lclNwaW5CdXR0b25TdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZU91dGVyU3BpbkJ1
dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6Y3JlYXRlU3BlZWNoQnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lOjp2aXNpYmlsaXR5Rm9yQ2FuY2VsQnV0dG9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c3RhcnRTZWFyY2hFdmVudFRp
bWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2Vh
cmNoRXZlbnRUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZTo6dmFsdWVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6c2V0VGV4dEZyb21JdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aW5wdXRFbGVtZW50KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmg6CisgICAgICAgICAgQ2hhbmdlIHRo
ZSByZXR1cm4gdHlwZSBvZiBpbnB1dEVsZW1lbnQoKTogSW5wdXRFbGVtZW50KiAtPiBIVE1MSW5w
dXRFbGVtZW50Ki4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmlzQ2hlY2tlZCk6CisgICAgICAgICAgRm9sbG93IHRo
ZSByZXR1cm4gdHlwZSBjaGFuZ2Ugb2YgTm9kZTo6dG9JbnB1dEVsZW1lbnQoKS4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lOjppc0luZGV0ZXJtaW5hdGUpOiBkaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lOjpzaG91bGRIYXZlU3BpbkJ1dHRvbik6CisgICAgICAgICAg
Q2hhbmdlIHRoZSBwYXJhbWV0ZXIgdHlwZTogSW5wdXRFbGVtZW50KiAtPiBIVE1MSW5wdXRFbGVt
ZW50Ki4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuaDogZGl0dG8uCisKIDIwMTEt
MDUtMDQgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmlu
ZGV4IGFkMzEyNmNjYjllZjJjM2Q2ZjkyMzZkNDQ0NTY2ZGI0MGIxNGU0MTYuLjFjMDIxZWE1YmY3
N2I4YWNkZGJiZDg4MjUxNTNkMTI1YzE3ZTdlOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQpAQCAtMTE1Myw4ICsxMTUzLDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2Uv
V2ViQ29yZS9kb20vSWdub3JlRGVzdHJ1Y3RpdmVXcml0ZUNvdW50SW5jcmVtZW50ZXIuaCBcCiAJ
U291cmNlL1dlYkNvcmUvZG9tL0ljb25VUkwuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vSWNv
blVSTC5oIFwKLQlTb3VyY2UvV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmNwcCBcCi0JU291cmNl
L1dlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vSGFzaENo
YW5nZUV2ZW50LmggXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmNwcCBcCiAJ
U291cmNlL1dlYkNvcmUvZG9tL0tleWJvYXJkRXZlbnQuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCmlu
ZGV4IGRlYTg5NTA3ZGYzZmE1NTkzODhhNDcyZGM1ZWI5ODdhMzc1MjQyNTcuLjJiNGYwYmY5NDU0
MDYyY2E0NDY3MTM3MDc5ODRmMzZhMWRjMDY5YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZXhwLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBAIC00
MzYsNiArNDM2LDcgQEAgX19aTjdXZWJDb3JlMTZGb250RmFsbGJhY2tMaXN0MTVyZWxlYXNlRm9u
dERhdGFFdgogX19aTjdXZWJDb3JlMTZGb250UGxhdGZvcm1EYXRhQzFFUDZOU0ZvbnRmYmJOU18x
NUZvbnRPcmllbnRhdGlvbkVOU18xNVRleHRPcmllbnRhdGlvbkVOU18xNkZvbnRXaWR0aFZhcmlh
bnRFCiBfX1pON1dlYkNvcmUxNkZvbnRQbGF0Zm9ybURhdGFEMUV2CiBfX1pON1dlYkNvcmUxNkhU
TUxJbnB1dEVsZW1lbnQxM3NldEF1dG9maWxsZWRFYgorX19aTjdXZWJDb3JlMTZIVE1MSW5wdXRF
bGVtZW50MTVzZXRWYWx1ZUZvclVzZXJFUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmUxNklj
b25EYXRhYmFzZUJhc2UyOHN5bmNocm9ub3VzSWNvblVSTEZvclBhZ2VVUkxFUktOM1dURjZTdHJp
bmdFCiBfX1pON1dlYkNvcmUxNkljb25EYXRhYmFzZUJhc2U0b3BlbkVSS04zV1RGNlN0cmluZ0VT
NF8KIF9fWk43V2ViQ29yZTE2TGVnYWN5V2ViQXJjaGl2ZTE5Y3JlYXRlRnJvbVNlbGVjdGlvbkVQ
TlNfNUZyYW1lRQpAQCAtMTE0MCw3ICsxMTQxLDkgQEAgX19aTks3V2ViQ29yZTE1VmlzaWJsZVBv
c2l0aW9uMTlhYnNvbHV0ZUNhcmV0Qm91bmRzRXYKIF9fWk5LN1dlYkNvcmUxNVZpc2libGVQb3Np
dGlvbjRuZXh0RU5TXzI3RWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlRQogX19aTks3V2ViQ29y
ZTE1VmlzaWJsZVBvc2l0aW9uOHByZXZpb3VzRU5TXzI3RWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdS
dWxlRQogX19aTks3V2ViQ29yZTE2Rm9udEZhbGxiYWNrTGlzdDEwZm9udERhdGFBdEVQS05TXzRG
b250RWoKK19fWk5LN1dlYkNvcmUxNkhUTUxJbnB1dEVsZW1lbnQxMWlzVGV4dEZpZWxkRXYKIF9f
Wk5LN1dlYkNvcmUxNkhUTUxJbnB1dEVsZW1lbnQxMmF1dG9Db21wbGV0ZUV2CitfX1pOSzdXZWJD
b3JlMTZIVE1MSW5wdXRFbGVtZW50MTVpc1Bhc3N3b3JkRmllbGRFdgogX19aTks3V2ViQ29yZTE2
SFRNTElucHV0RWxlbWVudDIxbGFzdENoYW5nZVdhc1VzZXJFZGl0RXYKIF9fWk5LN1dlYkNvcmUx
Nkljb25EYXRhYmFzZUJhc2UxMmRhdGFiYXNlUGF0aEV2CiBfX1pOSzdXZWJDb3JlMTZSZXNvdXJj
ZVJlc3BvbnNlMTNuc1VSTFJlc3BvbnNlRXYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBlMTg1YWY4Njcz
NTE0NGU5NjliMDUyMTI1NWJjNmFkMmViY2ZlNmNiLi5hODNlMTc0MmY4YjQwMDI3NTJmZTE1MDFl
ZTI3ZmQzYWM3OGJmNzhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC01MjksNyArNTI5LDYgQEAKICAg
ICAgICAgICAgICdkb20vRXZlbnRUYXJnZXQuaCcsCiAgICAgICAgICAgICAnZG9tL0V4Y2VwdGlv
bkNvZGUuaCcsCiAgICAgICAgICAgICAnZG9tL0ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbi5o
JywKLSAgICAgICAgICAgICdkb20vSW5wdXRFbGVtZW50LmgnLAogICAgICAgICAgICAgJ2RvbS9L
ZXlib2FyZEV2ZW50LmgnLAogICAgICAgICAgICAgJ2RvbS9NYXBwZWRBdHRyaWJ1dGVFbnRyeS5o
JywKICAgICAgICAgICAgICdkb20vTWVzc2FnZVBvcnQuaCcsCkBAIC0yNDczLDcgKzI0NzIsNiBA
QAogICAgICAgICAgICAgJ2RvbS9JZ25vcmVEZXN0cnVjdGl2ZVdyaXRlQ291bnRJbmNyZW1lbnRl
ci5oJywKICAgICAgICAgICAgICdkb20vSWNvblVSTC5jcHAnLAogICAgICAgICAgICAgJ2RvbS9J
Y29uVVJMLmgnLAotICAgICAgICAgICAgJ2RvbS9JbnB1dEVsZW1lbnQuY3BwJywKICAgICAgICAg
ICAgICdkb20vS2V5Ym9hcmRFdmVudC5jcHAnLAogICAgICAgICAgICAgJ2RvbS9NZXNzYWdlQ2hh
bm5lbC5jcHAnLAogICAgICAgICAgICAgJ2RvbS9NZXNzYWdlQ2hhbm5lbC5oJywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5w
cm8KaW5kZXggYjNjMDU2MWNmMDhjYzY0MzhjYjk2ZjYxZjYwNzE0MzMzNWUzYTVmZS4uY2E5MTA2
OWQzMjk4MDU2YjA5YTE2MjgyNWFhNjc5YTNhYjFkMjI0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTQ5
Myw3ICs0OTMsNiBAQCBTT1VSQ0VTICs9IFwKICAgICBkb20vRXhjZXB0aW9uQmFzZS5jcHAgXAog
ICAgIGRvbS9FeGNlcHRpb25Db2RlLmNwcCBcCiAgICAgZG9tL0ljb25VUkwuY3BwIFwKLSAgICBk
b20vSW5wdXRFbGVtZW50LmNwcCBcCiAgICAgZG9tL0tleWJvYXJkRXZlbnQuY3BwIFwKICAgICBk
b20vTWVzc2FnZUNoYW5uZWwuY3BwIFwKICAgICBkb20vTWVzc2FnZUV2ZW50LmNwcCBcCkBAIC0x
NDY5LDcgKzE0NjgsNiBAQCBIRUFERVJTICs9IFwKICAgICBkb20vRXhjZXB0aW9uQmFzZS5oIFwK
ICAgICBkb20vRXhjZXB0aW9uQ29kZS5oIFwKICAgICBkb20vRnJhZ21lbnRTY3JpcHRpbmdQZXJt
aXNzaW9uLmggXAotICAgIGRvbS9JbnB1dEVsZW1lbnQuaCBcCiAgICAgZG9tL0tleWJvYXJkRXZl
bnQuaCBcCiAgICAgZG9tL01lc3NhZ2VDaGFubmVsLmggXAogICAgIGRvbS9NZXNzYWdlRXZlbnQu
aCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4
IGU1M2JkZjYyODQwZTBiNjE3ZWYwNTE4Njc3YjQ4MWNhMzhmYmY0Y2MuLmYxZDllZjVlNGQ0MDYz
ZDg0MTZhMTYyZGIyMGExYTJkYTQ5YjhiMTEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC00NDU2Niw2MiArNDQ1NjYsNiBAQAogCQkJCT4KIAkJ
CTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cSW5wdXRFbGVtZW50
LmNwcCIKLQkJCQk+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IkRlYnVnfFdp
bjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAot
CQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1
cmF0aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMy
IgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJ
CQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0
aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb19DRkxp
dGV8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxU
b29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNv
bmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IlJlbGVhc2Vf
Q2Fpcm9fQ0ZMaXRlfFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJ
PgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJ
CQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1l
PSJEZWJ1Z19BbGx8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+
Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJ
CTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9
IlByb2R1Y3Rpb258V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+
Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJ
CTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZl
UGF0aD0iLi5cZG9tXElucHV0RWxlbWVudC5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxl
CiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cS2V5Ym9hcmRFdmVudC5jcHAiCiAJCQkJPgogCQkJ
CTxGaWxlQ29uZmlndXJhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGQwY2Y2OTZhZWMwZDE2ZDRhYzU5ODNlNmY1NmVmNTI5
MDg0NDVkZTAuLjM1NWYwMzc1NTlmMzYxNWY0ZWYzNDMxMDVhOGIzMjk3NmUwZTMwZmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTk1LDE0ICs5NSwxMiBAQAogCQkwODU0QjAyMzEyNTVFNEU2MDBCOUNERDAgLyogU1ZHUm9vdElu
bGluZUJveC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MDg1NEIwMTExMjU1RTRFNjAwQjlDREQwIC8qIFNWR1Jvb3RJbmxpbmVCb3guaCAqLzsgfTsKIAkJ
MDg1NEIwMjUxMjU1RTRFNjAwQjlDREQwIC8qIFNWR1RleHRRdWVyeS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg1NEIwMTMxMjU1RTRFNjAwQjlDREQw
IC8qIFNWR1RleHRRdWVyeS5oICovOyB9OwogCQkwODU3OTcwOTEyNzgzOTRDMDBBOEVDNUYgLyog
U1ZHQW5pbWF0ZWRCb29sZWFuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwODU3OTcwODEyNzgzOTRDMDBBOEVDNUYgLyogU1ZHQW5pbWF0ZWRCb29sZWFu
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMDg1
OTFBQTUwRjA4NUM0RTAwOUJBQ0IxIC8qIElucHV0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg1OTFBQTQwRjA4NUM0RTAwOUJBQ0IxIC8q
IElucHV0RWxlbWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTA4NUExNTkzMTI4OUE4REQwMDI3MTBFMyAvKiBTVkdBbmltYXRlZFRyYW5zZm9y
bUxpc3RQcm9wZXJ0eVRlYXJPZmYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDA4NUExNTkyMTI4OUE4REQwMDI3MTBFMyAvKiBTVkdBbmltYXRlZFRyYW5z
Zm9ybUxpc3RQcm9wZXJ0eVRlYXJPZmYuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwODVCOTJCQTBFRkRFNzNEMDBFNjEyM0MgLyogRm9ybURhdGFC
dWlsZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDA4NUI5MkI4MEVGREU3M0QwMEU2MTIzQyAvKiBGb3JtRGF0YUJ1aWxkZXIuY3BwICovOyB9Owog
CQkwODVCOTJCQjBFRkRFNzNEMDBFNjEyM0MgLyogRm9ybURhdGFCdWlsZGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODVCOTJCOTBFRkRFNzNEMDBF
NjEyM0MgLyogRm9ybURhdGFCdWlsZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
KTsgfTsgfTsKIAkJMDg2NDFENDcxMjE0MkY3RDAwOERFOUY2IC8qIFJlbmRlckltYWdlUmVzb3Vy
Y2VTdHlsZUltYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDA4NjQxRDQ1MTIxNDJGN0QwMDhERTlGNiAvKiBSZW5kZXJJbWFnZVJlc291cmNlU3R5
bGVJbWFnZS5jcHAgKi87IH07CiAJCTA4NjQxRDQ4MTIxNDJGN0QwMDhERTlGNiAvKiBSZW5kZXJJ
bWFnZVJlc291cmNlU3R5bGVJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDg2NDFENDYxMjE0MkY3RDAwOERFOUY2IC8qIFJlbmRlckltYWdlUmVz
b3VyY2VTdHlsZUltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMDg2QkJEMEYxMzYwMzlDMjAwOEIxNUQ4IC8qIEdseXBoLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODZCQkQwRTEzNjAzOUMyMDA4
QjE1RDggLyogR2x5cGguaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQkwODcwMEJFNzBGMDg2QzUzMDA5MTk0MTkgLyogSW5wdXRFbGVtZW50LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NzAwQkU2MEYw
ODZDNTMwMDkxOTQxOSAvKiBJbnB1dEVsZW1lbnQuY3BwICovOyB9OwogCQkwODcyODE1NTBGMjZC
OUI2MDBBRkM1OTYgLyogT3B0aW9uRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODcyODE1MTBGMjZCOUI2MDBBRkM1OTYgLyogT3B0aW9u
RWxlbWVudC5jcHAgKi87IH07CiAJCTA4NzI4MTU2MEYyNkI5QjYwMEFGQzU5NiAvKiBPcHRpb25F
bGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
ODcyODE1MjBGMjZCOUI2MDBBRkM1OTYgLyogT3B0aW9uRWxlbWVudC5oICovOyB9OwogCQkwODcy
ODE1NzBGMjZCOUI2MDBBRkM1OTYgLyogT3B0aW9uR3JvdXBFbGVtZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NzI4MTUzMEYyNkI5QjYwMEFG
QzU5NiAvKiBPcHRpb25Hcm91cEVsZW1lbnQuY3BwICovOyB9OwpAQCAtNjQ1NiwxNCArNjQ1NCwx
MiBAQAogCQkwODU0QjAxMjEyNTVFNEU2MDBCOUNERDAgLyogU1ZHVGV4dFF1ZXJ5LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1RleHRRdWVyeS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NTRCMDEzMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdU
ZXh0UXVlcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHVGV4dFF1ZXJ5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NTc5NzA4MTI3ODM5NEMwMEE4RUM1
RiAvKiBTVkdBbmltYXRlZEJvb2xlYW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU1ZHQW5pbWF0ZWRCb29sZWFuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTA4
NTkxQUE0MEYwODVDNEUwMDlCQUNCMSAvKiBJbnB1dEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW5wdXRFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTA4NUExNTkyMTI4OUE4REQwMDI3MTBFMyAvKiBTVkdBbmltYXRlZFRyYW5zZm9ybUxp
c3RQcm9wZXJ0eVRlYXJPZmYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZH
QW5pbWF0ZWRUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTA4NUI5MkI4MEVGREU3M0QwMEU2MTIzQyAvKiBGb3JtRGF0YUJ1aWxkZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9ybURhdGFCdWlsZGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg1QjkyQjkwRUZERTczRDAwRTYx
MjNDIC8qIEZvcm1EYXRhQnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGb3JtRGF0YUJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg2NDFE
NDUxMjE0MkY3RDAwOERFOUY2IC8qIFJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckltYWdlUmVzb3VyY2VT
dHlsZUltYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg2NDFENDYxMjE0
MkY3RDAwOERFOUY2IC8qIFJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NkJCRDBFMTM2MDM5QzIwMDhCMTVEOCAv
KiBHbHlwaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHbHlwaC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwODcwMEJFNjBGMDg2QzUzMDA5MTk0MTkgLyogSW5w
dXRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElucHV0
RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NzI4MTUxMEYyNkI5
QjYwMEFGQzU5NiAvKiBPcHRpb25FbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IE9wdGlvbkVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwODcyODE1MjBGMjZCOUI2MDBBRkM1OTYgLyogT3B0aW9uRWxlbWVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcHRpb25FbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTA4NzI4MTUzMEYyNkI5QjYwMEFGQzU5NiAvKiBPcHRpb25Hcm91cEVs
ZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3B0aW9uR3Jv
dXBFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5MjQ0LDggKzE5
MjQwLDYgQEAKIAkJCQkyNDQyQkJGODExOTRDOUQzMDBENDk0NjkgLyogSGFzaENoYW5nZUV2ZW50
LmggKi8sCiAJCQkJODQ4MkI3NDQxMTk4QzMyRTAwQkZCMDA1IC8qIEhhc2hDaGFuZ2VFdmVudC5p
ZGwgKi8sCiAJCQkJOEFCNEJDNzYxMjZGREI3MTAwREVCNzI3IC8qIElnbm9yZURlc3RydWN0aXZl
V3JpdGVDb3VudEluY3JlbWVudGVyLmggKi8sCi0JCQkJMDg3MDBCRTYwRjA4NkM1MzAwOTE5NDE5
IC8qIElucHV0RWxlbWVudC5jcHAgKi8sCi0JCQkJMDg1OTFBQTQwRjA4NUM0RTAwOUJBQ0IxIC8q
IElucHV0RWxlbWVudC5oICovLAogCQkJCTg1MDMxQjJEMEE0NEVGQzcwMEY5OTJFMCAvKiBLZXli
b2FyZEV2ZW50LmNwcCAqLywKIAkJCQk4NTAzMUIyRTBBNDRFRkM3MDBGOTkyRTAgLyogS2V5Ym9h
cmRFdmVudC5oICovLAogCQkJCTE0Q0Y3QzIwMDlGNzExMDYwMEVCMzY2NSAvKiBLZXlib2FyZEV2
ZW50LmlkbCAqLywKQEAgLTIxMTQ4LDcgKzIxMTQyLDYgQEAKIAkJCQlBOENGRjVFMzBBMTU1QTA1
MDAwQTQyMzQgLyogSW5saW5lRmxvd0JveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFNzg5MTYx
MTIwRDYwODAwNjBFQ0U1IC8qIElubGluZUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
Q0VBNDg1QTA5N0Q5MzAyMDA5NEM5RTQgLyogSW5saW5lVGV4dEJveC5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMDg1OTFBQTUwRjA4NUM0RTAwOUJBQ0IxIC8qIElucHV0RWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMzdFMzUyNEQxMjQ1MEM2NjAwQkFGNUQ5IC8qIElucHV0VHlwZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTMzMDlERUEwOTlFNjQ5MjAwNTZFNTgxIC8qIEluc2VydEludG9UZXh0
Tm9kZUNvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5REVDMDk5RTY0OTIwMDU2RTU4
MSAvKiBJbnNlcnRMaW5lQnJlYWtDb21tYW5kLmggaW4gSGVhZGVycyAqLywKQEAgLTIzOTM3LDcg
KzIzOTMwLDYgQEAKIAkJCQlBOENGRjVFNjBBMTU1QTA1MDAwQTQyMzQgLyogSW5saW5lQm94LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE4Q0ZGNUU0MEExNTVBMDUwMDBBNDIzNCAvKiBJbmxpbmVG
bG93Qm94LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRUE0ODU5MDk3RDkzMDIwMDk0QzlFNCAv
KiBJbmxpbmVUZXh0Qm94LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTA4NzAwQkU3MEYwODZDNTMw
MDkxOTQxOSAvKiBJbnB1dEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzdFMzUyNEIx
MjQ1MEM1MjAwQkFGNUQ5IC8qIElucHV0VHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMw
OURFOTA5OUU2NDkyMDA1NkU1ODEgLyogSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk5MzMwOURFQjA5OUU2NDkyMDA1NkU1ODEgLyogSW5zZXJ0TGluZUJy
ZWFrQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCmluZGV4IGI0NzEyMDE5MzY3YmY1MmFmYWExMGJlYmVk
ZWUyYzQ3MTk1NGMyZDUuLjE5YTQ1ZGQ1YTlhZjQ5MDFjZDVlOGY1OTE2NTNhZmY1OGMyZTVjMDAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcApA
QCAtNTUsMTEgKzU1LDExIEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVE1MQXJl
YUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSW1hZ2VFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRN
TElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2lmIEVOQUJMRShWSURF
TykKICNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgogI2VuZGlmCi0jaW5jbHVkZSAi
SW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RC
b3guaCIKICNpbmNsdWRlICJSZW5kZXJNZW51TGlzdC5oIgpAQCAtNjE2LDcgKzYxNiw3IEBAIHZv
aWQgQVhPYmplY3RDYWNoZTo6dGV4dE1hcmtlckRhdGFGb3JWaXNpYmxlUG9zaXRpb24oVGV4dE1h
cmtlckRhdGEmIHRleHRNYXJrZXJECiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBpZiAoZG9t
Tm9kZS0+aXNIVE1MRWxlbWVudCgpKSB7Ci0gICAgICAgIElucHV0RWxlbWVudCogaW5wdXRFbGVt
ZW50ID0gZG9tTm9kZS0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICAgICAgSFRNTElucHV0RWxlbWVu
dCogaW5wdXRFbGVtZW50ID0gZG9tTm9kZS0+dG9JbnB1dEVsZW1lbnQoKTsKICAgICAgICAgaWYg
KGlucHV0RWxlbWVudCAmJiBpbnB1dEVsZW1lbnQtPmlzUGFzc3dvcmRGaWVsZCgpKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCmluZGV4IDI1MDc4YzVhNDZi
ZTBhMWY0MTY1MmEzNmZhNGFmYTMwMzY2ODgyMDguLjM3MzNkYTIyYmE2YzEwNDdiYWEzMTVlZWRh
OTg1NDNkMWM5N2I3ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApAQCAtNDk2LDcgKzQ5Niw3IEBA
IGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNQYXNzd29yZEZpZWxkKCkgY29uc3QK
ICAgICBpZiAoYXJpYVJvbGVBdHRyaWJ1dGUoKSAhPSBVbmtub3duUm9sZSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBtX3JlbmRlcmVy
LT5ub2RlKCktPnRvSW5wdXRFbGVtZW50KCk7CisgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRF
bGVtZW50ID0gbV9yZW5kZXJlci0+bm9kZSgpLT50b0lucHV0RWxlbWVudCgpOwogICAgIGlmICgh
aW5wdXRFbGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTU4OSw3ICs1ODksNyBA
QCBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzSW5kZXRlcm1pbmF0ZSgpIGNvbnN0
CiAgICAgaWYgKCFtX3JlbmRlcmVyLT5ub2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gbV9yZW5kZXJlci0+bm9kZSgpLT50b0lu
cHV0RWxlbWVudCgpOworICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IG1fcmVu
ZGVyZXItPm5vZGUoKS0+dG9JbnB1dEVsZW1lbnQoKTsKICAgICBpZiAoIWlucHV0RWxlbWVudCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC02MDAsNyArNjAwLDcgQEAgYm9vbCBBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0Ojppc05hdGl2ZUNoZWNrYm94T3JSYWRpbygpIGNvbnN0CiB7CiAg
ICAgTm9kZSogZWxlbWVudE5vZGUgPSBub2RlKCk7CiAgICAgaWYgKGVsZW1lbnROb2RlKSB7Ci0g
ICAgICAgIElucHV0RWxlbWVudCogaW5wdXQgPSBlbGVtZW50Tm9kZS0+dG9JbnB1dEVsZW1lbnQo
KTsKKyAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBlbGVtZW50Tm9kZS0+dG9JbnB1
dEVsZW1lbnQoKTsKICAgICAgICAgaWYgKGlucHV0KQogICAgICAgICAgICAgcmV0dXJuIGlucHV0
LT5pc0NoZWNrYm94KCkgfHwgaW5wdXQtPmlzUmFkaW9CdXR0b24oKTsKICAgICB9CkBAIC02MTUs
NyArNjE1LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc0NoZWNrZWQoKSBj
b25zdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBGaXJzdCB0ZXN0IGZvciBuYXRp
dmUgY2hlY2tlZG5lc3Mgc2VtYW50aWNzCi0gICAgSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQg
PSBtX3JlbmRlcmVyLT5ub2RlKCktPnRvSW5wdXRFbGVtZW50KCk7CisgICAgSFRNTElucHV0RWxl
bWVudCogaW5wdXRFbGVtZW50ID0gbV9yZW5kZXJlci0+bm9kZSgpLT50b0lucHV0RWxlbWVudCgp
OwogICAgIGlmIChpbnB1dEVsZW1lbnQpCiAgICAgICAgIHJldHVybiBpbnB1dEVsZW1lbnQtPmlz
Q2hlY2tlZCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxl
Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKaW5kZXgg
ODQxMTgxNWYyNTkyMGQ3MzlmNDFiN2ZjZDkxMDg4OTk4MGEyMGZhNC4uNDg4ZGE5NjJjOGUyYzRi
OTc4MjE1MTcxNTcwOWU4ZTE1MTg1YTIwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1N0eWxlU2VsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNl
bGVjdG9yLmNwcApAQCAtMTA2OSw4ICsxMDY5LDggQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpj
YW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoTm9kZSogbm9kZSkgY29uc3QKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgaWYgKGlzQ29udHJvbCkgewotICAgICAgICBJbnB1dEVsZW1lbnQqIHRo
aXNJbnB1dEVsZW1lbnQgPSBlbGVtZW50LT50b0lucHV0RWxlbWVudCgpOwotICAgICAgICBJbnB1
dEVsZW1lbnQqIG90aGVySW5wdXRFbGVtZW50ID0gbV9lbGVtZW50LT50b0lucHV0RWxlbWVudCgp
OworICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiB0aGlzSW5wdXRFbGVtZW50ID0gZWxlbWVudC0+
dG9JbnB1dEVsZW1lbnQoKTsKKyAgICAgICAgSFRNTElucHV0RWxlbWVudCogb3RoZXJJbnB1dEVs
ZW1lbnQgPSBtX2VsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCk7CiAKICAgICAgICAgaWYgKCF0aGlz
SW5wdXRFbGVtZW50IHx8ICFvdGhlcklucHV0RWxlbWVudCkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKQEAgLTI3NzMsNyArMjc3Myw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0
b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lCiAgICAg
ICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BdXRvZmlsbDogewogICAgICAgICAgICAg
ICAgIGlmICghZSB8fCAhZS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgaWYgKElucHV0RWxlbWVudCogaW5wdXRFbGVt
ZW50ID0gZS0+dG9JbnB1dEVsZW1lbnQoKSkKKyAgICAgICAgICAgICAgICBpZiAoSFRNTElucHV0
RWxlbWVudCogaW5wdXRFbGVtZW50ID0gZS0+dG9JbnB1dEVsZW1lbnQoKSkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGlucHV0RWxlbWVudC0+aXNBdXRvZmlsbGVkKCk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0yODY2LDcgKzI4NjYsNyBAQCBib29sIENT
U1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3RvcihDU1NTZWxl
Y3Rvciogc2VsLCBFbGVtZQogICAgICAgICAgICAgICAgIC8vIEV2ZW4gdGhvdWdoIFdpbklFIGFs
bG93cyBjaGVja2VkIGFuZCBpbmRldGVybWluYXRlIHRvIGNvLWV4aXN0LCB0aGUgQ1NTIHNlbGVj
dG9yIHNwZWMgc2F5cyB0aGF0CiAgICAgICAgICAgICAgICAgLy8geW91IGNhbid0IGJlIGJvdGgg
Y2hlY2tlZCBhbmQgaW5kZXRlcm1pbmF0ZS4gIFdlIHdpbGwgYmVoYXZlIGxpa2UgV2luSUUgYmVo
aW5kIHRoZSBzY2VuZXMgYW5kIGp1c3QKICAgICAgICAgICAgICAgICAvLyBvYmV5IHRoZSBDU1Mg
c3BlYyBoZXJlIGluIHRoZSB0ZXN0IGZvciBtYXRjaGluZyB0aGUgcHNldWRvLgotICAgICAgICAg
ICAgICAgIElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gZS0+dG9JbnB1dEVsZW1lbnQoKTsK
KyAgICAgICAgICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBlLT50b0lu
cHV0RWxlbWVudCgpOwogICAgICAgICAgICAgICAgIGlmIChpbnB1dEVsZW1lbnQgJiYgaW5wdXRF
bGVtZW50LT5pc0NoZWNrZWQoKSAmJiAhaW5wdXRFbGVtZW50LT5pc0luZGV0ZXJtaW5hdGUoKSkK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CkBAIC0yODc0LDcgKzI4NzQsNyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hl
Y2tlcjo6Y2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZQogICAgICAgICAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvSW5kZXRlcm1pbmF0ZTogewogICAgICAgICAgICAg
ICAgIGlmICghZSB8fCAhZS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQg
PSBlLT50b0lucHV0RWxlbWVudCgpOworICAgICAgICAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQq
IGlucHV0RWxlbWVudCA9IGUtPnRvSW5wdXRFbGVtZW50KCk7CiAgICAgICAgICAgICAgICAgaWYg
KGlucHV0RWxlbWVudCAmJiBpbnB1dEVsZW1lbnQtPmlzSW5kZXRlcm1pbmF0ZSgpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcAppbmRleCA3NTIzMzcyNTFhZWM5
NWQzZTllMmM1ZmE1ZTY1ODM5YzkwNDU1YmYyLi4yYTBmZWE0MDZlNjY1ZDJlMmI1NzBhMTdkNTA2
MzMyNzk3OTBiYmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hlY2tlZFJhZGlv
QnV0dG9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMu
Y3BwCkBAIC03Nyw3ICs3Nyw3IEBAIHZvaWQgQ2hlY2tlZFJhZGlvQnV0dG9uczo6cmVtb3ZlQnV0
dG9uKEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgaWYgKGl0ID09IG1fbmFt
ZVRvQ2hlY2tlZFJhZGlvQnV0dG9uTWFwLT5lbmQoKSB8fCBpdC0+c2Vjb25kICE9IGVsZW1lbnQp
CiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9
IGVsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCk7CisgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRF
bGVtZW50ID0gZWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKTsKICAgICBBU1NFUlRfVU5VU0VEKGlu
cHV0RWxlbWVudCwgaW5wdXRFbGVtZW50KTsKICAgICBBU1NFUlQoaW5wdXRFbGVtZW50LT5pc0No
ZWNrZWQoKSk7CiAgICAgQVNTRVJUKGVsZW1lbnQtPmlzUmFkaW9CdXR0b24oKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NQWxsSW5PbmUuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0RPTUFsbEluT25lLmNwcAppbmRleCA1NTY3NGRmZWU5MTM2YjMwYjFiNzU5NGEyMGRlOGYy
NGFhOTkwODA1Li5mMjk0OWIxNzViNjU2MDMwNjk3ZjMwODJhOWNmNTI1Y2NlZWFlN2U3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NQWxsSW5PbmUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9ET01BbGxJbk9uZS5jcHAKQEAgLTc2LDcgKzc2LDYgQEAKICNpbmNsdWRlICJF
eGNlcHRpb25CYXNlLmNwcCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmNwcCIKICNpbmNsdWRl
ICJJY29uVVJMLmNwcCIKLSNpbmNsdWRlICJJbnB1dEVsZW1lbnQuY3BwIgogI2luY2x1ZGUgIktl
eWJvYXJkRXZlbnQuY3BwIgogI2luY2x1ZGUgIk1lc3NhZ2VDaGFubmVsLmNwcCIKICNpbmNsdWRl
ICJNZXNzYWdlRXZlbnQuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0lucHV0
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJkZjJmNGI1ZjkxNzVmNzMyODE1YzI1NzE2NTI3NDcw
ODEwOWQwMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQx
NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW5wdXRFbGVtZW50LmgiCi0KLSNpbmNsdWRlICJC
ZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5oIgotCi0jaWYgRU5BQkxFKFdDU1MpCi0jaW5jbHVkZSAi
Q1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIkNTU1J1bGUuaCIKLSNpbmNsdWRlICJDU1NS
dWxlTGlzdC5oIgotI2luY2x1ZGUgIkNTU1N0eWxlUnVsZS5oIgotI2luY2x1ZGUgIkNTU1N0eWxl
U2VsZWN0b3IuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiQXR0cmlidXRlLmgiCi0jaW5jbHVkZSAi
Q2hyb21lLmgiCi0jaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQu
aCIKLSNpbmNsdWRlICJFdmVudC5oIgotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRl
ICJGcmFtZS5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmUuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCi0jaW5jbHVk
ZSAiVGV4dEl0ZXJhdG9yLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gRklYTUU6IEFj
Y29yZGluZyB0byBIVE1MNCwgdGhlIGxlbmd0aCBhdHRyaWJ1dGUncyB2YWx1ZSBjYW4gYmUgYXJi
aXRyYXJpbHkKLS8vIGxhcmdlLiBIb3dldmVyLCBkdWUgdG8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0NTM2IHRoaW5ncwotLy8gZ2V0IHJhdGhlciBzbHVnZ2lzaCB3
aGVuIGEgdGV4dCBmaWVsZCBoYXMgYSBsYXJnZXIgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhbgot
Ly8gdGhpcywgZXZlbiB3aGVuIGp1c3QgY2xpY2tpbmcgaW4gdGhlIHRleHQgZmllbGQuCi1jb25z
dCBpbnQgSW5wdXRFbGVtZW50OjpzX21heGltdW1MZW5ndGggPSA1MjQyODg7Ci1jb25zdCBpbnQg
SW5wdXRFbGVtZW50OjpzX2RlZmF1bHRTaXplID0gMjA7Ci0KLXZvaWQgSW5wdXRFbGVtZW50Ojpk
aXNwYXRjaEZvY3VzRXZlbnQoSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQsIEVsZW1lbnQqIGVs
ZW1lbnQpCi17Ci0gICAgaWYgKCFpbnB1dEVsZW1lbnQtPmlzVGV4dEZpZWxkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGVsZW1lbnQtPmRvY3VtZW50KCk7
Ci0gICAgaWYgKGlucHV0RWxlbWVudC0+aXNQYXNzd29yZEZpZWxkKCkgJiYgZG9jdW1lbnQtPmZy
YW1lKCkpCi0gICAgICAgIGRvY3VtZW50LT5zZXRVc2VTZWN1cmVLZXlib2FyZEVudHJ5V2hlbkFj
dGl2ZSh0cnVlKTsKLX0KLQotdm9pZCBJbnB1dEVsZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW50KElu
cHV0RWxlbWVudCogaW5wdXRFbGVtZW50LCBFbGVtZW50KiBlbGVtZW50KQotewotICAgIGlmICgh
aW5wdXRFbGVtZW50LT5pc1RleHRGaWVsZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBEb2N1
bWVudCogZG9jdW1lbnQgPSBlbGVtZW50LT5kb2N1bWVudCgpOwotICAgIEZyYW1lKiBmcmFtZSA9
IGRvY3VtZW50LT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChpbnB1dEVsZW1lbnQtPmlzUGFzc3dvcmRGaWVsZCgpKQotICAgICAgICBkb2N1bWVu
dC0+c2V0VXNlU2VjdXJlS2V5Ym9hcmRFbnRyeVdoZW5BY3RpdmUoZmFsc2UpOwotCi0gICAgZnJh
bWUtPmVkaXRvcigpLT50ZXh0RmllbGREaWRFbmRFZGl0aW5nKGVsZW1lbnQpOwotfQotCi12b2lk
IElucHV0RWxlbWVudDo6dXBkYXRlRm9jdXNBcHBlYXJhbmNlKElucHV0RWxlbWVudERhdGEmIGRh
dGEsIElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50LCBFbGVtZW50KiBlbGVtZW50LCBib29sIHJl
c3RvcmVQcmV2aW91c1NlbGVjdGlvbikKLXsKLSAgICBBU1NFUlQoaW5wdXRFbGVtZW50LT5pc1Rl
eHRGaWVsZCgpKTsKLQotICAgIGlmICghcmVzdG9yZVByZXZpb3VzU2VsZWN0aW9uIHx8IGRhdGEu
Y2FjaGVkU2VsZWN0aW9uU3RhcnQoKSA9PSAtMSkKLSAgICAgICAgaW5wdXRFbGVtZW50LT5zZWxl
Y3QoKTsKLSAgICBlbHNlCi0gICAgICAgIC8vIFJlc3RvcmUgdGhlIGNhY2hlZCBzZWxlY3Rpb24u
Ci0gICAgICAgIHVwZGF0ZVNlbGVjdGlvblJhbmdlKGlucHV0RWxlbWVudCwgZWxlbWVudCwgZGF0
YS5jYWNoZWRTZWxlY3Rpb25TdGFydCgpLCBkYXRhLmNhY2hlZFNlbGVjdGlvbkVuZCgpKTsKLQot
ICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGVsZW1lbnQtPmRvY3VtZW50KCk7Ci0gICAgaWYgKGRv
Y3VtZW50ICYmIGRvY3VtZW50LT5mcmFtZSgpKQotICAgICAgICBkb2N1bWVudC0+ZnJhbWUoKS0+
c2VsZWN0aW9uKCktPnJldmVhbFNlbGVjdGlvbigpOwotfQotCi12b2lkIElucHV0RWxlbWVudDo6
dXBkYXRlU2VsZWN0aW9uUmFuZ2UoSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQsIEVsZW1lbnQq
IGVsZW1lbnQsIGludCBzdGFydCwgaW50IGVuZCkKLXsKLSAgICBpZiAoIWlucHV0RWxlbWVudC0+
aXNUZXh0RmllbGQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2V0U2VsZWN0aW9uUmFuZ2Uo
ZWxlbWVudCwgc3RhcnQsIGVuZCk7Ci19Ci0KLXZvaWQgSW5wdXRFbGVtZW50OjphYm91dFRvVW5s
b2FkKElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50LCBFbGVtZW50KiBlbGVtZW50KQotewotICAg
IGlmICghaW5wdXRFbGVtZW50LT5pc1RleHRGaWVsZCgpIHx8ICFlbGVtZW50LT5mb2N1c2VkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGVsZW1lbnQtPmRv
Y3VtZW50KCk7Ci0gICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7Ci0gICAgaWYg
KCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZnJhbWUtPmVkaXRvcigpLT50ZXh0Rmll
bGREaWRFbmRFZGl0aW5nKGVsZW1lbnQpOwotfQotCi12b2lkIElucHV0RWxlbWVudDo6c2V0VmFs
dWVGcm9tUmVuZGVyZXIoSW5wdXRFbGVtZW50RGF0YSYgZGF0YSwgSW5wdXRFbGVtZW50KiBpbnB1
dEVsZW1lbnQsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAg
Ly8gUmVuZGVyZXIgYW5kIG91ciBldmVudCBoYW5kbGVyIGFyZSByZXNwb25zaWJsZSBmb3Igc2Fu
aXRpemluZyB2YWx1ZXMuCi0gICAgQVNTRVJUX1VOVVNFRChpbnB1dEVsZW1lbnQsIHZhbHVlID09
IGlucHV0RWxlbWVudC0+c2FuaXRpemVWYWx1ZSh2YWx1ZSkgfHwgaW5wdXRFbGVtZW50LT5zYW5p
dGl6ZVZhbHVlKHZhbHVlKS5pc0VtcHR5KCkpOwotCi0gICAgLy8gV29ya2Fyb3VuZCBmb3IgYnVn
IHdoZXJlIHRyYWlsaW5nIFxuIGlzIGluY2x1ZGVkIGluIHRoZSByZXN1bHQgb2YgdGV4dENvbnRl
bnQuCi0gICAgLy8gVGhlIGFzc2VydCBtYWNybyBhYm92ZSBtYXkgYWxzbyBiZSBzaW1wbGlmaWVk
IHRvOiAgdmFsdWUgPT0gY29uc3RyYWluVmFsdWUodmFsdWUpCi0gICAgLy8gaHR0cDovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTY2MQotICAgIGlmICh2YWx1ZSA9PSAiXG4iKQot
ICAgICAgICBkYXRhLnNldFZhbHVlKCIiKTsKLSAgICBlbHNlCi0gICAgICAgIGRhdGEuc2V0VmFs
dWUodmFsdWUpOwotCi0gICAgZWxlbWVudC0+c2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5k
ZXJlcih0cnVlKTsKLQotICAgIC8vIElucHV0IGV2ZW50IGlzIGZpcmVkIGJ5IHRoZSBOb2RlOjpk
ZWZhdWx0RXZlbnRIYW5kbGVyIGZvciBlZGl0YWJsZSBjb250cm9scy4KLSAgICBpZiAoIWlucHV0
RWxlbWVudC0+aXNUZXh0RmllbGQoKSkKLSAgICAgICAgZWxlbWVudC0+ZGlzcGF0Y2hJbnB1dEV2
ZW50KCk7Ci0gICAgbm90aWZ5Rm9ybVN0YXRlQ2hhbmdlZChlbGVtZW50KTsKLX0KLQotc3RhdGlj
IFN0cmluZyByZXBsYWNlRU9MQW5kTGltaXRMZW5ndGgoY29uc3QgSW5wdXRFbGVtZW50KiBpbnB1
dEVsZW1lbnQsIGNvbnN0IFN0cmluZyYgcHJvcG9zZWRWYWx1ZSwgaW50IG1heExlbmd0aCkKLXsK
LSAgICBpZiAoIWlucHV0RWxlbWVudC0+aXNUZXh0RmllbGQoKSkKLSAgICAgICAgcmV0dXJuIHBy
b3Bvc2VkVmFsdWU7Ci0KLSAgICBTdHJpbmcgc3RyaW5nID0gcHJvcG9zZWRWYWx1ZTsKLSAgICBz
dHJpbmcucmVwbGFjZSgiXHJcbiIsICIgIik7Ci0gICAgc3RyaW5nLnJlcGxhY2UoJ1xyJywgJyAn
KTsKLSAgICBzdHJpbmcucmVwbGFjZSgnXG4nLCAnICcpOwotCi0gICAgdW5zaWduZWQgbmV3TGVu
Z3RoID0gbnVtQ2hhcmFjdGVyc0luR3JhcGhlbWVDbHVzdGVycyhzdHJpbmcsIG1heExlbmd0aCk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5ld0xlbmd0aDsgKytpKSB7Ci0gICAgICAg
IGNvbnN0IFVDaGFyIGN1cnJlbnQgPSBzdHJpbmdbaV07Ci0gICAgICAgIGlmIChjdXJyZW50IDwg
JyAnICYmIGN1cnJlbnQgIT0gJ1x0JykgewotICAgICAgICAgICAgbmV3TGVuZ3RoID0gaTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBzdHJpbmcubGVm
dChuZXdMZW5ndGgpOwotfQotCi1TdHJpbmcgSW5wdXRFbGVtZW50OjpzYW5pdGl6ZVZhbHVlRm9y
VGV4dEZpZWxkKGNvbnN0IElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50LCBjb25zdCBTdHJpbmcm
IHByb3Bvc2VkVmFsdWUpCi17Ci0jaWYgRU5BQkxFKFdDU1MpCi0gICAgSW5wdXRFbGVtZW50RGF0
YSBkYXRhID0gY29uc3RfY2FzdDxJbnB1dEVsZW1lbnQqPihpbnB1dEVsZW1lbnQpLT5kYXRhKCk7
Ci0gICAgaWYgKCFpc0NvbmZvcm1Ub0lucHV0TWFzayhkYXRhLCBwcm9wb3NlZFZhbHVlKSkgewot
ICAgICAgICBpZiAoaXNDb25mb3JtVG9JbnB1dE1hc2soZGF0YSwgZGF0YS52YWx1ZSgpKSkKLSAg
ICAgICAgICAgIHJldHVybiBkYXRhLnZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsK
LSAgICB9Ci0jZW5kaWYKLSAgICByZXR1cm4gcmVwbGFjZUVPTEFuZExpbWl0TGVuZ3RoKGlucHV0
RWxlbWVudCwgcHJvcG9zZWRWYWx1ZSwgc19tYXhpbXVtTGVuZ3RoKTsKLX0KLQotU3RyaW5nIElu
cHV0RWxlbWVudDo6c2FuaXRpemVVc2VySW5wdXRWYWx1ZShjb25zdCBJbnB1dEVsZW1lbnQqIGlu
cHV0RWxlbWVudCwgY29uc3QgU3RyaW5nJiBwcm9wb3NlZFZhbHVlLCBpbnQgbWF4TGVuZ3RoKQot
ewotICAgIHJldHVybiByZXBsYWNlRU9MQW5kTGltaXRMZW5ndGgoaW5wdXRFbGVtZW50LCBwcm9w
b3NlZFZhbHVlLCBtYXhMZW5ndGgpOwotfQotCi12b2lkIElucHV0RWxlbWVudDo6aGFuZGxlQmVm
b3JlVGV4dEluc2VydGVkRXZlbnQoSW5wdXRFbGVtZW50RGF0YSYgZGF0YSwgSW5wdXRFbGVtZW50
KiBpbnB1dEVsZW1lbnQsIEVsZW1lbnQqIGVsZW1lbnQsIEV2ZW50KiBldmVudCkKLXsKLSAgICBB
U1NFUlQoZXZlbnQtPmlzQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoKSk7Ci0gICAgLy8gTWFrZSBz
dXJlIHRoYXQgdGhlIHRleHQgdG8gYmUgaW5zZXJ0ZWQgd2lsbCBub3QgdmlvbGF0ZSB0aGUgbWF4
TGVuZ3RoLgotCi0gICAgLy8gV2UgdXNlIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6dGV4
dCgpIGluc3RlYWQgb2YgSW5wdXRFbGVtZW50Ojp2YWx1ZSgpCi0gICAgLy8gYmVjYXVzZSB0aGV5
IGNhbiBiZSBtaXNtYXRjaGVkIGJ5IHNhbml0aXplVmFsdWUoKSBpbgotICAgIC8vIFJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZTo6c3VidHJlZUhhc0NoYW5nZWQoKSBpbiBzb21lIGNhc2VzLgot
ICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IG51bUdyYXBoZW1lQ2x1c3RlcnModG9SZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmUoZWxlbWVudC0+cmVuZGVyZXIoKSktPnRleHQoKSk7Ci0KLSAgICAv
LyBzZWxlY3Rpb25MZW5ndGggcmVwcmVzZW50cyB0aGUgc2VsZWN0aW9uIGxlbmd0aCBvZiB0aGlz
IHRleHQgZmllbGQgdG8gYmUKLSAgICAvLyByZW1vdmVkIGJ5IHRoaXMgaW5zZXJ0aW9uLgotICAg
IC8vIElmIHRoZSB0ZXh0IGZpZWxkIGhhcyBubyBmb2N1cywgd2UgZG9uJ3QgbmVlZCB0byB0YWtl
IGFjY291bnQgb2YgdGhlCi0gICAgLy8gc2VsZWN0aW9uIGxlbmd0aC4gVGhlIHNlbGVjdGlvbiBp
cyB0aGUgc291cmNlIG9mIHRleHQgZHJhZy1hbmQtZHJvcCBpbgotICAgIC8vIHRoYXQgY2FzZSwg
YW5kIG5vdGhpbmcgaW4gdGhlIHRleHQgZmllbGQgd2lsbCBiZSByZW1vdmVkLgotICAgIHVuc2ln
bmVkIHNlbGVjdGlvbkxlbmd0aCA9IGVsZW1lbnQtPmZvY3VzZWQoKSA/IG51bUdyYXBoZW1lQ2x1
c3RlcnMocGxhaW5UZXh0KGVsZW1lbnQtPmRvY3VtZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigp
LT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKSkgOiAwOwotICAgIEFTU0VS
VChvbGRMZW5ndGggPj0gc2VsZWN0aW9uTGVuZ3RoKTsKLQotICAgIC8vIFNlbGVjdGVkIGNoYXJh
Y3RlcnMgd2lsbCBiZSByZW1vdmVkIGJ5IHRoZSBuZXh0IHRleHQgZXZlbnQuCi0gICAgdW5zaWdu
ZWQgYmFzZUxlbmd0aCA9IG9sZExlbmd0aCAtIHNlbGVjdGlvbkxlbmd0aDsKLSAgICB1bnNpZ25l
ZCBtYXhMZW5ndGggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5wdXRFbGVtZW50LT5zdXBwb3J0
c01heExlbmd0aCgpID8gZGF0YS5tYXhMZW5ndGgoKSA6IHNfbWF4aW11bUxlbmd0aCk7IC8vIG1h
eExlbmd0aCgpIGNhbiBuZXZlciBiZSBuZWdhdGl2ZS4KLSAgICB1bnNpZ25lZCBhcHBlbmRhYmxl
TGVuZ3RoID0gbWF4TGVuZ3RoID4gYmFzZUxlbmd0aCA/IG1heExlbmd0aCAtIGJhc2VMZW5ndGgg
OiAwOwotCi0gICAgLy8gVHJ1bmNhdGUgdGhlIGluc2VydGVkIHRleHQgdG8gYXZvaWQgdmlvbGF0
aW5nIHRoZSBtYXhMZW5ndGggYW5kIG90aGVyIGNvbnN0cmFpbnRzLgotICAgIEJlZm9yZVRleHRJ
bnNlcnRlZEV2ZW50KiB0ZXh0RXZlbnQgPSBzdGF0aWNfY2FzdDxCZWZvcmVUZXh0SW5zZXJ0ZWRF
dmVudCo+KGV2ZW50KTsKLSNpZiBFTkFCTEUoV0NTUykKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdl
ID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgU3RyaW5nIGNhbmRpZGF0ZVN0cmluZyA9IHRvUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKGVsZW1lbnQtPnJlbmRlcmVyKCkpLT50ZXh0KCk7Ci0g
ICAgaWYgKHNlbGVjdGlvbkxlbmd0aCkKLSAgICAgICAgY2FuZGlkYXRlU3RyaW5nLnJlcGxhY2Uo
cmFuZ2UtPnN0YXJ0T2Zmc2V0KCksIHJhbmdlLT5lbmRPZmZzZXQoKSwgdGV4dEV2ZW50LT50ZXh0
KCkpOwotICAgIGVsc2UKLSAgICAgICAgY2FuZGlkYXRlU3RyaW5nLmluc2VydCh0ZXh0RXZlbnQt
PnRleHQoKSwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpOwotICAgIGlmICghaXNDb25mb3JtVG9JbnB1
dE1hc2soaW5wdXRFbGVtZW50LT5kYXRhKCksIGNhbmRpZGF0ZVN0cmluZykpIHsKLSAgICAgICAg
dGV4dEV2ZW50LT5zZXRUZXh0KCIiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgot
ICAgIHRleHRFdmVudC0+c2V0VGV4dChzYW5pdGl6ZVVzZXJJbnB1dFZhbHVlKGlucHV0RWxlbWVu
dCwgdGV4dEV2ZW50LT50ZXh0KCksIGFwcGVuZGFibGVMZW5ndGgpKTsKLX0KLQotdm9pZCBJbnB1
dEVsZW1lbnQ6OnBhcnNlU2l6ZUF0dHJpYnV0ZShJbnB1dEVsZW1lbnREYXRhJiBkYXRhLCBFbGVt
ZW50KiBlbGVtZW50LCBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSkKLXsKLSAgICBkYXRhLnNldFNpemUo
YXR0cmlidXRlLT5pc051bGwoKSA/IElucHV0RWxlbWVudDo6c19kZWZhdWx0U2l6ZSA6IGF0dHJp
YnV0ZS0+dmFsdWUoKS50b0ludCgpKTsKLQotICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVy
ID0gZWxlbWVudC0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmVuZGVyZXItPnNldE5lZWRzTGF5b3V0
QW5kUHJlZldpZHRoc1JlY2FsYygpOwotfQotCi12b2lkIElucHV0RWxlbWVudDo6cGFyc2VNYXhM
ZW5ndGhBdHRyaWJ1dGUoSW5wdXRFbGVtZW50RGF0YSYgZGF0YSwgSW5wdXRFbGVtZW50KiBpbnB1
dEVsZW1lbnQsIEVsZW1lbnQqIGVsZW1lbnQsIEF0dHJpYnV0ZSogYXR0cmlidXRlKQotewotICAg
IGludCBtYXhMZW5ndGggPSBhdHRyaWJ1dGUtPmlzTnVsbCgpID8gSW5wdXRFbGVtZW50OjpzX21h
eGltdW1MZW5ndGggOiBhdHRyaWJ1dGUtPnZhbHVlKCkudG9JbnQoKTsKLSAgICBpZiAobWF4TGVu
Z3RoIDw9IDAgfHwgbWF4TGVuZ3RoID4gSW5wdXRFbGVtZW50OjpzX21heGltdW1MZW5ndGgpCi0g
ICAgICAgIG1heExlbmd0aCA9IElucHV0RWxlbWVudDo6c19tYXhpbXVtTGVuZ3RoOwotCi0gICAg
aW50IG9sZE1heExlbmd0aCA9IGRhdGEubWF4TGVuZ3RoKCk7Ci0gICAgZGF0YS5zZXRNYXhMZW5n
dGgobWF4TGVuZ3RoKTsKLQotICAgIGlmIChvbGRNYXhMZW5ndGggIT0gbWF4TGVuZ3RoKQotICAg
ICAgICB1cGRhdGVWYWx1ZUlmTmVlZGVkKGRhdGEsIGlucHV0RWxlbWVudCk7Ci0KLSAgICBlbGVt
ZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7Ci19Ci0KLXZvaWQgSW5wdXRFbGVtZW50Ojp1cGRh
dGVWYWx1ZUlmTmVlZGVkKElucHV0RWxlbWVudERhdGEmIGRhdGEsIElucHV0RWxlbWVudCogaW5w
dXRFbGVtZW50KQotewotICAgIFN0cmluZyBvbGRWYWx1ZSA9IGRhdGEudmFsdWUoKTsKLSAgICBT
dHJpbmcgbmV3VmFsdWUgPSBpbnB1dEVsZW1lbnQtPnNhbml0aXplVmFsdWUob2xkVmFsdWUpOwot
ICAgIGlmIChuZXdWYWx1ZSAhPSBvbGRWYWx1ZSkKLSAgICAgICAgaW5wdXRFbGVtZW50LT5zZXRW
YWx1ZShuZXdWYWx1ZSk7Ci19Ci0KLXZvaWQgSW5wdXRFbGVtZW50Ojpub3RpZnlGb3JtU3RhdGVD
aGFuZ2VkKEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZWxl
bWVudC0+ZG9jdW1lbnQoKTsKLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsK
LSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoUGFnZSogcGFnZSA9
IGZyYW1lLT5wYWdlKCkpCi0gICAgICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+Zm9ybVN0
YXRlRGlkQ2hhbmdlKGVsZW1lbnQpOwotfQotCi0vLyBJbnB1dEVsZW1lbnREYXRhCi1JbnB1dEVs
ZW1lbnREYXRhOjpJbnB1dEVsZW1lbnREYXRhKCkKLSAgICA6IG1fc2l6ZShJbnB1dEVsZW1lbnQ6
OnNfZGVmYXVsdFNpemUpCi0gICAgLCBtX21heExlbmd0aChJbnB1dEVsZW1lbnQ6OnNfbWF4aW11
bUxlbmd0aCkKLSAgICAsIG1fY2FjaGVkU2VsZWN0aW9uU3RhcnQoLTEpCi0gICAgLCBtX2NhY2hl
ZFNlbGVjdGlvbkVuZCgtMSkKLSNpZiBFTkFCTEUoV0NTUykKLSAgICAsIG1faW5wdXRGb3JtYXRN
YXNrKCIqbSIpCi0gICAgLCBtX21heElucHV0Q2hhcnNBbGxvd2VkKElucHV0RWxlbWVudDo6c19t
YXhpbXVtTGVuZ3RoKQotI2VuZGlmCi17Ci19Ci0KLUlucHV0RWxlbWVudERhdGE6On5JbnB1dEVs
ZW1lbnREYXRhKCkKLXsKLX0KLQotY29uc3QgQXRvbWljU3RyaW5nJiBJbnB1dEVsZW1lbnREYXRh
OjpuYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9uYW1lLmlzTnVsbCgpID8gZW1wdHlBdG9t
IDogbV9uYW1lOwotfQotCi0jaWYgRU5BQkxFKFdDU1MpCi1zdGF0aWMgaW5saW5lIGNvbnN0IEF0
b21pY1N0cmluZyYgZm9ybWF0Q29kZXMoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRv
bWljU3RyaW5nLCBjb2RlcywgKCJBYU5uWHhNbSIpKTsKLSAgICByZXR1cm4gY29kZXM7Ci19Ci0K
LXN0YXRpYyB1bnNpZ25lZCBjdXJzb3JQb3NpdGlvblRvTWFza0luZGV4KGNvbnN0IFN0cmluZyYg
aW5wdXRGb3JtYXRNYXNrLCB1bnNpZ25lZCBjdXJzb3JQb3NpdGlvbikKLXsKLSAgICBVQ2hhciBt
YXNrOwotICAgIGludCBpbmRleCA9IC0xOwotICAgIGRvIHsKLSAgICAgICAgbWFzayA9IGlucHV0
Rm9ybWF0TWFza1srK2luZGV4XTsKLSAgICAgICAgaWYgKG1hc2sgPT0gJ1xcJykKLSAgICAgICAg
ICAgICsraW5kZXg7Ci0gICAgICAgIGVsc2UgaWYgKG1hc2sgPT0gJyonIHx8IChpc0FTQ0lJRGln
aXQobWFzaykgJiYgbWFzayAhPSAnMCcpKSB7Ci0gICAgICAgICAgICBpbmRleCA9IGlucHV0Rm9y
bWF0TWFzay5sZW5ndGgoKSAtIDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
IH0gd2hpbGUgKGN1cnNvclBvc2l0aW9uLS0pOwotCi0gICAgcmV0dXJuIGluZGV4OwotfQotCi1i
b29sIElucHV0RWxlbWVudDo6aXNDb25mb3JtVG9JbnB1dE1hc2soY29uc3QgSW5wdXRFbGVtZW50
RGF0YSYgZGF0YSwgY29uc3QgU3RyaW5nJiBpbnB1dENoYXJzKQotewotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBpbnB1dENoYXJzLmxlbmd0aCgpOyArK2kpCi0gICAgICAgIGlmICghaXND
b25mb3JtVG9JbnB1dE1hc2soZGF0YSwgaW5wdXRDaGFyc1tpXSwgaSkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSW5wdXRFbGVtZW50Ojpp
c0NvbmZvcm1Ub0lucHV0TWFzayhjb25zdCBJbnB1dEVsZW1lbnREYXRhJiBkYXRhLCBVQ2hhciBp
bkNoYXIsIHVuc2lnbmVkIGN1cnNvclBvc2l0aW9uKQotewotICAgIFN0cmluZyBpbnB1dEZvcm1h
dE1hc2sgPSBkYXRhLmlucHV0Rm9ybWF0TWFzaygpOwotCi0gICAgaWYgKGlucHV0Rm9ybWF0TWFz
ay5pc0VtcHR5KCkgfHwgaW5wdXRGb3JtYXRNYXNrID09ICIqTSIgfHwgaW5wdXRGb3JtYXRNYXNr
ID09ICIqbSIpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGN1cnNvclBvc2l0aW9u
ID49IGRhdGEubWF4SW5wdXRDaGFyc0FsbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgdW5zaWduZWQgbWFza0luZGV4ID0gY3Vyc29yUG9zaXRpb25Ub01hc2tJbmRleChpbnB1
dEZvcm1hdE1hc2ssIGN1cnNvclBvc2l0aW9uKTsKLSAgICBib29sIG9rID0gdHJ1ZTsKLSAgICBV
Q2hhciBtYXNrID0gaW5wdXRGb3JtYXRNYXNrW21hc2tJbmRleF07Ci0gICAgLy8gTWF0Y2ggdGhl
IGlucHV0ZWQgY2hhcmFjdGVyIHdpdGggaW5wdXQgbWFzawotICAgIHN3aXRjaCAobWFzaykgewot
ICAgIGNhc2UgJ0EnOgotICAgICAgICBvayA9ICFpc0FTQ0lJRGlnaXQoaW5DaGFyKSAmJiAhaXNB
U0NJSUxvd2VyKGluQ2hhcikgJiYgaXNBU0NJSVByaW50YWJsZShpbkNoYXIpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlICdhJzoKLSAgICAgICAgb2sgPSAhaXNBU0NJSURpZ2l0KGluQ2hhcikg
JiYgIWlzQVNDSUlVcHBlcihpbkNoYXIpICYmIGlzQVNDSUlQcmludGFibGUoaW5DaGFyKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSAnTic6Ci0gICAgICAgIG9rID0gaXNBU0NJSURpZ2l0KGlu
Q2hhcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgJ24nOgotICAgICAgICBvayA9ICFpc0FT
Q0lJQWxwaGEoaW5DaGFyKSAmJiBpc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgJ1gnOgotICAgICAgICBvayA9ICFpc0FTQ0lJTG93ZXIoaW5DaGFyKSAm
JiBpc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgJ3gn
OgotICAgICAgICBvayA9ICFpc0FTQ0lJVXBwZXIoaW5DaGFyKSAmJiBpc0FTQ0lJUHJpbnRhYmxl
KGluQ2hhcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgJ00nOgotICAgIGNhc2UgJ20nOgot
ICAgICAgICBvayA9IGlzQVNDSUlQcmludGFibGUoaW5DaGFyKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgb2sgPSAobWFzayA9PSBpbkNoYXIpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0KLSAgICByZXR1cm4gb2s7Ci19Ci0KLVN0cmluZyBJbnB1dEVsZW1lbnQ6OnZh
bGlkYXRlSW5wdXRNYXNrKElucHV0RWxlbWVudERhdGEmIGRhdGEsIFN0cmluZyYgaW5wdXRNYXNr
KQotewotICAgIGlucHV0TWFzay5yZXBsYWNlKCJcXFxcIiwgIlxcIik7Ci0KLSAgICBib29sIGlz
VmFsaWQgPSB0cnVlOwotICAgIGJvb2wgaGFzV2lsZGNhcmQgPSBmYWxzZTsKLSAgICB1bnNpZ25l
ZCBlc2NhcGVDaGFyQ291bnQgPSAwOwotICAgIHVuc2lnbmVkIG1hc2tMZW5ndGggPSBpbnB1dE1h
c2subGVuZ3RoKCk7Ci0gICAgVUNoYXIgZm9ybWF0Q29kZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbWFza0xlbmd0aDsgKytpKSB7Ci0gICAgICAgIGZvcm1hdENvZGUgPSBpbnB1dE1h
c2tbaV07Ci0gICAgICAgIGlmIChmb3JtYXRDb2RlcygpLmZpbmQoZm9ybWF0Q29kZSkgPT0gLTEp
IHsKLSAgICAgICAgICAgIGlmIChmb3JtYXRDb2RlID09ICcqJyB8fCAoaXNBU0NJSURpZ2l0KGZv
cm1hdENvZGUpICYmIGZvcm1hdENvZGUgIT0gJzAnKSkgewotICAgICAgICAgICAgICAgIC8vIFZh
bGlkYXRlIGNvZGVzIHdoaWNoIGVuZHMgd2l0aCAnKmYnIG9yICduZicKLSAgICAgICAgICAgICAg
ICBmb3JtYXRDb2RlID0gaW5wdXRNYXNrWysraV07Ci0gICAgICAgICAgICAgICAgaWYgKChpICsg
MSAhPSBtYXNrTGVuZ3RoKSB8fCBmb3JtYXRDb2RlcygpLmZpbmQoZm9ybWF0Q29kZSkgPT0gLTEp
IHsKLSAgICAgICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaGFzV2lsZGNh
cmQgPSB0cnVlOwotICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtYXRDb2RlID09ICdcXCcpIHsK
LSAgICAgICAgICAgICAgICAvLyBza2lwIG92ZXIgdGhlIG5leHQgbWFzayBjaGFyYWN0ZXIKLSAg
ICAgICAgICAgICAgICArK2k7Ci0gICAgICAgICAgICAgICAgKytlc2NhcGVDaGFyQ291bnQ7Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGlmICghaXNWYWxpZCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIC8vIGNhbGN1
bGF0ZSB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgYWxsb3dlZCB0byBiZSBlbnRlcmVkIGJ5IGlu
cHV0IG1hc2sKLSAgICB1bnNpZ25lZCBhbGxvd2VkTGVuZ3RoID0gbWFza0xlbmd0aDsKLSAgICBp
ZiAoZXNjYXBlQ2hhckNvdW50KQotICAgICAgICBhbGxvd2VkTGVuZ3RoIC09IGVzY2FwZUNoYXJD
b3VudDsKLQotICAgIGlmIChoYXNXaWxkY2FyZCkgewotICAgICAgICBmb3JtYXRDb2RlID0gaW5w
dXRNYXNrW21hc2tMZW5ndGggLSAyXTsKLSAgICAgICAgaWYgKGZvcm1hdENvZGUgPT0gJyonKQot
ICAgICAgICAgICAgYWxsb3dlZExlbmd0aCA9IGRhdGEubWF4SW5wdXRDaGFyc0FsbG93ZWQoKTsK
LSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBsZWZ0TGVuID0gU3RyaW5nKCZm
b3JtYXRDb2RlKS50b0ludCgpOwotICAgICAgICAgICAgYWxsb3dlZExlbmd0aCA9IGxlZnRMZW4g
KyBhbGxvd2VkTGVuZ3RoIC0gMjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChhbGxvd2Vk
TGVuZ3RoIDwgZGF0YS5tYXhJbnB1dENoYXJzQWxsb3dlZCgpKQotICAgICAgICBkYXRhLnNldE1h
eElucHV0Q2hhcnNBbGxvd2VkKGFsbG93ZWRMZW5ndGgpOwotCi0gICAgcmV0dXJuIGlucHV0TWFz
azsKLX0KLQotI2VuZGlmCi0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9JbnB1
dEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNWE0ZTk1ZDE5ZmI2NDM4NjRjNjQ2MTJiZTE0N2ZkZDEyOTc4
YWY0OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjYgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBJ
bnB1dEVsZW1lbnRfaAotI2RlZmluZSBJbnB1dEVsZW1lbnRfaAotCi0jaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBBdHRyaWJ1dGU7Ci1jbGFzcyBEb2N1bWVudDsKLWNsYXNz
IEVsZW1lbnQ7Ci1jbGFzcyBFdmVudDsKLWNsYXNzIElucHV0RWxlbWVudERhdGE7Ci0KLWNsYXNz
IElucHV0RWxlbWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+SW5wdXRFbGVtZW50KCkgeyB9
Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNBdXRvZmlsbGVkKCkgY29uc3QgPSAwOwotICAgIHZpcnR1
YWwgYm9vbCBpc0NoZWNrZWQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzSW5kZXRl
cm1pbmF0ZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNJbnB1dFR5cGVIaWRkZW4o
KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzUGFzc3dvcmRGaWVsZCgpIGNvbnN0ID0g
MDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNTZWFyY2hGaWVsZCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0
dWFsIGJvb2wgaXNUZXh0RmllbGQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzUmFk
aW9CdXR0b24oKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzQ2hlY2tib3goKSBjb25z
dCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzUmFuZ2VDb250cm9sKCkgY29uc3QgPSAwOwotICAg
IAotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c01heExlbmd0aCgpIGNvbnN0ID0gMDsKLSAgICB2
aXJ0dWFsIGJvb2wgaXNTdGVwcGFibGUoKSBjb25zdCA9IDA7Ci0jaWYgRU5BQkxFKElOUFVUX1NQ
RUVDSCkKLSAgICB2aXJ0dWFsIGJvb2wgaXNTcGVlY2hFbmFibGVkKCkgY29uc3QgPSAwOwotI2Vu
ZGlmICAgIAotCi0gICAgdmlydHVhbCBib29sIHNlYXJjaEV2ZW50c1Nob3VsZEJlRGlzcGF0Y2hl
ZCgpIGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwgaW50IHNpemUoKSBjb25zdCA9IDA7Ci0gICAg
dmlydHVhbCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFZhbHVlKCkgY29uc3QgPSAwOwotICAgIHZp
cnR1YWwgU3RyaW5nIHZhbHVlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1
ZShjb25zdCBTdHJpbmcmLCBib29sIHNlbmRDaGFuZ2VFdmVudCA9IGZhbHNlKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHNldFZhbHVlRm9yVXNlcihjb25zdCBTdHJpbmcmKSA9IDA7Ci0gICAgLy8g
VGhlIHZhbHVlIHdoaWNoIGlzIGRyYXduIGJ5IGEgcmVuZGVyZXIuCi0gICAgdmlydHVhbCBTdHJp
bmcgdmlzaWJsZVZhbHVlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIGNvbnZlcnRG
cm9tVmlzaWJsZVZhbHVlKGNvbnN0IFN0cmluZyYpIGNvbnN0ID0gMDsKLQotICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIHN0cmluZyBjYW4gYmUgc2V0IGFzIHRoZSB2YWx1ZSBv
ZiBJbnB1dEVsZW1lbnQuCi0gICAgdmlydHVhbCBib29sIGlzQWNjZXB0YWJsZVZhbHVlKGNvbnN0
IFN0cmluZyYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyBzYW5pdGl6ZVZhbHVlKGNv
bnN0IFN0cmluZyYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVGcm9tUmVu
ZGVyZXIoY29uc3QgU3RyaW5nJikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGNhY2hlU2VsZWN0
aW9uKGludCBzdGFydCwgaW50IGVuZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZWxlY3QoKSA9
IDA7Ci0gIAotI2lmIEVOQUJMRShXQ1NTKQotICAgIHZpcnR1YWwgSW5wdXRFbGVtZW50RGF0YSBk
YXRhKCkgY29uc3QgPSAwOyAKLSNlbmRpZgotCi0gICAgc3RhdGljIGNvbnN0IGludCBzX21heGlt
dW1MZW5ndGg7Ci0gICAgc3RhdGljIGNvbnN0IGludCBzX2RlZmF1bHRTaXplOwotCi0gICAgLy8g
UmVwbGFjZXMgQ1JzIGFuZCBMRnMsIHNocmlua3MgdGhlIHZhbHVlIGZvciBzX21heGltdW1MZW5n
dGguCi0gICAgLy8gVGhpcyBzaG91bGQgYmUgYXBwbGllZCB0byB2YWx1ZXMgZnJvbSB0aGUgSFRN
TCB2YWx1ZSBhdHRyaWJ1dGUgYW5kIHRoZSBET00gdmFsdWUgcHJvcGVydHkuCi0gICAgLy8gVGhp
cyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYnkgc2FuaXRpemVWYWx1ZSgpIGltcGxl
bWVudGF0aW9ucy4KLSAgICAvLyBQdWJsaWMgc28gaXQgY2FuIGJlIGNhbGxlZCBieSBJbnB1dFR5
cGUuCi0gICAgc3RhdGljIFN0cmluZyBzYW5pdGl6ZVZhbHVlRm9yVGV4dEZpZWxkKGNvbnN0IElu
cHV0RWxlbWVudCosIGNvbnN0IFN0cmluZyYpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIHZv
aWQgZGlzcGF0Y2hGb2N1c0V2ZW50KElucHV0RWxlbWVudCosIEVsZW1lbnQqKTsKLSAgICBzdGF0
aWMgdm9pZCBkaXNwYXRjaEJsdXJFdmVudChJbnB1dEVsZW1lbnQqLCBFbGVtZW50Kik7Ci0gICAg
c3RhdGljIHZvaWQgdXBkYXRlRm9jdXNBcHBlYXJhbmNlKElucHV0RWxlbWVudERhdGEmLCBJbnB1
dEVsZW1lbnQqLCBFbGVtZW50KiwgYm9vbCByZXN0b3JlUHJldmlvdXNTZWxlY3Rpb24pOwotICAg
IHN0YXRpYyB2b2lkIHVwZGF0ZVNlbGVjdGlvblJhbmdlKElucHV0RWxlbWVudCosIEVsZW1lbnQq
LCBpbnQgc3RhcnQsIGludCBlbmQpOwotICAgIHN0YXRpYyB2b2lkIGFib3V0VG9VbmxvYWQoSW5w
dXRFbGVtZW50KiwgRWxlbWVudCopOwotICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlRnJvbVJlbmRl
cmVyKElucHV0RWxlbWVudERhdGEmLCBJbnB1dEVsZW1lbnQqLCBFbGVtZW50KiwgY29uc3QgU3Ry
aW5nJik7Ci0gICAgLy8gUmVwbGFjZXMgQ1JzIGFuZCBMRnMsIHNocmlua3MgdGhlIHZhbHVlIGZv
ciB0aGUgc3BlY2lmaWVkIG1heGltdW0gbGVuZ3RoLgotICAgIC8vIFRoaXMgc2hvdWxkIGJlIGFw
cGxpZWQgdG8gdmFsdWVzIHNwZWNpZmllZCBieSB1c2Vycy4KLSAgICAvLyBUaGUgaW5wdXQgc3Ry
aW5nIG1heSBiZSBhIGZyYWdtZW50IG9mIHRoZSB3aG9sZSB2YWx1ZS4KLSAgICBzdGF0aWMgU3Ry
aW5nIHNhbml0aXplVXNlcklucHV0VmFsdWUoY29uc3QgSW5wdXRFbGVtZW50KiwgY29uc3QgU3Ry
aW5nJiwgaW50KTsKLSAgICBzdGF0aWMgdm9pZCBoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVu
dChJbnB1dEVsZW1lbnREYXRhJiwgSW5wdXRFbGVtZW50KiwgRWxlbWVudCosIEV2ZW50Kik7Ci0g
ICAgc3RhdGljIHZvaWQgcGFyc2VTaXplQXR0cmlidXRlKElucHV0RWxlbWVudERhdGEmLCBFbGVt
ZW50KiwgQXR0cmlidXRlKik7Ci0gICAgc3RhdGljIHZvaWQgcGFyc2VNYXhMZW5ndGhBdHRyaWJ1
dGUoSW5wdXRFbGVtZW50RGF0YSYsIElucHV0RWxlbWVudCosIEVsZW1lbnQqLCBBdHRyaWJ1dGUq
KTsKLSAgICBzdGF0aWMgdm9pZCB1cGRhdGVWYWx1ZUlmTmVlZGVkKElucHV0RWxlbWVudERhdGEm
LCBJbnB1dEVsZW1lbnQqKTsKLSAgICBzdGF0aWMgdm9pZCBub3RpZnlGb3JtU3RhdGVDaGFuZ2Vk
KEVsZW1lbnQqKTsKLSNpZiBFTkFCTEUoV0NTUykKLSAgICBzdGF0aWMgYm9vbCBpc0NvbmZvcm1U
b0lucHV0TWFzayhjb25zdCBJbnB1dEVsZW1lbnREYXRhJiwgY29uc3QgU3RyaW5nJik7Ci0gICAg
c3RhdGljIGJvb2wgaXNDb25mb3JtVG9JbnB1dE1hc2soY29uc3QgSW5wdXRFbGVtZW50RGF0YSYs
IFVDaGFyLCB1bnNpZ25lZCk7Ci0gICAgc3RhdGljIFN0cmluZyB2YWxpZGF0ZUlucHV0TWFzayhJ
bnB1dEVsZW1lbnREYXRhJiwgU3RyaW5nJik7Ci0jZW5kaWYKLX07Ci0KLS8vIEhUTUxJbnB1dEVs
ZW1lbnQgaG9sZCB0aGlzIHN0cnVjdCBhcyBtZW1iZXIgdmFyaWFibGUKLS8vIGFuZCBwYXNzIGl0
IHRvIHRoZSBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyBpbiBJbnB1dEVsZW1lbnQKLWNsYXNzIElu
cHV0RWxlbWVudERhdGEgewotcHVibGljOgotICAgIElucHV0RWxlbWVudERhdGEoKTsKLSAgICB+
SW5wdXRFbGVtZW50RGF0YSgpOwotCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKCkgY29u
c3Q7Ci0gICAgdm9pZCBzZXROYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpIHsgbV9uYW1l
ID0gdmFsdWU7IH0KLQotICAgIC8vIFRoZSBudWxsIFN0cmluZyByZXByZXNlbnRzICJ1c2UgdGhl
IGRlZmF1bHQgdmFsdWUsIiBhbmQgdGhlIGVtcHR5IFN0cmluZwotICAgIC8vIHJlcHJlc2VudHMg
dGhlIGVtcHR5IHZhbHVlLgotICAgIFN0cmluZyB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWU7IH0KLSAgICB2b2lkIHNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpIHsgbV92YWx1ZSA9
IHZhbHVlOyB9Ci0KLSAgICBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFZhbHVlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdWdnZXN0ZWRWYWx1ZTsgfQotICAgIHZvaWQgc2V0U3VnZ2VzdGVkVmFsdWUoY29u
c3QgU3RyaW5nJiB2YWx1ZSkgeyBtX3N1Z2dlc3RlZFZhbHVlID0gdmFsdWU7IH0KLQotICAgIGlu
dCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0gICAgdm9pZCBzZXRTaXplKGludCB2
YWx1ZSkgeyBtX3NpemUgPSB2YWx1ZTsgfQotCi0gICAgaW50IG1heExlbmd0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fbWF4TGVuZ3RoOyB9Ci0gICAgdm9pZCBzZXRNYXhMZW5ndGgoaW50IHZhbHVlKSB7
IG1fbWF4TGVuZ3RoID0gdmFsdWU7IH0KLQotICAgIGludCBjYWNoZWRTZWxlY3Rpb25TdGFydCgp
IGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkU2VsZWN0aW9uU3RhcnQ7IH0KLSAgICB2b2lkIHNldENh
Y2hlZFNlbGVjdGlvblN0YXJ0KGludCB2YWx1ZSkgeyBtX2NhY2hlZFNlbGVjdGlvblN0YXJ0ID0g
dmFsdWU7IH0KLQotICAgIGludCBjYWNoZWRTZWxlY3Rpb25FbmQoKSBjb25zdCB7IHJldHVybiBt
X2NhY2hlZFNlbGVjdGlvbkVuZDsgfQotICAgIHZvaWQgc2V0Q2FjaGVkU2VsZWN0aW9uRW5kKGlu
dCB2YWx1ZSkgeyBtX2NhY2hlZFNlbGVjdGlvbkVuZCA9IHZhbHVlOyB9Ci0KLSNpZiBFTkFCTEUo
V0NTUykKLSAgICBTdHJpbmcgaW5wdXRGb3JtYXRNYXNrKCkgY29uc3QgeyByZXR1cm4gbV9pbnB1
dEZvcm1hdE1hc2s7IH0KLSAgICB2b2lkIHNldElucHV0Rm9ybWF0TWFzayhjb25zdCBTdHJpbmcm
IG1hc2spIHsgbV9pbnB1dEZvcm1hdE1hc2sgPSBtYXNrOyB9Ci0gCi0gICAgdW5zaWduZWQgbWF4
SW5wdXRDaGFyc0FsbG93ZWQoKSBjb25zdCB7IHJldHVybiBtX21heElucHV0Q2hhcnNBbGxvd2Vk
OyB9Ci0gICAgdm9pZCBzZXRNYXhJbnB1dENoYXJzQWxsb3dlZCh1bnNpZ25lZCBtYXhMZW5ndGgp
IHsgbV9tYXhJbnB1dENoYXJzQWxsb3dlZCA9IG1heExlbmd0aDsgfQotICAKLSNlbmRpZgotCi1w
cml2YXRlOgotICAgIEF0b21pY1N0cmluZyBtX25hbWU7Ci0gICAgU3RyaW5nIG1fdmFsdWU7Ci0g
ICAgU3RyaW5nIG1fc3VnZ2VzdGVkVmFsdWU7Ci0gICAgaW50IG1fc2l6ZTsKLSAgICBpbnQgbV9t
YXhMZW5ndGg7Ci0gICAgaW50IG1fY2FjaGVkU2VsZWN0aW9uU3RhcnQ7Ci0gICAgaW50IG1fY2Fj
aGVkU2VsZWN0aW9uRW5kOwotI2lmIEVOQUJMRShXQ1NTKQotICAgIFN0cmluZyBtX2lucHV0Rm9y
bWF0TWFzazsKLSAgICB1bnNpZ25lZCBtX21heElucHV0Q2hhcnNBbGxvd2VkOwotI2VuZGlmCi19
OwotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4IDBmYzQwMGM0YzI1YThjYjc1NmZi
OGJmOTU0OWVhNjdhOTAzNmU4ODMuLjQ0MjhmZmFjNDNiMGFiYWNkNGI1MWQ5YzUxMmYzOTJhMjcx
NTA5NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTU1OSw3ICs1NTksNyBAQCB2b2lkIE5vZGU6OnNl
dFNoYWRvd0hvc3QoRWxlbWVudCogaG9zdCkKICAgICBzZXRQYXJlbnQoaG9zdCk7CiB9CiAKLUlu
cHV0RWxlbWVudCogTm9kZTo6dG9JbnB1dEVsZW1lbnQoKQorSFRNTElucHV0RWxlbWVudCogTm9k
ZTo6dG9JbnB1dEVsZW1lbnQoKQogewogICAgIC8vIElmIG9uZSBvZiB0aGUgYmVsb3cgQVNTRVJU
cyB0cmlnZ2VyLCB5b3UgYXJlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbgogICAgIC8vIGRpcmVjdGx5
IG9yIGluZGlyZWN0bHkgZnJvbSBhIGNvbnN0cnVjdG9yIG9yIGRlc3RydWN0b3Igb2YgdGhpcyBv
YmplY3QuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oIGIvU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuaAppbmRleCAwNTcxZGZhYzU5NGQ0MGRkZDUxMWFjMWM2OWZhZjRlZDMz
MWUxZjllLi5jMjg4ZDFmOWFiMTZmODM0ZTBmZTY0OWQ4NmFhMzdlMDI3YjYzYzEyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlLmgKQEAgLTU0LDcgKzU0LDcgQEAgY2xhc3MgRXZlbnRDb250ZXh0OwogY2xhc3MgRXZlbnRM
aXN0ZW5lcjsKIGNsYXNzIEZsb2F0UG9pbnQ7CiBjbGFzcyBGcmFtZTsKLWNsYXNzIElucHV0RWxl
bWVudDsKK2NsYXNzIEhUTUxJbnB1dEVsZW1lbnQ7CiBjbGFzcyBJbnRSZWN0OwogY2xhc3MgS2V5
Ym9hcmRFdmVudDsKIGNsYXNzIE5TUmVzb2x2ZXI7CkBAIC01MjQsNyArNTI0LDcgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCBOb2RlKiB0b05vZGUoKSB7IHJldHVybiB0aGlzOyB9CiAKLSAgICB2
aXJ0dWFsIElucHV0RWxlbWVudCogdG9JbnB1dEVsZW1lbnQoKTsKKyAgICB2aXJ0dWFsIEhUTUxJ
bnB1dEVsZW1lbnQqIHRvSW5wdXRFbGVtZW50KCk7CiAKICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKaW5kZXggZjljY2FmOTA0Yzc3MzBjNzllODk2
YTc5YzU5YmU2NDMyMjQwN2VjMi4uMmNmYTk4MzgzYzM5ZWI2N2Q3ZmRmODYyZTQ3MGYyOGY1N2Nh
Yjc3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCkBAIC02LDYg
KzYsNyBAQAogICogICAgICAgICAgIChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55
cG9wLmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIChzYW1Ad2Via2l0
Lm9yZykKICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTMwLDExICszMSwxNCBAQAogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKICNpbmNs
dWRlICJBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5oIgor
I2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUg
IkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV2
ZW50TmFtZXMuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRmlsZUxp
c3QuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxDb2xsZWN0aW9uLmgiCiAj
aW5jbHVkZSAiSFRNTERhdGFMaXN0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVu
dC5oIgpAQCAtNDUsMTEgKzQ5LDE0IEBACiAjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgogI2lu
Y2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCisjaW5j
bHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2luY2x1ZGUg
IlJlbmRlclRleHRDb250cm9sLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUg
IlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIldoZWVsRXZlbnQuaCIKICNpbmNsdWRlIDx3dGYv
TWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KQEAgLTYwLDEwICs2
NywyMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7
CiAKKy8vIEZJWE1FOiBBY2NvcmRpbmcgdG8gSFRNTDQsIHRoZSBsZW5ndGggYXR0cmlidXRlJ3Mg
dmFsdWUgY2FuIGJlIGFyYml0cmFyaWx5CisvLyBsYXJnZS4gSG93ZXZlciwgZHVlIHRvIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDUzNiB0aGluZ3MKKy8vIGdldCBy
YXRoZXIgc2x1Z2dpc2ggd2hlbiBhIHRleHQgZmllbGQgaGFzIGEgbGFyZ2VyIG51bWJlciBvZiBj
aGFyYWN0ZXJzIHRoYW4KKy8vIHRoaXMsIGV2ZW4gd2hlbiBqdXN0IGNsaWNraW5nIGluIHRoZSB0
ZXh0IGZpZWxkLgorY29uc3QgaW50IEhUTUxJbnB1dEVsZW1lbnQ6Om1heGltdW1MZW5ndGggPSA1
MjQyODg7Citjb25zdCBpbnQgZGVmYXVsdFNpemUgPSAyMDsKIGNvbnN0IGludCBtYXhTYXZlZFJl
c3VsdHMgPSAyNTY7CiAKIEhUTUxJbnB1dEVsZW1lbnQ6OkhUTUxJbnB1dEVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBIVE1MRm9ybUVsZW1l
bnQqIGZvcm0sIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQogICAgIDogSFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQsIGZvcm0pCisgICAgLCBtX3NpemUoZGVmYXVsdFNp
emUpCisgICAgLCBtX21heExlbmd0aChtYXhpbXVtTGVuZ3RoKQorICAgICwgbV9jYWNoZWRTZWxl
Y3Rpb25TdGFydCgtMSkKKyAgICAsIG1fY2FjaGVkU2VsZWN0aW9uRW5kKC0xKQogICAgICwgbV9t
YXhSZXN1bHRzKC0xKQogICAgICwgbV9pc0NoZWNrZWQoZmFsc2UpCiAgICAgLCBtX3JlZmxlY3Rz
Q2hlY2tlZEF0dHJpYnV0ZSh0cnVlKQpAQCAtOTgsNyArMTE1LDcgQEAgSFRNTElucHV0RWxlbWVu
dDo6fkhUTUxJbnB1dEVsZW1lbnQoKQogCiBjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxJbnB1dEVs
ZW1lbnQ6OmZvcm1Db250cm9sTmFtZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZGF0YS5uYW1l
KCk7CisgICAgcmV0dXJuIG1fbmFtZS5pc051bGwoKSA/IGVtcHR5QXRvbSA6IG1fbmFtZTsKIH0K
IAogYm9vbCBIVE1MSW5wdXRFbGVtZW50OjphdXRvQ29tcGxldGUoKSBjb25zdApAQCAtMjAwLDcg
KzIxNyw3IEBAIGJvb2wgSFRNTElucHV0RWxlbWVudDo6dG9vTG9uZyhjb25zdCBTdHJpbmcmIHZh
bHVlLCBOZWVkc1RvQ2hlY2tEaXJ0eUZsYWcgY2hlY2spCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBpZiAoY2hlY2sgPT0gQ2hlY2tEaXJ0eUZsYWcpIHsKICAgICAgICAgLy8gUmV0dXJuIGZh
bHNlIGZvciB0aGUgZGVmYXVsdCB2YWx1ZSBldmVuIGlmIGl0IGlzIGxvbmdlciB0aGFuIG1heExl
bmd0aC4KLSAgICAgICAgYm9vbCB1c2VyRWRpdGVkID0gIW1fZGF0YS52YWx1ZSgpLmlzTnVsbCgp
OworICAgICAgICBib29sIHVzZXJFZGl0ZWQgPSAhbV92YWx1ZS5pc051bGwoKTsKICAgICAgICAg
aWYgKCF1c2VyRWRpdGVkKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTM5
MywxNSArNDEwLDI5IEBAIGJvb2wgSFRNTElucHV0RWxlbWVudDo6aXNNb3VzZUZvY3VzYWJsZSgp
IGNvbnN0CiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6dXBkYXRlRm9jdXNBcHBlYXJhbmNlKGJv
b2wgcmVzdG9yZVByZXZpb3VzU2VsZWN0aW9uKQogewotICAgIGlmIChpc1RleHRGaWVsZCgpKQot
ICAgICAgICBJbnB1dEVsZW1lbnQ6OnVwZGF0ZUZvY3VzQXBwZWFyYW5jZShtX2RhdGEsIHRoaXMs
IHRoaXMsIHJlc3RvcmVQcmV2aW91c1NlbGVjdGlvbik7Ci0gICAgZWxzZQorICAgIGlmIChpc1Rl
eHRGaWVsZCgpKSB7CisgICAgICAgIGlmICghcmVzdG9yZVByZXZpb3VzU2VsZWN0aW9uIHx8IG1f
Y2FjaGVkU2VsZWN0aW9uU3RhcnQgPT0gLTEpCisgICAgICAgICAgICBzZWxlY3QoKTsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAvLyBSZXN0b3JlIHRoZSBjYWNoZWQgc2VsZWN0aW9uLgor
ICAgICAgICAgICAgV2ViQ29yZTo6c2V0U2VsZWN0aW9uUmFuZ2UodGhpcywgbV9jYWNoZWRTZWxl
Y3Rpb25TdGFydCwgbV9jYWNoZWRTZWxlY3Rpb25FbmQpOworICAgICAgICB9CisgICAgICAgIGlm
IChkb2N1bWVudCgpLT5mcmFtZSgpKQorICAgICAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+
c2VsZWN0aW9uKCktPnJldmVhbFNlbGVjdGlvbigpOworICAgIH0gZWxzZQogICAgICAgICBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjp1cGRhdGVGb2N1c0FwcGVhcmFuY2UocmVzdG9y
ZVByZXZpb3VzU2VsZWN0aW9uKTsKIH0KIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjphYm91dFRv
VW5sb2FkKCkKIHsKLSAgICBJbnB1dEVsZW1lbnQ6OmFib3V0VG9VbmxvYWQodGhpcywgdGhpcyk7
CisgICAgaWYgKCFpc1RleHRGaWVsZCgpIHx8ICFmb2N1c2VkKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCk7CisgICAgaWYgKCFmcmFt
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZnJhbWUtPmVkaXRvcigpLT50ZXh0RmllbGREaWRF
bmRFZGl0aW5nKHRoaXMpOwogfQogCiBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OnNob3VsZFVzZUlu
cHV0TWV0aG9kKCkgY29uc3QKQEAgLTQxMSwxMyArNDQyLDI0IEBAIGJvb2wgSFRNTElucHV0RWxl
bWVudDo6c2hvdWxkVXNlSW5wdXRNZXRob2QoKSBjb25zdAogCiB2b2lkIEhUTUxJbnB1dEVsZW1l
bnQ6OmhhbmRsZUZvY3VzRXZlbnQoKQogewotICAgIElucHV0RWxlbWVudDo6ZGlzcGF0Y2hGb2N1
c0V2ZW50KHRoaXMsIHRoaXMpOworICAgIGlmICghaXNUZXh0RmllbGQoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIGlmIChpc1Bhc3N3b3JkRmllbGQoKSAmJiBkb2N1bWVudCgpLT5mcmFtZSgpKQor
ICAgICAgICBkb2N1bWVudCgpLT5zZXRVc2VTZWN1cmVLZXlib2FyZEVudHJ5V2hlbkFjdGl2ZSh0
cnVlKTsKIH0KIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpoYW5kbGVCbHVyRXZlbnQoKQogewog
ICAgIG1faW5wdXRUeXBlLT5oYW5kbGVCbHVyRXZlbnQoKTsKLSAgICBJbnB1dEVsZW1lbnQ6OmRp
c3BhdGNoQmx1ckV2ZW50KHRoaXMsIHRoaXMpOworCisgICAgaWYgKCFpc1RleHRGaWVsZCgpKQor
ICAgICAgICByZXR1cm47CisgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsK
KyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGlzUGFzc3dvcmRGaWVs
ZCgpKQorICAgICAgICBkb2N1bWVudCgpLT5zZXRVc2VTZWN1cmVLZXlib2FyZEVudHJ5V2hlbkFj
dGl2ZShmYWxzZSk7CisgICAgZnJhbWUtPmVkaXRvcigpLT50ZXh0RmllbGREaWRFbmRFZGl0aW5n
KHRoaXMpOwogfQogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldFR5cGUoY29uc3QgU3RyaW5n
JiB0eXBlKQpAQCAtNDY2LDE0ICs1MDgsMTQgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojp1cGRh
dGVUeXBlKCkKIAogICAgIGJvb2wgd2lsbFN0b3JlVmFsdWUgPSBtX2lucHV0VHlwZS0+c3RvcmVz
VmFsdWVTZXBhcmF0ZUZyb21BdHRyaWJ1dGUoKTsKIAotICAgIGlmIChkaWRTdG9yZVZhbHVlICYm
ICF3aWxsU3RvcmVWYWx1ZSAmJiAhbV9kYXRhLnZhbHVlKCkuaXNOdWxsKCkpIHsKLSAgICAgICAg
c2V0QXR0cmlidXRlKHZhbHVlQXR0ciwgbV9kYXRhLnZhbHVlKCkpOwotICAgICAgICBtX2RhdGEu
c2V0VmFsdWUoU3RyaW5nKCkpOworICAgIGlmIChkaWRTdG9yZVZhbHVlICYmICF3aWxsU3RvcmVW
YWx1ZSAmJiAhbV92YWx1ZS5pc051bGwoKSkgeworICAgICAgICBzZXRBdHRyaWJ1dGUodmFsdWVB
dHRyLCBtX3ZhbHVlKTsKKyAgICAgICAgbV92YWx1ZSA9IFN0cmluZygpOwogICAgIH0KICAgICBp
ZiAoIWRpZFN0b3JlVmFsdWUgJiYgd2lsbFN0b3JlVmFsdWUpCi0gICAgICAgIG1fZGF0YS5zZXRW
YWx1ZShzYW5pdGl6ZVZhbHVlKGZhc3RHZXRBdHRyaWJ1dGUodmFsdWVBdHRyKSkpOworICAgICAg
ICBtX3ZhbHVlID0gIHNhbml0aXplVmFsdWUoZmFzdEdldEF0dHJpYnV0ZSh2YWx1ZUF0dHIpKTsK
ICAgICBlbHNlCi0gICAgICAgIElucHV0RWxlbWVudDo6dXBkYXRlVmFsdWVJZk5lZWRlZChtX2Rh
dGEsIHRoaXMpOworICAgICAgICB1cGRhdGVWYWx1ZUlmTmVlZGVkKCk7CiAKICAgICBpZiAobmVl
ZGVkQWN0aXZhdGlvbkNhbGxiYWNrKQogICAgICAgICB1bnJlZ2lzdGVyRm9yQWN0aXZhdGlvbkNh
bGxiYWNrSWZOZWVkZWQoKTsKQEAgLTUwMiw3ICs1NDQsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1l
bnQ6OnVwZGF0ZVR5cGUoKQogICAgIGNoZWNrZWRSYWRpb0J1dHRvbnMoKS5hZGRCdXR0b24odGhp
cyk7CiAKICAgICBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKLSAgICBJbnB1dEVsZW1lbnQ6Om5v
dGlmeUZvcm1TdGF0ZUNoYW5nZWQodGhpcyk7CisgICAgbm90aWZ5Rm9ybVN0YXRlQ2hhbmdlZCgp
OwogfQogCiBjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxJbnB1dEVsZW1lbnQ6OmZvcm1Db250cm9s
VHlwZSgpIGNvbnN0CkBAIC01NjAsNyArNjAyLDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7CiAgICAgaWYgKGF0dHItPm5h
bWUoKSA9PSBuYW1lQXR0cikgewogICAgICAgICBjaGVja2VkUmFkaW9CdXR0b25zKCkucmVtb3Zl
QnV0dG9uKHRoaXMpOwotICAgICAgICBtX2RhdGEuc2V0TmFtZShhdHRyLT52YWx1ZSgpKTsKKyAg
ICAgICAgbV9uYW1lID0gYXR0ci0+dmFsdWUoKTsKICAgICAgICAgY2hlY2tlZFJhZGlvQnV0dG9u
cygpLmFkZEJ1dHRvbih0aGlzKTsKICAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhT
dGF0ZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gYXV0b2NvbXBsZXRlQXR0cikgewpAQCAtNTgyLDcgKzYyNCw3IEBAIHZvaWQgSFRN
TElucHV0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogICAg
ICAgICB1cGRhdGVUeXBlKCk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gdmFsdWVB
dHRyKSB7CiAgICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0byBzZXRDaGFuZ2VkIGlmIHRoZSBmb3Jt
IGlzIGxvb2tpbmcgYXQgdGhlIGRlZmF1bHQgdmFsdWUgcmlnaHQgbm93LgotICAgICAgICBpZiAo
bV9kYXRhLnZhbHVlKCkuaXNOdWxsKCkpCisgICAgICAgIGlmIChtX3ZhbHVlLmlzTnVsbCgpKQog
ICAgICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwogICAgICAgICBzZXRGb3JtQ29udHJv
bFZhbHVlTWF0Y2hlc1JlbmRlcmVyKGZhbHNlKTsKICAgICAgICAgc2V0TmVlZHNWYWxpZGl0eUNo
ZWNrKCk7CkBAIC01OTYsMTEgKzYzOCwyMCBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKICAgICAgICAgICAgIG1fcmVmbGVjdHND
aGVja2VkQXR0cmlidXRlID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IG1heGxlbmd0aEF0dHIpIHsKLSAgICAgICAgSW5wdXRFbGVtZW50OjpwYXJzZU1h
eExlbmd0aEF0dHJpYnV0ZShtX2RhdGEsIHRoaXMsIHRoaXMsIGF0dHIpOworICAgICAgICBpbnQg
bWF4TGVuZ3RoID0gYXR0ci0+aXNOdWxsKCkgPyBtYXhpbXVtTGVuZ3RoIDogYXR0ci0+dmFsdWUo
KS50b0ludCgpOworICAgICAgICBpZiAobWF4TGVuZ3RoIDw9IDAgfHwgbWF4TGVuZ3RoID4gbWF4
aW11bUxlbmd0aCkKKyAgICAgICAgICAgIG1heExlbmd0aCA9IG1heGltdW1MZW5ndGg7CisgICAg
ICAgIGludCBvbGRNYXhMZW5ndGggPSBtX21heExlbmd0aDsKKyAgICAgICAgbV9tYXhMZW5ndGgg
PSBtYXhMZW5ndGg7CisgICAgICAgIGlmIChvbGRNYXhMZW5ndGggIT0gbWF4TGVuZ3RoKQorICAg
ICAgICAgICAgdXBkYXRlVmFsdWVJZk5lZWRlZCgpOworICAgICAgICBzZXROZWVkc1N0eWxlUmVj
YWxjKCk7CiAgICAgICAgIHNldE5lZWRzVmFsaWRpdHlDaGVjaygpOwotICAgIH0gZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IHNpemVBdHRyKQotICAgICAgICBJbnB1dEVsZW1lbnQ6OnBhcnNlU2l6
ZUF0dHJpYnV0ZShtX2RhdGEsIHRoaXMsIGF0dHIpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBhbHRBdHRyKQorICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHNpemVBdHRyKSB7
CisgICAgICAgIG1fc2l6ZSA9IGF0dHItPmlzTnVsbCgpID8gZGVmYXVsdFNpemUgOiBhdHRyLT52
YWx1ZSgpLnRvSW50KCk7CisgICAgICAgIGlmIChyZW5kZXJlcigpKQorICAgICAgICAgICAgcmVu
ZGVyZXIoKS0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CisgICAgfSBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gYWx0QXR0cikKICAgICAgICAgbV9pbnB1dFR5cGUtPmFsdEF0
dHJpYnV0ZUNoYW5nZWQoKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gc3JjQXR0cikK
ICAgICAgICAgbV9pbnB1dFR5cGUtPnNyY0F0dHJpYnV0ZUNoYW5nZWQoKTsKQEAgLTgwOCwxNCAr
ODU5LDE0IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0SW5kZXRlcm1pbmF0ZShib29sIG5l
d1ZhbHVlKQogCiBpbnQgSFRNTElucHV0RWxlbWVudDo6c2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG1fZGF0YS5zaXplKCk7CisgICAgcmV0dXJuIG1fc2l6ZTsKIH0KIAogdm9pZCBIVE1MSW5w
dXRFbGVtZW50Ojpjb3B5Tm9uQXR0cmlidXRlUHJvcGVydGllcyhjb25zdCBFbGVtZW50KiBzb3Vy
Y2UpCiB7CiAgICAgY29uc3QgSFRNTElucHV0RWxlbWVudCogc291cmNlRWxlbWVudCA9IHN0YXRp
Y19jYXN0PGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQqPihzb3VyY2UpOwogCi0gICAgbV9kYXRhLnNl
dFZhbHVlKHNvdXJjZUVsZW1lbnQtPm1fZGF0YS52YWx1ZSgpKTsKKyAgICBtX3ZhbHVlID0gc291
cmNlRWxlbWVudC0+bV92YWx1ZTsKICAgICBzZXRDaGVja2VkKHNvdXJjZUVsZW1lbnQtPm1faXND
aGVja2VkKTsKICAgICBtX3JlZmxlY3RzQ2hlY2tlZEF0dHJpYnV0ZSA9IHNvdXJjZUVsZW1lbnQt
Pm1fcmVmbGVjdHNDaGVja2VkQXR0cmlidXRlOwogICAgIG1faXNJbmRldGVybWluYXRlID0gc291
cmNlRWxlbWVudC0+bV9pc0luZGV0ZXJtaW5hdGU7CkBAIC04MjksNyArODgwLDcgQEAgU3RyaW5n
IEhUTUxJbnB1dEVsZW1lbnQ6OnZhbHVlKCkgY29uc3QKICAgICBpZiAobV9pbnB1dFR5cGUtPmdl
dFR5cGVTcGVjaWZpY1ZhbHVlKHZhbHVlKSkKICAgICAgICAgcmV0dXJuIHZhbHVlOwogCi0gICAg
dmFsdWUgPSBtX2RhdGEudmFsdWUoKTsKKyAgICB2YWx1ZSA9IG1fdmFsdWU7CiAgICAgaWYgKCF2
YWx1ZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIHZhbHVlOwogCkBAIC04NTcsNyArOTA4LDcg
QEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1ZUZvclVzZXIoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKIAogY29uc3QgU3RyaW5nJiBIVE1MSW5wdXRFbGVtZW50OjpzdWdnZXN0ZWRWYWx1ZSgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZGF0YS5zdWdnZXN0ZWRWYWx1ZSgpOworICAgIHJldHVy
biBtX3N1Z2dlc3RlZFZhbHVlOwogfQogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldFN1Z2dl
c3RlZFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCkBAIC04NjUsNyArOTE2LDcgQEAgdm9pZCBI
VE1MSW5wdXRFbGVtZW50OjpzZXRTdWdnZXN0ZWRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQog
ICAgIGlmICghbV9pbnB1dFR5cGUtPmNhblNldFN1Z2dlc3RlZFZhbHVlKCkpCiAgICAgICAgIHJl
dHVybjsKICAgICBzZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKGZhbHNlKTsKLSAg
ICBtX2RhdGEuc2V0U3VnZ2VzdGVkVmFsdWUoc2FuaXRpemVWYWx1ZSh2YWx1ZSkpOworICAgIG1f
c3VnZ2VzdGVkVmFsdWUgPSBzYW5pdGl6ZVZhbHVlKHZhbHVlKTsKICAgICB1cGRhdGVQbGFjZWhv
bGRlclZpc2liaWxpdHkoZmFsc2UpOwogICAgIGlmIChyZW5kZXJlcigpKQogICAgICAgICByZW5k
ZXJlcigpLT51cGRhdGVGcm9tRWxlbWVudCgpOwpAQCAtODgyLDcgKzkzMyw3IEBAIHZvaWQgSFRN
TElucHV0RWxlbWVudDo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBzZW5kQ2hh
bmdlRXZlbnQpCiAgICAgICAgIGlmIChmaWxlcygpKQogICAgICAgICAgICAgZmlsZXMoKS0+Y2xl
YXIoKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBtX2RhdGEuc2V0VmFsdWUoc2FuaXRp
emVWYWx1ZSh2YWx1ZSkpOworICAgICAgICAgICAgbV92YWx1ZSA9IHNhbml0aXplVmFsdWUodmFs
dWUpOwogICAgICAgICAgICAgaWYgKGlzVGV4dEZpZWxkKCkpCiAgICAgICAgICAgICAgICAgdXBk
YXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KGZhbHNlKTsKICAgICAgICAgfQpAQCAtODkzLDEyICs5
NDQsMTIgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZh
bHVlLCBib29sIHNlbmRDaGFuZ2VFdmVudCkKICAgICBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsK
IAogICAgIGlmIChpc1RleHRGaWVsZCgpKSB7Ci0gICAgICAgIHVuc2lnbmVkIG1heCA9IG1fZGF0
YS52YWx1ZSgpLmxlbmd0aCgpOworICAgICAgICB1bnNpZ25lZCBtYXggPSBtX3ZhbHVlLmxlbmd0
aCgpOwogICAgICAgICBpZiAoZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSA9PSB0aGlzKQotICAg
ICAgICAgICAgSW5wdXRFbGVtZW50Ojp1cGRhdGVTZWxlY3Rpb25SYW5nZSh0aGlzLCB0aGlzLCBt
YXgsIG1heCk7CisgICAgICAgICAgICBXZWJDb3JlOjpzZXRTZWxlY3Rpb25SYW5nZSh0aGlzLCBt
YXgsIG1heCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNhY2hlU2VsZWN0aW9uKG1heCwg
bWF4KTsKLSAgICAgICAgbV9kYXRhLnNldFN1Z2dlc3RlZFZhbHVlKFN0cmluZygpKTsKKyAgICAg
ICAgbV9zdWdnZXN0ZWRWYWx1ZSA9IFN0cmluZygpOwogICAgIH0KICAgICBtX2lucHV0VHlwZS0+
dmFsdWVDaGFuZ2VkKCk7CiAKQEAgLTkxNCw3ICs5NjUsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1l
bnQ6OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgc2VuZENoYW5nZUV2ZW50KQog
ICAgIGlmIChpc1RleHQoKSAmJiAoIWZvY3VzZWQoKSB8fCAhc2VuZENoYW5nZUV2ZW50KSkKICAg
ICAgICAgc2V0VGV4dEFzT2ZMYXN0Rm9ybUNvbnRyb2xDaGFuZ2VFdmVudCh2YWx1ZSk7CiAKLSAg
ICBJbnB1dEVsZW1lbnQ6Om5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQodGhpcyk7CisgICAgbm90aWZ5
Rm9ybVN0YXRlQ2hhbmdlZCgpOwogfQogCiBkb3VibGUgSFRNTElucHV0RWxlbWVudDo6dmFsdWVB
c0RhdGUoKSBjb25zdApAQCAtOTYxLDggKzEwMTIsMjMgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50
OjpzZXRWYWx1ZUZyb21SZW5kZXJlcihjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgIC8vIEZpbGUg
dXBsb2FkIGNvbnRyb2xzIHdpbGwgYWx3YXlzIHVzZSBzZXRGaWxlTGlzdEZyb21SZW5kZXJlci4K
ICAgICBBU1NFUlQoIWlzRmlsZVVwbG9hZCgpKTsKIAotICAgIG1fZGF0YS5zZXRTdWdnZXN0ZWRW
YWx1ZShTdHJpbmcoKSk7Ci0gICAgSW5wdXRFbGVtZW50OjpzZXRWYWx1ZUZyb21SZW5kZXJlciht
X2RhdGEsIHRoaXMsIHRoaXMsIHZhbHVlKTsKKyAgICBtX3N1Z2dlc3RlZFZhbHVlID0gU3RyaW5n
KCk7CisKKyAgICAvLyBSZW5kZXJlciBhbmQgb3VyIGV2ZW50IGhhbmRsZXIgYXJlIHJlc3BvbnNp
YmxlIGZvciBzYW5pdGl6aW5nIHZhbHVlcy4KKyAgICBBU1NFUlQodmFsdWUgPT0gc2FuaXRpemVW
YWx1ZSh2YWx1ZSkgfHwgc2FuaXRpemVWYWx1ZSh2YWx1ZSkuaXNFbXB0eSgpKTsKKworICAgIC8v
IFdvcmthcm91bmQgZm9yIGJ1ZyB3aGVyZSB0cmFpbGluZyBcbiBpcyBpbmNsdWRlZCBpbiB0aGUg
cmVzdWx0IG9mIHRleHRDb250ZW50LgorICAgIC8vIFRoZSBhc3NlcnQgbWFjcm8gYWJvdmUgbWF5
IGFsc28gYmUgc2ltcGxpZmllZCB0bzogdmFsdWUgPT0gY29uc3RyYWluVmFsdWUodmFsdWUpCisg
ICAgLy8gaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTY2MQorICAgIG1f
dmFsdWUgPSB2YWx1ZSA9PSAiXG4iID8gU3RyaW5nKCIiKSA6IHZhbHVlOworCisgICAgc2V0Rm9y
bUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcih0cnVlKTsKKworICAgIC8vIElucHV0IGV2ZW50
IGlzIGZpcmVkIGJ5IHRoZSBOb2RlOjpkZWZhdWx0RXZlbnRIYW5kbGVyIGZvciBlZGl0YWJsZSBj
b250cm9scy4KKyAgICBpZiAoIWlzVGV4dEZpZWxkKCkpCisgICAgICAgIGRpc3BhdGNoSW5wdXRF
dmVudCgpOworICAgIG5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQoKTsKKwogICAgIHVwZGF0ZVBsYWNl
aG9sZGVyVmlzaWJpbGl0eShmYWxzZSk7CiAgICAgc2V0TmVlZHNWYWxpZGl0eUNoZWNrKCk7CiAK
QEAgLTk3NSw3ICsxMDQxLDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRGaWxlTGlzdEZy
b21SZW5kZXJlcihjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMpCiAgICAgbV9pbnB1dFR5cGUt
PnNldEZpbGVMaXN0KHBhdGhzKTsKIAogICAgIHNldEZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVu
ZGVyZXIodHJ1ZSk7Ci0gICAgSW5wdXRFbGVtZW50Ojpub3RpZnlGb3JtU3RhdGVDaGFuZ2VkKHRo
aXMpOworICAgIG5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQoKTsKICAgICBzZXROZWVkc1ZhbGlkaXR5
Q2hlY2soKTsKIH0KIApAQCAtMTEwNSw3ICsxMTcxLDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50
OjpzZXREZWZhdWx0VmFsdWUoY29uc3QgU3RyaW5nICZ2YWx1ZSkKIAogdm9pZCBIVE1MSW5wdXRF
bGVtZW50OjpzZXREZWZhdWx0TmFtZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiB7Ci0gICAg
bV9kYXRhLnNldE5hbWUobmFtZSk7CisgICAgbV9uYW1lID0gbmFtZTsKIH0KIAogU3RyaW5nIEhU
TUxJbnB1dEVsZW1lbnQ6OmFjY2VwdCgpIGNvbnN0CkBAIC0xMTIwLDcgKzExODYsNyBAQCBTdHJp
bmcgSFRNTElucHV0RWxlbWVudDo6YWx0KCkgY29uc3QKIAogaW50IEhUTUxJbnB1dEVsZW1lbnQ6
Om1heExlbmd0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZGF0YS5tYXhMZW5ndGgoKTsKKyAg
ICByZXR1cm4gbV9tYXhMZW5ndGg7CiB9CiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0TWF4
TGVuZ3RoKGludCBtYXhMZW5ndGgsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTIxOSw4ICsxMjg1
LDggQEAgYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojppc1JlcXVpcmVkRm9ybUNvbnRyb2woKSBjb25z
dAogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmNhY2hlU2VsZWN0aW9uKGludCBzdGFydCwgaW50
IGVuZCkKIHsKLSAgICBtX2RhdGEuc2V0Q2FjaGVkU2VsZWN0aW9uU3RhcnQoc3RhcnQpOwotICAg
IG1fZGF0YS5zZXRDYWNoZWRTZWxlY3Rpb25FbmQoZW5kKTsKKyAgICBtX2NhY2hlZFNlbGVjdGlv
blN0YXJ0ID0gc3RhcnQ7CisgICAgbV9jYWNoZWRTZWxlY3Rpb25FbmQgPSBlbmQ7CiB9CiAKIHZv
aWQgSFRNTElucHV0RWxlbWVudDo6YWRkU2VhcmNoUmVzdWx0KCkKQEAgLTE0NDQsMTEgKzE1MTAs
MTQwIEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c3RlcFVwRnJvbVJlbmRlcmVyKGludCBuKQog
CiAjaWYgRU5BQkxFKFdDU1MpCiAKK3N0YXRpYyBpbmxpbmUgY29uc3QgQXRvbWljU3RyaW5nJiBm
b3JtYXRDb2RlcygpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGNv
ZGVzLCAoIkFhTm5YeE1tIikpOworICAgIHJldHVybiBjb2RlczsKK30KKworc3RhdGljIHVuc2ln
bmVkIGN1cnNvclBvc2l0aW9uVG9NYXNrSW5kZXgoY29uc3QgU3RyaW5nJiBpbnB1dEZvcm1hdE1h
c2ssIHVuc2lnbmVkIGN1cnNvclBvc2l0aW9uKQoreworICAgIFVDaGFyIG1hc2s7CisgICAgaW50
IGluZGV4ID0gLTE7CisgICAgZG8geworICAgICAgICBtYXNrID0gaW5wdXRGb3JtYXRNYXNrWysr
aW5kZXhdOworICAgICAgICBpZiAobWFzayA9PSAnXFwnKQorICAgICAgICAgICAgKytpbmRleDsK
KyAgICAgICAgZWxzZSBpZiAobWFzayA9PSAnKicgfHwgKGlzQVNDSUlEaWdpdChtYXNrKSAmJiBt
YXNrICE9ICcwJykpIHsKKyAgICAgICAgICAgIGluZGV4ID0gaW5wdXRGb3JtYXRNYXNrLmxlbmd0
aCgpIC0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSB3aGlsZSAoY3Vy
c29yUG9zaXRpb24tLSk7CisKKyAgICByZXR1cm4gaW5kZXg7Cit9CisKK2Jvb2wgSFRNTElucHV0
RWxlbWVudDo6aXNDb25mb3JtVG9JbnB1dE1hc2soY29uc3QgU3RyaW5nJiBpbnB1dENoYXJzKSBj
b25zdAoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnB1dENoYXJzLmxlbmd0aCgp
OyArK2kpIHsKKyAgICAgICAgaWYgKCFpc0NvbmZvcm1Ub0lucHV0TWFzayhpbnB1dENoYXJzW2ld
LCBpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgSFRNTElucHV0RWxlbWVudDo6aXNDb25mb3JtVG9JbnB1dE1hc2soVUNoYXIg
aW5DaGFyLCB1bnNpZ25lZCBjdXJzb3JQb3NpdGlvbikgY29uc3QKK3sKKyAgICBpZiAobV9pbnB1
dEZvcm1hdE1hc2suaXNFbXB0eSgpIHx8IG1faW5wdXRGb3JtYXRNYXNrID09ICIqTSIgfHwgbV9p
bnB1dEZvcm1hdE1hc2sgPT0gIiptIikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAo
Y3Vyc29yUG9zaXRpb24gPj0gbV9tYXhJbnB1dENoYXJzQWxsb3dlZCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICB1bnNpZ25lZCBtYXNrSW5kZXggPSBjdXJzb3JQb3NpdGlvblRvTWFz
a0luZGV4KG1faW5wdXRGb3JtYXRNYXNrLCBjdXJzb3JQb3NpdGlvbik7CisgICAgYm9vbCBvayA9
IHRydWU7CisgICAgVUNoYXIgbWFzayA9IG1faW5wdXRGb3JtYXRNYXNrW21hc2tJbmRleF07Cisg
ICAgLy8gTWF0Y2ggdGhlIGlucHV0ZWQgY2hhcmFjdGVyIHdpdGggaW5wdXQgbWFzaworICAgIHN3
aXRjaCAobWFzaykgeworICAgIGNhc2UgJ0EnOgorICAgICAgICBvayA9ICFpc0FTQ0lJRGlnaXQo
aW5DaGFyKSAmJiAhaXNBU0NJSUxvd2VyKGluQ2hhcikgJiYgaXNBU0NJSVByaW50YWJsZShpbkNo
YXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlICdhJzoKKyAgICAgICAgb2sgPSAhaXNBU0NJ
SURpZ2l0KGluQ2hhcikgJiYgIWlzQVNDSUlVcHBlcihpbkNoYXIpICYmIGlzQVNDSUlQcmludGFi
bGUoaW5DaGFyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAnTic6CisgICAgICAgIG9rID0g
aXNBU0NJSURpZ2l0KGluQ2hhcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ24nOgorICAg
ICAgICBvayA9ICFpc0FTQ0lJQWxwaGEoaW5DaGFyKSAmJiBpc0FTQ0lJUHJpbnRhYmxlKGluQ2hh
cik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ1gnOgorICAgICAgICBvayA9ICFpc0FTQ0lJ
TG93ZXIoaW5DaGFyKSAmJiBpc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgJ3gnOgorICAgICAgICBvayA9ICFpc0FTQ0lJVXBwZXIoaW5DaGFyKSAmJiBp
c0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ00nOgor
ICAgIGNhc2UgJ20nOgorICAgICAgICBvayA9IGlzQVNDSUlQcmludGFibGUoaW5DaGFyKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgb2sgPSAobWFzayA9PSBpbkNoYXIp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gb2s7Cit9CisKK1N0cmluZyBI
VE1MSW5wdXRFbGVtZW50Ojp2YWxpZGF0ZUlucHV0TWFzayhTdHJpbmcmIGlucHV0TWFzaykKK3sK
KyAgICBpbnB1dE1hc2sucmVwbGFjZSgiXFxcXCIsICJcXCIpOworCisgICAgYm9vbCBpc1ZhbGlk
ID0gdHJ1ZTsKKyAgICBib29sIGhhc1dpbGRjYXJkID0gZmFsc2U7CisgICAgdW5zaWduZWQgZXNj
YXBlQ2hhckNvdW50ID0gMDsKKyAgICB1bnNpZ25lZCBtYXNrTGVuZ3RoID0gaW5wdXRNYXNrLmxl
bmd0aCgpOworICAgIFVDaGFyIGZvcm1hdENvZGU7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1hc2tMZW5ndGg7ICsraSkgeworICAgICAgICBmb3JtYXRDb2RlID0gaW5wdXRNYXNrW2ld
OworICAgICAgICBpZiAoZm9ybWF0Q29kZXMoKS5maW5kKGZvcm1hdENvZGUpID09IC0xKSB7Cisg
ICAgICAgICAgICBpZiAoZm9ybWF0Q29kZSA9PSAnKicgfHwgKGlzQVNDSUlEaWdpdChmb3JtYXRD
b2RlKSAmJiBmb3JtYXRDb2RlICE9ICcwJykpIHsKKyAgICAgICAgICAgICAgICAvLyBWYWxpZGF0
ZSBjb2RlcyB3aGljaCBlbmRzIHdpdGggJypmJyBvciAnbmYnCisgICAgICAgICAgICAgICAgZm9y
bWF0Q29kZSA9IGlucHV0TWFza1srK2ldOworICAgICAgICAgICAgICAgIGlmICgoaSArIDEgIT0g
bWFza0xlbmd0aCkgfHwgZm9ybWF0Q29kZXMoKS5maW5kKGZvcm1hdENvZGUpID09IC0xKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGhhc1dpbGRjYXJkID0g
dHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0Q29kZSA9PSAnXFwnKSB7CisgICAg
ICAgICAgICAgICAgLy8gc2tpcCBvdmVyIHRoZSBuZXh0IG1hc2sgY2hhcmFjdGVyCisgICAgICAg
ICAgICAgICAgKytpOworICAgICAgICAgICAgICAgICsrZXNjYXBlQ2hhckNvdW50OworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAoIWlzVmFsaWQpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAvLyBjYWxjdWxhdGUg
dGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFsbG93ZWQgdG8gYmUgZW50ZXJlZCBieSBpbnB1dCBt
YXNrCisgICAgdW5zaWduZWQgYWxsb3dlZExlbmd0aCA9IG1hc2tMZW5ndGg7CisgICAgaWYgKGVz
Y2FwZUNoYXJDb3VudCkKKyAgICAgICAgYWxsb3dlZExlbmd0aCAtPSBlc2NhcGVDaGFyQ291bnQ7
CisKKyAgICBpZiAoaGFzV2lsZGNhcmQpIHsKKyAgICAgICAgZm9ybWF0Q29kZSA9IGlucHV0TWFz
a1ttYXNrTGVuZ3RoIC0gMl07CisgICAgICAgIGlmIChmb3JtYXRDb2RlID09ICcqJykKKyAgICAg
ICAgICAgIGFsbG93ZWRMZW5ndGggPSBtX21heElucHV0Q2hhcnNBbGxvd2VkOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxlZnRMZW4gPSBTdHJpbmcoJmZvcm1hdENvZGUp
LnRvSW50KCk7CisgICAgICAgICAgICBhbGxvd2VkTGVuZ3RoID0gbGVmdExlbiArIGFsbG93ZWRM
ZW5ndGggLSAyOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGFsbG93ZWRMZW5ndGggPCBt
X21heElucHV0Q2hhcnNBbGxvd2VkKQorICAgICAgICBtX21heElucHV0Q2hhcnNBbGxvd2VkID0g
YWxsb3dlZExlbmd0aDsKKworICAgIHJldHVybiBpbnB1dE1hc2s7Cit9CisKIHZvaWQgSFRNTElu
cHV0RWxlbWVudDo6c2V0V2FwSW5wdXRGb3JtYXQoU3RyaW5nJiBtYXNrKQogewotICAgIFN0cmlu
ZyB2YWxpZGF0ZU1hc2sgPSB2YWxpZGF0ZUlucHV0TWFzayhtX2RhdGEsIG1hc2spOworICAgIFN0
cmluZyB2YWxpZGF0ZU1hc2sgPSB2YWxpZGF0ZUlucHV0TWFzayhtYXNrKTsKICAgICBpZiAoIXZh
bGlkYXRlTWFzay5pc0VtcHR5KCkpCi0gICAgICAgIG1fZGF0YS5zZXRJbnB1dEZvcm1hdE1hc2so
dmFsaWRhdGVNYXNrKTsKKyAgICAgICAgbV9pbnB1dEZvcm1hdE1hc2sgPSB2YWxpZGF0ZU1hc2s7
CiB9CiAKICNlbmRpZgpAQCAtMTU2Miw3ICsxNzU3LDU5IEBAIENoZWNrZWRSYWRpb0J1dHRvbnMm
IEhUTUxJbnB1dEVsZW1lbnQ6OmNoZWNrZWRSYWRpb0J1dHRvbnMoKSBjb25zdAogCiB2b2lkIEhU
TUxJbnB1dEVsZW1lbnQ6OmhhbmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KEV2ZW50KiBldmVu
dCkKIHsKLSAgICBJbnB1dEVsZW1lbnQ6OmhhbmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KG1f
ZGF0YSwgdGhpcywgdGhpcywgZXZlbnQpOworICAgIEFTU0VSVChldmVudC0+aXNCZWZvcmVUZXh0
SW5zZXJ0ZWRFdmVudCgpKTsKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgdGV4dCB0byBiZSBp
bnNlcnRlZCB3aWxsIG5vdCB2aW9sYXRlIHRoZSBtYXhMZW5ndGguCisKKyAgICAvLyBXZSB1c2Ug
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp0ZXh0KCkgaW5zdGVhZCBvZiBJbnB1dEVsZW1l
bnQ6OnZhbHVlKCkKKyAgICAvLyBiZWNhdXNlIHRoZXkgY2FuIGJlIG1pc21hdGNoZWQgYnkgc2Fu
aXRpemVWYWx1ZSgpIGluCisgICAgLy8gUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzdWJ0
cmVlSGFzQ2hhbmdlZCgpIGluIHNvbWUgY2FzZXMuCisgICAgdW5zaWduZWQgb2xkTGVuZ3RoID0g
bnVtR3JhcGhlbWVDbHVzdGVycyh0b1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShyZW5kZXJl
cigpKS0+dGV4dCgpKTsKKworICAgIC8vIHNlbGVjdGlvbkxlbmd0aCByZXByZXNlbnRzIHRoZSBz
ZWxlY3Rpb24gbGVuZ3RoIG9mIHRoaXMgdGV4dCBmaWVsZCB0byBiZQorICAgIC8vIHJlbW92ZWQg
YnkgdGhpcyBpbnNlcnRpb24uCisgICAgLy8gSWYgdGhlIHRleHQgZmllbGQgaGFzIG5vIGZvY3Vz
LCB3ZSBkb24ndCBuZWVkIHRvIHRha2UgYWNjb3VudCBvZiB0aGUKKyAgICAvLyBzZWxlY3Rpb24g
bGVuZ3RoLiBUaGUgc2VsZWN0aW9uIGlzIHRoZSBzb3VyY2Ugb2YgdGV4dCBkcmFnLWFuZC1kcm9w
IGluCisgICAgLy8gdGhhdCBjYXNlLCBhbmQgbm90aGluZyBpbiB0aGUgdGV4dCBmaWVsZCB3aWxs
IGJlIHJlbW92ZWQuCisgICAgdW5zaWduZWQgc2VsZWN0aW9uTGVuZ3RoID0gZm9jdXNlZCgpID8g
bnVtR3JhcGhlbWVDbHVzdGVycyhwbGFpblRleHQoZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0
aW9uKCktPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpKSA6IDA7CisgICAg
QVNTRVJUKG9sZExlbmd0aCA+PSBzZWxlY3Rpb25MZW5ndGgpOworCisgICAgLy8gU2VsZWN0ZWQg
Y2hhcmFjdGVycyB3aWxsIGJlIHJlbW92ZWQgYnkgdGhlIG5leHQgdGV4dCBldmVudC4KKyAgICB1
bnNpZ25lZCBiYXNlTGVuZ3RoID0gb2xkTGVuZ3RoIC0gc2VsZWN0aW9uTGVuZ3RoOworICAgIHVu
c2lnbmVkIG1heExlbmd0aCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdXBwb3J0c01heExlbmd0
aCgpID8gbV9tYXhMZW5ndGggOiBtYXhpbXVtTGVuZ3RoKTsgLy8gbV9tYXhMZW5ndGggY2FuIG5l
dmVyIGJlIG5lZ2F0aXZlLgorICAgIHVuc2lnbmVkIGFwcGVuZGFibGVMZW5ndGggPSBtYXhMZW5n
dGggPiBiYXNlTGVuZ3RoID8gbWF4TGVuZ3RoIC0gYmFzZUxlbmd0aCA6IDA7CisKKyAgICAvLyBU
cnVuY2F0ZSB0aGUgaW5zZXJ0ZWQgdGV4dCB0byBhdm9pZCB2aW9sYXRpbmcgdGhlIG1heExlbmd0
aCBhbmQgb3RoZXIgY29uc3RyYWludHMuCisgICAgQmVmb3JlVGV4dEluc2VydGVkRXZlbnQqIHRl
eHRFdmVudCA9IHN0YXRpY19jYXN0PEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50Kj4oZXZlbnQpOwor
I2lmIEVOQUJMRShXQ1NTKQorICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBkb2N1bWVudCgpLT5m
cmFtZSgpLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAg
ICBTdHJpbmcgY2FuZGlkYXRlU3RyaW5nID0gdG9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUo
cmVuZGVyZXIoKSktPnRleHQoKTsKKyAgICBpZiAoc2VsZWN0aW9uTGVuZ3RoKQorICAgICAgICBj
YW5kaWRhdGVTdHJpbmcucmVwbGFjZShyYW5nZS0+c3RhcnRPZmZzZXQoKSwgcmFuZ2UtPmVuZE9m
ZnNldCgpLCB0ZXh0RXZlbnQtPnRleHQoKSk7CisgICAgZWxzZQorICAgICAgICBjYW5kaWRhdGVT
dHJpbmcuaW5zZXJ0KHRleHRFdmVudC0+dGV4dCgpLCByYW5nZS0+c3RhcnRPZmZzZXQoKSk7Cisg
ICAgaWYgKCFpc0NvbmZvcm1Ub0lucHV0TWFzayhjYW5kaWRhdGVTdHJpbmcpKSB7CisgICAgICAg
IHRleHRFdmVudC0+c2V0VGV4dCgiIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYK
KyAgICB0ZXh0RXZlbnQtPnNldFRleHQobV9pbnB1dFR5cGUtPnNhbml0aXplVXNlcklucHV0VmFs
dWUodGV4dEV2ZW50LT50ZXh0KCksIGFwcGVuZGFibGVMZW5ndGgpKTsKK30KKwordm9pZCBIVE1M
SW5wdXRFbGVtZW50Ojpub3RpZnlGb3JtU3RhdGVDaGFuZ2VkKCkKK3sKKyAgICBGcmFtZSogZnJh
bWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgcGFnZS0+
Y2hyb21lKCktPmNsaWVudCgpLT5mb3JtU3RhdGVEaWRDaGFuZ2UodGhpcyk7Cit9CisKK3ZvaWQg
SFRNTElucHV0RWxlbWVudDo6dXBkYXRlVmFsdWVJZk5lZWRlZCgpCit7CisgICAgU3RyaW5nIG5l
d1ZhbHVlID0gc2FuaXRpemVWYWx1ZShtX3ZhbHVlKTsKKyAgICBpZiAobmV3VmFsdWUgIT0gbV92
YWx1ZSkKKyAgICAgICAgc2V0VmFsdWUobmV3VmFsdWUpOwogfQogCiB9IC8vIG5hbWVzcGFjZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAppbmRleCA1YmU3MzY2ODc5NjBmYzlk
ZGJiM2I5YTY5ZTVjN2IzOTA3ZDQwOTcwLi40ODg3MzE4ZTU5YjE2YTQ4NGEwNTcyYTk1YWNjMTJk
ZDA4MzJjODIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1l
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaApAQCAtMjUs
NyArMjUsNiBAQAogI2RlZmluZSBIVE1MSW5wdXRFbGVtZW50X2gKIAogI2luY2x1ZGUgIkhUTUxG
b3JtQ29udHJvbEVsZW1lbnQuaCIKLSNpbmNsdWRlICJJbnB1dEVsZW1lbnQuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC0zNSwxNCArMzQsMTQgQEAgY2xhc3MgSFRNTE9wdGlvbkVsZW1l
bnQ7CiBjbGFzcyBJbnB1dFR5cGU7CiBjbGFzcyBLVVJMOwogCi1jbGFzcyBIVE1MSW5wdXRFbGVt
ZW50IDogcHVibGljIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LCBwdWJsaWMgSW5wdXRFbGVt
ZW50IHsKK2NsYXNzIEhUTUxJbnB1dEVsZW1lbnQgOiBwdWJsaWMgSFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxJbnB1dEVsZW1l
bnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1l
bnQqLCBib29sIGNyZWF0ZWRCeVBhcnNlcik7CiAgICAgdmlydHVhbCB+SFRNTElucHV0RWxlbWVu
dCgpOwogCiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUih3ZWJraXRzcGVlY2hj
aGFuZ2UpOwogCi0gICAgdmlydHVhbCBJbnB1dEVsZW1lbnQqIHRvSW5wdXRFbGVtZW50KCkgeyBy
ZXR1cm4gdGhpczsgfQorICAgIHZpcnR1YWwgSFRNTElucHV0RWxlbWVudCogdG9JbnB1dEVsZW1l
bnQoKSB7IHJldHVybiB0aGlzOyB9CiAKICAgICBib29sIGF1dG9Db21wbGV0ZSgpIGNvbnN0Owog
CkBAIC03OCwxOCArNzcsMTggQEAgcHVibGljOgogICAgIHZvaWQgc3RlcFVwKEV4Y2VwdGlvbkNv
ZGUmIGVjKSB7IHN0ZXBVcCgxLCBlYyk7IH0KICAgICB2b2lkIHN0ZXBEb3duKEV4Y2VwdGlvbkNv
ZGUmIGVjKSB7IHN0ZXBEb3duKDEsIGVjKTsgfQogICAgIC8vIHN0ZXBVcCgpL3N0ZXBEb3duKCkg
Zm9yIHVzZXItaW50ZXJhY3Rpb24uCi0gICAgdmlydHVhbCBib29sIGlzU3RlcHBhYmxlKCkgY29u
c3Q7CisgICAgYm9vbCBpc1N0ZXBwYWJsZSgpIGNvbnN0OwogICAgIHZvaWQgc3RlcFVwRnJvbVJl
bmRlcmVyKGludCk7CiAKICAgICBib29sIGlzVGV4dEJ1dHRvbigpIGNvbnN0OwogCiAgICAgdmly
dHVhbCBib29sIGlzUmFkaW9CdXR0b24oKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0
RmllbGQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNTZWFyY2hGaWVsZCgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgYm9vbCBpc0lucHV0VHlwZUhpZGRlbigpIGNvbnN0OwotICAgIHZpcnR1YWwg
Ym9vbCBpc1Bhc3N3b3JkRmllbGQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNDaGVja2Jv
eCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc1JhbmdlQ29udHJvbCgpIGNvbnN0OworICAg
IGJvb2wgaXNUZXh0RmllbGQoKSBjb25zdDsKKyAgICBib29sIGlzU2VhcmNoRmllbGQoKSBjb25z
dDsKKyAgICBib29sIGlzSW5wdXRUeXBlSGlkZGVuKCkgY29uc3Q7CisgICAgYm9vbCBpc1Bhc3N3
b3JkRmllbGQoKSBjb25zdDsKKyAgICBib29sIGlzQ2hlY2tib3goKSBjb25zdDsKKyAgICBib29s
IGlzUmFuZ2VDb250cm9sKCkgY29uc3Q7CiAKICAgICAvLyBGSVhNRTogSXQncyBoaWdobHkgbGlr
ZWx5IHRoYXQgYW55IGNhbGwgc2l0ZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGluc3Rl
YWQKICAgICAvLyBiZSB1c2luZyBhIGRpZmZlcmVudCBvbmUuIE1hbnkgaW5wdXQgZWxlbWVudHMg
YmVoYXZlIGxpa2UgdGV4dCBmaWVsZHMsIGFuZCBpbiBhZGRpdGlvbgpAQCAtMTA2LDcgKzEwNSw3
IEBAIHB1YmxpYzoKICAgICBib29sIGlzVVJMRmllbGQoKSBjb25zdDsKIAogI2lmIEVOQUJMRShJ
TlBVVF9TUEVFQ0gpCi0gICAgdmlydHVhbCBib29sIGlzU3BlZWNoRW5hYmxlZCgpIGNvbnN0Owor
ICAgIGJvb2wgaXNTcGVlY2hFbmFibGVkKCkgY29uc3Q7CiAjZW5kaWYKIAogICAgIGJvb2wgY2hl
Y2tlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNDaGVja2VkOyB9CkBAIC0xMTYsMTggKzExNSwzMCBA
QCBwdWJsaWM6CiAgICAgYm9vbCBpbmRldGVybWluYXRlKCkgY29uc3QgeyByZXR1cm4gbV9pc0lu
ZGV0ZXJtaW5hdGU7IH0KICAgICB2b2lkIHNldEluZGV0ZXJtaW5hdGUoYm9vbCk7CiAKLSAgICB2
aXJ0dWFsIGludCBzaXplKCkgY29uc3Q7CisgICAgLy8gaXNDaGVja2VkIGlzIHVzZWQgYnkgdGhl
IHJlbmRlcmluZyB0cmVlL0NTUyB3aGlsZSBjaGVja2VkKCkgaXMgdXNlZCBieSBKUyB0byBkZXRl
cm1pbmUgY2hlY2tlZCBzdGF0ZQorICAgIHZpcnR1YWwgYm9vbCBpc0NoZWNrZWQoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGJvb2wgaXNJbmRldGVybWluYXRlKCkgY29uc3QgeyByZXR1cm4gaW5kZXRl
cm1pbmF0ZSgpOyB9CisKKyAgICBpbnQgc2l6ZSgpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRUeXBl
KGNvbnN0IFN0cmluZyYpOwogCi0gICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiwgYm9vbCBzZW5kQ2hhbmdlRXZl
bnQgPSBmYWxzZSk7Ci0gICAgdmlydHVhbCB2b2lkIHNldFZhbHVlRm9yVXNlcihjb25zdCBTdHJp
bmcmKTsKKyAgICBTdHJpbmcgdmFsdWUoKSBjb25zdDsKKyAgICB2b2lkIHNldFZhbHVlKGNvbnN0
IFN0cmluZyYsIGJvb2wgc2VuZENoYW5nZUV2ZW50ID0gZmFsc2UpOworICAgIHZvaWQgc2V0VmFs
dWVGb3JVc2VyKGNvbnN0IFN0cmluZyYpOwogICAgIC8vIENoZWNrcyBpZiB0aGUgc3BlY2lmaWVk
IHN0cmluZyB3b3VsZCBiZSBhIHZhbGlkIHZhbHVlLgogICAgIC8vIFdlIHNob3VsZCBub3QgY2Fs
bCB0aGlzIGZvciB0eXBlcyB3aXRoIG5vIHN0cmluZyB2YWx1ZSBzdWNoIGFzIENIRUNLQk9YIGFu
ZCBSQURJTy4KICAgICBib29sIGlzVmFsaWRWYWx1ZShjb25zdCBTdHJpbmcmKSBjb25zdDsKIAot
ICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRWYWx1ZSgpIGNvbnN0OworICAgIFN0
cmluZyBzYW5pdGl6ZVZhbHVlKGNvbnN0IFN0cmluZyYpIGNvbnN0OworCisgICAgLy8gVGhlIHZh
bHVlIHdoaWNoIGlzIGRyYXduIGJ5IGEgcmVuZGVyZXIuCisgICAgU3RyaW5nIHZpc2libGVWYWx1
ZSgpIGNvbnN0OworICAgIFN0cmluZyBjb252ZXJ0RnJvbVZpc2libGVWYWx1ZShjb25zdCBTdHJp
bmcmKSBjb25zdDsKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHNwZWNpZmllZCBzdHJpbmcg
Y2FuIGJlIHNldCBhcyB0aGUgdmFsdWUgb2YgSFRNTElucHV0RWxlbWVudC4KKyAgICBib29sIGlz
QWNjZXB0YWJsZVZhbHVlKGNvbnN0IFN0cmluZyYpIGNvbnN0OworCisgICAgY29uc3QgU3RyaW5n
JiBzdWdnZXN0ZWRWYWx1ZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0U3VnZ2VzdGVkVmFsdWUoY29u
c3QgU3RyaW5nJik7CiAKICAgICBkb3VibGUgdmFsdWVBc0RhdGUoKSBjb25zdDsKQEAgLTE0MSwx
MSArMTUyLDEwIEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyB2YWx1ZVdpdGhEZWZhdWx0KCkgY29u
c3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVGcm9tUmVuZGVyZXIoY29uc3QgU3RyaW5n
Jik7CisgICAgdm9pZCBzZXRWYWx1ZUZyb21SZW5kZXJlcihjb25zdCBTdHJpbmcmKTsKICAgICB2
b2lkIHNldEZpbGVMaXN0RnJvbVJlbmRlcmVyKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CiAKICAg
ICBib29sIGNhbkhhdmVTZWxlY3Rpb24oKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0
KCkgeyBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2VsZWN0KCk7IH0KIAogICAgIHZpcnR1
YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKik7CiAgICAgdmlydHVhbCBSZW5k
ZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKQEAg
LTE3OCwxMyArMTg4LDE0IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgbXVsdGlwbGUoKSBjb25zdDsK
IAotICAgIHZpcnR1YWwgYm9vbCBpc0F1dG9maWxsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzQXV0
b2ZpbGxlZDsgfQorICAgIGJvb2wgaXNBdXRvZmlsbGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0F1
dG9maWxsZWQ7IH0KICAgICB2b2lkIHNldEF1dG9maWxsZWQoYm9vbCA9IHRydWUpOwogCiAgICAg
RmlsZUxpc3QqIGZpbGVzKCk7CiAKICAgICB2b2lkIGFkZFNlYXJjaFJlc3VsdCgpOwogICAgIHZv
aWQgb25TZWFyY2goKTsKKyAgICBib29sIHNlYXJjaEV2ZW50c1Nob3VsZEJlRGlzcGF0Y2hlZCgp
IGNvbnN0OwogCiAjaWYgRU5BQkxFKERBVEFMSVNUKQogICAgIEhUTUxFbGVtZW50KiBsaXN0KCkg
Y29uc3Q7CkBAIC0yMDIsNyArMjEzLDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZUNoZWNr
ZWRSYWRpb0J1dHRvbnMoKTsKIAogICAgIGJvb2wgbGFzdENoYW5nZVdhc1VzZXJFZGl0KCkgY29u
c3Q7Ci0gICAgCisgICAgdm9pZCBjYWNoZVNlbGVjdGlvbihpbnQgc3RhcnQsIGludCBlbmQpOwor
CisgICAgc3RhdGljIGNvbnN0IGludCBtYXhpbXVtTGVuZ3RoOworCiBwcm90ZWN0ZWQ6CiAgICAg
SFRNTElucHV0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBIVE1MRm9y
bUVsZW1lbnQqLCBib29sIGNyZWF0ZWRCeVBhcnNlcik7CiAKQEAgLTIyMywxOCArMjM3LDEyIEBA
IHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xO
YW1lKCkgY29uc3Q7CiAKLSAgICAvLyBpc0NoZWNrZWQgaXMgdXNlZCBieSB0aGUgcmVuZGVyaW5n
IHRyZWUvQ1NTIHdoaWxlIGNoZWNrZWQoKSBpcyB1c2VkIGJ5IEpTIHRvIGRldGVybWluZSBjaGVj
a2VkIHN0YXRlCi0gICAgdmlydHVhbCBib29sIGlzQ2hlY2tlZCgpIGNvbnN0OwotICAgIHZpcnR1
YWwgYm9vbCBpc0luZGV0ZXJtaW5hdGUoKSBjb25zdCB7IHJldHVybiBpbmRldGVybWluYXRlKCk7
IH0KLQogICAgIHZpcnR1YWwgYm9vbCBpc1RleHRGb3JtQ29udHJvbCgpIGNvbnN0IHsgcmV0dXJu
IGlzVGV4dEZpZWxkKCk7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBjYW5UcmlnZ2VySW1wbGljaXRT
dWJtaXNzaW9uKCkgY29uc3QgeyByZXR1cm4gaXNUZXh0RmllbGQoKTsgfQogCiAgICAgdmlydHVh
bCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sVHlwZSgpIGNvbnN0OwogCi0gICAgdmly
dHVhbCBib29sIHNlYXJjaEV2ZW50c1Nob3VsZEJlRGlzcGF0Y2hlZCgpIGNvbnN0OwotCiAgICAg
dmlydHVhbCBib29sIHNhdmVGb3JtQ29udHJvbFN0YXRlKFN0cmluZyYgdmFsdWUpIGNvbnN0Owog
ICAgIHZpcnR1YWwgdm9pZCByZXN0b3JlRm9ybUNvbnRyb2xTdGF0ZShjb25zdCBTdHJpbmcmKTsK
IApAQCAtMjYxLDEyICsyNjksNiBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBib29sIGlzVVJM
QXR0cmlidXRlKEF0dHJpYnV0ZSopIGNvbnN0OwogCi0gICAgdmlydHVhbCB2b2lkIGNhY2hlU2Vs
ZWN0aW9uKGludCBzdGFydCwgaW50IGVuZCk7Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyB2aXNpYmxl
VmFsdWUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFN0cmluZyBjb252ZXJ0RnJvbVZpc2libGVWYWx1
ZShjb25zdCBTdHJpbmcmKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNBY2NlcHRhYmxlVmFs
dWUoY29uc3QgU3RyaW5nJikgY29uc3Q7Ci0gICAgdmlydHVhbCBTdHJpbmcgc2FuaXRpemVWYWx1
ZShjb25zdCBTdHJpbmcmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaGFzVW5hY2NlcHRhYmxl
VmFsdWUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0luUmFuZ2UoKSBjb25zdDsKQEAg
LTI4MCw3ICsyODIsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVnaXN0ZXJGb3JBY3RpdmF0aW9u
Q2FsbGJhY2tJZk5lZWRlZCgpOwogICAgIHZvaWQgdW5yZWdpc3RlckZvckFjdGl2YXRpb25DYWxs
YmFja0lmTmVlZGVkKCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNNYXhMZW5ndGgoKSBj
b25zdCB7IHJldHVybiBpc1RleHRUeXBlKCk7IH0KKyAgICBib29sIHN1cHBvcnRzTWF4TGVuZ3Ro
KCkgY29uc3QgeyByZXR1cm4gaXNUZXh0VHlwZSgpOyB9CiAgICAgYm9vbCBpc1RleHRUeXBlKCkg
Y29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNQbGFjZWhvbGRlcigpIGNvbnN0OwpA
QCAtMjg4LDggKzI5MCw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzRW1wdHlTdWdn
ZXN0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHN1Z2dlc3RlZFZhbHVlKCkuaXNFbXB0eSgpOyB9
CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUZvY3VzRXZlbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQg
aGFuZGxlQmx1ckV2ZW50KCk7Ci0gICAgdmlydHVhbCBpbnQgY2FjaGVkU2VsZWN0aW9uU3RhcnQo
KSBjb25zdCB7IHJldHVybiBtX2RhdGEuY2FjaGVkU2VsZWN0aW9uU3RhcnQoKTsgfQotICAgIHZp
cnR1YWwgaW50IGNhY2hlZFNlbGVjdGlvbkVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5jYWNo
ZWRTZWxlY3Rpb25FbmQoKTsgfQorICAgIHZpcnR1YWwgaW50IGNhY2hlZFNlbGVjdGlvblN0YXJ0
KCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRTZWxlY3Rpb25TdGFydDsgfQorICAgIHZpcnR1YWwg
aW50IGNhY2hlZFNlbGVjdGlvbkVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkU2VsZWN0aW9u
RW5kOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNPcHRpb25hbEZvcm1Db250cm9sKCkgY29uc3Qg
eyByZXR1cm4gIWlzUmVxdWlyZWRGb3JtQ29udHJvbCgpOyB9CiAgICAgdmlydHVhbCBib29sIGlz
UmVxdWlyZWRGb3JtQ29udHJvbCgpIGNvbnN0OwpAQCAtMzAzLDEyICszMDUsMjUgQEAgcHJpdmF0
ZToKICNpZiBFTkFCTEUoREFUQUxJU1QpCiAgICAgSFRNTERhdGFMaXN0RWxlbWVudCogZGF0YUxp
c3QoKSBjb25zdDsKICNlbmRpZgotCisgICAgdm9pZCBub3RpZnlGb3JtU3RhdGVDaGFuZ2VkKCk7
CisgICAgdm9pZCB1cGRhdGVWYWx1ZUlmTmVlZGVkKCk7CiAjaWYgRU5BQkxFKFdDU1MpCi0gICAg
dmlydHVhbCBJbnB1dEVsZW1lbnREYXRhIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0K
KyAgICBib29sIGlzQ29uZm9ybVRvSW5wdXRNYXNrKGNvbnN0IFN0cmluZyYpIGNvbnN0OworICAg
IGJvb2wgaXNDb25mb3JtVG9JbnB1dE1hc2soVUNoYXIsIHVuc2lnbmVkKSBjb25zdDsKKyAgICBT
dHJpbmcgdmFsaWRhdGVJbnB1dE1hc2soU3RyaW5nJik7CiAjZW5kaWYKIAotICAgIElucHV0RWxl
bWVudERhdGEgbV9kYXRhOworICAgIEF0b21pY1N0cmluZyBtX25hbWU7CisgICAgU3RyaW5nIG1f
dmFsdWU7CisgICAgU3RyaW5nIG1fc3VnZ2VzdGVkVmFsdWU7CisgICAgaW50IG1fc2l6ZTsKKyAg
ICBpbnQgbV9tYXhMZW5ndGg7CisgICAgaW50IG1fY2FjaGVkU2VsZWN0aW9uU3RhcnQ7CisgICAg
aW50IG1fY2FjaGVkU2VsZWN0aW9uRW5kOworI2lmIEVOQUJMRShXQ1NTKQorICAgIFN0cmluZyBt
X2lucHV0Rm9ybWF0TWFzazsKKyAgICB1bnNpZ25lZCBtX21heElucHV0Q2hhcnNBbGxvd2VkOwor
I2VuZGlmCiAgICAgc2hvcnQgbV9tYXhSZXN1bHRzOwogICAgIGJvb2wgbV9pc0NoZWNrZWQgOiAx
OwogICAgIGJvb2wgbV9yZWZsZWN0c0NoZWNrZWRBdHRyaWJ1dGUgOiAxOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKaW5kZXggZTA0NjNmZmRlNzkxMjVmYmEy
YjE0NmM0Njg0OGM3NGJkN2UwMTcxZS4uYTI5OWIxOGM2MWUxOWY0MTJkZWUwMzljZGY5MDljMWZh
MWZjNTIyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3Bw
CkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSAiRm9ybURhdGFMaXN0LmgiCiAjaW5jbHVkZSAi
RnJhbWUuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJJbnB1dEVsZW1lbnQu
aCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRl
ICJSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9JbnB1dFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3Bw
CmluZGV4IGM4ODJjZDVjNGI4ZWMzMWMxMmZmZTYxNzliMjhlNTI0ZWUxMTMwYTQuLjFmZDljYzdj
OTk0NWQ0OGUzYTVkNTlmZmFjNmNmMWQyZGU4ODU3ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlw
ZS5jcHAKQEAgLTUyNiw3ICs1MjYsMTIgQEAgYm9vbCBJbnB1dFR5cGU6OmlzQWNjZXB0YWJsZVZh
bHVlKGNvbnN0IFN0cmluZyYpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVN0cmluZyBJbnB1dFR5
cGU6OnNhbml0aXplVmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wb3NlZFZhbHVlKQorU3RyaW5nIElu
cHV0VHlwZTo6c2FuaXRpemVWYWx1ZShjb25zdCBTdHJpbmcmIHByb3Bvc2VkVmFsdWUpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHByb3Bvc2VkVmFsdWU7Cit9CisKK1N0cmluZyBJbnB1dFR5cGU6OnNh
bml0aXplVXNlcklucHV0VmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wb3NlZFZhbHVlLCBpbnQpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIHByb3Bvc2VkVmFsdWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0lucHV0VHlwZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUu
aAppbmRleCA0NzE0MDVkZDgzNzA1OGQwYzA3YWMxN2FmZjZiZTQwZWQyMDcyNmUzLi5hMzFlYjg4
NmIxNzcyZmVlMjM3MDA1YTc5MjkzYTY1YmU2ZmZlNTYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0lucHV0VHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBl
LmgKQEAgLTE1Miw3ICsxNTIsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgU3RyaW5nIGNvbnZl
cnRGcm9tVmlzaWJsZVZhbHVlKGNvbnN0IFN0cmluZyYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9v
bCBpc0FjY2VwdGFibGVWYWx1ZShjb25zdCBTdHJpbmcmKTsKICAgICAvLyBSZXR1cmluZyB0aGUg
bnVsbCBzdHJpbmcgbWVhbnMgInVzZSB0aGUgZGVmYXVsdCB2YWx1ZS4iCi0gICAgdmlydHVhbCBT
dHJpbmcgc2FuaXRpemVWYWx1ZShjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBz
YW5pdGl6ZVZhbHVlKGNvbnN0IFN0cmluZyYpIGNvbnN0OworICAgIC8vIFRoaXMgc2hvdWxkIGJl
IGFwcGxpZWQgdG8gdmFsdWVzIHNwZWNpZmllZCBieSB1c2Vycy4KKyAgICAvLyBUaGUgaW5wdXQg
c3RyaW5nIG1heSBiZSBhIGZyYWdtZW50IG9mIHRoZSB3aG9sZSB2YWx1ZS4KKyAgICB2aXJ0dWFs
IFN0cmluZyBzYW5pdGl6ZVVzZXJJbnB1dFZhbHVlKGNvbnN0IFN0cmluZyYsIGludCBtYXhMZW5n
dGgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBoYXNVbmFjY2VwdGFibGVWYWx1ZSgpOwogCiAg
ICAgLy8gRXZlbnQgaGFuZGxlcnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4
dEZpZWxkSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRU
eXBlLmNwcAppbmRleCBmZmVhMmY0ZTBiMGNhYWQ0NGI4MzVhNmQyMGFiNTk5YzZkN2E0Yzk0Li40
NjA0ZGVlODdmNmZjZDM3YWI2NTg5NWFkNjkyMDRhMGIwMTExNjFjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCkBAIC0xMTksOSArMTE5LDMyIEBAIGJvb2wg
VGV4dEZpZWxkSW5wdXRUeXBlOjpzaG91bGRVc2VJbnB1dE1ldGhvZCgpIGNvbnN0CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLVN0cmluZyBUZXh0RmllbGRJbnB1dFR5cGU6OnNhbml0aXplVmFsdWUo
Y29uc3QgU3RyaW5nJiBwcm9wb3NlZFZhbHVlKQorc3RhdGljIFN0cmluZyByZXBsYWNlRU9MQW5k
TGltaXRMZW5ndGgoY29uc3QgU3RyaW5nJiBwcm9wb3NlZFZhbHVlLCBpbnQgbWF4TGVuZ3RoKQog
ewotICAgIHJldHVybiBJbnB1dEVsZW1lbnQ6OnNhbml0aXplVmFsdWVGb3JUZXh0RmllbGQoZWxl
bWVudCgpLCBwcm9wb3NlZFZhbHVlKTsKKyAgICBTdHJpbmcgc3RyaW5nID0gcHJvcG9zZWRWYWx1
ZTsKKyAgICBzdHJpbmcucmVwbGFjZSgiXHJcbiIsICIgIik7CisgICAgc3RyaW5nLnJlcGxhY2Uo
J1xyJywgJyAnKTsKKyAgICBzdHJpbmcucmVwbGFjZSgnXG4nLCAnICcpOworCisgICAgdW5zaWdu
ZWQgbmV3TGVuZ3RoID0gbnVtQ2hhcmFjdGVyc0luR3JhcGhlbWVDbHVzdGVycyhzdHJpbmcsIG1h
eExlbmd0aCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5ld0xlbmd0aDsgKytpKSB7
CisgICAgICAgIGNvbnN0IFVDaGFyIGN1cnJlbnQgPSBzdHJpbmdbaV07CisgICAgICAgIGlmIChj
dXJyZW50IDwgJyAnICYmIGN1cnJlbnQgIT0gJ1x0JykgeworICAgICAgICAgICAgbmV3TGVuZ3Ro
ID0gaTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBz
dHJpbmcubGVmdChuZXdMZW5ndGgpOworfQorCitTdHJpbmcgVGV4dEZpZWxkSW5wdXRUeXBlOjpz
YW5pdGl6ZVZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcG9zZWRWYWx1ZSkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gcmVwbGFjZUVPTEFuZExpbWl0TGVuZ3RoKHByb3Bvc2VkVmFsdWUsIEhUTUxJbnB1dEVs
ZW1lbnQ6Om1heGltdW1MZW5ndGgpOworfQorCitTdHJpbmcgVGV4dEZpZWxkSW5wdXRUeXBlOjpz
YW5pdGl6ZVVzZXJJbnB1dFZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcG9zZWRWYWx1ZSwgaW50IG1h
eExlbmd0aCkgY29uc3QKK3sKKyAgICByZXR1cm4gcmVwbGFjZUVPTEFuZExpbWl0TGVuZ3RoKHBy
b3Bvc2VkVmFsdWUsIG1heExlbmd0aCk7CiB9CiAKIGJvb2wgVGV4dEZpZWxkSW5wdXRUeXBlOjpz
aG91bGRSZXNwZWN0TGlzdEF0dHJpYnV0ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL1RleHRGaWVsZElucHV0VHlwZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJ
bnB1dFR5cGUuaAppbmRleCA4NmFkMGVmMWFjZDRiYTZiMTlmMTFiYTg2Y2FhNGEwODcxODRlMThj
Li5hMWQ5YTRhZDBkZWNkY2Q5M2ZkYTZmOWRmZTAwNmViMjk4ZWI2MTk3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmgKQEAgLTUyLDcgKzUyLDggQEAgcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU3VibWl0SW1wbGljaXRseShFdmVudCopOwogICAgIHZp
cnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0
eWxlKikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHNob3VsZFVzZUlucHV0TWV0aG9kKCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBTdHJpbmcgc2FuaXRpemVWYWx1ZShjb25zdCBTdHJpbmcmIHByb3Bv
c2VkVmFsdWUpOworICAgIHZpcnR1YWwgU3RyaW5nIHNhbml0aXplVmFsdWUoY29uc3QgU3RyaW5n
JikgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcgc2FuaXRpemVVc2VySW5wdXRWYWx1ZShjb25z
dCBTdHJpbmcmLCBpbnQgbWF4TGVuZ3RoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxk
UmVzcGVjdExpc3RBdHRyaWJ1dGUoKTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKaW5kZXggMzBiZDk2
MThhMTk2YzFlMmY0ZGY2ZTRiMjNmMTA0YTU3NzQxOTQwZi4uM2VhNWRkZDJlZTcwYjY2M2NjNzE3
NjhmMDQ5NzE4NmIwMTVjYjljZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKQEAgLTMzLDcgKzMzLDYgQEAK
ICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAj
aW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgotI2luY2x1ZGUgIklucHV0RWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCkBAIC03NSw2ICs3NCw4IEBAIFJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKE5vZGUqIG5v
ZGUsIGJvb2wgcGxhY2VoCiAgICAgLCBtX3NlYXJjaEV2ZW50VGltZXIodGhpcywgJlJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZTo6c2VhcmNoRXZlbnRUaW1lckZpcmVkKQogICAgICwgbV9zZWFy
Y2hQb3B1cCgwKQogeworICAgIEFTU0VSVChub2RlLT5pc0hUTUxFbGVtZW50KCkpOworICAgIEFT
U0VSVChub2RlLT50b0lucHV0RWxlbWVudCgpKTsKIH0KIAogUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjp+UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKCkKQEAgLTEwNiw4ICsxMDcsNyBA
QCBSZW5kZXJTdHlsZSogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp0ZXh0QmFzZVN0eWxl
KCkgY29uc3QKIAogdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmFkZFNlYXJjaFJl
c3VsdCgpCiB7Ci0gICAgQVNTRVJUKG5vZGUoKS0+aXNIVE1MRWxlbWVudCgpKTsKLSAgICBIVE1M
SW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihub2Rl
KCkpOworICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gaW5wdXRFbGVtZW50KCk7CiAgICAg
aWYgKGlucHV0LT5tYXhSZXN1bHRzKCkgPD0gMCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMzgs
MTMgKzEzOCwxMSBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6YWRkU2VhcmNo
UmVzdWx0KCkKIAogdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnN0b3BTZWFyY2hF
dmVudFRpbWVyKCkKIHsKLSAgICBBU1NFUlQobm9kZSgpLT5pc0hUTUxFbGVtZW50KCkpOwogICAg
IG1fc2VhcmNoRXZlbnRUaW1lci5zdG9wKCk7CiB9CiAKIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjpzaG93UG9wdXAoKQogewotICAgIEFTU0VSVChub2RlKCktPmlzSFRNTEVsZW1l
bnQoKSk7CiAgICAgaWYgKG1fc2VhcmNoUG9wdXBJc1Zpc2libGUpCiAgICAgICAgIHJldHVybjsK
IApAQCAtMTYwLDcgKzE1OCw3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpz
aG93UG9wdXAoKQogICAgIG1fc2VhcmNoUG9wdXAtPmxvYWRSZWNlbnRTZWFyY2hlcyhuYW1lLCBt
X3JlY2VudFNlYXJjaGVzKTsKIAogICAgIC8vIFRyaW0gdGhlIHJlY2VudCBzZWFyY2hlcyBsaXN0
IGlmIHRoZSBtYXhpbXVtIHNpemUgaGFzIGNoYW5nZWQgc2luY2Ugd2UgbGFzdCBzYXZlZC4KLSAg
ICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQq
Pihub2RlKCkpOworICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gaW5wdXRFbGVtZW50KCk7
CiAgICAgaWYgKHN0YXRpY19jYXN0PGludD4obV9yZWNlbnRTZWFyY2hlcy5zaXplKCkpID4gaW5w
dXQtPm1heFJlc3VsdHMoKSkgewogICAgICAgICBkbyB7CiAgICAgICAgICAgICBtX3JlY2VudFNl
YXJjaGVzLnJlbW92ZUxhc3QoKTsKQEAgLTE3NCw3ICsxNzIsNiBAQCB2b2lkIFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6c2hvd1BvcHVwKCkKIAogdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6OmhpZGVQb3B1cCgpCiB7Ci0gICAgQVNTRVJUKG5vZGUoKS0+aXNIVE1MRWxlbWVu
dCgpKTsKICAgICBpZiAobV9zZWFyY2hQb3B1cCkKICAgICAgICAgbV9zZWFyY2hQb3B1cC0+cG9w
dXBNZW51KCktPmhpZGUoKTsKIH0KQEAgLTE4OCwxOCArMTg1LDE2IEBAIHZvaWQgUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lOjpzdWJ0cmVlSGFzQ2hhbmdlZCgpCiAgICAgYm9vbCB3YXNDaGFu
Z2VkID0gZWxlbWVudC0+d2FzQ2hhbmdlZFNpbmNlTGFzdEZvcm1Db250cm9sQ2hhbmdlRXZlbnQo
KTsKICAgICBlbGVtZW50LT5zZXRDaGFuZ2VkU2luY2VMYXN0Rm9ybUNvbnRyb2xDaGFuZ2VFdmVu
dCh0cnVlKTsKIAotICAgIElucHV0RWxlbWVudCogaW5wdXQgPSBpbnB1dEVsZW1lbnQoKTsKKyAg
ICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IGlucHV0RWxlbWVudCgpOwogICAgIC8vIFdlIGRv
bid0IG5lZWQgdG8gY2FsbCBzYW5pdGl6ZVVzZXJJbnB1dFZhbHVlKCkgZnVuY3Rpb24gaGVyZSBi
ZWNhdXNlCi0gICAgLy8gSW5wdXRFbGVtZW50OjpoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVu
dCgpIGhhcyBhbHJlYWR5IGNhbGxlZAorICAgIC8vIEhUTUxJbnB1dEVsZW1lbnQ6OmhhbmRsZUJl
Zm9yZVRleHRJbnNlcnRlZEV2ZW50KCkgaGFzIGFscmVhZHkgY2FsbGVkCiAgICAgLy8gc2FuaXRp
emVVc2VySW5wdXRWYWx1ZSgpLgogICAgIC8vIHNhbml0aXplVmFsdWUoKSBpcyBuZWVkZWQgYmVj
YXVzZSBJTUUgaW5wdXQgZG9lc24ndCBkaXNwYXRjaCBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC4K
ICAgICBTdHJpbmcgdmFsdWUgPSB0ZXh0KCk7CiAgICAgaWYgKGlucHV0LT5pc0FjY2VwdGFibGVW
YWx1ZSh2YWx1ZSkpCiAgICAgICAgIGlucHV0LT5zZXRWYWx1ZUZyb21SZW5kZXJlcihpbnB1dC0+
c2FuaXRpemVWYWx1ZShpbnB1dC0+Y29udmVydEZyb21WaXNpYmxlVmFsdWUodmFsdWUpKSk7Ci0g
ICAgaWYgKG5vZGUoKS0+aXNIVE1MRWxlbWVudCgpKSB7Ci0gICAgICAgIC8vIFJlY2FsYyBmb3Ig
OmludmFsaWQgYW5kIGhhc1VuYWNjZXB0YWJsZVZhbHVlKCkgY2hhbmdlLgotICAgICAgICBzdGF0
aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oaW5wdXQpLT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7
Ci0gICAgfQorICAgIC8vIFJlY2FsYyBmb3IgOmludmFsaWQgYW5kIGhhc1VuYWNjZXB0YWJsZVZh
bHVlKCkgY2hhbmdlLgorICAgIGlucHV0LT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAKICAgICBp
ZiAobV9jYW5jZWxCdXR0b24pCiAgICAgICAgIHVwZGF0ZUNhbmNlbEJ1dHRvblZpc2liaWxpdHko
KTsKQEAgLTcxMCw3ICs3MDUsNyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6
dXBkYXRlRnJvbUVsZW1lbnQoKQogICAgICAgICAgICAgLy8gRm9yIEhUTUxJbnB1dEVsZW1lbnQs
IHVwZGF0ZSB0aGUgcmVuZGVyZXIgdmFsdWUgaWYgdGhlIGZvcm1Db250cm9sVmFsdWVNYXRjaGVz
UmVuZGVyZXIoKQogICAgICAgICAgICAgLy8gZmxhZyBpcyBmYWxzZS4gSXQgcHJvdGVjdHMgYW4g
dW5hY2NlcHRhYmxlIHJlbmRlcmVyIHZhbHVlIGZyb20KICAgICAgICAgICAgIC8vIGJlaW5nIG92
ZXJ3cml0dGVuIHdpdGggdGhlIERPTSB2YWx1ZS4KLSAgICAgICAgICAgIGlmICghc3RhdGljX2Nh
c3Q8SFRNTElucHV0RWxlbWVudCo+KG5vZGUoKSktPmZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVu
ZGVyZXIoKSkKKyAgICAgICAgICAgIGlmICghaW5wdXRFbGVtZW50KCktPmZvcm1Db250cm9sVmFs
dWVNYXRjaGVzUmVuZGVyZXIoKSkKICAgICAgICAgICAgICAgICBzZXRJbm5lclRleHRWYWx1ZShp
bnB1dEVsZW1lbnQoKS0+dmlzaWJsZVZhbHVlKCkpOwogICAgICAgICB9CiAgICAgfQpAQCAtNzU1
LDggKzc1MCw2IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6Y3JlYXRlSW5uZXJUZXh0U3R5bGUoY29uc3QKIAogUGFzc1JlZlB0cjxSZW5kZXJT
dHlsZT4gUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjcmVhdGVJbm5lckJsb2NrU3R5bGUo
Y29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKG5vZGUo
KS0+aXNIVE1MRWxlbWVudCgpKTsKLQogICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gaW5uZXJCbG9j
a1N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwogICAgIGlubmVyQmxvY2tTdHlsZS0+aW5o
ZXJpdEZyb20oc3RhcnRTdHlsZSk7CiAKQEAgLTc3MSw4ICs3NjQsNyBAQCBQYXNzUmVmUHRyPFJl
bmRlclN0eWxlPiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZUlubmVyQmxvY2tT
dHlsZShjb25zdAogCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6OmNyZWF0ZVJlc3VsdHNCdXR0b25TdHlsZShjb25zdCBSZW5kZXJTdHlsZSogc3Rh
cnRTdHlsZSkgY29uc3QKIHsKLSAgICBBU1NFUlQobm9kZSgpLT5pc0hUTUxFbGVtZW50KCkpOwot
ICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVu
dCo+KG5vZGUoKSk7CisgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBpbnB1dEVsZW1lbnQo
KTsKIAogICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gcmVzdWx0c0Jsb2NrU3R5bGU7CiAgICAgaWYg
KGlucHV0LT5tYXhSZXN1bHRzKCkgPCAwKQpAQCAtNzkzLDcgKzc4NSw2IEBAIFBhc3NSZWZQdHI8
UmVuZGVyU3R5bGU+IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y3JlYXRlUmVzdWx0c0J1
dHRvblN0eWxlKGNvCiAKIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZTo6Y3JlYXRlQ2FuY2VsQnV0dG9uU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0
YXJ0U3R5bGUpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKG5vZGUoKS0+aXNIVE1MRWxlbWVudCgpKTsK
ICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGNhbmNlbEJsb2NrU3R5bGU7CiAgICAgCiAgICAgaWYg
KFJlZlB0cjxSZW5kZXJTdHlsZT4gcHNldWRvU3R5bGUgPSBnZXRDYWNoZWRQc2V1ZG9TdHlsZShT
RUFSQ0hfQ0FOQ0VMX0JVVFRPTikpCkBAIC04MTEsNyArODAyLDYgQEAgUGFzc1JlZlB0cjxSZW5k
ZXJTdHlsZT4gUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjcmVhdGVDYW5jZWxCdXR0b25T
dHlsZShjb24KIAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjpjcmVhdGVJbm5lclNwaW5CdXR0b25TdHlsZSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJU
KG5vZGUoKS0+aXNIVE1MRWxlbWVudCgpKTsKICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGJ1dHRv
blN0eWxlID0gZ2V0Q2FjaGVkUHNldWRvU3R5bGUoSU5ORVJfU1BJTl9CVVRUT04pOwogICAgIGlm
ICghYnV0dG9uU3R5bGUpCiAgICAgICAgIGJ1dHRvblN0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0
ZSgpOwpAQCAtODIxLDcgKzgxMSw2IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZTo6Y3JlYXRlSW5uZXJTcGluQnV0dG9uU3R5bGUoCiAKIFBhc3NS
ZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y3JlYXRlT3V0
ZXJTcGluQnV0dG9uU3R5bGUoKSBjb25zdAogewotICAgIEFTU0VSVChub2RlKCktPmlzSFRNTEVs
ZW1lbnQoKSk7CiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBidXR0b25TdHlsZSA9IGdldENhY2hl
ZFBzZXVkb1N0eWxlKE9VVEVSX1NQSU5fQlVUVE9OKTsKICAgICBpZiAoIWJ1dHRvblN0eWxlKQog
ICAgICAgICBidXR0b25TdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKQEAgLTgzMiw3ICs4
MjEsNiBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmU6OmNyZWF0ZU91dGVyU3BpbkJ1dHRvblN0eWxlKAogI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gp
CiBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNy
ZWF0ZVNwZWVjaEJ1dHRvblN0eWxlKCkgY29uc3QKIHsKLSAgICBBU1NFUlQobm9kZSgpLT5pc0hU
TUxFbGVtZW50KCkpOwogICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gYnV0dG9uU3R5bGUgPSBnZXRD
YWNoZWRQc2V1ZG9TdHlsZShJTlBVVF9TUEVFQ0hfQlVUVE9OKTsKICAgICBpZiAoIWJ1dHRvblN0
eWxlKQogICAgICAgICBidXR0b25TdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKQEAgLTg1
OCw5ICs4NDYsNyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6dXBkYXRlQ2Fu
Y2VsQnV0dG9uVmlzaWJpbGl0eSgpIGNvbnN0CiAKIEVWaXNpYmlsaXR5IFJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6dmlzaWJpbGl0eUZvckNhbmNlbEJ1dHRvbigpIGNvbnN0CiB7Ci0gICAg
QVNTRVJUKG5vZGUoKS0+aXNIVE1MRWxlbWVudCgpKTsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBp
bnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihub2RlKCkpOwotICAgIHJldHVy
biBpbnB1dC0+dmFsdWUoKS5pc0VtcHR5KCkgPyBISURERU4gOiBWSVNJQkxFOworICAgIHJldHVy
biBpbnB1dEVsZW1lbnQoKS0+dmFsdWUoKS5pc0VtcHR5KCkgPyBISURERU4gOiBWSVNJQkxFOwog
fQogCiBjb25zdCBBdG9taWNTdHJpbmcmIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6YXV0
b3NhdmVOYW1lKCkgY29uc3QKQEAgLTg3MCwxMyArODU2LDEyIEBAIGNvbnN0IEF0b21pY1N0cmlu
ZyYgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjphdXRvc2F2ZU5hbWUoKSBjb25zdAogCiB2
b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c3RhcnRTZWFyY2hFdmVudFRpbWVyKCkK
IHsKLSAgICBBU1NFUlQobm9kZSgpLT5pc0hUTUxFbGVtZW50KCkpOwogICAgIHVuc2lnbmVkIGxl
bmd0aCA9IHRleHQoKS5sZW5ndGgoKTsKIAogICAgIC8vIElmIHRoZXJlJ3Mgbm8gdGV4dCwgZmly
ZSB0aGUgZXZlbnQgcmlnaHQgYXdheS4KICAgICBpZiAoIWxlbmd0aCkgewogICAgICAgICBzdG9w
U2VhcmNoRXZlbnRUaW1lcigpOwotICAgICAgICBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50
Kj4obm9kZSgpKS0+b25TZWFyY2goKTsKKyAgICAgICAgaW5wdXRFbGVtZW50KCktPm9uU2VhcmNo
KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTg4NywxNiArODcyLDE0IEBAIHZvaWQg
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzdGFydFNlYXJjaEV2ZW50VGltZXIoKQogCiB2
b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2VhcmNoRXZlbnRUaW1lckZpcmVkKFRp
bWVyPFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZT4qKQogewotICAgIEFTU0VSVChub2RlKCkt
PmlzSFRNTEVsZW1lbnQoKSk7Ci0gICAgc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5v
ZGUoKSktPm9uU2VhcmNoKCk7CisgICAgaW5wdXRFbGVtZW50KCktPm9uU2VhcmNoKCk7CiB9CiAK
IC8vIFBvcHVwTWVudUNsaWVudCBtZXRob2RzCiB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZTo6dmFsdWVDaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCwgYm9vbCBmaXJlRXZlbnRzKQog
ewotICAgIEFTU0VSVChub2RlKCktPmlzSFRNTEVsZW1lbnQoKSk7CiAgICAgQVNTRVJUKHN0YXRp
Y19jYXN0PGludD4obGlzdEluZGV4KSA8IGxpc3RTaXplKCkpOwotICAgIEhUTUxJbnB1dEVsZW1l
bnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5vZGUoKSk7CisgICAg
SFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBpbnB1dEVsZW1lbnQoKTsKICAgICBpZiAoc3RhdGlj
X2Nhc3Q8aW50PihsaXN0SW5kZXgpID09IChsaXN0U2l6ZSgpIC0gMSkpIHsKICAgICAgICAgaWYg
KGZpcmVFdmVudHMpIHsKICAgICAgICAgICAgIG1fcmVjZW50U2VhcmNoZXMuY2xlYXIoKTsKQEAg
LTEwMzAsOCArMTAxMyw3IEBAIGJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppdGVt
SXNTZWxlY3RlZCh1bnNpZ25lZCkgY29uc3QKIAogdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmU6OnNldFRleHRGcm9tSXRlbSh1bnNpZ25lZCBsaXN0SW5kZXgpCiB7Ci0gICAgQVNTRVJU
KG5vZGUoKS0+aXNIVE1MRWxlbWVudCgpKTsKLSAgICBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVt
ZW50Kj4obm9kZSgpKS0+c2V0VmFsdWUoaXRlbVRleHQobGlzdEluZGV4KSk7CisgICAgaW5wdXRF
bGVtZW50KCktPnNldFZhbHVlKGl0ZW1UZXh0KGxpc3RJbmRleCkpOwogfQogCiBGb250U2VsZWN0
b3IqIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Zm9udFNlbGVjdG9yKCkgY29uc3QKQEAg
LTExMTgsNyArMTEwMCw3IEBAIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxhYmxlQXJlCiAgICAgcmV0dXJuIHdp
ZGdldC5yZWxlYXNlKCk7CiB9CiAKLUlucHV0RWxlbWVudCogUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjppbnB1dEVsZW1lbnQoKSBjb25zdAorSFRNTElucHV0RWxlbWVudCogUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lOjppbnB1dEVsZW1lbnQoKSBjb25zdAogewogICAgIHJldHVybiBu
b2RlKCktPnRvSW5wdXRFbGVtZW50KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgKaW5kZXggMThlNWZjOGJjNDkw
M2IzYzJiOGM1YTJmNTM3Y2Q4OGM2NzhhNmViYS4uZjQzYWExYjNhOWFkMmIyMDU4MGExYWY5NDBl
MTJjZTRkZjIzYThjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaApAQCAtMzAsNyArMzAsNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIElucHV0RWxlbWVudDsKK2NsYXNzIEhUTUxJbnB1dEVsZW1l
bnQ7CiBjbGFzcyBJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudDsKIGNsYXNzIFNlYXJjaEZp
ZWxkQ2FuY2VsQnV0dG9uRWxlbWVudDsKIGNsYXNzIFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbkVs
ZW1lbnQ7CkBAIC0xNDIsNyArMTQyLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIEhvc3RXaW5k
b3cqIGhvc3RXaW5kb3coKSBjb25zdDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2Nyb2xsYmFy
PiBjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEqLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwg
U2Nyb2xsYmFyQ29udHJvbFNpemUpOwogCi0gICAgSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQo
KSBjb25zdDsKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQoKSBjb25zdDsKIAog
ICAgIHZpcnR1YWwgaW50IHRleHRCbG9ja0luc2V0TGVmdCgpIGNvbnN0OwogICAgIHZpcnR1YWwg
aW50IHRleHRCbG9ja0luc2V0UmlnaHQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWUuY3BwCmluZGV4IGZjZDI2ODhhZGI1M2FlNWY0YjNlZDg4ZTMyNTdkMjUzM2Fl
ODBmMTUuLmI3OGRmZGMzMzljOGMwNTEwNzQyYzVjZjg0MTIzNjcxNWUyYzdiZWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcApAQCAtNzUxLDcgKzc1MSw3IEBAIGJv
b2wgUmVuZGVyVGhlbWU6OmlzQ2hlY2tlZChjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0CiAg
ICAgaWYgKCFvLT5ub2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIElucHV0RWxl
bWVudCogaW5wdXRFbGVtZW50ID0gby0+bm9kZSgpLT50b0lucHV0RWxlbWVudCgpOworICAgIEhU
TUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IG8tPm5vZGUoKS0+dG9JbnB1dEVsZW1lbnQo
KTsKICAgICBpZiAoIWlucHV0RWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC03
NjMsNyArNzYzLDcgQEAgYm9vbCBSZW5kZXJUaGVtZTo6aXNJbmRldGVybWluYXRlKGNvbnN0IFJl
bmRlck9iamVjdCogbykgY29uc3QKICAgICBpZiAoIW8tPm5vZGUoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBvLT5ub2RlKCktPnRv
SW5wdXRFbGVtZW50KCk7CisgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gby0+
bm9kZSgpLT50b0lucHV0RWxlbWVudCgpOwogICAgIGlmICghaW5wdXRFbGVtZW50KQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKQEAgLTk2NSw3ICs5NjUsNyBAQCB2b2lkIFJlbmRlclRoZW1lOjph
ZGp1c3RQcm9ncmVzc0JhclN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbgogfQogI2VuZGlmCiAKLWJvb2wgUmVuZGVyVGhlbWU6OnNob3VsZEhhdmVTcGluQnV0dG9u
KElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50KSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZTo6c2hv
dWxkSGF2ZVNwaW5CdXR0b24oSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50KSBjb25zdAog
ewogICAgIHJldHVybiBpbnB1dEVsZW1lbnQtPmlzU3RlcHBhYmxlKCkgJiYgIWlucHV0RWxlbWVu
dC0+aXNSYW5nZUNvbnRyb2woKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
LmgKaW5kZXggZTEzZTFiYTA0MWU5NWIwZGMwMGIzMTk1Zjk3MTEzYjAzZDIzYjljNS4uMTU3YmEz
YTVkMmQ4YWU2OGZhOTQwYjcyOGFlZjg4Y2I1YWUwM2JmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lLmgKQEAgLTM2LDYgKzM2LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgRWxlbWVudDsKK2NsYXNzIEhUTUxJbnB1dEVsZW1lbnQ7CiBjbGFzcyBQb3B1cE1l
bnU7CiBjbGFzcyBSZW5kZXJNZW51TGlzdDsKICNpZiBFTkFCTEUoTUVURVJfVEFHKQpAQCAtMjAx
LDcgKzIwMiw3IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIAogICAgIHZpcnR1YWwgYm9vbCBzaG91
bGRTaG93UGxhY2Vob2xkZXJXaGVuRm9jdXNlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0g
ICAgdmlydHVhbCBib29sIHNob3VsZEhhdmVTcGluQnV0dG9uKElucHV0RWxlbWVudCopIGNvbnN0
OworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRIYXZlU3BpbkJ1dHRvbihIVE1MSW5wdXRFbGVtZW50
KikgY29uc3Q7CiAKIHByb3RlY3RlZDoKICAgICAvLyBUaGUgcGxhdGZvcm0gc2VsZWN0aW9uIGNv
bG9yLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAzYzFjYzUyMzgxMTA5NTVkZDk4ODU1
M2RiYzNhNGFkZDM1MWU3YjdhLi5hZWRiM2I4MWZmYmU2YzJkYmI1YzYxZmNlNzM0MWZlY2ViYzli
NjY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDExLTA1
LTA1ICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbGltaW5hdGUgV2ViQ29yZS9kb20vSW5w
dXRFbGVtZW50LntjcHAsaH0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTYwMjYyCisKKyAgICAgICAgKiBzcmMvV2ViSW5wdXRFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViSW5wdXRFbGVtZW50OjpkZWZhdWx0TWF4TGVuZ3RoKToKKyAgICAg
ICAgICBSZXBsYWNlIElucHV0RWxlbWVudDo6c19tYXhpbXVtTGVuZ3RoIHdpdGggSFRNTElucHV0
RWxlbWVudDo6bWF4aW11bUxlbmd0aC4KKyAgICAgICAgKFdlYktpdDo6dG9XZWJJbnB1dEVsZW1l
bnQpOgorICAgICAgICAgIEZvbGxvdyB0aGUgcmV0dXJuIHR5cGUgY2hhbmdlIG9mIE5vZGU6OnRv
SW5wdXRFbGVtZW50KCkuCisKIDIwMTEtMDUtMDMgIEhhbnMgV2VubmJvcmcgIDxoYW5zQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBTdGV2ZSBCbG9jay4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklucHV0RWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbnB1dEVsZW1lbnQuY3BwCmluZGV4IDM0NDhiYjZiMzI4
MDZkYjdhZGQxNGEyNmUxMDc1YjNhZTYxNjQ0ZjYuLjhhMjFlZDkxZGZhYjg3OTQ2MWE5ZmUzMjg3
OTZhMTg2MWQ2YWZlZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YklucHV0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW5w
dXRFbGVtZW50LmNwcApAQCAtMTUyLDcgKzE1Miw3IEBAIGJvb2wgV2ViSW5wdXRFbGVtZW50Ojpp
c0NoZWNrZWQoKSBjb25zdAogCiBpbnQgV2ViSW5wdXRFbGVtZW50OjpkZWZhdWx0TWF4TGVuZ3Ro
KCkKIHsKLSAgICByZXR1cm4gSFRNTElucHV0RWxlbWVudDo6c19tYXhpbXVtTGVuZ3RoOworICAg
IHJldHVybiBIVE1MSW5wdXRFbGVtZW50OjptYXhpbXVtTGVuZ3RoOwogfQogCiBXZWJJbnB1dEVs
ZW1lbnQ6OldlYklucHV0RWxlbWVudChjb25zdCBQYXNzUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+
JiBlbGVtKQpAQCAtMTczLDEyICsxNzMsMTAgQEAgV2ViSW5wdXRFbGVtZW50OjpvcGVyYXRvciBQ
YXNzUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+KCkgY29uc3QKIAogV2ViSW5wdXRFbGVtZW50KiB0
b1dlYklucHV0RWxlbWVudChXZWJFbGVtZW50KiB3ZWJFbGVtZW50KQogewotICAgIElucHV0RWxl
bWVudCogaW5wdXRFbGVtZW50ID0gd2ViRWxlbWVudC0+dW53cmFwPEVsZW1lbnQ+KCktPnRvSW5w
dXRFbGVtZW50KCk7CisgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gd2ViRWxl
bWVudC0+dW53cmFwPEVsZW1lbnQ+KCktPnRvSW5wdXRFbGVtZW50KCk7CiAgICAgaWYgKCFpbnB1
dEVsZW1lbnQpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgQVNTRVJUKHdlYkVsZW1lbnQtPnVu
d3JhcDxFbGVtZW50PigpLT5pc0hUTUxFbGVtZW50KCkpOwotCiAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFdlYklucHV0RWxlbWVudCo+KHdlYkVsZW1lbnQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5k
ZXggN2U1NGJlZTY3YWI5N2FjMmNkNGRhMTE2MGYzMTIwM2Y3NWE0OTQxZi4uN2IxYjlhY2Y1ODM5
YjQxOTYzMDNhYTZmNzM2OWM1MjI1NGE0NDgwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9n
dGsvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE0IEBACisyMDExLTA1LTA1ICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbGltaW5hdGUg
V2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LntjcHAsaH0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMjYyCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVT
dXBwb3J0R3RrOjpzZXRBdXRvZmlsbGVkKToKKyAgICAgICAgICBGb2xsb3cgdGhlIHJldHVybiB0
eXBlIGNoYW5nZSBvZiBOb2RlOjp0b0lucHV0RWxlbWVudCgpLgorCiAyMDExLTA1LTA0ICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIEdUSyBidWlsZCBmaXggYXR0
ZW1wdCBhZnRlciByODU4MjMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwCmluZGV4IDI5MDNjZWVk
OWI4MjI1NmI5ODljZmZlNGVjNjRiM2Q4YzU3ODJmYTguLmFiNTZhNzQ2MmY2Y2M0YWZlM2VkN2Zm
MDdhYzA0ZjVlYjBiZmY3MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcApAQCAtMzYsNyAr
MzYsNiBAQAogI2luY2x1ZGUgIkdDQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKLSNpbmNsdWRlICJJbnB1dEVs
ZW1lbnQuaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkpTRG9jdW1lbnQu
aCIKICNpbmNsdWRlICJKU0VsZW1lbnQuaCIKQEAgLTc1MCwxMSArNzQ5LDExIEBAIHZvaWQgRHVt
cFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRBdXRvZmlsbGVkKEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU1ZhbHVlUmVmIG5vCiAgICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudCh0b0pTKGV4
ZWMsIG5vZGVPYmplY3QpKTsKICAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKLSAg
ICBJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGVsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCk7
CisgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gZWxlbWVudC0+dG9JbnB1dEVs
ZW1lbnQoKTsKICAgICBpZiAoIWlucHV0RWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
c3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGlucHV0RWxlbWVudCktPnNldEF1dG9maWxs
ZWQoYXV0b2ZpbGxlZCk7CisgICAgaW5wdXRFbGVtZW50LT5zZXRBdXRvZmlsbGVkKGF1dG9maWxs
ZWQpOwogfQogCiB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0VmFsdWVGb3JVc2Vy
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIG5vZGVPYmplY3QsIEpTU3RyaW5nUmVm
IHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwIGIv
U291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCmluZGV4IGI0NTljYjJhM2JhYmQwNDBk
NTljNjk4NmM0MzEzMTRhZWQ4YzIwY2IuLjk3NWM0NGEwZGQ1N2ZiMjI5YjRlZDU4YzA0NTllYjg3
MTJmYTZiMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKQEAgLTE0NDYsNyArMTQ0Niw3
IEBAIFFWYXJpYW50IFFXZWJQYWdlOjppbnB1dE1ldGhvZFF1ZXJ5KFF0OjpJbnB1dE1ldGhvZFF1
ZXJ5IHByb3BlcnR5KSBjb25zdAogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFFWYXJp
YW50KGlucHV0RWxlbWVudC0+bWF4TGVuZ3RoKCkpOwogICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBRVmFyaWFudChJbnB1dEVs
ZW1lbnQ6OnNfbWF4aW11bUxlbmd0aCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFFWYXJpYW50
KEhUTUxJbnB1dEVsZW1lbnQ6Om1heGltdW1MZW5ndGgpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgcmV0dXJuIFFWYXJpYW50KDApOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L3F0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IDE2
MGEwMjlkYzVhYmQ4NGM3NDljMTEwMzNkZTkwZDk2NTIxNTg3Y2MuLjE0YTAxYjg5YmRjY2U4Yzk2
ODA4ZjQ5NTQ0OWM2NzIxZDFmOTQwM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAK
KzIwMTEtMDUtMDUgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVsaW1pbmF0ZSBXZWJDb3Jl
L2RvbS9JbnB1dEVsZW1lbnQue2NwcCxofQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NjAyNjIKKworICAgICAgICAqIEFwaS9xd2VicGFnZS5jcHA6Cisg
ICAgICAgIChRV2ViUGFnZTo6aW5wdXRNZXRob2RRdWVyeSk6CisgICAgICAgICAgUmVwbGFjZSBJ
bnB1dEVsZW1lbnQ6OnNfbWF4aW11bUxlbmd0aCB3aXRoIEhUTUxJbnB1dEVsZW1lbnQ6Om1heGlt
dW1MZW5ndGguCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0
UXQuY3BwOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldEF1dG9maWxsZWQp
OgorICAgICAgICAgIEZvbGxvdyB0aGUgcmV0dXJuIHR5cGUgY2hhbmdlIG9mIE5vZGU6OnRvSW5w
dXRFbGVtZW50KCkuCisKIDIwMTEtMDUtMDQgIENyaXMgTmVja2FyICA8Y2RuQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5jcHAgYi9T
b3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNw
cAppbmRleCA5ZmE0MzI0ZTExYWYwOTY3ZWVkOWY5YTA5YWJmYTNkYWRjYzc3ODY0Li5lNDAzYTA2
MjZiNTFjYjhiYjBiMTI1MjE4MjRmMzA5NGM0YjA0NmE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L3F0L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNw
cApAQCAtNTMsNyArNTMsNiBAQAogI2luY2x1ZGUgIkdlb2xvY2F0aW9uUG9zaXRpb24uaCIKICNp
bmNsdWRlICJIaXN0b3J5SXRlbS5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKLSNp
bmNsdWRlICJJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKICNpbmNsdWRlICJOb3RpZmljYXRpb25QcmVzZW50ZXJD
bGllbnRRdC5oIgpAQCAtMjQzLDExICsyNDIsMTEgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdDo6c2V0QXV0b2ZpbGxlZChjb25zdCBRV2ViRWxlbWVudCYgZWxlbWVudCwgYm9vbCBpc0EK
ICAgICBXZWJDb3JlOjpFbGVtZW50KiB3ZWJFbGVtZW50ID0gZWxlbWVudC5tX2VsZW1lbnQ7CiAg
ICAgaWYgKCF3ZWJFbGVtZW50KQogICAgICAgICByZXR1cm47Ci0gICAgSW5wdXRFbGVtZW50KiBp
bnB1dEVsZW1lbnQgPSB3ZWJFbGVtZW50LT50b0lucHV0RWxlbWVudCgpOworICAgIEhUTUxJbnB1
dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IHdlYkVsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCk7CiAg
ICAgaWYgKCFpbnB1dEVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIHN0YXRpY19jYXN0
PEhUTUxJbnB1dEVsZW1lbnQqPihpbnB1dEVsZW1lbnQpLT5zZXRBdXRvZmlsbGVkKGlzQXV0b2Zp
bGxlZCk7CisgICAgaW5wdXRFbGVtZW50LT5zZXRBdXRvZmlsbGVkKGlzQXV0b2ZpbGxlZCk7CiB9
CiAKIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldEphdmFTY3JpcHRQcm9maWxpbmdF
bmFibGVkKFFXZWJGcmFtZSogZnJhbWUsIGJvb2wgZW5hYmxlZCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92476</attachid>
            <date>2011-05-05 14:54:13 -0700</date>
            <delta_ts>2011-05-05 21:47:19 -0700</delta_ts>
            <desc>Patch 2</desc>
            <filename>bug-60262-20110506065411.patch</filename>
            <type>text/plain</type>
            <size>99604</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODU4NzUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYzU0YjJl
ZTIwNzUyZmY5OWU1NjJkZjM1ZDBhOGNkYjM3YThmMWQxMy4uMDFhMGIzODllOTIxYTllYTUwOWVk
YzA0MjFkMDkxNWZkZmY3ZThjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTU3MCw3ICs1NzAs
NiBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgZG9tL0V4Y2VwdGlvbkJhc2UuY3BwCiAgICAg
ZG9tL0V4Y2VwdGlvbkNvZGUuY3BwCiAgICAgZG9tL0ljb25VUkwuY3BwCi0gICAgZG9tL0lucHV0
RWxlbWVudC5jcHAKICAgICBkb20vS2V5Ym9hcmRFdmVudC5jcHAKICAgICBkb20vTWVzc2FnZUNo
YW5uZWwuY3BwCiAgICAgZG9tL01lc3NhZ2VFdmVudC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwZGQ2MDA4
YzRjMjBlZmQyNWNlMzlmMGVhYWNjYTM0M2I4MmJjMWQzLi5iNmYzOGI3OTU5NWI4YTI3YzZlMWNi
OWJkOTNiMWM0ZWYwOGVkY2YxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTI4IEBACisyMDExLTA1
LTA1ICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbGltaW5hdGUgV2ViQ29yZS9kb20vSW5w
dXRFbGVtZW50LntjcHAsaH0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTYwMjYyCisKKyAgICAgICAgLSBGb2xkIGluIGFsbCBvZiB0aGUgY29kZSBvZiBJ
bnB1dEVsZW1lbnQue2NwcCxofSBpbnRvIEhUTUxJbnB1dEVsZW1lbnQKKyAgICAgICAgICBhbmQg
VGV4dEZpZWxkSW5wdXRUeXBlLgorICAgICAgICAtIENoYW5nZSB0aGUgcmV0dXJuIHR5cGUgY2hh
bmdlIG9mIE5vZGU6OnRvSW5wdXRFbGVtZW50KCk6CisgICAgICAgICAgSW5wdXRFbGVtZW50KiAt
PiBIVE1MSW5wdXRFbGVtZW50KgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyBjaGFuZ2Ug
c2hvdWxkIG5vdCBjaGFuZ2UgdGhlIGV4aXN0aW5nIGJlaGF2aW91ci4KKworICAgICAgICAqIENN
YWtlTGlzdHMudHh0OiBSZW1vdmUgSW5wdW50RWxlbWVudC5jcHAgYW5kL29yIElucHV0RWxlbWVu
dC5oLgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06IGRpdHRvLgorICAgICAgICAqIFdl
YkNvcmUuZXhwLmluOiBBZGQgc3ltYm9scyBvZiBmdW5jdGlvbnMgZXhwb3NlZCB0byBXZWJLaXQu
CisgICAgICAgICogV2ViQ29yZS5neXBpOiBSZW1vdmUgSW5wdW50RWxlbWVudC5jcHAgYW5kL29y
IElucHV0RWxlbWVudC5oLgorICAgICAgICAqIFdlYkNvcmUucHJvOiBkaXR0by4KKyAgICAgICAg
KiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajogZGl0dG8uCisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBkaXR0by4KKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6
dGV4dE1hcmtlckRhdGFGb3JWaXNpYmxlUG9zaXRpb24pOgorICAgICAgICAgIEZvbGxvdyB0aGUg
cmV0dXJuIHR5cGUgY2hhbmdlIG9mIE5vZGU6OnRvSW5wdXRFbGVtZW50KCkuCisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzUGFzc3dvcmRGaWVsZCk6IGRpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNJbmRldGVy
bWluYXRlKTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0Ojppc05hdGl2ZUNoZWNrYm94T3JSYWRpbyk6IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNDaGVja2VkKTogZGl0dG8uCisgICAgICAgICog
Y3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxl
Y3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KTogZGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IpOiBk
aXR0by4KKyAgICAgICAgKiBkb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDaGVja2VkUmFkaW9CdXR0b25zOjpyZW1vdmVCdXR0b24pOiBkaXR0by4KKyAgICAg
ICAgKiBkb20vRE9NQWxsSW5PbmUuY3BwOiBSZW1vdmUgSW5wdXRFbGVtZW50LmguCisgICAgICAg
ICogZG9tL0lucHV0RWxlbWVudC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogZG9tL0lucHV0RWxl
bWVudC5oOiBSZW1vdmVkLgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok5vZGU6OnRvSW5wdXRFbGVtZW50KToKKyAgICAgICAgICBDaGFuZ2UgdGhlIHJldHVybiB0
eXBlIGZyb20gSW5wdXRFbGVtZW50KiB0byBIVE1MSW5wdXRFbGVtZW50Ki4KKyAgICAgICAgKiBk
b20vTm9kZS5oOiBkaXR0by4KKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6SFRNTElucHV0RWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojpmb3JtQ29udHJvbE5hbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6dG9vTG9uZyk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MSW5wdXRFbGVtZW50Ojp1cGRhdGVGb2N1c0FwcGVhcmFuY2UpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6YWJvdXRUb1VubG9hZCk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MSW5wdXRFbGVtZW50OjpoYW5kbGVGb2N1c0V2ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmhhbmRsZUJsdXJFdmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MSW5wdXRFbGVtZW50Ojp1cGRhdGVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJ
bnB1dEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxJbnB1dEVsZW1lbnQ6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVu
dDo6Y29weU5vbkF0dHJpYnV0ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElu
cHV0RWxlbWVudDo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6
c3VnZ2VzdGVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0
U3VnZ2VzdGVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWVGcm9t
UmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0RmlsZUxp
c3RGcm9tUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0
RGVmYXVsdE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6bWF4TGVu
Z3RoKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmNhY2hlU2VsZWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OmZvcm1hdENvZGVzKTogTW92ZWQgZnJvbSBJbnB1dEVsZW1l
bnQuCisgICAgICAgIChXZWJDb3JlOjpjdXJzb3JQb3NpdGlvblRvTWFza0luZGV4KTogZGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojppc0NvbmZvcm1Ub0lucHV0TWFz
ayk6IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6dmFsaWRhdGVJ
bnB1dE1hc2spOiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNl
dFdhcElucHV0Rm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6Omhh
bmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1
dEVsZW1lbnQ6Om5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TElucHV0RWxlbWVudDo6dXBkYXRlVmFsdWVJZk5lZWRlZCk6CisgICAgICAgICogaHRtbC9IVE1M
SW5wdXRFbGVtZW50Lmg6CisgICAgICAgICAgLSBBZGQgZGF0YSBtZW1iZXJzIHdoaWNoIHdlcmUg
ZGVmaW5lZCBpbiBJbnB1dEVsZW1lbnREYXRhLgorICAgICAgICAgIC0gTWFrZSBzb21lIGZ1bmN0
aW9ucyBwdWJsaWMgYmVjYXVzZSB0aGUgcHVibGljIGludGVyZmFjZSBJbnB1dEVsZW1lbnQgaXMg
cmVtb3ZlZC4KKyAgICAgICAgICAtIE1ha2Ugc29tZSBmdW5jdGlvbnMgbm9uLXZpcnR1YWwgYmVj
YXVzZSB0aGV5IGRvbid0IG92ZXJyaWRlCisgICAgICAgICAgICBjb3JyZXNwb25kaW5nIHZpcnR1
YWwgZnVuY3Rpb25zIG9mIElucHV0RWxlbWVudCBhbnltb3JlLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTElucHV0RWxlbWVudDo6dG9JbnB1dEVsZW1lbnQpOgorICAgICAgICAgIEZvbGxvdyB0aGUg
cmV0dXJuIHR5cGUgY2hhbmdlIG9mIE5vZGU6OnRvSW5wdXRFbGVtZW50KCkuCisgICAgICAgIChX
ZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojppc0luZGV0ZXJtaW5hdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTElucHV0RWxlbWVudDo6aXNBdXRvZmlsbGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxJbnB1dEVsZW1lbnQ6OnN1cHBvcnRzTWF4TGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxJbnB1dEVsZW1lbnQ6OmNhY2hlZFNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmNhY2hlZFNlbGVjdGlvbkVuZCk6CisgICAgICAgICogaHRt
bC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcDogUmVtb3ZlIHVudXNlZCBJbnB1dEVsZW1lbnQuaC4K
KyAgICAgICAgKiBodG1sL0lucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5
cGU6OmhhbmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KTogUmVtb3ZlIHRoZSBjb2RlLgorICAg
ICAgICAqIGh0bWwvSW5wdXRUeXBlLmg6IFVwZGF0ZSBmb3IgdGhlIGFib3ZlLgorICAgICAgICAq
IGh0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlcGxhY2VF
T0xBbmRMaW1pdExlbmd0aCk6IE1vdmVkIGZyb20gSW5wdXRFbGVtZW50LmNwcC4KKyAgICAgICAg
KFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6c2FuaXRpemVWYWx1ZSk6IEltcGxlbWVudCB3
aXRoIHJlcGxhY2VFT0xBbmRMaW1pdExlbmd0aCgpLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZp
ZWxkSW5wdXRUeXBlOjpoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCk6CisgICAgICAgICAg
TW92ZSB0aGUgY29kZSBmcm9tIElucHV0RWxlbWVudDo6aGFuZGxlQmVmb3JlVGV4dEluc2VydGVk
RXZlbnQoKS4KKyAgICAgICAgKiBodG1sL1RleHRGaWVsZElucHV0VHlwZS5oOiBVcGRhdGUgZGVj
bGFyYXRpb25zLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmUuY3BwOgorICAgICAgICAgIC0gUmVtb3ZlIEFTU0VSVChub2RlKCktPmlzSFRNTEVsZW1lbnQo
KSkgYmVjYXVzZSBpdCBpcyBjaGVja2VkIGluIHRoZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgICAt
IEZvbGxvdyB0aGUgcmV0dXJuIHR5cGUgY2hhbmdlIG9mIGlucHV0RWxlbWVudCgpLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmUpOgorICAgICAgICAgIE1ha2Ugc3VyZSBub2RlKCkgaXMgYW4gSFRNTElucHV0
RWxlbWVudCBpbnN0YW5jZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6YWRkU2VhcmNoUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6c3RvcFNlYXJjaEV2ZW50VGltZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzaG93UG9wdXApOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpoaWRlUG9wdXApOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzdWJ0cmVlSGFzQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnVwZGF0ZUZy
b21FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6Y3JlYXRlSW5uZXJCbG9ja1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6Y3JlYXRlUmVzdWx0c0J1dHRvblN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y3JlYXRlQ2FuY2VsQnV0dG9uU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjcmVh
dGVJbm5lclNwaW5CdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OmNyZWF0ZU91dGVyU3BpbkJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y3JlYXRlU3BlZWNoQnV0dG9uU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp2aXNp
YmlsaXR5Rm9yQ2FuY2VsQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6c3RhcnRTZWFyY2hFdmVudFRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2VhcmNoRXZlbnRUaW1lckZpcmVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6dmFsdWVDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2V0VGV4
dEZyb21JdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6aW5wdXRFbGVtZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lLmg6CisgICAgICAgICAgQ2hhbmdlIHRoZSByZXR1cm4gdHlwZSBvZiBpbnB1dEVs
ZW1lbnQoKTogSW5wdXRFbGVtZW50KiAtPiBIVE1MSW5wdXRFbGVtZW50Ki4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6
OmlzQ2hlY2tlZCk6CisgICAgICAgICAgRm9sbG93IHRoZSByZXR1cm4gdHlwZSBjaGFuZ2Ugb2Yg
Tm9kZTo6dG9JbnB1dEVsZW1lbnQoKS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpp
c0luZGV0ZXJtaW5hdGUpOiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpz
aG91bGRIYXZlU3BpbkJ1dHRvbik6CisgICAgICAgICAgQ2hhbmdlIHRoZSBwYXJhbWV0ZXIgdHlw
ZTogSW5wdXRFbGVtZW50KiAtPiBIVE1MSW5wdXRFbGVtZW50Ki4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGhlbWUuaDogZGl0dG8uCisKIDIwMTEtMDUtMDUgIEJyaWFuIFdlaW5zdGVpbiAg
PGJ3ZWluc3RlaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0
Y2hlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9T
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGIwNDBmOTViM2UwNDdlODhh
ODk2MDM4YmJhZjczZjc1ZDNiNzM0ODYuLjA1MzAxYzI0OTEyYTVhODY3YjUzMzQ5ZjllOTdlNTNm
YTc3ZDkzZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0K
KysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMTE1Myw4ICsxMTUz
LDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vSWdub3JlRGVz
dHJ1Y3RpdmVXcml0ZUNvdW50SW5jcmVtZW50ZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvZG9tL0lj
b25VUkwuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vSWNvblVSTC5oIFwKLQlTb3VyY2UvV2Vi
Q29yZS9kb20vSW5wdXRFbGVtZW50LmNwcCBcCi0JU291cmNlL1dlYkNvcmUvZG9tL0lucHV0RWxl
bWVudC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vSGFzaENoYW5nZUV2ZW50LmggXAogCVNvdXJj
ZS9XZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvZG9tL0tl
eWJvYXJkRXZlbnQuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5p
biBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCmluZGV4IDBlNTYyYjVmZGQ1ZThjYzcx
MjJmNGY0NjNkNjZmMmJiZjE4Mjg4ZTkuLjU1YzZhNjY2MDc3NDE3ZDVlODk0ZmUzODcxMDk4ODVk
Y2QzMzE0YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBAIC00NDUsNiArNDQ1LDcgQEAgX19aTjdX
ZWJDb3JlMTZGb250RmFsbGJhY2tMaXN0MTVyZWxlYXNlRm9udERhdGFFdgogX19aTjdXZWJDb3Jl
MTZGb250UGxhdGZvcm1EYXRhQzFFUDZOU0ZvbnRmYmJOU18xNUZvbnRPcmllbnRhdGlvbkVOU18x
NVRleHRPcmllbnRhdGlvbkVOU18xNkZvbnRXaWR0aFZhcmlhbnRFCiBfX1pON1dlYkNvcmUxNkZv
bnRQbGF0Zm9ybURhdGFEMUV2CiBfX1pON1dlYkNvcmUxNkhUTUxJbnB1dEVsZW1lbnQxM3NldEF1
dG9maWxsZWRFYgorX19aTjdXZWJDb3JlMTZIVE1MSW5wdXRFbGVtZW50MTVzZXRWYWx1ZUZvclVz
ZXJFUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmUxNkljb25EYXRhYmFzZUJhc2UyOHN5bmNo
cm9ub3VzSWNvblVSTEZvclBhZ2VVUkxFUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmUxNklj
b25EYXRhYmFzZUJhc2U0b3BlbkVSS04zV1RGNlN0cmluZ0VTNF8KIF9fWk43V2ViQ29yZTE2TGVn
YWN5V2ViQXJjaGl2ZTE5Y3JlYXRlRnJvbVNlbGVjdGlvbkVQTlNfNUZyYW1lRQpAQCAtMTE0Niw3
ICsxMTQ3LDkgQEAgX19aTks3V2ViQ29yZTE1VmlzaWJsZVBvc2l0aW9uMTlhYnNvbHV0ZUNhcmV0
Qm91bmRzRXYKIF9fWk5LN1dlYkNvcmUxNVZpc2libGVQb3NpdGlvbjRuZXh0RU5TXzI3RWRpdGlu
Z0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlRQogX19aTks3V2ViQ29yZTE1VmlzaWJsZVBvc2l0aW9uOHBy
ZXZpb3VzRU5TXzI3RWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlRQogX19aTks3V2ViQ29yZTE2
Rm9udEZhbGxiYWNrTGlzdDEwZm9udERhdGFBdEVQS05TXzRGb250RWoKK19fWk5LN1dlYkNvcmUx
NkhUTUxJbnB1dEVsZW1lbnQxMWlzVGV4dEZpZWxkRXYKIF9fWk5LN1dlYkNvcmUxNkhUTUxJbnB1
dEVsZW1lbnQxMmF1dG9Db21wbGV0ZUV2CitfX1pOSzdXZWJDb3JlMTZIVE1MSW5wdXRFbGVtZW50
MTVpc1Bhc3N3b3JkRmllbGRFdgogX19aTks3V2ViQ29yZTE2SFRNTElucHV0RWxlbWVudDIxbGFz
dENoYW5nZVdhc1VzZXJFZGl0RXYKIF9fWk5LN1dlYkNvcmUxNkljb25EYXRhYmFzZUJhc2UxMmRh
dGFiYXNlUGF0aEV2CiBfX1pOSzdXZWJDb3JlMTZSZXNvdXJjZVJlc3BvbnNlMTNuc1VSTFJlc3Bv
bnNlRXYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA5ZjJmY2I2ODhlYjFlZWFjMjRjNTU0NWRlN2MxMWVl
OTJlNWJmNDRkLi5lODEzZDViMzQwZTQ4YzVhZWQ4YzIxZDAyMzc2MWI3YzA1NzRhYjczIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCkBAIC01MjksNyArNTI5LDYgQEAKICAgICAgICAgICAgICdkb20vRXZlbnRU
YXJnZXQuaCcsCiAgICAgICAgICAgICAnZG9tL0V4Y2VwdGlvbkNvZGUuaCcsCiAgICAgICAgICAg
ICAnZG9tL0ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbi5oJywKLSAgICAgICAgICAgICdkb20v
SW5wdXRFbGVtZW50LmgnLAogICAgICAgICAgICAgJ2RvbS9LZXlib2FyZEV2ZW50LmgnLAogICAg
ICAgICAgICAgJ2RvbS9NYXBwZWRBdHRyaWJ1dGVFbnRyeS5oJywKICAgICAgICAgICAgICdkb20v
TWVzc2FnZVBvcnQuaCcsCkBAIC0yNDczLDcgKzI0NzIsNiBAQAogICAgICAgICAgICAgJ2RvbS9J
Z25vcmVEZXN0cnVjdGl2ZVdyaXRlQ291bnRJbmNyZW1lbnRlci5oJywKICAgICAgICAgICAgICdk
b20vSWNvblVSTC5jcHAnLAogICAgICAgICAgICAgJ2RvbS9JY29uVVJMLmgnLAotICAgICAgICAg
ICAgJ2RvbS9JbnB1dEVsZW1lbnQuY3BwJywKICAgICAgICAgICAgICdkb20vS2V5Ym9hcmRFdmVu
dC5jcHAnLAogICAgICAgICAgICAgJ2RvbS9NZXNzYWdlQ2hhbm5lbC5jcHAnLAogICAgICAgICAg
ICAgJ2RvbS9NZXNzYWdlQ2hhbm5lbC5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUucHJvIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggODQ4MmMwM2IyMWRh
ZWRmZmRhNzRkNzAwMzViMjQ2OWM5MTNlNzNiZS4uY2U0YmQ5ZTg5YzExY2MxYTdmNjE5OTY0MmI3
ZjU4NGVlNzNlNjI5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTQ5Myw3ICs0OTMsNiBAQCBTT1VSQ0VT
ICs9IFwKICAgICBkb20vRXhjZXB0aW9uQmFzZS5jcHAgXAogICAgIGRvbS9FeGNlcHRpb25Db2Rl
LmNwcCBcCiAgICAgZG9tL0ljb25VUkwuY3BwIFwKLSAgICBkb20vSW5wdXRFbGVtZW50LmNwcCBc
CiAgICAgZG9tL0tleWJvYXJkRXZlbnQuY3BwIFwKICAgICBkb20vTWVzc2FnZUNoYW5uZWwuY3Bw
IFwKICAgICBkb20vTWVzc2FnZUV2ZW50LmNwcCBcCkBAIC0xNDY5LDcgKzE0NjgsNiBAQCBIRUFE
RVJTICs9IFwKICAgICBkb20vRXhjZXB0aW9uQmFzZS5oIFwKICAgICBkb20vRXhjZXB0aW9uQ29k
ZS5oIFwKICAgICBkb20vRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uLmggXAotICAgIGRvbS9J
bnB1dEVsZW1lbnQuaCBcCiAgICAgZG9tL0tleWJvYXJkRXZlbnQuaCBcCiAgICAgZG9tL01lc3Nh
Z2VDaGFubmVsLmggXAogICAgIGRvbS9NZXNzYWdlRXZlbnQuaCBcCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IGUyYzhmNTVkODM5MTRmNzZiMDIy
NDQ1NmExODA1MTUwZTU4OGE3ZTQuLmNjY2I2MGE1MjE3MjAyNTkxMDllMWJjNTVjMjI3MDcxNzk0
YzIzMjkgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
CkBAIC00NDU2Niw2MiArNDQ1NjYsNiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0J
CQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cSW5wdXRFbGVtZW50LmNwcCIKLQkJCQk+Ci0JCQkJPEZp
bGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgotCQkJCQlFeGNsdWRlZEZy
b21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBp
bGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxlQ29u
ZmlndXJhdGlvbgotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgotCQkJCQlFeGNsdWRlZEZyb21C
dWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVy
VG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxlQ29uZmln
dXJhdGlvbgotCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIiCi0JCQkJCUV4Y2x1
ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NM
Q29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZp
bGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgot
CQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJ
TmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9u
PgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJEZWJ1Z19BbGx8V2luMzIiCi0J
CQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlO
YW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+
Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IlByb2R1Y3Rpb258V2luMzIiCi0J
CQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlO
YW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+
Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXElucHV0RWxl
bWVudC5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIu
Llxkb21cS2V5Ym9hcmRFdmVudC5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlvbgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IDQzOWUzMTNlMmU5MTI4MzQ3OGE1OTJiZGU5ZWFlZTRjNWUxYzRkNDcuLjMxMmZlMTI1N2Y0
NzUzNDgwYjRlYzRjOWM4NzZlNjFmMjRlNzVhOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTk1LDE0ICs5NSwxMiBAQAogCQkw
ODU0QjAyMzEyNTVFNEU2MDBCOUNERDAgLyogU1ZHUm9vdElubGluZUJveC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg1NEIwMTExMjU1RTRFNjAwQjlD
REQwIC8qIFNWR1Jvb3RJbmxpbmVCb3guaCAqLzsgfTsKIAkJMDg1NEIwMjUxMjU1RTRFNjAwQjlD
REQwIC8qIFNWR1RleHRRdWVyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMDg1NEIwMTMxMjU1RTRFNjAwQjlDREQwIC8qIFNWR1RleHRRdWVyeS5oICov
OyB9OwogCQkwODU3OTcwOTEyNzgzOTRDMDBBOEVDNUYgLyogU1ZHQW5pbWF0ZWRCb29sZWFuLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODU3OTcwODEy
NzgzOTRDMDBBOEVDNUYgLyogU1ZHQW5pbWF0ZWRCb29sZWFuLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMDg1OTFBQTUwRjA4NUM0RTAwOUJBQ0Ix
IC8qIElucHV0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMDg1OTFBQTQwRjA4NUM0RTAwOUJBQ0IxIC8qIElucHV0RWxlbWVudC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA4NUExNTkzMTI4
OUE4REQwMDI3MTBFMyAvKiBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3RQcm9wZXJ0eVRlYXJPZmYu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NUExNTky
MTI4OUE4REQwMDI3MTBFMyAvKiBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3RQcm9wZXJ0eVRlYXJP
ZmYuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
ODVCOTJCQTBFRkRFNzNEMDBFNjEyM0MgLyogRm9ybURhdGFCdWlsZGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NUI5MkI4MEVGREU3M0QwMEU2
MTIzQyAvKiBGb3JtRGF0YUJ1aWxkZXIuY3BwICovOyB9OwogCQkwODVCOTJCQjBFRkRFNzNEMDBF
NjEyM0MgLyogRm9ybURhdGFCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwODVCOTJCOTBFRkRFNzNEMDBFNjEyM0MgLyogRm9ybURhdGFCdWls
ZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJMDg2NDFENDcx
MjE0MkY3RDAwOERFOUY2IC8qIFJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NjQxRDQ1MTIxNDJG
N0QwMDhERTlGNiAvKiBSZW5kZXJJbWFnZVJlc291cmNlU3R5bGVJbWFnZS5jcHAgKi87IH07CiAJ
CTA4NjQxRDQ4MTIxNDJGN0QwMDhERTlGNiAvKiBSZW5kZXJJbWFnZVJlc291cmNlU3R5bGVJbWFn
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg2NDFE
NDYxMjE0MkY3RDAwOERFOUY2IC8qIFJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDg2QkJEMEYx
MzYwMzlDMjAwOEIxNUQ4IC8qIEdseXBoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwODZCQkQwRTEzNjAzOUMyMDA4QjE1RDggLyogR2x5cGguaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwODcwMEJFNzBG
MDg2QzUzMDA5MTk0MTkgLyogSW5wdXRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NzAwQkU2MEYwODZDNTMwMDkxOTQxOSAvKiBJbnB1
dEVsZW1lbnQuY3BwICovOyB9OwogCQkwODcyODE1NTBGMjZCOUI2MDBBRkM1OTYgLyogT3B0aW9u
RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwODcyODE1MTBGMjZCOUI2MDBBRkM1OTYgLyogT3B0aW9uRWxlbWVudC5jcHAgKi87IH07CiAJ
CTA4NzI4MTU2MEYyNkI5QjYwMEFGQzU5NiAvKiBPcHRpb25FbGVtZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODcyODE1MjBGMjZCOUI2MDBBRkM1
OTYgLyogT3B0aW9uRWxlbWVudC5oICovOyB9OwogCQkwODcyODE1NzBGMjZCOUI2MDBBRkM1OTYg
LyogT3B0aW9uR3JvdXBFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDA4NzI4MTUzMEYyNkI5QjYwMEFGQzU5NiAvKiBPcHRpb25Hcm91cEVs
ZW1lbnQuY3BwICovOyB9OwpAQCAtNjQ1NiwxNCArNjQ1NCwxMiBAQAogCQkwODU0QjAxMjEyNTVF
NEU2MDBCOUNERDAgLyogU1ZHVGV4dFF1ZXJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFNWR1RleHRRdWVyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTA4NTRCMDEzMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdUZXh0UXVlcnkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHVGV4dFF1ZXJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTA4NTc5NzA4MTI3ODM5NEMwMEE4RUM1RiAvKiBTVkdBbmltYXRlZEJvb2xl
YW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRCb29sZWFu
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTA4NTkxQUE0MEYwODVDNEUwMDlCQUNC
MSAvKiBJbnB1dEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5w
dXRFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NUExNTkyMTI4OUE4
REQwMDI3MTBFMyAvKiBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3RQcm9wZXJ0eVRlYXJPZmYuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0
UHJvcGVydHlUZWFyT2ZmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NUI5MkI4
MEVGREU3M0QwMEU2MTIzQyAvKiBGb3JtRGF0YUJ1aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRm9ybURhdGFCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMDg1QjkyQjkwRUZERTczRDAwRTYxMjNDIC8qIEZvcm1EYXRhQnVpbGRl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb3JtRGF0YUJ1aWxkZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg2NDFENDUxMjE0MkY3RDAwOERFOUY2IC8q
IFJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg2NDFENDYxMjE0MkY3RDAwOERFOUY2IC8qIFJlbmRl
ckltYWdlUmVzb3VyY2VTdHlsZUltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTA4NkJCRDBFMTM2MDM5QzIwMDhCMTVEOCAvKiBHbHlwaC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBHbHlwaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkwODcwMEJFNjBGMDg2QzUzMDA5MTk0MTkgLyogSW5wdXRFbGVtZW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElucHV0RWxlbWVudC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NzI4MTUxMEYyNkI5QjYwMEFGQzU5NiAvKiBPcHRpb25F
bGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9wdGlvbkVs
ZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODcyODE1MjBGMjZCOUI2
MDBBRkM1OTYgLyogT3B0aW9uRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBPcHRpb25FbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NzI4
MTUzMEYyNkI5QjYwMEFGQzU5NiAvKiBPcHRpb25Hcm91cEVsZW1lbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3B0aW9uR3JvdXBFbGVtZW50LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5MjQ0LDggKzE5MjQwLDYgQEAKIAkJCQkyNDQyQkJG
ODExOTRDOUQzMDBENDk0NjkgLyogSGFzaENoYW5nZUV2ZW50LmggKi8sCiAJCQkJODQ4MkI3NDQx
MTk4QzMyRTAwQkZCMDA1IC8qIEhhc2hDaGFuZ2VFdmVudC5pZGwgKi8sCiAJCQkJOEFCNEJDNzYx
MjZGREI3MTAwREVCNzI3IC8qIElnbm9yZURlc3RydWN0aXZlV3JpdGVDb3VudEluY3JlbWVudGVy
LmggKi8sCi0JCQkJMDg3MDBCRTYwRjA4NkM1MzAwOTE5NDE5IC8qIElucHV0RWxlbWVudC5jcHAg
Ki8sCi0JCQkJMDg1OTFBQTQwRjA4NUM0RTAwOUJBQ0IxIC8qIElucHV0RWxlbWVudC5oICovLAog
CQkJCTg1MDMxQjJEMEE0NEVGQzcwMEY5OTJFMCAvKiBLZXlib2FyZEV2ZW50LmNwcCAqLywKIAkJ
CQk4NTAzMUIyRTBBNDRFRkM3MDBGOTkyRTAgLyogS2V5Ym9hcmRFdmVudC5oICovLAogCQkJCTE0
Q0Y3QzIwMDlGNzExMDYwMEVCMzY2NSAvKiBLZXlib2FyZEV2ZW50LmlkbCAqLywKQEAgLTIxMTQ5
LDcgKzIxMTQzLDYgQEAKIAkJCQlBOENGRjVFMzBBMTU1QTA1MDAwQTQyMzQgLyogSW5saW5lRmxv
d0JveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFNzg5MTYxMTIwRDYwODAwNjBFQ0U1IC8qIElu
bGluZUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0VBNDg1QTA5N0Q5MzAyMDA5NEM5
RTQgLyogSW5saW5lVGV4dEJveC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMDg1OTFBQTUwRjA4NUM0
RTAwOUJBQ0IxIC8qIElucHV0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzdFMzUyNEQx
MjQ1MEM2NjAwQkFGNUQ5IC8qIElucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlE
RUEwOTlFNjQ5MjAwNTZFNTgxIC8qIEluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTkzMzA5REVDMDk5RTY0OTIwMDU2RTU4MSAvKiBJbnNlcnRMaW5lQnJlYWtD
b21tYW5kLmggaW4gSGVhZGVycyAqLywKQEAgLTIzOTM5LDcgKzIzOTMyLDYgQEAKIAkJCQlBOENG
RjVFNjBBMTU1QTA1MDAwQTQyMzQgLyogSW5saW5lQm94LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE4Q0ZGNUU0MEExNTVBMDUwMDBBNDIzNCAvKiBJbmxpbmVGbG93Qm94LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUJDRUE0ODU5MDk3RDkzMDIwMDk0QzlFNCAvKiBJbmxpbmVUZXh0Qm94LmNwcCBp
biBTb3VyY2VzICovLAotCQkJCTA4NzAwQkU3MEYwODZDNTMwMDkxOTQxOSAvKiBJbnB1dEVsZW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzdFMzUyNEIxMjQ1MEM1MjAwQkFGNUQ5IC8qIElu
cHV0VHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOURFOTA5OUU2NDkyMDA1NkU1ODEg
LyogSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMw
OURFQjA5OUU2NDkyMDA1NkU1ODEgLyogSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAgaW4gU291
cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmpl
Y3RDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUu
Y3BwCmluZGV4IGI0NzEyMDE5MzY3YmY1MmFmYWExMGJlYmVkZWUyYzQ3MTk1NGMyZDUuLjE5YTQ1
ZGQ1YTlhZjQ5MDFjZDVlOGY1OTE2NTNhZmY1OGMyZTVjMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcApAQCAtNTUsMTEgKzU1LDExIEBACiAj
aW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVE1MQXJlYUVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MSW1hZ2VFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgogI2lmIEVOQUJMRShWSURFTykKICNpbmNsdWRlICJNZWRpYUNv
bnRyb2xFbGVtZW50cy5oIgogI2VuZGlmCi0jaW5jbHVkZSAiSW5wdXRFbGVtZW50LmgiCiAjaW5j
bHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RCb3guaCIKICNpbmNsdWRlICJSZW5k
ZXJNZW51TGlzdC5oIgpAQCAtNjE2LDcgKzYxNiw3IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6dGV4
dE1hcmtlckRhdGFGb3JWaXNpYmxlUG9zaXRpb24oVGV4dE1hcmtlckRhdGEmIHRleHRNYXJrZXJE
CiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBpZiAoZG9tTm9kZS0+aXNIVE1MRWxlbWVudCgp
KSB7Ci0gICAgICAgIElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gZG9tTm9kZS0+dG9JbnB1
dEVsZW1lbnQoKTsKKyAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gZG9t
Tm9kZS0+dG9JbnB1dEVsZW1lbnQoKTsKICAgICAgICAgaWYgKGlucHV0RWxlbWVudCAmJiBpbnB1
dEVsZW1lbnQtPmlzUGFzc3dvcmRGaWVsZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuY3BwCmluZGV4IGZiYWFkZWMwMDJhMTA3ZjUwNmFlYzkzZjhjYTI3ODIz
M2VhNjA5NjIuLjAyYTFiYmYwZTI4ODJlZmJmMGY2NGNmNzliNDVkMzg0NTljZGIzYTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmNwcApAQCAtNDk2LDcgKzQ5Niw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdDo6aXNQYXNzd29yZEZpZWxkKCkgY29uc3QKICAgICBpZiAoYXJpYVJvbGVBdHRy
aWJ1dGUoKSAhPSBVbmtub3duUm9sZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSW5w
dXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBtX3JlbmRlcmVyLT5ub2RlKCktPnRvSW5wdXRFbGVt
ZW50KCk7CisgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gbV9yZW5kZXJlci0+
bm9kZSgpLT50b0lucHV0RWxlbWVudCgpOwogICAgIGlmICghaW5wdXRFbGVtZW50KQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKQEAgLTU4OSw3ICs1ODksNyBAQCBib29sIEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OmlzSW5kZXRlcm1pbmF0ZSgpIGNvbnN0CiAgICAgaWYgKCFtX3JlbmRlcmVy
LT5ub2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIElucHV0RWxlbWVudCogaW5w
dXRFbGVtZW50ID0gbV9yZW5kZXJlci0+bm9kZSgpLT50b0lucHV0RWxlbWVudCgpOworICAgIEhU
TUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IG1fcmVuZGVyZXItPm5vZGUoKS0+dG9JbnB1
dEVsZW1lbnQoKTsKICAgICBpZiAoIWlucHV0RWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCkBAIC02MDAsNyArNjAwLDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpp
c05hdGl2ZUNoZWNrYm94T3JSYWRpbygpIGNvbnN0CiB7CiAgICAgTm9kZSogZWxlbWVudE5vZGUg
PSBub2RlKCk7CiAgICAgaWYgKGVsZW1lbnROb2RlKSB7Ci0gICAgICAgIElucHV0RWxlbWVudCog
aW5wdXQgPSBlbGVtZW50Tm9kZS0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICAgICAgSFRNTElucHV0
RWxlbWVudCogaW5wdXQgPSBlbGVtZW50Tm9kZS0+dG9JbnB1dEVsZW1lbnQoKTsKICAgICAgICAg
aWYgKGlucHV0KQogICAgICAgICAgICAgcmV0dXJuIGlucHV0LT5pc0NoZWNrYm94KCkgfHwgaW5w
dXQtPmlzUmFkaW9CdXR0b24oKTsKICAgICB9CkBAIC02MTUsNyArNjE1LDcgQEAgYm9vbCBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc0NoZWNrZWQoKSBjb25zdAogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICAvLyBGaXJzdCB0ZXN0IGZvciBuYXRpdmUgY2hlY2tlZG5lc3Mgc2VtYW50
aWNzCi0gICAgSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBtX3JlbmRlcmVyLT5ub2RlKCkt
PnRvSW5wdXRFbGVtZW50KCk7CisgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0g
bV9yZW5kZXJlci0+bm9kZSgpLT50b0lucHV0RWxlbWVudCgpOwogICAgIGlmIChpbnB1dEVsZW1l
bnQpCiAgICAgICAgIHJldHVybiBpbnB1dEVsZW1lbnQtPmlzQ2hlY2tlZCgpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKaW5kZXggOWI5MzdkMGFmMDBhMzMyNGY5Y2Ey
OTUzNTQ0OGQ1NjcwYjcwYjEzZi4uZTRkMzA5NjY2ZjI1YjRhMWNkZWI0ZjFjN2MwMmFjZDNlZmY2
N2I5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcApAQCAtMTA2OSw4
ICsxMDY5LDggQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1l
bnQoTm9kZSogbm9kZSkgY29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKGlz
Q29udHJvbCkgewotICAgICAgICBJbnB1dEVsZW1lbnQqIHRoaXNJbnB1dEVsZW1lbnQgPSBlbGVt
ZW50LT50b0lucHV0RWxlbWVudCgpOwotICAgICAgICBJbnB1dEVsZW1lbnQqIG90aGVySW5wdXRF
bGVtZW50ID0gbV9lbGVtZW50LT50b0lucHV0RWxlbWVudCgpOworICAgICAgICBIVE1MSW5wdXRF
bGVtZW50KiB0aGlzSW5wdXRFbGVtZW50ID0gZWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKTsKKyAg
ICAgICAgSFRNTElucHV0RWxlbWVudCogb3RoZXJJbnB1dEVsZW1lbnQgPSBtX2VsZW1lbnQtPnRv
SW5wdXRFbGVtZW50KCk7CiAKICAgICAgICAgaWYgKCF0aGlzSW5wdXRFbGVtZW50IHx8ICFvdGhl
cklucHV0RWxlbWVudCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI3NzMsNyArMjc3
Myw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNl
bGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lCiAgICAgICAgICAgICBjYXNlIENTU1NlbGVj
dG9yOjpQc2V1ZG9BdXRvZmlsbDogewogICAgICAgICAgICAgICAgIGlmICghZSB8fCAhZS0+aXNG
b3JtQ29udHJvbEVsZW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgaWYgKElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gZS0+dG9JbnB1dEVsZW1l
bnQoKSkKKyAgICAgICAgICAgICAgICBpZiAoSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50
ID0gZS0+dG9JbnB1dEVsZW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0
RWxlbWVudC0+aXNBdXRvZmlsbGVkKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CkBAIC0yODY2LDcgKzI4NjYsNyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVj
dG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZQogICAg
ICAgICAgICAgICAgIC8vIEV2ZW4gdGhvdWdoIFdpbklFIGFsbG93cyBjaGVja2VkIGFuZCBpbmRl
dGVybWluYXRlIHRvIGNvLWV4aXN0LCB0aGUgQ1NTIHNlbGVjdG9yIHNwZWMgc2F5cyB0aGF0CiAg
ICAgICAgICAgICAgICAgLy8geW91IGNhbid0IGJlIGJvdGggY2hlY2tlZCBhbmQgaW5kZXRlcm1p
bmF0ZS4gIFdlIHdpbGwgYmVoYXZlIGxpa2UgV2luSUUgYmVoaW5kIHRoZSBzY2VuZXMgYW5kIGp1
c3QKICAgICAgICAgICAgICAgICAvLyBvYmV5IHRoZSBDU1Mgc3BlYyBoZXJlIGluIHRoZSB0ZXN0
IGZvciBtYXRjaGluZyB0aGUgcHNldWRvLgotICAgICAgICAgICAgICAgIElucHV0RWxlbWVudCog
aW5wdXRFbGVtZW50ID0gZS0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICBIVE1M
SW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBlLT50b0lucHV0RWxlbWVudCgpOwogICAgICAg
ICAgICAgICAgIGlmIChpbnB1dEVsZW1lbnQgJiYgaW5wdXRFbGVtZW50LT5pc0NoZWNrZWQoKSAm
JiAhaW5wdXRFbGVtZW50LT5pc0luZGV0ZXJtaW5hdGUoKSkKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yODc0LDcgKzI4NzQsNyBA
QCBib29sIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3Rv
cihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZQogICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvSW5kZXRlcm1pbmF0ZTogewogICAgICAgICAgICAgICAgIGlmICghZSB8fCAhZS0+aXNG
b3JtQ29udHJvbEVsZW1lbnQoKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBlLT50b0lucHV0RWxlbWVudCgp
OworICAgICAgICAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGUtPnRv
SW5wdXRFbGVtZW50KCk7CiAgICAgICAgICAgICAgICAgaWYgKGlucHV0RWxlbWVudCAmJiBpbnB1
dEVsZW1lbnQtPmlzSW5kZXRlcm1pbmF0ZSgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGVja2Vk
UmFkaW9CdXR0b25zLmNwcAppbmRleCA3NTIzMzcyNTFhZWM5NWQzZTllMmM1ZmE1ZTY1ODM5Yzkw
NDU1YmYyLi4yYTBmZWE0MDZlNjY1ZDJlMmI1NzBhMTdkNTA2MzMyNzk3OTBiYmExIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuY3BwCkBAIC03Nyw3ICs3Nyw3IEBA
IHZvaWQgQ2hlY2tlZFJhZGlvQnV0dG9uczo6cmVtb3ZlQnV0dG9uKEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQqIGVsZW1lbnQpCiAgICAgaWYgKGl0ID09IG1fbmFtZVRvQ2hlY2tlZFJhZGlvQnV0dG9u
TWFwLT5lbmQoKSB8fCBpdC0+c2Vjb25kICE9IGVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKICAg
ICAKLSAgICBJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGVsZW1lbnQtPnRvSW5wdXRFbGVt
ZW50KCk7CisgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gZWxlbWVudC0+dG9J
bnB1dEVsZW1lbnQoKTsKICAgICBBU1NFUlRfVU5VU0VEKGlucHV0RWxlbWVudCwgaW5wdXRFbGVt
ZW50KTsKICAgICBBU1NFUlQoaW5wdXRFbGVtZW50LT5pc0NoZWNrZWQoKSk7CiAgICAgQVNTRVJU
KGVsZW1lbnQtPmlzUmFkaW9CdXR0b24oKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRE9NQWxsSW5PbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RPTUFsbEluT25lLmNwcApp
bmRleCA1NTY3NGRmZWU5MTM2YjMwYjFiNzU5NGEyMGRlOGYyNGFhOTkwODA1Li5mMjk0OWIxNzVi
NjU2MDMwNjk3ZjMwODJhOWNmNTI1Y2NlZWFlN2U3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRE9NQWxsSW5PbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01BbGxJbk9u
ZS5jcHAKQEAgLTc2LDcgKzc2LDYgQEAKICNpbmNsdWRlICJFeGNlcHRpb25CYXNlLmNwcCIKICNp
bmNsdWRlICJFeGNlcHRpb25Db2RlLmNwcCIKICNpbmNsdWRlICJJY29uVVJMLmNwcCIKLSNpbmNs
dWRlICJJbnB1dEVsZW1lbnQuY3BwIgogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuY3BwIgogI2lu
Y2x1ZGUgIk1lc3NhZ2VDaGFubmVsLmNwcCIKICNpbmNsdWRlICJNZXNzYWdlRXZlbnQuY3BwIgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYjdkMTQ4Y2ZjZmUxNjg5M2ZjODMzM2I1MGI2Mzc4NDAxNjliY2Q0MS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vSW5w
dXRFbGVtZW50LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQxNCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuICho
dHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiSW5wdXRFbGVtZW50LmgiCi0KLSNpbmNsdWRlICJCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVu
dC5oIgotCi0jaWYgRU5BQkxFKFdDU1MpCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgot
I2luY2x1ZGUgIkNTU1J1bGUuaCIKLSNpbmNsdWRlICJDU1NSdWxlTGlzdC5oIgotI2luY2x1ZGUg
IkNTU1N0eWxlUnVsZS5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKLSNlbmRpZgot
Ci0jaW5jbHVkZSAiQXR0cmlidXRlLmgiCi0jaW5jbHVkZSAiQ2hyb21lLmgiCi0jaW5jbHVkZSAi
Q2hyb21lQ2xpZW50LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFdmVudC5o
IgotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUg
IkZyYW1lU2VsZWN0aW9uLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZS5oIgotI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLS8vIEZJWE1FOiBBY2NvcmRpbmcgdG8gSFRNTDQsIHRoZSBsZW5n
dGggYXR0cmlidXRlJ3MgdmFsdWUgY2FuIGJlIGFyYml0cmFyaWx5Ci0vLyBsYXJnZS4gSG93ZXZl
ciwgZHVlIHRvIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDUzNiB0
aGluZ3MKLS8vIGdldCByYXRoZXIgc2x1Z2dpc2ggd2hlbiBhIHRleHQgZmllbGQgaGFzIGEgbGFy
Z2VyIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRoYW4KLS8vIHRoaXMsIGV2ZW4gd2hlbiBqdXN0IGNs
aWNraW5nIGluIHRoZSB0ZXh0IGZpZWxkLgotY29uc3QgaW50IElucHV0RWxlbWVudDo6c19tYXhp
bXVtTGVuZ3RoID0gNTI0Mjg4OwotY29uc3QgaW50IElucHV0RWxlbWVudDo6c19kZWZhdWx0U2l6
ZSA9IDIwOwotCi12b2lkIElucHV0RWxlbWVudDo6ZGlzcGF0Y2hGb2N1c0V2ZW50KElucHV0RWxl
bWVudCogaW5wdXRFbGVtZW50LCBFbGVtZW50KiBlbGVtZW50KQotewotICAgIGlmICghaW5wdXRF
bGVtZW50LT5pc1RleHRGaWVsZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBlbGVtZW50LT5kb2N1bWVudCgpOwotICAgIGlmIChpbnB1dEVsZW1lbnQtPmlz
UGFzc3dvcmRGaWVsZCgpICYmIGRvY3VtZW50LT5mcmFtZSgpKQotICAgICAgICBkb2N1bWVudC0+
c2V0VXNlU2VjdXJlS2V5Ym9hcmRFbnRyeVdoZW5BY3RpdmUodHJ1ZSk7Ci19Ci0KLXZvaWQgSW5w
dXRFbGVtZW50OjpkaXNwYXRjaEJsdXJFdmVudChJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCwg
RWxlbWVudCogZWxlbWVudCkKLXsKLSAgICBpZiAoIWlucHV0RWxlbWVudC0+aXNUZXh0RmllbGQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZWxlbWVudC0+
ZG9jdW1lbnQoKTsKLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKLSAgICBp
ZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoaW5wdXRFbGVtZW50LT5pc1Bh
c3N3b3JkRmllbGQoKSkKLSAgICAgICAgZG9jdW1lbnQtPnNldFVzZVNlY3VyZUtleWJvYXJkRW50
cnlXaGVuQWN0aXZlKGZhbHNlKTsKLQotICAgIGZyYW1lLT5lZGl0b3IoKS0+dGV4dEZpZWxkRGlk
RW5kRWRpdGluZyhlbGVtZW50KTsKLX0KLQotdm9pZCBJbnB1dEVsZW1lbnQ6OnVwZGF0ZUZvY3Vz
QXBwZWFyYW5jZShJbnB1dEVsZW1lbnREYXRhJiBkYXRhLCBJbnB1dEVsZW1lbnQqIGlucHV0RWxl
bWVudCwgRWxlbWVudCogZWxlbWVudCwgYm9vbCByZXN0b3JlUHJldmlvdXNTZWxlY3Rpb24pCi17
Ci0gICAgQVNTRVJUKGlucHV0RWxlbWVudC0+aXNUZXh0RmllbGQoKSk7Ci0KLSAgICBpZiAoIXJl
c3RvcmVQcmV2aW91c1NlbGVjdGlvbiB8fCBkYXRhLmNhY2hlZFNlbGVjdGlvblN0YXJ0KCkgPT0g
LTEpCi0gICAgICAgIGlucHV0RWxlbWVudC0+c2VsZWN0KCk7Ci0gICAgZWxzZQotICAgICAgICAv
LyBSZXN0b3JlIHRoZSBjYWNoZWQgc2VsZWN0aW9uLgotICAgICAgICB1cGRhdGVTZWxlY3Rpb25S
YW5nZShpbnB1dEVsZW1lbnQsIGVsZW1lbnQsIGRhdGEuY2FjaGVkU2VsZWN0aW9uU3RhcnQoKSwg
ZGF0YS5jYWNoZWRTZWxlY3Rpb25FbmQoKSk7Ci0KLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBl
bGVtZW50LT5kb2N1bWVudCgpOwotICAgIGlmIChkb2N1bWVudCAmJiBkb2N1bWVudC0+ZnJhbWUo
KSkKLSAgICAgICAgZG9jdW1lbnQtPmZyYW1lKCktPnNlbGVjdGlvbigpLT5yZXZlYWxTZWxlY3Rp
b24oKTsKLX0KLQotdm9pZCBJbnB1dEVsZW1lbnQ6OnVwZGF0ZVNlbGVjdGlvblJhbmdlKElucHV0
RWxlbWVudCogaW5wdXRFbGVtZW50LCBFbGVtZW50KiBlbGVtZW50LCBpbnQgc3RhcnQsIGludCBl
bmQpCi17Ci0gICAgaWYgKCFpbnB1dEVsZW1lbnQtPmlzVGV4dEZpZWxkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHNldFNlbGVjdGlvblJhbmdlKGVsZW1lbnQsIHN0YXJ0LCBlbmQpOwotfQot
Ci12b2lkIElucHV0RWxlbWVudDo6YWJvdXRUb1VubG9hZChJbnB1dEVsZW1lbnQqIGlucHV0RWxl
bWVudCwgRWxlbWVudCogZWxlbWVudCkKLXsKLSAgICBpZiAoIWlucHV0RWxlbWVudC0+aXNUZXh0
RmllbGQoKSB8fCAhZWxlbWVudC0+Zm9jdXNlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSBlbGVtZW50LT5kb2N1bWVudCgpOwotICAgIEZyYW1lKiBmcmFt
ZSA9IGRvY3VtZW50LT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGZyYW1lLT5lZGl0b3IoKS0+dGV4dEZpZWxkRGlkRW5kRWRpdGluZyhlbGVtZW50KTsK
LX0KLQotdm9pZCBJbnB1dEVsZW1lbnQ6OnNldFZhbHVlRnJvbVJlbmRlcmVyKElucHV0RWxlbWVu
dERhdGEmIGRhdGEsIElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50LCBFbGVtZW50KiBlbGVtZW50
LCBjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIC8vIFJlbmRlcmVyIGFuZCBvdXIgZXZlbnQg
aGFuZGxlciBhcmUgcmVzcG9uc2libGUgZm9yIHNhbml0aXppbmcgdmFsdWVzLgotICAgIEFTU0VS
VF9VTlVTRUQoaW5wdXRFbGVtZW50LCB2YWx1ZSA9PSBpbnB1dEVsZW1lbnQtPnNhbml0aXplVmFs
dWUodmFsdWUpIHx8IGlucHV0RWxlbWVudC0+c2FuaXRpemVWYWx1ZSh2YWx1ZSkuaXNFbXB0eSgp
KTsKLQotICAgIC8vIFdvcmthcm91bmQgZm9yIGJ1ZyB3aGVyZSB0cmFpbGluZyBcbiBpcyBpbmNs
dWRlZCBpbiB0aGUgcmVzdWx0IG9mIHRleHRDb250ZW50LgotICAgIC8vIFRoZSBhc3NlcnQgbWFj
cm8gYWJvdmUgbWF5IGFsc28gYmUgc2ltcGxpZmllZCB0bzogIHZhbHVlID09IGNvbnN0cmFpblZh
bHVlKHZhbHVlKQotICAgIC8vIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTk2NjEKLSAgICBpZiAodmFsdWUgPT0gIlxuIikKLSAgICAgICAgZGF0YS5zZXRWYWx1ZSgiIik7
Ci0gICAgZWxzZQotICAgICAgICBkYXRhLnNldFZhbHVlKHZhbHVlKTsKLQotICAgIGVsZW1lbnQt
PnNldEZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIodHJ1ZSk7Ci0KLSAgICAvLyBJbnB1
dCBldmVudCBpcyBmaXJlZCBieSB0aGUgTm9kZTo6ZGVmYXVsdEV2ZW50SGFuZGxlciBmb3IgZWRp
dGFibGUgY29udHJvbHMuCi0gICAgaWYgKCFpbnB1dEVsZW1lbnQtPmlzVGV4dEZpZWxkKCkpCi0g
ICAgICAgIGVsZW1lbnQtPmRpc3BhdGNoSW5wdXRFdmVudCgpOwotICAgIG5vdGlmeUZvcm1TdGF0
ZUNoYW5nZWQoZWxlbWVudCk7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgcmVwbGFjZUVPTEFuZExpbWl0
TGVuZ3RoKGNvbnN0IElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50LCBjb25zdCBTdHJpbmcmIHBy
b3Bvc2VkVmFsdWUsIGludCBtYXhMZW5ndGgpCi17Ci0gICAgaWYgKCFpbnB1dEVsZW1lbnQtPmlz
VGV4dEZpZWxkKCkpCi0gICAgICAgIHJldHVybiBwcm9wb3NlZFZhbHVlOwotCi0gICAgU3RyaW5n
IHN0cmluZyA9IHByb3Bvc2VkVmFsdWU7Ci0gICAgc3RyaW5nLnJlcGxhY2UoIlxyXG4iLCAiICIp
OwotICAgIHN0cmluZy5yZXBsYWNlKCdccicsICcgJyk7Ci0gICAgc3RyaW5nLnJlcGxhY2UoJ1xu
JywgJyAnKTsKLQotICAgIHVuc2lnbmVkIG5ld0xlbmd0aCA9IG51bUNoYXJhY3RlcnNJbkdyYXBo
ZW1lQ2x1c3RlcnMoc3RyaW5nLCBtYXhMZW5ndGgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBuZXdMZW5ndGg7ICsraSkgewotICAgICAgICBjb25zdCBVQ2hhciBjdXJyZW50ID0gc3Ry
aW5nW2ldOwotICAgICAgICBpZiAoY3VycmVudCA8ICcgJyAmJiBjdXJyZW50ICE9ICdcdCcpIHsK
LSAgICAgICAgICAgIG5ld0xlbmd0aCA9IGk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgIH0KLSAgICByZXR1cm4gc3RyaW5nLmxlZnQobmV3TGVuZ3RoKTsKLX0KLQotU3RyaW5n
IElucHV0RWxlbWVudDo6c2FuaXRpemVWYWx1ZUZvclRleHRGaWVsZChjb25zdCBJbnB1dEVsZW1l
bnQqIGlucHV0RWxlbWVudCwgY29uc3QgU3RyaW5nJiBwcm9wb3NlZFZhbHVlKQotewotI2lmIEVO
QUJMRShXQ1NTKQotICAgIElucHV0RWxlbWVudERhdGEgZGF0YSA9IGNvbnN0X2Nhc3Q8SW5wdXRF
bGVtZW50Kj4oaW5wdXRFbGVtZW50KS0+ZGF0YSgpOwotICAgIGlmICghaXNDb25mb3JtVG9JbnB1
dE1hc2soZGF0YSwgcHJvcG9zZWRWYWx1ZSkpIHsKLSAgICAgICAgaWYgKGlzQ29uZm9ybVRvSW5w
dXRNYXNrKGRhdGEsIGRhdGEudmFsdWUoKSkpCi0gICAgICAgICAgICByZXR1cm4gZGF0YS52YWx1
ZSgpOwotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgfQotI2VuZGlmCi0gICAgcmV0dXJu
IHJlcGxhY2VFT0xBbmRMaW1pdExlbmd0aChpbnB1dEVsZW1lbnQsIHByb3Bvc2VkVmFsdWUsIHNf
bWF4aW11bUxlbmd0aCk7Ci19Ci0KLVN0cmluZyBJbnB1dEVsZW1lbnQ6OnNhbml0aXplVXNlcklu
cHV0VmFsdWUoY29uc3QgSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQsIGNvbnN0IFN0cmluZyYg
cHJvcG9zZWRWYWx1ZSwgaW50IG1heExlbmd0aCkKLXsKLSAgICByZXR1cm4gcmVwbGFjZUVPTEFu
ZExpbWl0TGVuZ3RoKGlucHV0RWxlbWVudCwgcHJvcG9zZWRWYWx1ZSwgbWF4TGVuZ3RoKTsKLX0K
LQotdm9pZCBJbnB1dEVsZW1lbnQ6OmhhbmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KElucHV0
RWxlbWVudERhdGEmIGRhdGEsIElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50LCBFbGVtZW50KiBl
bGVtZW50LCBFdmVudCogZXZlbnQpCi17Ci0gICAgQVNTRVJUKGV2ZW50LT5pc0JlZm9yZVRleHRJ
bnNlcnRlZEV2ZW50KCkpOwotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSB0ZXh0IHRvIGJlIGlu
c2VydGVkIHdpbGwgbm90IHZpb2xhdGUgdGhlIG1heExlbmd0aC4KLQotICAgIC8vIFdlIHVzZSBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnRleHQoKSBpbnN0ZWFkIG9mIElucHV0RWxlbWVu
dDo6dmFsdWUoKQotICAgIC8vIGJlY2F1c2UgdGhleSBjYW4gYmUgbWlzbWF0Y2hlZCBieSBzYW5p
dGl6ZVZhbHVlKCkgaW4KLSAgICAvLyBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnN1YnRy
ZWVIYXNDaGFuZ2VkKCkgaW4gc29tZSBjYXNlcy4KLSAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBu
dW1HcmFwaGVtZUNsdXN0ZXJzKHRvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKGVsZW1lbnQt
PnJlbmRlcmVyKCkpLT50ZXh0KCkpOwotCi0gICAgLy8gc2VsZWN0aW9uTGVuZ3RoIHJlcHJlc2Vu
dHMgdGhlIHNlbGVjdGlvbiBsZW5ndGggb2YgdGhpcyB0ZXh0IGZpZWxkIHRvIGJlCi0gICAgLy8g
cmVtb3ZlZCBieSB0aGlzIGluc2VydGlvbi4KLSAgICAvLyBJZiB0aGUgdGV4dCBmaWVsZCBoYXMg
bm8gZm9jdXMsIHdlIGRvbid0IG5lZWQgdG8gdGFrZSBhY2NvdW50IG9mIHRoZQotICAgIC8vIHNl
bGVjdGlvbiBsZW5ndGguIFRoZSBzZWxlY3Rpb24gaXMgdGhlIHNvdXJjZSBvZiB0ZXh0IGRyYWct
YW5kLWRyb3AgaW4KLSAgICAvLyB0aGF0IGNhc2UsIGFuZCBub3RoaW5nIGluIHRoZSB0ZXh0IGZp
ZWxkIHdpbGwgYmUgcmVtb3ZlZC4KLSAgICB1bnNpZ25lZCBzZWxlY3Rpb25MZW5ndGggPSBlbGVt
ZW50LT5mb2N1c2VkKCkgPyBudW1HcmFwaGVtZUNsdXN0ZXJzKHBsYWluVGV4dChlbGVtZW50LT5k
b2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKS5nZXQoKSkpIDogMDsKLSAgICBBU1NFUlQob2xkTGVuZ3RoID49IHNlbGVjdGlvbkxl
bmd0aCk7Ci0KLSAgICAvLyBTZWxlY3RlZCBjaGFyYWN0ZXJzIHdpbGwgYmUgcmVtb3ZlZCBieSB0
aGUgbmV4dCB0ZXh0IGV2ZW50LgotICAgIHVuc2lnbmVkIGJhc2VMZW5ndGggPSBvbGRMZW5ndGgg
LSBzZWxlY3Rpb25MZW5ndGg7Ci0gICAgdW5zaWduZWQgbWF4TGVuZ3RoID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGlucHV0RWxlbWVudC0+c3VwcG9ydHNNYXhMZW5ndGgoKSA/IGRhdGEubWF4TGVu
Z3RoKCkgOiBzX21heGltdW1MZW5ndGgpOyAvLyBtYXhMZW5ndGgoKSBjYW4gbmV2ZXIgYmUgbmVn
YXRpdmUuCi0gICAgdW5zaWduZWQgYXBwZW5kYWJsZUxlbmd0aCA9IG1heExlbmd0aCA+IGJhc2VM
ZW5ndGggPyBtYXhMZW5ndGggLSBiYXNlTGVuZ3RoIDogMDsKLQotICAgIC8vIFRydW5jYXRlIHRo
ZSBpbnNlcnRlZCB0ZXh0IHRvIGF2b2lkIHZpb2xhdGluZyB0aGUgbWF4TGVuZ3RoIGFuZCBvdGhl
ciBjb25zdHJhaW50cy4KLSAgICBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCogdGV4dEV2ZW50ID0g
c3RhdGljX2Nhc3Q8QmVmb3JlVGV4dEluc2VydGVkRXZlbnQqPihldmVudCk7Ci0jaWYgRU5BQkxF
KFdDU1MpCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGVsZW1lbnQtPmRvY3VtZW50KCktPmZy
YW1lKCktPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAg
IFN0cmluZyBjYW5kaWRhdGVTdHJpbmcgPSB0b1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShl
bGVtZW50LT5yZW5kZXJlcigpKS0+dGV4dCgpOwotICAgIGlmIChzZWxlY3Rpb25MZW5ndGgpCi0g
ICAgICAgIGNhbmRpZGF0ZVN0cmluZy5yZXBsYWNlKHJhbmdlLT5zdGFydE9mZnNldCgpLCByYW5n
ZS0+ZW5kT2Zmc2V0KCksIHRleHRFdmVudC0+dGV4dCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGNh
bmRpZGF0ZVN0cmluZy5pbnNlcnQodGV4dEV2ZW50LT50ZXh0KCksIHJhbmdlLT5zdGFydE9mZnNl
dCgpKTsKLSAgICBpZiAoIWlzQ29uZm9ybVRvSW5wdXRNYXNrKGlucHV0RWxlbWVudC0+ZGF0YSgp
LCBjYW5kaWRhdGVTdHJpbmcpKSB7Ci0gICAgICAgIHRleHRFdmVudC0+c2V0VGV4dCgiIik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLSAgICB0ZXh0RXZlbnQtPnNldFRleHQoc2Fu
aXRpemVVc2VySW5wdXRWYWx1ZShpbnB1dEVsZW1lbnQsIHRleHRFdmVudC0+dGV4dCgpLCBhcHBl
bmRhYmxlTGVuZ3RoKSk7Ci19Ci0KLXZvaWQgSW5wdXRFbGVtZW50OjpwYXJzZVNpemVBdHRyaWJ1
dGUoSW5wdXRFbGVtZW50RGF0YSYgZGF0YSwgRWxlbWVudCogZWxlbWVudCwgQXR0cmlidXRlKiBh
dHRyaWJ1dGUpCi17Ci0gICAgZGF0YS5zZXRTaXplKGF0dHJpYnV0ZS0+aXNOdWxsKCkgPyBJbnB1
dEVsZW1lbnQ6OnNfZGVmYXVsdFNpemUgOiBhdHRyaWJ1dGUtPnZhbHVlKCkudG9JbnQoKSk7Ci0K
LSAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGVsZW1lbnQtPnJlbmRlcmVyKCkpCi0g
ICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKLX0K
LQotdm9pZCBJbnB1dEVsZW1lbnQ6OnBhcnNlTWF4TGVuZ3RoQXR0cmlidXRlKElucHV0RWxlbWVu
dERhdGEmIGRhdGEsIElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50LCBFbGVtZW50KiBlbGVtZW50
LCBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSkKLXsKLSAgICBpbnQgbWF4TGVuZ3RoID0gYXR0cmlidXRl
LT5pc051bGwoKSA/IElucHV0RWxlbWVudDo6c19tYXhpbXVtTGVuZ3RoIDogYXR0cmlidXRlLT52
YWx1ZSgpLnRvSW50KCk7Ci0gICAgaWYgKG1heExlbmd0aCA8PSAwIHx8IG1heExlbmd0aCA+IElu
cHV0RWxlbWVudDo6c19tYXhpbXVtTGVuZ3RoKQotICAgICAgICBtYXhMZW5ndGggPSBJbnB1dEVs
ZW1lbnQ6OnNfbWF4aW11bUxlbmd0aDsKLQotICAgIGludCBvbGRNYXhMZW5ndGggPSBkYXRhLm1h
eExlbmd0aCgpOwotICAgIGRhdGEuc2V0TWF4TGVuZ3RoKG1heExlbmd0aCk7Ci0KLSAgICBpZiAo
b2xkTWF4TGVuZ3RoICE9IG1heExlbmd0aCkKLSAgICAgICAgdXBkYXRlVmFsdWVJZk5lZWRlZChk
YXRhLCBpbnB1dEVsZW1lbnQpOwotCi0gICAgZWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYygp
OwotfQotCi12b2lkIElucHV0RWxlbWVudDo6dXBkYXRlVmFsdWVJZk5lZWRlZChJbnB1dEVsZW1l
bnREYXRhJiBkYXRhLCBJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCkKLXsKLSAgICBTdHJpbmcg
b2xkVmFsdWUgPSBkYXRhLnZhbHVlKCk7Ci0gICAgU3RyaW5nIG5ld1ZhbHVlID0gaW5wdXRFbGVt
ZW50LT5zYW5pdGl6ZVZhbHVlKG9sZFZhbHVlKTsKLSAgICBpZiAobmV3VmFsdWUgIT0gb2xkVmFs
dWUpCi0gICAgICAgIGlucHV0RWxlbWVudC0+c2V0VmFsdWUobmV3VmFsdWUpOwotfQotCi12b2lk
IElucHV0RWxlbWVudDo6bm90aWZ5Rm9ybVN0YXRlQ2hhbmdlZChFbGVtZW50KiBlbGVtZW50KQot
ewotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGVsZW1lbnQtPmRvY3VtZW50KCk7Ci0gICAgRnJh
bWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKQotICAgICAgICBw
YWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPmZvcm1TdGF0ZURpZENoYW5nZShlbGVtZW50KTsKLX0K
LQotLy8gSW5wdXRFbGVtZW50RGF0YQotSW5wdXRFbGVtZW50RGF0YTo6SW5wdXRFbGVtZW50RGF0
YSgpCi0gICAgOiBtX3NpemUoSW5wdXRFbGVtZW50OjpzX2RlZmF1bHRTaXplKQotICAgICwgbV9t
YXhMZW5ndGgoSW5wdXRFbGVtZW50OjpzX21heGltdW1MZW5ndGgpCi0gICAgLCBtX2NhY2hlZFNl
bGVjdGlvblN0YXJ0KC0xKQotICAgICwgbV9jYWNoZWRTZWxlY3Rpb25FbmQoLTEpCi0jaWYgRU5B
QkxFKFdDU1MpCi0gICAgLCBtX2lucHV0Rm9ybWF0TWFzaygiKm0iKQotICAgICwgbV9tYXhJbnB1
dENoYXJzQWxsb3dlZChJbnB1dEVsZW1lbnQ6OnNfbWF4aW11bUxlbmd0aCkKLSNlbmRpZgotewot
fQotCi1JbnB1dEVsZW1lbnREYXRhOjp+SW5wdXRFbGVtZW50RGF0YSgpCi17Ci19Ci0KLWNvbnN0
IEF0b21pY1N0cmluZyYgSW5wdXRFbGVtZW50RGF0YTo6bmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fbmFtZS5pc051bGwoKSA/IGVtcHR5QXRvbSA6IG1fbmFtZTsKLX0KLQotI2lmIEVOQUJM
RShXQ1NTKQotc3RhdGljIGlubGluZSBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1hdENvZGVzKCkK
LXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgY29kZXMsICgiQWFOblh4
TW0iKSk7Ci0gICAgcmV0dXJuIGNvZGVzOwotfQotCi1zdGF0aWMgdW5zaWduZWQgY3Vyc29yUG9z
aXRpb25Ub01hc2tJbmRleChjb25zdCBTdHJpbmcmIGlucHV0Rm9ybWF0TWFzaywgdW5zaWduZWQg
Y3Vyc29yUG9zaXRpb24pCi17Ci0gICAgVUNoYXIgbWFzazsKLSAgICBpbnQgaW5kZXggPSAtMTsK
LSAgICBkbyB7Ci0gICAgICAgIG1hc2sgPSBpbnB1dEZvcm1hdE1hc2tbKytpbmRleF07Ci0gICAg
ICAgIGlmIChtYXNrID09ICdcXCcpCi0gICAgICAgICAgICArK2luZGV4OwotICAgICAgICBlbHNl
IGlmIChtYXNrID09ICcqJyB8fCAoaXNBU0NJSURpZ2l0KG1hc2spICYmIG1hc2sgIT0gJzAnKSkg
ewotICAgICAgICAgICAgaW5kZXggPSBpbnB1dEZvcm1hdE1hc2subGVuZ3RoKCkgLSAxOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9IHdoaWxlIChjdXJzb3JQb3NpdGlvbi0t
KTsKLQotICAgIHJldHVybiBpbmRleDsKLX0KLQotYm9vbCBJbnB1dEVsZW1lbnQ6OmlzQ29uZm9y
bVRvSW5wdXRNYXNrKGNvbnN0IElucHV0RWxlbWVudERhdGEmIGRhdGEsIGNvbnN0IFN0cmluZyYg
aW5wdXRDaGFycykKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5wdXRDaGFycy5s
ZW5ndGgoKTsgKytpKQotICAgICAgICBpZiAoIWlzQ29uZm9ybVRvSW5wdXRNYXNrKGRhdGEsIGlu
cHV0Q2hhcnNbaV0sIGkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIElucHV0RWxlbWVudDo6aXNDb25mb3JtVG9JbnB1dE1hc2soY29uc3Qg
SW5wdXRFbGVtZW50RGF0YSYgZGF0YSwgVUNoYXIgaW5DaGFyLCB1bnNpZ25lZCBjdXJzb3JQb3Np
dGlvbikKLXsKLSAgICBTdHJpbmcgaW5wdXRGb3JtYXRNYXNrID0gZGF0YS5pbnB1dEZvcm1hdE1h
c2soKTsKLQotICAgIGlmIChpbnB1dEZvcm1hdE1hc2suaXNFbXB0eSgpIHx8IGlucHV0Rm9ybWF0
TWFzayA9PSAiKk0iIHx8IGlucHV0Rm9ybWF0TWFzayA9PSAiKm0iKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLQotICAgIGlmIChjdXJzb3JQb3NpdGlvbiA+PSBkYXRhLm1heElucHV0Q2hhcnNBbGxv
d2VkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHVuc2lnbmVkIG1hc2tJbmRleCA9
IGN1cnNvclBvc2l0aW9uVG9NYXNrSW5kZXgoaW5wdXRGb3JtYXRNYXNrLCBjdXJzb3JQb3NpdGlv
bik7Ci0gICAgYm9vbCBvayA9IHRydWU7Ci0gICAgVUNoYXIgbWFzayA9IGlucHV0Rm9ybWF0TWFz
a1ttYXNrSW5kZXhdOwotICAgIC8vIE1hdGNoIHRoZSBpbnB1dGVkIGNoYXJhY3RlciB3aXRoIGlu
cHV0IG1hc2sKLSAgICBzd2l0Y2ggKG1hc2spIHsKLSAgICBjYXNlICdBJzoKLSAgICAgICAgb2sg
PSAhaXNBU0NJSURpZ2l0KGluQ2hhcikgJiYgIWlzQVNDSUlMb3dlcihpbkNoYXIpICYmIGlzQVND
SUlQcmludGFibGUoaW5DaGFyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAnYSc6Ci0gICAg
ICAgIG9rID0gIWlzQVNDSUlEaWdpdChpbkNoYXIpICYmICFpc0FTQ0lJVXBwZXIoaW5DaGFyKSAm
JiBpc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgJ04n
OgotICAgICAgICBvayA9IGlzQVNDSUlEaWdpdChpbkNoYXIpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlICduJzoKLSAgICAgICAgb2sgPSAhaXNBU0NJSUFscGhhKGluQ2hhcikgJiYgaXNBU0NJ
SVByaW50YWJsZShpbkNoYXIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlICdYJzoKLSAgICAg
ICAgb2sgPSAhaXNBU0NJSUxvd2VyKGluQ2hhcikgJiYgaXNBU0NJSVByaW50YWJsZShpbkNoYXIp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlICd4JzoKLSAgICAgICAgb2sgPSAhaXNBU0NJSVVw
cGVyKGluQ2hhcikgJiYgaXNBU0NJSVByaW50YWJsZShpbkNoYXIpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlICdNJzoKLSAgICBjYXNlICdtJzoKLSAgICAgICAgb2sgPSBpc0FTQ0lJUHJpbnRh
YmxlKGluQ2hhcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIG9rID0g
KG1hc2sgPT0gaW5DaGFyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIG9r
OwotfQotCi1TdHJpbmcgSW5wdXRFbGVtZW50Ojp2YWxpZGF0ZUlucHV0TWFzayhJbnB1dEVsZW1l
bnREYXRhJiBkYXRhLCBTdHJpbmcmIGlucHV0TWFzaykKLXsKLSAgICBpbnB1dE1hc2sucmVwbGFj
ZSgiXFxcXCIsICJcXCIpOwotCi0gICAgYm9vbCBpc1ZhbGlkID0gdHJ1ZTsKLSAgICBib29sIGhh
c1dpbGRjYXJkID0gZmFsc2U7Ci0gICAgdW5zaWduZWQgZXNjYXBlQ2hhckNvdW50ID0gMDsKLSAg
ICB1bnNpZ25lZCBtYXNrTGVuZ3RoID0gaW5wdXRNYXNrLmxlbmd0aCgpOwotICAgIFVDaGFyIGZv
cm1hdENvZGU7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1hc2tMZW5ndGg7ICsraSkg
ewotICAgICAgICBmb3JtYXRDb2RlID0gaW5wdXRNYXNrW2ldOwotICAgICAgICBpZiAoZm9ybWF0
Q29kZXMoKS5maW5kKGZvcm1hdENvZGUpID09IC0xKSB7Ci0gICAgICAgICAgICBpZiAoZm9ybWF0
Q29kZSA9PSAnKicgfHwgKGlzQVNDSUlEaWdpdChmb3JtYXRDb2RlKSAmJiBmb3JtYXRDb2RlICE9
ICcwJykpIHsKLSAgICAgICAgICAgICAgICAvLyBWYWxpZGF0ZSBjb2RlcyB3aGljaCBlbmRzIHdp
dGggJypmJyBvciAnbmYnCi0gICAgICAgICAgICAgICAgZm9ybWF0Q29kZSA9IGlucHV0TWFza1sr
K2ldOwotICAgICAgICAgICAgICAgIGlmICgoaSArIDEgIT0gbWFza0xlbmd0aCkgfHwgZm9ybWF0
Q29kZXMoKS5maW5kKGZvcm1hdENvZGUpID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlz
VmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGhhc1dpbGRjYXJkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0g
ZWxzZSBpZiAoZm9ybWF0Q29kZSA9PSAnXFwnKSB7Ci0gICAgICAgICAgICAgICAgLy8gc2tpcCBv
dmVyIHRoZSBuZXh0IG1hc2sgY2hhcmFjdGVyCi0gICAgICAgICAgICAgICAgKytpOwotICAgICAg
ICAgICAgICAgICsrZXNjYXBlQ2hhckNvdW50OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWlzVmFsaWQpCi0gICAgICAg
IHJldHVybiBTdHJpbmcoKTsKLSAgICAvLyBjYWxjdWxhdGUgdGhlIG51bWJlciBvZiBjaGFyYWN0
ZXJzIGFsbG93ZWQgdG8gYmUgZW50ZXJlZCBieSBpbnB1dCBtYXNrCi0gICAgdW5zaWduZWQgYWxs
b3dlZExlbmd0aCA9IG1hc2tMZW5ndGg7Ci0gICAgaWYgKGVzY2FwZUNoYXJDb3VudCkKLSAgICAg
ICAgYWxsb3dlZExlbmd0aCAtPSBlc2NhcGVDaGFyQ291bnQ7Ci0KLSAgICBpZiAoaGFzV2lsZGNh
cmQpIHsKLSAgICAgICAgZm9ybWF0Q29kZSA9IGlucHV0TWFza1ttYXNrTGVuZ3RoIC0gMl07Ci0g
ICAgICAgIGlmIChmb3JtYXRDb2RlID09ICcqJykKLSAgICAgICAgICAgIGFsbG93ZWRMZW5ndGgg
PSBkYXRhLm1heElucHV0Q2hhcnNBbGxvd2VkKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgdW5zaWduZWQgbGVmdExlbiA9IFN0cmluZygmZm9ybWF0Q29kZSkudG9JbnQoKTsKLSAgICAg
ICAgICAgIGFsbG93ZWRMZW5ndGggPSBsZWZ0TGVuICsgYWxsb3dlZExlbmd0aCAtIDI7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoYWxsb3dlZExlbmd0aCA8IGRhdGEubWF4SW5wdXRDaGFy
c0FsbG93ZWQoKSkKLSAgICAgICAgZGF0YS5zZXRNYXhJbnB1dENoYXJzQWxsb3dlZChhbGxvd2Vk
TGVuZ3RoKTsKLQotICAgIHJldHVybiBpbnB1dE1hc2s7Ci19Ci0KLSNlbmRpZgotCi19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vSW5wdXRFbGVtZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhNGU5
NWQxOWZiNjQzODY0YzY0NjEyYmUxNDdmZGQxMjk3OGFmNDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0lucHV0RWxlbWVu
dC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cu
dG9yY2htb2JpbGUuY29tLykKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgSW5wdXRFbGVtZW50X2gKLSNkZWZpbmUgSW5w
dXRFbGVtZW50X2gKLQotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSA8d3Rm
L3RleHQvQXRvbWljU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQXR0
cmlidXRlOwotY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBFbGVtZW50OwotY2xhc3MgRXZlbnQ7Ci1j
bGFzcyBJbnB1dEVsZW1lbnREYXRhOwotCi1jbGFzcyBJbnB1dEVsZW1lbnQgewotcHVibGljOgot
ICAgIHZpcnR1YWwgfklucHV0RWxlbWVudCgpIHsgfQotCi0gICAgdmlydHVhbCBib29sIGlzQXV0
b2ZpbGxlZCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNDaGVja2VkKCkgY29uc3Qg
PSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc0luZGV0ZXJtaW5hdGUoKSBjb25zdCA9IDA7Ci0gICAg
dmlydHVhbCBib29sIGlzSW5wdXRUeXBlSGlkZGVuKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwg
Ym9vbCBpc1Bhc3N3b3JkRmllbGQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzU2Vh
cmNoRmllbGQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzVGV4dEZpZWxkKCkgY29u
c3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc1JhZGlvQnV0dG9uKCkgY29uc3QgPSAwOwotICAg
IHZpcnR1YWwgYm9vbCBpc0NoZWNrYm94KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBp
c1JhbmdlQ29udHJvbCgpIGNvbnN0ID0gMDsKLSAgICAKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9y
dHNNYXhMZW5ndGgoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzU3RlcHBhYmxlKCkg
Y29uc3QgPSAwOwotI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCi0gICAgdmlydHVhbCBib29sIGlz
U3BlZWNoRW5hYmxlZCgpIGNvbnN0ID0gMDsKLSNlbmRpZiAgICAKLQotICAgIHZpcnR1YWwgYm9v
bCBzZWFyY2hFdmVudHNTaG91bGRCZURpc3BhdGNoZWQoKSBjb25zdCA9IDA7Ci0KLSAgICB2aXJ0
dWFsIGludCBzaXplKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgY29uc3QgU3RyaW5nJiBzdWdn
ZXN0ZWRWYWx1ZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiwgYm9vbCBzZW5k
Q2hhbmdlRXZlbnQgPSBmYWxzZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUZvclVz
ZXIoY29uc3QgU3RyaW5nJikgPSAwOwotICAgIC8vIFRoZSB2YWx1ZSB3aGljaCBpcyBkcmF3biBi
eSBhIHJlbmRlcmVyLgotICAgIHZpcnR1YWwgU3RyaW5nIHZpc2libGVWYWx1ZSgpIGNvbnN0ID0g
MDsKLSAgICB2aXJ0dWFsIFN0cmluZyBjb252ZXJ0RnJvbVZpc2libGVWYWx1ZShjb25zdCBTdHJp
bmcmKSBjb25zdCA9IDA7Ci0KLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHNwZWNpZmllZCBz
dHJpbmcgY2FuIGJlIHNldCBhcyB0aGUgdmFsdWUgb2YgSW5wdXRFbGVtZW50LgotICAgIHZpcnR1
YWwgYm9vbCBpc0FjY2VwdGFibGVWYWx1ZShjb25zdCBTdHJpbmcmKSBjb25zdCA9IDA7Ci0gICAg
dmlydHVhbCBTdHJpbmcgc2FuaXRpemVWYWx1ZShjb25zdCBTdHJpbmcmKSBjb25zdCA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldFZhbHVlRnJvbVJlbmRlcmVyKGNvbnN0IFN0cmluZyYpID0gMDsK
LQotICAgIHZpcnR1YWwgdm9pZCBjYWNoZVNlbGVjdGlvbihpbnQgc3RhcnQsIGludCBlbmQpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0KCkgPSAwOwotICAKLSNpZiBFTkFCTEUoV0NTUykK
LSAgICB2aXJ0dWFsIElucHV0RWxlbWVudERhdGEgZGF0YSgpIGNvbnN0ID0gMDsgCi0jZW5kaWYK
LQotICAgIHN0YXRpYyBjb25zdCBpbnQgc19tYXhpbXVtTGVuZ3RoOwotICAgIHN0YXRpYyBjb25z
dCBpbnQgc19kZWZhdWx0U2l6ZTsKLQotICAgIC8vIFJlcGxhY2VzIENScyBhbmQgTEZzLCBzaHJp
bmtzIHRoZSB2YWx1ZSBmb3Igc19tYXhpbXVtTGVuZ3RoLgotICAgIC8vIFRoaXMgc2hvdWxkIGJl
IGFwcGxpZWQgdG8gdmFsdWVzIGZyb20gdGhlIEhUTUwgdmFsdWUgYXR0cmlidXRlIGFuZCB0aGUg
RE9NIHZhbHVlIHByb3BlcnR5LgotICAgIC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxl
ZCBvbmx5IGJ5IHNhbml0aXplVmFsdWUoKSBpbXBsZW1lbnRhdGlvbnMuCi0gICAgLy8gUHVibGlj
IHNvIGl0IGNhbiBiZSBjYWxsZWQgYnkgSW5wdXRUeXBlLgotICAgIHN0YXRpYyBTdHJpbmcgc2Fu
aXRpemVWYWx1ZUZvclRleHRGaWVsZChjb25zdCBJbnB1dEVsZW1lbnQqLCBjb25zdCBTdHJpbmcm
KTsKLQotcHJvdGVjdGVkOgotICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoRm9jdXNFdmVudChJbnB1
dEVsZW1lbnQqLCBFbGVtZW50Kik7Ci0gICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hCbHVyRXZlbnQo
SW5wdXRFbGVtZW50KiwgRWxlbWVudCopOwotICAgIHN0YXRpYyB2b2lkIHVwZGF0ZUZvY3VzQXBw
ZWFyYW5jZShJbnB1dEVsZW1lbnREYXRhJiwgSW5wdXRFbGVtZW50KiwgRWxlbWVudCosIGJvb2wg
cmVzdG9yZVByZXZpb3VzU2VsZWN0aW9uKTsKLSAgICBzdGF0aWMgdm9pZCB1cGRhdGVTZWxlY3Rp
b25SYW5nZShJbnB1dEVsZW1lbnQqLCBFbGVtZW50KiwgaW50IHN0YXJ0LCBpbnQgZW5kKTsKLSAg
ICBzdGF0aWMgdm9pZCBhYm91dFRvVW5sb2FkKElucHV0RWxlbWVudCosIEVsZW1lbnQqKTsKLSAg
ICBzdGF0aWMgdm9pZCBzZXRWYWx1ZUZyb21SZW5kZXJlcihJbnB1dEVsZW1lbnREYXRhJiwgSW5w
dXRFbGVtZW50KiwgRWxlbWVudCosIGNvbnN0IFN0cmluZyYpOwotICAgIC8vIFJlcGxhY2VzIENS
cyBhbmQgTEZzLCBzaHJpbmtzIHRoZSB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBtYXhpbXVtIGxl
bmd0aC4KLSAgICAvLyBUaGlzIHNob3VsZCBiZSBhcHBsaWVkIHRvIHZhbHVlcyBzcGVjaWZpZWQg
YnkgdXNlcnMuCi0gICAgLy8gVGhlIGlucHV0IHN0cmluZyBtYXkgYmUgYSBmcmFnbWVudCBvZiB0
aGUgd2hvbGUgdmFsdWUuCi0gICAgc3RhdGljIFN0cmluZyBzYW5pdGl6ZVVzZXJJbnB1dFZhbHVl
KGNvbnN0IElucHV0RWxlbWVudCosIGNvbnN0IFN0cmluZyYsIGludCk7Ci0gICAgc3RhdGljIHZv
aWQgaGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoSW5wdXRFbGVtZW50RGF0YSYsIElucHV0
RWxlbWVudCosIEVsZW1lbnQqLCBFdmVudCopOwotICAgIHN0YXRpYyB2b2lkIHBhcnNlU2l6ZUF0
dHJpYnV0ZShJbnB1dEVsZW1lbnREYXRhJiwgRWxlbWVudCosIEF0dHJpYnV0ZSopOwotICAgIHN0
YXRpYyB2b2lkIHBhcnNlTWF4TGVuZ3RoQXR0cmlidXRlKElucHV0RWxlbWVudERhdGEmLCBJbnB1
dEVsZW1lbnQqLCBFbGVtZW50KiwgQXR0cmlidXRlKik7Ci0gICAgc3RhdGljIHZvaWQgdXBkYXRl
VmFsdWVJZk5lZWRlZChJbnB1dEVsZW1lbnREYXRhJiwgSW5wdXRFbGVtZW50Kik7Ci0gICAgc3Rh
dGljIHZvaWQgbm90aWZ5Rm9ybVN0YXRlQ2hhbmdlZChFbGVtZW50Kik7Ci0jaWYgRU5BQkxFKFdD
U1MpCi0gICAgc3RhdGljIGJvb2wgaXNDb25mb3JtVG9JbnB1dE1hc2soY29uc3QgSW5wdXRFbGVt
ZW50RGF0YSYsIGNvbnN0IFN0cmluZyYpOwotICAgIHN0YXRpYyBib29sIGlzQ29uZm9ybVRvSW5w
dXRNYXNrKGNvbnN0IElucHV0RWxlbWVudERhdGEmLCBVQ2hhciwgdW5zaWduZWQpOwotICAgIHN0
YXRpYyBTdHJpbmcgdmFsaWRhdGVJbnB1dE1hc2soSW5wdXRFbGVtZW50RGF0YSYsIFN0cmluZyYp
OwotI2VuZGlmCi19OwotCi0vLyBIVE1MSW5wdXRFbGVtZW50IGhvbGQgdGhpcyBzdHJ1Y3QgYXMg
bWVtYmVyIHZhcmlhYmxlCi0vLyBhbmQgcGFzcyBpdCB0byB0aGUgc3RhdGljIGhlbHBlciBmdW5j
dGlvbnMgaW4gSW5wdXRFbGVtZW50Ci1jbGFzcyBJbnB1dEVsZW1lbnREYXRhIHsKLXB1YmxpYzoK
LSAgICBJbnB1dEVsZW1lbnREYXRhKCk7Ci0gICAgfklucHV0RWxlbWVudERhdGEoKTsKLQotICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0TmFtZShjb25z
dCBBdG9taWNTdHJpbmcmIHZhbHVlKSB7IG1fbmFtZSA9IHZhbHVlOyB9Ci0KLSAgICAvLyBUaGUg
bnVsbCBTdHJpbmcgcmVwcmVzZW50cyAidXNlIHRoZSBkZWZhdWx0IHZhbHVlLCIgYW5kIHRoZSBl
bXB0eSBTdHJpbmcKLSAgICAvLyByZXByZXNlbnRzIHRoZSBlbXB0eSB2YWx1ZS4KLSAgICBTdHJp
bmcgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Ci0gICAgdm9pZCBzZXRWYWx1ZShj
b25zdCBTdHJpbmcmIHZhbHVlKSB7IG1fdmFsdWUgPSB2YWx1ZTsgfQotCi0gICAgY29uc3QgU3Ry
aW5nJiBzdWdnZXN0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VnZ2VzdGVkVmFsdWU7IH0K
LSAgICB2b2lkIHNldFN1Z2dlc3RlZFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpIHsgbV9zdWdn
ZXN0ZWRWYWx1ZSA9IHZhbHVlOyB9Ci0KLSAgICBpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2l6ZTsgfQotICAgIHZvaWQgc2V0U2l6ZShpbnQgdmFsdWUpIHsgbV9zaXplID0gdmFsdWU7IH0K
LQotICAgIGludCBtYXhMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX21heExlbmd0aDsgfQotICAg
IHZvaWQgc2V0TWF4TGVuZ3RoKGludCB2YWx1ZSkgeyBtX21heExlbmd0aCA9IHZhbHVlOyB9Ci0K
LSAgICBpbnQgY2FjaGVkU2VsZWN0aW9uU3RhcnQoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZFNl
bGVjdGlvblN0YXJ0OyB9Ci0gICAgdm9pZCBzZXRDYWNoZWRTZWxlY3Rpb25TdGFydChpbnQgdmFs
dWUpIHsgbV9jYWNoZWRTZWxlY3Rpb25TdGFydCA9IHZhbHVlOyB9Ci0KLSAgICBpbnQgY2FjaGVk
U2VsZWN0aW9uRW5kKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRTZWxlY3Rpb25FbmQ7IH0KLSAg
ICB2b2lkIHNldENhY2hlZFNlbGVjdGlvbkVuZChpbnQgdmFsdWUpIHsgbV9jYWNoZWRTZWxlY3Rp
b25FbmQgPSB2YWx1ZTsgfQotCi0jaWYgRU5BQkxFKFdDU1MpCi0gICAgU3RyaW5nIGlucHV0Rm9y
bWF0TWFzaygpIGNvbnN0IHsgcmV0dXJuIG1faW5wdXRGb3JtYXRNYXNrOyB9Ci0gICAgdm9pZCBz
ZXRJbnB1dEZvcm1hdE1hc2soY29uc3QgU3RyaW5nJiBtYXNrKSB7IG1faW5wdXRGb3JtYXRNYXNr
ID0gbWFzazsgfQotIAotICAgIHVuc2lnbmVkIG1heElucHV0Q2hhcnNBbGxvd2VkKCkgY29uc3Qg
eyByZXR1cm4gbV9tYXhJbnB1dENoYXJzQWxsb3dlZDsgfQotICAgIHZvaWQgc2V0TWF4SW5wdXRD
aGFyc0FsbG93ZWQodW5zaWduZWQgbWF4TGVuZ3RoKSB7IG1fbWF4SW5wdXRDaGFyc0FsbG93ZWQg
PSBtYXhMZW5ndGg7IH0KLSAgCi0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBBdG9taWNTdHJpbmcg
bV9uYW1lOwotICAgIFN0cmluZyBtX3ZhbHVlOwotICAgIFN0cmluZyBtX3N1Z2dlc3RlZFZhbHVl
OwotICAgIGludCBtX3NpemU7Ci0gICAgaW50IG1fbWF4TGVuZ3RoOwotICAgIGludCBtX2NhY2hl
ZFNlbGVjdGlvblN0YXJ0OwotICAgIGludCBtX2NhY2hlZFNlbGVjdGlvbkVuZDsKLSNpZiBFTkFC
TEUoV0NTUykKLSAgICBTdHJpbmcgbV9pbnB1dEZvcm1hdE1hc2s7Ci0gICAgdW5zaWduZWQgbV9t
YXhJbnB1dENoYXJzQWxsb3dlZDsKLSNlbmRpZgotfTsKLQotfQotCi0jZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
LmNwcAppbmRleCAwZmM0MDBjNGMyNWE4Y2I3NTZmYjhiZjk1NDllYTY3YTkwMzZlODgzLi40NDI4
ZmZhYzQzYjBhYmFjZDRiNTFkOWM1MTJmMzkyYTI3MTUwOTU0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBA
IC01NTksNyArNTU5LDcgQEAgdm9pZCBOb2RlOjpzZXRTaGFkb3dIb3N0KEVsZW1lbnQqIGhvc3Qp
CiAgICAgc2V0UGFyZW50KGhvc3QpOwogfQogCi1JbnB1dEVsZW1lbnQqIE5vZGU6OnRvSW5wdXRF
bGVtZW50KCkKK0hUTUxJbnB1dEVsZW1lbnQqIE5vZGU6OnRvSW5wdXRFbGVtZW50KCkKIHsKICAg
ICAvLyBJZiBvbmUgb2YgdGhlIGJlbG93IEFTU0VSVHMgdHJpZ2dlciwgeW91IGFyZSBjYWxsaW5n
IHRoaXMgZnVuY3Rpb24KICAgICAvLyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGZyb20gYSBjb25z
dHJ1Y3RvciBvciBkZXN0cnVjdG9yIG9mIHRoaXMgb2JqZWN0LgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL05vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKaW5kZXggMDU3
MWRmYWM1OTRkNDBkZGQ1MTFhYzFjNjlmYWY0ZWQzMzFlMWY5ZS4uYzI4OGQxZjlhYjE2ZjgzNGUw
ZmU2NDlkODZhYTM3ZTAyN2I2M2MxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCkBAIC01NCw3ICs1NCw3IEBAIGNs
YXNzIEV2ZW50Q29udGV4dDsKIGNsYXNzIEV2ZW50TGlzdGVuZXI7CiBjbGFzcyBGbG9hdFBvaW50
OwogY2xhc3MgRnJhbWU7Ci1jbGFzcyBJbnB1dEVsZW1lbnQ7CitjbGFzcyBIVE1MSW5wdXRFbGVt
ZW50OwogY2xhc3MgSW50UmVjdDsKIGNsYXNzIEtleWJvYXJkRXZlbnQ7CiBjbGFzcyBOU1Jlc29s
dmVyOwpAQCAtNTI0LDcgKzUyNCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgTm9kZSogdG9O
b2RlKCkgeyByZXR1cm4gdGhpczsgfQogCi0gICAgdmlydHVhbCBJbnB1dEVsZW1lbnQqIHRvSW5w
dXRFbGVtZW50KCk7CisgICAgdmlydHVhbCBIVE1MSW5wdXRFbGVtZW50KiB0b0lucHV0RWxlbWVu
dCgpOwogCiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TElucHV0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQu
Y3BwCmluZGV4IGY5Y2NhZjkwNGM3NzMwYzc5ZTg5NmE3OWM1OWJlNjQzMjI0MDdlYzIuLjYyMjNj
OGE5ZTc5NmIyMzM0YzRjNmM4N2E0OTBhZjZhNWQ4MjAwOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MSW5wdXRFbGVtZW50LmNwcApAQCAtNiw2ICs2LDcgQEAKICAqICAgICAgICAgICAoQykg
MjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5jb20pCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgU2FtdWVsIFdlaW5pZyAoc2FtQHdlYmtpdC5vcmcpCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3Jj
aG1vYmlsZS5jb20vKQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMCwxMSArMzEsMTQgQEAKICNp
bmNsdWRlICJBWE9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5jbHVk
ZSAiQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuaCIKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNs
dWRlICJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRXhj
ZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZpbGVMaXN0LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIK
ICNpbmNsdWRlICJIVE1MQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkhUTUxEYXRhTGlzdEVsZW1l
bnQuaCIKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKQEAgLTQ1LDYgKzQ5LDcgQEAKICNp
bmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgog
I2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGxh
dGZvcm1Nb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKQEAgLTYwLDEwICs2NSwyNCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKKy8vIEZJWE1FOiBB
Y2NvcmRpbmcgdG8gSFRNTDQsIHRoZSBsZW5ndGggYXR0cmlidXRlJ3MgdmFsdWUgY2FuIGJlIGFy
Yml0cmFyaWx5CisvLyBsYXJnZS4gSG93ZXZlciwgZHVlIHRvIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDUzNiB0aGluZ3MKKy8vIGdldCByYXRoZXIgc2x1Z2dpc2gg
d2hlbiBhIHRleHQgZmllbGQgaGFzIGEgbGFyZ2VyIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRoYW4K
Ky8vIHRoaXMsIGV2ZW4gd2hlbiBqdXN0IGNsaWNraW5nIGluIHRoZSB0ZXh0IGZpZWxkLgorY29u
c3QgaW50IEhUTUxJbnB1dEVsZW1lbnQ6Om1heGltdW1MZW5ndGggPSA1MjQyODg7Citjb25zdCBp
bnQgZGVmYXVsdFNpemUgPSAyMDsKIGNvbnN0IGludCBtYXhTYXZlZFJlc3VsdHMgPSAyNTY7CiAK
IEhUTUxJbnB1dEVsZW1lbnQ6OkhUTUxJbnB1dEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0sIGJvb2wg
Y3JlYXRlZEJ5UGFyc2VyKQogICAgIDogSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQodGFnTmFt
ZSwgZG9jdW1lbnQsIGZvcm0pCisgICAgLCBtX3NpemUoZGVmYXVsdFNpemUpCisgICAgLCBtX21h
eExlbmd0aChtYXhpbXVtTGVuZ3RoKQorICAgICwgbV9jYWNoZWRTZWxlY3Rpb25TdGFydCgtMSkK
KyAgICAsIG1fY2FjaGVkU2VsZWN0aW9uRW5kKC0xKQorI2lmIEVOQUJMRShXQ1NTKQorICAgICwg
bV9pbnB1dEZvcm1hdE1hc2soIiptIikKKyAgICAsIG1fbWF4SW5wdXRDaGFyc0FsbG93ZWQobWF4
aW11bUxlbmd0aCkKKyNlbmRpZgogICAgICwgbV9tYXhSZXN1bHRzKC0xKQogICAgICwgbV9pc0No
ZWNrZWQoZmFsc2UpCiAgICAgLCBtX3JlZmxlY3RzQ2hlY2tlZEF0dHJpYnV0ZSh0cnVlKQpAQCAt
OTgsNyArMTE3LDcgQEAgSFRNTElucHV0RWxlbWVudDo6fkhUTUxJbnB1dEVsZW1lbnQoKQogCiBj
b25zdCBBdG9taWNTdHJpbmcmIEhUTUxJbnB1dEVsZW1lbnQ6OmZvcm1Db250cm9sTmFtZSgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG1fZGF0YS5uYW1lKCk7CisgICAgcmV0dXJuIG1fbmFtZS5pc051
bGwoKSA/IGVtcHR5QXRvbSA6IG1fbmFtZTsKIH0KIAogYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojph
dXRvQ29tcGxldGUoKSBjb25zdApAQCAtMjAwLDcgKzIxOSw3IEBAIGJvb2wgSFRNTElucHV0RWxl
bWVudDo6dG9vTG9uZyhjb25zdCBTdHJpbmcmIHZhbHVlLCBOZWVkc1RvQ2hlY2tEaXJ0eUZsYWcg
Y2hlY2spCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoY2hlY2sgPT0gQ2hlY2tEaXJ0
eUZsYWcpIHsKICAgICAgICAgLy8gUmV0dXJuIGZhbHNlIGZvciB0aGUgZGVmYXVsdCB2YWx1ZSBl
dmVuIGlmIGl0IGlzIGxvbmdlciB0aGFuIG1heExlbmd0aC4KLSAgICAgICAgYm9vbCB1c2VyRWRp
dGVkID0gIW1fZGF0YS52YWx1ZSgpLmlzTnVsbCgpOworICAgICAgICBib29sIHVzZXJFZGl0ZWQg
PSAhbV92YWx1ZS5pc051bGwoKTsKICAgICAgICAgaWYgKCF1c2VyRWRpdGVkKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTM5MywxNSArNDEyLDI5IEBAIGJvb2wgSFRNTElu
cHV0RWxlbWVudDo6aXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0CiAKIHZvaWQgSFRNTElucHV0RWxl
bWVudDo6dXBkYXRlRm9jdXNBcHBlYXJhbmNlKGJvb2wgcmVzdG9yZVByZXZpb3VzU2VsZWN0aW9u
KQogewotICAgIGlmIChpc1RleHRGaWVsZCgpKQotICAgICAgICBJbnB1dEVsZW1lbnQ6OnVwZGF0
ZUZvY3VzQXBwZWFyYW5jZShtX2RhdGEsIHRoaXMsIHRoaXMsIHJlc3RvcmVQcmV2aW91c1NlbGVj
dGlvbik7Ci0gICAgZWxzZQorICAgIGlmIChpc1RleHRGaWVsZCgpKSB7CisgICAgICAgIGlmICgh
cmVzdG9yZVByZXZpb3VzU2VsZWN0aW9uIHx8IG1fY2FjaGVkU2VsZWN0aW9uU3RhcnQgPT0gLTEp
CisgICAgICAgICAgICBzZWxlY3QoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBS
ZXN0b3JlIHRoZSBjYWNoZWQgc2VsZWN0aW9uLgorICAgICAgICAgICAgV2ViQ29yZTo6c2V0U2Vs
ZWN0aW9uUmFuZ2UodGhpcywgbV9jYWNoZWRTZWxlY3Rpb25TdGFydCwgbV9jYWNoZWRTZWxlY3Rp
b25FbmQpOworICAgICAgICB9CisgICAgICAgIGlmIChkb2N1bWVudCgpLT5mcmFtZSgpKQorICAg
ICAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPnJldmVhbFNlbGVjdGlv
bigpOworICAgIH0gZWxzZQogICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRl
Ojp1cGRhdGVGb2N1c0FwcGVhcmFuY2UocmVzdG9yZVByZXZpb3VzU2VsZWN0aW9uKTsKIH0KIAog
dm9pZCBIVE1MSW5wdXRFbGVtZW50OjphYm91dFRvVW5sb2FkKCkKIHsKLSAgICBJbnB1dEVsZW1l
bnQ6OmFib3V0VG9VbmxvYWQodGhpcywgdGhpcyk7CisgICAgaWYgKCFpc1RleHRGaWVsZCgpIHx8
ICFmb2N1c2VkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEZyYW1lKiBmcmFtZSA9IGRvY3Vt
ZW50KCktPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
ZnJhbWUtPmVkaXRvcigpLT50ZXh0RmllbGREaWRFbmRFZGl0aW5nKHRoaXMpOwogfQogCiBib29s
IEhUTUxJbnB1dEVsZW1lbnQ6OnNob3VsZFVzZUlucHV0TWV0aG9kKCkgY29uc3QKQEAgLTQxMSwx
MyArNDQ0LDI0IEBAIGJvb2wgSFRNTElucHV0RWxlbWVudDo6c2hvdWxkVXNlSW5wdXRNZXRob2Qo
KSBjb25zdAogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmhhbmRsZUZvY3VzRXZlbnQoKQogewot
ICAgIElucHV0RWxlbWVudDo6ZGlzcGF0Y2hGb2N1c0V2ZW50KHRoaXMsIHRoaXMpOworICAgIGlm
ICghaXNUZXh0RmllbGQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChpc1Bhc3N3b3JkRmll
bGQoKSAmJiBkb2N1bWVudCgpLT5mcmFtZSgpKQorICAgICAgICBkb2N1bWVudCgpLT5zZXRVc2VT
ZWN1cmVLZXlib2FyZEVudHJ5V2hlbkFjdGl2ZSh0cnVlKTsKIH0KIAogdm9pZCBIVE1MSW5wdXRF
bGVtZW50OjpoYW5kbGVCbHVyRXZlbnQoKQogewogICAgIG1faW5wdXRUeXBlLT5oYW5kbGVCbHVy
RXZlbnQoKTsKLSAgICBJbnB1dEVsZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW50KHRoaXMsIHRoaXMp
OworCisgICAgaWYgKCFpc1RleHRGaWVsZCgpKQorICAgICAgICByZXR1cm47CisgICAgRnJhbWUq
IGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICBy
ZXR1cm47CisgICAgaWYgKGlzUGFzc3dvcmRGaWVsZCgpKQorICAgICAgICBkb2N1bWVudCgpLT5z
ZXRVc2VTZWN1cmVLZXlib2FyZEVudHJ5V2hlbkFjdGl2ZShmYWxzZSk7CisgICAgZnJhbWUtPmVk
aXRvcigpLT50ZXh0RmllbGREaWRFbmRFZGl0aW5nKHRoaXMpOwogfQogCiB2b2lkIEhUTUxJbnB1
dEVsZW1lbnQ6OnNldFR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQpAQCAtNDY2LDE0ICs1MTAsMTQg
QEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojp1cGRhdGVUeXBlKCkKIAogICAgIGJvb2wgd2lsbFN0
b3JlVmFsdWUgPSBtX2lucHV0VHlwZS0+c3RvcmVzVmFsdWVTZXBhcmF0ZUZyb21BdHRyaWJ1dGUo
KTsKIAotICAgIGlmIChkaWRTdG9yZVZhbHVlICYmICF3aWxsU3RvcmVWYWx1ZSAmJiAhbV9kYXRh
LnZhbHVlKCkuaXNOdWxsKCkpIHsKLSAgICAgICAgc2V0QXR0cmlidXRlKHZhbHVlQXR0ciwgbV9k
YXRhLnZhbHVlKCkpOwotICAgICAgICBtX2RhdGEuc2V0VmFsdWUoU3RyaW5nKCkpOworICAgIGlm
IChkaWRTdG9yZVZhbHVlICYmICF3aWxsU3RvcmVWYWx1ZSAmJiAhbV92YWx1ZS5pc051bGwoKSkg
eworICAgICAgICBzZXRBdHRyaWJ1dGUodmFsdWVBdHRyLCBtX3ZhbHVlKTsKKyAgICAgICAgbV92
YWx1ZSA9IFN0cmluZygpOwogICAgIH0KICAgICBpZiAoIWRpZFN0b3JlVmFsdWUgJiYgd2lsbFN0
b3JlVmFsdWUpCi0gICAgICAgIG1fZGF0YS5zZXRWYWx1ZShzYW5pdGl6ZVZhbHVlKGZhc3RHZXRB
dHRyaWJ1dGUodmFsdWVBdHRyKSkpOworICAgICAgICBtX3ZhbHVlID0gIHNhbml0aXplVmFsdWUo
ZmFzdEdldEF0dHJpYnV0ZSh2YWx1ZUF0dHIpKTsKICAgICBlbHNlCi0gICAgICAgIElucHV0RWxl
bWVudDo6dXBkYXRlVmFsdWVJZk5lZWRlZChtX2RhdGEsIHRoaXMpOworICAgICAgICB1cGRhdGVW
YWx1ZUlmTmVlZGVkKCk7CiAKICAgICBpZiAobmVlZGVkQWN0aXZhdGlvbkNhbGxiYWNrKQogICAg
ICAgICB1bnJlZ2lzdGVyRm9yQWN0aXZhdGlvbkNhbGxiYWNrSWZOZWVkZWQoKTsKQEAgLTUwMiw3
ICs1NDYsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnVwZGF0ZVR5cGUoKQogICAgIGNoZWNr
ZWRSYWRpb0J1dHRvbnMoKS5hZGRCdXR0b24odGhpcyk7CiAKICAgICBzZXROZWVkc1ZhbGlkaXR5
Q2hlY2soKTsKLSAgICBJbnB1dEVsZW1lbnQ6Om5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQodGhpcyk7
CisgICAgbm90aWZ5Rm9ybVN0YXRlQ2hhbmdlZCgpOwogfQogCiBjb25zdCBBdG9taWNTdHJpbmcm
IEhUTUxJbnB1dEVsZW1lbnQ6OmZvcm1Db250cm9sVHlwZSgpIGNvbnN0CkBAIC01NjAsNyArNjA0
LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1
dGUqIGF0dHIpCiB7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBuYW1lQXR0cikgewogICAgICAg
ICBjaGVja2VkUmFkaW9CdXR0b25zKCkucmVtb3ZlQnV0dG9uKHRoaXMpOwotICAgICAgICBtX2Rh
dGEuc2V0TmFtZShhdHRyLT52YWx1ZSgpKTsKKyAgICAgICAgbV9uYW1lID0gYXR0ci0+dmFsdWUo
KTsKICAgICAgICAgY2hlY2tlZFJhZGlvQnV0dG9ucygpLmFkZEJ1dHRvbih0aGlzKTsKICAgICAg
ICAgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
YXR0cik7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYXV0b2NvbXBsZXRlQXR0cikg
ewpAQCAtNTgyLDcgKzYyNiw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogICAgICAgICB1cGRhdGVUeXBlKCk7CiAgICAgfSBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gdmFsdWVBdHRyKSB7CiAgICAgICAgIC8vIFdlIG9ubHkg
bmVlZCB0byBzZXRDaGFuZ2VkIGlmIHRoZSBmb3JtIGlzIGxvb2tpbmcgYXQgdGhlIGRlZmF1bHQg
dmFsdWUgcmlnaHQgbm93LgotICAgICAgICBpZiAobV9kYXRhLnZhbHVlKCkuaXNOdWxsKCkpCisg
ICAgICAgIGlmIChtX3ZhbHVlLmlzTnVsbCgpKQogICAgICAgICAgICAgc2V0TmVlZHNTdHlsZVJl
Y2FsYygpOwogICAgICAgICBzZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKGZhbHNl
KTsKICAgICAgICAgc2V0TmVlZHNWYWxpZGl0eUNoZWNrKCk7CkBAIC01OTYsMTEgKzY0MCwyMCBA
QCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSog
YXR0cikKICAgICAgICAgICAgIG1fcmVmbGVjdHNDaGVja2VkQXR0cmlidXRlID0gdHJ1ZTsKICAg
ICAgICAgfQogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG1heGxlbmd0aEF0dHIpIHsK
LSAgICAgICAgSW5wdXRFbGVtZW50OjpwYXJzZU1heExlbmd0aEF0dHJpYnV0ZShtX2RhdGEsIHRo
aXMsIHRoaXMsIGF0dHIpOworICAgICAgICBpbnQgbWF4TGVuZ3RoID0gYXR0ci0+aXNOdWxsKCkg
PyBtYXhpbXVtTGVuZ3RoIDogYXR0ci0+dmFsdWUoKS50b0ludCgpOworICAgICAgICBpZiAobWF4
TGVuZ3RoIDw9IDAgfHwgbWF4TGVuZ3RoID4gbWF4aW11bUxlbmd0aCkKKyAgICAgICAgICAgIG1h
eExlbmd0aCA9IG1heGltdW1MZW5ndGg7CisgICAgICAgIGludCBvbGRNYXhMZW5ndGggPSBtX21h
eExlbmd0aDsKKyAgICAgICAgbV9tYXhMZW5ndGggPSBtYXhMZW5ndGg7CisgICAgICAgIGlmIChv
bGRNYXhMZW5ndGggIT0gbWF4TGVuZ3RoKQorICAgICAgICAgICAgdXBkYXRlVmFsdWVJZk5lZWRl
ZCgpOworICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgICAgIHNldE5lZWRzVmFs
aWRpdHlDaGVjaygpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHNpemVBdHRyKQot
ICAgICAgICBJbnB1dEVsZW1lbnQ6OnBhcnNlU2l6ZUF0dHJpYnV0ZShtX2RhdGEsIHRoaXMsIGF0
dHIpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBhbHRBdHRyKQorICAgIH0gZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IHNpemVBdHRyKSB7CisgICAgICAgIG1fc2l6ZSA9IGF0dHItPmlz
TnVsbCgpID8gZGVmYXVsdFNpemUgOiBhdHRyLT52YWx1ZSgpLnRvSW50KCk7CisgICAgICAgIGlm
IChyZW5kZXJlcigpKQorICAgICAgICAgICAgcmVuZGVyZXIoKS0+c2V0TmVlZHNMYXlvdXRBbmRQ
cmVmV2lkdGhzUmVjYWxjKCk7CisgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYWx0QXR0
cikKICAgICAgICAgbV9pbnB1dFR5cGUtPmFsdEF0dHJpYnV0ZUNoYW5nZWQoKTsKICAgICBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gc3JjQXR0cikKICAgICAgICAgbV9pbnB1dFR5cGUtPnNyY0F0
dHJpYnV0ZUNoYW5nZWQoKTsKQEAgLTgwOCwxNCArODYxLDE0IEBAIHZvaWQgSFRNTElucHV0RWxl
bWVudDo6c2V0SW5kZXRlcm1pbmF0ZShib29sIG5ld1ZhbHVlKQogCiBpbnQgSFRNTElucHV0RWxl
bWVudDo6c2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZGF0YS5zaXplKCk7CisgICAgcmV0
dXJuIG1fc2l6ZTsKIH0KIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojpjb3B5Tm9uQXR0cmlidXRl
UHJvcGVydGllcyhjb25zdCBFbGVtZW50KiBzb3VyY2UpCiB7CiAgICAgY29uc3QgSFRNTElucHV0
RWxlbWVudCogc291cmNlRWxlbWVudCA9IHN0YXRpY19jYXN0PGNvbnN0IEhUTUxJbnB1dEVsZW1l
bnQqPihzb3VyY2UpOwogCi0gICAgbV9kYXRhLnNldFZhbHVlKHNvdXJjZUVsZW1lbnQtPm1fZGF0
YS52YWx1ZSgpKTsKKyAgICBtX3ZhbHVlID0gc291cmNlRWxlbWVudC0+bV92YWx1ZTsKICAgICBz
ZXRDaGVja2VkKHNvdXJjZUVsZW1lbnQtPm1faXNDaGVja2VkKTsKICAgICBtX3JlZmxlY3RzQ2hl
Y2tlZEF0dHJpYnV0ZSA9IHNvdXJjZUVsZW1lbnQtPm1fcmVmbGVjdHNDaGVja2VkQXR0cmlidXRl
OwogICAgIG1faXNJbmRldGVybWluYXRlID0gc291cmNlRWxlbWVudC0+bV9pc0luZGV0ZXJtaW5h
dGU7CkBAIC04MjksNyArODgyLDcgQEAgU3RyaW5nIEhUTUxJbnB1dEVsZW1lbnQ6OnZhbHVlKCkg
Y29uc3QKICAgICBpZiAobV9pbnB1dFR5cGUtPmdldFR5cGVTcGVjaWZpY1ZhbHVlKHZhbHVlKSkK
ICAgICAgICAgcmV0dXJuIHZhbHVlOwogCi0gICAgdmFsdWUgPSBtX2RhdGEudmFsdWUoKTsKKyAg
ICB2YWx1ZSA9IG1fdmFsdWU7CiAgICAgaWYgKCF2YWx1ZS5pc051bGwoKSkKICAgICAgICAgcmV0
dXJuIHZhbHVlOwogCkBAIC04NTcsNyArOTEwLDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojpz
ZXRWYWx1ZUZvclVzZXIoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIAogY29uc3QgU3RyaW5nJiBIVE1M
SW5wdXRFbGVtZW50OjpzdWdnZXN0ZWRWYWx1ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZGF0
YS5zdWdnZXN0ZWRWYWx1ZSgpOworICAgIHJldHVybiBtX3N1Z2dlc3RlZFZhbHVlOwogfQogCiB2
b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldFN1Z2dlc3RlZFZhbHVlKGNvbnN0IFN0cmluZyYgdmFs
dWUpCkBAIC04NjUsNyArOTE4LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRTdWdnZXN0
ZWRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgIGlmICghbV9pbnB1dFR5cGUtPmNhblNl
dFN1Z2dlc3RlZFZhbHVlKCkpCiAgICAgICAgIHJldHVybjsKICAgICBzZXRGb3JtQ29udHJvbFZh
bHVlTWF0Y2hlc1JlbmRlcmVyKGZhbHNlKTsKLSAgICBtX2RhdGEuc2V0U3VnZ2VzdGVkVmFsdWUo
c2FuaXRpemVWYWx1ZSh2YWx1ZSkpOworICAgIG1fc3VnZ2VzdGVkVmFsdWUgPSBzYW5pdGl6ZVZh
bHVlKHZhbHVlKTsKICAgICB1cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkoZmFsc2UpOwogICAg
IGlmIChyZW5kZXJlcigpKQogICAgICAgICByZW5kZXJlcigpLT51cGRhdGVGcm9tRWxlbWVudCgp
OwpAQCAtODgyLDcgKzkzNSw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWUoY29u
c3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBzZW5kQ2hhbmdlRXZlbnQpCiAgICAgICAgIGlmIChmaWxl
cygpKQogICAgICAgICAgICAgZmlsZXMoKS0+Y2xlYXIoKTsKICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICBtX2RhdGEuc2V0VmFsdWUoc2FuaXRpemVWYWx1ZSh2YWx1ZSkpOworICAgICAgICAg
ICAgbV92YWx1ZSA9IHNhbml0aXplVmFsdWUodmFsdWUpOwogICAgICAgICAgICAgaWYgKGlzVGV4
dEZpZWxkKCkpCiAgICAgICAgICAgICAgICAgdXBkYXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KGZh
bHNlKTsKICAgICAgICAgfQpAQCAtODkzLDEyICs5NDYsMTIgQEAgdm9pZCBIVE1MSW5wdXRFbGVt
ZW50OjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIHNlbmRDaGFuZ2VFdmVudCkK
ICAgICBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKIAogICAgIGlmIChpc1RleHRGaWVsZCgpKSB7
Ci0gICAgICAgIHVuc2lnbmVkIG1heCA9IG1fZGF0YS52YWx1ZSgpLmxlbmd0aCgpOworICAgICAg
ICB1bnNpZ25lZCBtYXggPSBtX3ZhbHVlLmxlbmd0aCgpOwogICAgICAgICBpZiAoZG9jdW1lbnQo
KS0+Zm9jdXNlZE5vZGUoKSA9PSB0aGlzKQotICAgICAgICAgICAgSW5wdXRFbGVtZW50Ojp1cGRh
dGVTZWxlY3Rpb25SYW5nZSh0aGlzLCB0aGlzLCBtYXgsIG1heCk7CisgICAgICAgICAgICBXZWJD
b3JlOjpzZXRTZWxlY3Rpb25SYW5nZSh0aGlzLCBtYXgsIG1heCk7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIGNhY2hlU2VsZWN0aW9uKG1heCwgbWF4KTsKLSAgICAgICAgbV9kYXRhLnNldFN1
Z2dlc3RlZFZhbHVlKFN0cmluZygpKTsKKyAgICAgICAgbV9zdWdnZXN0ZWRWYWx1ZSA9IFN0cmlu
ZygpOwogICAgIH0KICAgICBtX2lucHV0VHlwZS0+dmFsdWVDaGFuZ2VkKCk7CiAKQEAgLTkxNCw3
ICs5NjcsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlKGNvbnN0IFN0cmluZyYg
dmFsdWUsIGJvb2wgc2VuZENoYW5nZUV2ZW50KQogICAgIGlmIChpc1RleHQoKSAmJiAoIWZvY3Vz
ZWQoKSB8fCAhc2VuZENoYW5nZUV2ZW50KSkKICAgICAgICAgc2V0VGV4dEFzT2ZMYXN0Rm9ybUNv
bnRyb2xDaGFuZ2VFdmVudCh2YWx1ZSk7CiAKLSAgICBJbnB1dEVsZW1lbnQ6Om5vdGlmeUZvcm1T
dGF0ZUNoYW5nZWQodGhpcyk7CisgICAgbm90aWZ5Rm9ybVN0YXRlQ2hhbmdlZCgpOwogfQogCiBk
b3VibGUgSFRNTElucHV0RWxlbWVudDo6dmFsdWVBc0RhdGUoKSBjb25zdApAQCAtOTYxLDggKzEw
MTQsMjMgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1ZUZyb21SZW5kZXJlcihjb25z
dCBTdHJpbmcmIHZhbHVlKQogICAgIC8vIEZpbGUgdXBsb2FkIGNvbnRyb2xzIHdpbGwgYWx3YXlz
IHVzZSBzZXRGaWxlTGlzdEZyb21SZW5kZXJlci4KICAgICBBU1NFUlQoIWlzRmlsZVVwbG9hZCgp
KTsKIAotICAgIG1fZGF0YS5zZXRTdWdnZXN0ZWRWYWx1ZShTdHJpbmcoKSk7Ci0gICAgSW5wdXRF
bGVtZW50OjpzZXRWYWx1ZUZyb21SZW5kZXJlcihtX2RhdGEsIHRoaXMsIHRoaXMsIHZhbHVlKTsK
KyAgICBtX3N1Z2dlc3RlZFZhbHVlID0gU3RyaW5nKCk7CisKKyAgICAvLyBSZW5kZXJlciBhbmQg
b3VyIGV2ZW50IGhhbmRsZXIgYXJlIHJlc3BvbnNpYmxlIGZvciBzYW5pdGl6aW5nIHZhbHVlcy4K
KyAgICBBU1NFUlQodmFsdWUgPT0gc2FuaXRpemVWYWx1ZSh2YWx1ZSkgfHwgc2FuaXRpemVWYWx1
ZSh2YWx1ZSkuaXNFbXB0eSgpKTsKKworICAgIC8vIFdvcmthcm91bmQgZm9yIGJ1ZyB3aGVyZSB0
cmFpbGluZyBcbiBpcyBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0IG9mIHRleHRDb250ZW50LgorICAg
IC8vIFRoZSBhc3NlcnQgbWFjcm8gYWJvdmUgbWF5IGFsc28gYmUgc2ltcGxpZmllZCB0bzogdmFs
dWUgPT0gY29uc3RyYWluVmFsdWUodmFsdWUpCisgICAgLy8gaHR0cDovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTY2MQorICAgIG1fdmFsdWUgPSB2YWx1ZSA9PSAiXG4iID8gU3Ry
aW5nKCIiKSA6IHZhbHVlOworCisgICAgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJl
cih0cnVlKTsKKworICAgIC8vIElucHV0IGV2ZW50IGlzIGZpcmVkIGJ5IHRoZSBOb2RlOjpkZWZh
dWx0RXZlbnRIYW5kbGVyIGZvciBlZGl0YWJsZSBjb250cm9scy4KKyAgICBpZiAoIWlzVGV4dEZp
ZWxkKCkpCisgICAgICAgIGRpc3BhdGNoSW5wdXRFdmVudCgpOworICAgIG5vdGlmeUZvcm1TdGF0
ZUNoYW5nZWQoKTsKKwogICAgIHVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eShmYWxzZSk7CiAg
ICAgc2V0TmVlZHNWYWxpZGl0eUNoZWNrKCk7CiAKQEAgLTk3NSw3ICsxMDQzLDcgQEAgdm9pZCBI
VE1MSW5wdXRFbGVtZW50OjpzZXRGaWxlTGlzdEZyb21SZW5kZXJlcihjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgcGF0aHMpCiAgICAgbV9pbnB1dFR5cGUtPnNldEZpbGVMaXN0KHBhdGhzKTsKIAogICAg
IHNldEZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIodHJ1ZSk7Ci0gICAgSW5wdXRFbGVt
ZW50Ojpub3RpZnlGb3JtU3RhdGVDaGFuZ2VkKHRoaXMpOworICAgIG5vdGlmeUZvcm1TdGF0ZUNo
YW5nZWQoKTsKICAgICBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKIH0KIApAQCAtMTEwNSw3ICsx
MTczLDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXREZWZhdWx0VmFsdWUoY29uc3QgU3Ry
aW5nICZ2YWx1ZSkKIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXREZWZhdWx0TmFtZShjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWUpCiB7Ci0gICAgbV9kYXRhLnNldE5hbWUobmFtZSk7CisgICAg
bV9uYW1lID0gbmFtZTsKIH0KIAogU3RyaW5nIEhUTUxJbnB1dEVsZW1lbnQ6OmFjY2VwdCgpIGNv
bnN0CkBAIC0xMTIwLDcgKzExODgsNyBAQCBTdHJpbmcgSFRNTElucHV0RWxlbWVudDo6YWx0KCkg
Y29uc3QKIAogaW50IEhUTUxJbnB1dEVsZW1lbnQ6Om1heExlbmd0aCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1fZGF0YS5tYXhMZW5ndGgoKTsKKyAgICByZXR1cm4gbV9tYXhMZW5ndGg7CiB9CiAK
IHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0TWF4TGVuZ3RoKGludCBtYXhMZW5ndGgsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQpAQCAtMTIxOSw4ICsxMjg3LDggQEAgYm9vbCBIVE1MSW5wdXRFbGVtZW50
Ojppc1JlcXVpcmVkRm9ybUNvbnRyb2woKSBjb25zdAogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6
OmNhY2hlU2VsZWN0aW9uKGludCBzdGFydCwgaW50IGVuZCkKIHsKLSAgICBtX2RhdGEuc2V0Q2Fj
aGVkU2VsZWN0aW9uU3RhcnQoc3RhcnQpOwotICAgIG1fZGF0YS5zZXRDYWNoZWRTZWxlY3Rpb25F
bmQoZW5kKTsKKyAgICBtX2NhY2hlZFNlbGVjdGlvblN0YXJ0ID0gc3RhcnQ7CisgICAgbV9jYWNo
ZWRTZWxlY3Rpb25FbmQgPSBlbmQ7CiB9CiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6YWRkU2Vh
cmNoUmVzdWx0KCkKQEAgLTE0NDQsMTEgKzE1MTIsMTQwIEBAIHZvaWQgSFRNTElucHV0RWxlbWVu
dDo6c3RlcFVwRnJvbVJlbmRlcmVyKGludCBuKQogCiAjaWYgRU5BQkxFKFdDU1MpCiAKK3N0YXRp
YyBpbmxpbmUgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtYXRDb2RlcygpCit7CisgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGNvZGVzLCAoIkFhTm5YeE1tIikpOworICAgIHJl
dHVybiBjb2RlczsKK30KKworc3RhdGljIHVuc2lnbmVkIGN1cnNvclBvc2l0aW9uVG9NYXNrSW5k
ZXgoY29uc3QgU3RyaW5nJiBpbnB1dEZvcm1hdE1hc2ssIHVuc2lnbmVkIGN1cnNvclBvc2l0aW9u
KQoreworICAgIFVDaGFyIG1hc2s7CisgICAgaW50IGluZGV4ID0gLTE7CisgICAgZG8geworICAg
ICAgICBtYXNrID0gaW5wdXRGb3JtYXRNYXNrWysraW5kZXhdOworICAgICAgICBpZiAobWFzayA9
PSAnXFwnKQorICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgZWxzZSBpZiAobWFzayA9PSAn
KicgfHwgKGlzQVNDSUlEaWdpdChtYXNrKSAmJiBtYXNrICE9ICcwJykpIHsKKyAgICAgICAgICAg
IGluZGV4ID0gaW5wdXRGb3JtYXRNYXNrLmxlbmd0aCgpIC0gMTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfSB3aGlsZSAoY3Vyc29yUG9zaXRpb24tLSk7CisKKyAgICByZXR1
cm4gaW5kZXg7Cit9CisKK2Jvb2wgSFRNTElucHV0RWxlbWVudDo6aXNDb25mb3JtVG9JbnB1dE1h
c2soY29uc3QgU3RyaW5nJiBpbnB1dENoYXJzKSBjb25zdAoreworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBpbnB1dENoYXJzLmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFpc0Nv
bmZvcm1Ub0lucHV0TWFzayhpbnB1dENoYXJzW2ldLCBpKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSFRNTElucHV0RWxlbWVu
dDo6aXNDb25mb3JtVG9JbnB1dE1hc2soVUNoYXIgaW5DaGFyLCB1bnNpZ25lZCBjdXJzb3JQb3Np
dGlvbikgY29uc3QKK3sKKyAgICBpZiAobV9pbnB1dEZvcm1hdE1hc2suaXNFbXB0eSgpIHx8IG1f
aW5wdXRGb3JtYXRNYXNrID09ICIqTSIgfHwgbV9pbnB1dEZvcm1hdE1hc2sgPT0gIiptIikKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoY3Vyc29yUG9zaXRpb24gPj0gbV9tYXhJbnB1
dENoYXJzQWxsb3dlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB1bnNpZ25lZCBt
YXNrSW5kZXggPSBjdXJzb3JQb3NpdGlvblRvTWFza0luZGV4KG1faW5wdXRGb3JtYXRNYXNrLCBj
dXJzb3JQb3NpdGlvbik7CisgICAgYm9vbCBvayA9IHRydWU7CisgICAgVUNoYXIgbWFzayA9IG1f
aW5wdXRGb3JtYXRNYXNrW21hc2tJbmRleF07CisgICAgLy8gTWF0Y2ggdGhlIGlucHV0ZWQgY2hh
cmFjdGVyIHdpdGggaW5wdXQgbWFzaworICAgIHN3aXRjaCAobWFzaykgeworICAgIGNhc2UgJ0En
OgorICAgICAgICBvayA9ICFpc0FTQ0lJRGlnaXQoaW5DaGFyKSAmJiAhaXNBU0NJSUxvd2VyKGlu
Q2hhcikgJiYgaXNBU0NJSVByaW50YWJsZShpbkNoYXIpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlICdhJzoKKyAgICAgICAgb2sgPSAhaXNBU0NJSURpZ2l0KGluQ2hhcikgJiYgIWlzQVNDSUlV
cHBlcihpbkNoYXIpICYmIGlzQVNDSUlQcmludGFibGUoaW5DaGFyKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSAnTic6CisgICAgICAgIG9rID0gaXNBU0NJSURpZ2l0KGluQ2hhcik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgJ24nOgorICAgICAgICBvayA9ICFpc0FTQ0lJQWxwaGEoaW5D
aGFyKSAmJiBpc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgJ1gnOgorICAgICAgICBvayA9ICFpc0FTQ0lJTG93ZXIoaW5DaGFyKSAmJiBpc0FTQ0lJUHJp
bnRhYmxlKGluQ2hhcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ3gnOgorICAgICAgICBv
ayA9ICFpc0FTQ0lJVXBwZXIoaW5DaGFyKSAmJiBpc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgJ00nOgorICAgIGNhc2UgJ20nOgorICAgICAgICBvayA9
IGlzQVNDSUlQcmludGFibGUoaW5DaGFyKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgb2sgPSAobWFzayA9PSBpbkNoYXIpOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICByZXR1cm4gb2s7Cit9CisKK1N0cmluZyBIVE1MSW5wdXRFbGVtZW50Ojp2YWxpZGF0ZUlu
cHV0TWFzayhTdHJpbmcmIGlucHV0TWFzaykKK3sKKyAgICBpbnB1dE1hc2sucmVwbGFjZSgiXFxc
XCIsICJcXCIpOworCisgICAgYm9vbCBpc1ZhbGlkID0gdHJ1ZTsKKyAgICBib29sIGhhc1dpbGRj
YXJkID0gZmFsc2U7CisgICAgdW5zaWduZWQgZXNjYXBlQ2hhckNvdW50ID0gMDsKKyAgICB1bnNp
Z25lZCBtYXNrTGVuZ3RoID0gaW5wdXRNYXNrLmxlbmd0aCgpOworICAgIFVDaGFyIGZvcm1hdENv
ZGU7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1hc2tMZW5ndGg7ICsraSkgeworICAg
ICAgICBmb3JtYXRDb2RlID0gaW5wdXRNYXNrW2ldOworICAgICAgICBpZiAoZm9ybWF0Q29kZXMo
KS5maW5kKGZvcm1hdENvZGUpID09IC0xKSB7CisgICAgICAgICAgICBpZiAoZm9ybWF0Q29kZSA9
PSAnKicgfHwgKGlzQVNDSUlEaWdpdChmb3JtYXRDb2RlKSAmJiBmb3JtYXRDb2RlICE9ICcwJykp
IHsKKyAgICAgICAgICAgICAgICAvLyBWYWxpZGF0ZSBjb2RlcyB3aGljaCBlbmRzIHdpdGggJypm
JyBvciAnbmYnCisgICAgICAgICAgICAgICAgZm9ybWF0Q29kZSA9IGlucHV0TWFza1srK2ldOwor
ICAgICAgICAgICAgICAgIGlmICgoaSArIDEgIT0gbWFza0xlbmd0aCkgfHwgZm9ybWF0Q29kZXMo
KS5maW5kKGZvcm1hdENvZGUpID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIGlzVmFsaWQg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGhhc1dpbGRjYXJkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAoZm9ybWF0Q29kZSA9PSAnXFwnKSB7CisgICAgICAgICAgICAgICAgLy8gc2tpcCBvdmVyIHRo
ZSBuZXh0IG1hc2sgY2hhcmFjdGVyCisgICAgICAgICAgICAgICAgKytpOworICAgICAgICAgICAg
ICAgICsrZXNjYXBlQ2hhckNvdW50OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBpc1ZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWlzVmFsaWQpCisgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKKyAgICAvLyBjYWxjdWxhdGUgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFs
bG93ZWQgdG8gYmUgZW50ZXJlZCBieSBpbnB1dCBtYXNrCisgICAgdW5zaWduZWQgYWxsb3dlZExl
bmd0aCA9IG1hc2tMZW5ndGg7CisgICAgaWYgKGVzY2FwZUNoYXJDb3VudCkKKyAgICAgICAgYWxs
b3dlZExlbmd0aCAtPSBlc2NhcGVDaGFyQ291bnQ7CisKKyAgICBpZiAoaGFzV2lsZGNhcmQpIHsK
KyAgICAgICAgZm9ybWF0Q29kZSA9IGlucHV0TWFza1ttYXNrTGVuZ3RoIC0gMl07CisgICAgICAg
IGlmIChmb3JtYXRDb2RlID09ICcqJykKKyAgICAgICAgICAgIGFsbG93ZWRMZW5ndGggPSBtX21h
eElucHV0Q2hhcnNBbGxvd2VkOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHVuc2lnbmVk
IGxlZnRMZW4gPSBTdHJpbmcoJmZvcm1hdENvZGUpLnRvSW50KCk7CisgICAgICAgICAgICBhbGxv
d2VkTGVuZ3RoID0gbGVmdExlbiArIGFsbG93ZWRMZW5ndGggLSAyOworICAgICAgICB9CisgICAg
fQorCisgICAgaWYgKGFsbG93ZWRMZW5ndGggPCBtX21heElucHV0Q2hhcnNBbGxvd2VkKQorICAg
ICAgICBtX21heElucHV0Q2hhcnNBbGxvd2VkID0gYWxsb3dlZExlbmd0aDsKKworICAgIHJldHVy
biBpbnB1dE1hc2s7Cit9CisKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0V2FwSW5wdXRGb3Jt
YXQoU3RyaW5nJiBtYXNrKQogewotICAgIFN0cmluZyB2YWxpZGF0ZU1hc2sgPSB2YWxpZGF0ZUlu
cHV0TWFzayhtX2RhdGEsIG1hc2spOworICAgIFN0cmluZyB2YWxpZGF0ZU1hc2sgPSB2YWxpZGF0
ZUlucHV0TWFzayhtYXNrKTsKICAgICBpZiAoIXZhbGlkYXRlTWFzay5pc0VtcHR5KCkpCi0gICAg
ICAgIG1fZGF0YS5zZXRJbnB1dEZvcm1hdE1hc2sodmFsaWRhdGVNYXNrKTsKKyAgICAgICAgbV9p
bnB1dEZvcm1hdE1hc2sgPSB2YWxpZGF0ZU1hc2s7CiB9CiAKICNlbmRpZgpAQCAtMTU2MCw5ICsx
NzU3LDIxIEBAIENoZWNrZWRSYWRpb0J1dHRvbnMmIEhUTUxJbnB1dEVsZW1lbnQ6OmNoZWNrZWRS
YWRpb0J1dHRvbnMoKSBjb25zdAogICAgIHJldHVybiBkb2N1bWVudCgpLT5jaGVja2VkUmFkaW9C
dXR0b25zKCk7CiB9CiAKLXZvaWQgSFRNTElucHV0RWxlbWVudDo6aGFuZGxlQmVmb3JlVGV4dElu
c2VydGVkRXZlbnQoRXZlbnQqIGV2ZW50KQordm9pZCBIVE1MSW5wdXRFbGVtZW50Ojpub3RpZnlG
b3JtU3RhdGVDaGFuZ2VkKCkKK3sKKyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFt
ZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChQYWdlKiBw
YWdlID0gZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5m
b3JtU3RhdGVEaWRDaGFuZ2UodGhpcyk7Cit9CisKK3ZvaWQgSFRNTElucHV0RWxlbWVudDo6dXBk
YXRlVmFsdWVJZk5lZWRlZCgpCiB7Ci0gICAgSW5wdXRFbGVtZW50OjpoYW5kbGVCZWZvcmVUZXh0
SW5zZXJ0ZWRFdmVudChtX2RhdGEsIHRoaXMsIHRoaXMsIGV2ZW50KTsKKyAgICBTdHJpbmcgbmV3
VmFsdWUgPSBzYW5pdGl6ZVZhbHVlKG1fdmFsdWUpOworICAgIGlmIChuZXdWYWx1ZSAhPSBtX3Zh
bHVlKQorICAgICAgICBzZXRWYWx1ZShuZXdWYWx1ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCmluZGV4IDViZTczNjY4Nzk2MGZjOWRk
YmIzYjlhNjllNWM3YjM5MDdkNDA5NzAuLjhiMjBkZTFjZTcyZTYzMzhhOTZjNjUyMzMzMWYzMDZk
ZWFhNDk1MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCkBAIC0yNSw3
ICsyNSw2IEBACiAjZGVmaW5lIEhUTUxJbnB1dEVsZW1lbnRfaAogCiAjaW5jbHVkZSAiSFRNTEZv
cm1Db250cm9sRWxlbWVudC5oIgotI2luY2x1ZGUgIklucHV0RWxlbWVudC5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTM1LDE0ICszNCwxNCBAQCBjbGFzcyBIVE1MT3B0aW9uRWxlbWVu
dDsKIGNsYXNzIElucHV0VHlwZTsKIGNsYXNzIEtVUkw7CiAKLWNsYXNzIEhUTUxJbnB1dEVsZW1l
bnQgOiBwdWJsaWMgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQsIHB1YmxpYyBJbnB1dEVsZW1l
bnQgeworY2xhc3MgSFRNTElucHV0RWxlbWVudCA6IHB1YmxpYyBIVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTElucHV0RWxlbWVu
dD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVu
dCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKICAgICB2aXJ0dWFsIH5IVE1MSW5wdXRFbGVtZW50
KCk7CiAKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKHdlYmtpdHNwZWVjaGNo
YW5nZSk7CiAKLSAgICB2aXJ0dWFsIElucHV0RWxlbWVudCogdG9JbnB1dEVsZW1lbnQoKSB7IHJl
dHVybiB0aGlzOyB9CisgICAgdmlydHVhbCBIVE1MSW5wdXRFbGVtZW50KiB0b0lucHV0RWxlbWVu
dCgpIHsgcmV0dXJuIHRoaXM7IH0KIAogICAgIGJvb2wgYXV0b0NvbXBsZXRlKCkgY29uc3Q7CiAK
QEAgLTc4LDE4ICs3NywxOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdGVwVXAoRXhjZXB0aW9uQ29k
ZSYgZWMpIHsgc3RlcFVwKDEsIGVjKTsgfQogICAgIHZvaWQgc3RlcERvd24oRXhjZXB0aW9uQ29k
ZSYgZWMpIHsgc3RlcERvd24oMSwgZWMpOyB9CiAgICAgLy8gc3RlcFVwKCkvc3RlcERvd24oKSBm
b3IgdXNlci1pbnRlcmFjdGlvbi4KLSAgICB2aXJ0dWFsIGJvb2wgaXNTdGVwcGFibGUoKSBjb25z
dDsKKyAgICBib29sIGlzU3RlcHBhYmxlKCkgY29uc3Q7CiAgICAgdm9pZCBzdGVwVXBGcm9tUmVu
ZGVyZXIoaW50KTsKIAogICAgIGJvb2wgaXNUZXh0QnV0dG9uKCkgY29uc3Q7CiAKICAgICB2aXJ0
dWFsIGJvb2wgaXNSYWRpb0J1dHRvbigpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc1RleHRG
aWVsZCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc1NlYXJjaEZpZWxkKCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBib29sIGlzSW5wdXRUeXBlSGlkZGVuKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBi
b29sIGlzUGFzc3dvcmRGaWVsZCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0NoZWNrYm94
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzUmFuZ2VDb250cm9sKCkgY29uc3Q7CisgICAg
Ym9vbCBpc1RleHRGaWVsZCgpIGNvbnN0OworICAgIGJvb2wgaXNTZWFyY2hGaWVsZCgpIGNvbnN0
OworICAgIGJvb2wgaXNJbnB1dFR5cGVIaWRkZW4oKSBjb25zdDsKKyAgICBib29sIGlzUGFzc3dv
cmRGaWVsZCgpIGNvbnN0OworICAgIGJvb2wgaXNDaGVja2JveCgpIGNvbnN0OworICAgIGJvb2wg
aXNSYW5nZUNvbnRyb2woKSBjb25zdDsKIAogICAgIC8vIEZJWE1FOiBJdCdzIGhpZ2hseSBsaWtl
bHkgdGhhdCBhbnkgY2FsbCBzaXRlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBzaG91bGQgaW5zdGVh
ZAogICAgIC8vIGJlIHVzaW5nIGEgZGlmZmVyZW50IG9uZS4gTWFueSBpbnB1dCBlbGVtZW50cyBi
ZWhhdmUgbGlrZSB0ZXh0IGZpZWxkcywgYW5kIGluIGFkZGl0aW9uCkBAIC0xMDYsNyArMTA1LDcg
QEAgcHVibGljOgogICAgIGJvb2wgaXNVUkxGaWVsZCgpIGNvbnN0OwogCiAjaWYgRU5BQkxFKElO
UFVUX1NQRUVDSCkKLSAgICB2aXJ0dWFsIGJvb2wgaXNTcGVlY2hFbmFibGVkKCkgY29uc3Q7Cisg
ICAgYm9vbCBpc1NwZWVjaEVuYWJsZWQoKSBjb25zdDsKICNlbmRpZgogCiAgICAgYm9vbCBjaGVj
a2VkKCkgY29uc3QgeyByZXR1cm4gbV9pc0NoZWNrZWQ7IH0KQEAgLTExNiwxOCArMTE1LDMwIEBA
IHB1YmxpYzoKICAgICBib29sIGluZGV0ZXJtaW5hdGUoKSBjb25zdCB7IHJldHVybiBtX2lzSW5k
ZXRlcm1pbmF0ZTsgfQogICAgIHZvaWQgc2V0SW5kZXRlcm1pbmF0ZShib29sKTsKIAotICAgIHZp
cnR1YWwgaW50IHNpemUoKSBjb25zdDsKKyAgICAvLyBpc0NoZWNrZWQgaXMgdXNlZCBieSB0aGUg
cmVuZGVyaW5nIHRyZWUvQ1NTIHdoaWxlIGNoZWNrZWQoKSBpcyB1c2VkIGJ5IEpTIHRvIGRldGVy
bWluZSBjaGVja2VkIHN0YXRlCisgICAgdmlydHVhbCBib29sIGlzQ2hlY2tlZCgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgYm9vbCBpc0luZGV0ZXJtaW5hdGUoKSBjb25zdCB7IHJldHVybiBpbmRldGVy
bWluYXRlKCk7IH0KKworICAgIGludCBzaXplKCkgY29uc3Q7CiAKICAgICB2b2lkIHNldFR5cGUo
Y29uc3QgU3RyaW5nJik7CiAKLSAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0OwotICAg
IHZpcnR1YWwgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmLCBib29sIHNlbmRDaGFuZ2VFdmVu
dCA9IGZhbHNlKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVGb3JVc2VyKGNvbnN0IFN0cmlu
ZyYpOworICAgIFN0cmluZyB2YWx1ZSgpIGNvbnN0OworICAgIHZvaWQgc2V0VmFsdWUoY29uc3Qg
U3RyaW5nJiwgYm9vbCBzZW5kQ2hhbmdlRXZlbnQgPSBmYWxzZSk7CisgICAgdm9pZCBzZXRWYWx1
ZUZvclVzZXIoY29uc3QgU3RyaW5nJik7CiAgICAgLy8gQ2hlY2tzIGlmIHRoZSBzcGVjaWZpZWQg
c3RyaW5nIHdvdWxkIGJlIGEgdmFsaWQgdmFsdWUuCiAgICAgLy8gV2Ugc2hvdWxkIG5vdCBjYWxs
IHRoaXMgZm9yIHR5cGVzIHdpdGggbm8gc3RyaW5nIHZhbHVlIHN1Y2ggYXMgQ0hFQ0tCT1ggYW5k
IFJBRElPLgogICAgIGJvb2wgaXNWYWxpZFZhbHVlKGNvbnN0IFN0cmluZyYpIGNvbnN0OwogCi0g
ICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZFZhbHVlKCkgY29uc3Q7CisgICAgU3Ry
aW5nIHNhbml0aXplVmFsdWUoY29uc3QgU3RyaW5nJikgY29uc3Q7CisKKyAgICAvLyBUaGUgdmFs
dWUgd2hpY2ggaXMgZHJhd24gYnkgYSByZW5kZXJlci4KKyAgICBTdHJpbmcgdmlzaWJsZVZhbHVl
KCkgY29uc3Q7CisgICAgU3RyaW5nIGNvbnZlcnRGcm9tVmlzaWJsZVZhbHVlKGNvbnN0IFN0cmlu
ZyYpIGNvbnN0OworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIHN0cmluZyBj
YW4gYmUgc2V0IGFzIHRoZSB2YWx1ZSBvZiBIVE1MSW5wdXRFbGVtZW50LgorICAgIGJvb2wgaXNB
Y2NlcHRhYmxlVmFsdWUoY29uc3QgU3RyaW5nJikgY29uc3Q7CisKKyAgICBjb25zdCBTdHJpbmcm
IHN1Z2dlc3RlZFZhbHVlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRTdWdnZXN0ZWRWYWx1ZShjb25z
dCBTdHJpbmcmKTsKIAogICAgIGRvdWJsZSB2YWx1ZUFzRGF0ZSgpIGNvbnN0OwpAQCAtMTQxLDEx
ICsxNTIsMTAgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIHZhbHVlV2l0aERlZmF1bHQoKSBjb25z
dDsKIAotICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUZyb21SZW5kZXJlcihjb25zdCBTdHJpbmcm
KTsKKyAgICB2b2lkIHNldFZhbHVlRnJvbVJlbmRlcmVyKGNvbnN0IFN0cmluZyYpOwogICAgIHZv
aWQgc2V0RmlsZUxpc3RGcm9tUmVuZGVyZXIoY29uc3QgVmVjdG9yPFN0cmluZz4mKTsKIAogICAg
IGJvb2wgY2FuSGF2ZVNlbGVjdGlvbigpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZWxlY3Qo
KSB7IEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZWxlY3QoKTsgfQogCiAgICAgdmlydHVh
bCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqKTsKICAgICB2aXJ0dWFsIFJlbmRl
ck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOwpAQCAt
MTc4LDEzICsxODgsMTQgQEAgcHVibGljOgogCiAgICAgYm9vbCBtdWx0aXBsZSgpIGNvbnN0Owog
Ci0gICAgdmlydHVhbCBib29sIGlzQXV0b2ZpbGxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNBdXRv
ZmlsbGVkOyB9CisgICAgYm9vbCBpc0F1dG9maWxsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzQXV0
b2ZpbGxlZDsgfQogICAgIHZvaWQgc2V0QXV0b2ZpbGxlZChib29sID0gdHJ1ZSk7CiAKICAgICBG
aWxlTGlzdCogZmlsZXMoKTsKIAogICAgIHZvaWQgYWRkU2VhcmNoUmVzdWx0KCk7CiAgICAgdm9p
ZCBvblNlYXJjaCgpOworICAgIGJvb2wgc2VhcmNoRXZlbnRzU2hvdWxkQmVEaXNwYXRjaGVkKCkg
Y29uc3Q7CiAKICNpZiBFTkFCTEUoREFUQUxJU1QpCiAgICAgSFRNTEVsZW1lbnQqIGxpc3QoKSBj
b25zdDsKQEAgLTE5OCwxMSArMjA5LDE2IEBAIHB1YmxpYzoKICAgICAvLyBUaGVzZSBmdW5jdGlv
bnMgYXJlIHB1YmxpYyBzbyB0aGV5IGNhbiBiZSB1c2VkIGluIElucHV0VHlwZSBjbGFzc2VzLgog
ICAgIC8vIE90aGVyd2lzZSwgdGhleSB3b3VsZCBiZSBwcml2YXRlLgogICAgIENoZWNrZWRSYWRp
b0J1dHRvbnMmIGNoZWNrZWRSYWRpb0J1dHRvbnMoKSBjb25zdDsKLSAgICB2b2lkIGhhbmRsZUJl
Zm9yZVRleHRJbnNlcnRlZEV2ZW50KEV2ZW50Kik7CiAgICAgdm9pZCB1cGRhdGVDaGVja2VkUmFk
aW9CdXR0b25zKCk7CisjaWYgRU5BQkxFKFdDU1MpCisgICAgYm9vbCBpc0NvbmZvcm1Ub0lucHV0
TWFzayhjb25zdCBTdHJpbmcmKSBjb25zdDsKKyNlbmRpZgogCiAgICAgYm9vbCBsYXN0Q2hhbmdl
V2FzVXNlckVkaXQoKSBjb25zdDsKLSAgICAKKyAgICB2b2lkIGNhY2hlU2VsZWN0aW9uKGludCBz
dGFydCwgaW50IGVuZCk7CisKKyAgICBzdGF0aWMgY29uc3QgaW50IG1heGltdW1MZW5ndGg7CisK
IHByb3RlY3RlZDoKICAgICBIVE1MSW5wdXRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBE
b2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKIApAQCAt
MjIzLDE4ICsyMzksMTIgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3Ry
aW5nJiBmb3JtQ29udHJvbE5hbWUoKSBjb25zdDsKIAotICAgIC8vIGlzQ2hlY2tlZCBpcyB1c2Vk
IGJ5IHRoZSByZW5kZXJpbmcgdHJlZS9DU1Mgd2hpbGUgY2hlY2tlZCgpIGlzIHVzZWQgYnkgSlMg
dG8gZGV0ZXJtaW5lIGNoZWNrZWQgc3RhdGUKLSAgICB2aXJ0dWFsIGJvb2wgaXNDaGVja2VkKCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzSW5kZXRlcm1pbmF0ZSgpIGNvbnN0IHsgcmV0dXJu
IGluZGV0ZXJtaW5hdGUoKTsgfQotCiAgICAgdmlydHVhbCBib29sIGlzVGV4dEZvcm1Db250cm9s
KCkgY29uc3QgeyByZXR1cm4gaXNUZXh0RmllbGQoKTsgfQogCiAgICAgdmlydHVhbCBib29sIGNh
blRyaWdnZXJJbXBsaWNpdFN1Ym1pc3Npb24oKSBjb25zdCB7IHJldHVybiBpc1RleHRGaWVsZCgp
OyB9CiAKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xUeXBlKCkg
Y29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgc2VhcmNoRXZlbnRzU2hvdWxkQmVEaXNwYXRjaGVk
KCkgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIGJvb2wgc2F2ZUZvcm1Db250cm9sU3RhdGUoU3RyaW5n
JiB2YWx1ZSkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHJlc3RvcmVGb3JtQ29udHJvbFN0YXRl
KGNvbnN0IFN0cmluZyYpOwogCkBAIC0yNjEsMTIgKzI3MSw2IEBAIHByaXZhdGU6CiAKICAgICB2
aXJ0dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlKikgY29uc3Q7CiAKLSAgICB2aXJ0
dWFsIHZvaWQgY2FjaGVTZWxlY3Rpb24oaW50IHN0YXJ0LCBpbnQgZW5kKTsKLQotICAgIHZpcnR1
YWwgU3RyaW5nIHZpc2libGVWYWx1ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgU3RyaW5nIGNvbnZl
cnRGcm9tVmlzaWJsZVZhbHVlKGNvbnN0IFN0cmluZyYpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9v
bCBpc0FjY2VwdGFibGVWYWx1ZShjb25zdCBTdHJpbmcmKSBjb25zdDsKLSAgICB2aXJ0dWFsIFN0
cmluZyBzYW5pdGl6ZVZhbHVlKGNvbnN0IFN0cmluZyYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9v
bCBoYXNVbmFjY2VwdGFibGVWYWx1ZSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIGlzSW5S
YW5nZSgpIGNvbnN0OwpAQCAtMjgwLDcgKzI4NCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWdp
c3RlckZvckFjdGl2YXRpb25DYWxsYmFja0lmTmVlZGVkKCk7CiAgICAgdm9pZCB1bnJlZ2lzdGVy
Rm9yQWN0aXZhdGlvbkNhbGxiYWNrSWZOZWVkZWQoKTsKIAotICAgIHZpcnR1YWwgYm9vbCBzdXBw
b3J0c01heExlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIGlzVGV4dFR5cGUoKTsgfQorICAgIGJvb2wg
c3VwcG9ydHNNYXhMZW5ndGgoKSBjb25zdCB7IHJldHVybiBpc1RleHRUeXBlKCk7IH0KICAgICBi
b29sIGlzVGV4dFR5cGUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1BsYWNl
aG9sZGVyKCkgY29uc3Q7CkBAIC0yODgsOCArMjkyLDggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFs
IGJvb2wgaXNFbXB0eVN1Z2dlc3RlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gc3VnZ2VzdGVkVmFs
dWUoKS5pc0VtcHR5KCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRm9jdXNFdmVudCgpOwog
ICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVCbHVyRXZlbnQoKTsKLSAgICB2aXJ0dWFsIGludCBjYWNo
ZWRTZWxlY3Rpb25TdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5jYWNoZWRTZWxlY3Rpb25T
dGFydCgpOyB9Ci0gICAgdmlydHVhbCBpbnQgY2FjaGVkU2VsZWN0aW9uRW5kKCkgY29uc3QgeyBy
ZXR1cm4gbV9kYXRhLmNhY2hlZFNlbGVjdGlvbkVuZCgpOyB9CisgICAgdmlydHVhbCBpbnQgY2Fj
aGVkU2VsZWN0aW9uU3RhcnQoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZFNlbGVjdGlvblN0YXJ0
OyB9CisgICAgdmlydHVhbCBpbnQgY2FjaGVkU2VsZWN0aW9uRW5kKCkgY29uc3QgeyByZXR1cm4g
bV9jYWNoZWRTZWxlY3Rpb25FbmQ7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc09wdGlvbmFsRm9y
bUNvbnRyb2woKSBjb25zdCB7IHJldHVybiAhaXNSZXF1aXJlZEZvcm1Db250cm9sKCk7IH0KICAg
ICB2aXJ0dWFsIGJvb2wgaXNSZXF1aXJlZEZvcm1Db250cm9sKCkgY29uc3Q7CkBAIC0zMDMsMTIg
KzMwNywyNCBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShEQVRBTElTVCkKICAgICBIVE1MRGF0YUxp
c3RFbGVtZW50KiBkYXRhTGlzdCgpIGNvbnN0OwogI2VuZGlmCi0KKyAgICB2b2lkIG5vdGlmeUZv
cm1TdGF0ZUNoYW5nZWQoKTsKKyAgICB2b2lkIHVwZGF0ZVZhbHVlSWZOZWVkZWQoKTsKICNpZiBF
TkFCTEUoV0NTUykKLSAgICB2aXJ0dWFsIElucHV0RWxlbWVudERhdGEgZGF0YSgpIGNvbnN0IHsg
cmV0dXJuIG1fZGF0YTsgfQorICAgIGJvb2wgaXNDb25mb3JtVG9JbnB1dE1hc2soVUNoYXIsIHVu
c2lnbmVkKSBjb25zdDsKKyAgICBTdHJpbmcgdmFsaWRhdGVJbnB1dE1hc2soU3RyaW5nJik7CiAj
ZW5kaWYKIAotICAgIElucHV0RWxlbWVudERhdGEgbV9kYXRhOworICAgIEF0b21pY1N0cmluZyBt
X25hbWU7CisgICAgU3RyaW5nIG1fdmFsdWU7CisgICAgU3RyaW5nIG1fc3VnZ2VzdGVkVmFsdWU7
CisgICAgaW50IG1fc2l6ZTsKKyAgICBpbnQgbV9tYXhMZW5ndGg7CisgICAgaW50IG1fY2FjaGVk
U2VsZWN0aW9uU3RhcnQ7CisgICAgaW50IG1fY2FjaGVkU2VsZWN0aW9uRW5kOworI2lmIEVOQUJM
RShXQ1NTKQorICAgIFN0cmluZyBtX2lucHV0Rm9ybWF0TWFzazsKKyAgICB1bnNpZ25lZCBtX21h
eElucHV0Q2hhcnNBbGxvd2VkOworI2VuZGlmCiAgICAgc2hvcnQgbV9tYXhSZXN1bHRzOwogICAg
IGJvb2wgbV9pc0NoZWNrZWQgOiAxOwogICAgIGJvb2wgbV9yZWZsZWN0c0NoZWNrZWRBdHRyaWJ1
dGUgOiAxOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKaW5k
ZXggZTA0NjNmZmRlNzkxMjVmYmEyYjE0NmM0Njg0OGM3NGJkN2UwMTcxZS4uYTI5OWIxOGM2MWUx
OWY0MTJkZWUwMzljZGY5MDljMWZhMWZjNTIyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxUZXh0QXJlYUVsZW1lbnQuY3BwCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSAiRm9ybURh
dGFMaXN0LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNp
bmNsdWRlICJJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyU3R5bGUuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZS5oIgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9JbnB1dFR5cGUuY3BwCmluZGV4IGM4ODJjZDVjNGI4ZWMzMWMxMmZmZTYxNzliMjhl
NTI0ZWUxMTMwYTQuLjZiMzU5ZWY4OTg0MGQ1MTcwZGE3NTQ0MTI5YjI0YWVjN2FlNmNkZDAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAKQEAgLTMyNiw5ICszMjYsOCBAQCB2b2lkIElucHV0
VHlwZTo6aGFuZGxlS2V5dXBFdmVudChLZXlib2FyZEV2ZW50KikKIHsKIH0KIAotdm9pZCBJbnB1
dFR5cGU6OmhhbmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KEJlZm9yZVRleHRJbnNlcnRlZEV2
ZW50KiBldmVudCkKK3ZvaWQgSW5wdXRUeXBlOjpoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVu
dChCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCopCiB7Ci0gICAgZWxlbWVudCgpLT5oYW5kbGVCZWZv
cmVUZXh0SW5zZXJ0ZWRFdmVudChldmVudCk7CiB9CiAKIHZvaWQgSW5wdXRUeXBlOjpoYW5kbGVX
aGVlbEV2ZW50KFdoZWVsRXZlbnQqKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9U
ZXh0RmllbGRJbnB1dFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1
dFR5cGUuY3BwCmluZGV4IGZmZWEyZjRlMGIwY2FhZDQ0YjgzNWE2ZDIwYWI1OTljNmQ3YTRjOTQu
LjY1NjMwNDk2MWE0MGY5NWNjNjFkYTZjMDAyYWJmNWNlZDIyMTM1MTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAKQEAgLTMyLDExICszMiwxMyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRleHRGaWVsZElucHV0VHlwZS5oIgogCisjaW5j
bHVkZSAiQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2lu
Y2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCiAj
aW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgiCiAjaW5jbHVkZSAiVGV4dEV2
ZW50LmgiCisjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiV2hlZWxFdmVudC5o
IgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC0xMTksOSArMTIxLDcyIEBA
IGJvb2wgVGV4dEZpZWxkSW5wdXRUeXBlOjpzaG91bGRVc2VJbnB1dE1ldGhvZCgpIGNvbnN0CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRpYyBTdHJpbmcgcmVwbGFjZUVPTEFuZExpbWl0TGVu
Z3RoKGNvbnN0IFN0cmluZyYgcHJvcG9zZWRWYWx1ZSwgaW50IG1heExlbmd0aCkKK3sKKyAgICBT
dHJpbmcgc3RyaW5nID0gcHJvcG9zZWRWYWx1ZTsKKyAgICBzdHJpbmcucmVwbGFjZSgiXHJcbiIs
ICIgIik7CisgICAgc3RyaW5nLnJlcGxhY2UoJ1xyJywgJyAnKTsKKyAgICBzdHJpbmcucmVwbGFj
ZSgnXG4nLCAnICcpOworCisgICAgdW5zaWduZWQgbmV3TGVuZ3RoID0gbnVtQ2hhcmFjdGVyc0lu
R3JhcGhlbWVDbHVzdGVycyhzdHJpbmcsIG1heExlbmd0aCk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG5ld0xlbmd0aDsgKytpKSB7CisgICAgICAgIGNvbnN0IFVDaGFyIGN1cnJlbnQg
PSBzdHJpbmdbaV07CisgICAgICAgIGlmIChjdXJyZW50IDwgJyAnICYmIGN1cnJlbnQgIT0gJ1x0
JykgeworICAgICAgICAgICAgbmV3TGVuZ3RoID0gaTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQorICAgIHJldHVybiBzdHJpbmcubGVmdChuZXdMZW5ndGgpOworfQorCiBT
dHJpbmcgVGV4dEZpZWxkSW5wdXRUeXBlOjpzYW5pdGl6ZVZhbHVlKGNvbnN0IFN0cmluZyYgcHJv
cG9zZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4gSW5wdXRFbGVtZW50OjpzYW5pdGl6ZVZhbHVlRm9y
VGV4dEZpZWxkKGVsZW1lbnQoKSwgcHJvcG9zZWRWYWx1ZSk7CisjaWYgRU5BQkxFKFdDU1MpCisg
ICAgaWYgKCFlbGVtZW50KCktPmlzQ29uZm9ybVRvSW5wdXRNYXNrKHByb3Bvc2VkVmFsdWUpKSB7
CisgICAgICAgIGlmIChpc0NvbmZvcm1Ub0lucHV0TWFzayhlbGVtZW50KCktPnZhbHVlKCkpKQor
ICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQtPnZhbHVlKCk7CisgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKyAgICB9CisjZW5kaWYKKyAgICByZXR1cm4gcmVwbGFjZUVPTEFuZExpbWl0TGVuZ3Ro
KHByb3Bvc2VkVmFsdWUsIEhUTUxJbnB1dEVsZW1lbnQ6Om1heGltdW1MZW5ndGgpOworfQorCit2
b2lkIFRleHRGaWVsZElucHV0VHlwZTo6aGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoQmVm
b3JlVGV4dEluc2VydGVkRXZlbnQqIGV2ZW50KQoreworICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRo
ZSB0ZXh0IHRvIGJlIGluc2VydGVkIHdpbGwgbm90IHZpb2xhdGUgdGhlIG1heExlbmd0aC4KKwor
ICAgIC8vIFdlIHVzZSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnRleHQoKSBpbnN0ZWFk
IG9mIElucHV0RWxlbWVudDo6dmFsdWUoKQorICAgIC8vIGJlY2F1c2UgdGhleSBjYW4gYmUgbWlz
bWF0Y2hlZCBieSBzYW5pdGl6ZVZhbHVlKCkgaW4KKyAgICAvLyBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6OnN1YnRyZWVIYXNDaGFuZ2VkKCkgaW4gc29tZSBjYXNlcy4KKyAgICB1bnNpZ25l
ZCBvbGRMZW5ndGggPSBudW1HcmFwaGVtZUNsdXN0ZXJzKHRvUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lKGVsZW1lbnQoKS0+cmVuZGVyZXIoKSktPnRleHQoKSk7CisKKyAgICAvLyBzZWxlY3Rp
b25MZW5ndGggcmVwcmVzZW50cyB0aGUgc2VsZWN0aW9uIGxlbmd0aCBvZiB0aGlzIHRleHQgZmll
bGQgdG8gYmUKKyAgICAvLyByZW1vdmVkIGJ5IHRoaXMgaW5zZXJ0aW9uLgorICAgIC8vIElmIHRo
ZSB0ZXh0IGZpZWxkIGhhcyBubyBmb2N1cywgd2UgZG9uJ3QgbmVlZCB0byB0YWtlIGFjY291bnQg
b2YgdGhlCisgICAgLy8gc2VsZWN0aW9uIGxlbmd0aC4gVGhlIHNlbGVjdGlvbiBpcyB0aGUgc291
cmNlIG9mIHRleHQgZHJhZy1hbmQtZHJvcCBpbgorICAgIC8vIHRoYXQgY2FzZSwgYW5kIG5vdGhp
bmcgaW4gdGhlIHRleHQgZmllbGQgd2lsbCBiZSByZW1vdmVkLgorICAgIHVuc2lnbmVkIHNlbGVj
dGlvbkxlbmd0aCA9IGVsZW1lbnQoKS0+Zm9jdXNlZCgpID8gbnVtR3JhcGhlbWVDbHVzdGVycyhw
bGFpblRleHQoZWxlbWVudCgpLT5kb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2Vs
ZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSkpIDogMDsKKyAgICBBU1NFUlQob2xk
TGVuZ3RoID49IHNlbGVjdGlvbkxlbmd0aCk7CisKKyAgICAvLyBTZWxlY3RlZCBjaGFyYWN0ZXJz
IHdpbGwgYmUgcmVtb3ZlZCBieSB0aGUgbmV4dCB0ZXh0IGV2ZW50LgorICAgIHVuc2lnbmVkIGJh
c2VMZW5ndGggPSBvbGRMZW5ndGggLSBzZWxlY3Rpb25MZW5ndGg7CisgICAgdW5zaWduZWQgbWF4
TGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlzVGV4dFR5cGUoKSA/IGVsZW1lbnQoKS0+
bWF4TGVuZ3RoKCkgOiBIVE1MSW5wdXRFbGVtZW50OjptYXhpbXVtTGVuZ3RoKTsgLy8gbWF4TGVu
Z3RoIGNhbiBuZXZlciBiZSBuZWdhdGl2ZS4KKyAgICB1bnNpZ25lZCBhcHBlbmRhYmxlTGVuZ3Ro
ID0gbWF4TGVuZ3RoID4gYmFzZUxlbmd0aCA/IG1heExlbmd0aCAtIGJhc2VMZW5ndGggOiAwOwor
CisgICAgLy8gVHJ1bmNhdGUgdGhlIGluc2VydGVkIHRleHQgdG8gYXZvaWQgdmlvbGF0aW5nIHRo
ZSBtYXhMZW5ndGggYW5kIG90aGVyIGNvbnN0cmFpbnRzLgorI2lmIEVOQUJMRShXQ1NTKQorICAg
IFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBlbGVtZW50KCktPmRvY3VtZW50KCktPmZyYW1lKCktPnNl
bGVjdGlvbigpLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIFN0cmluZyBj
YW5kaWRhdGVTdHJpbmcgPSB0b1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShlbGVtZW50KCkt
PnJlbmRlcmVyKCkpLT50ZXh0KCk7CisgICAgaWYgKHNlbGVjdGlvbkxlbmd0aCkKKyAgICAgICAg
Y2FuZGlkYXRlU3RyaW5nLnJlcGxhY2UocmFuZ2UtPnN0YXJ0T2Zmc2V0KCksIHJhbmdlLT5lbmRP
ZmZzZXQoKSwgZXZlbnQtPnRleHQoKSk7CisgICAgZWxzZQorICAgICAgICBjYW5kaWRhdGVTdHJp
bmcuaW5zZXJ0KGV2ZW50LT50ZXh0KCksIHJhbmdlLT5zdGFydE9mZnNldCgpKTsKKyAgICBpZiAo
IWVsZW1lbnQoKS0+aXNDb25mb3JtVG9JbnB1dE1hc2soY2FuZGlkYXRlU3RyaW5nKSkgeworICAg
ICAgICBldmVudC0+c2V0VGV4dCgiIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYK
KyAgICBldmVudC0+c2V0VGV4dChyZXBsYWNlRU9MQW5kTGltaXRMZW5ndGgoZXZlbnQtPnRleHQo
KSwgYXBwZW5kYWJsZUxlbmd0aCkpOwogfQogCiBib29sIFRleHRGaWVsZElucHV0VHlwZTo6c2hv
dWxkUmVzcGVjdExpc3RBdHRyaWJ1dGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9UZXh0RmllbGRJbnB1dFR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5w
dXRUeXBlLmgKaW5kZXggODZhZDBlZjFhY2Q0YmE2YjE5ZjExYmE4NmNhYTRhMDg3MTg0ZTE4Yy4u
ZjU4NWFiYjE3NGI1ODcwODdkZjlhNWU5MDRmNGYzNDYxNzJhMTlmOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5oCkBAIC00OCwxMSArNDgsMTIgQEAgcHJvdGVjdGVk
OgogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0RmllbGQoKSBjb25zdDsKICAgICB2
aXJ0dWFsIGJvb2wgdmFsdWVNaXNzaW5nKGNvbnN0IFN0cmluZyYpIGNvbnN0OworICAgIHZpcnR1
YWwgdm9pZCBoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudChCZWZvcmVUZXh0SW5zZXJ0ZWRF
dmVudCopOwogICAgIHZpcnR1YWwgdm9pZCBmb3J3YXJkRXZlbnQoRXZlbnQqKTsKICAgICB2aXJ0
dWFsIGJvb2wgc2hvdWxkU3VibWl0SW1wbGljaXRseShFdmVudCopOwogICAgIHZpcnR1YWwgUmVu
ZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKikgY29u
c3Q7CiAgICAgdmlydHVhbCBib29sIHNob3VsZFVzZUlucHV0TWV0aG9kKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBTdHJpbmcgc2FuaXRpemVWYWx1ZShjb25zdCBTdHJpbmcmIHByb3Bvc2VkVmFsdWUp
OworICAgIHZpcnR1YWwgU3RyaW5nIHNhbml0aXplVmFsdWUoY29uc3QgU3RyaW5nJik7CiAgICAg
dmlydHVhbCBib29sIHNob3VsZFJlc3BlY3RMaXN0QXR0cmlidXRlKCk7CiB9OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmUuY3BwCmluZGV4IDJhZGI4MmEyZTU0MWExOWE1NDhjYzM5MDI3YzBiYzgzZjQ5NzE5MTAuLjhk
YTk0YmE1MzI3ODkyMGU5M2E3YzMwNDIxM2QxNmM1YjcxNWY4ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3Bw
CkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKLSNpbmNsdWRlICJJ
bnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCiAjaW5jbHVkZSAi
TW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgpAQCAtNzUs
NiArNzQsOCBAQCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OlJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZShOb2RlKiBub2RlLCBib29sIHBsYWNlaAogICAgICwgbV9zZWFyY2hFdmVudFRp
bWVyKHRoaXMsICZSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNlYXJjaEV2ZW50VGltZXJG
aXJlZCkKICAgICAsIG1fc2VhcmNoUG9wdXAoMCkKIHsKKyAgICBBU1NFUlQobm9kZS0+aXNIVE1M
RWxlbWVudCgpKTsKKyAgICBBU1NFUlQobm9kZS0+dG9JbnB1dEVsZW1lbnQoKSk7CiB9CiAKIFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6flJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZSgp
CkBAIC0xMDYsOCArMTA3LDcgQEAgUmVuZGVyU3R5bGUqIFJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZTo6dGV4dEJhc2VTdHlsZSgpIGNvbnN0CiAKIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjphZGRTZWFyY2hSZXN1bHQoKQogewotICAgIEFTU0VSVChub2RlKCktPmlzSFRNTEVs
ZW1lbnQoKSk7Ci0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1M
SW5wdXRFbGVtZW50Kj4obm9kZSgpKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IGlu
cHV0RWxlbWVudCgpOwogICAgIGlmIChpbnB1dC0+bWF4UmVzdWx0cygpIDw9IDApCiAgICAgICAg
IHJldHVybjsKIApAQCAtMTM4LDEzICsxMzgsMTEgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6OmFkZFNlYXJjaFJlc3VsdCgpCiAKIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjpzdG9wU2VhcmNoRXZlbnRUaW1lcigpCiB7Ci0gICAgQVNTRVJUKG5vZGUoKS0+aXNI
VE1MRWxlbWVudCgpKTsKICAgICBtX3NlYXJjaEV2ZW50VGltZXIuc3RvcCgpOwogfQogCiB2b2lk
IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2hvd1BvcHVwKCkKIHsKLSAgICBBU1NFUlQo
bm9kZSgpLT5pc0hUTUxFbGVtZW50KCkpOwogICAgIGlmIChtX3NlYXJjaFBvcHVwSXNWaXNpYmxl
KQogICAgICAgICByZXR1cm47CiAKQEAgLTE2MCw3ICsxNTgsNyBAQCB2b2lkIFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6c2hvd1BvcHVwKCkKICAgICBtX3NlYXJjaFBvcHVwLT5sb2FkUmVj
ZW50U2VhcmNoZXMobmFtZSwgbV9yZWNlbnRTZWFyY2hlcyk7CiAKICAgICAvLyBUcmltIHRoZSBy
ZWNlbnQgc2VhcmNoZXMgbGlzdCBpZiB0aGUgbWF4aW11bSBzaXplIGhhcyBjaGFuZ2VkIHNpbmNl
IHdlIGxhc3Qgc2F2ZWQuCi0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2Fz
dDxIVE1MSW5wdXRFbGVtZW50Kj4obm9kZSgpKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1
dCA9IGlucHV0RWxlbWVudCgpOwogICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ+KG1fcmVjZW50U2Vh
cmNoZXMuc2l6ZSgpKSA+IGlucHV0LT5tYXhSZXN1bHRzKCkpIHsKICAgICAgICAgZG8gewogICAg
ICAgICAgICAgbV9yZWNlbnRTZWFyY2hlcy5yZW1vdmVMYXN0KCk7CkBAIC0xNzQsNyArMTcyLDYg
QEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNob3dQb3B1cCgpCiAKIHZvaWQg
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpoaWRlUG9wdXAoKQogewotICAgIEFTU0VSVChu
b2RlKCktPmlzSFRNTEVsZW1lbnQoKSk7CiAgICAgaWYgKG1fc2VhcmNoUG9wdXApCiAgICAgICAg
IG1fc2VhcmNoUG9wdXAtPnBvcHVwTWVudSgpLT5oaWRlKCk7CiB9CkBAIC0xODgsMTggKzE4NSwx
NiBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c3VidHJlZUhhc0NoYW5nZWQo
KQogICAgIGJvb2wgd2FzQ2hhbmdlZCA9IGVsZW1lbnQtPndhc0NoYW5nZWRTaW5jZUxhc3RGb3Jt
Q29udHJvbENoYW5nZUV2ZW50KCk7CiAgICAgZWxlbWVudC0+c2V0Q2hhbmdlZFNpbmNlTGFzdEZv
cm1Db250cm9sQ2hhbmdlRXZlbnQodHJ1ZSk7CiAKLSAgICBJbnB1dEVsZW1lbnQqIGlucHV0ID0g
aW5wdXRFbGVtZW50KCk7CisgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBpbnB1dEVsZW1l
bnQoKTsKICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGNhbGwgc2FuaXRpemVVc2VySW5wdXRWYWx1
ZSgpIGZ1bmN0aW9uIGhlcmUgYmVjYXVzZQotICAgIC8vIElucHV0RWxlbWVudDo6aGFuZGxlQmVm
b3JlVGV4dEluc2VydGVkRXZlbnQoKSBoYXMgYWxyZWFkeSBjYWxsZWQKKyAgICAvLyBIVE1MSW5w
dXRFbGVtZW50OjpoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCgpIGhhcyBhbHJlYWR5IGNh
bGxlZAogICAgIC8vIHNhbml0aXplVXNlcklucHV0VmFsdWUoKS4KICAgICAvLyBzYW5pdGl6ZVZh
bHVlKCkgaXMgbmVlZGVkIGJlY2F1c2UgSU1FIGlucHV0IGRvZXNuJ3QgZGlzcGF0Y2ggQmVmb3Jl
VGV4dEluc2VydGVkRXZlbnQuCiAgICAgU3RyaW5nIHZhbHVlID0gdGV4dCgpOwogICAgIGlmIChp
bnB1dC0+aXNBY2NlcHRhYmxlVmFsdWUodmFsdWUpKQogICAgICAgICBpbnB1dC0+c2V0VmFsdWVG
cm9tUmVuZGVyZXIoaW5wdXQtPnNhbml0aXplVmFsdWUoaW5wdXQtPmNvbnZlcnRGcm9tVmlzaWJs
ZVZhbHVlKHZhbHVlKSkpOwotICAgIGlmIChub2RlKCktPmlzSFRNTEVsZW1lbnQoKSkgewotICAg
ICAgICAvLyBSZWNhbGMgZm9yIDppbnZhbGlkIGFuZCBoYXNVbmFjY2VwdGFibGVWYWx1ZSgpIGNo
YW5nZS4KLSAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGlucHV0KS0+c2V0
TmVlZHNTdHlsZVJlY2FsYygpOwotICAgIH0KKyAgICAvLyBSZWNhbGMgZm9yIDppbnZhbGlkIGFu
ZCBoYXNVbmFjY2VwdGFibGVWYWx1ZSgpIGNoYW5nZS4KKyAgICBpbnB1dC0+c2V0TmVlZHNTdHls
ZVJlY2FsYygpOwogCiAgICAgaWYgKG1fY2FuY2VsQnV0dG9uKQogICAgICAgICB1cGRhdGVDYW5j
ZWxCdXR0b25WaXNpYmlsaXR5KCk7CkBAIC03MTAsNyArNzA1LDcgQEAgdm9pZCBSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmU6OnVwZGF0ZUZyb21FbGVtZW50KCkKICAgICAgICAgICAgIC8vIEZv
ciBIVE1MSW5wdXRFbGVtZW50LCB1cGRhdGUgdGhlIHJlbmRlcmVyIHZhbHVlIGlmIHRoZSBmb3Jt
Q29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKCkKICAgICAgICAgICAgIC8vIGZsYWcgaXMgZmFs
c2UuIEl0IHByb3RlY3RzIGFuIHVuYWNjZXB0YWJsZSByZW5kZXJlciB2YWx1ZSBmcm9tCiAgICAg
ICAgICAgICAvLyBiZWluZyBvdmVyd3JpdHRlbiB3aXRoIHRoZSBET00gdmFsdWUuCi0gICAgICAg
ICAgICBpZiAoIXN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihub2RlKCkpLT5mb3JtQ29u
dHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKCkpCisgICAgICAgICAgICBpZiAoIWlucHV0RWxlbWVu
dCgpLT5mb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKCkpCiAgICAgICAgICAgICAgICAg
c2V0SW5uZXJUZXh0VmFsdWUoaW5wdXRFbGVtZW50KCktPnZpc2libGVWYWx1ZSgpKTsKICAgICAg
ICAgfQogICAgIH0KQEAgLTc1NSw4ICs3NTAsNiBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZUlubmVyVGV4dFN0eWxlKGNvbnN0CiAK
IFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y3Jl
YXRlSW5uZXJCbG9ja1N0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBzdGFydFN0eWxlKSBjb25zdAog
ewotICAgIEFTU0VSVChub2RlKCktPmlzSFRNTEVsZW1lbnQoKSk7Ci0KICAgICBSZWZQdHI8UmVu
ZGVyU3R5bGU+IGlubmVyQmxvY2tTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKICAgICBp
bm5lckJsb2NrU3R5bGUtPmluaGVyaXRGcm9tKHN0YXJ0U3R5bGUpOwogCkBAIC03NzEsOCArNzY0
LDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
OjpjcmVhdGVJbm5lckJsb2NrU3R5bGUoY29uc3QKIAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4g
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjcmVhdGVSZXN1bHRzQnV0dG9uU3R5bGUoY29u
c3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKG5vZGUoKS0+
aXNIVE1MRWxlbWVudCgpKTsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19j
YXN0PEhUTUxJbnB1dEVsZW1lbnQqPihub2RlKCkpOworICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlu
cHV0ID0gaW5wdXRFbGVtZW50KCk7CiAKICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHJlc3VsdHNC
bG9ja1N0eWxlOwogICAgIGlmIChpbnB1dC0+bWF4UmVzdWx0cygpIDwgMCkKQEAgLTc5Myw3ICs3
ODUsNiBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmU6OmNyZWF0ZVJlc3VsdHNCdXR0b25TdHlsZShjbwogCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxl
PiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZUNhbmNlbEJ1dHRvblN0eWxlKGNv
bnN0IFJlbmRlclN0eWxlKiBzdGFydFN0eWxlKSBjb25zdAogewotICAgIEFTU0VSVChub2RlKCkt
PmlzSFRNTEVsZW1lbnQoKSk7CiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBjYW5jZWxCbG9ja1N0
eWxlOwogICAgIAogICAgIGlmIChSZWZQdHI8UmVuZGVyU3R5bGU+IHBzZXVkb1N0eWxlID0gZ2V0
Q2FjaGVkUHNldWRvU3R5bGUoU0VBUkNIX0NBTkNFTF9CVVRUT04pKQpAQCAtODExLDcgKzgwMiw2
IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6
Y3JlYXRlQ2FuY2VsQnV0dG9uU3R5bGUoY29uCiAKIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y3JlYXRlSW5uZXJTcGluQnV0dG9uU3R5bGUoKSBj
b25zdAogewotICAgIEFTU0VSVChub2RlKCktPmlzSFRNTEVsZW1lbnQoKSk7CiAgICAgUmVmUHRy
PFJlbmRlclN0eWxlPiBidXR0b25TdHlsZSA9IGdldENhY2hlZFBzZXVkb1N0eWxlKElOTkVSX1NQ
SU5fQlVUVE9OKTsKICAgICBpZiAoIWJ1dHRvblN0eWxlKQogICAgICAgICBidXR0b25TdHlsZSA9
IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKQEAgLTgyMSw3ICs4MTEsNiBAQCBQYXNzUmVmUHRyPFJl
bmRlclN0eWxlPiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZUlubmVyU3BpbkJ1
dHRvblN0eWxlKAogCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6OmNyZWF0ZU91dGVyU3BpbkJ1dHRvblN0eWxlKCkgY29uc3QKIHsKLSAgICBBU1NF
UlQobm9kZSgpLT5pc0hUTUxFbGVtZW50KCkpOwogICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gYnV0
dG9uU3R5bGUgPSBnZXRDYWNoZWRQc2V1ZG9TdHlsZShPVVRFUl9TUElOX0JVVFRPTik7CiAgICAg
aWYgKCFidXR0b25TdHlsZSkKICAgICAgICAgYnV0dG9uU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3Jl
YXRlKCk7CkBAIC04MzIsNyArODIxLDYgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjcmVhdGVPdXRlclNwaW5CdXR0b25TdHlsZSgKICNpZiBF
TkFCTEUoSU5QVVRfU1BFRUNIKQogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lOjpjcmVhdGVTcGVlY2hCdXR0b25TdHlsZSgpIGNvbnN0CiB7Ci0gICAg
QVNTRVJUKG5vZGUoKS0+aXNIVE1MRWxlbWVudCgpKTsKICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+
IGJ1dHRvblN0eWxlID0gZ2V0Q2FjaGVkUHNldWRvU3R5bGUoSU5QVVRfU1BFRUNIX0JVVFRPTik7
CiAgICAgaWYgKCFidXR0b25TdHlsZSkKICAgICAgICAgYnV0dG9uU3R5bGUgPSBSZW5kZXJTdHls
ZTo6Y3JlYXRlKCk7CkBAIC04NTgsOSArODQ2LDcgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6OnVwZGF0ZUNhbmNlbEJ1dHRvblZpc2liaWxpdHkoKSBjb25zdAogCiBFVmlzaWJp
bGl0eSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnZpc2liaWxpdHlGb3JDYW5jZWxCdXR0
b24oKSBjb25zdAogewotICAgIEFTU0VSVChub2RlKCktPmlzSFRNTEVsZW1lbnQoKSk7Ci0gICAg
SFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4o
bm9kZSgpKTsKLSAgICByZXR1cm4gaW5wdXQtPnZhbHVlKCkuaXNFbXB0eSgpID8gSElEREVOIDog
VklTSUJMRTsKKyAgICByZXR1cm4gaW5wdXRFbGVtZW50KCktPnZhbHVlKCkuaXNFbXB0eSgpID8g
SElEREVOIDogVklTSUJMRTsKIH0KIAogY29uc3QgQXRvbWljU3RyaW5nJiBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OmF1dG9zYXZlTmFtZSgpIGNvbnN0CkBAIC04NzAsMTMgKzg1NiwxMiBA
QCBjb25zdCBBdG9taWNTdHJpbmcmIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6YXV0b3Nh
dmVOYW1lKCkgY29uc3QKIAogdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnN0YXJ0
U2VhcmNoRXZlbnRUaW1lcigpCiB7Ci0gICAgQVNTRVJUKG5vZGUoKS0+aXNIVE1MRWxlbWVudCgp
KTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSB0ZXh0KCkubGVuZ3RoKCk7CiAKICAgICAvLyBJZiB0
aGVyZSdzIG5vIHRleHQsIGZpcmUgdGhlIGV2ZW50IHJpZ2h0IGF3YXkuCiAgICAgaWYgKCFsZW5n
dGgpIHsKICAgICAgICAgc3RvcFNlYXJjaEV2ZW50VGltZXIoKTsKLSAgICAgICAgc3RhdGljX2Nh
c3Q8SFRNTElucHV0RWxlbWVudCo+KG5vZGUoKSktPm9uU2VhcmNoKCk7CisgICAgICAgIGlucHV0
RWxlbWVudCgpLT5vblNlYXJjaCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC04ODcs
MTYgKzg3MiwxNCBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c3RhcnRTZWFy
Y2hFdmVudFRpbWVyKCkKIAogdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNlYXJj
aEV2ZW50VGltZXJGaXJlZChUaW1lcjxSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU+KikKIHsK
LSAgICBBU1NFUlQobm9kZSgpLT5pc0hUTUxFbGVtZW50KCkpOwotICAgIHN0YXRpY19jYXN0PEhU
TUxJbnB1dEVsZW1lbnQqPihub2RlKCkpLT5vblNlYXJjaCgpOworICAgIGlucHV0RWxlbWVudCgp
LT5vblNlYXJjaCgpOwogfQogCiAvLyBQb3B1cE1lbnVDbGllbnQgbWV0aG9kcwogdm9pZCBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnZhbHVlQ2hhbmdlZCh1bnNpZ25lZCBsaXN0SW5kZXgs
IGJvb2wgZmlyZUV2ZW50cykKIHsKLSAgICBBU1NFUlQobm9kZSgpLT5pc0hUTUxFbGVtZW50KCkp
OwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KGxpc3RJbmRleCkgPCBsaXN0U2l6ZSgpKTsK
LSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1l
bnQqPihub2RlKCkpOworICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gaW5wdXRFbGVtZW50
KCk7CiAgICAgaWYgKHN0YXRpY19jYXN0PGludD4obGlzdEluZGV4KSA9PSAobGlzdFNpemUoKSAt
IDEpKSB7CiAgICAgICAgIGlmIChmaXJlRXZlbnRzKSB7CiAgICAgICAgICAgICBtX3JlY2VudFNl
YXJjaGVzLmNsZWFyKCk7CkBAIC0xMDMwLDggKzEwMTMsNyBAQCBib29sIFJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6aXRlbUlzU2VsZWN0ZWQodW5zaWduZWQpIGNvbnN0CiAKIHZvaWQgUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzZXRUZXh0RnJvbUl0ZW0odW5zaWduZWQgbGlzdElu
ZGV4KQogewotICAgIEFTU0VSVChub2RlKCktPmlzSFRNTEVsZW1lbnQoKSk7Ci0gICAgc3RhdGlj
X2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5vZGUoKSktPnNldFZhbHVlKGl0ZW1UZXh0KGxpc3RJ
bmRleCkpOworICAgIGlucHV0RWxlbWVudCgpLT5zZXRWYWx1ZShpdGVtVGV4dChsaXN0SW5kZXgp
KTsKIH0KIAogRm9udFNlbGVjdG9yKiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmZvbnRT
ZWxlY3RvcigpIGNvbnN0CkBAIC0xMTE4LDcgKzExMDAsNyBAQCBQYXNzUmVmUHRyPFNjcm9sbGJh
cj4gUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYWJs
ZUFyZQogICAgIHJldHVybiB3aWRnZXQucmVsZWFzZSgpOwogfQogCi1JbnB1dEVsZW1lbnQqIFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aW5wdXRFbGVtZW50KCkgY29uc3QKK0hUTUxJbnB1
dEVsZW1lbnQqIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aW5wdXRFbGVtZW50KCkgY29u
c3QKIHsKICAgICByZXR1cm4gbm9kZSgpLT50b0lucHV0RWxlbWVudCgpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5o
CmluZGV4IDE4ZTVmYzhiYzQ5MDNiM2MyYjhjNWEyZjUzN2NkODhjNjc4YTZlYmEuLmY0M2FhMWIz
YTlhZDJiMjA1ODBhMWFmOTQwZTEyY2U0ZGYyM2E4YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgKQEAgLTMwLDcg
KzMwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBJbnB1dEVsZW1lbnQ7Citj
bGFzcyBIVE1MSW5wdXRFbGVtZW50OwogY2xhc3MgSW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1l
bnQ7CiBjbGFzcyBTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbkVsZW1lbnQ7CiBjbGFzcyBTZWFyY2hG
aWVsZFJlc3VsdHNCdXR0b25FbGVtZW50OwpAQCAtMTQyLDcgKzE0Miw3IEBAIHByaXZhdGU6CiAg
ICAgdmlydHVhbCBIb3N0V2luZG93KiBob3N0V2luZG93KCkgY29uc3Q7CiAgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhKiwgU2Ny
b2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplKTsKIAotICAgIElucHV0RWxl
bWVudCogaW5wdXRFbGVtZW50KCkgY29uc3Q7CisgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRF
bGVtZW50KCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGludCB0ZXh0QmxvY2tJbnNldExlZnQoKSBj
b25zdDsKICAgICB2aXJ0dWFsIGludCB0ZXh0QmxvY2tJbnNldFJpZ2h0KCkgY29uc3Q7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAppbmRleCBjMmMwOWVkYTNmZDI1YWEy
ZjNjNTJiODYwYTBlYjJiMDY2Njk1YTFlLi40Njk0MDU0NWFlNTQwNTExNjUzYTQzMDNiNjc2N2Y0
ODBjODc5NzNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKQEAg
LTc1MSw3ICs3NTEsNyBAQCBib29sIFJlbmRlclRoZW1lOjppc0NoZWNrZWQoY29uc3QgUmVuZGVy
T2JqZWN0KiBvKSBjb25zdAogICAgIGlmICghby0+bm9kZSgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IG8tPm5vZGUoKS0+dG9JbnB1
dEVsZW1lbnQoKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBvLT5ub2Rl
KCktPnRvSW5wdXRFbGVtZW50KCk7CiAgICAgaWYgKCFpbnB1dEVsZW1lbnQpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIApAQCAtNzYzLDcgKzc2Myw3IEBAIGJvb2wgUmVuZGVyVGhlbWU6OmlzSW5k
ZXRlcm1pbmF0ZShjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0CiAgICAgaWYgKCFvLT5ub2Rl
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIElucHV0RWxlbWVudCogaW5wdXRFbGVt
ZW50ID0gby0+bm9kZSgpLT50b0lucHV0RWxlbWVudCgpOworICAgIEhUTUxJbnB1dEVsZW1lbnQq
IGlucHV0RWxlbWVudCA9IG8tPm5vZGUoKS0+dG9JbnB1dEVsZW1lbnQoKTsKICAgICBpZiAoIWlu
cHV0RWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC05NjUsNyArOTY1LDcgQEAg
dm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW4KIH0KICNlbmRpZgogCi1ib29sIFJlbmRlclRoZW1lOjpz
aG91bGRIYXZlU3BpbkJ1dHRvbihJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCkgY29uc3QKK2Jv
b2wgUmVuZGVyVGhlbWU6OnNob3VsZEhhdmVTcGluQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQqIGlu
cHV0RWxlbWVudCkgY29uc3QKIHsKICAgICByZXR1cm4gaW5wdXRFbGVtZW50LT5pc1N0ZXBwYWJs
ZSgpICYmICFpbnB1dEVsZW1lbnQtPmlzUmFuZ2VDb250cm9sKCk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZS5oCmluZGV4IGUxM2UxYmEwNDFlOTViMGRjMDBiMzE5NWY5NzEx
M2IwM2QyM2I5YzUuLjE1N2JhM2E1ZDJkOGFlNjhmYTk0MGI3MjhhZWY4OGNiNWFlMDNiZjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCkBAIC0zNiw2ICszNiw3IEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEVsZW1lbnQ7CitjbGFzcyBIVE1MSW5wdXRFbGVt
ZW50OwogY2xhc3MgUG9wdXBNZW51OwogY2xhc3MgUmVuZGVyTWVudUxpc3Q7CiAjaWYgRU5BQkxF
KE1FVEVSX1RBRykKQEAgLTIwMSw3ICsyMDIsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAKICAg
ICB2aXJ0dWFsIGJvb2wgc2hvdWxkU2hvd1BsYWNlaG9sZGVyV2hlbkZvY3VzZWQoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRIYXZlU3BpbkJ1dHRvbihJ
bnB1dEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSGF2ZVNwaW5CdXR0
b24oSFRNTElucHV0RWxlbWVudCopIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CiAgICAgLy8gVGhlIHBs
YXRmb3JtIHNlbGVjdGlvbiBjb2xvci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMGZk
ODNhZDVhN2VjZmQyNDZlYTE3ODc3ZTcxZGZkZmNlZTg1ZGQ3NS4uYWI3MTcyNzcxNjVmNTAxYmFi
NGJhYjE3MzRhYjgzMDY2NWY2OGQ2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNiBAQAorMjAxMS0wNS0wNSAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRWxpbWlu
YXRlIFdlYkNvcmUvZG9tL0lucHV0RWxlbWVudC57Y3BwLGh9CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDI2MgorCisgICAgICAgICogc3JjL1dlYklu
cHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYklucHV0RWxlbWVudDo6ZGVmYXVs
dE1heExlbmd0aCk6CisgICAgICAgICAgUmVwbGFjZSBJbnB1dEVsZW1lbnQ6OnNfbWF4aW11bUxl
bmd0aCB3aXRoIEhUTUxJbnB1dEVsZW1lbnQ6Om1heGltdW1MZW5ndGguCisgICAgICAgIChXZWJL
aXQ6OnRvV2ViSW5wdXRFbGVtZW50KToKKyAgICAgICAgICBGb2xsb3cgdGhlIHJldHVybiB0eXBl
IGNoYW5nZSBvZiBOb2RlOjp0b0lucHV0RWxlbWVudCgpLgorCiAyMDExLTA1LTA1ICBBZGFtIEJh
cnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUm9sbCBDaHJvbWl1bSBERVBTLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW5wdXRFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklucHV0RWxlbWVudC5jcHAKaW5kZXgg
MzQ0OGJiNmIzMjgwNmRiN2FkZDE0YTI2ZTEwNzViM2FlNjE2NDRmNi4uOGEyMWVkOTFkZmFiODc5
NDYxYTlmZTMyODc5NmExODYxZDZhZmVkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViSW5wdXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJJbnB1dEVsZW1lbnQuY3BwCkBAIC0xNTIsNyArMTUyLDcgQEAgYm9vbCBXZWJJbnB1
dEVsZW1lbnQ6OmlzQ2hlY2tlZCgpIGNvbnN0CiAKIGludCBXZWJJbnB1dEVsZW1lbnQ6OmRlZmF1
bHRNYXhMZW5ndGgoKQogewotICAgIHJldHVybiBIVE1MSW5wdXRFbGVtZW50OjpzX21heGltdW1M
ZW5ndGg7CisgICAgcmV0dXJuIEhUTUxJbnB1dEVsZW1lbnQ6Om1heGltdW1MZW5ndGg7CiB9CiAK
IFdlYklucHV0RWxlbWVudDo6V2ViSW5wdXRFbGVtZW50KGNvbnN0IFBhc3NSZWZQdHI8SFRNTElu
cHV0RWxlbWVudD4mIGVsZW0pCkBAIC0xNzMsMTIgKzE3MywxMCBAQCBXZWJJbnB1dEVsZW1lbnQ6
Om9wZXJhdG9yIFBhc3NSZWZQdHI8SFRNTElucHV0RWxlbWVudD4oKSBjb25zdAogCiBXZWJJbnB1
dEVsZW1lbnQqIHRvV2ViSW5wdXRFbGVtZW50KFdlYkVsZW1lbnQqIHdlYkVsZW1lbnQpCiB7Ci0g
ICAgSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSB3ZWJFbGVtZW50LT51bndyYXA8RWxlbWVu
dD4oKS0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1l
bnQgPSB3ZWJFbGVtZW50LT51bndyYXA8RWxlbWVudD4oKS0+dG9JbnB1dEVsZW1lbnQoKTsKICAg
ICBpZiAoIWlucHV0RWxlbWVudCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBBU1NFUlQod2Vi
RWxlbWVudC0+dW53cmFwPEVsZW1lbnQ+KCktPmlzSFRNTEVsZW1lbnQoKSk7Ci0KICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8V2ViSW5wdXRFbGVtZW50Kj4od2ViRWxlbWVudCk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0No
YW5nZUxvZwppbmRleCA3YTBiOTkxZTQzMGI4ODk5MWQ2YWQ4NWUwMTFlMDQyNmM2NjExYWJlLi5i
MzRjNmJkOTcxNzE5NzdjZmI3NDc4Nzc5MTQ4NzJjODA0MTk4NWE5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDUtMDUgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEVsaW1pbmF0ZSBXZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQue2NwcCxofQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAyNjIKKworICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHA6CisgICAgICAgIChEdW1w
UmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNldEF1dG9maWxsZWQpOgorICAgICAgICAgIEZvbGxvdyB0
aGUgcmV0dXJuIHR5cGUgY2hhbmdlIG9mIE5vZGU6OnRvSW5wdXRFbGVtZW50KCkuCisKIDIwMTEt
MDUtMDUgIEJoYXJhdGh3YWFqIFNyaW5pdmFzYW4gIDxiaGFyYXRod2Fhai5zQGdtYWlsLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBIb2xnZXIgRnJleXRoZXIuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3Bw
IGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0
R3RrLmNwcAppbmRleCAyOTAzY2VlZDliODIyNTZiOTg5Y2ZmZTRlYzY0YjNkOGM1NzgyZmE4Li5h
YjU2YTc0NjJmNmNjNGFmZTNlZDdmZjA3YWMwNGY1ZWIwYmZmNzBhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3Vw
cG9ydEd0ay5jcHAKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlICJHQ0NvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50
LmgiCi0jaW5jbHVkZSAiSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIK
ICNpbmNsdWRlICJKU0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiSlNFbGVtZW50LmgiCkBAIC03NTAs
MTEgKzc0OSwxMSBAQCB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6c2V0QXV0b2ZpbGxl
ZChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBubwogICAgIEVsZW1lbnQqIGVsZW1l
bnQgPSB0b0VsZW1lbnQodG9KUyhleGVjLCBub2RlT2JqZWN0KSk7CiAgICAgaWYgKCFlbGVtZW50
KQogICAgICAgICByZXR1cm47Ci0gICAgSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBlbGVt
ZW50LT50b0lucHV0RWxlbWVudCgpOworICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVu
dCA9IGVsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCk7CiAgICAgaWYgKCFpbnB1dEVsZW1lbnQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihpbnB1
dEVsZW1lbnQpLT5zZXRBdXRvZmlsbGVkKGF1dG9maWxsZWQpOworICAgIGlucHV0RWxlbWVudC0+
c2V0QXV0b2ZpbGxlZChhdXRvZmlsbGVkKTsKIH0KIAogdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRHdGs6OnNldFZhbHVlRm9yVXNlcihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBu
b2RlT2JqZWN0LCBKU1N0cmluZ1JlZiB2YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
cXQvQXBpL3F3ZWJwYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcApp
bmRleCBiNDU5Y2IyYTNiYWJkMDQwZDU5YzY5ODZjNDMxMzE0YWVkOGMyMGNiLi45NzVjNDRhMGRk
NTdmYjIyOWI0ZWQ1OGMwNDU5ZWI4NzEyZmE2YjM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L3F0L0FwaS9xd2VicGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2Uu
Y3BwCkBAIC0xNDQ2LDcgKzE0NDYsNyBAQCBRVmFyaWFudCBRV2ViUGFnZTo6aW5wdXRNZXRob2RR
dWVyeShRdDo6SW5wdXRNZXRob2RRdWVyeSBwcm9wZXJ0eSkgY29uc3QKICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBRVmFyaWFudChpbnB1dEVsZW1lbnQtPm1heExlbmd0aCgpKTsKICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gUVZhcmlhbnQoSW5wdXRFbGVtZW50OjpzX21heGltdW1MZW5ndGgpOworICAgICAgICAg
ICAgICAgIHJldHVybiBRVmFyaWFudChIVE1MSW5wdXRFbGVtZW50OjptYXhpbXVtTGVuZ3RoKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBRVmFyaWFudCgwKTsKICAgICAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L3F0L0NoYW5nZUxvZwppbmRleCAzZjQ0Mjk3ZTAzNTI3ZmEzNmIxZGJjOTQ5Yzg4ZTFiMWFjODI3
NTRjLi5iZmUzM2VlMWFkN2RlYmRmMTk5OTcyNTdkOWM2ZDhmMmY0ZTUxZjI5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDExLTA1LTA1ICBLZW50IFRhbXVyYSAgPHRrZW50QGNo
cm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBFbGltaW5hdGUgV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LntjcHAsaH0KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMjYyCisKKyAgICAgICAg
KiBBcGkvcXdlYnBhZ2UuY3BwOgorICAgICAgICAoUVdlYlBhZ2U6OmlucHV0TWV0aG9kUXVlcnkp
OgorICAgICAgICAgIFJlcGxhY2UgSW5wdXRFbGVtZW50OjpzX21heGltdW1MZW5ndGggd2l0aCBI
VE1MSW5wdXRFbGVtZW50OjptYXhpbXVtTGVuZ3RoLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcDoKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3Vw
cG9ydFF0OjpzZXRBdXRvZmlsbGVkKToKKyAgICAgICAgICBGb2xsb3cgdGhlIHJldHVybiB0eXBl
IGNoYW5nZSBvZiBOb2RlOjp0b0lucHV0RWxlbWVudCgpLgorCiAyMDExLTA1LTA1ICBQcmFzYW50
aCBVbGxhdHRpbCAgPHByYXNhbnRoLnVsbGF0dGlsQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBTaW1vbiBIYXVzbWFubi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2Vi
Q29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuY3BwIGIvU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5jcHAKaW5kZXggZTU1YWZl
ODcwYzZkZmMzNDg5M2E3ZjkwMmU5YjYwMDNlZWJkZTIzNS4uZTIzM2ZlMTFjMzMzZTg3NWQ5YTE3
MzRlZjRiYjEwMDE0MzQxNDIyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9XZWJDb3Jl
U3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9x
dC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5jcHAKQEAgLTUzLDcgKzUz
LDYgQEAKICNpbmNsdWRlICJHZW9sb2NhdGlvblBvc2l0aW9uLmgiCiAjaW5jbHVkZSAiSGlzdG9y
eUl0ZW0uaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCi0jaW5jbHVkZSAiSW5wdXRF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIk5v
ZGVMaXN0LmgiCiAjaW5jbHVkZSAiTm90aWZpY2F0aW9uUHJlc2VudGVyQ2xpZW50UXQuaCIKQEAg
LTI0MywxMSArMjQyLDExIEBAIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OnNldEF1dG9m
aWxsZWQoY29uc3QgUVdlYkVsZW1lbnQmIGVsZW1lbnQsIGJvb2wgaXNBCiAgICAgV2ViQ29yZTo6
RWxlbWVudCogd2ViRWxlbWVudCA9IGVsZW1lbnQubV9lbGVtZW50OwogICAgIGlmICghd2ViRWxl
bWVudCkKICAgICAgICAgcmV0dXJuOwotICAgIElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0g
d2ViRWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1
dEVsZW1lbnQgPSB3ZWJFbGVtZW50LT50b0lucHV0RWxlbWVudCgpOwogICAgIGlmICghaW5wdXRF
bGVtZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVt
ZW50Kj4oaW5wdXRFbGVtZW50KS0+c2V0QXV0b2ZpbGxlZChpc0F1dG9maWxsZWQpOworICAgIGlu
cHV0RWxlbWVudC0+c2V0QXV0b2ZpbGxlZChpc0F1dG9maWxsZWQpOwogfQogCiB2b2lkIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRKYXZhU2NyaXB0UHJvZmlsaW5nRW5hYmxlZChRV2ViRnJh
bWUqIGZyYW1lLCBib29sIGVuYWJsZWQpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92538</attachid>
            <date>2011-05-05 21:47:28 -0700</date>
            <delta_ts>2011-05-06 19:27:12 -0700</delta_ts>
            <desc>Patch 3</desc>
            <filename>bug-60262-20110506134726.patch</filename>
            <type>text/plain</type>
            <size>100024</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODU5MTUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNThhZGU1
NGEwZmIwYzliMmEyYmUwYTJjZGMyYmExODNmN2Y4YWM3Zi4uMmNmYTVlOThiMTZkODA2OTMxNDI5
ZTA0YzJmM2UwOWJkYTQxZGYwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTU3MCw3ICs1NzAs
NiBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgZG9tL0V4Y2VwdGlvbkJhc2UuY3BwCiAgICAg
ZG9tL0V4Y2VwdGlvbkNvZGUuY3BwCiAgICAgZG9tL0ljb25VUkwuY3BwCi0gICAgZG9tL0lucHV0
RWxlbWVudC5jcHAKICAgICBkb20vS2V5Ym9hcmRFdmVudC5jcHAKICAgICBkb20vTWVzc2FnZUNo
YW5uZWwuY3BwCiAgICAgZG9tL01lc3NhZ2VFdmVudC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjMWFjM2Uy
YzA4NjYwZjAwNjNjMzZiNTkyZjIyMjMyNGE3MDA1NGUzLi5hZGVkZjQ1MTkxZGNkNTJjNjk4MDRm
MDU2ZWM2NGY3OWRiMGE5YjA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTI4IEBACisyMDExLTA1
LTA1ICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbGltaW5hdGUgV2ViQ29yZS9kb20vSW5w
dXRFbGVtZW50LntjcHAsaH0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTYwMjYyCisKKyAgICAgICAgLSBGb2xkIGluIGFsbCBvZiB0aGUgY29kZSBvZiBJ
bnB1dEVsZW1lbnQue2NwcCxofSBpbnRvIEhUTUxJbnB1dEVsZW1lbnQKKyAgICAgICAgICBhbmQg
VGV4dEZpZWxkSW5wdXRUeXBlLgorICAgICAgICAtIENoYW5nZSB0aGUgcmV0dXJuIHR5cGUgY2hh
bmdlIG9mIE5vZGU6OnRvSW5wdXRFbGVtZW50KCk6CisgICAgICAgICAgSW5wdXRFbGVtZW50KiAt
PiBIVE1MSW5wdXRFbGVtZW50KgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyBjaGFuZ2Ug
c2hvdWxkIG5vdCBjaGFuZ2UgdGhlIGV4aXN0aW5nIGJlaGF2aW91ci4KKworICAgICAgICAqIENN
YWtlTGlzdHMudHh0OiBSZW1vdmUgSW5wdW50RWxlbWVudC5jcHAgYW5kL29yIElucHV0RWxlbWVu
dC5oLgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06IGRpdHRvLgorICAgICAgICAqIFdl
YkNvcmUuZXhwLmluOiBBZGQgc3ltYm9scyBvZiBmdW5jdGlvbnMgZXhwb3NlZCB0byBXZWJLaXQu
CisgICAgICAgICogV2ViQ29yZS5neXBpOiBSZW1vdmUgSW5wdW50RWxlbWVudC5jcHAgYW5kL29y
IElucHV0RWxlbWVudC5oLgorICAgICAgICAqIFdlYkNvcmUucHJvOiBkaXR0by4KKyAgICAgICAg
KiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajogZGl0dG8uCisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBkaXR0by4KKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6
dGV4dE1hcmtlckRhdGFGb3JWaXNpYmxlUG9zaXRpb24pOgorICAgICAgICAgIEZvbGxvdyB0aGUg
cmV0dXJuIHR5cGUgY2hhbmdlIG9mIE5vZGU6OnRvSW5wdXRFbGVtZW50KCkuCisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzUGFzc3dvcmRGaWVsZCk6IGRpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNJbmRldGVy
bWluYXRlKTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0Ojppc05hdGl2ZUNoZWNrYm94T3JSYWRpbyk6IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNDaGVja2VkKTogZGl0dG8uCisgICAgICAgICog
Y3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxl
Y3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KTogZGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IpOiBk
aXR0by4KKyAgICAgICAgKiBkb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDaGVja2VkUmFkaW9CdXR0b25zOjpyZW1vdmVCdXR0b24pOiBkaXR0by4KKyAgICAg
ICAgKiBkb20vRE9NQWxsSW5PbmUuY3BwOiBSZW1vdmUgSW5wdXRFbGVtZW50LmguCisgICAgICAg
ICogZG9tL0lucHV0RWxlbWVudC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogZG9tL0lucHV0RWxl
bWVudC5oOiBSZW1vdmVkLgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok5vZGU6OnRvSW5wdXRFbGVtZW50KToKKyAgICAgICAgICBDaGFuZ2UgdGhlIHJldHVybiB0
eXBlIGZyb20gSW5wdXRFbGVtZW50KiB0byBIVE1MSW5wdXRFbGVtZW50Ki4KKyAgICAgICAgKiBk
b20vTm9kZS5oOiBkaXR0by4KKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6SFRNTElucHV0RWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojpmb3JtQ29udHJvbE5hbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6dG9vTG9uZyk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MSW5wdXRFbGVtZW50Ojp1cGRhdGVGb2N1c0FwcGVhcmFuY2UpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6YWJvdXRUb1VubG9hZCk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MSW5wdXRFbGVtZW50OjpoYW5kbGVGb2N1c0V2ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmhhbmRsZUJsdXJFdmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MSW5wdXRFbGVtZW50Ojp1cGRhdGVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJ
bnB1dEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxJbnB1dEVsZW1lbnQ6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVu
dDo6Y29weU5vbkF0dHJpYnV0ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElu
cHV0RWxlbWVudDo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6
c3VnZ2VzdGVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0
U3VnZ2VzdGVkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWVGcm9t
UmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0RmlsZUxp
c3RGcm9tUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0
RGVmYXVsdE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6bWF4TGVu
Z3RoKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmNhY2hlU2VsZWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OmZvcm1hdENvZGVzKTogTW92ZWQgZnJvbSBJbnB1dEVsZW1l
bnQuCisgICAgICAgIChXZWJDb3JlOjpjdXJzb3JQb3NpdGlvblRvTWFza0luZGV4KTogZGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojppc0NvbmZvcm1Ub0lucHV0TWFz
ayk6IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6dmFsaWRhdGVJ
bnB1dE1hc2spOiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNl
dFdhcElucHV0Rm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6Omhh
bmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1
dEVsZW1lbnQ6Om5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TElucHV0RWxlbWVudDo6dXBkYXRlVmFsdWVJZk5lZWRlZCk6CisgICAgICAgICogaHRtbC9IVE1M
SW5wdXRFbGVtZW50Lmg6CisgICAgICAgICAgLSBBZGQgZGF0YSBtZW1iZXJzIHdoaWNoIHdlcmUg
ZGVmaW5lZCBpbiBJbnB1dEVsZW1lbnREYXRhLgorICAgICAgICAgIC0gTWFrZSBzb21lIGZ1bmN0
aW9ucyBwdWJsaWMgYmVjYXVzZSB0aGUgcHVibGljIGludGVyZmFjZSBJbnB1dEVsZW1lbnQgaXMg
cmVtb3ZlZC4KKyAgICAgICAgICAtIE1ha2Ugc29tZSBmdW5jdGlvbnMgbm9uLXZpcnR1YWwgYmVj
YXVzZSB0aGV5IGRvbid0IG92ZXJyaWRlCisgICAgICAgICAgICBjb3JyZXNwb25kaW5nIHZpcnR1
YWwgZnVuY3Rpb25zIG9mIElucHV0RWxlbWVudCBhbnltb3JlLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTElucHV0RWxlbWVudDo6dG9JbnB1dEVsZW1lbnQpOgorICAgICAgICAgIEZvbGxvdyB0aGUg
cmV0dXJuIHR5cGUgY2hhbmdlIG9mIE5vZGU6OnRvSW5wdXRFbGVtZW50KCkuCisgICAgICAgIChX
ZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojppc0luZGV0ZXJtaW5hdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTElucHV0RWxlbWVudDo6aXNBdXRvZmlsbGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxJbnB1dEVsZW1lbnQ6OnN1cHBvcnRzTWF4TGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxJbnB1dEVsZW1lbnQ6OmNhY2hlZFNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmNhY2hlZFNlbGVjdGlvbkVuZCk6CisgICAgICAgICogaHRt
bC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcDogUmVtb3ZlIHVudXNlZCBJbnB1dEVsZW1lbnQuaC4K
KyAgICAgICAgKiBodG1sL0lucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dFR5
cGU6OmhhbmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KTogUmVtb3ZlIHRoZSBjb2RlLgorICAg
ICAgICAqIGh0bWwvSW5wdXRUeXBlLmg6IFVwZGF0ZSBmb3IgdGhlIGFib3ZlLgorICAgICAgICAq
IGh0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlcGxhY2VF
T0xBbmRMaW1pdExlbmd0aCk6IE1vdmVkIGZyb20gSW5wdXRFbGVtZW50LmNwcC4KKyAgICAgICAg
KFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6c2FuaXRpemVWYWx1ZSk6IEltcGxlbWVudCB3
aXRoIHJlcGxhY2VFT0xBbmRMaW1pdExlbmd0aCgpLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZp
ZWxkSW5wdXRUeXBlOjpoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCk6CisgICAgICAgICAg
TW92ZSB0aGUgY29kZSBmcm9tIElucHV0RWxlbWVudDo6aGFuZGxlQmVmb3JlVGV4dEluc2VydGVk
RXZlbnQoKS4KKyAgICAgICAgKiBodG1sL1RleHRGaWVsZElucHV0VHlwZS5oOiBVcGRhdGUgZGVj
bGFyYXRpb25zLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmUuY3BwOgorICAgICAgICAgIC0gUmVtb3ZlIEFTU0VSVChub2RlKCktPmlzSFRNTEVsZW1lbnQo
KSkgYmVjYXVzZSBpdCBpcyBjaGVja2VkIGluIHRoZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgICAt
IEZvbGxvdyB0aGUgcmV0dXJuIHR5cGUgY2hhbmdlIG9mIGlucHV0RWxlbWVudCgpLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmUpOgorICAgICAgICAgIE1ha2Ugc3VyZSBub2RlKCkgaXMgYW4gSFRNTElucHV0
RWxlbWVudCBpbnN0YW5jZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6YWRkU2VhcmNoUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6c3RvcFNlYXJjaEV2ZW50VGltZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzaG93UG9wdXApOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpoaWRlUG9wdXApOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzdWJ0cmVlSGFzQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnVwZGF0ZUZy
b21FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6Y3JlYXRlSW5uZXJCbG9ja1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6Y3JlYXRlUmVzdWx0c0J1dHRvblN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y3JlYXRlQ2FuY2VsQnV0dG9uU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjcmVh
dGVJbm5lclNwaW5CdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OmNyZWF0ZU91dGVyU3BpbkJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y3JlYXRlU3BlZWNoQnV0dG9uU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp2aXNp
YmlsaXR5Rm9yQ2FuY2VsQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6c3RhcnRTZWFyY2hFdmVudFRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2VhcmNoRXZlbnRUaW1lckZpcmVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6dmFsdWVDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2V0VGV4
dEZyb21JdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6aW5wdXRFbGVtZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lLmg6CisgICAgICAgICAgQ2hhbmdlIHRoZSByZXR1cm4gdHlwZSBvZiBpbnB1dEVs
ZW1lbnQoKTogSW5wdXRFbGVtZW50KiAtPiBIVE1MSW5wdXRFbGVtZW50Ki4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6
OmlzQ2hlY2tlZCk6CisgICAgICAgICAgRm9sbG93IHRoZSByZXR1cm4gdHlwZSBjaGFuZ2Ugb2Yg
Tm9kZTo6dG9JbnB1dEVsZW1lbnQoKS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpp
c0luZGV0ZXJtaW5hdGUpOiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpz
aG91bGRIYXZlU3BpbkJ1dHRvbik6CisgICAgICAgICAgQ2hhbmdlIHRoZSBwYXJhbWV0ZXIgdHlw
ZTogSW5wdXRFbGVtZW50KiAtPiBIVE1MSW5wdXRFbGVtZW50Ki4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGhlbWUuaDogZGl0dG8uCisKIDIwMTEtMDUtMDUgIEVyaWMgQ2FybHNvbiAgPGVy
aWMuY2FybHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA5ZmM5MjYxNTNkZDJjYjk4NWVkNzg1
ODEwNzYzODFiZDI4NTQyYjJhLi4xMTFlOTFmYThmOTNjMjk2M2IzNDkyMWMxYzBmM2FjZTc2N2I2
OWIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTExNTMsOCArMTE1Myw2IEBA
IHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvZG9tL0lnbm9yZURlc3RydWN0
aXZlV3JpdGVDb3VudEluY3JlbWVudGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9JY29uVVJM
LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvZG9tL0ljb25VUkwuaCBcCi0JU291cmNlL1dlYkNvcmUv
ZG9tL0lucHV0RWxlbWVudC5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQu
aCBcCiAJU291cmNlL1dlYkNvcmUvZG9tL0hhc2hDaGFuZ2VFdmVudC5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9kb20vS2V5Ym9hcmRFdmVudC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9LZXlib2Fy
ZEV2ZW50LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4gYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgppbmRleCBjNTRmZmNkMzY4YTZmZGU5NmIzM2Fl
Zjc3OGI0ODM2NzJkNmI0M2YyLi4wOTY0ZWUwMGJhZmZhZTdjMjkwNjAxMGNiNjU1MTY4NjJhZGEx
MWMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgpAQCAtNDQ1LDYgKzQ0NSw3IEBAIF9fWk43V2ViQ29y
ZTE2Rm9udEZhbGxiYWNrTGlzdDE1cmVsZWFzZUZvbnREYXRhRXYKIF9fWk43V2ViQ29yZTE2Rm9u
dFBsYXRmb3JtRGF0YUMxRVA2TlNGb250ZmJiTlNfMTVGb250T3JpZW50YXRpb25FTlNfMTVUZXh0
T3JpZW50YXRpb25FTlNfMTZGb250V2lkdGhWYXJpYW50RQogX19aTjdXZWJDb3JlMTZGb250UGxh
dGZvcm1EYXRhRDFFdgogX19aTjdXZWJDb3JlMTZIVE1MSW5wdXRFbGVtZW50MTNzZXRBdXRvZmls
bGVkRWIKK19fWk43V2ViQ29yZTE2SFRNTElucHV0RWxlbWVudDE1c2V0VmFsdWVGb3JVc2VyRVJL
TjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMTZJY29uRGF0YWJhc2VCYXNlMjhzeW5jaHJvbm91
c0ljb25VUkxGb3JQYWdlVVJMRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMTZJY29uRGF0
YWJhc2VCYXNlNG9wZW5FUktOM1dURjZTdHJpbmdFUzRfCiBfX1pON1dlYkNvcmUxNkxlZ2FjeVdl
YkFyY2hpdmUxOWNyZWF0ZUZyb21TZWxlY3Rpb25FUE5TXzVGcmFtZUUKQEAgLTExNDYsNyArMTE0
Nyw5IEBAIF9fWk5LN1dlYkNvcmUxNVZpc2libGVQb3NpdGlvbjE5YWJzb2x1dGVDYXJldEJvdW5k
c0V2CiBfX1pOSzdXZWJDb3JlMTVWaXNpYmxlUG9zaXRpb240bmV4dEVOU18yN0VkaXRpbmdCb3Vu
ZGFyeUNyb3NzaW5nUnVsZUUKIF9fWk5LN1dlYkNvcmUxNVZpc2libGVQb3NpdGlvbjhwcmV2aW91
c0VOU18yN0VkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZUUKIF9fWk5LN1dlYkNvcmUxNkZvbnRG
YWxsYmFja0xpc3QxMGZvbnREYXRhQXRFUEtOU180Rm9udEVqCitfX1pOSzdXZWJDb3JlMTZIVE1M
SW5wdXRFbGVtZW50MTFpc1RleHRGaWVsZEV2CiBfX1pOSzdXZWJDb3JlMTZIVE1MSW5wdXRFbGVt
ZW50MTJhdXRvQ29tcGxldGVFdgorX19aTks3V2ViQ29yZTE2SFRNTElucHV0RWxlbWVudDE1aXNQ
YXNzd29yZEZpZWxkRXYKIF9fWk5LN1dlYkNvcmUxNkhUTUxJbnB1dEVsZW1lbnQyMWxhc3RDaGFu
Z2VXYXNVc2VyRWRpdEV2CiBfX1pOSzdXZWJDb3JlMTZJY29uRGF0YWJhc2VCYXNlMTJkYXRhYmFz
ZVBhdGhFdgogX19aTks3V2ViQ29yZTE2UmVzb3VyY2VSZXNwb25zZTEzbnNVUkxSZXNwb25zZUV2
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKaW5kZXggNTAxYTc2ZDg0MTQ0ZTE2YWU3Yzg4ZTNlMWM2ODE4YjYwZjMw
OGY3Ny4uOWFmZmM1MjdhNmY1OGJjOWNjYjQxOThjYzc5MGUzNmYxYTVmN2FhNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQpAQCAtNTI5LDcgKzUyOSw2IEBACiAgICAgICAgICAgICAnZG9tL0V2ZW50VGFyZ2V0
LmgnLAogICAgICAgICAgICAgJ2RvbS9FeGNlcHRpb25Db2RlLmgnLAogICAgICAgICAgICAgJ2Rv
bS9GcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24uaCcsCi0gICAgICAgICAgICAnZG9tL0lucHV0
RWxlbWVudC5oJywKICAgICAgICAgICAgICdkb20vS2V5Ym9hcmRFdmVudC5oJywKICAgICAgICAg
ICAgICdkb20vTWFwcGVkQXR0cmlidXRlRW50cnkuaCcsCiAgICAgICAgICAgICAnZG9tL01lc3Nh
Z2VQb3J0LmgnLApAQCAtMjQ3Myw3ICsyNDcyLDYgQEAKICAgICAgICAgICAgICdkb20vSWdub3Jl
RGVzdHJ1Y3RpdmVXcml0ZUNvdW50SW5jcmVtZW50ZXIuaCcsCiAgICAgICAgICAgICAnZG9tL0lj
b25VUkwuY3BwJywKICAgICAgICAgICAgICdkb20vSWNvblVSTC5oJywKLSAgICAgICAgICAgICdk
b20vSW5wdXRFbGVtZW50LmNwcCcsCiAgICAgICAgICAgICAnZG9tL0tleWJvYXJkRXZlbnQuY3Bw
JywKICAgICAgICAgICAgICdkb20vTWVzc2FnZUNoYW5uZWwuY3BwJywKICAgICAgICAgICAgICdk
b20vTWVzc2FnZUNoYW5uZWwuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnBybyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDViMDEyM2E0ZmMyYWRiMGRl
NjJmNjY0ZWU3YWMwY2M4OTE1ZTlkMGIuLmVhODU0Yjc3ZDI2NDhmMWNjMjRkNjIxZWI3ZTA1YTcz
YTBlNDAwZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC00OTMsNyArNDkzLDYgQEAgU09VUkNFUyArPSBc
CiAgICAgZG9tL0V4Y2VwdGlvbkJhc2UuY3BwIFwKICAgICBkb20vRXhjZXB0aW9uQ29kZS5jcHAg
XAogICAgIGRvbS9JY29uVVJMLmNwcCBcCi0gICAgZG9tL0lucHV0RWxlbWVudC5jcHAgXAogICAg
IGRvbS9LZXlib2FyZEV2ZW50LmNwcCBcCiAgICAgZG9tL01lc3NhZ2VDaGFubmVsLmNwcCBcCiAg
ICAgZG9tL01lc3NhZ2VFdmVudC5jcHAgXApAQCAtMTQ3MCw3ICsxNDY5LDYgQEAgSEVBREVSUyAr
PSBcCiAgICAgZG9tL0V4Y2VwdGlvbkJhc2UuaCBcCiAgICAgZG9tL0V4Y2VwdGlvbkNvZGUuaCBc
CiAgICAgZG9tL0ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbi5oIFwKLSAgICBkb20vSW5wdXRF
bGVtZW50LmggXAogICAgIGRvbS9LZXlib2FyZEV2ZW50LmggXAogICAgIGRvbS9NZXNzYWdlQ2hh
bm5lbC5oIFwKICAgICBkb20vTWVzc2FnZUV2ZW50LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCAzZGMwMmM4OTc4OTRmNTZmZTM0ODBkYTk4
NWRkMDJhZjdjNjAzODdhLi5jMzNmOGMyMGZiY2Y1M2MwNmM3M2ZiN2YwMWNiZmFjZDAxMTMxMWJh
IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
agorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAt
NDQ1NzQsNjIgKzQ0NTc0LDYgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJl
bGF0aXZlUGF0aD0iLi5cZG9tXElucHV0RWxlbWVudC5jcHAiCi0JCQkJPgotCQkJCTxGaWxlQ29u
ZmlndXJhdGlvbgotCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVp
bGQ9InRydWUiCi0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRv
b2wiCi0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCQk8RmlsZUNvbmZpZ3Vy
YXRpb24KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9
InRydWUiCi0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wi
Ci0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRp
b24KLQkJCQkJTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgotCQkJCQlFeGNsdWRlZEZy
b21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBp
bGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxlQ29u
ZmlndXJhdGlvbgotCQkJCQlOYW1lPSJSZWxlYXNlX0NhaXJvX0NGTGl0ZXxXaW4zMiIKLQkJCQkJ
RXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9
IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJ
CQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMyIgotCQkJCQlF
eGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0i
VkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJ
CTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgotCQkJCQlF
eGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0i
VkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJ
PC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxJbnB1dEVsZW1lbnQu
aCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9t
XEtleWJvYXJkRXZlbnQuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBl
NjczOTVlMzYxY2U3YzUwMGVmYmE3NmM5MGU1MTM0MmJhNWQwZmIwLi4xMmZkNzliMzY0NWQzMDA3
ZTE4MTJjY2I3Y2I4ZDAxY2RmZTk4YmVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC05NSwxNCArOTUsMTIgQEAKIAkJMDg1NEIw
MjMxMjU1RTRFNjAwQjlDREQwIC8qIFNWR1Jvb3RJbmxpbmVCb3guaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NTRCMDExMTI1NUU0RTYwMEI5Q0REMCAv
KiBTVkdSb290SW5saW5lQm94LmggKi87IH07CiAJCTA4NTRCMDI1MTI1NUU0RTYwMEI5Q0REMCAv
KiBTVkdUZXh0UXVlcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDA4NTRCMDEzMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdUZXh0UXVlcnkuaCAqLzsgfTsK
IAkJMDg1Nzk3MDkxMjc4Mzk0QzAwQThFQzVGIC8qIFNWR0FuaW1hdGVkQm9vbGVhbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg1Nzk3MDgxMjc4Mzk0
QzAwQThFQzVGIC8qIFNWR0FuaW1hdGVkQm9vbGVhbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTA4NTkxQUE1MEYwODVDNEUwMDlCQUNCMSAvKiBJ
bnB1dEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDA4NTkxQUE0MEYwODVDNEUwMDlCQUNCMSAvKiBJbnB1dEVsZW1lbnQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwODVBMTU5MzEyODlBOERE
MDAyNzEwRTMgLyogU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODVBMTU5MjEyODlB
OEREMDAyNzEwRTMgLyogU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDg1Qjky
QkEwRUZERTczRDAwRTYxMjNDIC8qIEZvcm1EYXRhQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODVCOTJCODBFRkRFNzNEMDBFNjEyM0Mg
LyogRm9ybURhdGFCdWlsZGVyLmNwcCAqLzsgfTsKIAkJMDg1QjkyQkIwRUZERTczRDAwRTYxMjND
IC8qIEZvcm1EYXRhQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMDg1QjkyQjkwRUZERTczRDAwRTYxMjNDIC8qIEZvcm1EYXRhQnVpbGRlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTA4NjQxRDQ3MTIxNDJG
N0QwMDhERTlGNiAvKiBSZW5kZXJJbWFnZVJlc291cmNlU3R5bGVJbWFnZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODY0MUQ0NTEyMTQyRjdEMDA4
REU5RjYgLyogUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuY3BwICovOyB9OwogCQkwODY0
MUQ0ODEyMTQyRjdEMDA4REU5RjYgLyogUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NjQxRDQ2MTIx
NDJGN0QwMDhERTlGNiAvKiBSZW5kZXJJbWFnZVJlc291cmNlU3R5bGVJbWFnZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA4NkJCRDBGMTM2MDM5
QzIwMDhCMTVEOCAvKiBHbHlwaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMDg2QkJEMEUxMzYwMzlDMjAwOEIxNUQ4IC8qIEdseXBoLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMDg3MDBCRTcwRjA4NkM1
MzAwOTE5NDE5IC8qIElucHV0RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwODcwMEJFNjBGMDg2QzUzMDA5MTk0MTkgLyogSW5wdXRFbGVt
ZW50LmNwcCAqLzsgfTsKIAkJMDg3MjgxNTUwRjI2QjlCNjAwQUZDNTk2IC8qIE9wdGlvbkVsZW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg3
MjgxNTEwRjI2QjlCNjAwQUZDNTk2IC8qIE9wdGlvbkVsZW1lbnQuY3BwICovOyB9OwogCQkwODcy
ODE1NjBGMjZCOUI2MDBBRkM1OTYgLyogT3B0aW9uRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg3MjgxNTIwRjI2QjlCNjAwQUZDNTk2IC8q
IE9wdGlvbkVsZW1lbnQuaCAqLzsgfTsKIAkJMDg3MjgxNTcwRjI2QjlCNjAwQUZDNTk2IC8qIE9w
dGlvbkdyb3VwRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwODcyODE1MzBGMjZCOUI2MDBBRkM1OTYgLyogT3B0aW9uR3JvdXBFbGVtZW50
LmNwcCAqLzsgfTsKQEAgLTY0NTgsMTQgKzY0NTYsMTIgQEAKIAkJMDg1NEIwMTIxMjU1RTRFNjAw
QjlDREQwIC8qIFNWR1RleHRRdWVyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTVkdUZXh0UXVlcnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
ODU0QjAxMzEyNTVFNEU2MDBCOUNERDAgLyogU1ZHVGV4dFF1ZXJ5LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1RleHRRdWVyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwODU3OTcwODEyNzgzOTRDMDBBOEVDNUYgLyogU1ZHQW5pbWF0ZWRCb29sZWFuLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdGVkQm9vbGVhbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwODU5MUFBNDBGMDg1QzRFMDA5QkFDQjEgLyog
SW5wdXRFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElucHV0RWxl
bWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODVBMTU5MjEyODlBOEREMDAy
NzEwRTMgLyogU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdFByb3Bl
cnR5VGVhck9mZi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODVCOTJCODBFRkRF
NzNEMDBFNjEyM0MgLyogRm9ybURhdGFCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEZvcm1EYXRhQnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTA4NUI5MkI5MEVGREU3M0QwMEU2MTIzQyAvKiBGb3JtRGF0YUJ1aWxkZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9ybURhdGFCdWlsZGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NjQxRDQ1MTIxNDJGN0QwMDhERTlGNiAvKiBSZW5k
ZXJJbWFnZVJlc291cmNlU3R5bGVJbWFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBSZW5kZXJJbWFnZVJlc291cmNlU3R5bGVJbWFnZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTA4NjQxRDQ2MTIxNDJGN0QwMDhERTlGNiAvKiBSZW5kZXJJbWFn
ZVJlc291cmNlU3R5bGVJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW5kZXJJbWFnZVJlc291cmNlU3R5bGVJbWFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwODZCQkQwRTEzNjAzOUMyMDA4QjE1RDggLyogR2x5cGguaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gR2x5cGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MDg3MDBCRTYwRjA4NkM1MzAwOTE5NDE5IC8qIElucHV0RWxlbWVudC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnB1dEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwODcyODE1MTBGMjZCOUI2MDBBRkM1OTYgLyogT3B0aW9uRWxlbWVu
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcHRpb25FbGVtZW50
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg3MjgxNTIwRjI2QjlCNjAwQUZD
NTk2IC8qIE9wdGlvbkVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
T3B0aW9uRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODcyODE1MzBG
MjZCOUI2MDBBRkM1OTYgLyogT3B0aW9uR3JvdXBFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9wdGlvbkdyb3VwRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xOTI1MCw4ICsxOTI0Niw2IEBACiAJCQkJMjQ0MkJCRjgxMTk0
QzlEMzAwRDQ5NDY5IC8qIEhhc2hDaGFuZ2VFdmVudC5oICovLAogCQkJCTg0ODJCNzQ0MTE5OEMz
MkUwMEJGQjAwNSAvKiBIYXNoQ2hhbmdlRXZlbnQuaWRsICovLAogCQkJCThBQjRCQzc2MTI2RkRC
NzEwMERFQjcyNyAvKiBJZ25vcmVEZXN0cnVjdGl2ZVdyaXRlQ291bnRJbmNyZW1lbnRlci5oICov
LAotCQkJCTA4NzAwQkU2MEYwODZDNTMwMDkxOTQxOSAvKiBJbnB1dEVsZW1lbnQuY3BwICovLAot
CQkJCTA4NTkxQUE0MEYwODVDNEUwMDlCQUNCMSAvKiBJbnB1dEVsZW1lbnQuaCAqLywKIAkJCQk4
NTAzMUIyRDBBNDRFRkM3MDBGOTkyRTAgLyogS2V5Ym9hcmRFdmVudC5jcHAgKi8sCiAJCQkJODUw
MzFCMkUwQTQ0RUZDNzAwRjk5MkUwIC8qIEtleWJvYXJkRXZlbnQuaCAqLywKIAkJCQkxNENGN0My
MDA5RjcxMTA2MDBFQjM2NjUgLyogS2V5Ym9hcmRFdmVudC5pZGwgKi8sCkBAIC0yMTE1NSw3ICsy
MTE0OSw2IEBACiAJCQkJQThDRkY1RTMwQTE1NUEwNTAwMEE0MjM0IC8qIElubGluZUZsb3dCb3gu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDRTc4OTE2MTEyMEQ2MDgwMDYwRUNFNSAvKiBJbmxpbmVJ
dGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFQTQ4NUEwOTdEOTMwMjAwOTRDOUU0IC8q
IElubGluZVRleHRCb3guaCBpbiBIZWFkZXJzICovLAotCQkJCTA4NTkxQUE1MEYwODVDNEUwMDlC
QUNCMSAvKiBJbnB1dEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3RTM1MjREMTI0NTBD
NjYwMEJBRjVEOSAvKiBJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5REVBMDk5
RTY0OTIwMDU2RTU4MSAvKiBJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5MzMwOURFQzA5OUU2NDkyMDA1NkU1ODEgLyogSW5zZXJ0TGluZUJyZWFrQ29tbWFu
ZC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMzk0Niw3ICsyMzkzOSw2IEBACiAJCQkJQThDRkY1RTYw
QTE1NUEwNTAwMEE0MjM0IC8qIElubGluZUJveC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOENG
RjVFNDBBMTU1QTA1MDAwQTQyMzQgLyogSW5saW5lRmxvd0JveC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCQ0VBNDg1OTA5N0Q5MzAyMDA5NEM5RTQgLyogSW5saW5lVGV4dEJveC5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQkwODcwMEJFNzBGMDg2QzUzMDA5MTk0MTkgLyogSW5wdXRFbGVtZW50LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTM3RTM1MjRCMTI0NTBDNTIwMEJBRjVEOSAvKiBJbnB1dFR5
cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlERTkwOTlFNjQ5MjAwNTZFNTgxIC8qIElu
c2VydEludG9UZXh0Tm9kZUNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlERUIw
OTlFNjQ5MjAwNTZFNTgxIC8qIEluc2VydExpbmVCcmVha0NvbW1hbmQuY3BwIGluIFNvdXJjZXMg
Ki8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2Fj
aGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcApp
bmRleCBiNDcxMjAxOTM2N2JmNTJhZmFhMTBiZWJlZGVlMmM0NzE5NTRjMmQ1Li4xOWE0NWRkNWE5
YWY0OTAxY2Q1ZThmNTkxNjUzYWZmNThjMmU1YzAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKQEAgLTU1LDExICs1NSwxMSBAQAogI2luY2x1
ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSFRNTEFyZWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRN
TEltYWdlRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKICNpZiBFTkFCTEUoVklERU8pCiAjaW5jbHVkZSAiTWVkaWFDb250cm9s
RWxlbWVudHMuaCIKICNlbmRpZgotI2luY2x1ZGUgIklucHV0RWxlbWVudC5oIgogI2luY2x1ZGUg
IlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0Qm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyTWVu
dUxpc3QuaCIKQEAgLTYxNiw3ICs2MTYsNyBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OnRleHRNYXJr
ZXJEYXRhRm9yVmlzaWJsZVBvc2l0aW9uKFRleHRNYXJrZXJEYXRhJiB0ZXh0TWFya2VyRAogICAg
ICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKGRvbU5vZGUtPmlzSFRNTEVsZW1lbnQoKSkgewot
ICAgICAgICBJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGRvbU5vZGUtPnRvSW5wdXRFbGVt
ZW50KCk7CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGRvbU5vZGUt
PnRvSW5wdXRFbGVtZW50KCk7CiAgICAgICAgIGlmIChpbnB1dEVsZW1lbnQgJiYgaW5wdXRFbGVt
ZW50LT5pc1Bhc3N3b3JkRmllbGQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0LmNwcAppbmRleCBmYmFhZGVjMDAyYTEwN2Y1MDZhZWM5M2Y4Y2EyNzgyMzNlYTYw
OTYyLi4wMmExYmJmMGUyODgyZWZiZjBmNjRjZjc5YjQ1ZDM4NDU5Y2RiM2E3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdC5jcHAKQEAgLTQ5Niw3ICs0OTYsNyBAQCBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OmlzUGFzc3dvcmRGaWVsZCgpIGNvbnN0CiAgICAgaWYgKGFyaWFSb2xlQXR0cmlidXRl
KCkgIT0gVW5rbm93blJvbGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIElucHV0RWxl
bWVudCogaW5wdXRFbGVtZW50ID0gbV9yZW5kZXJlci0+bm9kZSgpLT50b0lucHV0RWxlbWVudCgp
OworICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IG1fcmVuZGVyZXItPm5vZGUo
KS0+dG9JbnB1dEVsZW1lbnQoKTsKICAgICBpZiAoIWlucHV0RWxlbWVudCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCkBAIC01ODksNyArNTg5LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0Ojppc0luZGV0ZXJtaW5hdGUoKSBjb25zdAogICAgIGlmICghbV9yZW5kZXJlci0+bm9k
ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBJbnB1dEVsZW1lbnQqIGlucHV0RWxl
bWVudCA9IG1fcmVuZGVyZXItPm5vZGUoKS0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICBIVE1MSW5w
dXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBtX3JlbmRlcmVyLT5ub2RlKCktPnRvSW5wdXRFbGVt
ZW50KCk7CiAgICAgaWYgKCFpbnB1dEVsZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApA
QCAtNjAwLDcgKzYwMCw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNOYXRp
dmVDaGVja2JveE9yUmFkaW8oKSBjb25zdAogewogICAgIE5vZGUqIGVsZW1lbnROb2RlID0gbm9k
ZSgpOwogICAgIGlmIChlbGVtZW50Tm9kZSkgewotICAgICAgICBJbnB1dEVsZW1lbnQqIGlucHV0
ID0gZWxlbWVudE5vZGUtPnRvSW5wdXRFbGVtZW50KCk7CisgICAgICAgIEhUTUxJbnB1dEVsZW1l
bnQqIGlucHV0ID0gZWxlbWVudE5vZGUtPnRvSW5wdXRFbGVtZW50KCk7CiAgICAgICAgIGlmIChp
bnB1dCkKICAgICAgICAgICAgIHJldHVybiBpbnB1dC0+aXNDaGVja2JveCgpIHx8IGlucHV0LT5p
c1JhZGlvQnV0dG9uKCk7CiAgICAgfQpAQCAtNjE1LDcgKzYxNSw3IEBAIGJvb2wgQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6aXNDaGVja2VkKCkgY29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgLy8gRmlyc3QgdGVzdCBmb3IgbmF0aXZlIGNoZWNrZWRuZXNzIHNlbWFudGljcwot
ICAgIElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gbV9yZW5kZXJlci0+bm9kZSgpLT50b0lu
cHV0RWxlbWVudCgpOworICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IG1fcmVu
ZGVyZXItPm5vZGUoKS0+dG9JbnB1dEVsZW1lbnQoKTsKICAgICBpZiAoaW5wdXRFbGVtZW50KQog
ICAgICAgICByZXR1cm4gaW5wdXRFbGVtZW50LT5pc0NoZWNrZWQoKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCmluZGV4IDliOTM3ZDBhZjAwYTMzMjRmOWNhMjk1MzU0
NDhkNTY3MGI3MGIxM2YuLmU0ZDMwOTY2NmYyNWI0YTFjZGViNGYxYzdjMDJhY2QzZWZmNjdiOWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKQEAgLTEwNjksOCArMTA2
OSw4IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KE5v
ZGUqIG5vZGUpIGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChpc0NvbnRy
b2wpIHsKLSAgICAgICAgSW5wdXRFbGVtZW50KiB0aGlzSW5wdXRFbGVtZW50ID0gZWxlbWVudC0+
dG9JbnB1dEVsZW1lbnQoKTsKLSAgICAgICAgSW5wdXRFbGVtZW50KiBvdGhlcklucHV0RWxlbWVu
dCA9IG1fZWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICAgICAgSFRNTElucHV0RWxlbWVu
dCogdGhpc0lucHV0RWxlbWVudCA9IGVsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCk7CisgICAgICAg
IEhUTUxJbnB1dEVsZW1lbnQqIG90aGVySW5wdXRFbGVtZW50ID0gbV9lbGVtZW50LT50b0lucHV0
RWxlbWVudCgpOwogCiAgICAgICAgIGlmICghdGhpc0lucHV0RWxlbWVudCB8fCAhb3RoZXJJbnB1
dEVsZW1lbnQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNzczLDcgKzI3NzMsNyBA
QCBib29sIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3Rv
cihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZQogICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvQXV0b2ZpbGw6IHsKICAgICAgICAgICAgICAgICBpZiAoIWUgfHwgIWUtPmlzRm9ybUNv
bnRyb2xFbGVtZW50KCkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIGlmIChJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGUtPnRvSW5wdXRFbGVtZW50KCkp
CisgICAgICAgICAgICAgICAgaWYgKEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGUt
PnRvSW5wdXRFbGVtZW50KCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dEVsZW1l
bnQtPmlzQXV0b2ZpbGxlZCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQpAQCAtMjg2Niw3ICsyODY2LDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNo
ZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWUKICAgICAgICAg
ICAgICAgICAvLyBFdmVuIHRob3VnaCBXaW5JRSBhbGxvd3MgY2hlY2tlZCBhbmQgaW5kZXRlcm1p
bmF0ZSB0byBjby1leGlzdCwgdGhlIENTUyBzZWxlY3RvciBzcGVjIHNheXMgdGhhdAogICAgICAg
ICAgICAgICAgIC8vIHlvdSBjYW4ndCBiZSBib3RoIGNoZWNrZWQgYW5kIGluZGV0ZXJtaW5hdGUu
ICBXZSB3aWxsIGJlaGF2ZSBsaWtlIFdpbklFIGJlaGluZCB0aGUgc2NlbmVzIGFuZCBqdXN0CiAg
ICAgICAgICAgICAgICAgLy8gb2JleSB0aGUgQ1NTIHNwZWMgaGVyZSBpbiB0aGUgdGVzdCBmb3Ig
bWF0Y2hpbmcgdGhlIHBzZXVkby4KLSAgICAgICAgICAgICAgICBJbnB1dEVsZW1lbnQqIGlucHV0
RWxlbWVudCA9IGUtPnRvSW5wdXRFbGVtZW50KCk7CisgICAgICAgICAgICAgICAgSFRNTElucHV0
RWxlbWVudCogaW5wdXRFbGVtZW50ID0gZS0+dG9JbnB1dEVsZW1lbnQoKTsKICAgICAgICAgICAg
ICAgICBpZiAoaW5wdXRFbGVtZW50ICYmIGlucHV0RWxlbWVudC0+aXNDaGVja2VkKCkgJiYgIWlu
cHV0RWxlbWVudC0+aXNJbmRldGVybWluYXRlKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjg3NCw3ICsyODc0LDcgQEAgYm9v
bCBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoQ1NT
U2VsZWN0b3IqIHNlbCwgRWxlbWUKICAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b0luZGV0ZXJtaW5hdGU6IHsKICAgICAgICAgICAgICAgICBpZiAoIWUgfHwgIWUtPmlzRm9ybUNv
bnRyb2xFbGVtZW50KCkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gZS0+dG9JbnB1dEVsZW1lbnQoKTsKKyAg
ICAgICAgICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBlLT50b0lucHV0
RWxlbWVudCgpOwogICAgICAgICAgICAgICAgIGlmIChpbnB1dEVsZW1lbnQgJiYgaW5wdXRFbGVt
ZW50LT5pc0luZGV0ZXJtaW5hdGUoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
Q2hlY2tlZFJhZGlvQnV0dG9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hlY2tlZFJhZGlv
QnV0dG9ucy5jcHAKaW5kZXggNzUyMzM3MjUxYWVjOTVkM2U5ZTJjNWZhNWU2NTgzOWM5MDQ1NWJm
Mi4uMmEwZmVhNDA2ZTY2NWQyZTJiNTcwYTE3ZDUwNjMzMjc5NzkwYmJhMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcApAQCAtNzcsNyArNzcsNyBAQCB2b2lk
IENoZWNrZWRSYWRpb0J1dHRvbnM6OnJlbW92ZUJ1dHRvbihIVE1MRm9ybUNvbnRyb2xFbGVtZW50
KiBlbGVtZW50KQogICAgIGlmIChpdCA9PSBtX25hbWVUb0NoZWNrZWRSYWRpb0J1dHRvbk1hcC0+
ZW5kKCkgfHwgaXQtPnNlY29uZCAhPSBlbGVtZW50KQogICAgICAgICByZXR1cm47CiAgICAgCi0g
ICAgSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBlbGVtZW50LT50b0lucHV0RWxlbWVudCgp
OworICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGVsZW1lbnQtPnRvSW5wdXRF
bGVtZW50KCk7CiAgICAgQVNTRVJUX1VOVVNFRChpbnB1dEVsZW1lbnQsIGlucHV0RWxlbWVudCk7
CiAgICAgQVNTRVJUKGlucHV0RWxlbWVudC0+aXNDaGVja2VkKCkpOwogICAgIEFTU0VSVChlbGVt
ZW50LT5pc1JhZGlvQnV0dG9uKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RP
TUFsbEluT25lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01BbGxJbk9uZS5jcHAKaW5kZXgg
NTU2NzRkZmVlOTEzNmIzMGIxYjc1OTRhMjBkZThmMjRhYTk5MDgwNS4uZjI5NDliMTc1YjY1NjAz
MDY5N2YzMDgyYTljZjUyNWNjZWVhZTdlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0RPTUFsbEluT25lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NQWxsSW5PbmUuY3Bw
CkBAIC03Niw3ICs3Niw2IEBACiAjaW5jbHVkZSAiRXhjZXB0aW9uQmFzZS5jcHAiCiAjaW5jbHVk
ZSAiRXhjZXB0aW9uQ29kZS5jcHAiCiAjaW5jbHVkZSAiSWNvblVSTC5jcHAiCi0jaW5jbHVkZSAi
SW5wdXRFbGVtZW50LmNwcCIKICNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmNwcCIKICNpbmNsdWRl
ICJNZXNzYWdlQ2hhbm5lbC5jcHAiCiAjaW5jbHVkZSAiTWVzc2FnZUV2ZW50LmNwcCIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL0lucHV0RWxlbWVudC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3
ZDE0OGNmY2ZlMTY4OTNmYzgzMzNiNTBiNjM3ODQwMTY5YmNkNDEuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0lucHV0RWxl
bWVudC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDov
L3d3dy50b3JjaG1vYmlsZS5jb20vKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IklucHV0RWxlbWVudC5oIgotCi0jaW5jbHVkZSAiQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuaCIK
LQotI2lmIEVOQUJMRShXQ1NTKQotI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNs
dWRlICJDU1NSdWxlLmgiCi0jaW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIKLSNpbmNsdWRlICJDU1NT
dHlsZVJ1bGUuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCi0jZW5kaWYKLQotI2lu
Y2x1ZGUgIkF0dHJpYnV0ZS5oIgotI2luY2x1ZGUgIkNocm9tZS5oIgotI2luY2x1ZGUgIkNocm9t
ZUNsaWVudC5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRXZlbnQuaCIKLSNp
bmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFt
ZVNlbGVjdGlvbi5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuaCIKLSNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi0vLyBGSVhNRTogQWNjb3JkaW5nIHRvIEhUTUw0LCB0aGUgbGVuZ3RoIGF0
dHJpYnV0ZSdzIHZhbHVlIGNhbiBiZSBhcmJpdHJhcmlseQotLy8gbGFyZ2UuIEhvd2V2ZXIsIGR1
ZSB0byBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ1MzYgdGhpbmdz
Ci0vLyBnZXQgcmF0aGVyIHNsdWdnaXNoIHdoZW4gYSB0ZXh0IGZpZWxkIGhhcyBhIGxhcmdlciBu
dW1iZXIgb2YgY2hhcmFjdGVycyB0aGFuCi0vLyB0aGlzLCBldmVuIHdoZW4ganVzdCBjbGlja2lu
ZyBpbiB0aGUgdGV4dCBmaWVsZC4KLWNvbnN0IGludCBJbnB1dEVsZW1lbnQ6OnNfbWF4aW11bUxl
bmd0aCA9IDUyNDI4ODsKLWNvbnN0IGludCBJbnB1dEVsZW1lbnQ6OnNfZGVmYXVsdFNpemUgPSAy
MDsKLQotdm9pZCBJbnB1dEVsZW1lbnQ6OmRpc3BhdGNoRm9jdXNFdmVudChJbnB1dEVsZW1lbnQq
IGlucHV0RWxlbWVudCwgRWxlbWVudCogZWxlbWVudCkKLXsKLSAgICBpZiAoIWlucHV0RWxlbWVu
dC0+aXNUZXh0RmllbGQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gZWxlbWVudC0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoaW5wdXRFbGVtZW50LT5pc1Bhc3N3
b3JkRmllbGQoKSAmJiBkb2N1bWVudC0+ZnJhbWUoKSkKLSAgICAgICAgZG9jdW1lbnQtPnNldFVz
ZVNlY3VyZUtleWJvYXJkRW50cnlXaGVuQWN0aXZlKHRydWUpOwotfQotCi12b2lkIElucHV0RWxl
bWVudDo6ZGlzcGF0Y2hCbHVyRXZlbnQoSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQsIEVsZW1l
bnQqIGVsZW1lbnQpCi17Ci0gICAgaWYgKCFpbnB1dEVsZW1lbnQtPmlzVGV4dEZpZWxkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGVsZW1lbnQtPmRvY3Vt
ZW50KCk7Ci0gICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7Ci0gICAgaWYgKCFm
cmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGlucHV0RWxlbWVudC0+aXNQYXNzd29y
ZEZpZWxkKCkpCi0gICAgICAgIGRvY3VtZW50LT5zZXRVc2VTZWN1cmVLZXlib2FyZEVudHJ5V2hl
bkFjdGl2ZShmYWxzZSk7Ci0KLSAgICBmcmFtZS0+ZWRpdG9yKCktPnRleHRGaWVsZERpZEVuZEVk
aXRpbmcoZWxlbWVudCk7Ci19Ci0KLXZvaWQgSW5wdXRFbGVtZW50Ojp1cGRhdGVGb2N1c0FwcGVh
cmFuY2UoSW5wdXRFbGVtZW50RGF0YSYgZGF0YSwgSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQs
IEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgcmVzdG9yZVByZXZpb3VzU2VsZWN0aW9uKQotewotICAg
IEFTU0VSVChpbnB1dEVsZW1lbnQtPmlzVGV4dEZpZWxkKCkpOwotCi0gICAgaWYgKCFyZXN0b3Jl
UHJldmlvdXNTZWxlY3Rpb24gfHwgZGF0YS5jYWNoZWRTZWxlY3Rpb25TdGFydCgpID09IC0xKQot
ICAgICAgICBpbnB1dEVsZW1lbnQtPnNlbGVjdCgpOwotICAgIGVsc2UKLSAgICAgICAgLy8gUmVz
dG9yZSB0aGUgY2FjaGVkIHNlbGVjdGlvbi4KLSAgICAgICAgdXBkYXRlU2VsZWN0aW9uUmFuZ2Uo
aW5wdXRFbGVtZW50LCBlbGVtZW50LCBkYXRhLmNhY2hlZFNlbGVjdGlvblN0YXJ0KCksIGRhdGEu
Y2FjaGVkU2VsZWN0aW9uRW5kKCkpOwotCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZWxlbWVu
dC0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoZG9jdW1lbnQgJiYgZG9jdW1lbnQtPmZyYW1lKCkpCi0g
ICAgICAgIGRvY3VtZW50LT5mcmFtZSgpLT5zZWxlY3Rpb24oKS0+cmV2ZWFsU2VsZWN0aW9uKCk7
Ci19Ci0KLXZvaWQgSW5wdXRFbGVtZW50Ojp1cGRhdGVTZWxlY3Rpb25SYW5nZShJbnB1dEVsZW1l
bnQqIGlucHV0RWxlbWVudCwgRWxlbWVudCogZWxlbWVudCwgaW50IHN0YXJ0LCBpbnQgZW5kKQot
ewotICAgIGlmICghaW5wdXRFbGVtZW50LT5pc1RleHRGaWVsZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBzZXRTZWxlY3Rpb25SYW5nZShlbGVtZW50LCBzdGFydCwgZW5kKTsKLX0KLQotdm9p
ZCBJbnB1dEVsZW1lbnQ6OmFib3V0VG9VbmxvYWQoSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQs
IEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgaWYgKCFpbnB1dEVsZW1lbnQtPmlzVGV4dEZpZWxk
KCkgfHwgIWVsZW1lbnQtPmZvY3VzZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRG9jdW1l
bnQqIGRvY3VtZW50ID0gZWxlbWVudC0+ZG9jdW1lbnQoKTsKLSAgICBGcmFtZSogZnJhbWUgPSBk
b2N1bWVudC0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBmcmFtZS0+ZWRpdG9yKCktPnRleHRGaWVsZERpZEVuZEVkaXRpbmcoZWxlbWVudCk7Ci19Ci0K
LXZvaWQgSW5wdXRFbGVtZW50OjpzZXRWYWx1ZUZyb21SZW5kZXJlcihJbnB1dEVsZW1lbnREYXRh
JiBkYXRhLCBJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCwgRWxlbWVudCogZWxlbWVudCwgY29u
c3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICAvLyBSZW5kZXJlciBhbmQgb3VyIGV2ZW50IGhhbmRs
ZXIgYXJlIHJlc3BvbnNpYmxlIGZvciBzYW5pdGl6aW5nIHZhbHVlcy4KLSAgICBBU1NFUlRfVU5V
U0VEKGlucHV0RWxlbWVudCwgdmFsdWUgPT0gaW5wdXRFbGVtZW50LT5zYW5pdGl6ZVZhbHVlKHZh
bHVlKSB8fCBpbnB1dEVsZW1lbnQtPnNhbml0aXplVmFsdWUodmFsdWUpLmlzRW1wdHkoKSk7Ci0K
LSAgICAvLyBXb3JrYXJvdW5kIGZvciBidWcgd2hlcmUgdHJhaWxpbmcgXG4gaXMgaW5jbHVkZWQg
aW4gdGhlIHJlc3VsdCBvZiB0ZXh0Q29udGVudC4KLSAgICAvLyBUaGUgYXNzZXJ0IG1hY3JvIGFi
b3ZlIG1heSBhbHNvIGJlIHNpbXBsaWZpZWQgdG86ICB2YWx1ZSA9PSBjb25zdHJhaW5WYWx1ZSh2
YWx1ZSkKLSAgICAvLyBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjYx
Ci0gICAgaWYgKHZhbHVlID09ICJcbiIpCi0gICAgICAgIGRhdGEuc2V0VmFsdWUoIiIpOwotICAg
IGVsc2UKLSAgICAgICAgZGF0YS5zZXRWYWx1ZSh2YWx1ZSk7Ci0KLSAgICBlbGVtZW50LT5zZXRG
b3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKHRydWUpOwotCi0gICAgLy8gSW5wdXQgZXZl
bnQgaXMgZmlyZWQgYnkgdGhlIE5vZGU6OmRlZmF1bHRFdmVudEhhbmRsZXIgZm9yIGVkaXRhYmxl
IGNvbnRyb2xzLgotICAgIGlmICghaW5wdXRFbGVtZW50LT5pc1RleHRGaWVsZCgpKQotICAgICAg
ICBlbGVtZW50LT5kaXNwYXRjaElucHV0RXZlbnQoKTsKLSAgICBub3RpZnlGb3JtU3RhdGVDaGFu
Z2VkKGVsZW1lbnQpOwotfQotCi1zdGF0aWMgU3RyaW5nIHJlcGxhY2VFT0xBbmRMaW1pdExlbmd0
aChjb25zdCBJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCwgY29uc3QgU3RyaW5nJiBwcm9wb3Nl
ZFZhbHVlLCBpbnQgbWF4TGVuZ3RoKQotewotICAgIGlmICghaW5wdXRFbGVtZW50LT5pc1RleHRG
aWVsZCgpKQotICAgICAgICByZXR1cm4gcHJvcG9zZWRWYWx1ZTsKLQotICAgIFN0cmluZyBzdHJp
bmcgPSBwcm9wb3NlZFZhbHVlOwotICAgIHN0cmluZy5yZXBsYWNlKCJcclxuIiwgIiAiKTsKLSAg
ICBzdHJpbmcucmVwbGFjZSgnXHInLCAnICcpOwotICAgIHN0cmluZy5yZXBsYWNlKCdcbicsICcg
Jyk7Ci0KLSAgICB1bnNpZ25lZCBuZXdMZW5ndGggPSBudW1DaGFyYWN0ZXJzSW5HcmFwaGVtZUNs
dXN0ZXJzKHN0cmluZywgbWF4TGVuZ3RoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bmV3TGVuZ3RoOyArK2kpIHsKLSAgICAgICAgY29uc3QgVUNoYXIgY3VycmVudCA9IHN0cmluZ1tp
XTsKLSAgICAgICAgaWYgKGN1cnJlbnQgPCAnICcgJiYgY3VycmVudCAhPSAnXHQnKSB7Ci0gICAg
ICAgICAgICBuZXdMZW5ndGggPSBpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgcmV0dXJuIHN0cmluZy5sZWZ0KG5ld0xlbmd0aCk7Ci19Ci0KLVN0cmluZyBJbnB1
dEVsZW1lbnQ6OnNhbml0aXplVmFsdWVGb3JUZXh0RmllbGQoY29uc3QgSW5wdXRFbGVtZW50KiBp
bnB1dEVsZW1lbnQsIGNvbnN0IFN0cmluZyYgcHJvcG9zZWRWYWx1ZSkKLXsKLSNpZiBFTkFCTEUo
V0NTUykKLSAgICBJbnB1dEVsZW1lbnREYXRhIGRhdGEgPSBjb25zdF9jYXN0PElucHV0RWxlbWVu
dCo+KGlucHV0RWxlbWVudCktPmRhdGEoKTsKLSAgICBpZiAoIWlzQ29uZm9ybVRvSW5wdXRNYXNr
KGRhdGEsIHByb3Bvc2VkVmFsdWUpKSB7Ci0gICAgICAgIGlmIChpc0NvbmZvcm1Ub0lucHV0TWFz
ayhkYXRhLCBkYXRhLnZhbHVlKCkpKQotICAgICAgICAgICAgcmV0dXJuIGRhdGEudmFsdWUoKTsK
LSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIH0KLSNlbmRpZgotICAgIHJldHVybiByZXBs
YWNlRU9MQW5kTGltaXRMZW5ndGgoaW5wdXRFbGVtZW50LCBwcm9wb3NlZFZhbHVlLCBzX21heGlt
dW1MZW5ndGgpOwotfQotCi1TdHJpbmcgSW5wdXRFbGVtZW50OjpzYW5pdGl6ZVVzZXJJbnB1dFZh
bHVlKGNvbnN0IElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50LCBjb25zdCBTdHJpbmcmIHByb3Bv
c2VkVmFsdWUsIGludCBtYXhMZW5ndGgpCi17Ci0gICAgcmV0dXJuIHJlcGxhY2VFT0xBbmRMaW1p
dExlbmd0aChpbnB1dEVsZW1lbnQsIHByb3Bvc2VkVmFsdWUsIG1heExlbmd0aCk7Ci19Ci0KLXZv
aWQgSW5wdXRFbGVtZW50OjpoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudChJbnB1dEVsZW1l
bnREYXRhJiBkYXRhLCBJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCwgRWxlbWVudCogZWxlbWVu
dCwgRXZlbnQqIGV2ZW50KQotewotICAgIEFTU0VSVChldmVudC0+aXNCZWZvcmVUZXh0SW5zZXJ0
ZWRFdmVudCgpKTsKLSAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgdGV4dCB0byBiZSBpbnNlcnRl
ZCB3aWxsIG5vdCB2aW9sYXRlIHRoZSBtYXhMZW5ndGguCi0KLSAgICAvLyBXZSB1c2UgUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lOjp0ZXh0KCkgaW5zdGVhZCBvZiBJbnB1dEVsZW1lbnQ6OnZh
bHVlKCkKLSAgICAvLyBiZWNhdXNlIHRoZXkgY2FuIGJlIG1pc21hdGNoZWQgYnkgc2FuaXRpemVW
YWx1ZSgpIGluCi0gICAgLy8gUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzdWJ0cmVlSGFz
Q2hhbmdlZCgpIGluIHNvbWUgY2FzZXMuCi0gICAgdW5zaWduZWQgb2xkTGVuZ3RoID0gbnVtR3Jh
cGhlbWVDbHVzdGVycyh0b1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShlbGVtZW50LT5yZW5k
ZXJlcigpKS0+dGV4dCgpKTsKLQotICAgIC8vIHNlbGVjdGlvbkxlbmd0aCByZXByZXNlbnRzIHRo
ZSBzZWxlY3Rpb24gbGVuZ3RoIG9mIHRoaXMgdGV4dCBmaWVsZCB0byBiZQotICAgIC8vIHJlbW92
ZWQgYnkgdGhpcyBpbnNlcnRpb24uCi0gICAgLy8gSWYgdGhlIHRleHQgZmllbGQgaGFzIG5vIGZv
Y3VzLCB3ZSBkb24ndCBuZWVkIHRvIHRha2UgYWNjb3VudCBvZiB0aGUKLSAgICAvLyBzZWxlY3Rp
b24gbGVuZ3RoLiBUaGUgc2VsZWN0aW9uIGlzIHRoZSBzb3VyY2Ugb2YgdGV4dCBkcmFnLWFuZC1k
cm9wIGluCi0gICAgLy8gdGhhdCBjYXNlLCBhbmQgbm90aGluZyBpbiB0aGUgdGV4dCBmaWVsZCB3
aWxsIGJlIHJlbW92ZWQuCi0gICAgdW5zaWduZWQgc2VsZWN0aW9uTGVuZ3RoID0gZWxlbWVudC0+
Zm9jdXNlZCgpID8gbnVtR3JhcGhlbWVDbHVzdGVycyhwbGFpblRleHQoZWxlbWVudC0+ZG9jdW1l
bnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCkuZ2V0KCkpKSA6IDA7Ci0gICAgQVNTRVJUKG9sZExlbmd0aCA+PSBzZWxlY3Rpb25MZW5ndGgp
OwotCi0gICAgLy8gU2VsZWN0ZWQgY2hhcmFjdGVycyB3aWxsIGJlIHJlbW92ZWQgYnkgdGhlIG5l
eHQgdGV4dCBldmVudC4KLSAgICB1bnNpZ25lZCBiYXNlTGVuZ3RoID0gb2xkTGVuZ3RoIC0gc2Vs
ZWN0aW9uTGVuZ3RoOwotICAgIHVuc2lnbmVkIG1heExlbmd0aCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihpbnB1dEVsZW1lbnQtPnN1cHBvcnRzTWF4TGVuZ3RoKCkgPyBkYXRhLm1heExlbmd0aCgp
IDogc19tYXhpbXVtTGVuZ3RoKTsgLy8gbWF4TGVuZ3RoKCkgY2FuIG5ldmVyIGJlIG5lZ2F0aXZl
LgotICAgIHVuc2lnbmVkIGFwcGVuZGFibGVMZW5ndGggPSBtYXhMZW5ndGggPiBiYXNlTGVuZ3Ro
ID8gbWF4TGVuZ3RoIC0gYmFzZUxlbmd0aCA6IDA7Ci0KLSAgICAvLyBUcnVuY2F0ZSB0aGUgaW5z
ZXJ0ZWQgdGV4dCB0byBhdm9pZCB2aW9sYXRpbmcgdGhlIG1heExlbmd0aCBhbmQgb3RoZXIgY29u
c3RyYWludHMuCi0gICAgQmVmb3JlVGV4dEluc2VydGVkRXZlbnQqIHRleHRFdmVudCA9IHN0YXRp
Y19jYXN0PEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50Kj4oZXZlbnQpOwotI2lmIEVOQUJMRShXQ1NT
KQotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBlbGVtZW50LT5kb2N1bWVudCgpLT5mcmFtZSgp
LT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBTdHJp
bmcgY2FuZGlkYXRlU3RyaW5nID0gdG9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUoZWxlbWVu
dC0+cmVuZGVyZXIoKSktPnRleHQoKTsKLSAgICBpZiAoc2VsZWN0aW9uTGVuZ3RoKQotICAgICAg
ICBjYW5kaWRhdGVTdHJpbmcucmVwbGFjZShyYW5nZS0+c3RhcnRPZmZzZXQoKSwgcmFuZ2UtPmVu
ZE9mZnNldCgpLCB0ZXh0RXZlbnQtPnRleHQoKSk7Ci0gICAgZWxzZQotICAgICAgICBjYW5kaWRh
dGVTdHJpbmcuaW5zZXJ0KHRleHRFdmVudC0+dGV4dCgpLCByYW5nZS0+c3RhcnRPZmZzZXQoKSk7
Ci0gICAgaWYgKCFpc0NvbmZvcm1Ub0lucHV0TWFzayhpbnB1dEVsZW1lbnQtPmRhdGEoKSwgY2Fu
ZGlkYXRlU3RyaW5nKSkgewotICAgICAgICB0ZXh0RXZlbnQtPnNldFRleHQoIiIpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0gICAgdGV4dEV2ZW50LT5zZXRUZXh0KHNhbml0aXpl
VXNlcklucHV0VmFsdWUoaW5wdXRFbGVtZW50LCB0ZXh0RXZlbnQtPnRleHQoKSwgYXBwZW5kYWJs
ZUxlbmd0aCkpOwotfQotCi12b2lkIElucHV0RWxlbWVudDo6cGFyc2VTaXplQXR0cmlidXRlKElu
cHV0RWxlbWVudERhdGEmIGRhdGEsIEVsZW1lbnQqIGVsZW1lbnQsIEF0dHJpYnV0ZSogYXR0cmli
dXRlKQotewotICAgIGRhdGEuc2V0U2l6ZShhdHRyaWJ1dGUtPmlzTnVsbCgpID8gSW5wdXRFbGVt
ZW50OjpzX2RlZmF1bHRTaXplIDogYXR0cmlidXRlLT52YWx1ZSgpLnRvSW50KCkpOwotCi0gICAg
aWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBlbGVtZW50LT5yZW5kZXJlcigpKQotICAgICAg
ICByZW5kZXJlci0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7Ci19Ci0KLXZv
aWQgSW5wdXRFbGVtZW50OjpwYXJzZU1heExlbmd0aEF0dHJpYnV0ZShJbnB1dEVsZW1lbnREYXRh
JiBkYXRhLCBJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCwgRWxlbWVudCogZWxlbWVudCwgQXR0
cmlidXRlKiBhdHRyaWJ1dGUpCi17Ci0gICAgaW50IG1heExlbmd0aCA9IGF0dHJpYnV0ZS0+aXNO
dWxsKCkgPyBJbnB1dEVsZW1lbnQ6OnNfbWF4aW11bUxlbmd0aCA6IGF0dHJpYnV0ZS0+dmFsdWUo
KS50b0ludCgpOwotICAgIGlmIChtYXhMZW5ndGggPD0gMCB8fCBtYXhMZW5ndGggPiBJbnB1dEVs
ZW1lbnQ6OnNfbWF4aW11bUxlbmd0aCkKLSAgICAgICAgbWF4TGVuZ3RoID0gSW5wdXRFbGVtZW50
OjpzX21heGltdW1MZW5ndGg7Ci0KLSAgICBpbnQgb2xkTWF4TGVuZ3RoID0gZGF0YS5tYXhMZW5n
dGgoKTsKLSAgICBkYXRhLnNldE1heExlbmd0aChtYXhMZW5ndGgpOwotCi0gICAgaWYgKG9sZE1h
eExlbmd0aCAhPSBtYXhMZW5ndGgpCi0gICAgICAgIHVwZGF0ZVZhbHVlSWZOZWVkZWQoZGF0YSwg
aW5wdXRFbGVtZW50KTsKLQotICAgIGVsZW1lbnQtPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKLX0K
LQotdm9pZCBJbnB1dEVsZW1lbnQ6OnVwZGF0ZVZhbHVlSWZOZWVkZWQoSW5wdXRFbGVtZW50RGF0
YSYgZGF0YSwgSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQpCi17Ci0gICAgU3RyaW5nIG9sZFZh
bHVlID0gZGF0YS52YWx1ZSgpOwotICAgIFN0cmluZyBuZXdWYWx1ZSA9IGlucHV0RWxlbWVudC0+
c2FuaXRpemVWYWx1ZShvbGRWYWx1ZSk7Ci0gICAgaWYgKG5ld1ZhbHVlICE9IG9sZFZhbHVlKQot
ICAgICAgICBpbnB1dEVsZW1lbnQtPnNldFZhbHVlKG5ld1ZhbHVlKTsKLX0KLQotdm9pZCBJbnB1
dEVsZW1lbnQ6Om5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQoRWxlbWVudCogZWxlbWVudCkKLXsKLSAg
ICBEb2N1bWVudCogZG9jdW1lbnQgPSBlbGVtZW50LT5kb2N1bWVudCgpOwotICAgIEZyYW1lKiBm
cmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgcGFnZS0+
Y2hyb21lKCktPmNsaWVudCgpLT5mb3JtU3RhdGVEaWRDaGFuZ2UoZWxlbWVudCk7Ci19Ci0KLS8v
IElucHV0RWxlbWVudERhdGEKLUlucHV0RWxlbWVudERhdGE6OklucHV0RWxlbWVudERhdGEoKQot
ICAgIDogbV9zaXplKElucHV0RWxlbWVudDo6c19kZWZhdWx0U2l6ZSkKLSAgICAsIG1fbWF4TGVu
Z3RoKElucHV0RWxlbWVudDo6c19tYXhpbXVtTGVuZ3RoKQotICAgICwgbV9jYWNoZWRTZWxlY3Rp
b25TdGFydCgtMSkKLSAgICAsIG1fY2FjaGVkU2VsZWN0aW9uRW5kKC0xKQotI2lmIEVOQUJMRShX
Q1NTKQotICAgICwgbV9pbnB1dEZvcm1hdE1hc2soIiptIikKLSAgICAsIG1fbWF4SW5wdXRDaGFy
c0FsbG93ZWQoSW5wdXRFbGVtZW50OjpzX21heGltdW1MZW5ndGgpCi0jZW5kaWYKLXsKLX0KLQot
SW5wdXRFbGVtZW50RGF0YTo6fklucHV0RWxlbWVudERhdGEoKQotewotfQotCi1jb25zdCBBdG9t
aWNTdHJpbmcmIElucHV0RWxlbWVudERhdGE6Om5hbWUoKSBjb25zdAotewotICAgIHJldHVybiBt
X25hbWUuaXNOdWxsKCkgPyBlbXB0eUF0b20gOiBtX25hbWU7Ci19Ci0KLSNpZiBFTkFCTEUoV0NT
UykKLXN0YXRpYyBpbmxpbmUgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtYXRDb2RlcygpCi17Ci0g
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGNvZGVzLCAoIkFhTm5YeE1tIikp
OwotICAgIHJldHVybiBjb2RlczsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGN1cnNvclBvc2l0aW9u
VG9NYXNrSW5kZXgoY29uc3QgU3RyaW5nJiBpbnB1dEZvcm1hdE1hc2ssIHVuc2lnbmVkIGN1cnNv
clBvc2l0aW9uKQotewotICAgIFVDaGFyIG1hc2s7Ci0gICAgaW50IGluZGV4ID0gLTE7Ci0gICAg
ZG8gewotICAgICAgICBtYXNrID0gaW5wdXRGb3JtYXRNYXNrWysraW5kZXhdOwotICAgICAgICBp
ZiAobWFzayA9PSAnXFwnKQotICAgICAgICAgICAgKytpbmRleDsKLSAgICAgICAgZWxzZSBpZiAo
bWFzayA9PSAnKicgfHwgKGlzQVNDSUlEaWdpdChtYXNrKSAmJiBtYXNrICE9ICcwJykpIHsKLSAg
ICAgICAgICAgIGluZGV4ID0gaW5wdXRGb3JtYXRNYXNrLmxlbmd0aCgpIC0gMTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfSB3aGlsZSAoY3Vyc29yUG9zaXRpb24tLSk7Ci0K
LSAgICByZXR1cm4gaW5kZXg7Ci19Ci0KLWJvb2wgSW5wdXRFbGVtZW50Ojppc0NvbmZvcm1Ub0lu
cHV0TWFzayhjb25zdCBJbnB1dEVsZW1lbnREYXRhJiBkYXRhLCBjb25zdCBTdHJpbmcmIGlucHV0
Q2hhcnMpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGlucHV0Q2hhcnMubGVuZ3Ro
KCk7ICsraSkKLSAgICAgICAgaWYgKCFpc0NvbmZvcm1Ub0lucHV0TWFzayhkYXRhLCBpbnB1dENo
YXJzW2ldLCBpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBJbnB1dEVsZW1lbnQ6OmlzQ29uZm9ybVRvSW5wdXRNYXNrKGNvbnN0IElucHV0
RWxlbWVudERhdGEmIGRhdGEsIFVDaGFyIGluQ2hhciwgdW5zaWduZWQgY3Vyc29yUG9zaXRpb24p
Ci17Ci0gICAgU3RyaW5nIGlucHV0Rm9ybWF0TWFzayA9IGRhdGEuaW5wdXRGb3JtYXRNYXNrKCk7
Ci0KLSAgICBpZiAoaW5wdXRGb3JtYXRNYXNrLmlzRW1wdHkoKSB8fCBpbnB1dEZvcm1hdE1hc2sg
PT0gIipNIiB8fCBpbnB1dEZvcm1hdE1hc2sgPT0gIiptIikKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICBpZiAoY3Vyc29yUG9zaXRpb24gPj0gZGF0YS5tYXhJbnB1dENoYXJzQWxsb3dlZCgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB1bnNpZ25lZCBtYXNrSW5kZXggPSBjdXJz
b3JQb3NpdGlvblRvTWFza0luZGV4KGlucHV0Rm9ybWF0TWFzaywgY3Vyc29yUG9zaXRpb24pOwot
ICAgIGJvb2wgb2sgPSB0cnVlOwotICAgIFVDaGFyIG1hc2sgPSBpbnB1dEZvcm1hdE1hc2tbbWFz
a0luZGV4XTsKLSAgICAvLyBNYXRjaCB0aGUgaW5wdXRlZCBjaGFyYWN0ZXIgd2l0aCBpbnB1dCBt
YXNrCi0gICAgc3dpdGNoIChtYXNrKSB7Ci0gICAgY2FzZSAnQSc6Ci0gICAgICAgIG9rID0gIWlz
QVNDSUlEaWdpdChpbkNoYXIpICYmICFpc0FTQ0lJTG93ZXIoaW5DaGFyKSAmJiBpc0FTQ0lJUHJp
bnRhYmxlKGluQ2hhcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgJ2EnOgotICAgICAgICBv
ayA9ICFpc0FTQ0lJRGlnaXQoaW5DaGFyKSAmJiAhaXNBU0NJSVVwcGVyKGluQ2hhcikgJiYgaXNB
U0NJSVByaW50YWJsZShpbkNoYXIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlICdOJzoKLSAg
ICAgICAgb2sgPSBpc0FTQ0lJRGlnaXQoaW5DaGFyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSAnbic6Ci0gICAgICAgIG9rID0gIWlzQVNDSUlBbHBoYShpbkNoYXIpICYmIGlzQVNDSUlQcmlu
dGFibGUoaW5DaGFyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAnWCc6Ci0gICAgICAgIG9r
ID0gIWlzQVNDSUlMb3dlcihpbkNoYXIpICYmIGlzQVNDSUlQcmludGFibGUoaW5DaGFyKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSAneCc6Ci0gICAgICAgIG9rID0gIWlzQVNDSUlVcHBlcihp
bkNoYXIpICYmIGlzQVNDSUlQcmludGFibGUoaW5DaGFyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSAnTSc6Ci0gICAgY2FzZSAnbSc6Ci0gICAgICAgIG9rID0gaXNBU0NJSVByaW50YWJsZShp
bkNoYXIpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBvayA9IChtYXNr
ID09IGluQ2hhcik7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiBvazsKLX0K
LQotU3RyaW5nIElucHV0RWxlbWVudDo6dmFsaWRhdGVJbnB1dE1hc2soSW5wdXRFbGVtZW50RGF0
YSYgZGF0YSwgU3RyaW5nJiBpbnB1dE1hc2spCi17Ci0gICAgaW5wdXRNYXNrLnJlcGxhY2UoIlxc
XFwiLCAiXFwiKTsKLQotICAgIGJvb2wgaXNWYWxpZCA9IHRydWU7Ci0gICAgYm9vbCBoYXNXaWxk
Y2FyZCA9IGZhbHNlOwotICAgIHVuc2lnbmVkIGVzY2FwZUNoYXJDb3VudCA9IDA7Ci0gICAgdW5z
aWduZWQgbWFza0xlbmd0aCA9IGlucHV0TWFzay5sZW5ndGgoKTsKLSAgICBVQ2hhciBmb3JtYXRD
b2RlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtYXNrTGVuZ3RoOyArK2kpIHsKLSAg
ICAgICAgZm9ybWF0Q29kZSA9IGlucHV0TWFza1tpXTsKLSAgICAgICAgaWYgKGZvcm1hdENvZGVz
KCkuZmluZChmb3JtYXRDb2RlKSA9PSAtMSkgewotICAgICAgICAgICAgaWYgKGZvcm1hdENvZGUg
PT0gJyonIHx8IChpc0FTQ0lJRGlnaXQoZm9ybWF0Q29kZSkgJiYgZm9ybWF0Q29kZSAhPSAnMCcp
KSB7Ci0gICAgICAgICAgICAgICAgLy8gVmFsaWRhdGUgY29kZXMgd2hpY2ggZW5kcyB3aXRoICcq
Zicgb3IgJ25mJwotICAgICAgICAgICAgICAgIGZvcm1hdENvZGUgPSBpbnB1dE1hc2tbKytpXTsK
LSAgICAgICAgICAgICAgICBpZiAoKGkgKyAxICE9IG1hc2tMZW5ndGgpIHx8IGZvcm1hdENvZGVz
KCkuZmluZChmb3JtYXRDb2RlKSA9PSAtMSkgewotICAgICAgICAgICAgICAgICAgICBpc1ZhbGlk
ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBoYXNXaWxkY2FyZCA9IHRydWU7Ci0gICAgICAgICAgICB9IGVsc2Ug
aWYgKGZvcm1hdENvZGUgPT0gJ1xcJykgewotICAgICAgICAgICAgICAgIC8vIHNraXAgb3ZlciB0
aGUgbmV4dCBtYXNrIGNoYXJhY3RlcgotICAgICAgICAgICAgICAgICsraTsKLSAgICAgICAgICAg
ICAgICArK2VzY2FwZUNoYXJDb3VudDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgaXNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFpc1ZhbGlkKQotICAgICAgICByZXR1
cm4gU3RyaW5nKCk7Ci0gICAgLy8gY2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBh
bGxvd2VkIHRvIGJlIGVudGVyZWQgYnkgaW5wdXQgbWFzawotICAgIHVuc2lnbmVkIGFsbG93ZWRM
ZW5ndGggPSBtYXNrTGVuZ3RoOwotICAgIGlmIChlc2NhcGVDaGFyQ291bnQpCi0gICAgICAgIGFs
bG93ZWRMZW5ndGggLT0gZXNjYXBlQ2hhckNvdW50OwotCi0gICAgaWYgKGhhc1dpbGRjYXJkKSB7
Ci0gICAgICAgIGZvcm1hdENvZGUgPSBpbnB1dE1hc2tbbWFza0xlbmd0aCAtIDJdOwotICAgICAg
ICBpZiAoZm9ybWF0Q29kZSA9PSAnKicpCi0gICAgICAgICAgICBhbGxvd2VkTGVuZ3RoID0gZGF0
YS5tYXhJbnB1dENoYXJzQWxsb3dlZCgpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHVu
c2lnbmVkIGxlZnRMZW4gPSBTdHJpbmcoJmZvcm1hdENvZGUpLnRvSW50KCk7Ci0gICAgICAgICAg
ICBhbGxvd2VkTGVuZ3RoID0gbGVmdExlbiArIGFsbG93ZWRMZW5ndGggLSAyOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgaWYgKGFsbG93ZWRMZW5ndGggPCBkYXRhLm1heElucHV0Q2hhcnNBbGxv
d2VkKCkpCi0gICAgICAgIGRhdGEuc2V0TWF4SW5wdXRDaGFyc0FsbG93ZWQoYWxsb3dlZExlbmd0
aCk7Ci0KLSAgICByZXR1cm4gaW5wdXRNYXNrOwotfQotCi0jZW5kaWYKLQotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9t
L0lucHV0RWxlbWVudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTRlOTVkMTlm
YjY0Mzg2NGM2NDYxMmJlMTQ3ZmRkMTI5NzhhZjQ5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQuaAor
KysgL2Rldi9udWxsCkBAIC0xLDE2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4
IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNo
bW9iaWxlLmNvbS8pCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotICoKLSAqLwotCi0jaWZuZGVmIElucHV0RWxlbWVudF9oCi0jZGVmaW5lIElucHV0RWxl
bWVudF9oCi0KLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0F0b21pY1N0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEF0dHJpYnV0
ZTsKLWNsYXNzIERvY3VtZW50OwotY2xhc3MgRWxlbWVudDsKLWNsYXNzIEV2ZW50OwotY2xhc3Mg
SW5wdXRFbGVtZW50RGF0YTsKLQotY2xhc3MgSW5wdXRFbGVtZW50IHsKLXB1YmxpYzoKLSAgICB2
aXJ0dWFsIH5JbnB1dEVsZW1lbnQoKSB7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBpc0F1dG9maWxs
ZWQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzQ2hlY2tlZCgpIGNvbnN0ID0gMDsK
LSAgICB2aXJ0dWFsIGJvb2wgaXNJbmRldGVybWluYXRlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1
YWwgYm9vbCBpc0lucHV0VHlwZUhpZGRlbigpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wg
aXNQYXNzd29yZEZpZWxkKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc1NlYXJjaEZp
ZWxkKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc1RleHRGaWVsZCgpIGNvbnN0ID0g
MDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNSYWRpb0J1dHRvbigpIGNvbnN0ID0gMDsKLSAgICB2aXJ0
dWFsIGJvb2wgaXNDaGVja2JveCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNSYW5n
ZUNvbnRyb2woKSBjb25zdCA9IDA7Ci0gICAgCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzTWF4
TGVuZ3RoKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc1N0ZXBwYWJsZSgpIGNvbnN0
ID0gMDsKLSNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQotICAgIHZpcnR1YWwgYm9vbCBpc1NwZWVj
aEVuYWJsZWQoKSBjb25zdCA9IDA7Ci0jZW5kaWYgICAgCi0KLSAgICB2aXJ0dWFsIGJvb2wgc2Vh
cmNoRXZlbnRzU2hvdWxkQmVEaXNwYXRjaGVkKCkgY29uc3QgPSAwOwotCi0gICAgdmlydHVhbCBp
bnQgc2l6ZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVk
VmFsdWUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSBjb25zdCA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIHNldFZhbHVlKGNvbnN0IFN0cmluZyYsIGJvb2wgc2VuZENoYW5n
ZUV2ZW50ID0gZmFsc2UpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVGb3JVc2VyKGNv
bnN0IFN0cmluZyYpID0gMDsKLSAgICAvLyBUaGUgdmFsdWUgd2hpY2ggaXMgZHJhd24gYnkgYSBy
ZW5kZXJlci4KLSAgICB2aXJ0dWFsIFN0cmluZyB2aXNpYmxlVmFsdWUoKSBjb25zdCA9IDA7Ci0g
ICAgdmlydHVhbCBTdHJpbmcgY29udmVydEZyb21WaXNpYmxlVmFsdWUoY29uc3QgU3RyaW5nJikg
Y29uc3QgPSAwOwotCi0gICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgc3RyaW5n
IGNhbiBiZSBzZXQgYXMgdGhlIHZhbHVlIG9mIElucHV0RWxlbWVudC4KLSAgICB2aXJ0dWFsIGJv
b2wgaXNBY2NlcHRhYmxlVmFsdWUoY29uc3QgU3RyaW5nJikgY29uc3QgPSAwOwotICAgIHZpcnR1
YWwgU3RyaW5nIHNhbml0aXplVmFsdWUoY29uc3QgU3RyaW5nJikgY29uc3QgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBzZXRWYWx1ZUZyb21SZW5kZXJlcihjb25zdCBTdHJpbmcmKSA9IDA7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgY2FjaGVTZWxlY3Rpb24oaW50IHN0YXJ0LCBpbnQgZW5kKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHNlbGVjdCgpID0gMDsKLSAgCi0jaWYgRU5BQkxFKFdDU1MpCi0gICAg
dmlydHVhbCBJbnB1dEVsZW1lbnREYXRhIGRhdGEoKSBjb25zdCA9IDA7IAotI2VuZGlmCi0KLSAg
ICBzdGF0aWMgY29uc3QgaW50IHNfbWF4aW11bUxlbmd0aDsKLSAgICBzdGF0aWMgY29uc3QgaW50
IHNfZGVmYXVsdFNpemU7Ci0KLSAgICAvLyBSZXBsYWNlcyBDUnMgYW5kIExGcywgc2hyaW5rcyB0
aGUgdmFsdWUgZm9yIHNfbWF4aW11bUxlbmd0aC4KLSAgICAvLyBUaGlzIHNob3VsZCBiZSBhcHBs
aWVkIHRvIHZhbHVlcyBmcm9tIHRoZSBIVE1MIHZhbHVlIGF0dHJpYnV0ZSBhbmQgdGhlIERPTSB2
YWx1ZSBwcm9wZXJ0eS4KLSAgICAvLyBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgb25s
eSBieSBzYW5pdGl6ZVZhbHVlKCkgaW1wbGVtZW50YXRpb25zLgotICAgIC8vIFB1YmxpYyBzbyBp
dCBjYW4gYmUgY2FsbGVkIGJ5IElucHV0VHlwZS4KLSAgICBzdGF0aWMgU3RyaW5nIHNhbml0aXpl
VmFsdWVGb3JUZXh0RmllbGQoY29uc3QgSW5wdXRFbGVtZW50KiwgY29uc3QgU3RyaW5nJik7Ci0K
LXByb3RlY3RlZDoKLSAgICBzdGF0aWMgdm9pZCBkaXNwYXRjaEZvY3VzRXZlbnQoSW5wdXRFbGVt
ZW50KiwgRWxlbWVudCopOwotICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoQmx1ckV2ZW50KElucHV0
RWxlbWVudCosIEVsZW1lbnQqKTsKLSAgICBzdGF0aWMgdm9pZCB1cGRhdGVGb2N1c0FwcGVhcmFu
Y2UoSW5wdXRFbGVtZW50RGF0YSYsIElucHV0RWxlbWVudCosIEVsZW1lbnQqLCBib29sIHJlc3Rv
cmVQcmV2aW91c1NlbGVjdGlvbik7Ci0gICAgc3RhdGljIHZvaWQgdXBkYXRlU2VsZWN0aW9uUmFu
Z2UoSW5wdXRFbGVtZW50KiwgRWxlbWVudCosIGludCBzdGFydCwgaW50IGVuZCk7Ci0gICAgc3Rh
dGljIHZvaWQgYWJvdXRUb1VubG9hZChJbnB1dEVsZW1lbnQqLCBFbGVtZW50Kik7Ci0gICAgc3Rh
dGljIHZvaWQgc2V0VmFsdWVGcm9tUmVuZGVyZXIoSW5wdXRFbGVtZW50RGF0YSYsIElucHV0RWxl
bWVudCosIEVsZW1lbnQqLCBjb25zdCBTdHJpbmcmKTsKLSAgICAvLyBSZXBsYWNlcyBDUnMgYW5k
IExGcywgc2hyaW5rcyB0aGUgdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgbWF4aW11bSBsZW5ndGgu
Ci0gICAgLy8gVGhpcyBzaG91bGQgYmUgYXBwbGllZCB0byB2YWx1ZXMgc3BlY2lmaWVkIGJ5IHVz
ZXJzLgotICAgIC8vIFRoZSBpbnB1dCBzdHJpbmcgbWF5IGJlIGEgZnJhZ21lbnQgb2YgdGhlIHdo
b2xlIHZhbHVlLgotICAgIHN0YXRpYyBTdHJpbmcgc2FuaXRpemVVc2VySW5wdXRWYWx1ZShjb25z
dCBJbnB1dEVsZW1lbnQqLCBjb25zdCBTdHJpbmcmLCBpbnQpOwotICAgIHN0YXRpYyB2b2lkIGhh
bmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KElucHV0RWxlbWVudERhdGEmLCBJbnB1dEVsZW1l
bnQqLCBFbGVtZW50KiwgRXZlbnQqKTsKLSAgICBzdGF0aWMgdm9pZCBwYXJzZVNpemVBdHRyaWJ1
dGUoSW5wdXRFbGVtZW50RGF0YSYsIEVsZW1lbnQqLCBBdHRyaWJ1dGUqKTsKLSAgICBzdGF0aWMg
dm9pZCBwYXJzZU1heExlbmd0aEF0dHJpYnV0ZShJbnB1dEVsZW1lbnREYXRhJiwgSW5wdXRFbGVt
ZW50KiwgRWxlbWVudCosIEF0dHJpYnV0ZSopOwotICAgIHN0YXRpYyB2b2lkIHVwZGF0ZVZhbHVl
SWZOZWVkZWQoSW5wdXRFbGVtZW50RGF0YSYsIElucHV0RWxlbWVudCopOwotICAgIHN0YXRpYyB2
b2lkIG5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQoRWxlbWVudCopOwotI2lmIEVOQUJMRShXQ1NTKQot
ICAgIHN0YXRpYyBib29sIGlzQ29uZm9ybVRvSW5wdXRNYXNrKGNvbnN0IElucHV0RWxlbWVudERh
dGEmLCBjb25zdCBTdHJpbmcmKTsKLSAgICBzdGF0aWMgYm9vbCBpc0NvbmZvcm1Ub0lucHV0TWFz
ayhjb25zdCBJbnB1dEVsZW1lbnREYXRhJiwgVUNoYXIsIHVuc2lnbmVkKTsKLSAgICBzdGF0aWMg
U3RyaW5nIHZhbGlkYXRlSW5wdXRNYXNrKElucHV0RWxlbWVudERhdGEmLCBTdHJpbmcmKTsKLSNl
bmRpZgotfTsKLQotLy8gSFRNTElucHV0RWxlbWVudCBob2xkIHRoaXMgc3RydWN0IGFzIG1lbWJl
ciB2YXJpYWJsZQotLy8gYW5kIHBhc3MgaXQgdG8gdGhlIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25z
IGluIElucHV0RWxlbWVudAotY2xhc3MgSW5wdXRFbGVtZW50RGF0YSB7Ci1wdWJsaWM6Ci0gICAg
SW5wdXRFbGVtZW50RGF0YSgpOwotICAgIH5JbnB1dEVsZW1lbnREYXRhKCk7Ci0KLSAgICBjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWUoKSBjb25zdDsKLSAgICB2b2lkIHNldE5hbWUoY29uc3QgQXRv
bWljU3RyaW5nJiB2YWx1ZSkgeyBtX25hbWUgPSB2YWx1ZTsgfQotCi0gICAgLy8gVGhlIG51bGwg
U3RyaW5nIHJlcHJlc2VudHMgInVzZSB0aGUgZGVmYXVsdCB2YWx1ZSwiIGFuZCB0aGUgZW1wdHkg
U3RyaW5nCi0gICAgLy8gcmVwcmVzZW50cyB0aGUgZW1wdHkgdmFsdWUuCi0gICAgU3RyaW5nIHZh
bHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQotICAgIHZvaWQgc2V0VmFsdWUoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkgeyBtX3ZhbHVlID0gdmFsdWU7IH0KLQotICAgIGNvbnN0IFN0cmluZyYg
c3VnZ2VzdGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3N1Z2dlc3RlZFZhbHVlOyB9Ci0gICAg
dm9pZCBzZXRTdWdnZXN0ZWRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKSB7IG1fc3VnZ2VzdGVk
VmFsdWUgPSB2YWx1ZTsgfQotCi0gICAgaW50IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7
IH0KLSAgICB2b2lkIHNldFNpemUoaW50IHZhbHVlKSB7IG1fc2l6ZSA9IHZhbHVlOyB9Ci0KLSAg
ICBpbnQgbWF4TGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9tYXhMZW5ndGg7IH0KLSAgICB2b2lk
IHNldE1heExlbmd0aChpbnQgdmFsdWUpIHsgbV9tYXhMZW5ndGggPSB2YWx1ZTsgfQotCi0gICAg
aW50IGNhY2hlZFNlbGVjdGlvblN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRTZWxlY3Rp
b25TdGFydDsgfQotICAgIHZvaWQgc2V0Q2FjaGVkU2VsZWN0aW9uU3RhcnQoaW50IHZhbHVlKSB7
IG1fY2FjaGVkU2VsZWN0aW9uU3RhcnQgPSB2YWx1ZTsgfQotCi0gICAgaW50IGNhY2hlZFNlbGVj
dGlvbkVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkU2VsZWN0aW9uRW5kOyB9Ci0gICAgdm9p
ZCBzZXRDYWNoZWRTZWxlY3Rpb25FbmQoaW50IHZhbHVlKSB7IG1fY2FjaGVkU2VsZWN0aW9uRW5k
ID0gdmFsdWU7IH0KLQotI2lmIEVOQUJMRShXQ1NTKQotICAgIFN0cmluZyBpbnB1dEZvcm1hdE1h
c2soKSBjb25zdCB7IHJldHVybiBtX2lucHV0Rm9ybWF0TWFzazsgfQotICAgIHZvaWQgc2V0SW5w
dXRGb3JtYXRNYXNrKGNvbnN0IFN0cmluZyYgbWFzaykgeyBtX2lucHV0Rm9ybWF0TWFzayA9IG1h
c2s7IH0KLSAKLSAgICB1bnNpZ25lZCBtYXhJbnB1dENoYXJzQWxsb3dlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fbWF4SW5wdXRDaGFyc0FsbG93ZWQ7IH0KLSAgICB2b2lkIHNldE1heElucHV0Q2hhcnNB
bGxvd2VkKHVuc2lnbmVkIG1heExlbmd0aCkgeyBtX21heElucHV0Q2hhcnNBbGxvd2VkID0gbWF4
TGVuZ3RoOyB9Ci0gIAotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgQXRvbWljU3RyaW5nIG1fbmFt
ZTsKLSAgICBTdHJpbmcgbV92YWx1ZTsKLSAgICBTdHJpbmcgbV9zdWdnZXN0ZWRWYWx1ZTsKLSAg
ICBpbnQgbV9zaXplOwotICAgIGludCBtX21heExlbmd0aDsKLSAgICBpbnQgbV9jYWNoZWRTZWxl
Y3Rpb25TdGFydDsKLSAgICBpbnQgbV9jYWNoZWRTZWxlY3Rpb25FbmQ7Ci0jaWYgRU5BQkxFKFdD
U1MpCi0gICAgU3RyaW5nIG1faW5wdXRGb3JtYXRNYXNrOwotICAgIHVuc2lnbmVkIG1fbWF4SW5w
dXRDaGFyc0FsbG93ZWQ7Ci0jZW5kaWYKLX07Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAK
aW5kZXggMGZjNDAwYzRjMjVhOGNiNzU2ZmI4YmY5NTQ5ZWE2N2E5MDM2ZTg4My4uNDQyOGZmYWM0
M2IwYWJhY2Q0YjUxZDljNTEyZjM5MmEyNzE1MDk1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtNTU5
LDcgKzU1OSw3IEBAIHZvaWQgTm9kZTo6c2V0U2hhZG93SG9zdChFbGVtZW50KiBob3N0KQogICAg
IHNldFBhcmVudChob3N0KTsKIH0KIAotSW5wdXRFbGVtZW50KiBOb2RlOjp0b0lucHV0RWxlbWVu
dCgpCitIVE1MSW5wdXRFbGVtZW50KiBOb2RlOjp0b0lucHV0RWxlbWVudCgpCiB7CiAgICAgLy8g
SWYgb25lIG9mIHRoZSBiZWxvdyBBU1NFUlRzIHRyaWdnZXIsIHlvdSBhcmUgY2FsbGluZyB0aGlz
IGZ1bmN0aW9uCiAgICAgLy8gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBmcm9tIGEgY29uc3RydWN0
b3Igb3IgZGVzdHJ1Y3RvciBvZiB0aGlzIG9iamVjdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCmluZGV4IDA1NzFkZmFj
NTk0ZDQwZGRkNTExYWMxYzY5ZmFmNGVkMzMxZTFmOWUuLmMyODhkMWY5YWIxNmY4MzRlMGZlNjQ5
ZDg2YWEzN2UwMjdiNjNjMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaApAQCAtNTQsNyArNTQsNyBAQCBjbGFzcyBF
dmVudENvbnRleHQ7CiBjbGFzcyBFdmVudExpc3RlbmVyOwogY2xhc3MgRmxvYXRQb2ludDsKIGNs
YXNzIEZyYW1lOwotY2xhc3MgSW5wdXRFbGVtZW50OworY2xhc3MgSFRNTElucHV0RWxlbWVudDsK
IGNsYXNzIEludFJlY3Q7CiBjbGFzcyBLZXlib2FyZEV2ZW50OwogY2xhc3MgTlNSZXNvbHZlcjsK
QEAgLTUyNCw3ICs1MjQsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIE5vZGUqIHRvTm9kZSgp
IHsgcmV0dXJuIHRoaXM7IH0KIAotICAgIHZpcnR1YWwgSW5wdXRFbGVtZW50KiB0b0lucHV0RWxl
bWVudCgpOworICAgIHZpcnR1YWwgSFRNTElucHV0RWxlbWVudCogdG9JbnB1dEVsZW1lbnQoKTsK
IAogICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1
dEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcApp
bmRleCBmOWNjYWY5MDRjNzczMGM3OWU4OTZhNzljNTliZTY0MzIyNDA3ZWMyLi42MjIzYzhhOWU3
OTZiMjMzNGM0YzZjODdhNDkwYWY2YTVkODIwMDkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TElucHV0RWxlbWVudC5jcHAKQEAgLTYsNiArNiw3IEBACiAgKiAgICAgICAgICAgKEMpIDIwMDYg
QWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAbnlwb3AuY29tKQogICogQ29weXJpZ2h0IChDKSAyMDA3
IFNhbXVlbCBXZWluaWcgKHNhbUB3ZWJraXQub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9y
Y2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2Jp
bGUuY29tLykKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzAsMTEgKzMxLDE0IEBACiAjaW5jbHVk
ZSAiQVhPYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkJl
Zm9yZVRleHRJbnNlcnRlZEV2ZW50LmgiCisjaW5jbHVkZSAiQ2hyb21lLmgiCisjaW5jbHVkZSAi
Q2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUg
IkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkV4Y2VwdGlv
bkNvZGUuaCIKICNpbmNsdWRlICJGaWxlTGlzdC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5j
bHVkZSAiSFRNTENvbGxlY3Rpb24uaCIKICNpbmNsdWRlICJIVE1MRGF0YUxpc3RFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCkBAIC00NSw2ICs0OSw3IEBACiAjaW5jbHVk
ZSAiS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKICNpbmNs
dWRlICJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
TW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oIgog
I2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCkBAIC02MCwxMCArNjUsMjQgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCisvLyBGSVhNRTogQWNjb3Jk
aW5nIHRvIEhUTUw0LCB0aGUgbGVuZ3RoIGF0dHJpYnV0ZSdzIHZhbHVlIGNhbiBiZSBhcmJpdHJh
cmlseQorLy8gbGFyZ2UuIEhvd2V2ZXIsIGR1ZSB0byBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQ1MzYgdGhpbmdzCisvLyBnZXQgcmF0aGVyIHNsdWdnaXNoIHdoZW4g
YSB0ZXh0IGZpZWxkIGhhcyBhIGxhcmdlciBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGFuCisvLyB0
aGlzLCBldmVuIHdoZW4ganVzdCBjbGlja2luZyBpbiB0aGUgdGV4dCBmaWVsZC4KK2NvbnN0IGlu
dCBIVE1MSW5wdXRFbGVtZW50OjptYXhpbXVtTGVuZ3RoID0gNTI0Mjg4OworY29uc3QgaW50IGRl
ZmF1bHRTaXplID0gMjA7CiBjb25zdCBpbnQgbWF4U2F2ZWRSZXN1bHRzID0gMjU2OwogCiBIVE1M
SW5wdXRFbGVtZW50OjpIVE1MSW5wdXRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50KiBkb2N1bWVudCwgSFRNTEZvcm1FbGVtZW50KiBmb3JtLCBib29sIGNyZWF0
ZWRCeVBhcnNlcikKICAgICA6IEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KHRhZ05hbWUsIGRv
Y3VtZW50LCBmb3JtKQorICAgICwgbV9zaXplKGRlZmF1bHRTaXplKQorICAgICwgbV9tYXhMZW5n
dGgobWF4aW11bUxlbmd0aCkKKyAgICAsIG1fY2FjaGVkU2VsZWN0aW9uU3RhcnQoLTEpCisgICAg
LCBtX2NhY2hlZFNlbGVjdGlvbkVuZCgtMSkKKyNpZiBFTkFCTEUoV0NTUykKKyAgICAsIG1faW5w
dXRGb3JtYXRNYXNrKCIqbSIpCisgICAgLCBtX21heElucHV0Q2hhcnNBbGxvd2VkKG1heGltdW1M
ZW5ndGgpCisjZW5kaWYKICAgICAsIG1fbWF4UmVzdWx0cygtMSkKICAgICAsIG1faXNDaGVja2Vk
KGZhbHNlKQogICAgICwgbV9yZWZsZWN0c0NoZWNrZWRBdHRyaWJ1dGUodHJ1ZSkKQEAgLTk4LDcg
KzExNyw3IEBAIEhUTUxJbnB1dEVsZW1lbnQ6On5IVE1MSW5wdXRFbGVtZW50KCkKIAogY29uc3Qg
QXRvbWljU3RyaW5nJiBIVE1MSW5wdXRFbGVtZW50Ojpmb3JtQ29udHJvbE5hbWUoKSBjb25zdAog
ewotICAgIHJldHVybiBtX2RhdGEubmFtZSgpOworICAgIHJldHVybiBtX25hbWUuaXNOdWxsKCkg
PyBlbXB0eUF0b20gOiBtX25hbWU7CiB9CiAKIGJvb2wgSFRNTElucHV0RWxlbWVudDo6YXV0b0Nv
bXBsZXRlKCkgY29uc3QKQEAgLTIwMCw3ICsyMTksNyBAQCBib29sIEhUTUxJbnB1dEVsZW1lbnQ6
OnRvb0xvbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSwgTmVlZHNUb0NoZWNrRGlydHlGbGFnIGNoZWNr
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGNoZWNrID09IENoZWNrRGlydHlGbGFn
KSB7CiAgICAgICAgIC8vIFJldHVybiBmYWxzZSBmb3IgdGhlIGRlZmF1bHQgdmFsdWUgZXZlbiBp
ZiBpdCBpcyBsb25nZXIgdGhhbiBtYXhMZW5ndGguCi0gICAgICAgIGJvb2wgdXNlckVkaXRlZCA9
ICFtX2RhdGEudmFsdWUoKS5pc051bGwoKTsKKyAgICAgICAgYm9vbCB1c2VyRWRpdGVkID0gIW1f
dmFsdWUuaXNOdWxsKCk7CiAgICAgICAgIGlmICghdXNlckVkaXRlZCkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CkBAIC0zOTMsMTUgKzQxMiwyOSBAQCBib29sIEhUTUxJbnB1dEVs
ZW1lbnQ6OmlzTW91c2VGb2N1c2FibGUoKSBjb25zdAogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6
OnVwZGF0ZUZvY3VzQXBwZWFyYW5jZShib29sIHJlc3RvcmVQcmV2aW91c1NlbGVjdGlvbikKIHsK
LSAgICBpZiAoaXNUZXh0RmllbGQoKSkKLSAgICAgICAgSW5wdXRFbGVtZW50Ojp1cGRhdGVGb2N1
c0FwcGVhcmFuY2UobV9kYXRhLCB0aGlzLCB0aGlzLCByZXN0b3JlUHJldmlvdXNTZWxlY3Rpb24p
OwotICAgIGVsc2UKKyAgICBpZiAoaXNUZXh0RmllbGQoKSkgeworICAgICAgICBpZiAoIXJlc3Rv
cmVQcmV2aW91c1NlbGVjdGlvbiB8fCBtX2NhY2hlZFNlbGVjdGlvblN0YXJ0ID09IC0xKQorICAg
ICAgICAgICAgc2VsZWN0KCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gUmVzdG9y
ZSB0aGUgY2FjaGVkIHNlbGVjdGlvbi4KKyAgICAgICAgICAgIFdlYkNvcmU6OnNldFNlbGVjdGlv
blJhbmdlKHRoaXMsIG1fY2FjaGVkU2VsZWN0aW9uU3RhcnQsIG1fY2FjaGVkU2VsZWN0aW9uRW5k
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZG9jdW1lbnQoKS0+ZnJhbWUoKSkKKyAgICAgICAg
ICAgIGRvY3VtZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigpLT5yZXZlYWxTZWxlY3Rpb24oKTsK
KyAgICB9IGVsc2UKICAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6dXBk
YXRlRm9jdXNBcHBlYXJhbmNlKHJlc3RvcmVQcmV2aW91c1NlbGVjdGlvbik7CiB9CiAKIHZvaWQg
SFRNTElucHV0RWxlbWVudDo6YWJvdXRUb1VubG9hZCgpCiB7Ci0gICAgSW5wdXRFbGVtZW50Ojph
Ym91dFRvVW5sb2FkKHRoaXMsIHRoaXMpOworICAgIGlmICghaXNUZXh0RmllbGQoKSB8fCAhZm9j
dXNlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgp
LT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIGZyYW1l
LT5lZGl0b3IoKS0+dGV4dEZpZWxkRGlkRW5kRWRpdGluZyh0aGlzKTsKIH0KIAogYm9vbCBIVE1M
SW5wdXRFbGVtZW50OjpzaG91bGRVc2VJbnB1dE1ldGhvZCgpIGNvbnN0CkBAIC00MTEsMTMgKzQ0
NCwyNCBAQCBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OnNob3VsZFVzZUlucHV0TWV0aG9kKCkgY29u
c3QKIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpoYW5kbGVGb2N1c0V2ZW50KCkKIHsKLSAgICBJ
bnB1dEVsZW1lbnQ6OmRpc3BhdGNoRm9jdXNFdmVudCh0aGlzLCB0aGlzKTsKKyAgICBpZiAoIWlz
VGV4dEZpZWxkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoaXNQYXNzd29yZEZpZWxkKCkg
JiYgZG9jdW1lbnQoKS0+ZnJhbWUoKSkKKyAgICAgICAgZG9jdW1lbnQoKS0+c2V0VXNlU2VjdXJl
S2V5Ym9hcmRFbnRyeVdoZW5BY3RpdmUodHJ1ZSk7CiB9CiAKIHZvaWQgSFRNTElucHV0RWxlbWVu
dDo6aGFuZGxlQmx1ckV2ZW50KCkKIHsKICAgICBtX2lucHV0VHlwZS0+aGFuZGxlQmx1ckV2ZW50
KCk7Ci0gICAgSW5wdXRFbGVtZW50OjpkaXNwYXRjaEJsdXJFdmVudCh0aGlzLCB0aGlzKTsKKwor
ICAgIGlmICghaXNUZXh0RmllbGQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEZyYW1lKiBmcmFt
ZSA9IGRvY3VtZW50KCktPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJu
OworICAgIGlmIChpc1Bhc3N3b3JkRmllbGQoKSkKKyAgICAgICAgZG9jdW1lbnQoKS0+c2V0VXNl
U2VjdXJlS2V5Ym9hcmRFbnRyeVdoZW5BY3RpdmUoZmFsc2UpOworICAgIGZyYW1lLT5lZGl0b3Io
KS0+dGV4dEZpZWxkRGlkRW5kRWRpdGluZyh0aGlzKTsKIH0KIAogdm9pZCBIVE1MSW5wdXRFbGVt
ZW50OjpzZXRUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKQEAgLTQ2NiwxNCArNTEwLDE0IEBAIHZv
aWQgSFRNTElucHV0RWxlbWVudDo6dXBkYXRlVHlwZSgpCiAKICAgICBib29sIHdpbGxTdG9yZVZh
bHVlID0gbV9pbnB1dFR5cGUtPnN0b3Jlc1ZhbHVlU2VwYXJhdGVGcm9tQXR0cmlidXRlKCk7CiAK
LSAgICBpZiAoZGlkU3RvcmVWYWx1ZSAmJiAhd2lsbFN0b3JlVmFsdWUgJiYgIW1fZGF0YS52YWx1
ZSgpLmlzTnVsbCgpKSB7Ci0gICAgICAgIHNldEF0dHJpYnV0ZSh2YWx1ZUF0dHIsIG1fZGF0YS52
YWx1ZSgpKTsKLSAgICAgICAgbV9kYXRhLnNldFZhbHVlKFN0cmluZygpKTsKKyAgICBpZiAoZGlk
U3RvcmVWYWx1ZSAmJiAhd2lsbFN0b3JlVmFsdWUgJiYgIW1fdmFsdWUuaXNOdWxsKCkpIHsKKyAg
ICAgICAgc2V0QXR0cmlidXRlKHZhbHVlQXR0ciwgbV92YWx1ZSk7CisgICAgICAgIG1fdmFsdWUg
PSBTdHJpbmcoKTsKICAgICB9CiAgICAgaWYgKCFkaWRTdG9yZVZhbHVlICYmIHdpbGxTdG9yZVZh
bHVlKQotICAgICAgICBtX2RhdGEuc2V0VmFsdWUoc2FuaXRpemVWYWx1ZShmYXN0R2V0QXR0cmli
dXRlKHZhbHVlQXR0cikpKTsKKyAgICAgICAgbV92YWx1ZSA9ICBzYW5pdGl6ZVZhbHVlKGZhc3RH
ZXRBdHRyaWJ1dGUodmFsdWVBdHRyKSk7CiAgICAgZWxzZQotICAgICAgICBJbnB1dEVsZW1lbnQ6
OnVwZGF0ZVZhbHVlSWZOZWVkZWQobV9kYXRhLCB0aGlzKTsKKyAgICAgICAgdXBkYXRlVmFsdWVJ
Zk5lZWRlZCgpOwogCiAgICAgaWYgKG5lZWRlZEFjdGl2YXRpb25DYWxsYmFjaykKICAgICAgICAg
dW5yZWdpc3RlckZvckFjdGl2YXRpb25DYWxsYmFja0lmTmVlZGVkKCk7CkBAIC01MDIsNyArNTQ2
LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojp1cGRhdGVUeXBlKCkKICAgICBjaGVja2VkUmFk
aW9CdXR0b25zKCkuYWRkQnV0dG9uKHRoaXMpOwogCiAgICAgc2V0TmVlZHNWYWxpZGl0eUNoZWNr
KCk7Ci0gICAgSW5wdXRFbGVtZW50Ojpub3RpZnlGb3JtU3RhdGVDaGFuZ2VkKHRoaXMpOworICAg
IG5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQoKTsKIH0KIAogY29uc3QgQXRvbWljU3RyaW5nJiBIVE1M
SW5wdXRFbGVtZW50Ojpmb3JtQ29udHJvbFR5cGUoKSBjb25zdApAQCAtNTYwLDcgKzYwNCw3IEBA
IHZvaWQgSFRNTElucHV0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBh
dHRyKQogewogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gbmFtZUF0dHIpIHsKICAgICAgICAgY2hl
Y2tlZFJhZGlvQnV0dG9ucygpLnJlbW92ZUJ1dHRvbih0aGlzKTsKLSAgICAgICAgbV9kYXRhLnNl
dE5hbWUoYXR0ci0+dmFsdWUoKSk7CisgICAgICAgIG1fbmFtZSA9IGF0dHItPnZhbHVlKCk7CiAg
ICAgICAgIGNoZWNrZWRSYWRpb0J1dHRvbnMoKS5hZGRCdXR0b24odGhpcyk7CiAgICAgICAgIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIp
OwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGF1dG9jb21wbGV0ZUF0dHIpIHsKQEAg
LTU4Miw3ICs2MjYsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKEF0dHJpYnV0ZSogYXR0cikKICAgICAgICAgdXBkYXRlVHlwZSgpOwogICAgIH0gZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IHZhbHVlQXR0cikgewogICAgICAgICAvLyBXZSBvbmx5IG5lZWQg
dG8gc2V0Q2hhbmdlZCBpZiB0aGUgZm9ybSBpcyBsb29raW5nIGF0IHRoZSBkZWZhdWx0IHZhbHVl
IHJpZ2h0IG5vdy4KLSAgICAgICAgaWYgKG1fZGF0YS52YWx1ZSgpLmlzTnVsbCgpKQorICAgICAg
ICBpZiAobV92YWx1ZS5pc051bGwoKSkKICAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMo
KTsKICAgICAgICAgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcihmYWxzZSk7CiAg
ICAgICAgIHNldE5lZWRzVmFsaWRpdHlDaGVjaygpOwpAQCAtNTk2LDExICs2NDAsMjAgQEAgdm9p
ZCBIVE1MSW5wdXRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIp
CiAgICAgICAgICAgICBtX3JlZmxlY3RzQ2hlY2tlZEF0dHJpYnV0ZSA9IHRydWU7CiAgICAgICAg
IH0KICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBtYXhsZW5ndGhBdHRyKSB7Ci0gICAg
ICAgIElucHV0RWxlbWVudDo6cGFyc2VNYXhMZW5ndGhBdHRyaWJ1dGUobV9kYXRhLCB0aGlzLCB0
aGlzLCBhdHRyKTsKKyAgICAgICAgaW50IG1heExlbmd0aCA9IGF0dHItPmlzTnVsbCgpID8gbWF4
aW11bUxlbmd0aCA6IGF0dHItPnZhbHVlKCkudG9JbnQoKTsKKyAgICAgICAgaWYgKG1heExlbmd0
aCA8PSAwIHx8IG1heExlbmd0aCA+IG1heGltdW1MZW5ndGgpCisgICAgICAgICAgICBtYXhMZW5n
dGggPSBtYXhpbXVtTGVuZ3RoOworICAgICAgICBpbnQgb2xkTWF4TGVuZ3RoID0gbV9tYXhMZW5n
dGg7CisgICAgICAgIG1fbWF4TGVuZ3RoID0gbWF4TGVuZ3RoOworICAgICAgICBpZiAob2xkTWF4
TGVuZ3RoICE9IG1heExlbmd0aCkKKyAgICAgICAgICAgIHVwZGF0ZVZhbHVlSWZOZWVkZWQoKTsK
KyAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwogICAgICAgICBzZXROZWVkc1ZhbGlkaXR5
Q2hlY2soKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBzaXplQXR0cikKLSAgICAg
ICAgSW5wdXRFbGVtZW50OjpwYXJzZVNpemVBdHRyaWJ1dGUobV9kYXRhLCB0aGlzLCBhdHRyKTsK
LSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYWx0QXR0cikKKyAgICB9IGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBzaXplQXR0cikgeworICAgICAgICBtX3NpemUgPSBhdHRyLT5pc051bGwo
KSA/IGRlZmF1bHRTaXplIDogYXR0ci0+dmFsdWUoKS50b0ludCgpOworICAgICAgICBpZiAocmVu
ZGVyZXIoKSkKKyAgICAgICAgICAgIHJlbmRlcmVyKCktPnNldE5lZWRzTGF5b3V0QW5kUHJlZldp
ZHRoc1JlY2FsYygpOworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGFsdEF0dHIpCiAg
ICAgICAgIG1faW5wdXRUeXBlLT5hbHRBdHRyaWJ1dGVDaGFuZ2VkKCk7CiAgICAgZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IHNyY0F0dHIpCiAgICAgICAgIG1faW5wdXRUeXBlLT5zcmNBdHRyaWJ1
dGVDaGFuZ2VkKCk7CkBAIC04MDgsMTQgKzg2MSwxNCBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6
OnNldEluZGV0ZXJtaW5hdGUoYm9vbCBuZXdWYWx1ZSkKIAogaW50IEhUTUxJbnB1dEVsZW1lbnQ6
OnNpemUoKSBjb25zdAogewotICAgIHJldHVybiBtX2RhdGEuc2l6ZSgpOworICAgIHJldHVybiBt
X3NpemU7CiB9CiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6Y29weU5vbkF0dHJpYnV0ZVByb3Bl
cnRpZXMoY29uc3QgRWxlbWVudCogc291cmNlKQogewogICAgIGNvbnN0IEhUTUxJbnB1dEVsZW1l
bnQqIHNvdXJjZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxjb25zdCBIVE1MSW5wdXRFbGVtZW50Kj4o
c291cmNlKTsKIAotICAgIG1fZGF0YS5zZXRWYWx1ZShzb3VyY2VFbGVtZW50LT5tX2RhdGEudmFs
dWUoKSk7CisgICAgbV92YWx1ZSA9IHNvdXJjZUVsZW1lbnQtPm1fdmFsdWU7CiAgICAgc2V0Q2hl
Y2tlZChzb3VyY2VFbGVtZW50LT5tX2lzQ2hlY2tlZCk7CiAgICAgbV9yZWZsZWN0c0NoZWNrZWRB
dHRyaWJ1dGUgPSBzb3VyY2VFbGVtZW50LT5tX3JlZmxlY3RzQ2hlY2tlZEF0dHJpYnV0ZTsKICAg
ICBtX2lzSW5kZXRlcm1pbmF0ZSA9IHNvdXJjZUVsZW1lbnQtPm1faXNJbmRldGVybWluYXRlOwpA
QCAtODI5LDcgKzg4Miw3IEBAIFN0cmluZyBIVE1MSW5wdXRFbGVtZW50Ojp2YWx1ZSgpIGNvbnN0
CiAgICAgaWYgKG1faW5wdXRUeXBlLT5nZXRUeXBlU3BlY2lmaWNWYWx1ZSh2YWx1ZSkpCiAgICAg
ICAgIHJldHVybiB2YWx1ZTsKIAotICAgIHZhbHVlID0gbV9kYXRhLnZhbHVlKCk7CisgICAgdmFs
dWUgPSBtX3ZhbHVlOwogICAgIGlmICghdmFsdWUuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiB2
YWx1ZTsKIApAQCAtODU3LDcgKzkxMCw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0VmFs
dWVGb3JVc2VyKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAKIGNvbnN0IFN0cmluZyYgSFRNTElucHV0
RWxlbWVudDo6c3VnZ2VzdGVkVmFsdWUoKSBjb25zdAogewotICAgIHJldHVybiBtX2RhdGEuc3Vn
Z2VzdGVkVmFsdWUoKTsKKyAgICByZXR1cm4gbV9zdWdnZXN0ZWRWYWx1ZTsKIH0KIAogdm9pZCBI
VE1MSW5wdXRFbGVtZW50OjpzZXRTdWdnZXN0ZWRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQpA
QCAtODY1LDcgKzkxOCw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0U3VnZ2VzdGVkVmFs
dWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICBpZiAoIW1faW5wdXRUeXBlLT5jYW5TZXRTdWdn
ZXN0ZWRWYWx1ZSgpKQogICAgICAgICByZXR1cm47CiAgICAgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1h
dGNoZXNSZW5kZXJlcihmYWxzZSk7Ci0gICAgbV9kYXRhLnNldFN1Z2dlc3RlZFZhbHVlKHNhbml0
aXplVmFsdWUodmFsdWUpKTsKKyAgICBtX3N1Z2dlc3RlZFZhbHVlID0gc2FuaXRpemVWYWx1ZSh2
YWx1ZSk7CiAgICAgdXBkYXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KGZhbHNlKTsKICAgICBpZiAo
cmVuZGVyZXIoKSkKICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlRnJvbUVsZW1lbnQoKTsKQEAg
LTg4Miw3ICs5MzUsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlKGNvbnN0IFN0
cmluZyYgdmFsdWUsIGJvb2wgc2VuZENoYW5nZUV2ZW50KQogICAgICAgICBpZiAoZmlsZXMoKSkK
ICAgICAgICAgICAgIGZpbGVzKCktPmNsZWFyKCk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgbV9kYXRhLnNldFZhbHVlKHNhbml0aXplVmFsdWUodmFsdWUpKTsKKyAgICAgICAgICAgIG1f
dmFsdWUgPSBzYW5pdGl6ZVZhbHVlKHZhbHVlKTsKICAgICAgICAgICAgIGlmIChpc1RleHRGaWVs
ZCgpKQogICAgICAgICAgICAgICAgIHVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eShmYWxzZSk7
CiAgICAgICAgIH0KQEAgLTg5MywxMiArOTQ2LDEyIEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6
c2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBzZW5kQ2hhbmdlRXZlbnQpCiAgICAg
c2V0TmVlZHNWYWxpZGl0eUNoZWNrKCk7CiAKICAgICBpZiAoaXNUZXh0RmllbGQoKSkgewotICAg
ICAgICB1bnNpZ25lZCBtYXggPSBtX2RhdGEudmFsdWUoKS5sZW5ndGgoKTsKKyAgICAgICAgdW5z
aWduZWQgbWF4ID0gbV92YWx1ZS5sZW5ndGgoKTsKICAgICAgICAgaWYgKGRvY3VtZW50KCktPmZv
Y3VzZWROb2RlKCkgPT0gdGhpcykKLSAgICAgICAgICAgIElucHV0RWxlbWVudDo6dXBkYXRlU2Vs
ZWN0aW9uUmFuZ2UodGhpcywgdGhpcywgbWF4LCBtYXgpOworICAgICAgICAgICAgV2ViQ29yZTo6
c2V0U2VsZWN0aW9uUmFuZ2UodGhpcywgbWF4LCBtYXgpOwogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBjYWNoZVNlbGVjdGlvbihtYXgsIG1heCk7Ci0gICAgICAgIG1fZGF0YS5zZXRTdWdnZXN0
ZWRWYWx1ZShTdHJpbmcoKSk7CisgICAgICAgIG1fc3VnZ2VzdGVkVmFsdWUgPSBTdHJpbmcoKTsK
ICAgICB9CiAgICAgbV9pbnB1dFR5cGUtPnZhbHVlQ2hhbmdlZCgpOwogCkBAIC05MTQsNyArOTY3
LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVl
LCBib29sIHNlbmRDaGFuZ2VFdmVudCkKICAgICBpZiAoaXNUZXh0KCkgJiYgKCFmb2N1c2VkKCkg
fHwgIXNlbmRDaGFuZ2VFdmVudCkpCiAgICAgICAgIHNldFRleHRBc09mTGFzdEZvcm1Db250cm9s
Q2hhbmdlRXZlbnQodmFsdWUpOwogCi0gICAgSW5wdXRFbGVtZW50Ojpub3RpZnlGb3JtU3RhdGVD
aGFuZ2VkKHRoaXMpOworICAgIG5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQoKTsKIH0KIAogZG91Ymxl
IEhUTUxJbnB1dEVsZW1lbnQ6OnZhbHVlQXNEYXRlKCkgY29uc3QKQEAgLTk2MSw4ICsxMDE0LDIz
IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWVGcm9tUmVuZGVyZXIoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKICAgICAvLyBGaWxlIHVwbG9hZCBjb250cm9scyB3aWxsIGFsd2F5cyB1c2Ug
c2V0RmlsZUxpc3RGcm9tUmVuZGVyZXIuCiAgICAgQVNTRVJUKCFpc0ZpbGVVcGxvYWQoKSk7CiAK
LSAgICBtX2RhdGEuc2V0U3VnZ2VzdGVkVmFsdWUoU3RyaW5nKCkpOwotICAgIElucHV0RWxlbWVu
dDo6c2V0VmFsdWVGcm9tUmVuZGVyZXIobV9kYXRhLCB0aGlzLCB0aGlzLCB2YWx1ZSk7CisgICAg
bV9zdWdnZXN0ZWRWYWx1ZSA9IFN0cmluZygpOworCisgICAgLy8gUmVuZGVyZXIgYW5kIG91ciBl
dmVudCBoYW5kbGVyIGFyZSByZXNwb25zaWJsZSBmb3Igc2FuaXRpemluZyB2YWx1ZXMuCisgICAg
QVNTRVJUKHZhbHVlID09IHNhbml0aXplVmFsdWUodmFsdWUpIHx8IHNhbml0aXplVmFsdWUodmFs
dWUpLmlzRW1wdHkoKSk7CisKKyAgICAvLyBXb3JrYXJvdW5kIGZvciBidWcgd2hlcmUgdHJhaWxp
bmcgXG4gaXMgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdCBvZiB0ZXh0Q29udGVudC4KKyAgICAvLyBU
aGUgYXNzZXJ0IG1hY3JvIGFib3ZlIG1heSBhbHNvIGJlIHNpbXBsaWZpZWQgdG86IHZhbHVlID09
IGNvbnN0cmFpblZhbHVlKHZhbHVlKQorICAgIC8vIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTk2NjEKKyAgICBtX3ZhbHVlID0gdmFsdWUgPT0gIlxuIiA/IFN0cmluZygi
IikgOiB2YWx1ZTsKKworICAgIHNldEZvcm1Db250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIodHJ1
ZSk7CisKKyAgICAvLyBJbnB1dCBldmVudCBpcyBmaXJlZCBieSB0aGUgTm9kZTo6ZGVmYXVsdEV2
ZW50SGFuZGxlciBmb3IgZWRpdGFibGUgY29udHJvbHMuCisgICAgaWYgKCFpc1RleHRGaWVsZCgp
KQorICAgICAgICBkaXNwYXRjaElucHV0RXZlbnQoKTsKKyAgICBub3RpZnlGb3JtU3RhdGVDaGFu
Z2VkKCk7CisKICAgICB1cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkoZmFsc2UpOwogICAgIHNl
dE5lZWRzVmFsaWRpdHlDaGVjaygpOwogCkBAIC05NzUsNyArMTA0Myw3IEBAIHZvaWQgSFRNTElu
cHV0RWxlbWVudDo6c2V0RmlsZUxpc3RGcm9tUmVuZGVyZXIoY29uc3QgVmVjdG9yPFN0cmluZz4m
IHBhdGhzKQogICAgIG1faW5wdXRUeXBlLT5zZXRGaWxlTGlzdChwYXRocyk7CiAKICAgICBzZXRG
b3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKHRydWUpOwotICAgIElucHV0RWxlbWVudDo6
bm90aWZ5Rm9ybVN0YXRlQ2hhbmdlZCh0aGlzKTsKKyAgICBub3RpZnlGb3JtU3RhdGVDaGFuZ2Vk
KCk7CiAgICAgc2V0TmVlZHNWYWxpZGl0eUNoZWNrKCk7CiB9CiAKQEAgLTExMDUsNyArMTE3Myw3
IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0RGVmYXVsdFZhbHVlKGNvbnN0IFN0cmluZyAm
dmFsdWUpCiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0RGVmYXVsdE5hbWUoY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lKQogewotICAgIG1fZGF0YS5zZXROYW1lKG5hbWUpOworICAgIG1fbmFt
ZSA9IG5hbWU7CiB9CiAKIFN0cmluZyBIVE1MSW5wdXRFbGVtZW50OjphY2NlcHQoKSBjb25zdApA
QCAtMTEyMCw3ICsxMTg4LDcgQEAgU3RyaW5nIEhUTUxJbnB1dEVsZW1lbnQ6OmFsdCgpIGNvbnN0
CiAKIGludCBIVE1MSW5wdXRFbGVtZW50OjptYXhMZW5ndGgoKSBjb25zdAogewotICAgIHJldHVy
biBtX2RhdGEubWF4TGVuZ3RoKCk7CisgICAgcmV0dXJuIG1fbWF4TGVuZ3RoOwogfQogCiB2b2lk
IEhUTUxJbnB1dEVsZW1lbnQ6OnNldE1heExlbmd0aChpbnQgbWF4TGVuZ3RoLCBFeGNlcHRpb25D
b2RlJiBlYykKQEAgLTEyMTksOCArMTI4Nyw4IEBAIGJvb2wgSFRNTElucHV0RWxlbWVudDo6aXNS
ZXF1aXJlZEZvcm1Db250cm9sKCkgY29uc3QKIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpjYWNo
ZVNlbGVjdGlvbihpbnQgc3RhcnQsIGludCBlbmQpCiB7Ci0gICAgbV9kYXRhLnNldENhY2hlZFNl
bGVjdGlvblN0YXJ0KHN0YXJ0KTsKLSAgICBtX2RhdGEuc2V0Q2FjaGVkU2VsZWN0aW9uRW5kKGVu
ZCk7CisgICAgbV9jYWNoZWRTZWxlY3Rpb25TdGFydCA9IHN0YXJ0OworICAgIG1fY2FjaGVkU2Vs
ZWN0aW9uRW5kID0gZW5kOwogfQogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmFkZFNlYXJjaFJl
c3VsdCgpCkBAIC0xNDQ0LDExICsxNTEyLDE0MCBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnN0
ZXBVcEZyb21SZW5kZXJlcihpbnQgbikKIAogI2lmIEVOQUJMRShXQ1NTKQogCitzdGF0aWMgaW5s
aW5lIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybWF0Q29kZXMoKQoreworICAgIERFRklORV9TVEFU
SUNfTE9DQUwoQXRvbWljU3RyaW5nLCBjb2RlcywgKCJBYU5uWHhNbSIpKTsKKyAgICByZXR1cm4g
Y29kZXM7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjdXJzb3JQb3NpdGlvblRvTWFza0luZGV4KGNv
bnN0IFN0cmluZyYgaW5wdXRGb3JtYXRNYXNrLCB1bnNpZ25lZCBjdXJzb3JQb3NpdGlvbikKK3sK
KyAgICBVQ2hhciBtYXNrOworICAgIGludCBpbmRleCA9IC0xOworICAgIGRvIHsKKyAgICAgICAg
bWFzayA9IGlucHV0Rm9ybWF0TWFza1srK2luZGV4XTsKKyAgICAgICAgaWYgKG1hc2sgPT0gJ1xc
JykKKyAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgIGVsc2UgaWYgKG1hc2sgPT0gJyonIHx8
IChpc0FTQ0lJRGlnaXQobWFzaykgJiYgbWFzayAhPSAnMCcpKSB7CisgICAgICAgICAgICBpbmRl
eCA9IGlucHV0Rm9ybWF0TWFzay5sZW5ndGgoKSAtIDE7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0gd2hpbGUgKGN1cnNvclBvc2l0aW9uLS0pOworCisgICAgcmV0dXJuIGlu
ZGV4OworfQorCitib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmlzQ29uZm9ybVRvSW5wdXRNYXNrKGNv
bnN0IFN0cmluZyYgaW5wdXRDaGFycykgY29uc3QKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgaW5wdXRDaGFycy5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGlmICghaXNDb25mb3Jt
VG9JbnB1dE1hc2soaW5wdXRDaGFyc1tpXSwgaSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIEhUTUxJbnB1dEVsZW1lbnQ6Omlz
Q29uZm9ybVRvSW5wdXRNYXNrKFVDaGFyIGluQ2hhciwgdW5zaWduZWQgY3Vyc29yUG9zaXRpb24p
IGNvbnN0Cit7CisgICAgaWYgKG1faW5wdXRGb3JtYXRNYXNrLmlzRW1wdHkoKSB8fCBtX2lucHV0
Rm9ybWF0TWFzayA9PSAiKk0iIHx8IG1faW5wdXRGb3JtYXRNYXNrID09ICIqbSIpCisgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgaWYgKGN1cnNvclBvc2l0aW9uID49IG1fbWF4SW5wdXRDaGFy
c0FsbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdW5zaWduZWQgbWFza0lu
ZGV4ID0gY3Vyc29yUG9zaXRpb25Ub01hc2tJbmRleChtX2lucHV0Rm9ybWF0TWFzaywgY3Vyc29y
UG9zaXRpb24pOworICAgIGJvb2wgb2sgPSB0cnVlOworICAgIFVDaGFyIG1hc2sgPSBtX2lucHV0
Rm9ybWF0TWFza1ttYXNrSW5kZXhdOworICAgIC8vIE1hdGNoIHRoZSBpbnB1dGVkIGNoYXJhY3Rl
ciB3aXRoIGlucHV0IG1hc2sKKyAgICBzd2l0Y2ggKG1hc2spIHsKKyAgICBjYXNlICdBJzoKKyAg
ICAgICAgb2sgPSAhaXNBU0NJSURpZ2l0KGluQ2hhcikgJiYgIWlzQVNDSUlMb3dlcihpbkNoYXIp
ICYmIGlzQVNDSUlQcmludGFibGUoaW5DaGFyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAn
YSc6CisgICAgICAgIG9rID0gIWlzQVNDSUlEaWdpdChpbkNoYXIpICYmICFpc0FTQ0lJVXBwZXIo
aW5DaGFyKSAmJiBpc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgJ04nOgorICAgICAgICBvayA9IGlzQVNDSUlEaWdpdChpbkNoYXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlICduJzoKKyAgICAgICAgb2sgPSAhaXNBU0NJSUFscGhhKGluQ2hhcikg
JiYgaXNBU0NJSVByaW50YWJsZShpbkNoYXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlICdY
JzoKKyAgICAgICAgb2sgPSAhaXNBU0NJSUxvd2VyKGluQ2hhcikgJiYgaXNBU0NJSVByaW50YWJs
ZShpbkNoYXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlICd4JzoKKyAgICAgICAgb2sgPSAh
aXNBU0NJSVVwcGVyKGluQ2hhcikgJiYgaXNBU0NJSVByaW50YWJsZShpbkNoYXIpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlICdNJzoKKyAgICBjYXNlICdtJzoKKyAgICAgICAgb2sgPSBpc0FT
Q0lJUHJpbnRhYmxlKGluQ2hhcik7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIG9rID0gKG1hc2sgPT0gaW5DaGFyKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
cmV0dXJuIG9rOworfQorCitTdHJpbmcgSFRNTElucHV0RWxlbWVudDo6dmFsaWRhdGVJbnB1dE1h
c2soU3RyaW5nJiBpbnB1dE1hc2spCit7CisgICAgaW5wdXRNYXNrLnJlcGxhY2UoIlxcXFwiLCAi
XFwiKTsKKworICAgIGJvb2wgaXNWYWxpZCA9IHRydWU7CisgICAgYm9vbCBoYXNXaWxkY2FyZCA9
IGZhbHNlOworICAgIHVuc2lnbmVkIGVzY2FwZUNoYXJDb3VudCA9IDA7CisgICAgdW5zaWduZWQg
bWFza0xlbmd0aCA9IGlucHV0TWFzay5sZW5ndGgoKTsKKyAgICBVQ2hhciBmb3JtYXRDb2RlOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtYXNrTGVuZ3RoOyArK2kpIHsKKyAgICAgICAg
Zm9ybWF0Q29kZSA9IGlucHV0TWFza1tpXTsKKyAgICAgICAgaWYgKGZvcm1hdENvZGVzKCkuZmlu
ZChmb3JtYXRDb2RlKSA9PSAtMSkgeworICAgICAgICAgICAgaWYgKGZvcm1hdENvZGUgPT0gJyon
IHx8IChpc0FTQ0lJRGlnaXQoZm9ybWF0Q29kZSkgJiYgZm9ybWF0Q29kZSAhPSAnMCcpKSB7Cisg
ICAgICAgICAgICAgICAgLy8gVmFsaWRhdGUgY29kZXMgd2hpY2ggZW5kcyB3aXRoICcqZicgb3Ig
J25mJworICAgICAgICAgICAgICAgIGZvcm1hdENvZGUgPSBpbnB1dE1hc2tbKytpXTsKKyAgICAg
ICAgICAgICAgICBpZiAoKGkgKyAxICE9IG1hc2tMZW5ndGgpIHx8IGZvcm1hdENvZGVzKCkuZmlu
ZChmb3JtYXRDb2RlKSA9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBoYXNXaWxkY2FyZCA9IHRydWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGZv
cm1hdENvZGUgPT0gJ1xcJykgeworICAgICAgICAgICAgICAgIC8vIHNraXAgb3ZlciB0aGUgbmV4
dCBtYXNrIGNoYXJhY3RlcgorICAgICAgICAgICAgICAgICsraTsKKyAgICAgICAgICAgICAgICAr
K2VzY2FwZUNoYXJDb3VudDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
aXNWYWxpZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFpc1ZhbGlkKQorICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CisgICAgLy8gY2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBhbGxvd2Vk
IHRvIGJlIGVudGVyZWQgYnkgaW5wdXQgbWFzaworICAgIHVuc2lnbmVkIGFsbG93ZWRMZW5ndGgg
PSBtYXNrTGVuZ3RoOworICAgIGlmIChlc2NhcGVDaGFyQ291bnQpCisgICAgICAgIGFsbG93ZWRM
ZW5ndGggLT0gZXNjYXBlQ2hhckNvdW50OworCisgICAgaWYgKGhhc1dpbGRjYXJkKSB7CisgICAg
ICAgIGZvcm1hdENvZGUgPSBpbnB1dE1hc2tbbWFza0xlbmd0aCAtIDJdOworICAgICAgICBpZiAo
Zm9ybWF0Q29kZSA9PSAnKicpCisgICAgICAgICAgICBhbGxvd2VkTGVuZ3RoID0gbV9tYXhJbnB1
dENoYXJzQWxsb3dlZDsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB1bnNpZ25lZCBsZWZ0
TGVuID0gU3RyaW5nKCZmb3JtYXRDb2RlKS50b0ludCgpOworICAgICAgICAgICAgYWxsb3dlZExl
bmd0aCA9IGxlZnRMZW4gKyBhbGxvd2VkTGVuZ3RoIC0gMjsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmIChhbGxvd2VkTGVuZ3RoIDwgbV9tYXhJbnB1dENoYXJzQWxsb3dlZCkKKyAgICAgICAg
bV9tYXhJbnB1dENoYXJzQWxsb3dlZCA9IGFsbG93ZWRMZW5ndGg7CisKKyAgICByZXR1cm4gaW5w
dXRNYXNrOworfQorCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldFdhcElucHV0Rm9ybWF0KFN0
cmluZyYgbWFzaykKIHsKLSAgICBTdHJpbmcgdmFsaWRhdGVNYXNrID0gdmFsaWRhdGVJbnB1dE1h
c2sobV9kYXRhLCBtYXNrKTsKKyAgICBTdHJpbmcgdmFsaWRhdGVNYXNrID0gdmFsaWRhdGVJbnB1
dE1hc2sobWFzayk7CiAgICAgaWYgKCF2YWxpZGF0ZU1hc2suaXNFbXB0eSgpKQotICAgICAgICBt
X2RhdGEuc2V0SW5wdXRGb3JtYXRNYXNrKHZhbGlkYXRlTWFzayk7CisgICAgICAgIG1faW5wdXRG
b3JtYXRNYXNrID0gdmFsaWRhdGVNYXNrOwogfQogCiAjZW5kaWYKQEAgLTE1NjAsOSArMTc1Nywy
MSBAQCBDaGVja2VkUmFkaW9CdXR0b25zJiBIVE1MSW5wdXRFbGVtZW50OjpjaGVja2VkUmFkaW9C
dXR0b25zKCkgY29uc3QKICAgICByZXR1cm4gZG9jdW1lbnQoKS0+Y2hlY2tlZFJhZGlvQnV0dG9u
cygpOwogfQogCi12b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmhhbmRsZUJlZm9yZVRleHRJbnNlcnRl
ZEV2ZW50KEV2ZW50KiBldmVudCkKK3ZvaWQgSFRNTElucHV0RWxlbWVudDo6bm90aWZ5Rm9ybVN0
YXRlQ2hhbmdlZCgpCit7CisgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsK
KyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoUGFnZSogcGFnZSA9
IGZyYW1lLT5wYWdlKCkpCisgICAgICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+Zm9ybVN0
YXRlRGlkQ2hhbmdlKHRoaXMpOworfQorCit2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnVwZGF0ZVZh
bHVlSWZOZWVkZWQoKQogewotICAgIElucHV0RWxlbWVudDo6aGFuZGxlQmVmb3JlVGV4dEluc2Vy
dGVkRXZlbnQobV9kYXRhLCB0aGlzLCB0aGlzLCBldmVudCk7CisgICAgU3RyaW5nIG5ld1ZhbHVl
ID0gc2FuaXRpemVWYWx1ZShtX3ZhbHVlKTsKKyAgICBpZiAobmV3VmFsdWUgIT0gbV92YWx1ZSkK
KyAgICAgICAgc2V0VmFsdWUobmV3VmFsdWUpOwogfQogCiB9IC8vIG5hbWVzcGFjZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAppbmRleCA1YmU3MzY2ODc5NjBmYzlkZGJiM2I5
YTY5ZTVjN2IzOTA3ZDQwOTcwLi44YjIwZGUxY2U3MmU2MzM4YTk2YzY1MjMzMzFmMzA2ZGVhYTQ5
NTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaApAQCAtMjUsNyArMjUs
NiBAQAogI2RlZmluZSBIVE1MSW5wdXRFbGVtZW50X2gKIAogI2luY2x1ZGUgIkhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQuaCIKLSNpbmNsdWRlICJJbnB1dEVsZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC0zNSwxNCArMzQsMTQgQEAgY2xhc3MgSFRNTE9wdGlvbkVsZW1lbnQ7CiBj
bGFzcyBJbnB1dFR5cGU7CiBjbGFzcyBLVVJMOwogCi1jbGFzcyBIVE1MSW5wdXRFbGVtZW50IDog
cHVibGljIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LCBwdWJsaWMgSW5wdXRFbGVtZW50IHsK
K2NsYXNzIEhUTUxJbnB1dEVsZW1lbnQgOiBwdWJsaWMgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1l
bnQgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+IGNy
ZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqLCBi
b29sIGNyZWF0ZWRCeVBhcnNlcik7CiAgICAgdmlydHVhbCB+SFRNTElucHV0RWxlbWVudCgpOwog
CiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUih3ZWJraXRzcGVlY2hjaGFuZ2Up
OwogCi0gICAgdmlydHVhbCBJbnB1dEVsZW1lbnQqIHRvSW5wdXRFbGVtZW50KCkgeyByZXR1cm4g
dGhpczsgfQorICAgIHZpcnR1YWwgSFRNTElucHV0RWxlbWVudCogdG9JbnB1dEVsZW1lbnQoKSB7
IHJldHVybiB0aGlzOyB9CiAKICAgICBib29sIGF1dG9Db21wbGV0ZSgpIGNvbnN0OwogCkBAIC03
OCwxOCArNzcsMTggQEAgcHVibGljOgogICAgIHZvaWQgc3RlcFVwKEV4Y2VwdGlvbkNvZGUmIGVj
KSB7IHN0ZXBVcCgxLCBlYyk7IH0KICAgICB2b2lkIHN0ZXBEb3duKEV4Y2VwdGlvbkNvZGUmIGVj
KSB7IHN0ZXBEb3duKDEsIGVjKTsgfQogICAgIC8vIHN0ZXBVcCgpL3N0ZXBEb3duKCkgZm9yIHVz
ZXItaW50ZXJhY3Rpb24uCi0gICAgdmlydHVhbCBib29sIGlzU3RlcHBhYmxlKCkgY29uc3Q7Cisg
ICAgYm9vbCBpc1N0ZXBwYWJsZSgpIGNvbnN0OwogICAgIHZvaWQgc3RlcFVwRnJvbVJlbmRlcmVy
KGludCk7CiAKICAgICBib29sIGlzVGV4dEJ1dHRvbigpIGNvbnN0OwogCiAgICAgdmlydHVhbCBi
b29sIGlzUmFkaW9CdXR0b24oKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0RmllbGQo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNTZWFyY2hGaWVsZCgpIGNvbnN0OwotICAgIHZp
cnR1YWwgYm9vbCBpc0lucHV0VHlwZUhpZGRlbigpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBp
c1Bhc3N3b3JkRmllbGQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNDaGVja2JveCgpIGNv
bnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc1JhbmdlQ29udHJvbCgpIGNvbnN0OworICAgIGJvb2wg
aXNUZXh0RmllbGQoKSBjb25zdDsKKyAgICBib29sIGlzU2VhcmNoRmllbGQoKSBjb25zdDsKKyAg
ICBib29sIGlzSW5wdXRUeXBlSGlkZGVuKCkgY29uc3Q7CisgICAgYm9vbCBpc1Bhc3N3b3JkRmll
bGQoKSBjb25zdDsKKyAgICBib29sIGlzQ2hlY2tib3goKSBjb25zdDsKKyAgICBib29sIGlzUmFu
Z2VDb250cm9sKCkgY29uc3Q7CiAKICAgICAvLyBGSVhNRTogSXQncyBoaWdobHkgbGlrZWx5IHRo
YXQgYW55IGNhbGwgc2l0ZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGluc3RlYWQKICAg
ICAvLyBiZSB1c2luZyBhIGRpZmZlcmVudCBvbmUuIE1hbnkgaW5wdXQgZWxlbWVudHMgYmVoYXZl
IGxpa2UgdGV4dCBmaWVsZHMsIGFuZCBpbiBhZGRpdGlvbgpAQCAtMTA2LDcgKzEwNSw3IEBAIHB1
YmxpYzoKICAgICBib29sIGlzVVJMRmllbGQoKSBjb25zdDsKIAogI2lmIEVOQUJMRShJTlBVVF9T
UEVFQ0gpCi0gICAgdmlydHVhbCBib29sIGlzU3BlZWNoRW5hYmxlZCgpIGNvbnN0OworICAgIGJv
b2wgaXNTcGVlY2hFbmFibGVkKCkgY29uc3Q7CiAjZW5kaWYKIAogICAgIGJvb2wgY2hlY2tlZCgp
IGNvbnN0IHsgcmV0dXJuIG1faXNDaGVja2VkOyB9CkBAIC0xMTYsMTggKzExNSwzMCBAQCBwdWJs
aWM6CiAgICAgYm9vbCBpbmRldGVybWluYXRlKCkgY29uc3QgeyByZXR1cm4gbV9pc0luZGV0ZXJt
aW5hdGU7IH0KICAgICB2b2lkIHNldEluZGV0ZXJtaW5hdGUoYm9vbCk7CiAKLSAgICB2aXJ0dWFs
IGludCBzaXplKCkgY29uc3Q7CisgICAgLy8gaXNDaGVja2VkIGlzIHVzZWQgYnkgdGhlIHJlbmRl
cmluZyB0cmVlL0NTUyB3aGlsZSBjaGVja2VkKCkgaXMgdXNlZCBieSBKUyB0byBkZXRlcm1pbmUg
Y2hlY2tlZCBzdGF0ZQorICAgIHZpcnR1YWwgYm9vbCBpc0NoZWNrZWQoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGJvb2wgaXNJbmRldGVybWluYXRlKCkgY29uc3QgeyByZXR1cm4gaW5kZXRlcm1pbmF0
ZSgpOyB9CisKKyAgICBpbnQgc2l6ZSgpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRUeXBlKGNvbnN0
IFN0cmluZyYpOwogCi0gICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiwgYm9vbCBzZW5kQ2hhbmdlRXZlbnQgPSBm
YWxzZSk7Ci0gICAgdmlydHVhbCB2b2lkIHNldFZhbHVlRm9yVXNlcihjb25zdCBTdHJpbmcmKTsK
KyAgICBTdHJpbmcgdmFsdWUoKSBjb25zdDsKKyAgICB2b2lkIHNldFZhbHVlKGNvbnN0IFN0cmlu
ZyYsIGJvb2wgc2VuZENoYW5nZUV2ZW50ID0gZmFsc2UpOworICAgIHZvaWQgc2V0VmFsdWVGb3JV
c2VyKGNvbnN0IFN0cmluZyYpOwogICAgIC8vIENoZWNrcyBpZiB0aGUgc3BlY2lmaWVkIHN0cmlu
ZyB3b3VsZCBiZSBhIHZhbGlkIHZhbHVlLgogICAgIC8vIFdlIHNob3VsZCBub3QgY2FsbCB0aGlz
IGZvciB0eXBlcyB3aXRoIG5vIHN0cmluZyB2YWx1ZSBzdWNoIGFzIENIRUNLQk9YIGFuZCBSQURJ
Ty4KICAgICBib29sIGlzVmFsaWRWYWx1ZShjb25zdCBTdHJpbmcmKSBjb25zdDsKIAotICAgIHZp
cnR1YWwgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRWYWx1ZSgpIGNvbnN0OworICAgIFN0cmluZyBz
YW5pdGl6ZVZhbHVlKGNvbnN0IFN0cmluZyYpIGNvbnN0OworCisgICAgLy8gVGhlIHZhbHVlIHdo
aWNoIGlzIGRyYXduIGJ5IGEgcmVuZGVyZXIuCisgICAgU3RyaW5nIHZpc2libGVWYWx1ZSgpIGNv
bnN0OworICAgIFN0cmluZyBjb252ZXJ0RnJvbVZpc2libGVWYWx1ZShjb25zdCBTdHJpbmcmKSBj
b25zdDsKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHNwZWNpZmllZCBzdHJpbmcgY2FuIGJl
IHNldCBhcyB0aGUgdmFsdWUgb2YgSFRNTElucHV0RWxlbWVudC4KKyAgICBib29sIGlzQWNjZXB0
YWJsZVZhbHVlKGNvbnN0IFN0cmluZyYpIGNvbnN0OworCisgICAgY29uc3QgU3RyaW5nJiBzdWdn
ZXN0ZWRWYWx1ZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0U3VnZ2VzdGVkVmFsdWUoY29uc3QgU3Ry
aW5nJik7CiAKICAgICBkb3VibGUgdmFsdWVBc0RhdGUoKSBjb25zdDsKQEAgLTE0MSwxMSArMTUy
LDEwIEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyB2YWx1ZVdpdGhEZWZhdWx0KCkgY29uc3Q7CiAK
LSAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVGcm9tUmVuZGVyZXIoY29uc3QgU3RyaW5nJik7Cisg
ICAgdm9pZCBzZXRWYWx1ZUZyb21SZW5kZXJlcihjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHNl
dEZpbGVMaXN0RnJvbVJlbmRlcmVyKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CiAKICAgICBib29s
IGNhbkhhdmVTZWxlY3Rpb24oKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0KCkgeyBI
VE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2VsZWN0KCk7IH0KIAogICAgIHZpcnR1YWwgYm9v
bCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKik7CiAgICAgdmlydHVhbCBSZW5kZXJPYmpl
Y3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKQEAgLTE3OCwx
MyArMTg4LDE0IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgbXVsdGlwbGUoKSBjb25zdDsKIAotICAg
IHZpcnR1YWwgYm9vbCBpc0F1dG9maWxsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzQXV0b2ZpbGxl
ZDsgfQorICAgIGJvb2wgaXNBdXRvZmlsbGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0F1dG9maWxs
ZWQ7IH0KICAgICB2b2lkIHNldEF1dG9maWxsZWQoYm9vbCA9IHRydWUpOwogCiAgICAgRmlsZUxp
c3QqIGZpbGVzKCk7CiAKICAgICB2b2lkIGFkZFNlYXJjaFJlc3VsdCgpOwogICAgIHZvaWQgb25T
ZWFyY2goKTsKKyAgICBib29sIHNlYXJjaEV2ZW50c1Nob3VsZEJlRGlzcGF0Y2hlZCgpIGNvbnN0
OwogCiAjaWYgRU5BQkxFKERBVEFMSVNUKQogICAgIEhUTUxFbGVtZW50KiBsaXN0KCkgY29uc3Q7
CkBAIC0xOTgsMTEgKzIwOSwxNiBAQCBwdWJsaWM6CiAgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFy
ZSBwdWJsaWMgc28gdGhleSBjYW4gYmUgdXNlZCBpbiBJbnB1dFR5cGUgY2xhc3Nlcy4KICAgICAv
LyBPdGhlcndpc2UsIHRoZXkgd291bGQgYmUgcHJpdmF0ZS4KICAgICBDaGVja2VkUmFkaW9CdXR0
b25zJiBjaGVja2VkUmFkaW9CdXR0b25zKCkgY29uc3Q7Ci0gICAgdm9pZCBoYW5kbGVCZWZvcmVU
ZXh0SW5zZXJ0ZWRFdmVudChFdmVudCopOwogICAgIHZvaWQgdXBkYXRlQ2hlY2tlZFJhZGlvQnV0
dG9ucygpOworI2lmIEVOQUJMRShXQ1NTKQorICAgIGJvb2wgaXNDb25mb3JtVG9JbnB1dE1hc2so
Y29uc3QgU3RyaW5nJikgY29uc3Q7CisjZW5kaWYKIAogICAgIGJvb2wgbGFzdENoYW5nZVdhc1Vz
ZXJFZGl0KCkgY29uc3Q7Ci0gICAgCisgICAgdm9pZCBjYWNoZVNlbGVjdGlvbihpbnQgc3RhcnQs
IGludCBlbmQpOworCisgICAgc3RhdGljIGNvbnN0IGludCBtYXhpbXVtTGVuZ3RoOworCiBwcm90
ZWN0ZWQ6CiAgICAgSFRNTElucHV0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1l
bnQqLCBIVE1MRm9ybUVsZW1lbnQqLCBib29sIGNyZWF0ZWRCeVBhcnNlcik7CiAKQEAgLTIyMywx
OCArMjM5LDEyIEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYg
Zm9ybUNvbnRyb2xOYW1lKCkgY29uc3Q7CiAKLSAgICAvLyBpc0NoZWNrZWQgaXMgdXNlZCBieSB0
aGUgcmVuZGVyaW5nIHRyZWUvQ1NTIHdoaWxlIGNoZWNrZWQoKSBpcyB1c2VkIGJ5IEpTIHRvIGRl
dGVybWluZSBjaGVja2VkIHN0YXRlCi0gICAgdmlydHVhbCBib29sIGlzQ2hlY2tlZCgpIGNvbnN0
OwotICAgIHZpcnR1YWwgYm9vbCBpc0luZGV0ZXJtaW5hdGUoKSBjb25zdCB7IHJldHVybiBpbmRl
dGVybWluYXRlKCk7IH0KLQogICAgIHZpcnR1YWwgYm9vbCBpc1RleHRGb3JtQ29udHJvbCgpIGNv
bnN0IHsgcmV0dXJuIGlzVGV4dEZpZWxkKCk7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBjYW5Ucmln
Z2VySW1wbGljaXRTdWJtaXNzaW9uKCkgY29uc3QgeyByZXR1cm4gaXNUZXh0RmllbGQoKTsgfQog
CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sVHlwZSgpIGNvbnN0
OwogCi0gICAgdmlydHVhbCBib29sIHNlYXJjaEV2ZW50c1Nob3VsZEJlRGlzcGF0Y2hlZCgpIGNv
bnN0OwotCiAgICAgdmlydHVhbCBib29sIHNhdmVGb3JtQ29udHJvbFN0YXRlKFN0cmluZyYgdmFs
dWUpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCByZXN0b3JlRm9ybUNvbnRyb2xTdGF0ZShjb25z
dCBTdHJpbmcmKTsKIApAQCAtMjYxLDEyICsyNzEsNiBAQCBwcml2YXRlOgogCiAgICAgdmlydHVh
bCBib29sIGlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSopIGNvbnN0OwogCi0gICAgdmlydHVhbCB2
b2lkIGNhY2hlU2VsZWN0aW9uKGludCBzdGFydCwgaW50IGVuZCk7Ci0KLSAgICB2aXJ0dWFsIFN0
cmluZyB2aXNpYmxlVmFsdWUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFN0cmluZyBjb252ZXJ0RnJv
bVZpc2libGVWYWx1ZShjb25zdCBTdHJpbmcmKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNB
Y2NlcHRhYmxlVmFsdWUoY29uc3QgU3RyaW5nJikgY29uc3Q7Ci0gICAgdmlydHVhbCBTdHJpbmcg
c2FuaXRpemVWYWx1ZShjb25zdCBTdHJpbmcmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaGFz
VW5hY2NlcHRhYmxlVmFsdWUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0luUmFuZ2Uo
KSBjb25zdDsKQEAgLTI4MCw3ICsyODQsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVnaXN0ZXJG
b3JBY3RpdmF0aW9uQ2FsbGJhY2tJZk5lZWRlZCgpOwogICAgIHZvaWQgdW5yZWdpc3RlckZvckFj
dGl2YXRpb25DYWxsYmFja0lmTmVlZGVkKCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNN
YXhMZW5ndGgoKSBjb25zdCB7IHJldHVybiBpc1RleHRUeXBlKCk7IH0KKyAgICBib29sIHN1cHBv
cnRzTWF4TGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gaXNUZXh0VHlwZSgpOyB9CiAgICAgYm9vbCBp
c1RleHRUeXBlKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNQbGFjZWhvbGRl
cigpIGNvbnN0OwpAQCAtMjg4LDggKzI5Miw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29s
IGlzRW1wdHlTdWdnZXN0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHN1Z2dlc3RlZFZhbHVlKCku
aXNFbXB0eSgpOyB9CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUZvY3VzRXZlbnQoKTsKICAgICB2
aXJ0dWFsIHZvaWQgaGFuZGxlQmx1ckV2ZW50KCk7Ci0gICAgdmlydHVhbCBpbnQgY2FjaGVkU2Vs
ZWN0aW9uU3RhcnQoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuY2FjaGVkU2VsZWN0aW9uU3RhcnQo
KTsgfQotICAgIHZpcnR1YWwgaW50IGNhY2hlZFNlbGVjdGlvbkVuZCgpIGNvbnN0IHsgcmV0dXJu
IG1fZGF0YS5jYWNoZWRTZWxlY3Rpb25FbmQoKTsgfQorICAgIHZpcnR1YWwgaW50IGNhY2hlZFNl
bGVjdGlvblN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRTZWxlY3Rpb25TdGFydDsgfQor
ICAgIHZpcnR1YWwgaW50IGNhY2hlZFNlbGVjdGlvbkVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2Fj
aGVkU2VsZWN0aW9uRW5kOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNPcHRpb25hbEZvcm1Db250
cm9sKCkgY29uc3QgeyByZXR1cm4gIWlzUmVxdWlyZWRGb3JtQ29udHJvbCgpOyB9CiAgICAgdmly
dHVhbCBib29sIGlzUmVxdWlyZWRGb3JtQ29udHJvbCgpIGNvbnN0OwpAQCAtMzAzLDEyICszMDcs
MjQgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoREFUQUxJU1QpCiAgICAgSFRNTERhdGFMaXN0RWxl
bWVudCogZGF0YUxpc3QoKSBjb25zdDsKICNlbmRpZgotCisgICAgdm9pZCBub3RpZnlGb3JtU3Rh
dGVDaGFuZ2VkKCk7CisgICAgdm9pZCB1cGRhdGVWYWx1ZUlmTmVlZGVkKCk7CiAjaWYgRU5BQkxF
KFdDU1MpCi0gICAgdmlydHVhbCBJbnB1dEVsZW1lbnREYXRhIGRhdGEoKSBjb25zdCB7IHJldHVy
biBtX2RhdGE7IH0KKyAgICBib29sIGlzQ29uZm9ybVRvSW5wdXRNYXNrKFVDaGFyLCB1bnNpZ25l
ZCkgY29uc3Q7CisgICAgU3RyaW5nIHZhbGlkYXRlSW5wdXRNYXNrKFN0cmluZyYpOwogI2VuZGlm
CiAKLSAgICBJbnB1dEVsZW1lbnREYXRhIG1fZGF0YTsKKyAgICBBdG9taWNTdHJpbmcgbV9uYW1l
OworICAgIFN0cmluZyBtX3ZhbHVlOworICAgIFN0cmluZyBtX3N1Z2dlc3RlZFZhbHVlOworICAg
IGludCBtX3NpemU7CisgICAgaW50IG1fbWF4TGVuZ3RoOworICAgIGludCBtX2NhY2hlZFNlbGVj
dGlvblN0YXJ0OworICAgIGludCBtX2NhY2hlZFNlbGVjdGlvbkVuZDsKKyNpZiBFTkFCTEUoV0NT
UykKKyAgICBTdHJpbmcgbV9pbnB1dEZvcm1hdE1hc2s7CisgICAgdW5zaWduZWQgbV9tYXhJbnB1
dENoYXJzQWxsb3dlZDsKKyNlbmRpZgogICAgIHNob3J0IG1fbWF4UmVzdWx0czsKICAgICBib29s
IG1faXNDaGVja2VkIDogMTsKICAgICBib29sIG1fcmVmbGVjdHNDaGVja2VkQXR0cmlidXRlIDog
MTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCmluZGV4IGUw
NDYzZmZkZTc5MTI1ZmJhMmIxNDZjNDY4NDhjNzRiZDdlMDE3MWUuLmEyOTliMThjNjFlMTlmNDEy
ZGVlMDM5Y2RmOTA5YzFmYTFmYzUyMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFRleHRBcmVhRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4
dEFyZWFFbGVtZW50LmNwcApAQCAtMzksNyArMzksNiBAQAogI2luY2x1ZGUgIkZvcm1EYXRhTGlz
dC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVk
ZSAiSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlclN0
eWxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaCIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSW5wdXRUeXBlLmNwcAppbmRleCBjODgyY2Q1YzRiOGVjMzFjMTJmZmU2MTc5YjI4ZTUyNGVl
MTEzMGE0Li42YjM1OWVmODk4NDBkNTE3MGRhNzU0NDEyOWIyNGFlYzdhZTZjZGQwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9JbnB1dFR5cGUuY3BwCkBAIC0zMjYsOSArMzI2LDggQEAgdm9pZCBJbnB1dFR5cGU6
OmhhbmRsZUtleXVwRXZlbnQoS2V5Ym9hcmRFdmVudCopCiB7CiB9CiAKLXZvaWQgSW5wdXRUeXBl
OjpoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudChCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCog
ZXZlbnQpCit2b2lkIElucHV0VHlwZTo6aGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoQmVm
b3JlVGV4dEluc2VydGVkRXZlbnQqKQogewotICAgIGVsZW1lbnQoKS0+aGFuZGxlQmVmb3JlVGV4
dEluc2VydGVkRXZlbnQoZXZlbnQpOwogfQogCiB2b2lkIElucHV0VHlwZTo6aGFuZGxlV2hlZWxF
dmVudChXaGVlbEV2ZW50KikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZp
ZWxkSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBl
LmNwcAppbmRleCBmZmVhMmY0ZTBiMGNhYWQ0NGI4MzVhNmQyMGFiNTk5YzZkN2E0Yzk0Li42NTYz
MDQ5NjFhNDBmOTVjYzYxZGE2YzAwMmFiZjVjZWQyMjEzNTE2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCkBAIC0zMiwxMSArMzIsMTMgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJUZXh0RmllbGRJbnB1dFR5cGUuaCIKIAorI2luY2x1ZGUg
IkJlZm9yZVRleHRJbnNlcnRlZEV2ZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRl
ICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1
ZGUgIlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oIgogI2luY2x1ZGUgIlRleHRFdmVudC5o
IgorI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIldoZWVsRXZlbnQuaCIKICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtMTE5LDkgKzEyMSw3MiBAQCBib29s
IFRleHRGaWVsZElucHV0VHlwZTo6c2hvdWxkVXNlSW5wdXRNZXRob2QoKSBjb25zdAogICAgIHJl
dHVybiB0cnVlOwogfQogCitzdGF0aWMgU3RyaW5nIHJlcGxhY2VFT0xBbmRMaW1pdExlbmd0aChj
b25zdCBTdHJpbmcmIHByb3Bvc2VkVmFsdWUsIGludCBtYXhMZW5ndGgpCit7CisgICAgU3RyaW5n
IHN0cmluZyA9IHByb3Bvc2VkVmFsdWU7CisgICAgc3RyaW5nLnJlcGxhY2UoIlxyXG4iLCAiICIp
OworICAgIHN0cmluZy5yZXBsYWNlKCdccicsICcgJyk7CisgICAgc3RyaW5nLnJlcGxhY2UoJ1xu
JywgJyAnKTsKKworICAgIHVuc2lnbmVkIG5ld0xlbmd0aCA9IG51bUNoYXJhY3RlcnNJbkdyYXBo
ZW1lQ2x1c3RlcnMoc3RyaW5nLCBtYXhMZW5ndGgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBuZXdMZW5ndGg7ICsraSkgeworICAgICAgICBjb25zdCBVQ2hhciBjdXJyZW50ID0gc3Ry
aW5nW2ldOworICAgICAgICBpZiAoY3VycmVudCA8ICcgJyAmJiBjdXJyZW50ICE9ICdcdCcpIHsK
KyAgICAgICAgICAgIG5ld0xlbmd0aCA9IGk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4gc3RyaW5nLmxlZnQobmV3TGVuZ3RoKTsKK30KKwogU3RyaW5n
IFRleHRGaWVsZElucHV0VHlwZTo6c2FuaXRpemVWYWx1ZShjb25zdCBTdHJpbmcmIHByb3Bvc2Vk
VmFsdWUpCiB7Ci0gICAgcmV0dXJuIElucHV0RWxlbWVudDo6c2FuaXRpemVWYWx1ZUZvclRleHRG
aWVsZChlbGVtZW50KCksIHByb3Bvc2VkVmFsdWUpOworI2lmIEVOQUJMRShXQ1NTKQorICAgIGlm
ICghZWxlbWVudCgpLT5pc0NvbmZvcm1Ub0lucHV0TWFzayhwcm9wb3NlZFZhbHVlKSkgeworICAg
ICAgICBpZiAoaXNDb25mb3JtVG9JbnB1dE1hc2soZWxlbWVudCgpLT52YWx1ZSgpKSkKKyAgICAg
ICAgICAgIHJldHVybiBlbGVtZW50LT52YWx1ZSgpOworICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIHJlcGxhY2VFT0xBbmRMaW1pdExlbmd0aChwcm9w
b3NlZFZhbHVlLCBIVE1MSW5wdXRFbGVtZW50OjptYXhpbXVtTGVuZ3RoKTsKK30KKwordm9pZCBU
ZXh0RmllbGRJbnB1dFR5cGU6OmhhbmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KEJlZm9yZVRl
eHRJbnNlcnRlZEV2ZW50KiBldmVudCkKK3sKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgdGV4
dCB0byBiZSBpbnNlcnRlZCB3aWxsIG5vdCB2aW9sYXRlIHRoZSBtYXhMZW5ndGguCisKKyAgICAv
LyBXZSB1c2UgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp0ZXh0KCkgaW5zdGVhZCBvZiBJ
bnB1dEVsZW1lbnQ6OnZhbHVlKCkKKyAgICAvLyBiZWNhdXNlIHRoZXkgY2FuIGJlIG1pc21hdGNo
ZWQgYnkgc2FuaXRpemVWYWx1ZSgpIGluCisgICAgLy8gUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lOjpzdWJ0cmVlSGFzQ2hhbmdlZCgpIGluIHNvbWUgY2FzZXMuCisgICAgdW5zaWduZWQgb2xk
TGVuZ3RoID0gbnVtR3JhcGhlbWVDbHVzdGVycyh0b1JlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZShlbGVtZW50KCktPnJlbmRlcmVyKCkpLT50ZXh0KCkpOworCisgICAgLy8gc2VsZWN0aW9uTGVu
Z3RoIHJlcHJlc2VudHMgdGhlIHNlbGVjdGlvbiBsZW5ndGggb2YgdGhpcyB0ZXh0IGZpZWxkIHRv
IGJlCisgICAgLy8gcmVtb3ZlZCBieSB0aGlzIGluc2VydGlvbi4KKyAgICAvLyBJZiB0aGUgdGV4
dCBmaWVsZCBoYXMgbm8gZm9jdXMsIHdlIGRvbid0IG5lZWQgdG8gdGFrZSBhY2NvdW50IG9mIHRo
ZQorICAgIC8vIHNlbGVjdGlvbiBsZW5ndGguIFRoZSBzZWxlY3Rpb24gaXMgdGhlIHNvdXJjZSBv
ZiB0ZXh0IGRyYWctYW5kLWRyb3AgaW4KKyAgICAvLyB0aGF0IGNhc2UsIGFuZCBub3RoaW5nIGlu
IHRoZSB0ZXh0IGZpZWxkIHdpbGwgYmUgcmVtb3ZlZC4KKyAgICB1bnNpZ25lZCBzZWxlY3Rpb25M
ZW5ndGggPSBlbGVtZW50KCktPmZvY3VzZWQoKSA/IG51bUdyYXBoZW1lQ2x1c3RlcnMocGxhaW5U
ZXh0KGVsZW1lbnQoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNlbGVjdGlv
bigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpKSA6IDA7CisgICAgQVNTRVJUKG9sZExlbmd0
aCA+PSBzZWxlY3Rpb25MZW5ndGgpOworCisgICAgLy8gU2VsZWN0ZWQgY2hhcmFjdGVycyB3aWxs
IGJlIHJlbW92ZWQgYnkgdGhlIG5leHQgdGV4dCBldmVudC4KKyAgICB1bnNpZ25lZCBiYXNlTGVu
Z3RoID0gb2xkTGVuZ3RoIC0gc2VsZWN0aW9uTGVuZ3RoOworICAgIHVuc2lnbmVkIG1heExlbmd0
aCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpc1RleHRUeXBlKCkgPyBlbGVtZW50KCktPm1heExl
bmd0aCgpIDogSFRNTElucHV0RWxlbWVudDo6bWF4aW11bUxlbmd0aCk7IC8vIG1heExlbmd0aCBj
YW4gbmV2ZXIgYmUgbmVnYXRpdmUuCisgICAgdW5zaWduZWQgYXBwZW5kYWJsZUxlbmd0aCA9IG1h
eExlbmd0aCA+IGJhc2VMZW5ndGggPyBtYXhMZW5ndGggLSBiYXNlTGVuZ3RoIDogMDsKKworICAg
IC8vIFRydW5jYXRlIHRoZSBpbnNlcnRlZCB0ZXh0IHRvIGF2b2lkIHZpb2xhdGluZyB0aGUgbWF4
TGVuZ3RoIGFuZCBvdGhlciBjb25zdHJhaW50cy4KKyNpZiBFTkFCTEUoV0NTUykKKyAgICBSZWZQ
dHI8UmFuZ2U+IHJhbmdlID0gZWxlbWVudCgpLT5kb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rp
b24oKS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBTdHJpbmcgY2FuZGlk
YXRlU3RyaW5nID0gdG9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUoZWxlbWVudCgpLT5yZW5k
ZXJlcigpKS0+dGV4dCgpOworICAgIGlmIChzZWxlY3Rpb25MZW5ndGgpCisgICAgICAgIGNhbmRp
ZGF0ZVN0cmluZy5yZXBsYWNlKHJhbmdlLT5zdGFydE9mZnNldCgpLCByYW5nZS0+ZW5kT2Zmc2V0
KCksIGV2ZW50LT50ZXh0KCkpOworICAgIGVsc2UKKyAgICAgICAgY2FuZGlkYXRlU3RyaW5nLmlu
c2VydChldmVudC0+dGV4dCgpLCByYW5nZS0+c3RhcnRPZmZzZXQoKSk7CisgICAgaWYgKCFlbGVt
ZW50KCktPmlzQ29uZm9ybVRvSW5wdXRNYXNrKGNhbmRpZGF0ZVN0cmluZykpIHsKKyAgICAgICAg
ZXZlbnQtPnNldFRleHQoIiIpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAg
ZXZlbnQtPnNldFRleHQocmVwbGFjZUVPTEFuZExpbWl0TGVuZ3RoKGV2ZW50LT50ZXh0KCksIGFw
cGVuZGFibGVMZW5ndGgpKTsKIH0KIAogYm9vbCBUZXh0RmllbGRJbnB1dFR5cGU6OnNob3VsZFJl
c3BlY3RMaXN0QXR0cmlidXRlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4
dEZpZWxkSW5wdXRUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlw
ZS5oCmluZGV4IDg2YWQwZWYxYWNkNGJhNmIxOWYxMWJhODZjYWE0YTA4NzE4NGUxOGMuLmY1ODVh
YmIxNzRiNTg3MDg3ZGY5YTVlOTA0ZjRmMzQ2MTcyYTE5ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9UZXh0RmllbGRJbnB1dFR5cGUuaApAQCAtNDgsMTEgKzQ4LDEyIEBAIHByb3RlY3RlZDoKIHBy
aXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzVGV4dEZpZWxkKCkgY29uc3Q7CiAgICAgdmlydHVh
bCBib29sIHZhbHVlTWlzc2luZyhjb25zdCBTdHJpbmcmKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgaGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoQmVmb3JlVGV4dEluc2VydGVkRXZlbnQq
KTsKICAgICB2aXJ0dWFsIHZvaWQgZm9yd2FyZEV2ZW50KEV2ZW50Kik7CiAgICAgdmlydHVhbCBi
b29sIHNob3VsZFN1Ym1pdEltcGxpY2l0bHkoRXZlbnQqKTsKICAgICB2aXJ0dWFsIFJlbmRlck9i
amVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopIGNvbnN0Owog
ICAgIHZpcnR1YWwgYm9vbCBzaG91bGRVc2VJbnB1dE1ldGhvZCgpIGNvbnN0OwotICAgIHZpcnR1
YWwgU3RyaW5nIHNhbml0aXplVmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wb3NlZFZhbHVlKTsKKyAg
ICB2aXJ0dWFsIFN0cmluZyBzYW5pdGl6ZVZhbHVlKGNvbnN0IFN0cmluZyYpOwogICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRSZXNwZWN0TGlzdEF0dHJpYnV0ZSgpOwogfTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNw
cAppbmRleCAyYWRiODJhMmU1NDFhMTlhNTQ4Y2MzOTAyN2MwYmM4M2Y0OTcxOTEwLi44ZGE5NGJh
NTMyNzg5MjBlOTNhN2MzMDQyMTNkMTZjNWI3MTVmOGQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcApAQCAt
MzQsNyArMzQsNiBAQAogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJI
VE1MTmFtZXMuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCi0jaW5jbHVkZSAiSW5wdXRF
bGVtZW50LmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgogI2luY2x1ZGUgIk1vdXNl
RXZlbnQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKQEAgLTc1LDYgKzc0
LDggQEAgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmUoTm9kZSogbm9kZSwgYm9vbCBwbGFjZWgKICAgICAsIG1fc2VhcmNoRXZlbnRUaW1lcih0
aGlzLCAmUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzZWFyY2hFdmVudFRpbWVyRmlyZWQp
CiAgICAgLCBtX3NlYXJjaFBvcHVwKDApCiB7CisgICAgQVNTRVJUKG5vZGUtPmlzSFRNTEVsZW1l
bnQoKSk7CisgICAgQVNTRVJUKG5vZGUtPnRvSW5wdXRFbGVtZW50KCkpOwogfQogCiBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6On5SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUoKQpAQCAt
MTA2LDggKzEwNyw3IEBAIFJlbmRlclN0eWxlKiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6
OnRleHRCYXNlU3R5bGUoKSBjb25zdAogCiB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6YWRkU2VhcmNoUmVzdWx0KCkKIHsKLSAgICBBU1NFUlQobm9kZSgpLT5pc0hUTUxFbGVtZW50
KCkpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0
RWxlbWVudCo+KG5vZGUoKSk7CisgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBpbnB1dEVs
ZW1lbnQoKTsKICAgICBpZiAoaW5wdXQtPm1heFJlc3VsdHMoKSA8PSAwKQogICAgICAgICByZXR1
cm47CiAKQEAgLTEzOCwxMyArMTM4LDExIEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lOjphZGRTZWFyY2hSZXN1bHQoKQogCiB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6c3RvcFNlYXJjaEV2ZW50VGltZXIoKQogewotICAgIEFTU0VSVChub2RlKCktPmlzSFRNTEVs
ZW1lbnQoKSk7CiAgICAgbV9zZWFyY2hFdmVudFRpbWVyLnN0b3AoKTsKIH0KIAogdm9pZCBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNob3dQb3B1cCgpCiB7Ci0gICAgQVNTRVJUKG5vZGUo
KS0+aXNIVE1MRWxlbWVudCgpKTsKICAgICBpZiAobV9zZWFyY2hQb3B1cElzVmlzaWJsZSkKICAg
ICAgICAgcmV0dXJuOwogCkBAIC0xNjAsNyArMTU4LDcgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OnNob3dQb3B1cCgpCiAgICAgbV9zZWFyY2hQb3B1cC0+bG9hZFJlY2VudFNl
YXJjaGVzKG5hbWUsIG1fcmVjZW50U2VhcmNoZXMpOwogCiAgICAgLy8gVHJpbSB0aGUgcmVjZW50
IHNlYXJjaGVzIGxpc3QgaWYgdGhlIG1heGltdW0gc2l6ZSBoYXMgY2hhbmdlZCBzaW5jZSB3ZSBs
YXN0IHNhdmVkLgotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRN
TElucHV0RWxlbWVudCo+KG5vZGUoKSk7CisgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBp
bnB1dEVsZW1lbnQoKTsKICAgICBpZiAoc3RhdGljX2Nhc3Q8aW50PihtX3JlY2VudFNlYXJjaGVz
LnNpemUoKSkgPiBpbnB1dC0+bWF4UmVzdWx0cygpKSB7CiAgICAgICAgIGRvIHsKICAgICAgICAg
ICAgIG1fcmVjZW50U2VhcmNoZXMucmVtb3ZlTGFzdCgpOwpAQCAtMTc0LDcgKzE3Miw2IEBAIHZv
aWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzaG93UG9wdXAoKQogCiB2b2lkIFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZTo6aGlkZVBvcHVwKCkKIHsKLSAgICBBU1NFUlQobm9kZSgp
LT5pc0hUTUxFbGVtZW50KCkpOwogICAgIGlmIChtX3NlYXJjaFBvcHVwKQogICAgICAgICBtX3Nl
YXJjaFBvcHVwLT5wb3B1cE1lbnUoKS0+aGlkZSgpOwogfQpAQCAtMTg4LDE4ICsxODUsMTYgQEAg
dm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnN1YnRyZWVIYXNDaGFuZ2VkKCkKICAg
ICBib29sIHdhc0NoYW5nZWQgPSBlbGVtZW50LT53YXNDaGFuZ2VkU2luY2VMYXN0Rm9ybUNvbnRy
b2xDaGFuZ2VFdmVudCgpOwogICAgIGVsZW1lbnQtPnNldENoYW5nZWRTaW5jZUxhc3RGb3JtQ29u
dHJvbENoYW5nZUV2ZW50KHRydWUpOwogCi0gICAgSW5wdXRFbGVtZW50KiBpbnB1dCA9IGlucHV0
RWxlbWVudCgpOworICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gaW5wdXRFbGVtZW50KCk7
CiAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBjYWxsIHNhbml0aXplVXNlcklucHV0VmFsdWUoKSBm
dW5jdGlvbiBoZXJlIGJlY2F1c2UKLSAgICAvLyBJbnB1dEVsZW1lbnQ6OmhhbmRsZUJlZm9yZVRl
eHRJbnNlcnRlZEV2ZW50KCkgaGFzIGFscmVhZHkgY2FsbGVkCisgICAgLy8gSFRNTElucHV0RWxl
bWVudDo6aGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoKSBoYXMgYWxyZWFkeSBjYWxsZWQK
ICAgICAvLyBzYW5pdGl6ZVVzZXJJbnB1dFZhbHVlKCkuCiAgICAgLy8gc2FuaXRpemVWYWx1ZSgp
IGlzIG5lZWRlZCBiZWNhdXNlIElNRSBpbnB1dCBkb2Vzbid0IGRpc3BhdGNoIEJlZm9yZVRleHRJ
bnNlcnRlZEV2ZW50LgogICAgIFN0cmluZyB2YWx1ZSA9IHRleHQoKTsKICAgICBpZiAoaW5wdXQt
PmlzQWNjZXB0YWJsZVZhbHVlKHZhbHVlKSkKICAgICAgICAgaW5wdXQtPnNldFZhbHVlRnJvbVJl
bmRlcmVyKGlucHV0LT5zYW5pdGl6ZVZhbHVlKGlucHV0LT5jb252ZXJ0RnJvbVZpc2libGVWYWx1
ZSh2YWx1ZSkpKTsKLSAgICBpZiAobm9kZSgpLT5pc0hUTUxFbGVtZW50KCkpIHsKLSAgICAgICAg
Ly8gUmVjYWxjIGZvciA6aW52YWxpZCBhbmQgaGFzVW5hY2NlcHRhYmxlVmFsdWUoKSBjaGFuZ2Uu
Ci0gICAgICAgIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihpbnB1dCktPnNldE5lZWRz
U3R5bGVSZWNhbGMoKTsKLSAgICB9CisgICAgLy8gUmVjYWxjIGZvciA6aW52YWxpZCBhbmQgaGFz
VW5hY2NlcHRhYmxlVmFsdWUoKSBjaGFuZ2UuCisgICAgaW5wdXQtPnNldE5lZWRzU3R5bGVSZWNh
bGMoKTsKIAogICAgIGlmIChtX2NhbmNlbEJ1dHRvbikKICAgICAgICAgdXBkYXRlQ2FuY2VsQnV0
dG9uVmlzaWJpbGl0eSgpOwpAQCAtNzEwLDcgKzcwNSw3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjp1cGRhdGVGcm9tRWxlbWVudCgpCiAgICAgICAgICAgICAvLyBGb3IgSFRN
TElucHV0RWxlbWVudCwgdXBkYXRlIHRoZSByZW5kZXJlciB2YWx1ZSBpZiB0aGUgZm9ybUNvbnRy
b2xWYWx1ZU1hdGNoZXNSZW5kZXJlcigpCiAgICAgICAgICAgICAvLyBmbGFnIGlzIGZhbHNlLiBJ
dCBwcm90ZWN0cyBhbiB1bmFjY2VwdGFibGUgcmVuZGVyZXIgdmFsdWUgZnJvbQogICAgICAgICAg
ICAgLy8gYmVpbmcgb3ZlcndyaXR0ZW4gd2l0aCB0aGUgRE9NIHZhbHVlLgotICAgICAgICAgICAg
aWYgKCFzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obm9kZSgpKS0+Zm9ybUNvbnRyb2xW
YWx1ZU1hdGNoZXNSZW5kZXJlcigpKQorICAgICAgICAgICAgaWYgKCFpbnB1dEVsZW1lbnQoKS0+
Zm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcigpKQogICAgICAgICAgICAgICAgIHNldElu
bmVyVGV4dFZhbHVlKGlucHV0RWxlbWVudCgpLT52aXNpYmxlVmFsdWUoKSk7CiAgICAgICAgIH0K
ICAgICB9CkBAIC03NTUsOCArNzUwLDYgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjcmVhdGVJbm5lclRleHRTdHlsZShjb25zdAogCiBQYXNz
UmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZUlu
bmVyQmxvY2tTdHlsZShjb25zdCBSZW5kZXJTdHlsZSogc3RhcnRTdHlsZSkgY29uc3QKIHsKLSAg
ICBBU1NFUlQobm9kZSgpLT5pc0hUTUxFbGVtZW50KCkpOwotCiAgICAgUmVmUHRyPFJlbmRlclN0
eWxlPiBpbm5lckJsb2NrU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CiAgICAgaW5uZXJC
bG9ja1N0eWxlLT5pbmhlcml0RnJvbShzdGFydFN0eWxlKTsKIApAQCAtNzcxLDggKzc2NCw3IEBA
IFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y3Jl
YXRlSW5uZXJCbG9ja1N0eWxlKGNvbnN0CiAKIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZTo6Y3JlYXRlUmVzdWx0c0J1dHRvblN0eWxlKGNvbnN0IFJl
bmRlclN0eWxlKiBzdGFydFN0eWxlKSBjb25zdAogewotICAgIEFTU0VSVChub2RlKCktPmlzSFRN
TEVsZW1lbnQoKSk7Ci0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxI
VE1MSW5wdXRFbGVtZW50Kj4obm9kZSgpKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9
IGlucHV0RWxlbWVudCgpOwogCiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiByZXN1bHRzQmxvY2tT
dHlsZTsKICAgICBpZiAoaW5wdXQtPm1heFJlc3VsdHMoKSA8IDApCkBAIC03OTMsNyArNzg1LDYg
QEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpj
cmVhdGVSZXN1bHRzQnV0dG9uU3R5bGUoY28KIAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjcmVhdGVDYW5jZWxCdXR0b25TdHlsZShjb25zdCBS
ZW5kZXJTdHlsZSogc3RhcnRTdHlsZSkgY29uc3QKIHsKLSAgICBBU1NFUlQobm9kZSgpLT5pc0hU
TUxFbGVtZW50KCkpOwogICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gY2FuY2VsQmxvY2tTdHlsZTsK
ICAgICAKICAgICBpZiAoUmVmUHRyPFJlbmRlclN0eWxlPiBwc2V1ZG9TdHlsZSA9IGdldENhY2hl
ZFBzZXVkb1N0eWxlKFNFQVJDSF9DQU5DRUxfQlVUVE9OKSkKQEAgLTgxMSw3ICs4MDIsNiBAQCBQ
YXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0
ZUNhbmNlbEJ1dHRvblN0eWxlKGNvbgogCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZUlubmVyU3BpbkJ1dHRvblN0eWxlKCkgY29uc3QK
IHsKLSAgICBBU1NFUlQobm9kZSgpLT5pc0hUTUxFbGVtZW50KCkpOwogICAgIFJlZlB0cjxSZW5k
ZXJTdHlsZT4gYnV0dG9uU3R5bGUgPSBnZXRDYWNoZWRQc2V1ZG9TdHlsZShJTk5FUl9TUElOX0JV
VFRPTik7CiAgICAgaWYgKCFidXR0b25TdHlsZSkKICAgICAgICAgYnV0dG9uU3R5bGUgPSBSZW5k
ZXJTdHlsZTo6Y3JlYXRlKCk7CkBAIC04MjEsNyArODExLDYgQEAgUGFzc1JlZlB0cjxSZW5kZXJT
dHlsZT4gUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjcmVhdGVJbm5lclNwaW5CdXR0b25T
dHlsZSgKIAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lOjpjcmVhdGVPdXRlclNwaW5CdXR0b25TdHlsZSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKG5v
ZGUoKS0+aXNIVE1MRWxlbWVudCgpKTsKICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGJ1dHRvblN0
eWxlID0gZ2V0Q2FjaGVkUHNldWRvU3R5bGUoT1VURVJfU1BJTl9CVVRUT04pOwogICAgIGlmICgh
YnV0dG9uU3R5bGUpCiAgICAgICAgIGJ1dHRvblN0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgp
OwpAQCAtODMyLDcgKzgyMSw2IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6Y3JlYXRlT3V0ZXJTcGluQnV0dG9uU3R5bGUoCiAjaWYgRU5BQkxF
KElOUFVUX1NQRUVDSCkKIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZTo6Y3JlYXRlU3BlZWNoQnV0dG9uU3R5bGUoKSBjb25zdAogewotICAgIEFTU0VS
VChub2RlKCktPmlzSFRNTEVsZW1lbnQoKSk7CiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBidXR0
b25TdHlsZSA9IGdldENhY2hlZFBzZXVkb1N0eWxlKElOUFVUX1NQRUVDSF9CVVRUT04pOwogICAg
IGlmICghYnV0dG9uU3R5bGUpCiAgICAgICAgIGJ1dHRvblN0eWxlID0gUmVuZGVyU3R5bGU6OmNy
ZWF0ZSgpOwpAQCAtODU4LDkgKzg0Niw3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lOjp1cGRhdGVDYW5jZWxCdXR0b25WaXNpYmlsaXR5KCkgY29uc3QKIAogRVZpc2liaWxpdHkg
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp2aXNpYmlsaXR5Rm9yQ2FuY2VsQnV0dG9uKCkg
Y29uc3QKIHsKLSAgICBBU1NFUlQobm9kZSgpLT5pc0hUTUxFbGVtZW50KCkpOwotICAgIEhUTUxJ
bnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5vZGUo
KSk7Ci0gICAgcmV0dXJuIGlucHV0LT52YWx1ZSgpLmlzRW1wdHkoKSA/IEhJRERFTiA6IFZJU0lC
TEU7CisgICAgcmV0dXJuIGlucHV0RWxlbWVudCgpLT52YWx1ZSgpLmlzRW1wdHkoKSA/IEhJRERF
TiA6IFZJU0lCTEU7CiB9CiAKIGNvbnN0IEF0b21pY1N0cmluZyYgUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjphdXRvc2F2ZU5hbWUoKSBjb25zdApAQCAtODcwLDEzICs4NTYsMTIgQEAgY29u
c3QgQXRvbWljU3RyaW5nJiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmF1dG9zYXZlTmFt
ZSgpIGNvbnN0CiAKIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzdGFydFNlYXJj
aEV2ZW50VGltZXIoKQogewotICAgIEFTU0VSVChub2RlKCktPmlzSFRNTEVsZW1lbnQoKSk7CiAg
ICAgdW5zaWduZWQgbGVuZ3RoID0gdGV4dCgpLmxlbmd0aCgpOwogCiAgICAgLy8gSWYgdGhlcmUn
cyBubyB0ZXh0LCBmaXJlIHRoZSBldmVudCByaWdodCBhd2F5LgogICAgIGlmICghbGVuZ3RoKSB7
CiAgICAgICAgIHN0b3BTZWFyY2hFdmVudFRpbWVyKCk7Ci0gICAgICAgIHN0YXRpY19jYXN0PEhU
TUxJbnB1dEVsZW1lbnQqPihub2RlKCkpLT5vblNlYXJjaCgpOworICAgICAgICBpbnB1dEVsZW1l
bnQoKS0+b25TZWFyY2goKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtODg3LDE2ICs4
NzIsMTQgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnN0YXJ0U2VhcmNoRXZl
bnRUaW1lcigpCiAKIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzZWFyY2hFdmVu
dFRpbWVyRmlyZWQoVGltZXI8UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lPiopCiB7Ci0gICAg
QVNTRVJUKG5vZGUoKS0+aXNIVE1MRWxlbWVudCgpKTsKLSAgICBzdGF0aWNfY2FzdDxIVE1MSW5w
dXRFbGVtZW50Kj4obm9kZSgpKS0+b25TZWFyY2goKTsKKyAgICBpbnB1dEVsZW1lbnQoKS0+b25T
ZWFyY2goKTsKIH0KIAogLy8gUG9wdXBNZW51Q2xpZW50IG1ldGhvZHMKIHZvaWQgUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lOjp2YWx1ZUNoYW5nZWQodW5zaWduZWQgbGlzdEluZGV4LCBib29s
IGZpcmVFdmVudHMpCiB7Ci0gICAgQVNTRVJUKG5vZGUoKS0+aXNIVE1MRWxlbWVudCgpKTsKICAg
ICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihsaXN0SW5kZXgpIDwgbGlzdFNpemUoKSk7Ci0gICAg
SFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4o
bm9kZSgpKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IGlucHV0RWxlbWVudCgpOwog
ICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ+KGxpc3RJbmRleCkgPT0gKGxpc3RTaXplKCkgLSAxKSkg
ewogICAgICAgICBpZiAoZmlyZUV2ZW50cykgewogICAgICAgICAgICAgbV9yZWNlbnRTZWFyY2hl
cy5jbGVhcigpOwpAQCAtMTAzMCw4ICsxMDEzLDcgQEAgYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6Oml0ZW1Jc1NlbGVjdGVkKHVuc2lnbmVkKSBjb25zdAogCiB2b2lkIFJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZTo6c2V0VGV4dEZyb21JdGVtKHVuc2lnbmVkIGxpc3RJbmRleCkK
IHsKLSAgICBBU1NFUlQobm9kZSgpLT5pc0hUTUxFbGVtZW50KCkpOwotICAgIHN0YXRpY19jYXN0
PEhUTUxJbnB1dEVsZW1lbnQqPihub2RlKCkpLT5zZXRWYWx1ZShpdGVtVGV4dChsaXN0SW5kZXgp
KTsKKyAgICBpbnB1dEVsZW1lbnQoKS0+c2V0VmFsdWUoaXRlbVRleHQobGlzdEluZGV4KSk7CiB9
CiAKIEZvbnRTZWxlY3RvciogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpmb250U2VsZWN0
b3IoKSBjb25zdApAQCAtMTExOCw3ICsxMTAwLDcgQEAgUGFzc1JlZlB0cjxTY3JvbGxiYXI+IFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmUK
ICAgICByZXR1cm4gd2lkZ2V0LnJlbGVhc2UoKTsKIH0KIAotSW5wdXRFbGVtZW50KiBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OmlucHV0RWxlbWVudCgpIGNvbnN0CitIVE1MSW5wdXRFbGVt
ZW50KiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmlucHV0RWxlbWVudCgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG5vZGUoKS0+dG9JbnB1dEVsZW1lbnQoKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAppbmRl
eCAxOGU1ZmM4YmM0OTAzYjNjMmI4YzVhMmY1MzdjZDg4YzY3OGE2ZWJhLi5mNDNhYTFiM2E5YWQy
YjIwNTgwYTFhZjk0MGUxMmNlNGRmMjNhOGM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCkBAIC0zMCw3ICszMCw3
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSW5wdXRFbGVtZW50OworY2xhc3Mg
SFRNTElucHV0RWxlbWVudDsKIGNsYXNzIElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50Owog
Y2xhc3MgU2VhcmNoRmllbGRDYW5jZWxCdXR0b25FbGVtZW50OwogY2xhc3MgU2VhcmNoRmllbGRS
ZXN1bHRzQnV0dG9uRWxlbWVudDsKQEAgLTE0Miw3ICsxNDIsNyBAQCBwcml2YXRlOgogICAgIHZp
cnR1YWwgSG9zdFdpbmRvdyogaG9zdFdpbmRvdygpIGNvbnN0OwogICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxTY3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSosIFNjcm9sbGJh
ck9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSk7CiAKLSAgICBJbnB1dEVsZW1lbnQq
IGlucHV0RWxlbWVudCgpIGNvbnN0OworICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVu
dCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBpbnQgdGV4dEJsb2NrSW5zZXRMZWZ0KCkgY29uc3Q7
CiAgICAgdmlydHVhbCBpbnQgdGV4dEJsb2NrSW5zZXRSaWdodCgpIGNvbnN0OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKaW5kZXggYzJjMDllZGEzZmQyNWFhMmYzYzUy
Yjg2MGEwZWIyYjA2NjY5NWExZS4uNDY5NDA1NDVhZTU0MDUxMTY1M2E0MzAzYjY3NjdmNDgwYzg3
OTczZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCkBAIC03NTEs
NyArNzUxLDcgQEAgYm9vbCBSZW5kZXJUaGVtZTo6aXNDaGVja2VkKGNvbnN0IFJlbmRlck9iamVj
dCogbykgY29uc3QKICAgICBpZiAoIW8tPm5vZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBvLT5ub2RlKCktPnRvSW5wdXRFbGVt
ZW50KCk7CisgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gby0+bm9kZSgpLT50
b0lucHV0RWxlbWVudCgpOwogICAgIGlmICghaW5wdXRFbGVtZW50KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKQEAgLTc2Myw3ICs3NjMsNyBAQCBib29sIFJlbmRlclRoZW1lOjppc0luZGV0ZXJt
aW5hdGUoY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAogICAgIGlmICghby0+bm9kZSgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9
IG8tPm5vZGUoKS0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1
dEVsZW1lbnQgPSBvLT5ub2RlKCktPnRvSW5wdXRFbGVtZW50KCk7CiAgICAgaWYgKCFpbnB1dEVs
ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtOTY1LDcgKzk2NSw3IEBAIHZvaWQg
UmVuZGVyVGhlbWU6OmFkanVzdFByb2dyZXNzQmFyU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJl
bmRlclN0eWxlKiwgRWxlbWVuCiB9CiAjZW5kaWYKIAotYm9vbCBSZW5kZXJUaGVtZTo6c2hvdWxk
SGF2ZVNwaW5CdXR0b24oSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQpIGNvbnN0Citib29sIFJl
bmRlclRoZW1lOjpzaG91bGRIYXZlU3BpbkJ1dHRvbihIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVs
ZW1lbnQpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGlucHV0RWxlbWVudC0+aXNTdGVwcGFibGUoKSAm
JiAhaW5wdXRFbGVtZW50LT5pc1JhbmdlQ29udHJvbCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWUuaAppbmRleCBlMTNlMWJhMDQxZTk1YjBkYzAwYjMxOTVmOTcxMTNiMDNk
MjNiOWM1Li4xNTdiYTNhNWQyZDhhZTY4ZmE5NDBiNzI4YWVmODhjYjVhZTAzYmY4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaApAQCAtMzYsNiArMzYsNyBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBFbGVtZW50OworY2xhc3MgSFRNTElucHV0RWxlbWVudDsK
IGNsYXNzIFBvcHVwTWVudTsKIGNsYXNzIFJlbmRlck1lbnVMaXN0OwogI2lmIEVOQUJMRShNRVRF
Ul9UQUcpCkBAIC0yMDEsNyArMjAyLDcgQEAgcHVibGljOgogI2VuZGlmCiAgICAgCiAgICAgdmly
dHVhbCBib29sIHNob3VsZFNob3dQbGFjZWhvbGRlcldoZW5Gb2N1c2VkKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSGF2ZVNwaW5CdXR0b24oSW5wdXRF
bGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHNob3VsZEhhdmVTcGluQnV0dG9uKEhU
TUxJbnB1dEVsZW1lbnQqKSBjb25zdDsKIAogcHJvdGVjdGVkOgogICAgIC8vIFRoZSBwbGF0Zm9y
bSBzZWxlY3Rpb24gY29sb3IuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDBmZDgzYWQ1
YTdlY2ZkMjQ2ZWExNzg3N2U3MWRmZGZjZWU4NWRkNzUuLmFiNzE3Mjc3MTY1ZjUwMWJhYjRiYWIx
NzM0YWI4MzA2NjVmNjhkNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTYgQEAKKzIwMTEtMDUtMDUgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVsaW1pbmF0ZSBX
ZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQue2NwcCxofQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAyNjIKKworICAgICAgICAqIHNyYy9XZWJJbnB1dEVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnB1dEVsZW1lbnQ6OmRlZmF1bHRNYXhM
ZW5ndGgpOgorICAgICAgICAgIFJlcGxhY2UgSW5wdXRFbGVtZW50OjpzX21heGltdW1MZW5ndGgg
d2l0aCBIVE1MSW5wdXRFbGVtZW50OjptYXhpbXVtTGVuZ3RoLgorICAgICAgICAoV2ViS2l0Ojp0
b1dlYklucHV0RWxlbWVudCk6CisgICAgICAgICAgRm9sbG93IHRoZSByZXR1cm4gdHlwZSBjaGFu
Z2Ugb2YgTm9kZTo6dG9JbnB1dEVsZW1lbnQoKS4KKwogMjAxMS0wNS0wNSAgQWRhbSBCYXJ0aCAg
PGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJvbGwgQ2hyb21pdW0gREVQUy4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklucHV0RWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbnB1dEVsZW1lbnQuY3BwCmluZGV4IDM0NDhi
YjZiMzI4MDZkYjdhZGQxNGEyNmUxMDc1YjNhZTYxNjQ0ZjYuLjhhMjFlZDkxZGZhYjg3OTQ2MWE5
ZmUzMjg3OTZhMTg2MWQ2YWZlZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYklucHV0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViSW5wdXRFbGVtZW50LmNwcApAQCAtMTUyLDcgKzE1Miw3IEBAIGJvb2wgV2ViSW5wdXRFbGVt
ZW50Ojppc0NoZWNrZWQoKSBjb25zdAogCiBpbnQgV2ViSW5wdXRFbGVtZW50OjpkZWZhdWx0TWF4
TGVuZ3RoKCkKIHsKLSAgICByZXR1cm4gSFRNTElucHV0RWxlbWVudDo6c19tYXhpbXVtTGVuZ3Ro
OworICAgIHJldHVybiBIVE1MSW5wdXRFbGVtZW50OjptYXhpbXVtTGVuZ3RoOwogfQogCiBXZWJJ
bnB1dEVsZW1lbnQ6OldlYklucHV0RWxlbWVudChjb25zdCBQYXNzUmVmUHRyPEhUTUxJbnB1dEVs
ZW1lbnQ+JiBlbGVtKQpAQCAtMTczLDEyICsxNzMsMTAgQEAgV2ViSW5wdXRFbGVtZW50OjpvcGVy
YXRvciBQYXNzUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+KCkgY29uc3QKIAogV2ViSW5wdXRFbGVt
ZW50KiB0b1dlYklucHV0RWxlbWVudChXZWJFbGVtZW50KiB3ZWJFbGVtZW50KQogewotICAgIElu
cHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gd2ViRWxlbWVudC0+dW53cmFwPEVsZW1lbnQ+KCkt
PnRvSW5wdXRFbGVtZW50KCk7CisgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0g
d2ViRWxlbWVudC0+dW53cmFwPEVsZW1lbnQ+KCktPnRvSW5wdXRFbGVtZW50KCk7CiAgICAgaWYg
KCFpbnB1dEVsZW1lbnQpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgQVNTRVJUKHdlYkVsZW1l
bnQtPnVud3JhcDxFbGVtZW50PigpLT5pc0hUTUxFbGVtZW50KCkpOwotCiAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFdlYklucHV0RWxlbWVudCo+KHdlYkVsZW1lbnQpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VM
b2cKaW5kZXggN2EwYjk5MWU0MzBiODg5OTFkNmFkODVlMDExZTA0MjZjNjYxMWFiZS4uMGI5YWZi
MzliOGU3NmFkODI2ZTI3OWRkOGM3ZDA3MmJiNWUyZWM3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE1IEBACisyMDExLTA1LTA1ICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbGlt
aW5hdGUgV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LntjcHAsaH0KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMjYyCisKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwOgorICAgICAgICAoRHVtcFJlbmRl
clRyZWVTdXBwb3J0R3RrOjpzZXRBdXRvZmlsbGVkKToKKyAgICAgICAgICBGb2xsb3cgdGhlIHJl
dHVybiB0eXBlIGNoYW5nZSBvZiBOb2RlOjp0b0lucHV0RWxlbWVudCgpLgorICAgICAgICAoRHVt
cFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRWYWx1ZUZvclVzZXIpOiBkaXR0by4KKwogMjAxMS0w
NS0wNSAgQmhhcmF0aHdhYWogU3Jpbml2YXNhbiAgPGJoYXJhdGh3YWFqLnNAZ21haWwuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEhvbGdlciBGcmV5dGhlci4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRH
dGsuY3BwCmluZGV4IDI5MDNjZWVkOWI4MjI1NmI5ODljZmZlNGVjNjRiM2Q4YzU3ODJmYTguLmZm
ZGRmMDQyNTNiOTY3Mzg0ODhiNzNlMGFhZGUwYjMzOTg2NjdiOTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBw
b3J0R3RrLmNwcApAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgIkdDQ29udHJvbGxlci5oIgog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQu
aCIKLSNpbmNsdWRlICJJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgog
I2luY2x1ZGUgIkpTRG9jdW1lbnQuaCIKICNpbmNsdWRlICJKU0VsZW1lbnQuaCIKQEAgLTc1MCwx
MSArNzQ5LDExIEBAIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRBdXRvZmlsbGVk
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIG5vCiAgICAgRWxlbWVudCogZWxlbWVu
dCA9IHRvRWxlbWVudCh0b0pTKGV4ZWMsIG5vZGVPYmplY3QpKTsKICAgICBpZiAoIWVsZW1lbnQp
CiAgICAgICAgIHJldHVybjsKLSAgICBJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGVsZW1l
bnQtPnRvSW5wdXRFbGVtZW50KCk7CisgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50
ID0gZWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKTsKICAgICBpZiAoIWlucHV0RWxlbWVudCkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGlucHV0
RWxlbWVudCktPnNldEF1dG9maWxsZWQoYXV0b2ZpbGxlZCk7CisgICAgaW5wdXRFbGVtZW50LT5z
ZXRBdXRvZmlsbGVkKGF1dG9maWxsZWQpOwogfQogCiB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9y
dEd0azo6c2V0VmFsdWVGb3JVc2VyKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIG5v
ZGVPYmplY3QsIEpTU3RyaW5nUmVmIHZhbHVlKQpAQCAtNzYzLDcgKzc2Miw3IEBAIHZvaWQgRHVt
cFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRWYWx1ZUZvclVzZXIoSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTVmFsdWVSZWYKICAgICBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KHRvSlMoZXhl
Yywgbm9kZU9iamVjdCkpOwogICAgIGlmICghZWxlbWVudCkKICAgICAgICAgcmV0dXJuOwotICAg
IElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gZWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKTsK
KyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBlbGVtZW50LT50b0lucHV0RWxl
bWVudCgpOwogICAgIGlmICghaW5wdXRFbGVtZW50KQogICAgICAgICByZXR1cm47CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQv
cXQvQXBpL3F3ZWJwYWdlLmNwcAppbmRleCBiNDU5Y2IyYTNiYWJkMDQwZDU5YzY5ODZjNDMxMzE0
YWVkOGMyMGNiLi45NzVjNDRhMGRkNTdmYjIyOWI0ZWQ1OGMwNDU5ZWI4NzEyZmE2YjM4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCkBAIC0xNDQ2LDcgKzE0NDYsNyBAQCBRVmFyaWFudCBR
V2ViUGFnZTo6aW5wdXRNZXRob2RRdWVyeShRdDo6SW5wdXRNZXRob2RRdWVyeSBwcm9wZXJ0eSkg
Y29uc3QKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBRVmFyaWFudChpbnB1dEVsZW1l
bnQtPm1heExlbmd0aCgpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICByZXR1cm4gUVZhcmlhbnQoSW5wdXRFbGVtZW50OjpzX21heGlt
dW1MZW5ndGgpOworICAgICAgICAgICAgICAgIHJldHVybiBRVmFyaWFudChIVE1MSW5wdXRFbGVt
ZW50OjptYXhpbXVtTGVuZ3RoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBR
VmFyaWFudCgwKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCAzZjQ0Mjk3ZTAzNTI3ZmEz
NmIxZGJjOTQ5Yzg4ZTFiMWFjODI3NTRjLi5iZmUzM2VlMWFkN2RlYmRmMTk5OTcyNTdkOWM2ZDhm
MmY0ZTUxZjI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDExLTA1LTA1ICBL
ZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbGltaW5hdGUgV2ViQ29yZS9kb20vSW5wdXRFbGVt
ZW50LntjcHAsaH0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTYwMjYyCisKKyAgICAgICAgKiBBcGkvcXdlYnBhZ2UuY3BwOgorICAgICAgICAoUVdlYlBh
Z2U6OmlucHV0TWV0aG9kUXVlcnkpOgorICAgICAgICAgIFJlcGxhY2UgSW5wdXRFbGVtZW50Ojpz
X21heGltdW1MZW5ndGggd2l0aCBIVE1MSW5wdXRFbGVtZW50OjptYXhpbXVtTGVuZ3RoLgorICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydFF0LmNwcDoKKyAgICAg
ICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRBdXRvZmlsbGVkKToKKyAgICAgICAgICBG
b2xsb3cgdGhlIHJldHVybiB0eXBlIGNoYW5nZSBvZiBOb2RlOjp0b0lucHV0RWxlbWVudCgpLgor
CiAyMDExLTA1LTA1ICBQcmFzYW50aCBVbGxhdHRpbCAgPHByYXNhbnRoLnVsbGF0dGlsQG5va2lh
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBIYXVzbWFubi4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQu
Y3BwIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdC5jcHAKaW5kZXggZTU1YWZlODcwYzZkZmMzNDg5M2E3ZjkwMmU5YjYwMDNlZWJkZTIzNS4u
ZTIzM2ZlMTFjMzMzZTg3NWQ5YTE3MzRlZjRiYjEwMDE0MzQxNDIyMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRRdC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBv
cnRRdC5jcHAKQEAgLTUzLDcgKzUzLDYgQEAKICNpbmNsdWRlICJHZW9sb2NhdGlvblBvc2l0aW9u
LmgiCiAjaW5jbHVkZSAiSGlzdG9yeUl0ZW0uaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50
LmgiCi0jaW5jbHVkZSAiSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJv
bGxlci5oIgogI2luY2x1ZGUgIk5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiTm90aWZpY2F0aW9uUHJl
c2VudGVyQ2xpZW50UXQuaCIKQEAgLTI0MywxMSArMjQyLDExIEBAIHZvaWQgRHVtcFJlbmRlclRy
ZWVTdXBwb3J0UXQ6OnNldEF1dG9maWxsZWQoY29uc3QgUVdlYkVsZW1lbnQmIGVsZW1lbnQsIGJv
b2wgaXNBCiAgICAgV2ViQ29yZTo6RWxlbWVudCogd2ViRWxlbWVudCA9IGVsZW1lbnQubV9lbGVt
ZW50OwogICAgIGlmICghd2ViRWxlbWVudCkKICAgICAgICAgcmV0dXJuOwotICAgIElucHV0RWxl
bWVudCogaW5wdXRFbGVtZW50ID0gd2ViRWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICBI
VE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSB3ZWJFbGVtZW50LT50b0lucHV0RWxlbWVu
dCgpOwogICAgIGlmICghaW5wdXRFbGVtZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBzdGF0
aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oaW5wdXRFbGVtZW50KS0+c2V0QXV0b2ZpbGxlZChp
c0F1dG9maWxsZWQpOworICAgIGlucHV0RWxlbWVudC0+c2V0QXV0b2ZpbGxlZChpc0F1dG9maWxs
ZWQpOwogfQogCiB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRKYXZhU2NyaXB0UHJv
ZmlsaW5nRW5hYmxlZChRV2ViRnJhbWUqIGZyYW1lLCBib29sIGVuYWJsZWQpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92678</attachid>
            <date>2011-05-06 19:27:20 -0700</date>
            <delta_ts>2011-05-06 21:24:26 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-60262-20110507112717.patch</filename>
            <type>text/plain</type>
            <size>100265</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODU5OTIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNThhZGU1
NGEwZmIwYzliMmEyYmUwYTJjZGMyYmExODNmN2Y4YWM3Zi4uMmNmYTVlOThiMTZkODA2OTMxNDI5
ZTA0YzJmM2UwOWJkYTQxZGYwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTU3MCw3ICs1NzAs
NiBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgZG9tL0V4Y2VwdGlvbkJhc2UuY3BwCiAgICAg
ZG9tL0V4Y2VwdGlvbkNvZGUuY3BwCiAgICAgZG9tL0ljb25VUkwuY3BwCi0gICAgZG9tL0lucHV0
RWxlbWVudC5jcHAKICAgICBkb20vS2V5Ym9hcmRFdmVudC5jcHAKICAgICBkb20vTWVzc2FnZUNo
YW5uZWwuY3BwCiAgICAgZG9tL01lc3NhZ2VFdmVudC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhNjhhMWY5
OTQ2NDJkYjA3MWQ2OWNhNzZmYTQ3YmFlMjNjZTVlMTc1Li45YTYzYjY1ZTVhMTRkZjk3ZTZkNDU3
YzE0MGFhNWMxNWZjNGU2MGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTI4IEBACisyMDExLTA1
LTA2ICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBSeW9zdWtlIE5pd2EuCisKKyAgICAgICAgRWxpbWluYXRlIFdlYkNvcmUvZG9tL0lucHV0
RWxlbWVudC57Y3BwLGh9CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02MDI2MgorCisgICAgICAgIC0gRm9sZCBpbiBhbGwgb2YgdGhlIGNvZGUgb2YgSW5w
dXRFbGVtZW50LntjcHAsaH0gaW50byBIVE1MSW5wdXRFbGVtZW50CisgICAgICAgICAgYW5kIFRl
eHRGaWVsZElucHV0VHlwZS4KKyAgICAgICAgLSBDaGFuZ2UgdGhlIHJldHVybiB0eXBlIG9mIE5v
ZGU6OnRvSW5wdXRFbGVtZW50KCk6CisgICAgICAgICAgSW5wdXRFbGVtZW50KiAtPiBIVE1MSW5w
dXRFbGVtZW50KgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyBjaGFuZ2Ugc2hvdWxkIG5v
dCBjaGFuZ2UgdGhlIGV4aXN0aW5nIGJlaGF2aW91ci4KKworICAgICAgICAqIENNYWtlTGlzdHMu
dHh0OiBSZW1vdmUgSW5wdW50RWxlbWVudC5jcHAgYW5kL29yIElucHV0RWxlbWVudC5oLgorICAg
ICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06IGRpdHRvLgorICAgICAgICAqIFdlYkNvcmUuZXhw
LmluOiBBZGQgc3ltYm9scyBvZiBmdW5jdGlvbnMgZXhwb3NlZCB0byBXZWJLaXQuCisgICAgICAg
ICogV2ViQ29yZS5neXBpOiBSZW1vdmUgSW5wdW50RWxlbWVudC5jcHAgYW5kL29yIElucHV0RWxl
bWVudC5oLgorICAgICAgICAqIFdlYkNvcmUucHJvOiBkaXR0by4KKyAgICAgICAgKiBXZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvajogZGl0dG8uCisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOiBkaXR0by4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2Jq
ZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6dGV4dE1hcmtl
ckRhdGFGb3JWaXNpYmxlUG9zaXRpb24pOgorICAgICAgICAgIEZvbGxvdyB0aGUgcmV0dXJuIHR5
cGUgY2hhbmdlIG9mIE5vZGU6OnRvSW5wdXRFbGVtZW50KCkuCisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzUGFzc3dvcmRGaWVsZCk6IGRpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNJbmRldGVybWluYXRlKTog
ZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc05h
dGl2ZUNoZWNrYm94T3JSYWRpbyk6IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6aXNDaGVja2VkKTogZGl0dG8uCisgICAgICAgICogY3NzL0NTU1N0
eWxlU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Y2Fu
U2hhcmVTdHlsZVdpdGhFbGVtZW50KTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHls
ZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IpOiBkaXR0by4KKyAg
ICAgICAgKiBkb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
aGVja2VkUmFkaW9CdXR0b25zOjpyZW1vdmVCdXR0b24pOiBkaXR0by4KKyAgICAgICAgKiBkb20v
RE9NQWxsSW5PbmUuY3BwOiBSZW1vdmUgSW5wdXRFbGVtZW50LmguCisgICAgICAgICogZG9tL0lu
cHV0RWxlbWVudC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogZG9tL0lucHV0RWxlbWVudC5oOiBS
ZW1vdmVkLgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6
OnRvSW5wdXRFbGVtZW50KToKKyAgICAgICAgICBDaGFuZ2UgdGhlIHJldHVybiB0eXBlIGZyb20g
SW5wdXRFbGVtZW50KiB0byBIVE1MSW5wdXRFbGVtZW50Ki4KKyAgICAgICAgKiBkb20vTm9kZS5o
OiBkaXR0by4KKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6SFRNTElucHV0RWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojpmb3JtQ29udHJvbE5hbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTElucHV0RWxlbWVudDo6dG9vTG9uZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
SW5wdXRFbGVtZW50Ojp1cGRhdGVGb2N1c0FwcGVhcmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTElucHV0RWxlbWVudDo6YWJvdXRUb1VubG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
SW5wdXRFbGVtZW50OjpoYW5kbGVGb2N1c0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJ
bnB1dEVsZW1lbnQ6OmhhbmRsZUJsdXJFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5w
dXRFbGVtZW50Ojp1cGRhdGVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVs
ZW1lbnQ6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6Y29weU5v
bkF0dHJpYnV0ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVu
dDo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c3VnZ2VzdGVk
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0U3VnZ2VzdGVk
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWVGcm9tUmVuZGVyZXIp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0RmlsZUxpc3RGcm9tUmVu
ZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6c2V0RGVmYXVsdE5h
bWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6bWF4TGVuZ3RoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmNhY2hlU2VsZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OmZvcm1hdENvZGVzKTogTW92ZWQgZnJvbSBJbnB1dEVsZW1lbnQuCisgICAg
ICAgIChXZWJDb3JlOjpjdXJzb3JQb3NpdGlvblRvTWFza0luZGV4KTogZGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojppc0NvbmZvcm1Ub0lucHV0TWFzayk6IGRpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6dmFsaWRhdGVJbnB1dE1hc2sp
OiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnNldFdhcElucHV0
Rm9ybWF0KTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojpub3Rp
ZnlGb3JtU3RhdGVDaGFuZ2VkKTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRF
bGVtZW50OjpwYXJzZU1heExlbmd0aEF0dHJpYnV0ZSk6IGRpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTElucHV0RWxlbWVudDo6dXBkYXRlVmFsdWVJZk5lZWRlZCk6ZGl0dG8uCisgICAgICAg
ICogaHRtbC9IVE1MSW5wdXRFbGVtZW50Lmg6CisgICAgICAgICAgLSBBZGQgZGF0YSBtZW1iZXJz
IHdoaWNoIHdlcmUgZGVmaW5lZCBpbiBJbnB1dEVsZW1lbnREYXRhLgorICAgICAgICAgIC0gTWFr
ZSBzb21lIGZ1bmN0aW9ucyBwdWJsaWMgYmVjYXVzZSB0aGUgcHVibGljIGludGVyZmFjZSBJbnB1
dEVsZW1lbnQgaXMgcmVtb3ZlZC4KKyAgICAgICAgICAtIE1ha2Ugc29tZSBmdW5jdGlvbnMgbm9u
LXZpcnR1YWwgYmVjYXVzZSB0aGV5IGRvbid0IG92ZXJyaWRlCisgICAgICAgICAgICBjb3JyZXNw
b25kaW5nIHZpcnR1YWwgZnVuY3Rpb25zIG9mIElucHV0RWxlbWVudCBhbnltb3JlLgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6dG9JbnB1dEVsZW1lbnQpOgorICAgICAgICAg
IEZvbGxvdyB0aGUgcmV0dXJuIHR5cGUgY2hhbmdlIG9mIE5vZGU6OnRvSW5wdXRFbGVtZW50KCku
CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojppc0luZGV0ZXJtaW5hdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6aXNBdXRvZmlsbGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnN1cHBvcnRzTWF4TGVuZ3RoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmNhY2hlZFNlbGVjdGlvblN0YXJ0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmNhY2hlZFNlbGVjdGlvbkVuZCk6Cisg
ICAgICAgICogaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcDogUmVtb3ZlIHVudXNlZCBJbnB1
dEVsZW1lbnQuaC4KKyAgICAgICAgKiBodG1sL0lucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbnB1dFR5cGU6OmhhbmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KTogUmVtb3ZlIHRo
ZSBjb2RlLgorICAgICAgICAqIGh0bWwvSW5wdXRUeXBlLmg6IFVwZGF0ZSBmb3IgdGhlIGFib3Zl
LgorICAgICAgICAqIGh0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnJlcGxhY2VFT0xBbmRMaW1pdExlbmd0aCk6IE1vdmVkIGZyb20gSW5wdXRFbGVtZW50LmNw
cC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZElucHV0VHlwZTo6c2FuaXRpemVWYWx1ZSk6
IEltcGxlbWVudCB3aXRoIHJlcGxhY2VFT0xBbmRMaW1pdExlbmd0aCgpLgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dEZpZWxkSW5wdXRUeXBlOjpoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCk6
CisgICAgICAgICAgTW92ZSB0aGUgY29kZSBmcm9tIElucHV0RWxlbWVudDo6aGFuZGxlQmVmb3Jl
VGV4dEluc2VydGVkRXZlbnQoKS4KKyAgICAgICAgKiBodG1sL1RleHRGaWVsZElucHV0VHlwZS5o
OiBVcGRhdGUgZGVjbGFyYXRpb25zLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuY3BwOgorICAgICAgICAgIC0gUmVtb3ZlIEFTU0VSVChub2RlKCktPmlz
SFRNTEVsZW1lbnQoKSkgYmVjYXVzZSBpdCBpcyBjaGVja2VkIGluIHRoZSBjb25zdHJ1Y3Rvci4K
KyAgICAgICAgICAtIEZvbGxvdyB0aGUgcmV0dXJuIHR5cGUgY2hhbmdlIG9mIGlucHV0RWxlbWVu
dCgpLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUpOgorICAgICAgICAgIE1ha2Ugc3VyZSBub2RlKCkgaXMg
YW4gSFRNTElucHV0RWxlbWVudCBpbnN0YW5jZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZTo6YWRkU2VhcmNoUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c3RvcFNlYXJjaEV2ZW50VGltZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzaG93UG9wdXApOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpoaWRlUG9wdXAp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzdWJ0cmVl
SGFzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmU6OnVwZGF0ZUZyb21FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6Y3JlYXRlSW5uZXJCbG9ja1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y3JlYXRlUmVzdWx0c0J1dHRvblN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y3JlYXRlQ2Fu
Y2VsQnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjpjcmVhdGVJbm5lclNwaW5CdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZU91dGVyU3BpbkJ1dHRvblN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y3JlYXRlU3Bl
ZWNoQnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjp2aXNpYmlsaXR5Rm9yQ2FuY2VsQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c3RhcnRTZWFyY2hFdmVudFRpbWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2VhcmNoRXZlbnRUaW1l
ckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6
dmFsdWVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZTo6c2V0VGV4dEZyb21JdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6aW5wdXRFbGVtZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lLmg6CisgICAgICAgICAgQ2hhbmdlIHRoZSByZXR1cm4gdHlw
ZSBvZiBpbnB1dEVsZW1lbnQoKTogSW5wdXRFbGVtZW50KiAtPiBIVE1MSW5wdXRFbGVtZW50Ki4K
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWU6OmlzQ2hlY2tlZCk6CisgICAgICAgICAgRm9sbG93IHRoZSByZXR1cm4gdHlw
ZSBjaGFuZ2Ugb2YgTm9kZTo6dG9JbnB1dEVsZW1lbnQoKS4KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lOjppc0luZGV0ZXJtaW5hdGUpOiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lOjpzaG91bGRIYXZlU3BpbkJ1dHRvbik6CisgICAgICAgICAgQ2hhbmdlIHRoZSBw
YXJhbWV0ZXIgdHlwZTogSW5wdXRFbGVtZW50KiAtPiBIVE1MSW5wdXRFbGVtZW50Ki4KKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuaDogZGl0dG8uCisKIDIwMTEtMDUtMDYgIEJldGgg
RGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFk
bGVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggNmU2ZjhhMzg2NzM4MDc4MTll
YWIwOTcxMjk3Mzk5MjNjNTI0MjQ2MS4uNGRkNzY1NTE3MTE5OTFkZWFmYzAzZTlkZDI4YTQ5OTQy
ODQ3NTIxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0xMTUzLDggKzExNTMs
NiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9JZ25vcmVEZXN0
cnVjdGl2ZVdyaXRlQ291bnRJbmNyZW1lbnRlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vSWNv
blVSTC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9JY29uVVJMLmggXAotCVNvdXJjZS9XZWJD
b3JlL2RvbS9JbnB1dEVsZW1lbnQuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9kb20vSW5wdXRFbGVt
ZW50LmggXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9IYXNoQ2hhbmdlRXZlbnQuaCBcCiAJU291cmNl
L1dlYkNvcmUvZG9tL0tleWJvYXJkRXZlbnQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vS2V5
Ym9hcmRFdmVudC5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmlu
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXggYzU0ZmZjZDM2OGE2ZmRlOTZi
MzNhZWY3NzhiNDgzNjcyZDZiNDNmMi4uMDk2NGVlMDBiYWZmYWU3YzI5MDYwMTBjYjY1NTE2ODYy
YWRhMTFjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTQ0NSw2ICs0NDUsNyBAQCBfX1pON1dl
YkNvcmUxNkZvbnRGYWxsYmFja0xpc3QxNXJlbGVhc2VGb250RGF0YUV2CiBfX1pON1dlYkNvcmUx
NkZvbnRQbGF0Zm9ybURhdGFDMUVQNk5TRm9udGZiYk5TXzE1Rm9udE9yaWVudGF0aW9uRU5TXzE1
VGV4dE9yaWVudGF0aW9uRU5TXzE2Rm9udFdpZHRoVmFyaWFudEUKIF9fWk43V2ViQ29yZTE2Rm9u
dFBsYXRmb3JtRGF0YUQxRXYKIF9fWk43V2ViQ29yZTE2SFRNTElucHV0RWxlbWVudDEzc2V0QXV0
b2ZpbGxlZEViCitfX1pON1dlYkNvcmUxNkhUTUxJbnB1dEVsZW1lbnQxNXNldFZhbHVlRm9yVXNl
ckVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTE2SWNvbkRhdGFiYXNlQmFzZTI4c3luY2hy
b25vdXNJY29uVVJMRm9yUGFnZVVSTEVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTE2SWNv
bkRhdGFiYXNlQmFzZTRvcGVuRVJLTjNXVEY2U3RyaW5nRVM0XwogX19aTjdXZWJDb3JlMTZMZWdh
Y3lXZWJBcmNoaXZlMTljcmVhdGVGcm9tU2VsZWN0aW9uRVBOU181RnJhbWVFCkBAIC0xMTQ2LDcg
KzExNDcsOSBAQCBfX1pOSzdXZWJDb3JlMTVWaXNpYmxlUG9zaXRpb24xOWFic29sdXRlQ2FyZXRC
b3VuZHNFdgogX19aTks3V2ViQ29yZTE1VmlzaWJsZVBvc2l0aW9uNG5leHRFTlNfMjdFZGl0aW5n
Qm91bmRhcnlDcm9zc2luZ1J1bGVFCiBfX1pOSzdXZWJDb3JlMTVWaXNpYmxlUG9zaXRpb244cHJl
dmlvdXNFTlNfMjdFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGVFCiBfX1pOSzdXZWJDb3JlMTZG
b250RmFsbGJhY2tMaXN0MTBmb250RGF0YUF0RVBLTlNfNEZvbnRFagorX19aTks3V2ViQ29yZTE2
SFRNTElucHV0RWxlbWVudDExaXNUZXh0RmllbGRFdgogX19aTks3V2ViQ29yZTE2SFRNTElucHV0
RWxlbWVudDEyYXV0b0NvbXBsZXRlRXYKK19fWk5LN1dlYkNvcmUxNkhUTUxJbnB1dEVsZW1lbnQx
NWlzUGFzc3dvcmRGaWVsZEV2CiBfX1pOSzdXZWJDb3JlMTZIVE1MSW5wdXRFbGVtZW50MjFsYXN0
Q2hhbmdlV2FzVXNlckVkaXRFdgogX19aTks3V2ViQ29yZTE2SWNvbkRhdGFiYXNlQmFzZTEyZGF0
YWJhc2VQYXRoRXYKIF9fWk5LN1dlYkNvcmUxNlJlc291cmNlUmVzcG9uc2UxM25zVVJMUmVzcG9u
c2VFdgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDUwMWE3NmQ4NDE0NGUxNmFlN2M4OGUzZTFjNjgxOGI2
MGYzMDhmNzcuLjlhZmZjNTI3YTZmNThiYzljY2I0MTk4Y2M3OTBlMzZmMWE1ZjdhYTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKQEAgLTUyOSw3ICs1MjksNiBAQAogICAgICAgICAgICAgJ2RvbS9FdmVudFRh
cmdldC5oJywKICAgICAgICAgICAgICdkb20vRXhjZXB0aW9uQ29kZS5oJywKICAgICAgICAgICAg
ICdkb20vRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uLmgnLAotICAgICAgICAgICAgJ2RvbS9J
bnB1dEVsZW1lbnQuaCcsCiAgICAgICAgICAgICAnZG9tL0tleWJvYXJkRXZlbnQuaCcsCiAgICAg
ICAgICAgICAnZG9tL01hcHBlZEF0dHJpYnV0ZUVudHJ5LmgnLAogICAgICAgICAgICAgJ2RvbS9N
ZXNzYWdlUG9ydC5oJywKQEAgLTI0NzMsNyArMjQ3Miw2IEBACiAgICAgICAgICAgICAnZG9tL0ln
bm9yZURlc3RydWN0aXZlV3JpdGVDb3VudEluY3JlbWVudGVyLmgnLAogICAgICAgICAgICAgJ2Rv
bS9JY29uVVJMLmNwcCcsCiAgICAgICAgICAgICAnZG9tL0ljb25VUkwuaCcsCi0gICAgICAgICAg
ICAnZG9tL0lucHV0RWxlbWVudC5jcHAnLAogICAgICAgICAgICAgJ2RvbS9LZXlib2FyZEV2ZW50
LmNwcCcsCiAgICAgICAgICAgICAnZG9tL01lc3NhZ2VDaGFubmVsLmNwcCcsCiAgICAgICAgICAg
ICAnZG9tL01lc3NhZ2VDaGFubmVsLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5wcm8gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCA2NTY1NDBhYzRkMDU1
ZDRmNTk3YTdhOTYwN2JiODRmMjg1OWI0OTJlLi5kNmZiMjUxOTRlNWVlYjc1NGQwNjcxYTczNjA0
MGU0ZGQzZTIyNDQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtNDkzLDcgKzQ5Myw2IEBAIFNPVVJDRVMg
Kz0gXAogICAgIGRvbS9FeGNlcHRpb25CYXNlLmNwcCBcCiAgICAgZG9tL0V4Y2VwdGlvbkNvZGUu
Y3BwIFwKICAgICBkb20vSWNvblVSTC5jcHAgXAotICAgIGRvbS9JbnB1dEVsZW1lbnQuY3BwIFwK
ICAgICBkb20vS2V5Ym9hcmRFdmVudC5jcHAgXAogICAgIGRvbS9NZXNzYWdlQ2hhbm5lbC5jcHAg
XAogICAgIGRvbS9NZXNzYWdlRXZlbnQuY3BwIFwKQEAgLTE0NzAsNyArMTQ2OSw2IEBAIEhFQURF
UlMgKz0gXAogICAgIGRvbS9FeGNlcHRpb25CYXNlLmggXAogICAgIGRvbS9FeGNlcHRpb25Db2Rl
LmggXAogICAgIGRvbS9GcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24uaCBcCi0gICAgZG9tL0lu
cHV0RWxlbWVudC5oIFwKICAgICBkb20vS2V5Ym9hcmRFdmVudC5oIFwKICAgICBkb20vTWVzc2Fn
ZUNoYW5uZWwuaCBcCiAgICAgZG9tL01lc3NhZ2VFdmVudC5oIFwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggM2RjMDJjODk3ODk0ZjU2ZmUzNDgw
ZGE5ODVkZDAyYWY3YzYwMzg3YS4uYzMzZjhjMjBmYmNmNTNjMDZjNzNmYjdmMDFjYmZhY2QwMTEz
MTFiYSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oK
QEAgLTQ0NTc0LDYyICs0NDU3NCw2IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxJbnB1dEVsZW1lbnQuY3BwIgotCQkJCT4KLQkJCQk8Rmls
ZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iRGVidWd8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJv
bUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGls
ZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25m
aWd1cmF0aW9uCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1
aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJU
b29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1
cmF0aW9uCi0JCQkJCU5hbWU9IkRlYnVnX0NhaXJvX0NGTGl0ZXxXaW4zMiIKLQkJCQkJRXhjbHVk
ZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xD
b21waWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCQk8Rmls
ZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iUmVsZWFzZV9DYWlyb19DRkxpdGV8V2luMzIiCi0J
CQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlO
YW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+
Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IkRlYnVnX0FsbHxXaW4zMiIKLQkJ
CQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5h
bWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4K
LQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iUHJvZHVjdGlvbnxXaW4zMiIKLQkJ
CQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCi0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5h
bWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4K
LQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cSW5wdXRFbGVt
ZW50LmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGRvbVxLZXlib2FyZEV2ZW50LmNwcCIKIAkJCQk+CiAJCQkJPEZpbGVDb25maWd1cmF0aW9uCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggZTY3Mzk1ZTM2MWNlN2M1MDBlZmJhNzZjOTBlNTEzNDJiYTVkMGZiMC4uMTJmZDc5YjM2NDVk
MzAwN2UxODEyY2NiN2NiOGQwMWNkZmU5OGJlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtOTUsMTQgKzk1LDEyIEBACiAJCTA4
NTRCMDIzMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdSb290SW5saW5lQm94LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODU0QjAxMTEyNTVFNEU2MDBCOUNE
RDAgLyogU1ZHUm9vdElubGluZUJveC5oICovOyB9OwogCQkwODU0QjAyNTEyNTVFNEU2MDBCOUNE
RDAgLyogU1ZHVGV4dFF1ZXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwODU0QjAxMzEyNTVFNEU2MDBCOUNERDAgLyogU1ZHVGV4dFF1ZXJ5LmggKi87
IH07CiAJCTA4NTc5NzA5MTI3ODM5NEMwMEE4RUM1RiAvKiBTVkdBbmltYXRlZEJvb2xlYW4uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NTc5NzA4MTI3
ODM5NEMwMEE4RUM1RiAvKiBTVkdBbmltYXRlZEJvb2xlYW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwODU5MUFBNTBGMDg1QzRFMDA5QkFDQjEg
LyogSW5wdXRFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwODU5MUFBNDBGMDg1QzRFMDA5QkFDQjEgLyogSW5wdXRFbGVtZW50LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDg1QTE1OTMxMjg5
QThERDAwMjcxMEUzIC8qIFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdFByb3BlcnR5VGVhck9mZi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg1QTE1OTIx
Mjg5QThERDAwMjcxMEUzIC8qIFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdFByb3BlcnR5VGVhck9m
Zi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA4
NUI5MkJBMEVGREU3M0QwMEU2MTIzQyAvKiBGb3JtRGF0YUJ1aWxkZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg1QjkyQjgwRUZERTczRDAwRTYx
MjNDIC8qIEZvcm1EYXRhQnVpbGRlci5jcHAgKi87IH07CiAJCTA4NUI5MkJCMEVGREU3M0QwMEU2
MTIzQyAvKiBGb3JtRGF0YUJ1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDA4NUI5MkI5MEVGREU3M0QwMEU2MTIzQyAvKiBGb3JtRGF0YUJ1aWxk
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9OwogCQkwODY0MUQ0NzEy
MTQyRjdEMDA4REU5RjYgLyogUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg2NDFENDUxMjE0MkY3
RDAwOERFOUY2IC8qIFJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlLmNwcCAqLzsgfTsKIAkJ
MDg2NDFENDgxMjE0MkY3RDAwOERFOUY2IC8qIFJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODY0MUQ0
NjEyMTQyRjdEMDA4REU5RjYgLyogUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwODZCQkQwRjEz
NjAzOUMyMDA4QjE1RDggLyogR2x5cGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDA4NkJCRDBFMTM2MDM5QzIwMDhCMTVEOCAvKiBHbHlwaC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTA4NzAwQkU3MEYw
ODZDNTMwMDkxOTQxOSAvKiBJbnB1dEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg3MDBCRTYwRjA4NkM1MzAwOTE5NDE5IC8qIElucHV0
RWxlbWVudC5jcHAgKi87IH07CiAJCTA4NzI4MTU1MEYyNkI5QjYwMEFGQzU5NiAvKiBPcHRpb25F
bGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDA4NzI4MTUxMEYyNkI5QjYwMEFGQzU5NiAvKiBPcHRpb25FbGVtZW50LmNwcCAqLzsgfTsKIAkJ
MDg3MjgxNTYwRjI2QjlCNjAwQUZDNTk2IC8qIE9wdGlvbkVsZW1lbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NzI4MTUyMEYyNkI5QjYwMEFGQzU5
NiAvKiBPcHRpb25FbGVtZW50LmggKi87IH07CiAJCTA4NzI4MTU3MEYyNkI5QjYwMEFGQzU5NiAv
KiBPcHRpb25Hcm91cEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDg3MjgxNTMwRjI2QjlCNjAwQUZDNTk2IC8qIE9wdGlvbkdyb3VwRWxl
bWVudC5jcHAgKi87IH07CkBAIC02NDU4LDE0ICs2NDU2LDEyIEBACiAJCTA4NTRCMDEyMTI1NUU0
RTYwMEI5Q0REMCAvKiBTVkdUZXh0UXVlcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU1ZHVGV4dFF1ZXJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMDg1NEIwMTMxMjU1RTRFNjAwQjlDREQwIC8qIFNWR1RleHRRdWVyeS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdUZXh0UXVlcnkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMDg1Nzk3MDgxMjc4Mzk0QzAwQThFQzVGIC8qIFNWR0FuaW1hdGVkQm9vbGVh
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRlZEJvb2xlYW4u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDg1OTFBQTQwRjA4NUM0RTAwOUJBQ0Ix
IC8qIElucHV0RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnB1
dEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg1QTE1OTIxMjg5QThE
RDAwMjcxMEUzIC8qIFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdFByb3BlcnR5VGVhck9mZi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3RQ
cm9wZXJ0eVRlYXJPZmYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg1QjkyQjgw
RUZERTczRDAwRTYxMjNDIC8qIEZvcm1EYXRhQnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBGb3JtRGF0YUJ1aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwODVCOTJCOTBFRkRFNzNEMDBFNjEyM0MgLyogRm9ybURhdGFCdWlsZGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvcm1EYXRhQnVpbGRlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwODY0MUQ0NTEyMTQyRjdEMDA4REU5RjYgLyog
UmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwODY0MUQ0NjEyMTQyRjdEMDA4REU5RjYgLyogUmVuZGVy
SW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMDg2QkJEMEUxMzYwMzlDMjAwOEIxNUQ4IC8qIEdseXBoLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdseXBoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTA4NzAwQkU2MEYwODZDNTMwMDkxOTQxOSAvKiBJbnB1dEVsZW1lbnQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5wdXRFbGVtZW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg3MjgxNTEwRjI2QjlCNjAwQUZDNTk2IC8qIE9wdGlvbkVs
ZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3B0aW9uRWxl
bWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NzI4MTUyMEYyNkI5QjYw
MEFGQzU5NiAvKiBPcHRpb25FbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE9wdGlvbkVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg3Mjgx
NTMwRjI2QjlCNjAwQUZDNTk2IC8qIE9wdGlvbkdyb3VwRWxlbWVudC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcHRpb25Hcm91cEVsZW1lbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTkyNTAsOCArMTkyNDYsNiBAQAogCQkJCTI0NDJCQkY4
MTE5NEM5RDMwMEQ0OTQ2OSAvKiBIYXNoQ2hhbmdlRXZlbnQuaCAqLywKIAkJCQk4NDgyQjc0NDEx
OThDMzJFMDBCRkIwMDUgLyogSGFzaENoYW5nZUV2ZW50LmlkbCAqLywKIAkJCQk4QUI0QkM3NjEy
NkZEQjcxMDBERUI3MjcgLyogSWdub3JlRGVzdHJ1Y3RpdmVXcml0ZUNvdW50SW5jcmVtZW50ZXIu
aCAqLywKLQkJCQkwODcwMEJFNjBGMDg2QzUzMDA5MTk0MTkgLyogSW5wdXRFbGVtZW50LmNwcCAq
LywKLQkJCQkwODU5MUFBNDBGMDg1QzRFMDA5QkFDQjEgLyogSW5wdXRFbGVtZW50LmggKi8sCiAJ
CQkJODUwMzFCMkQwQTQ0RUZDNzAwRjk5MkUwIC8qIEtleWJvYXJkRXZlbnQuY3BwICovLAogCQkJ
CTg1MDMxQjJFMEE0NEVGQzcwMEY5OTJFMCAvKiBLZXlib2FyZEV2ZW50LmggKi8sCiAJCQkJMTRD
RjdDMjAwOUY3MTEwNjAwRUIzNjY1IC8qIEtleWJvYXJkRXZlbnQuaWRsICovLApAQCAtMjExNTUs
NyArMjExNDksNiBAQAogCQkJCUE4Q0ZGNUUzMEExNTVBMDUwMDBBNDIzNCAvKiBJbmxpbmVGbG93
Qm94LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0U3ODkxNjExMjBENjA4MDA2MEVDRTUgLyogSW5s
aW5lSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUE0ODVBMDk3RDkzMDIwMDk0QzlF
NCAvKiBJbmxpbmVUZXh0Qm94LmggaW4gSGVhZGVycyAqLywKLQkJCQkwODU5MUFBNTBGMDg1QzRF
MDA5QkFDQjEgLyogSW5wdXRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkzN0UzNTI0RDEy
NDUwQzY2MDBCQUY1RDkgLyogSW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOURF
QTA5OUU2NDkyMDA1NkU1ODEgLyogSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTMzMDlERUMwOTlFNjQ5MjAwNTZFNTgxIC8qIEluc2VydExpbmVCcmVha0Nv
bW1hbmQuaCBpbiBIZWFkZXJzICovLApAQCAtMjM5NDYsNyArMjM5MzksNiBAQAogCQkJCUE4Q0ZG
NUU2MEExNTVBMDUwMDBBNDIzNCAvKiBJbmxpbmVCb3guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QThDRkY1RTQwQTE1NUEwNTAwMEE0MjM0IC8qIElubGluZUZsb3dCb3guY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkNFQTQ4NTkwOTdEOTMwMjAwOTRDOUU0IC8qIElubGluZVRleHRCb3guY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJMDg3MDBCRTcwRjA4NkM1MzAwOTE5NDE5IC8qIElucHV0RWxlbWVu
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzN0UzNTI0QjEyNDUwQzUyMDBCQUY1RDkgLyogSW5w
dXRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5REU5MDk5RTY0OTIwMDU2RTU4MSAv
KiBJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzA5
REVCMDk5RTY0OTIwMDU2RTU4MSAvKiBJbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcCBpbiBTb3Vy
Y2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVj
dENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5j
cHAKaW5kZXggYjQ3MTIwMTkzNjdiZjUyYWZhYTEwYmViZWRlZTJjNDcxOTU0YzJkNS4uMTlhNDVk
ZDVhOWFmNDkwMWNkNWU4ZjU5MTY1M2FmZjU4YzJlNWMwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCkBAIC01NSwxMSArNTUsMTEgQEAKICNp
bmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxBcmVhRWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxJbWFnZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCiAjaWYgRU5BQkxFKFZJREVPKQogI2luY2x1ZGUgIk1lZGlhQ29u
dHJvbEVsZW1lbnRzLmgiCiAjZW5kaWYKLSNpbmNsdWRlICJJbnB1dEVsZW1lbnQuaCIKICNpbmNs
dWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEJveC5oIgogI2luY2x1ZGUgIlJlbmRl
ck1lbnVMaXN0LmgiCkBAIC02MTYsNyArNjE2LDcgQEAgdm9pZCBBWE9iamVjdENhY2hlOjp0ZXh0
TWFya2VyRGF0YUZvclZpc2libGVQb3NpdGlvbihUZXh0TWFya2VyRGF0YSYgdGV4dE1hcmtlckQK
ICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGlmIChkb21Ob2RlLT5pc0hUTUxFbGVtZW50KCkp
IHsKLSAgICAgICAgSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBkb21Ob2RlLT50b0lucHV0
RWxlbWVudCgpOworICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBkb21O
b2RlLT50b0lucHV0RWxlbWVudCgpOwogICAgICAgICBpZiAoaW5wdXRFbGVtZW50ICYmIGlucHV0
RWxlbWVudC0+aXNQYXNzd29yZEZpZWxkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdC5jcHAKaW5kZXggZmJhYWRlYzAwMmExMDdmNTA2YWVjOTNmOGNhMjc4MjMz
ZWE2MDk2Mi4uMDJhMWJiZjBlMjg4MmVmYmYwZjY0Y2Y3OWI0NWQzODQ1OWNkYjNhNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuY3BwCkBAIC00OTYsNyArNDk2LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0Ojppc1Bhc3N3b3JkRmllbGQoKSBjb25zdAogICAgIGlmIChhcmlhUm9sZUF0dHJp
YnV0ZSgpICE9IFVua25vd25Sb2xlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBJbnB1
dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IG1fcmVuZGVyZXItPm5vZGUoKS0+dG9JbnB1dEVsZW1l
bnQoKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBtX3JlbmRlcmVyLT5u
b2RlKCktPnRvSW5wdXRFbGVtZW50KCk7CiAgICAgaWYgKCFpbnB1dEVsZW1lbnQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIApAQCAtNTg5LDcgKzU4OSw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdDo6aXNJbmRldGVybWluYXRlKCkgY29uc3QKICAgICBpZiAoIW1fcmVuZGVyZXIt
Pm5vZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSW5wdXRFbGVtZW50KiBpbnB1
dEVsZW1lbnQgPSBtX3JlbmRlcmVyLT5ub2RlKCktPnRvSW5wdXRFbGVtZW50KCk7CisgICAgSFRN
TElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gbV9yZW5kZXJlci0+bm9kZSgpLT50b0lucHV0
RWxlbWVudCgpOwogICAgIGlmICghaW5wdXRFbGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKQEAgLTYwMCw3ICs2MDAsNyBAQCBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Omlz
TmF0aXZlQ2hlY2tib3hPclJhZGlvKCkgY29uc3QKIHsKICAgICBOb2RlKiBlbGVtZW50Tm9kZSA9
IG5vZGUoKTsKICAgICBpZiAoZWxlbWVudE5vZGUpIHsKLSAgICAgICAgSW5wdXRFbGVtZW50KiBp
bnB1dCA9IGVsZW1lbnROb2RlLT50b0lucHV0RWxlbWVudCgpOworICAgICAgICBIVE1MSW5wdXRF
bGVtZW50KiBpbnB1dCA9IGVsZW1lbnROb2RlLT50b0lucHV0RWxlbWVudCgpOwogICAgICAgICBp
ZiAoaW5wdXQpCiAgICAgICAgICAgICByZXR1cm4gaW5wdXQtPmlzQ2hlY2tib3goKSB8fCBpbnB1
dC0+aXNSYWRpb0J1dHRvbigpOwogICAgIH0KQEAgLTYxNSw3ICs2MTUsNyBAQCBib29sIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzQ2hlY2tlZCgpIGNvbnN0CiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIC8vIEZpcnN0IHRlc3QgZm9yIG5hdGl2ZSBjaGVja2VkbmVzcyBzZW1hbnRp
Y3MKLSAgICBJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IG1fcmVuZGVyZXItPm5vZGUoKS0+
dG9JbnB1dEVsZW1lbnQoKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBt
X3JlbmRlcmVyLT5ub2RlKCktPnRvSW5wdXRFbGVtZW50KCk7CiAgICAgaWYgKGlucHV0RWxlbWVu
dCkKICAgICAgICAgcmV0dXJuIGlucHV0RWxlbWVudC0+aXNDaGVja2VkKCk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAppbmRleCA5ZGNkY2JlZWM3MjlhNzljM2Y0NWUz
MDE1YzExMWI4MTdiODE4MzliLi41ZjBhYWNkOGEyMjVkMDZhMTkyZmQ3MmU0MTQ2Y2ZlZmI1NzAz
MzgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCkBAIC0xMDY5LDgg
KzEwNjksOCBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVu
dChOb2RlKiBub2RlKSBjb25zdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoaXND
b250cm9sKSB7Ci0gICAgICAgIElucHV0RWxlbWVudCogdGhpc0lucHV0RWxlbWVudCA9IGVsZW1l
bnQtPnRvSW5wdXRFbGVtZW50KCk7Ci0gICAgICAgIElucHV0RWxlbWVudCogb3RoZXJJbnB1dEVs
ZW1lbnQgPSBtX2VsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCk7CisgICAgICAgIEhUTUxJbnB1dEVs
ZW1lbnQqIHRoaXNJbnB1dEVsZW1lbnQgPSBlbGVtZW50LT50b0lucHV0RWxlbWVudCgpOworICAg
ICAgICBIVE1MSW5wdXRFbGVtZW50KiBvdGhlcklucHV0RWxlbWVudCA9IG1fZWxlbWVudC0+dG9J
bnB1dEVsZW1lbnQoKTsKIAogICAgICAgICBpZiAoIXRoaXNJbnB1dEVsZW1lbnQgfHwgIW90aGVy
SW5wdXRFbGVtZW50KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjc3Myw3ICsyNzcz
LDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2Vs
ZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWUKICAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb0F1dG9maWxsOiB7CiAgICAgICAgICAgICAgICAgaWYgKCFlIHx8ICFlLT5pc0Zv
cm1Db250cm9sRWxlbWVudCgpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICBpZiAoSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBlLT50b0lucHV0RWxlbWVu
dCgpKQorICAgICAgICAgICAgICAgIGlmIChIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQg
PSBlLT50b0lucHV0RWxlbWVudCgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXRF
bGVtZW50LT5pc0F1dG9maWxsZWQoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KQEAgLTI4NjYsNyArMjg2Niw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0
b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lCiAgICAg
ICAgICAgICAgICAgLy8gRXZlbiB0aG91Z2ggV2luSUUgYWxsb3dzIGNoZWNrZWQgYW5kIGluZGV0
ZXJtaW5hdGUgdG8gY28tZXhpc3QsIHRoZSBDU1Mgc2VsZWN0b3Igc3BlYyBzYXlzIHRoYXQKICAg
ICAgICAgICAgICAgICAvLyB5b3UgY2FuJ3QgYmUgYm90aCBjaGVja2VkIGFuZCBpbmRldGVybWlu
YXRlLiAgV2Ugd2lsbCBiZWhhdmUgbGlrZSBXaW5JRSBiZWhpbmQgdGhlIHNjZW5lcyBhbmQganVz
dAogICAgICAgICAgICAgICAgIC8vIG9iZXkgdGhlIENTUyBzcGVjIGhlcmUgaW4gdGhlIHRlc3Qg
Zm9yIG1hdGNoaW5nIHRoZSBwc2V1ZG8uCi0gICAgICAgICAgICAgICAgSW5wdXRFbGVtZW50KiBp
bnB1dEVsZW1lbnQgPSBlLT50b0lucHV0RWxlbWVudCgpOworICAgICAgICAgICAgICAgIEhUTUxJ
bnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGUtPnRvSW5wdXRFbGVtZW50KCk7CiAgICAgICAg
ICAgICAgICAgaWYgKGlucHV0RWxlbWVudCAmJiBpbnB1dEVsZW1lbnQtPmlzQ2hlY2tlZCgpICYm
ICFpbnB1dEVsZW1lbnQtPmlzSW5kZXRlcm1pbmF0ZSgpKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI4NzQsNyArMjg3NCw3IEBA
IGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9y
KENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lCiAgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9JbmRldGVybWluYXRlOiB7CiAgICAgICAgICAgICAgICAgaWYgKCFlIHx8ICFlLT5pc0Zv
cm1Db250cm9sRWxlbWVudCgpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICBJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IGUtPnRvSW5wdXRFbGVtZW50KCk7
CisgICAgICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gZS0+dG9J
bnB1dEVsZW1lbnQoKTsKICAgICAgICAgICAgICAgICBpZiAoaW5wdXRFbGVtZW50ICYmIGlucHV0
RWxlbWVudC0+aXNJbmRldGVybWluYXRlKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL0NoZWNrZWRSYWRpb0J1dHRvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoZWNrZWRS
YWRpb0J1dHRvbnMuY3BwCmluZGV4IDc1MjMzNzI1MWFlYzk1ZDNlOWUyYzVmYTVlNjU4MzljOTA0
NTViZjIuLjJhMGZlYTQwNmU2NjVkMmUyYjU3MGExN2Q1MDYzMzI3OTc5MGJiYTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGVja2VkUmFkaW9CdXR0b25zLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQ2hlY2tlZFJhZGlvQnV0dG9ucy5jcHAKQEAgLTc3LDcgKzc3LDcgQEAg
dm9pZCBDaGVja2VkUmFkaW9CdXR0b25zOjpyZW1vdmVCdXR0b24oSFRNTEZvcm1Db250cm9sRWxl
bWVudCogZWxlbWVudCkKICAgICBpZiAoaXQgPT0gbV9uYW1lVG9DaGVja2VkUmFkaW9CdXR0b25N
YXAtPmVuZCgpIHx8IGl0LT5zZWNvbmQgIT0gZWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogICAg
IAotICAgIElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gZWxlbWVudC0+dG9JbnB1dEVsZW1l
bnQoKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBlbGVtZW50LT50b0lu
cHV0RWxlbWVudCgpOwogICAgIEFTU0VSVF9VTlVTRUQoaW5wdXRFbGVtZW50LCBpbnB1dEVsZW1l
bnQpOwogICAgIEFTU0VSVChpbnB1dEVsZW1lbnQtPmlzQ2hlY2tlZCgpKTsKICAgICBBU1NFUlQo
ZWxlbWVudC0+aXNSYWRpb0J1dHRvbigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9ET01BbGxJbk9uZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NQWxsSW5PbmUuY3BwCmlu
ZGV4IDU1Njc0ZGZlZTkxMzZiMzBiMWI3NTk0YTIwZGU4ZjI0YWE5OTA4MDUuLmYyOTQ5YjE3NWI2
NTYwMzA2OTdmMzA4MmE5Y2Y1MjVjY2VlYWU3ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9ET01BbGxJbk9uZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RPTUFsbEluT25l
LmNwcApAQCAtNzYsNyArNzYsNiBAQAogI2luY2x1ZGUgIkV4Y2VwdGlvbkJhc2UuY3BwIgogI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkNvZGUuY3BwIgogI2luY2x1ZGUgIkljb25VUkwuY3BwIgotI2luY2x1
ZGUgIklucHV0RWxlbWVudC5jcHAiCiAjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5jcHAiCiAjaW5j
bHVkZSAiTWVzc2FnZUNoYW5uZWwuY3BwIgogI2luY2x1ZGUgIk1lc3NhZ2VFdmVudC5jcHAiCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBiN2QxNDhjZmNmZTE2ODkzZmM4MzMzYjUwYjYzNzg0MDE2OWJjZDQxLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9JbnB1
dEVsZW1lbnQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDE0ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0
dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJJbnB1dEVsZW1lbnQuaCIKLQotI2luY2x1ZGUgIkJlZm9yZVRleHRJbnNlcnRlZEV2ZW50
LmgiCi0KLSNpZiBFTkFCTEUoV0NTUykKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0j
aW5jbHVkZSAiQ1NTUnVsZS5oIgotI2luY2x1ZGUgIkNTU1J1bGVMaXN0LmgiCi0jaW5jbHVkZSAi
Q1NTU3R5bGVSdWxlLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgotI2VuZGlmCi0K
LSNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJDaHJvbWUuaCIKLSNpbmNsdWRlICJD
aHJvbWVDbGllbnQuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV2ZW50Lmgi
Ci0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAi
RnJhbWVTZWxlY3Rpb24uaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lLmgiCi0jaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotLy8gRklYTUU6IEFjY29yZGluZyB0byBIVE1MNCwgdGhlIGxlbmd0
aCBhdHRyaWJ1dGUncyB2YWx1ZSBjYW4gYmUgYXJiaXRyYXJpbHkKLS8vIGxhcmdlLiBIb3dldmVy
LCBkdWUgdG8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NTM2IHRo
aW5ncwotLy8gZ2V0IHJhdGhlciBzbHVnZ2lzaCB3aGVuIGEgdGV4dCBmaWVsZCBoYXMgYSBsYXJn
ZXIgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhbgotLy8gdGhpcywgZXZlbiB3aGVuIGp1c3QgY2xp
Y2tpbmcgaW4gdGhlIHRleHQgZmllbGQuCi1jb25zdCBpbnQgSW5wdXRFbGVtZW50OjpzX21heGlt
dW1MZW5ndGggPSA1MjQyODg7Ci1jb25zdCBpbnQgSW5wdXRFbGVtZW50OjpzX2RlZmF1bHRTaXpl
ID0gMjA7Ci0KLXZvaWQgSW5wdXRFbGVtZW50OjpkaXNwYXRjaEZvY3VzRXZlbnQoSW5wdXRFbGVt
ZW50KiBpbnB1dEVsZW1lbnQsIEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgaWYgKCFpbnB1dEVs
ZW1lbnQtPmlzVGV4dEZpZWxkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIERvY3VtZW50KiBk
b2N1bWVudCA9IGVsZW1lbnQtPmRvY3VtZW50KCk7Ci0gICAgaWYgKGlucHV0RWxlbWVudC0+aXNQ
YXNzd29yZEZpZWxkKCkgJiYgZG9jdW1lbnQtPmZyYW1lKCkpCi0gICAgICAgIGRvY3VtZW50LT5z
ZXRVc2VTZWN1cmVLZXlib2FyZEVudHJ5V2hlbkFjdGl2ZSh0cnVlKTsKLX0KLQotdm9pZCBJbnB1
dEVsZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW50KElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50LCBF
bGVtZW50KiBlbGVtZW50KQotewotICAgIGlmICghaW5wdXRFbGVtZW50LT5pc1RleHRGaWVsZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBlbGVtZW50LT5k
b2N1bWVudCgpOwotICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwotICAgIGlm
ICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChpbnB1dEVsZW1lbnQtPmlzUGFz
c3dvcmRGaWVsZCgpKQotICAgICAgICBkb2N1bWVudC0+c2V0VXNlU2VjdXJlS2V5Ym9hcmRFbnRy
eVdoZW5BY3RpdmUoZmFsc2UpOwotCi0gICAgZnJhbWUtPmVkaXRvcigpLT50ZXh0RmllbGREaWRF
bmRFZGl0aW5nKGVsZW1lbnQpOwotfQotCi12b2lkIElucHV0RWxlbWVudDo6dXBkYXRlRm9jdXNB
cHBlYXJhbmNlKElucHV0RWxlbWVudERhdGEmIGRhdGEsIElucHV0RWxlbWVudCogaW5wdXRFbGVt
ZW50LCBFbGVtZW50KiBlbGVtZW50LCBib29sIHJlc3RvcmVQcmV2aW91c1NlbGVjdGlvbikKLXsK
LSAgICBBU1NFUlQoaW5wdXRFbGVtZW50LT5pc1RleHRGaWVsZCgpKTsKLQotICAgIGlmICghcmVz
dG9yZVByZXZpb3VzU2VsZWN0aW9uIHx8IGRhdGEuY2FjaGVkU2VsZWN0aW9uU3RhcnQoKSA9PSAt
MSkKLSAgICAgICAgaW5wdXRFbGVtZW50LT5zZWxlY3QoKTsKLSAgICBlbHNlCi0gICAgICAgIC8v
IFJlc3RvcmUgdGhlIGNhY2hlZCBzZWxlY3Rpb24uCi0gICAgICAgIHVwZGF0ZVNlbGVjdGlvblJh
bmdlKGlucHV0RWxlbWVudCwgZWxlbWVudCwgZGF0YS5jYWNoZWRTZWxlY3Rpb25TdGFydCgpLCBk
YXRhLmNhY2hlZFNlbGVjdGlvbkVuZCgpKTsKLQotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGVs
ZW1lbnQtPmRvY3VtZW50KCk7Ci0gICAgaWYgKGRvY3VtZW50ICYmIGRvY3VtZW50LT5mcmFtZSgp
KQotICAgICAgICBkb2N1bWVudC0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPnJldmVhbFNlbGVjdGlv
bigpOwotfQotCi12b2lkIElucHV0RWxlbWVudDo6dXBkYXRlU2VsZWN0aW9uUmFuZ2UoSW5wdXRF
bGVtZW50KiBpbnB1dEVsZW1lbnQsIEVsZW1lbnQqIGVsZW1lbnQsIGludCBzdGFydCwgaW50IGVu
ZCkKLXsKLSAgICBpZiAoIWlucHV0RWxlbWVudC0+aXNUZXh0RmllbGQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgc2V0U2VsZWN0aW9uUmFuZ2UoZWxlbWVudCwgc3RhcnQsIGVuZCk7Ci19Ci0K
LXZvaWQgSW5wdXRFbGVtZW50OjphYm91dFRvVW5sb2FkKElucHV0RWxlbWVudCogaW5wdXRFbGVt
ZW50LCBFbGVtZW50KiBlbGVtZW50KQotewotICAgIGlmICghaW5wdXRFbGVtZW50LT5pc1RleHRG
aWVsZCgpIHx8ICFlbGVtZW50LT5mb2N1c2VkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIERv
Y3VtZW50KiBkb2N1bWVudCA9IGVsZW1lbnQtPmRvY3VtZW50KCk7Ci0gICAgRnJhbWUqIGZyYW1l
ID0gZG9jdW1lbnQtPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgZnJhbWUtPmVkaXRvcigpLT50ZXh0RmllbGREaWRFbmRFZGl0aW5nKGVsZW1lbnQpOwot
fQotCi12b2lkIElucHV0RWxlbWVudDo6c2V0VmFsdWVGcm9tUmVuZGVyZXIoSW5wdXRFbGVtZW50
RGF0YSYgZGF0YSwgSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQsIEVsZW1lbnQqIGVsZW1lbnQs
IGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgLy8gUmVuZGVyZXIgYW5kIG91ciBldmVudCBo
YW5kbGVyIGFyZSByZXNwb25zaWJsZSBmb3Igc2FuaXRpemluZyB2YWx1ZXMuCi0gICAgQVNTRVJU
X1VOVVNFRChpbnB1dEVsZW1lbnQsIHZhbHVlID09IGlucHV0RWxlbWVudC0+c2FuaXRpemVWYWx1
ZSh2YWx1ZSkgfHwgaW5wdXRFbGVtZW50LT5zYW5pdGl6ZVZhbHVlKHZhbHVlKS5pc0VtcHR5KCkp
OwotCi0gICAgLy8gV29ya2Fyb3VuZCBmb3IgYnVnIHdoZXJlIHRyYWlsaW5nIFxuIGlzIGluY2x1
ZGVkIGluIHRoZSByZXN1bHQgb2YgdGV4dENvbnRlbnQuCi0gICAgLy8gVGhlIGFzc2VydCBtYWNy
byBhYm92ZSBtYXkgYWxzbyBiZSBzaW1wbGlmaWVkIHRvOiAgdmFsdWUgPT0gY29uc3RyYWluVmFs
dWUodmFsdWUpCi0gICAgLy8gaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTY2MQotICAgIGlmICh2YWx1ZSA9PSAiXG4iKQotICAgICAgICBkYXRhLnNldFZhbHVlKCIiKTsK
LSAgICBlbHNlCi0gICAgICAgIGRhdGEuc2V0VmFsdWUodmFsdWUpOwotCi0gICAgZWxlbWVudC0+
c2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcih0cnVlKTsKLQotICAgIC8vIElucHV0
IGV2ZW50IGlzIGZpcmVkIGJ5IHRoZSBOb2RlOjpkZWZhdWx0RXZlbnRIYW5kbGVyIGZvciBlZGl0
YWJsZSBjb250cm9scy4KLSAgICBpZiAoIWlucHV0RWxlbWVudC0+aXNUZXh0RmllbGQoKSkKLSAg
ICAgICAgZWxlbWVudC0+ZGlzcGF0Y2hJbnB1dEV2ZW50KCk7Ci0gICAgbm90aWZ5Rm9ybVN0YXRl
Q2hhbmdlZChlbGVtZW50KTsKLX0KLQotc3RhdGljIFN0cmluZyByZXBsYWNlRU9MQW5kTGltaXRM
ZW5ndGgoY29uc3QgSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQsIGNvbnN0IFN0cmluZyYgcHJv
cG9zZWRWYWx1ZSwgaW50IG1heExlbmd0aCkKLXsKLSAgICBpZiAoIWlucHV0RWxlbWVudC0+aXNU
ZXh0RmllbGQoKSkKLSAgICAgICAgcmV0dXJuIHByb3Bvc2VkVmFsdWU7Ci0KLSAgICBTdHJpbmcg
c3RyaW5nID0gcHJvcG9zZWRWYWx1ZTsKLSAgICBzdHJpbmcucmVwbGFjZSgiXHJcbiIsICIgIik7
Ci0gICAgc3RyaW5nLnJlcGxhY2UoJ1xyJywgJyAnKTsKLSAgICBzdHJpbmcucmVwbGFjZSgnXG4n
LCAnICcpOwotCi0gICAgdW5zaWduZWQgbmV3TGVuZ3RoID0gbnVtQ2hhcmFjdGVyc0luR3JhcGhl
bWVDbHVzdGVycyhzdHJpbmcsIG1heExlbmd0aCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG5ld0xlbmd0aDsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFVDaGFyIGN1cnJlbnQgPSBzdHJp
bmdbaV07Ci0gICAgICAgIGlmIChjdXJyZW50IDwgJyAnICYmIGN1cnJlbnQgIT0gJ1x0Jykgewot
ICAgICAgICAgICAgbmV3TGVuZ3RoID0gaTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgfQotICAgIHJldHVybiBzdHJpbmcubGVmdChuZXdMZW5ndGgpOwotfQotCi1TdHJpbmcg
SW5wdXRFbGVtZW50OjpzYW5pdGl6ZVZhbHVlRm9yVGV4dEZpZWxkKGNvbnN0IElucHV0RWxlbWVu
dCogaW5wdXRFbGVtZW50LCBjb25zdCBTdHJpbmcmIHByb3Bvc2VkVmFsdWUpCi17Ci0jaWYgRU5B
QkxFKFdDU1MpCi0gICAgSW5wdXRFbGVtZW50RGF0YSBkYXRhID0gY29uc3RfY2FzdDxJbnB1dEVs
ZW1lbnQqPihpbnB1dEVsZW1lbnQpLT5kYXRhKCk7Ci0gICAgaWYgKCFpc0NvbmZvcm1Ub0lucHV0
TWFzayhkYXRhLCBwcm9wb3NlZFZhbHVlKSkgewotICAgICAgICBpZiAoaXNDb25mb3JtVG9JbnB1
dE1hc2soZGF0YSwgZGF0YS52YWx1ZSgpKSkKLSAgICAgICAgICAgIHJldHVybiBkYXRhLnZhbHVl
KCk7Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICB9Ci0jZW5kaWYKLSAgICByZXR1cm4g
cmVwbGFjZUVPTEFuZExpbWl0TGVuZ3RoKGlucHV0RWxlbWVudCwgcHJvcG9zZWRWYWx1ZSwgc19t
YXhpbXVtTGVuZ3RoKTsKLX0KLQotU3RyaW5nIElucHV0RWxlbWVudDo6c2FuaXRpemVVc2VySW5w
dXRWYWx1ZShjb25zdCBJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCwgY29uc3QgU3RyaW5nJiBw
cm9wb3NlZFZhbHVlLCBpbnQgbWF4TGVuZ3RoKQotewotICAgIHJldHVybiByZXBsYWNlRU9MQW5k
TGltaXRMZW5ndGgoaW5wdXRFbGVtZW50LCBwcm9wb3NlZFZhbHVlLCBtYXhMZW5ndGgpOwotfQot
Ci12b2lkIElucHV0RWxlbWVudDo6aGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoSW5wdXRF
bGVtZW50RGF0YSYgZGF0YSwgSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQsIEVsZW1lbnQqIGVs
ZW1lbnQsIEV2ZW50KiBldmVudCkKLXsKLSAgICBBU1NFUlQoZXZlbnQtPmlzQmVmb3JlVGV4dElu
c2VydGVkRXZlbnQoKSk7Ci0gICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHRleHQgdG8gYmUgaW5z
ZXJ0ZWQgd2lsbCBub3QgdmlvbGF0ZSB0aGUgbWF4TGVuZ3RoLgotCi0gICAgLy8gV2UgdXNlIFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6dGV4dCgpIGluc3RlYWQgb2YgSW5wdXRFbGVtZW50
Ojp2YWx1ZSgpCi0gICAgLy8gYmVjYXVzZSB0aGV5IGNhbiBiZSBtaXNtYXRjaGVkIGJ5IHNhbml0
aXplVmFsdWUoKSBpbgotICAgIC8vIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c3VidHJl
ZUhhc0NoYW5nZWQoKSBpbiBzb21lIGNhc2VzLgotICAgIHVuc2lnbmVkIG9sZExlbmd0aCA9IG51
bUdyYXBoZW1lQ2x1c3RlcnModG9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUoZWxlbWVudC0+
cmVuZGVyZXIoKSktPnRleHQoKSk7Ci0KLSAgICAvLyBzZWxlY3Rpb25MZW5ndGggcmVwcmVzZW50
cyB0aGUgc2VsZWN0aW9uIGxlbmd0aCBvZiB0aGlzIHRleHQgZmllbGQgdG8gYmUKLSAgICAvLyBy
ZW1vdmVkIGJ5IHRoaXMgaW5zZXJ0aW9uLgotICAgIC8vIElmIHRoZSB0ZXh0IGZpZWxkIGhhcyBu
byBmb2N1cywgd2UgZG9uJ3QgbmVlZCB0byB0YWtlIGFjY291bnQgb2YgdGhlCi0gICAgLy8gc2Vs
ZWN0aW9uIGxlbmd0aC4gVGhlIHNlbGVjdGlvbiBpcyB0aGUgc291cmNlIG9mIHRleHQgZHJhZy1h
bmQtZHJvcCBpbgotICAgIC8vIHRoYXQgY2FzZSwgYW5kIG5vdGhpbmcgaW4gdGhlIHRleHQgZmll
bGQgd2lsbCBiZSByZW1vdmVkLgotICAgIHVuc2lnbmVkIHNlbGVjdGlvbkxlbmd0aCA9IGVsZW1l
bnQtPmZvY3VzZWQoKSA/IG51bUdyYXBoZW1lQ2x1c3RlcnMocGxhaW5UZXh0KGVsZW1lbnQtPmRv
Y3VtZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRS
YW5nZSgpLmdldCgpKSkgOiAwOwotICAgIEFTU0VSVChvbGRMZW5ndGggPj0gc2VsZWN0aW9uTGVu
Z3RoKTsKLQotICAgIC8vIFNlbGVjdGVkIGNoYXJhY3RlcnMgd2lsbCBiZSByZW1vdmVkIGJ5IHRo
ZSBuZXh0IHRleHQgZXZlbnQuCi0gICAgdW5zaWduZWQgYmFzZUxlbmd0aCA9IG9sZExlbmd0aCAt
IHNlbGVjdGlvbkxlbmd0aDsKLSAgICB1bnNpZ25lZCBtYXhMZW5ndGggPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oaW5wdXRFbGVtZW50LT5zdXBwb3J0c01heExlbmd0aCgpID8gZGF0YS5tYXhMZW5n
dGgoKSA6IHNfbWF4aW11bUxlbmd0aCk7IC8vIG1heExlbmd0aCgpIGNhbiBuZXZlciBiZSBuZWdh
dGl2ZS4KLSAgICB1bnNpZ25lZCBhcHBlbmRhYmxlTGVuZ3RoID0gbWF4TGVuZ3RoID4gYmFzZUxl
bmd0aCA/IG1heExlbmd0aCAtIGJhc2VMZW5ndGggOiAwOwotCi0gICAgLy8gVHJ1bmNhdGUgdGhl
IGluc2VydGVkIHRleHQgdG8gYXZvaWQgdmlvbGF0aW5nIHRoZSBtYXhMZW5ndGggYW5kIG90aGVy
IGNvbnN0cmFpbnRzLgotICAgIEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KiB0ZXh0RXZlbnQgPSBz
dGF0aWNfY2FzdDxCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCo+KGV2ZW50KTsKLSNpZiBFTkFCTEUo
V0NTUykKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJh
bWUoKS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAg
U3RyaW5nIGNhbmRpZGF0ZVN0cmluZyA9IHRvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKGVs
ZW1lbnQtPnJlbmRlcmVyKCkpLT50ZXh0KCk7Ci0gICAgaWYgKHNlbGVjdGlvbkxlbmd0aCkKLSAg
ICAgICAgY2FuZGlkYXRlU3RyaW5nLnJlcGxhY2UocmFuZ2UtPnN0YXJ0T2Zmc2V0KCksIHJhbmdl
LT5lbmRPZmZzZXQoKSwgdGV4dEV2ZW50LT50ZXh0KCkpOwotICAgIGVsc2UKLSAgICAgICAgY2Fu
ZGlkYXRlU3RyaW5nLmluc2VydCh0ZXh0RXZlbnQtPnRleHQoKSwgcmFuZ2UtPnN0YXJ0T2Zmc2V0
KCkpOwotICAgIGlmICghaXNDb25mb3JtVG9JbnB1dE1hc2soaW5wdXRFbGVtZW50LT5kYXRhKCks
IGNhbmRpZGF0ZVN0cmluZykpIHsKLSAgICAgICAgdGV4dEV2ZW50LT5zZXRUZXh0KCIiKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotICAgIHRleHRFdmVudC0+c2V0VGV4dChzYW5p
dGl6ZVVzZXJJbnB1dFZhbHVlKGlucHV0RWxlbWVudCwgdGV4dEV2ZW50LT50ZXh0KCksIGFwcGVu
ZGFibGVMZW5ndGgpKTsKLX0KLQotdm9pZCBJbnB1dEVsZW1lbnQ6OnBhcnNlU2l6ZUF0dHJpYnV0
ZShJbnB1dEVsZW1lbnREYXRhJiBkYXRhLCBFbGVtZW50KiBlbGVtZW50LCBBdHRyaWJ1dGUqIGF0
dHJpYnV0ZSkKLXsKLSAgICBkYXRhLnNldFNpemUoYXR0cmlidXRlLT5pc051bGwoKSA/IElucHV0
RWxlbWVudDo6c19kZWZhdWx0U2l6ZSA6IGF0dHJpYnV0ZS0+dmFsdWUoKS50b0ludCgpKTsKLQot
ICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZWxlbWVudC0+cmVuZGVyZXIoKSkKLSAg
ICAgICAgcmVuZGVyZXItPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwotfQot
Ci12b2lkIElucHV0RWxlbWVudDo6cGFyc2VNYXhMZW5ndGhBdHRyaWJ1dGUoSW5wdXRFbGVtZW50
RGF0YSYgZGF0YSwgSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQsIEVsZW1lbnQqIGVsZW1lbnQs
IEF0dHJpYnV0ZSogYXR0cmlidXRlKQotewotICAgIGludCBtYXhMZW5ndGggPSBhdHRyaWJ1dGUt
PmlzTnVsbCgpID8gSW5wdXRFbGVtZW50OjpzX21heGltdW1MZW5ndGggOiBhdHRyaWJ1dGUtPnZh
bHVlKCkudG9JbnQoKTsKLSAgICBpZiAobWF4TGVuZ3RoIDw9IDAgfHwgbWF4TGVuZ3RoID4gSW5w
dXRFbGVtZW50OjpzX21heGltdW1MZW5ndGgpCi0gICAgICAgIG1heExlbmd0aCA9IElucHV0RWxl
bWVudDo6c19tYXhpbXVtTGVuZ3RoOwotCi0gICAgaW50IG9sZE1heExlbmd0aCA9IGRhdGEubWF4
TGVuZ3RoKCk7Ci0gICAgZGF0YS5zZXRNYXhMZW5ndGgobWF4TGVuZ3RoKTsKLQotICAgIGlmIChv
bGRNYXhMZW5ndGggIT0gbWF4TGVuZ3RoKQotICAgICAgICB1cGRhdGVWYWx1ZUlmTmVlZGVkKGRh
dGEsIGlucHV0RWxlbWVudCk7Ci0KLSAgICBlbGVtZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7
Ci19Ci0KLXZvaWQgSW5wdXRFbGVtZW50Ojp1cGRhdGVWYWx1ZUlmTmVlZGVkKElucHV0RWxlbWVu
dERhdGEmIGRhdGEsIElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50KQotewotICAgIFN0cmluZyBv
bGRWYWx1ZSA9IGRhdGEudmFsdWUoKTsKLSAgICBTdHJpbmcgbmV3VmFsdWUgPSBpbnB1dEVsZW1l
bnQtPnNhbml0aXplVmFsdWUob2xkVmFsdWUpOwotICAgIGlmIChuZXdWYWx1ZSAhPSBvbGRWYWx1
ZSkKLSAgICAgICAgaW5wdXRFbGVtZW50LT5zZXRWYWx1ZShuZXdWYWx1ZSk7Ci19Ci0KLXZvaWQg
SW5wdXRFbGVtZW50Ojpub3RpZnlGb3JtU3RhdGVDaGFuZ2VkKEVsZW1lbnQqIGVsZW1lbnQpCi17
Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZWxlbWVudC0+ZG9jdW1lbnQoKTsKLSAgICBGcmFt
ZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCkpCi0gICAgICAgIHBh
Z2UtPmNocm9tZSgpLT5jbGllbnQoKS0+Zm9ybVN0YXRlRGlkQ2hhbmdlKGVsZW1lbnQpOwotfQot
Ci0vLyBJbnB1dEVsZW1lbnREYXRhCi1JbnB1dEVsZW1lbnREYXRhOjpJbnB1dEVsZW1lbnREYXRh
KCkKLSAgICA6IG1fc2l6ZShJbnB1dEVsZW1lbnQ6OnNfZGVmYXVsdFNpemUpCi0gICAgLCBtX21h
eExlbmd0aChJbnB1dEVsZW1lbnQ6OnNfbWF4aW11bUxlbmd0aCkKLSAgICAsIG1fY2FjaGVkU2Vs
ZWN0aW9uU3RhcnQoLTEpCi0gICAgLCBtX2NhY2hlZFNlbGVjdGlvbkVuZCgtMSkKLSNpZiBFTkFC
TEUoV0NTUykKLSAgICAsIG1faW5wdXRGb3JtYXRNYXNrKCIqbSIpCi0gICAgLCBtX21heElucHV0
Q2hhcnNBbGxvd2VkKElucHV0RWxlbWVudDo6c19tYXhpbXVtTGVuZ3RoKQotI2VuZGlmCi17Ci19
Ci0KLUlucHV0RWxlbWVudERhdGE6On5JbnB1dEVsZW1lbnREYXRhKCkKLXsKLX0KLQotY29uc3Qg
QXRvbWljU3RyaW5nJiBJbnB1dEVsZW1lbnREYXRhOjpuYW1lKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9uYW1lLmlzTnVsbCgpID8gZW1wdHlBdG9tIDogbV9uYW1lOwotfQotCi0jaWYgRU5BQkxF
KFdDU1MpCi1zdGF0aWMgaW5saW5lIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybWF0Q29kZXMoKQot
ewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBjb2RlcywgKCJBYU5uWHhN
bSIpKTsKLSAgICByZXR1cm4gY29kZXM7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBjdXJzb3JQb3Np
dGlvblRvTWFza0luZGV4KGNvbnN0IFN0cmluZyYgaW5wdXRGb3JtYXRNYXNrLCB1bnNpZ25lZCBj
dXJzb3JQb3NpdGlvbikKLXsKLSAgICBVQ2hhciBtYXNrOwotICAgIGludCBpbmRleCA9IC0xOwot
ICAgIGRvIHsKLSAgICAgICAgbWFzayA9IGlucHV0Rm9ybWF0TWFza1srK2luZGV4XTsKLSAgICAg
ICAgaWYgKG1hc2sgPT0gJ1xcJykKLSAgICAgICAgICAgICsraW5kZXg7Ci0gICAgICAgIGVsc2Ug
aWYgKG1hc2sgPT0gJyonIHx8IChpc0FTQ0lJRGlnaXQobWFzaykgJiYgbWFzayAhPSAnMCcpKSB7
Ci0gICAgICAgICAgICBpbmRleCA9IGlucHV0Rm9ybWF0TWFzay5sZW5ndGgoKSAtIDE7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0gd2hpbGUgKGN1cnNvclBvc2l0aW9uLS0p
OwotCi0gICAgcmV0dXJuIGluZGV4OwotfQotCi1ib29sIElucHV0RWxlbWVudDo6aXNDb25mb3Jt
VG9JbnB1dE1hc2soY29uc3QgSW5wdXRFbGVtZW50RGF0YSYgZGF0YSwgY29uc3QgU3RyaW5nJiBp
bnB1dENoYXJzKQotewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnB1dENoYXJzLmxl
bmd0aCgpOyArK2kpCi0gICAgICAgIGlmICghaXNDb25mb3JtVG9JbnB1dE1hc2soZGF0YSwgaW5w
dXRDaGFyc1tpXSwgaSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgSW5wdXRFbGVtZW50Ojppc0NvbmZvcm1Ub0lucHV0TWFzayhjb25zdCBJ
bnB1dEVsZW1lbnREYXRhJiBkYXRhLCBVQ2hhciBpbkNoYXIsIHVuc2lnbmVkIGN1cnNvclBvc2l0
aW9uKQotewotICAgIFN0cmluZyBpbnB1dEZvcm1hdE1hc2sgPSBkYXRhLmlucHV0Rm9ybWF0TWFz
aygpOwotCi0gICAgaWYgKGlucHV0Rm9ybWF0TWFzay5pc0VtcHR5KCkgfHwgaW5wdXRGb3JtYXRN
YXNrID09ICIqTSIgfHwgaW5wdXRGb3JtYXRNYXNrID09ICIqbSIpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgaWYgKGN1cnNvclBvc2l0aW9uID49IGRhdGEubWF4SW5wdXRDaGFyc0FsbG93
ZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdW5zaWduZWQgbWFza0luZGV4ID0g
Y3Vyc29yUG9zaXRpb25Ub01hc2tJbmRleChpbnB1dEZvcm1hdE1hc2ssIGN1cnNvclBvc2l0aW9u
KTsKLSAgICBib29sIG9rID0gdHJ1ZTsKLSAgICBVQ2hhciBtYXNrID0gaW5wdXRGb3JtYXRNYXNr
W21hc2tJbmRleF07Ci0gICAgLy8gTWF0Y2ggdGhlIGlucHV0ZWQgY2hhcmFjdGVyIHdpdGggaW5w
dXQgbWFzawotICAgIHN3aXRjaCAobWFzaykgewotICAgIGNhc2UgJ0EnOgotICAgICAgICBvayA9
ICFpc0FTQ0lJRGlnaXQoaW5DaGFyKSAmJiAhaXNBU0NJSUxvd2VyKGluQ2hhcikgJiYgaXNBU0NJ
SVByaW50YWJsZShpbkNoYXIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlICdhJzoKLSAgICAg
ICAgb2sgPSAhaXNBU0NJSURpZ2l0KGluQ2hhcikgJiYgIWlzQVNDSUlVcHBlcihpbkNoYXIpICYm
IGlzQVNDSUlQcmludGFibGUoaW5DaGFyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAnTic6
Ci0gICAgICAgIG9rID0gaXNBU0NJSURpZ2l0KGluQ2hhcik7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgJ24nOgotICAgICAgICBvayA9ICFpc0FTQ0lJQWxwaGEoaW5DaGFyKSAmJiBpc0FTQ0lJ
UHJpbnRhYmxlKGluQ2hhcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgJ1gnOgotICAgICAg
ICBvayA9ICFpc0FTQ0lJTG93ZXIoaW5DaGFyKSAmJiBpc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgJ3gnOgotICAgICAgICBvayA9ICFpc0FTQ0lJVXBw
ZXIoaW5DaGFyKSAmJiBpc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgJ00nOgotICAgIGNhc2UgJ20nOgotICAgICAgICBvayA9IGlzQVNDSUlQcmludGFi
bGUoaW5DaGFyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgb2sgPSAo
bWFzayA9PSBpbkNoYXIpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gb2s7
Ci19Ci0KLVN0cmluZyBJbnB1dEVsZW1lbnQ6OnZhbGlkYXRlSW5wdXRNYXNrKElucHV0RWxlbWVu
dERhdGEmIGRhdGEsIFN0cmluZyYgaW5wdXRNYXNrKQotewotICAgIGlucHV0TWFzay5yZXBsYWNl
KCJcXFxcIiwgIlxcIik7Ci0KLSAgICBib29sIGlzVmFsaWQgPSB0cnVlOwotICAgIGJvb2wgaGFz
V2lsZGNhcmQgPSBmYWxzZTsKLSAgICB1bnNpZ25lZCBlc2NhcGVDaGFyQ291bnQgPSAwOwotICAg
IHVuc2lnbmVkIG1hc2tMZW5ndGggPSBpbnB1dE1hc2subGVuZ3RoKCk7Ci0gICAgVUNoYXIgZm9y
bWF0Q29kZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWFza0xlbmd0aDsgKytpKSB7
Ci0gICAgICAgIGZvcm1hdENvZGUgPSBpbnB1dE1hc2tbaV07Ci0gICAgICAgIGlmIChmb3JtYXRD
b2RlcygpLmZpbmQoZm9ybWF0Q29kZSkgPT0gLTEpIHsKLSAgICAgICAgICAgIGlmIChmb3JtYXRD
b2RlID09ICcqJyB8fCAoaXNBU0NJSURpZ2l0KGZvcm1hdENvZGUpICYmIGZvcm1hdENvZGUgIT0g
JzAnKSkgewotICAgICAgICAgICAgICAgIC8vIFZhbGlkYXRlIGNvZGVzIHdoaWNoIGVuZHMgd2l0
aCAnKmYnIG9yICduZicKLSAgICAgICAgICAgICAgICBmb3JtYXRDb2RlID0gaW5wdXRNYXNrWysr
aV07Ci0gICAgICAgICAgICAgICAgaWYgKChpICsgMSAhPSBtYXNrTGVuZ3RoKSB8fCBmb3JtYXRD
b2RlcygpLmZpbmQoZm9ybWF0Q29kZSkgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgaXNW
YWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgaGFzV2lsZGNhcmQgPSB0cnVlOwotICAgICAgICAgICAgfSBl
bHNlIGlmIChmb3JtYXRDb2RlID09ICdcXCcpIHsKLSAgICAgICAgICAgICAgICAvLyBza2lwIG92
ZXIgdGhlIG5leHQgbWFzayBjaGFyYWN0ZXIKLSAgICAgICAgICAgICAgICArK2k7Ci0gICAgICAg
ICAgICAgICAgKytlc2NhcGVDaGFyQ291bnQ7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghaXNWYWxpZCkKLSAgICAgICAg
cmV0dXJuIFN0cmluZygpOwotICAgIC8vIGNhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGNoYXJhY3Rl
cnMgYWxsb3dlZCB0byBiZSBlbnRlcmVkIGJ5IGlucHV0IG1hc2sKLSAgICB1bnNpZ25lZCBhbGxv
d2VkTGVuZ3RoID0gbWFza0xlbmd0aDsKLSAgICBpZiAoZXNjYXBlQ2hhckNvdW50KQotICAgICAg
ICBhbGxvd2VkTGVuZ3RoIC09IGVzY2FwZUNoYXJDb3VudDsKLQotICAgIGlmIChoYXNXaWxkY2Fy
ZCkgewotICAgICAgICBmb3JtYXRDb2RlID0gaW5wdXRNYXNrW21hc2tMZW5ndGggLSAyXTsKLSAg
ICAgICAgaWYgKGZvcm1hdENvZGUgPT0gJyonKQotICAgICAgICAgICAgYWxsb3dlZExlbmd0aCA9
IGRhdGEubWF4SW5wdXRDaGFyc0FsbG93ZWQoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBsZWZ0TGVuID0gU3RyaW5nKCZmb3JtYXRDb2RlKS50b0ludCgpOwotICAgICAg
ICAgICAgYWxsb3dlZExlbmd0aCA9IGxlZnRMZW4gKyBhbGxvd2VkTGVuZ3RoIC0gMjsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGlmIChhbGxvd2VkTGVuZ3RoIDwgZGF0YS5tYXhJbnB1dENoYXJz
QWxsb3dlZCgpKQotICAgICAgICBkYXRhLnNldE1heElucHV0Q2hhcnNBbGxvd2VkKGFsbG93ZWRM
ZW5ndGgpOwotCi0gICAgcmV0dXJuIGlucHV0TWFzazsKLX0KLQotI2VuZGlmCi0KLX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9JbnB1dEVsZW1lbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE0ZTk1
ZDE5ZmI2NDM4NjRjNjQ2MTJiZTE0N2ZkZDEyOTc4YWY0OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50
b3JjaG1vYmlsZS5jb20vKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBJbnB1dEVsZW1lbnRfaAotI2RlZmluZSBJbnB1
dEVsZW1lbnRfaAotCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYv
dGV4dC9BdG9taWNTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBdHRy
aWJ1dGU7Ci1jbGFzcyBEb2N1bWVudDsKLWNsYXNzIEVsZW1lbnQ7Ci1jbGFzcyBFdmVudDsKLWNs
YXNzIElucHV0RWxlbWVudERhdGE7Ci0KLWNsYXNzIElucHV0RWxlbWVudCB7Ci1wdWJsaWM6Ci0g
ICAgdmlydHVhbCB+SW5wdXRFbGVtZW50KCkgeyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNBdXRv
ZmlsbGVkKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc0NoZWNrZWQoKSBjb25zdCA9
IDA7Ci0gICAgdmlydHVhbCBib29sIGlzSW5kZXRlcm1pbmF0ZSgpIGNvbnN0ID0gMDsKLSAgICB2
aXJ0dWFsIGJvb2wgaXNJbnB1dFR5cGVIaWRkZW4oKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBi
b29sIGlzUGFzc3dvcmRGaWVsZCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNTZWFy
Y2hGaWVsZCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0RmllbGQoKSBjb25z
dCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzUmFkaW9CdXR0b24oKSBjb25zdCA9IDA7Ci0gICAg
dmlydHVhbCBib29sIGlzQ2hlY2tib3goKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlz
UmFuZ2VDb250cm9sKCkgY29uc3QgPSAwOwotICAgIAotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0
c01heExlbmd0aCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNTdGVwcGFibGUoKSBj
b25zdCA9IDA7Ci0jaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKLSAgICB2aXJ0dWFsIGJvb2wgaXNT
cGVlY2hFbmFibGVkKCkgY29uc3QgPSAwOwotI2VuZGlmICAgIAotCi0gICAgdmlydHVhbCBib29s
IHNlYXJjaEV2ZW50c1Nob3VsZEJlRGlzcGF0Y2hlZCgpIGNvbnN0ID0gMDsKLQotICAgIHZpcnR1
YWwgaW50IHNpemUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIHN1Z2dl
c3RlZFZhbHVlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgY29uc3Qg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmLCBib29sIHNlbmRD
aGFuZ2VFdmVudCA9IGZhbHNlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldFZhbHVlRm9yVXNl
cihjb25zdCBTdHJpbmcmKSA9IDA7Ci0gICAgLy8gVGhlIHZhbHVlIHdoaWNoIGlzIGRyYXduIGJ5
IGEgcmVuZGVyZXIuCi0gICAgdmlydHVhbCBTdHJpbmcgdmlzaWJsZVZhbHVlKCkgY29uc3QgPSAw
OwotICAgIHZpcnR1YWwgU3RyaW5nIGNvbnZlcnRGcm9tVmlzaWJsZVZhbHVlKGNvbnN0IFN0cmlu
ZyYpIGNvbnN0ID0gMDsKLQotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIHN0
cmluZyBjYW4gYmUgc2V0IGFzIHRoZSB2YWx1ZSBvZiBJbnB1dEVsZW1lbnQuCi0gICAgdmlydHVh
bCBib29sIGlzQWNjZXB0YWJsZVZhbHVlKGNvbnN0IFN0cmluZyYpIGNvbnN0ID0gMDsKLSAgICB2
aXJ0dWFsIFN0cmluZyBzYW5pdGl6ZVZhbHVlKGNvbnN0IFN0cmluZyYpIGNvbnN0ID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVGcm9tUmVuZGVyZXIoY29uc3QgU3RyaW5nJikgPSAwOwot
Ci0gICAgdmlydHVhbCB2b2lkIGNhY2hlU2VsZWN0aW9uKGludCBzdGFydCwgaW50IGVuZCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBzZWxlY3QoKSA9IDA7Ci0gIAotI2lmIEVOQUJMRShXQ1NTKQot
ICAgIHZpcnR1YWwgSW5wdXRFbGVtZW50RGF0YSBkYXRhKCkgY29uc3QgPSAwOyAKLSNlbmRpZgot
Ci0gICAgc3RhdGljIGNvbnN0IGludCBzX21heGltdW1MZW5ndGg7Ci0gICAgc3RhdGljIGNvbnN0
IGludCBzX2RlZmF1bHRTaXplOwotCi0gICAgLy8gUmVwbGFjZXMgQ1JzIGFuZCBMRnMsIHNocmlu
a3MgdGhlIHZhbHVlIGZvciBzX21heGltdW1MZW5ndGguCi0gICAgLy8gVGhpcyBzaG91bGQgYmUg
YXBwbGllZCB0byB2YWx1ZXMgZnJvbSB0aGUgSFRNTCB2YWx1ZSBhdHRyaWJ1dGUgYW5kIHRoZSBE
T00gdmFsdWUgcHJvcGVydHkuCi0gICAgLy8gVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVk
IG9ubHkgYnkgc2FuaXRpemVWYWx1ZSgpIGltcGxlbWVudGF0aW9ucy4KLSAgICAvLyBQdWJsaWMg
c28gaXQgY2FuIGJlIGNhbGxlZCBieSBJbnB1dFR5cGUuCi0gICAgc3RhdGljIFN0cmluZyBzYW5p
dGl6ZVZhbHVlRm9yVGV4dEZpZWxkKGNvbnN0IElucHV0RWxlbWVudCosIGNvbnN0IFN0cmluZyYp
OwotCi1wcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hGb2N1c0V2ZW50KElucHV0
RWxlbWVudCosIEVsZW1lbnQqKTsKLSAgICBzdGF0aWMgdm9pZCBkaXNwYXRjaEJsdXJFdmVudChJ
bnB1dEVsZW1lbnQqLCBFbGVtZW50Kik7Ci0gICAgc3RhdGljIHZvaWQgdXBkYXRlRm9jdXNBcHBl
YXJhbmNlKElucHV0RWxlbWVudERhdGEmLCBJbnB1dEVsZW1lbnQqLCBFbGVtZW50KiwgYm9vbCBy
ZXN0b3JlUHJldmlvdXNTZWxlY3Rpb24pOwotICAgIHN0YXRpYyB2b2lkIHVwZGF0ZVNlbGVjdGlv
blJhbmdlKElucHV0RWxlbWVudCosIEVsZW1lbnQqLCBpbnQgc3RhcnQsIGludCBlbmQpOwotICAg
IHN0YXRpYyB2b2lkIGFib3V0VG9VbmxvYWQoSW5wdXRFbGVtZW50KiwgRWxlbWVudCopOwotICAg
IHN0YXRpYyB2b2lkIHNldFZhbHVlRnJvbVJlbmRlcmVyKElucHV0RWxlbWVudERhdGEmLCBJbnB1
dEVsZW1lbnQqLCBFbGVtZW50KiwgY29uc3QgU3RyaW5nJik7Ci0gICAgLy8gUmVwbGFjZXMgQ1Jz
IGFuZCBMRnMsIHNocmlua3MgdGhlIHZhbHVlIGZvciB0aGUgc3BlY2lmaWVkIG1heGltdW0gbGVu
Z3RoLgotICAgIC8vIFRoaXMgc2hvdWxkIGJlIGFwcGxpZWQgdG8gdmFsdWVzIHNwZWNpZmllZCBi
eSB1c2Vycy4KLSAgICAvLyBUaGUgaW5wdXQgc3RyaW5nIG1heSBiZSBhIGZyYWdtZW50IG9mIHRo
ZSB3aG9sZSB2YWx1ZS4KLSAgICBzdGF0aWMgU3RyaW5nIHNhbml0aXplVXNlcklucHV0VmFsdWUo
Y29uc3QgSW5wdXRFbGVtZW50KiwgY29uc3QgU3RyaW5nJiwgaW50KTsKLSAgICBzdGF0aWMgdm9p
ZCBoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudChJbnB1dEVsZW1lbnREYXRhJiwgSW5wdXRF
bGVtZW50KiwgRWxlbWVudCosIEV2ZW50Kik7Ci0gICAgc3RhdGljIHZvaWQgcGFyc2VTaXplQXR0
cmlidXRlKElucHV0RWxlbWVudERhdGEmLCBFbGVtZW50KiwgQXR0cmlidXRlKik7Ci0gICAgc3Rh
dGljIHZvaWQgcGFyc2VNYXhMZW5ndGhBdHRyaWJ1dGUoSW5wdXRFbGVtZW50RGF0YSYsIElucHV0
RWxlbWVudCosIEVsZW1lbnQqLCBBdHRyaWJ1dGUqKTsKLSAgICBzdGF0aWMgdm9pZCB1cGRhdGVW
YWx1ZUlmTmVlZGVkKElucHV0RWxlbWVudERhdGEmLCBJbnB1dEVsZW1lbnQqKTsKLSAgICBzdGF0
aWMgdm9pZCBub3RpZnlGb3JtU3RhdGVDaGFuZ2VkKEVsZW1lbnQqKTsKLSNpZiBFTkFCTEUoV0NT
UykKLSAgICBzdGF0aWMgYm9vbCBpc0NvbmZvcm1Ub0lucHV0TWFzayhjb25zdCBJbnB1dEVsZW1l
bnREYXRhJiwgY29uc3QgU3RyaW5nJik7Ci0gICAgc3RhdGljIGJvb2wgaXNDb25mb3JtVG9JbnB1
dE1hc2soY29uc3QgSW5wdXRFbGVtZW50RGF0YSYsIFVDaGFyLCB1bnNpZ25lZCk7Ci0gICAgc3Rh
dGljIFN0cmluZyB2YWxpZGF0ZUlucHV0TWFzayhJbnB1dEVsZW1lbnREYXRhJiwgU3RyaW5nJik7
Ci0jZW5kaWYKLX07Ci0KLS8vIEhUTUxJbnB1dEVsZW1lbnQgaG9sZCB0aGlzIHN0cnVjdCBhcyBt
ZW1iZXIgdmFyaWFibGUKLS8vIGFuZCBwYXNzIGl0IHRvIHRoZSBzdGF0aWMgaGVscGVyIGZ1bmN0
aW9ucyBpbiBJbnB1dEVsZW1lbnQKLWNsYXNzIElucHV0RWxlbWVudERhdGEgewotcHVibGljOgot
ICAgIElucHV0RWxlbWVudERhdGEoKTsKLSAgICB+SW5wdXRFbGVtZW50RGF0YSgpOwotCi0gICAg
Y29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXROYW1lKGNvbnN0
IEF0b21pY1N0cmluZyYgdmFsdWUpIHsgbV9uYW1lID0gdmFsdWU7IH0KLQotICAgIC8vIFRoZSBu
dWxsIFN0cmluZyByZXByZXNlbnRzICJ1c2UgdGhlIGRlZmF1bHQgdmFsdWUsIiBhbmQgdGhlIGVt
cHR5IFN0cmluZwotICAgIC8vIHJlcHJlc2VudHMgdGhlIGVtcHR5IHZhbHVlLgotICAgIFN0cmlu
ZyB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KLSAgICB2b2lkIHNldFZhbHVlKGNv
bnN0IFN0cmluZyYgdmFsdWUpIHsgbV92YWx1ZSA9IHZhbHVlOyB9Ci0KLSAgICBjb25zdCBTdHJp
bmcmIHN1Z2dlc3RlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9zdWdnZXN0ZWRWYWx1ZTsgfQot
ICAgIHZvaWQgc2V0U3VnZ2VzdGVkVmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkgeyBtX3N1Z2dl
c3RlZFZhbHVlID0gdmFsdWU7IH0KLQotICAgIGludCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9z
aXplOyB9Ci0gICAgdm9pZCBzZXRTaXplKGludCB2YWx1ZSkgeyBtX3NpemUgPSB2YWx1ZTsgfQot
Ci0gICAgaW50IG1heExlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4TGVuZ3RoOyB9Ci0gICAg
dm9pZCBzZXRNYXhMZW5ndGgoaW50IHZhbHVlKSB7IG1fbWF4TGVuZ3RoID0gdmFsdWU7IH0KLQot
ICAgIGludCBjYWNoZWRTZWxlY3Rpb25TdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkU2Vs
ZWN0aW9uU3RhcnQ7IH0KLSAgICB2b2lkIHNldENhY2hlZFNlbGVjdGlvblN0YXJ0KGludCB2YWx1
ZSkgeyBtX2NhY2hlZFNlbGVjdGlvblN0YXJ0ID0gdmFsdWU7IH0KLQotICAgIGludCBjYWNoZWRT
ZWxlY3Rpb25FbmQoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZFNlbGVjdGlvbkVuZDsgfQotICAg
IHZvaWQgc2V0Q2FjaGVkU2VsZWN0aW9uRW5kKGludCB2YWx1ZSkgeyBtX2NhY2hlZFNlbGVjdGlv
bkVuZCA9IHZhbHVlOyB9Ci0KLSNpZiBFTkFCTEUoV0NTUykKLSAgICBTdHJpbmcgaW5wdXRGb3Jt
YXRNYXNrKCkgY29uc3QgeyByZXR1cm4gbV9pbnB1dEZvcm1hdE1hc2s7IH0KLSAgICB2b2lkIHNl
dElucHV0Rm9ybWF0TWFzayhjb25zdCBTdHJpbmcmIG1hc2spIHsgbV9pbnB1dEZvcm1hdE1hc2sg
PSBtYXNrOyB9Ci0gCi0gICAgdW5zaWduZWQgbWF4SW5wdXRDaGFyc0FsbG93ZWQoKSBjb25zdCB7
IHJldHVybiBtX21heElucHV0Q2hhcnNBbGxvd2VkOyB9Ci0gICAgdm9pZCBzZXRNYXhJbnB1dENo
YXJzQWxsb3dlZCh1bnNpZ25lZCBtYXhMZW5ndGgpIHsgbV9tYXhJbnB1dENoYXJzQWxsb3dlZCA9
IG1heExlbmd0aDsgfQotICAKLSNlbmRpZgotCi1wcml2YXRlOgotICAgIEF0b21pY1N0cmluZyBt
X25hbWU7Ci0gICAgU3RyaW5nIG1fdmFsdWU7Ci0gICAgU3RyaW5nIG1fc3VnZ2VzdGVkVmFsdWU7
Ci0gICAgaW50IG1fc2l6ZTsKLSAgICBpbnQgbV9tYXhMZW5ndGg7Ci0gICAgaW50IG1fY2FjaGVk
U2VsZWN0aW9uU3RhcnQ7Ci0gICAgaW50IG1fY2FjaGVkU2VsZWN0aW9uRW5kOwotI2lmIEVOQUJM
RShXQ1NTKQotICAgIFN0cmluZyBtX2lucHV0Rm9ybWF0TWFzazsKLSAgICB1bnNpZ25lZCBtX21h
eElucHV0Q2hhcnNBbGxvd2VkOwotI2VuZGlmCi19OwotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
Y3BwCmluZGV4IDBmYzQwMGM0YzI1YThjYjc1NmZiOGJmOTU0OWVhNjdhOTAzNmU4ODMuLjQ0Mjhm
ZmFjNDNiMGFiYWNkNGI1MWQ5YzUxMmYzOTJhMjcxNTA5NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAg
LTU1OSw3ICs1NTksNyBAQCB2b2lkIE5vZGU6OnNldFNoYWRvd0hvc3QoRWxlbWVudCogaG9zdCkK
ICAgICBzZXRQYXJlbnQoaG9zdCk7CiB9CiAKLUlucHV0RWxlbWVudCogTm9kZTo6dG9JbnB1dEVs
ZW1lbnQoKQorSFRNTElucHV0RWxlbWVudCogTm9kZTo6dG9JbnB1dEVsZW1lbnQoKQogewogICAg
IC8vIElmIG9uZSBvZiB0aGUgYmVsb3cgQVNTRVJUcyB0cmlnZ2VyLCB5b3UgYXJlIGNhbGxpbmcg
dGhpcyBmdW5jdGlvbgogICAgIC8vIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgZnJvbSBhIGNvbnN0
cnVjdG9yIG9yIGRlc3RydWN0b3Igb2YgdGhpcyBvYmplY3QuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAppbmRleCAwNTcx
ZGZhYzU5NGQ0MGRkZDUxMWFjMWM2OWZhZjRlZDMzMWUxZjllLi5jMjg4ZDFmOWFiMTZmODM0ZTBm
ZTY0OWQ4NmFhMzdlMDI3YjYzYzEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKQEAgLTU0LDcgKzU0LDcgQEAgY2xh
c3MgRXZlbnRDb250ZXh0OwogY2xhc3MgRXZlbnRMaXN0ZW5lcjsKIGNsYXNzIEZsb2F0UG9pbnQ7
CiBjbGFzcyBGcmFtZTsKLWNsYXNzIElucHV0RWxlbWVudDsKK2NsYXNzIEhUTUxJbnB1dEVsZW1l
bnQ7CiBjbGFzcyBJbnRSZWN0OwogY2xhc3MgS2V5Ym9hcmRFdmVudDsKIGNsYXNzIE5TUmVzb2x2
ZXI7CkBAIC01MjQsNyArNTI0LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBOb2RlKiB0b05v
ZGUoKSB7IHJldHVybiB0aGlzOyB9CiAKLSAgICB2aXJ0dWFsIElucHV0RWxlbWVudCogdG9JbnB1
dEVsZW1lbnQoKTsKKyAgICB2aXJ0dWFsIEhUTUxJbnB1dEVsZW1lbnQqIHRvSW5wdXRFbGVtZW50
KCk7CiAKICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
SW5wdXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5j
cHAKaW5kZXggZjljY2FmOTA0Yzc3MzBjNzllODk2YTc5YzU5YmU2NDMyMjQwN2VjMi4uZDEzNWY5
NzlhNTg1NWQwNzIwMDI0NjllNGQ2MjkwZGM1MDg0NGJkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuY3BwCkBAIC02LDYgKzYsNyBAQAogICogICAgICAgICAgIChDKSAy
MDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9wLmNvbSkKICAqIENvcHlyaWdodCAoQykg
MjAwNyBTYW11ZWwgV2VpbmlnIChzYW1Ad2Via2l0Lm9yZykKICAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNo
bW9iaWxlLmNvbS8pCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMwLDExICszMSwxNCBAQAogI2lu
Y2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKICNpbmNsdWRl
ICJCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5oIgorI2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1
ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNs
dWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJFeGNl
cHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRmlsZUxpc3QuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgog
I2luY2x1ZGUgIkhUTUxDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTERhdGFMaXN0RWxlbWVu
dC5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgpAQCAtNDUsNiArNDksNyBAQAogI2lu
Y2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCiAj
aW5jbHVkZSAiTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQbGF0
Zm9ybU1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUu
aCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgpAQCAtNjAsMTAgKzY1LDI0IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAorLy8gRklYTUU6IEFj
Y29yZGluZyB0byBIVE1MNCwgdGhlIGxlbmd0aCBhdHRyaWJ1dGUncyB2YWx1ZSBjYW4gYmUgYXJi
aXRyYXJpbHkKKy8vIGxhcmdlLiBIb3dldmVyLCBkdWUgdG8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0NTM2IHRoaW5ncworLy8gZ2V0IHJhdGhlciBzbHVnZ2lzaCB3
aGVuIGEgdGV4dCBmaWVsZCBoYXMgYSBsYXJnZXIgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhbgor
Ly8gdGhpcywgZXZlbiB3aGVuIGp1c3QgY2xpY2tpbmcgaW4gdGhlIHRleHQgZmllbGQuCitjb25z
dCBpbnQgSFRNTElucHV0RWxlbWVudDo6bWF4aW11bUxlbmd0aCA9IDUyNDI4ODsKK2NvbnN0IGlu
dCBkZWZhdWx0U2l6ZSA9IDIwOwogY29uc3QgaW50IG1heFNhdmVkUmVzdWx0cyA9IDI1NjsKIAog
SFRNTElucHV0RWxlbWVudDo6SFRNTElucHV0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIEhUTUxGb3JtRWxlbWVudCogZm9ybSwgYm9vbCBj
cmVhdGVkQnlQYXJzZXIpCiAgICAgOiBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCh0YWdOYW1l
LCBkb2N1bWVudCwgZm9ybSkKKyAgICAsIG1fc2l6ZShkZWZhdWx0U2l6ZSkKKyAgICAsIG1fbWF4
TGVuZ3RoKG1heGltdW1MZW5ndGgpCisgICAgLCBtX2NhY2hlZFNlbGVjdGlvblN0YXJ0KC0xKQor
ICAgICwgbV9jYWNoZWRTZWxlY3Rpb25FbmQoLTEpCisjaWYgRU5BQkxFKFdDU1MpCisgICAgLCBt
X2lucHV0Rm9ybWF0TWFzaygiKm0iKQorICAgICwgbV9tYXhJbnB1dENoYXJzQWxsb3dlZChtYXhp
bXVtTGVuZ3RoKQorI2VuZGlmCiAgICAgLCBtX21heFJlc3VsdHMoLTEpCiAgICAgLCBtX2lzQ2hl
Y2tlZChmYWxzZSkKICAgICAsIG1fcmVmbGVjdHNDaGVja2VkQXR0cmlidXRlKHRydWUpCkBAIC05
OCw3ICsxMTcsNyBAQCBIVE1MSW5wdXRFbGVtZW50Ojp+SFRNTElucHV0RWxlbWVudCgpCiAKIGNv
bnN0IEF0b21pY1N0cmluZyYgSFRNTElucHV0RWxlbWVudDo6Zm9ybUNvbnRyb2xOYW1lKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbV9kYXRhLm5hbWUoKTsKKyAgICByZXR1cm4gbV9uYW1lLmlzTnVs
bCgpID8gZW1wdHlBdG9tIDogbV9uYW1lOwogfQogCiBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmF1
dG9Db21wbGV0ZSgpIGNvbnN0CkBAIC0yMDAsNyArMjE5LDcgQEAgYm9vbCBIVE1MSW5wdXRFbGVt
ZW50Ojp0b29Mb25nKGNvbnN0IFN0cmluZyYgdmFsdWUsIE5lZWRzVG9DaGVja0RpcnR5RmxhZyBj
aGVjaykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChjaGVjayA9PSBDaGVja0RpcnR5
RmxhZykgewogICAgICAgICAvLyBSZXR1cm4gZmFsc2UgZm9yIHRoZSBkZWZhdWx0IHZhbHVlIGV2
ZW4gaWYgaXQgaXMgbG9uZ2VyIHRoYW4gbWF4TGVuZ3RoLgotICAgICAgICBib29sIHVzZXJFZGl0
ZWQgPSAhbV9kYXRhLnZhbHVlKCkuaXNOdWxsKCk7CisgICAgICAgIGJvb2wgdXNlckVkaXRlZCA9
ICFtX3ZhbHVlLmlzTnVsbCgpOwogICAgICAgICBpZiAoIXVzZXJFZGl0ZWQpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMzkzLDE1ICs0MTIsMjkgQEAgYm9vbCBIVE1MSW5w
dXRFbGVtZW50Ojppc01vdXNlRm9jdXNhYmxlKCkgY29uc3QKIAogdm9pZCBIVE1MSW5wdXRFbGVt
ZW50Ojp1cGRhdGVGb2N1c0FwcGVhcmFuY2UoYm9vbCByZXN0b3JlUHJldmlvdXNTZWxlY3Rpb24p
CiB7Ci0gICAgaWYgKGlzVGV4dEZpZWxkKCkpCi0gICAgICAgIElucHV0RWxlbWVudDo6dXBkYXRl
Rm9jdXNBcHBlYXJhbmNlKG1fZGF0YSwgdGhpcywgdGhpcywgcmVzdG9yZVByZXZpb3VzU2VsZWN0
aW9uKTsKLSAgICBlbHNlCisgICAgaWYgKGlzVGV4dEZpZWxkKCkpIHsKKyAgICAgICAgaWYgKCFy
ZXN0b3JlUHJldmlvdXNTZWxlY3Rpb24gfHwgbV9jYWNoZWRTZWxlY3Rpb25TdGFydCA9PSAtMSkK
KyAgICAgICAgICAgIHNlbGVjdCgpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIFJl
c3RvcmUgdGhlIGNhY2hlZCBzZWxlY3Rpb24uCisgICAgICAgICAgICBXZWJDb3JlOjpzZXRTZWxl
Y3Rpb25SYW5nZSh0aGlzLCBtX2NhY2hlZFNlbGVjdGlvblN0YXJ0LCBtX2NhY2hlZFNlbGVjdGlv
bkVuZCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRvY3VtZW50KCktPmZyYW1lKCkpCisgICAg
ICAgICAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKS0+cmV2ZWFsU2VsZWN0aW9u
KCk7CisgICAgfSBlbHNlCiAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6
OnVwZGF0ZUZvY3VzQXBwZWFyYW5jZShyZXN0b3JlUHJldmlvdXNTZWxlY3Rpb24pOwogfQogCiB2
b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmFib3V0VG9VbmxvYWQoKQogewotICAgIElucHV0RWxlbWVu
dDo6YWJvdXRUb1VubG9hZCh0aGlzLCB0aGlzKTsKKyAgICBpZiAoIWlzVGV4dEZpZWxkKCkgfHwg
IWZvY3VzZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1l
bnQoKS0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBm
cmFtZS0+ZWRpdG9yKCktPnRleHRGaWVsZERpZEVuZEVkaXRpbmcodGhpcyk7CiB9CiAKIGJvb2wg
SFRNTElucHV0RWxlbWVudDo6c2hvdWxkVXNlSW5wdXRNZXRob2QoKSBjb25zdApAQCAtNDExLDEz
ICs0NDQsMjQgQEAgYm9vbCBIVE1MSW5wdXRFbGVtZW50OjpzaG91bGRVc2VJbnB1dE1ldGhvZCgp
IGNvbnN0CiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6aGFuZGxlRm9jdXNFdmVudCgpCiB7Ci0g
ICAgSW5wdXRFbGVtZW50OjpkaXNwYXRjaEZvY3VzRXZlbnQodGhpcywgdGhpcyk7CisgICAgaWYg
KCFpc1RleHRGaWVsZCgpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGlzUGFzc3dvcmRGaWVs
ZCgpICYmIGRvY3VtZW50KCktPmZyYW1lKCkpCisgICAgICAgIGRvY3VtZW50KCktPnNldFVzZVNl
Y3VyZUtleWJvYXJkRW50cnlXaGVuQWN0aXZlKHRydWUpOwogfQogCiB2b2lkIEhUTUxJbnB1dEVs
ZW1lbnQ6OmhhbmRsZUJsdXJFdmVudCgpCiB7CiAgICAgbV9pbnB1dFR5cGUtPmhhbmRsZUJsdXJF
dmVudCgpOwotICAgIElucHV0RWxlbWVudDo6ZGlzcGF0Y2hCbHVyRXZlbnQodGhpcywgdGhpcyk7
CisKKyAgICBpZiAoIWlzVGV4dEZpZWxkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBGcmFtZSog
ZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJl
dHVybjsKKyAgICBpZiAoaXNQYXNzd29yZEZpZWxkKCkpCisgICAgICAgIGRvY3VtZW50KCktPnNl
dFVzZVNlY3VyZUtleWJvYXJkRW50cnlXaGVuQWN0aXZlKGZhbHNlKTsKKyAgICBmcmFtZS0+ZWRp
dG9yKCktPnRleHRGaWVsZERpZEVuZEVkaXRpbmcodGhpcyk7CiB9CiAKIHZvaWQgSFRNTElucHV0
RWxlbWVudDo6c2V0VHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCkBAIC00NjYsMTQgKzUxMCwxNCBA
QCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnVwZGF0ZVR5cGUoKQogCiAgICAgYm9vbCB3aWxsU3Rv
cmVWYWx1ZSA9IG1faW5wdXRUeXBlLT5zdG9yZXNWYWx1ZVNlcGFyYXRlRnJvbUF0dHJpYnV0ZSgp
OwogCi0gICAgaWYgKGRpZFN0b3JlVmFsdWUgJiYgIXdpbGxTdG9yZVZhbHVlICYmICFtX2RhdGEu
dmFsdWUoKS5pc051bGwoKSkgewotICAgICAgICBzZXRBdHRyaWJ1dGUodmFsdWVBdHRyLCBtX2Rh
dGEudmFsdWUoKSk7Ci0gICAgICAgIG1fZGF0YS5zZXRWYWx1ZShTdHJpbmcoKSk7CisgICAgaWYg
KGRpZFN0b3JlVmFsdWUgJiYgIXdpbGxTdG9yZVZhbHVlICYmICFtX3ZhbHVlLmlzTnVsbCgpKSB7
CisgICAgICAgIHNldEF0dHJpYnV0ZSh2YWx1ZUF0dHIsIG1fdmFsdWUpOworICAgICAgICBtX3Zh
bHVlID0gU3RyaW5nKCk7CiAgICAgfQogICAgIGlmICghZGlkU3RvcmVWYWx1ZSAmJiB3aWxsU3Rv
cmVWYWx1ZSkKLSAgICAgICAgbV9kYXRhLnNldFZhbHVlKHNhbml0aXplVmFsdWUoZmFzdEdldEF0
dHJpYnV0ZSh2YWx1ZUF0dHIpKSk7CisgICAgICAgIG1fdmFsdWUgPSBzYW5pdGl6ZVZhbHVlKGZh
c3RHZXRBdHRyaWJ1dGUodmFsdWVBdHRyKSk7CiAgICAgZWxzZQotICAgICAgICBJbnB1dEVsZW1l
bnQ6OnVwZGF0ZVZhbHVlSWZOZWVkZWQobV9kYXRhLCB0aGlzKTsKKyAgICAgICAgdXBkYXRlVmFs
dWVJZk5lZWRlZCgpOwogCiAgICAgaWYgKG5lZWRlZEFjdGl2YXRpb25DYWxsYmFjaykKICAgICAg
ICAgdW5yZWdpc3RlckZvckFjdGl2YXRpb25DYWxsYmFja0lmTmVlZGVkKCk7CkBAIC01MDIsNyAr
NTQ2LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojp1cGRhdGVUeXBlKCkKICAgICBjaGVja2Vk
UmFkaW9CdXR0b25zKCkuYWRkQnV0dG9uKHRoaXMpOwogCiAgICAgc2V0TmVlZHNWYWxpZGl0eUNo
ZWNrKCk7Ci0gICAgSW5wdXRFbGVtZW50Ojpub3RpZnlGb3JtU3RhdGVDaGFuZ2VkKHRoaXMpOwor
ICAgIG5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQoKTsKIH0KIAogY29uc3QgQXRvbWljU3RyaW5nJiBI
VE1MSW5wdXRFbGVtZW50Ojpmb3JtQ29udHJvbFR5cGUoKSBjb25zdApAQCAtNTYwLDcgKzYwNCw3
IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRl
KiBhdHRyKQogewogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gbmFtZUF0dHIpIHsKICAgICAgICAg
Y2hlY2tlZFJhZGlvQnV0dG9ucygpLnJlbW92ZUJ1dHRvbih0aGlzKTsKLSAgICAgICAgbV9kYXRh
LnNldE5hbWUoYXR0ci0+dmFsdWUoKSk7CisgICAgICAgIG1fbmFtZSA9IGF0dHItPnZhbHVlKCk7
CiAgICAgICAgIGNoZWNrZWRSYWRpb0J1dHRvbnMoKS5hZGRCdXR0b24odGhpcyk7CiAgICAgICAg
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGF1dG9jb21wbGV0ZUF0dHIpIHsK
QEAgLTU4Miw3ICs2MjYsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKICAgICAgICAgdXBkYXRlVHlwZSgpOwogICAgIH0gZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IHZhbHVlQXR0cikgewogICAgICAgICAvLyBXZSBvbmx5IG5l
ZWQgdG8gc2V0Q2hhbmdlZCBpZiB0aGUgZm9ybSBpcyBsb29raW5nIGF0IHRoZSBkZWZhdWx0IHZh
bHVlIHJpZ2h0IG5vdy4KLSAgICAgICAgaWYgKG1fZGF0YS52YWx1ZSgpLmlzTnVsbCgpKQorICAg
ICAgICBpZiAobV92YWx1ZS5pc051bGwoKSkKICAgICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNh
bGMoKTsKICAgICAgICAgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcihmYWxzZSk7
CiAgICAgICAgIHNldE5lZWRzVmFsaWRpdHlDaGVjaygpOwpAQCAtNTk1LDEyICs2MzksMTMgQEAg
dm9pZCBIVE1MSW5wdXRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0
dHIpCiAgICAgICAgICAgICBzZXRDaGVja2VkKCFhdHRyLT5pc051bGwoKSk7CiAgICAgICAgICAg
ICBtX3JlZmxlY3RzQ2hlY2tlZEF0dHJpYnV0ZSA9IHRydWU7CiAgICAgICAgIH0KLSAgICB9IGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBtYXhsZW5ndGhBdHRyKSB7Ci0gICAgICAgIElucHV0RWxl
bWVudDo6cGFyc2VNYXhMZW5ndGhBdHRyaWJ1dGUobV9kYXRhLCB0aGlzLCB0aGlzLCBhdHRyKTsK
LSAgICAgICAgc2V0TmVlZHNWYWxpZGl0eUNoZWNrKCk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gc2l6ZUF0dHIpCi0gICAgICAgIElucHV0RWxlbWVudDo6cGFyc2VTaXplQXR0cmli
dXRlKG1fZGF0YSwgdGhpcywgYXR0cik7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGFs
dEF0dHIpCisgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gbWF4bGVuZ3RoQXR0cikKKyAg
ICAgICAgcGFyc2VNYXhMZW5ndGhBdHRyaWJ1dGUoYXR0cik7CisgICAgZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IHNpemVBdHRyKSB7CisgICAgICAgIG1fc2l6ZSA9IGF0dHItPmlzTnVsbCgpID8g
ZGVmYXVsdFNpemUgOiBhdHRyLT52YWx1ZSgpLnRvSW50KCk7CisgICAgICAgIGlmIChyZW5kZXJl
cigpKQorICAgICAgICAgICAgcmVuZGVyZXIoKS0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhz
UmVjYWxjKCk7CisgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYWx0QXR0cikKICAgICAg
ICAgbV9pbnB1dFR5cGUtPmFsdEF0dHJpYnV0ZUNoYW5nZWQoKTsKICAgICBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gc3JjQXR0cikKICAgICAgICAgbV9pbnB1dFR5cGUtPnNyY0F0dHJpYnV0ZUNo
YW5nZWQoKTsKQEAgLTgwOCwxNCArODUzLDE0IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0
SW5kZXRlcm1pbmF0ZShib29sIG5ld1ZhbHVlKQogCiBpbnQgSFRNTElucHV0RWxlbWVudDo6c2l6
ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZGF0YS5zaXplKCk7CisgICAgcmV0dXJuIG1fc2l6
ZTsKIH0KIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojpjb3B5Tm9uQXR0cmlidXRlUHJvcGVydGll
cyhjb25zdCBFbGVtZW50KiBzb3VyY2UpCiB7CiAgICAgY29uc3QgSFRNTElucHV0RWxlbWVudCog
c291cmNlRWxlbWVudCA9IHN0YXRpY19jYXN0PGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQqPihzb3Vy
Y2UpOwogCi0gICAgbV9kYXRhLnNldFZhbHVlKHNvdXJjZUVsZW1lbnQtPm1fZGF0YS52YWx1ZSgp
KTsKKyAgICBtX3ZhbHVlID0gc291cmNlRWxlbWVudC0+bV92YWx1ZTsKICAgICBzZXRDaGVja2Vk
KHNvdXJjZUVsZW1lbnQtPm1faXNDaGVja2VkKTsKICAgICBtX3JlZmxlY3RzQ2hlY2tlZEF0dHJp
YnV0ZSA9IHNvdXJjZUVsZW1lbnQtPm1fcmVmbGVjdHNDaGVja2VkQXR0cmlidXRlOwogICAgIG1f
aXNJbmRldGVybWluYXRlID0gc291cmNlRWxlbWVudC0+bV9pc0luZGV0ZXJtaW5hdGU7CkBAIC04
MjksNyArODc0LDcgQEAgU3RyaW5nIEhUTUxJbnB1dEVsZW1lbnQ6OnZhbHVlKCkgY29uc3QKICAg
ICBpZiAobV9pbnB1dFR5cGUtPmdldFR5cGVTcGVjaWZpY1ZhbHVlKHZhbHVlKSkKICAgICAgICAg
cmV0dXJuIHZhbHVlOwogCi0gICAgdmFsdWUgPSBtX2RhdGEudmFsdWUoKTsKKyAgICB2YWx1ZSA9
IG1fdmFsdWU7CiAgICAgaWYgKCF2YWx1ZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIHZhbHVl
OwogCkBAIC04NTcsNyArOTAyLDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1ZUZv
clVzZXIoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIAogY29uc3QgU3RyaW5nJiBIVE1MSW5wdXRFbGVt
ZW50OjpzdWdnZXN0ZWRWYWx1ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZGF0YS5zdWdnZXN0
ZWRWYWx1ZSgpOworICAgIHJldHVybiBtX3N1Z2dlc3RlZFZhbHVlOwogfQogCiB2b2lkIEhUTUxJ
bnB1dEVsZW1lbnQ6OnNldFN1Z2dlc3RlZFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCkBAIC04
NjUsNyArOTEwLDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRTdWdnZXN0ZWRWYWx1ZShj
b25zdCBTdHJpbmcmIHZhbHVlKQogICAgIGlmICghbV9pbnB1dFR5cGUtPmNhblNldFN1Z2dlc3Rl
ZFZhbHVlKCkpCiAgICAgICAgIHJldHVybjsKICAgICBzZXRGb3JtQ29udHJvbFZhbHVlTWF0Y2hl
c1JlbmRlcmVyKGZhbHNlKTsKLSAgICBtX2RhdGEuc2V0U3VnZ2VzdGVkVmFsdWUoc2FuaXRpemVW
YWx1ZSh2YWx1ZSkpOworICAgIG1fc3VnZ2VzdGVkVmFsdWUgPSBzYW5pdGl6ZVZhbHVlKHZhbHVl
KTsKICAgICB1cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkoZmFsc2UpOwogICAgIGlmIChyZW5k
ZXJlcigpKQogICAgICAgICByZW5kZXJlcigpLT51cGRhdGVGcm9tRWxlbWVudCgpOwpAQCAtODgy
LDcgKzkyNyw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWUoY29uc3QgU3RyaW5n
JiB2YWx1ZSwgYm9vbCBzZW5kQ2hhbmdlRXZlbnQpCiAgICAgICAgIGlmIChmaWxlcygpKQogICAg
ICAgICAgICAgZmlsZXMoKS0+Y2xlYXIoKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBt
X2RhdGEuc2V0VmFsdWUoc2FuaXRpemVWYWx1ZSh2YWx1ZSkpOworICAgICAgICAgICAgbV92YWx1
ZSA9IHNhbml0aXplVmFsdWUodmFsdWUpOwogICAgICAgICAgICAgaWYgKGlzVGV4dEZpZWxkKCkp
CiAgICAgICAgICAgICAgICAgdXBkYXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KGZhbHNlKTsKICAg
ICAgICAgfQpAQCAtODkzLDEyICs5MzgsMTIgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRW
YWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIHNlbmRDaGFuZ2VFdmVudCkKICAgICBzZXRO
ZWVkc1ZhbGlkaXR5Q2hlY2soKTsKIAogICAgIGlmIChpc1RleHRGaWVsZCgpKSB7Ci0gICAgICAg
IHVuc2lnbmVkIG1heCA9IG1fZGF0YS52YWx1ZSgpLmxlbmd0aCgpOworICAgICAgICB1bnNpZ25l
ZCBtYXggPSBtX3ZhbHVlLmxlbmd0aCgpOwogICAgICAgICBpZiAoZG9jdW1lbnQoKS0+Zm9jdXNl
ZE5vZGUoKSA9PSB0aGlzKQotICAgICAgICAgICAgSW5wdXRFbGVtZW50Ojp1cGRhdGVTZWxlY3Rp
b25SYW5nZSh0aGlzLCB0aGlzLCBtYXgsIG1heCk7CisgICAgICAgICAgICBXZWJDb3JlOjpzZXRT
ZWxlY3Rpb25SYW5nZSh0aGlzLCBtYXgsIG1heCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IGNhY2hlU2VsZWN0aW9uKG1heCwgbWF4KTsKLSAgICAgICAgbV9kYXRhLnNldFN1Z2dlc3RlZFZh
bHVlKFN0cmluZygpKTsKKyAgICAgICAgbV9zdWdnZXN0ZWRWYWx1ZSA9IFN0cmluZygpOwogICAg
IH0KICAgICBtX2lucHV0VHlwZS0+dmFsdWVDaGFuZ2VkKCk7CiAKQEAgLTkxNCw3ICs5NTksNyBA
QCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUsIGJv
b2wgc2VuZENoYW5nZUV2ZW50KQogICAgIGlmIChpc1RleHQoKSAmJiAoIWZvY3VzZWQoKSB8fCAh
c2VuZENoYW5nZUV2ZW50KSkKICAgICAgICAgc2V0VGV4dEFzT2ZMYXN0Rm9ybUNvbnRyb2xDaGFu
Z2VFdmVudCh2YWx1ZSk7CiAKLSAgICBJbnB1dEVsZW1lbnQ6Om5vdGlmeUZvcm1TdGF0ZUNoYW5n
ZWQodGhpcyk7CisgICAgbm90aWZ5Rm9ybVN0YXRlQ2hhbmdlZCgpOwogfQogCiBkb3VibGUgSFRN
TElucHV0RWxlbWVudDo6dmFsdWVBc0RhdGUoKSBjb25zdApAQCAtOTYxLDggKzEwMDYsMjMgQEAg
dm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1ZUZyb21SZW5kZXJlcihjb25zdCBTdHJpbmcm
IHZhbHVlKQogICAgIC8vIEZpbGUgdXBsb2FkIGNvbnRyb2xzIHdpbGwgYWx3YXlzIHVzZSBzZXRG
aWxlTGlzdEZyb21SZW5kZXJlci4KICAgICBBU1NFUlQoIWlzRmlsZVVwbG9hZCgpKTsKIAotICAg
IG1fZGF0YS5zZXRTdWdnZXN0ZWRWYWx1ZShTdHJpbmcoKSk7Ci0gICAgSW5wdXRFbGVtZW50Ojpz
ZXRWYWx1ZUZyb21SZW5kZXJlcihtX2RhdGEsIHRoaXMsIHRoaXMsIHZhbHVlKTsKKyAgICBtX3N1
Z2dlc3RlZFZhbHVlID0gU3RyaW5nKCk7CisKKyAgICAvLyBSZW5kZXJlciBhbmQgb3VyIGV2ZW50
IGhhbmRsZXIgYXJlIHJlc3BvbnNpYmxlIGZvciBzYW5pdGl6aW5nIHZhbHVlcy4KKyAgICBBU1NF
UlQodmFsdWUgPT0gc2FuaXRpemVWYWx1ZSh2YWx1ZSkgfHwgc2FuaXRpemVWYWx1ZSh2YWx1ZSku
aXNFbXB0eSgpKTsKKworICAgIC8vIFdvcmthcm91bmQgZm9yIGJ1ZyB3aGVyZSB0cmFpbGluZyBc
biBpcyBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0IG9mIHRleHRDb250ZW50LgorICAgIC8vIFRoZSBh
c3NlcnQgbWFjcm8gYWJvdmUgbWF5IGFsc28gYmUgc2ltcGxpZmllZCB0bzogdmFsdWUgPT0gY29u
c3RyYWluVmFsdWUodmFsdWUpCisgICAgLy8gaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTY2MQorICAgIG1fdmFsdWUgPSB2YWx1ZSA9PSAiXG4iID8gU3RyaW5nKCIiKSA6
IHZhbHVlOworCisgICAgc2V0Rm9ybUNvbnRyb2xWYWx1ZU1hdGNoZXNSZW5kZXJlcih0cnVlKTsK
KworICAgIC8vIElucHV0IGV2ZW50IGlzIGZpcmVkIGJ5IHRoZSBOb2RlOjpkZWZhdWx0RXZlbnRI
YW5kbGVyIGZvciBlZGl0YWJsZSBjb250cm9scy4KKyAgICBpZiAoIWlzVGV4dEZpZWxkKCkpCisg
ICAgICAgIGRpc3BhdGNoSW5wdXRFdmVudCgpOworICAgIG5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQo
KTsKKwogICAgIHVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eShmYWxzZSk7CiAgICAgc2V0TmVl
ZHNWYWxpZGl0eUNoZWNrKCk7CiAKQEAgLTk3NSw3ICsxMDM1LDcgQEAgdm9pZCBIVE1MSW5wdXRF
bGVtZW50OjpzZXRGaWxlTGlzdEZyb21SZW5kZXJlcihjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0
aHMpCiAgICAgbV9pbnB1dFR5cGUtPnNldEZpbGVMaXN0KHBhdGhzKTsKIAogICAgIHNldEZvcm1D
b250cm9sVmFsdWVNYXRjaGVzUmVuZGVyZXIodHJ1ZSk7Ci0gICAgSW5wdXRFbGVtZW50Ojpub3Rp
ZnlGb3JtU3RhdGVDaGFuZ2VkKHRoaXMpOworICAgIG5vdGlmeUZvcm1TdGF0ZUNoYW5nZWQoKTsK
ICAgICBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKIH0KIApAQCAtMTEwNSw3ICsxMTY1LDcgQEAg
dm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXREZWZhdWx0VmFsdWUoY29uc3QgU3RyaW5nICZ2YWx1
ZSkKIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXREZWZhdWx0TmFtZShjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWUpCiB7Ci0gICAgbV9kYXRhLnNldE5hbWUobmFtZSk7CisgICAgbV9uYW1lID0g
bmFtZTsKIH0KIAogU3RyaW5nIEhUTUxJbnB1dEVsZW1lbnQ6OmFjY2VwdCgpIGNvbnN0CkBAIC0x
MTIwLDcgKzExODAsNyBAQCBTdHJpbmcgSFRNTElucHV0RWxlbWVudDo6YWx0KCkgY29uc3QKIAog
aW50IEhUTUxJbnB1dEVsZW1lbnQ6Om1heExlbmd0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1f
ZGF0YS5tYXhMZW5ndGgoKTsKKyAgICByZXR1cm4gbV9tYXhMZW5ndGg7CiB9CiAKIHZvaWQgSFRN
TElucHV0RWxlbWVudDo6c2V0TWF4TGVuZ3RoKGludCBtYXhMZW5ndGgsIEV4Y2VwdGlvbkNvZGUm
IGVjKQpAQCAtMTIxOSw4ICsxMjc5LDggQEAgYm9vbCBIVE1MSW5wdXRFbGVtZW50Ojppc1JlcXVp
cmVkRm9ybUNvbnRyb2woKSBjb25zdAogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmNhY2hlU2Vs
ZWN0aW9uKGludCBzdGFydCwgaW50IGVuZCkKIHsKLSAgICBtX2RhdGEuc2V0Q2FjaGVkU2VsZWN0
aW9uU3RhcnQoc3RhcnQpOwotICAgIG1fZGF0YS5zZXRDYWNoZWRTZWxlY3Rpb25FbmQoZW5kKTsK
KyAgICBtX2NhY2hlZFNlbGVjdGlvblN0YXJ0ID0gc3RhcnQ7CisgICAgbV9jYWNoZWRTZWxlY3Rp
b25FbmQgPSBlbmQ7CiB9CiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6YWRkU2VhcmNoUmVzdWx0
KCkKQEAgLTE0NDQsMTEgKzE1MDQsMTQwIEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c3RlcFVw
RnJvbVJlbmRlcmVyKGludCBuKQogCiAjaWYgRU5BQkxFKFdDU1MpCiAKK3N0YXRpYyBpbmxpbmUg
Y29uc3QgQXRvbWljU3RyaW5nJiBmb3JtYXRDb2RlcygpCit7CisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChBdG9taWNTdHJpbmcsIGNvZGVzLCAoIkFhTm5YeE1tIikpOworICAgIHJldHVybiBjb2Rl
czsKK30KKworc3RhdGljIHVuc2lnbmVkIGN1cnNvclBvc2l0aW9uVG9NYXNrSW5kZXgoY29uc3Qg
U3RyaW5nJiBpbnB1dEZvcm1hdE1hc2ssIHVuc2lnbmVkIGN1cnNvclBvc2l0aW9uKQoreworICAg
IFVDaGFyIG1hc2s7CisgICAgaW50IGluZGV4ID0gLTE7CisgICAgZG8geworICAgICAgICBtYXNr
ID0gaW5wdXRGb3JtYXRNYXNrWysraW5kZXhdOworICAgICAgICBpZiAobWFzayA9PSAnXFwnKQor
ICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgZWxzZSBpZiAobWFzayA9PSAnKicgfHwgKGlz
QVNDSUlEaWdpdChtYXNrKSAmJiBtYXNrICE9ICcwJykpIHsKKyAgICAgICAgICAgIGluZGV4ID0g
aW5wdXRGb3JtYXRNYXNrLmxlbmd0aCgpIC0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgfSB3aGlsZSAoY3Vyc29yUG9zaXRpb24tLSk7CisKKyAgICByZXR1cm4gaW5kZXg7
Cit9CisKK2Jvb2wgSFRNTElucHV0RWxlbWVudDo6aXNDb25mb3JtVG9JbnB1dE1hc2soY29uc3Qg
U3RyaW5nJiBpbnB1dENoYXJzKSBjb25zdAoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBpbnB1dENoYXJzLmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFpc0NvbmZvcm1Ub0lu
cHV0TWFzayhpbnB1dENoYXJzW2ldLCBpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSFRNTElucHV0RWxlbWVudDo6aXNDb25m
b3JtVG9JbnB1dE1hc2soVUNoYXIgaW5DaGFyLCB1bnNpZ25lZCBjdXJzb3JQb3NpdGlvbikgY29u
c3QKK3sKKyAgICBpZiAobV9pbnB1dEZvcm1hdE1hc2suaXNFbXB0eSgpIHx8IG1faW5wdXRGb3Jt
YXRNYXNrID09ICIqTSIgfHwgbV9pbnB1dEZvcm1hdE1hc2sgPT0gIiptIikKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBpZiAoY3Vyc29yUG9zaXRpb24gPj0gbV9tYXhJbnB1dENoYXJzQWxs
b3dlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB1bnNpZ25lZCBtYXNrSW5kZXgg
PSBjdXJzb3JQb3NpdGlvblRvTWFza0luZGV4KG1faW5wdXRGb3JtYXRNYXNrLCBjdXJzb3JQb3Np
dGlvbik7CisgICAgYm9vbCBvayA9IHRydWU7CisgICAgVUNoYXIgbWFzayA9IG1faW5wdXRGb3Jt
YXRNYXNrW21hc2tJbmRleF07CisgICAgLy8gTWF0Y2ggdGhlIGlucHV0ZWQgY2hhcmFjdGVyIHdp
dGggaW5wdXQgbWFzaworICAgIHN3aXRjaCAobWFzaykgeworICAgIGNhc2UgJ0EnOgorICAgICAg
ICBvayA9ICFpc0FTQ0lJRGlnaXQoaW5DaGFyKSAmJiAhaXNBU0NJSUxvd2VyKGluQ2hhcikgJiYg
aXNBU0NJSVByaW50YWJsZShpbkNoYXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlICdhJzoK
KyAgICAgICAgb2sgPSAhaXNBU0NJSURpZ2l0KGluQ2hhcikgJiYgIWlzQVNDSUlVcHBlcihpbkNo
YXIpICYmIGlzQVNDSUlQcmludGFibGUoaW5DaGFyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSAnTic6CisgICAgICAgIG9rID0gaXNBU0NJSURpZ2l0KGluQ2hhcik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgJ24nOgorICAgICAgICBvayA9ICFpc0FTQ0lJQWxwaGEoaW5DaGFyKSAmJiBp
c0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ1gnOgor
ICAgICAgICBvayA9ICFpc0FTQ0lJTG93ZXIoaW5DaGFyKSAmJiBpc0FTQ0lJUHJpbnRhYmxlKGlu
Q2hhcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ3gnOgorICAgICAgICBvayA9ICFpc0FT
Q0lJVXBwZXIoaW5DaGFyKSAmJiBpc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgJ00nOgorICAgIGNhc2UgJ20nOgorICAgICAgICBvayA9IGlzQVNDSUlQ
cmludGFibGUoaW5DaGFyKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
b2sgPSAobWFzayA9PSBpbkNoYXIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1
cm4gb2s7Cit9CisKK1N0cmluZyBIVE1MSW5wdXRFbGVtZW50Ojp2YWxpZGF0ZUlucHV0TWFzayhT
dHJpbmcmIGlucHV0TWFzaykKK3sKKyAgICBpbnB1dE1hc2sucmVwbGFjZSgiXFxcXCIsICJcXCIp
OworCisgICAgYm9vbCBpc1ZhbGlkID0gdHJ1ZTsKKyAgICBib29sIGhhc1dpbGRjYXJkID0gZmFs
c2U7CisgICAgdW5zaWduZWQgZXNjYXBlQ2hhckNvdW50ID0gMDsKKyAgICB1bnNpZ25lZCBtYXNr
TGVuZ3RoID0gaW5wdXRNYXNrLmxlbmd0aCgpOworICAgIFVDaGFyIGZvcm1hdENvZGU7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1hc2tMZW5ndGg7ICsraSkgeworICAgICAgICBmb3Jt
YXRDb2RlID0gaW5wdXRNYXNrW2ldOworICAgICAgICBpZiAoZm9ybWF0Q29kZXMoKS5maW5kKGZv
cm1hdENvZGUpID09IC0xKSB7CisgICAgICAgICAgICBpZiAoZm9ybWF0Q29kZSA9PSAnKicgfHwg
KGlzQVNDSUlEaWdpdChmb3JtYXRDb2RlKSAmJiBmb3JtYXRDb2RlICE9ICcwJykpIHsKKyAgICAg
ICAgICAgICAgICAvLyBWYWxpZGF0ZSBjb2RlcyB3aGljaCBlbmRzIHdpdGggJypmJyBvciAnbmYn
CisgICAgICAgICAgICAgICAgZm9ybWF0Q29kZSA9IGlucHV0TWFza1srK2ldOworICAgICAgICAg
ICAgICAgIGlmICgoaSArIDEgIT0gbWFza0xlbmd0aCkgfHwgZm9ybWF0Q29kZXMoKS5maW5kKGZv
cm1hdENvZGUpID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGhhc1dpbGRjYXJkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0
Q29kZSA9PSAnXFwnKSB7CisgICAgICAgICAgICAgICAgLy8gc2tpcCBvdmVyIHRoZSBuZXh0IG1h
c2sgY2hhcmFjdGVyCisgICAgICAgICAgICAgICAgKytpOworICAgICAgICAgICAgICAgICsrZXNj
YXBlQ2hhckNvdW50OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpc1Zh
bGlkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWlzVmFsaWQpCisgICAgICAgIHJldHVybiBTdHJpbmco
KTsKKyAgICAvLyBjYWxjdWxhdGUgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFsbG93ZWQgdG8g
YmUgZW50ZXJlZCBieSBpbnB1dCBtYXNrCisgICAgdW5zaWduZWQgYWxsb3dlZExlbmd0aCA9IG1h
c2tMZW5ndGg7CisgICAgaWYgKGVzY2FwZUNoYXJDb3VudCkKKyAgICAgICAgYWxsb3dlZExlbmd0
aCAtPSBlc2NhcGVDaGFyQ291bnQ7CisKKyAgICBpZiAoaGFzV2lsZGNhcmQpIHsKKyAgICAgICAg
Zm9ybWF0Q29kZSA9IGlucHV0TWFza1ttYXNrTGVuZ3RoIC0gMl07CisgICAgICAgIGlmIChmb3Jt
YXRDb2RlID09ICcqJykKKyAgICAgICAgICAgIGFsbG93ZWRMZW5ndGggPSBtX21heElucHV0Q2hh
cnNBbGxvd2VkOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxlZnRMZW4g
PSBTdHJpbmcoJmZvcm1hdENvZGUpLnRvSW50KCk7CisgICAgICAgICAgICBhbGxvd2VkTGVuZ3Ro
ID0gbGVmdExlbiArIGFsbG93ZWRMZW5ndGggLSAyOworICAgICAgICB9CisgICAgfQorCisgICAg
aWYgKGFsbG93ZWRMZW5ndGggPCBtX21heElucHV0Q2hhcnNBbGxvd2VkKQorICAgICAgICBtX21h
eElucHV0Q2hhcnNBbGxvd2VkID0gYWxsb3dlZExlbmd0aDsKKworICAgIHJldHVybiBpbnB1dE1h
c2s7Cit9CisKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0V2FwSW5wdXRGb3JtYXQoU3RyaW5n
JiBtYXNrKQogewotICAgIFN0cmluZyB2YWxpZGF0ZU1hc2sgPSB2YWxpZGF0ZUlucHV0TWFzayht
X2RhdGEsIG1hc2spOworICAgIFN0cmluZyB2YWxpZGF0ZU1hc2sgPSB2YWxpZGF0ZUlucHV0TWFz
ayhtYXNrKTsKICAgICBpZiAoIXZhbGlkYXRlTWFzay5pc0VtcHR5KCkpCi0gICAgICAgIG1fZGF0
YS5zZXRJbnB1dEZvcm1hdE1hc2sodmFsaWRhdGVNYXNrKTsKKyAgICAgICAgbV9pbnB1dEZvcm1h
dE1hc2sgPSB2YWxpZGF0ZU1hc2s7CiB9CiAKICNlbmRpZgpAQCAtMTU2MCw5ICsxNzQ5LDM0IEBA
IENoZWNrZWRSYWRpb0J1dHRvbnMmIEhUTUxJbnB1dEVsZW1lbnQ6OmNoZWNrZWRSYWRpb0J1dHRv
bnMoKSBjb25zdAogICAgIHJldHVybiBkb2N1bWVudCgpLT5jaGVja2VkUmFkaW9CdXR0b25zKCk7
CiB9CiAKLXZvaWQgSFRNTElucHV0RWxlbWVudDo6aGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZl
bnQoRXZlbnQqIGV2ZW50KQordm9pZCBIVE1MSW5wdXRFbGVtZW50Ojpub3RpZnlGb3JtU3RhdGVD
aGFuZ2VkKCkKK3sKKyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOworICAg
IGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChQYWdlKiBwYWdlID0gZnJh
bWUtPnBhZ2UoKSkKKyAgICAgICAgcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5mb3JtU3RhdGVE
aWRDaGFuZ2UodGhpcyk7Cit9CisKK3ZvaWQgSFRNTElucHV0RWxlbWVudDo6cGFyc2VNYXhMZW5n
dGhBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyaWJ1dGUpCit7CisgICAgaW50IG1heExlbmd0aCA9
IGF0dHJpYnV0ZS0+aXNOdWxsKCkgPyBtYXhpbXVtTGVuZ3RoIDogYXR0cmlidXRlLT52YWx1ZSgp
LnRvSW50KCk7CisgICAgaWYgKG1heExlbmd0aCA8PSAwIHx8IG1heExlbmd0aCA+IG1heGltdW1M
ZW5ndGgpCisgICAgICAgIG1heExlbmd0aCA9IG1heGltdW1MZW5ndGg7CisgICAgaW50IG9sZE1h
eExlbmd0aCA9IG1fbWF4TGVuZ3RoOworICAgIG1fbWF4TGVuZ3RoID0gbWF4TGVuZ3RoOworICAg
IGlmIChvbGRNYXhMZW5ndGggIT0gbWF4TGVuZ3RoKQorICAgICAgICB1cGRhdGVWYWx1ZUlmTmVl
ZGVkKCk7CisgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOworICAgIHNldE5lZWRzVmFsaWRpdHlD
aGVjaygpOworfQorCit2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnVwZGF0ZVZhbHVlSWZOZWVkZWQo
KQogewotICAgIElucHV0RWxlbWVudDo6aGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQobV9k
YXRhLCB0aGlzLCB0aGlzLCBldmVudCk7CisgICAgU3RyaW5nIG5ld1ZhbHVlID0gc2FuaXRpemVW
YWx1ZShtX3ZhbHVlKTsKKyAgICBpZiAobmV3VmFsdWUgIT0gbV92YWx1ZSkKKyAgICAgICAgc2V0
VmFsdWUobmV3VmFsdWUpOwogfQogCiB9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxJbnB1dEVsZW1lbnQuaAppbmRleCA1YmU3MzY2ODc5NjBmYzlkZGJiM2I5YTY5ZTVjN2IzOTA3
ZDQwOTcwLi4xMGNhMjBlNTZkNjVhMzcyZDYwNzUzNjU3ZjdhZjkwNDRiOWU2M2UzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaApAQCAtMjUsNyArMjUsNiBAQAogI2RlZmlu
ZSBIVE1MSW5wdXRFbGVtZW50X2gKIAogI2luY2x1ZGUgIkhUTUxGb3JtQ29udHJvbEVsZW1lbnQu
aCIKLSNpbmNsdWRlICJJbnB1dEVsZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC0zNSwxNCArMzQsMTQgQEAgY2xhc3MgSFRNTE9wdGlvbkVsZW1lbnQ7CiBjbGFzcyBJbnB1dFR5
cGU7CiBjbGFzcyBLVVJMOwogCi1jbGFzcyBIVE1MSW5wdXRFbGVtZW50IDogcHVibGljIEhUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50LCBwdWJsaWMgSW5wdXRFbGVtZW50IHsKK2NsYXNzIEhUTUxJ
bnB1dEVsZW1lbnQgOiBwdWJsaWMgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQgewogcHVibGlj
OgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+IGNyZWF0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqLCBib29sIGNyZWF0ZWRC
eVBhcnNlcik7CiAgICAgdmlydHVhbCB+SFRNTElucHV0RWxlbWVudCgpOwogCiAgICAgREVGSU5F
X0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUih3ZWJraXRzcGVlY2hjaGFuZ2UpOwogCi0gICAgdmly
dHVhbCBJbnB1dEVsZW1lbnQqIHRvSW5wdXRFbGVtZW50KCkgeyByZXR1cm4gdGhpczsgfQorICAg
IHZpcnR1YWwgSFRNTElucHV0RWxlbWVudCogdG9JbnB1dEVsZW1lbnQoKSB7IHJldHVybiB0aGlz
OyB9CiAKICAgICBib29sIGF1dG9Db21wbGV0ZSgpIGNvbnN0OwogCkBAIC03OCwxOCArNzcsMTgg
QEAgcHVibGljOgogICAgIHZvaWQgc3RlcFVwKEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHN0ZXBVcCgx
LCBlYyk7IH0KICAgICB2b2lkIHN0ZXBEb3duKEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHN0ZXBEb3du
KDEsIGVjKTsgfQogICAgIC8vIHN0ZXBVcCgpL3N0ZXBEb3duKCkgZm9yIHVzZXItaW50ZXJhY3Rp
b24uCi0gICAgdmlydHVhbCBib29sIGlzU3RlcHBhYmxlKCkgY29uc3Q7CisgICAgYm9vbCBpc1N0
ZXBwYWJsZSgpIGNvbnN0OwogICAgIHZvaWQgc3RlcFVwRnJvbVJlbmRlcmVyKGludCk7CiAKICAg
ICBib29sIGlzVGV4dEJ1dHRvbigpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIGlzUmFkaW9C
dXR0b24oKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0RmllbGQoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIGJvb2wgaXNTZWFyY2hGaWVsZCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBp
c0lucHV0VHlwZUhpZGRlbigpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc1Bhc3N3b3JkRmll
bGQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNDaGVja2JveCgpIGNvbnN0OwotICAgIHZp
cnR1YWwgYm9vbCBpc1JhbmdlQ29udHJvbCgpIGNvbnN0OworICAgIGJvb2wgaXNUZXh0RmllbGQo
KSBjb25zdDsKKyAgICBib29sIGlzU2VhcmNoRmllbGQoKSBjb25zdDsKKyAgICBib29sIGlzSW5w
dXRUeXBlSGlkZGVuKCkgY29uc3Q7CisgICAgYm9vbCBpc1Bhc3N3b3JkRmllbGQoKSBjb25zdDsK
KyAgICBib29sIGlzQ2hlY2tib3goKSBjb25zdDsKKyAgICBib29sIGlzUmFuZ2VDb250cm9sKCkg
Y29uc3Q7CiAKICAgICAvLyBGSVhNRTogSXQncyBoaWdobHkgbGlrZWx5IHRoYXQgYW55IGNhbGwg
c2l0ZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGluc3RlYWQKICAgICAvLyBiZSB1c2lu
ZyBhIGRpZmZlcmVudCBvbmUuIE1hbnkgaW5wdXQgZWxlbWVudHMgYmVoYXZlIGxpa2UgdGV4dCBm
aWVsZHMsIGFuZCBpbiBhZGRpdGlvbgpAQCAtMTA2LDcgKzEwNSw3IEBAIHB1YmxpYzoKICAgICBi
b29sIGlzVVJMRmllbGQoKSBjb25zdDsKIAogI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCi0gICAg
dmlydHVhbCBib29sIGlzU3BlZWNoRW5hYmxlZCgpIGNvbnN0OworICAgIGJvb2wgaXNTcGVlY2hF
bmFibGVkKCkgY29uc3Q7CiAjZW5kaWYKIAogICAgIGJvb2wgY2hlY2tlZCgpIGNvbnN0IHsgcmV0
dXJuIG1faXNDaGVja2VkOyB9CkBAIC0xMTYsMTggKzExNSwzMCBAQCBwdWJsaWM6CiAgICAgYm9v
bCBpbmRldGVybWluYXRlKCkgY29uc3QgeyByZXR1cm4gbV9pc0luZGV0ZXJtaW5hdGU7IH0KICAg
ICB2b2lkIHNldEluZGV0ZXJtaW5hdGUoYm9vbCk7CiAKLSAgICB2aXJ0dWFsIGludCBzaXplKCkg
Y29uc3Q7CisgICAgLy8gaXNDaGVja2VkIGlzIHVzZWQgYnkgdGhlIHJlbmRlcmluZyB0cmVlL0NT
UyB3aGlsZSBjaGVja2VkKCkgaXMgdXNlZCBieSBKUyB0byBkZXRlcm1pbmUgY2hlY2tlZCBzdGF0
ZQorICAgIHZpcnR1YWwgYm9vbCBpc0NoZWNrZWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wg
aXNJbmRldGVybWluYXRlKCkgY29uc3QgeyByZXR1cm4gaW5kZXRlcm1pbmF0ZSgpOyB9CisKKyAg
ICBpbnQgc2l6ZSgpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRUeXBlKGNvbnN0IFN0cmluZyYpOwog
Ci0gICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0
VmFsdWUoY29uc3QgU3RyaW5nJiwgYm9vbCBzZW5kQ2hhbmdlRXZlbnQgPSBmYWxzZSk7Ci0gICAg
dmlydHVhbCB2b2lkIHNldFZhbHVlRm9yVXNlcihjb25zdCBTdHJpbmcmKTsKKyAgICBTdHJpbmcg
dmFsdWUoKSBjb25zdDsKKyAgICB2b2lkIHNldFZhbHVlKGNvbnN0IFN0cmluZyYsIGJvb2wgc2Vu
ZENoYW5nZUV2ZW50ID0gZmFsc2UpOworICAgIHZvaWQgc2V0VmFsdWVGb3JVc2VyKGNvbnN0IFN0
cmluZyYpOwogICAgIC8vIENoZWNrcyBpZiB0aGUgc3BlY2lmaWVkIHN0cmluZyB3b3VsZCBiZSBh
IHZhbGlkIHZhbHVlLgogICAgIC8vIFdlIHNob3VsZCBub3QgY2FsbCB0aGlzIGZvciB0eXBlcyB3
aXRoIG5vIHN0cmluZyB2YWx1ZSBzdWNoIGFzIENIRUNLQk9YIGFuZCBSQURJTy4KICAgICBib29s
IGlzVmFsaWRWYWx1ZShjb25zdCBTdHJpbmcmKSBjb25zdDsKIAotICAgIHZpcnR1YWwgY29uc3Qg
U3RyaW5nJiBzdWdnZXN0ZWRWYWx1ZSgpIGNvbnN0OworICAgIFN0cmluZyBzYW5pdGl6ZVZhbHVl
KGNvbnN0IFN0cmluZyYpIGNvbnN0OworCisgICAgLy8gVGhlIHZhbHVlIHdoaWNoIGlzIGRyYXdu
IGJ5IGEgcmVuZGVyZXIuCisgICAgU3RyaW5nIHZpc2libGVWYWx1ZSgpIGNvbnN0OworICAgIFN0
cmluZyBjb252ZXJ0RnJvbVZpc2libGVWYWx1ZShjb25zdCBTdHJpbmcmKSBjb25zdDsKKyAgICAv
LyBSZXR1cm5zIHRydWUgaWYgdGhlIHNwZWNpZmllZCBzdHJpbmcgY2FuIGJlIHNldCBhcyB0aGUg
dmFsdWUgb2YgSFRNTElucHV0RWxlbWVudC4KKyAgICBib29sIGlzQWNjZXB0YWJsZVZhbHVlKGNv
bnN0IFN0cmluZyYpIGNvbnN0OworCisgICAgY29uc3QgU3RyaW5nJiBzdWdnZXN0ZWRWYWx1ZSgp
IGNvbnN0OwogICAgIHZvaWQgc2V0U3VnZ2VzdGVkVmFsdWUoY29uc3QgU3RyaW5nJik7CiAKICAg
ICBkb3VibGUgdmFsdWVBc0RhdGUoKSBjb25zdDsKQEAgLTE0MSwxMSArMTUyLDEwIEBAIHB1Ymxp
YzoKIAogICAgIFN0cmluZyB2YWx1ZVdpdGhEZWZhdWx0KCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0VmFsdWVGcm9tUmVuZGVyZXIoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBzZXRW
YWx1ZUZyb21SZW5kZXJlcihjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHNldEZpbGVMaXN0RnJv
bVJlbmRlcmVyKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CiAKICAgICBib29sIGNhbkhhdmVTZWxl
Y3Rpb24oKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0KCkgeyBIVE1MVGV4dEZvcm1D
b250cm9sRWxlbWVudDo6c2VsZWN0KCk7IH0KIAogICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklz
TmVlZGVkKFJlbmRlclN0eWxlKik7CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJl
bmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKQEAgLTE3OCwxMyArMTg4LDE0IEBA
IHB1YmxpYzoKIAogICAgIGJvb2wgbXVsdGlwbGUoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgYm9v
bCBpc0F1dG9maWxsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzQXV0b2ZpbGxlZDsgfQorICAgIGJv
b2wgaXNBdXRvZmlsbGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0F1dG9maWxsZWQ7IH0KICAgICB2
b2lkIHNldEF1dG9maWxsZWQoYm9vbCA9IHRydWUpOwogCiAgICAgRmlsZUxpc3QqIGZpbGVzKCk7
CiAKICAgICB2b2lkIGFkZFNlYXJjaFJlc3VsdCgpOwogICAgIHZvaWQgb25TZWFyY2goKTsKKyAg
ICBib29sIHNlYXJjaEV2ZW50c1Nob3VsZEJlRGlzcGF0Y2hlZCgpIGNvbnN0OwogCiAjaWYgRU5B
QkxFKERBVEFMSVNUKQogICAgIEhUTUxFbGVtZW50KiBsaXN0KCkgY29uc3Q7CkBAIC0xOTgsMTEg
KzIwOSwxNiBAQCBwdWJsaWM6CiAgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSBwdWJsaWMgc28g
dGhleSBjYW4gYmUgdXNlZCBpbiBJbnB1dFR5cGUgY2xhc3Nlcy4KICAgICAvLyBPdGhlcndpc2Us
IHRoZXkgd291bGQgYmUgcHJpdmF0ZS4KICAgICBDaGVja2VkUmFkaW9CdXR0b25zJiBjaGVja2Vk
UmFkaW9CdXR0b25zKCkgY29uc3Q7Ci0gICAgdm9pZCBoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRF
dmVudChFdmVudCopOwogICAgIHZvaWQgdXBkYXRlQ2hlY2tlZFJhZGlvQnV0dG9ucygpOworI2lm
IEVOQUJMRShXQ1NTKQorICAgIGJvb2wgaXNDb25mb3JtVG9JbnB1dE1hc2soY29uc3QgU3RyaW5n
JikgY29uc3Q7CisjZW5kaWYKIAogICAgIGJvb2wgbGFzdENoYW5nZVdhc1VzZXJFZGl0KCkgY29u
c3Q7Ci0gICAgCisgICAgdm9pZCBjYWNoZVNlbGVjdGlvbihpbnQgc3RhcnQsIGludCBlbmQpOwor
CisgICAgc3RhdGljIGNvbnN0IGludCBtYXhpbXVtTGVuZ3RoOworCiBwcm90ZWN0ZWQ6CiAgICAg
SFRNTElucHV0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBIVE1MRm9y
bUVsZW1lbnQqLCBib29sIGNyZWF0ZWRCeVBhcnNlcik7CiAKQEAgLTIyMywxOCArMjM5LDEyIEBA
IHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xO
YW1lKCkgY29uc3Q7CiAKLSAgICAvLyBpc0NoZWNrZWQgaXMgdXNlZCBieSB0aGUgcmVuZGVyaW5n
IHRyZWUvQ1NTIHdoaWxlIGNoZWNrZWQoKSBpcyB1c2VkIGJ5IEpTIHRvIGRldGVybWluZSBjaGVj
a2VkIHN0YXRlCi0gICAgdmlydHVhbCBib29sIGlzQ2hlY2tlZCgpIGNvbnN0OwotICAgIHZpcnR1
YWwgYm9vbCBpc0luZGV0ZXJtaW5hdGUoKSBjb25zdCB7IHJldHVybiBpbmRldGVybWluYXRlKCk7
IH0KLQogICAgIHZpcnR1YWwgYm9vbCBpc1RleHRGb3JtQ29udHJvbCgpIGNvbnN0IHsgcmV0dXJu
IGlzVGV4dEZpZWxkKCk7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBjYW5UcmlnZ2VySW1wbGljaXRT
dWJtaXNzaW9uKCkgY29uc3QgeyByZXR1cm4gaXNUZXh0RmllbGQoKTsgfQogCiAgICAgdmlydHVh
bCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sVHlwZSgpIGNvbnN0OwogCi0gICAgdmly
dHVhbCBib29sIHNlYXJjaEV2ZW50c1Nob3VsZEJlRGlzcGF0Y2hlZCgpIGNvbnN0OwotCiAgICAg
dmlydHVhbCBib29sIHNhdmVGb3JtQ29udHJvbFN0YXRlKFN0cmluZyYgdmFsdWUpIGNvbnN0Owog
ICAgIHZpcnR1YWwgdm9pZCByZXN0b3JlRm9ybUNvbnRyb2xTdGF0ZShjb25zdCBTdHJpbmcmKTsK
IApAQCAtMjYxLDEyICsyNzEsNiBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBib29sIGlzVVJM
QXR0cmlidXRlKEF0dHJpYnV0ZSopIGNvbnN0OwogCi0gICAgdmlydHVhbCB2b2lkIGNhY2hlU2Vs
ZWN0aW9uKGludCBzdGFydCwgaW50IGVuZCk7Ci0KLSAgICB2aXJ0dWFsIFN0cmluZyB2aXNpYmxl
VmFsdWUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFN0cmluZyBjb252ZXJ0RnJvbVZpc2libGVWYWx1
ZShjb25zdCBTdHJpbmcmKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNBY2NlcHRhYmxlVmFs
dWUoY29uc3QgU3RyaW5nJikgY29uc3Q7Ci0gICAgdmlydHVhbCBTdHJpbmcgc2FuaXRpemVWYWx1
ZShjb25zdCBTdHJpbmcmKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaGFzVW5hY2NlcHRhYmxl
VmFsdWUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0luUmFuZ2UoKSBjb25zdDsKQEAg
LTI4MCw3ICsyODQsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVnaXN0ZXJGb3JBY3RpdmF0aW9u
Q2FsbGJhY2tJZk5lZWRlZCgpOwogICAgIHZvaWQgdW5yZWdpc3RlckZvckFjdGl2YXRpb25DYWxs
YmFja0lmTmVlZGVkKCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNNYXhMZW5ndGgoKSBj
b25zdCB7IHJldHVybiBpc1RleHRUeXBlKCk7IH0KKyAgICBib29sIHN1cHBvcnRzTWF4TGVuZ3Ro
KCkgY29uc3QgeyByZXR1cm4gaXNUZXh0VHlwZSgpOyB9CiAgICAgYm9vbCBpc1RleHRUeXBlKCkg
Y29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNQbGFjZWhvbGRlcigpIGNvbnN0OwpA
QCAtMjg4LDggKzI5Miw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzRW1wdHlTdWdn
ZXN0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHN1Z2dlc3RlZFZhbHVlKCkuaXNFbXB0eSgpOyB9
CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUZvY3VzRXZlbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQg
aGFuZGxlQmx1ckV2ZW50KCk7Ci0gICAgdmlydHVhbCBpbnQgY2FjaGVkU2VsZWN0aW9uU3RhcnQo
KSBjb25zdCB7IHJldHVybiBtX2RhdGEuY2FjaGVkU2VsZWN0aW9uU3RhcnQoKTsgfQotICAgIHZp
cnR1YWwgaW50IGNhY2hlZFNlbGVjdGlvbkVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5jYWNo
ZWRTZWxlY3Rpb25FbmQoKTsgfQorICAgIHZpcnR1YWwgaW50IGNhY2hlZFNlbGVjdGlvblN0YXJ0
KCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRTZWxlY3Rpb25TdGFydDsgfQorICAgIHZpcnR1YWwg
aW50IGNhY2hlZFNlbGVjdGlvbkVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkU2VsZWN0aW9u
RW5kOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNPcHRpb25hbEZvcm1Db250cm9sKCkgY29uc3Qg
eyByZXR1cm4gIWlzUmVxdWlyZWRGb3JtQ29udHJvbCgpOyB9CiAgICAgdmlydHVhbCBib29sIGlz
UmVxdWlyZWRGb3JtQ29udHJvbCgpIGNvbnN0OwpAQCAtMzAzLDEyICszMDcsMjUgQEAgcHJpdmF0
ZToKICNpZiBFTkFCTEUoREFUQUxJU1QpCiAgICAgSFRNTERhdGFMaXN0RWxlbWVudCogZGF0YUxp
c3QoKSBjb25zdDsKICNlbmRpZgotCisgICAgdm9pZCBub3RpZnlGb3JtU3RhdGVDaGFuZ2VkKCk7
CisgICAgdm9pZCBwYXJzZU1heExlbmd0aEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKKyAgICB2b2lk
IHVwZGF0ZVZhbHVlSWZOZWVkZWQoKTsKICNpZiBFTkFCTEUoV0NTUykKLSAgICB2aXJ0dWFsIElu
cHV0RWxlbWVudERhdGEgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQorICAgIGJvb2wg
aXNDb25mb3JtVG9JbnB1dE1hc2soVUNoYXIsIHVuc2lnbmVkKSBjb25zdDsKKyAgICBTdHJpbmcg
dmFsaWRhdGVJbnB1dE1hc2soU3RyaW5nJik7CiAjZW5kaWYKIAotICAgIElucHV0RWxlbWVudERh
dGEgbV9kYXRhOworICAgIEF0b21pY1N0cmluZyBtX25hbWU7CisgICAgU3RyaW5nIG1fdmFsdWU7
CisgICAgU3RyaW5nIG1fc3VnZ2VzdGVkVmFsdWU7CisgICAgaW50IG1fc2l6ZTsKKyAgICBpbnQg
bV9tYXhMZW5ndGg7CisgICAgaW50IG1fY2FjaGVkU2VsZWN0aW9uU3RhcnQ7CisgICAgaW50IG1f
Y2FjaGVkU2VsZWN0aW9uRW5kOworI2lmIEVOQUJMRShXQ1NTKQorICAgIFN0cmluZyBtX2lucHV0
Rm9ybWF0TWFzazsKKyAgICB1bnNpZ25lZCBtX21heElucHV0Q2hhcnNBbGxvd2VkOworI2VuZGlm
CiAgICAgc2hvcnQgbV9tYXhSZXN1bHRzOwogICAgIGJvb2wgbV9pc0NoZWNrZWQgOiAxOwogICAg
IGJvb2wgbV9yZWZsZWN0c0NoZWNrZWRBdHRyaWJ1dGUgOiAxOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKaW5kZXggZTA0NjNmZmRlNzkxMjVmYmEyYjE0NmM0
Njg0OGM3NGJkN2UwMTcxZS4uYTI5OWIxOGM2MWUxOWY0MTJkZWUwMzljZGY5MDljMWZhMWZjNTIy
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCkBAIC0z
OSw3ICszOSw2IEBACiAjaW5jbHVkZSAiRm9ybURhdGFMaXN0LmgiCiAjaW5jbHVkZSAiRnJhbWUu
aCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJJbnB1dEVsZW1lbnQuaCIKICNp
bmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJSZW5k
ZXJUZXh0Q29udHJvbE11bHRpTGluZS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9JbnB1dFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCmluZGV4
IGM4ODJjZDVjNGI4ZWMzMWMxMmZmZTYxNzliMjhlNTI0ZWUxMTMwYTQuLjZiMzU5ZWY4OTg0MGQ1
MTcwZGE3NTQ0MTI5YjI0YWVjN2FlNmNkZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAK
QEAgLTMyNiw5ICszMjYsOCBAQCB2b2lkIElucHV0VHlwZTo6aGFuZGxlS2V5dXBFdmVudChLZXli
b2FyZEV2ZW50KikKIHsKIH0KIAotdm9pZCBJbnB1dFR5cGU6OmhhbmRsZUJlZm9yZVRleHRJbnNl
cnRlZEV2ZW50KEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KiBldmVudCkKK3ZvaWQgSW5wdXRUeXBl
OjpoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudChCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCop
CiB7Ci0gICAgZWxlbWVudCgpLT5oYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudChldmVudCk7
CiB9CiAKIHZvaWQgSW5wdXRUeXBlOjpoYW5kbGVXaGVlbEV2ZW50KFdoZWVsRXZlbnQqKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCmluZGV4IGZmZWEyZjRlMGIw
Y2FhZDQ0YjgzNWE2ZDIwYWI1OTljNmQ3YTRjOTQuLjY1NjMwNDk2MWE0MGY5NWNjNjFkYTZjMDAy
YWJmNWNlZDIyMTM1MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxk
SW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlw
ZS5jcHAKQEAgLTMyLDExICszMiwxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IlRleHRGaWVsZElucHV0VHlwZS5oIgogCisjaW5jbHVkZSAiQmVmb3JlVGV4dEluc2VydGVkRXZl
bnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIK
ICNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lLmgiCiAjaW5jbHVkZSAiVGV4dEV2ZW50LmgiCisjaW5jbHVkZSAiVGV4dEl0ZXJh
dG9yLmgiCiAjaW5jbHVkZSAiV2hlZWxFdmVudC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCkBAIC0xMTksOSArMTIxLDcyIEBAIGJvb2wgVGV4dEZpZWxkSW5wdXRUeXBlOjpz
aG91bGRVc2VJbnB1dE1ldGhvZCgpIGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRp
YyBTdHJpbmcgcmVwbGFjZUVPTEFuZExpbWl0TGVuZ3RoKGNvbnN0IFN0cmluZyYgcHJvcG9zZWRW
YWx1ZSwgaW50IG1heExlbmd0aCkKK3sKKyAgICBTdHJpbmcgc3RyaW5nID0gcHJvcG9zZWRWYWx1
ZTsKKyAgICBzdHJpbmcucmVwbGFjZSgiXHJcbiIsICIgIik7CisgICAgc3RyaW5nLnJlcGxhY2Uo
J1xyJywgJyAnKTsKKyAgICBzdHJpbmcucmVwbGFjZSgnXG4nLCAnICcpOworCisgICAgdW5zaWdu
ZWQgbmV3TGVuZ3RoID0gbnVtQ2hhcmFjdGVyc0luR3JhcGhlbWVDbHVzdGVycyhzdHJpbmcsIG1h
eExlbmd0aCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5ld0xlbmd0aDsgKytpKSB7
CisgICAgICAgIGNvbnN0IFVDaGFyIGN1cnJlbnQgPSBzdHJpbmdbaV07CisgICAgICAgIGlmIChj
dXJyZW50IDwgJyAnICYmIGN1cnJlbnQgIT0gJ1x0JykgeworICAgICAgICAgICAgbmV3TGVuZ3Ro
ID0gaTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBz
dHJpbmcubGVmdChuZXdMZW5ndGgpOworfQorCiBTdHJpbmcgVGV4dEZpZWxkSW5wdXRUeXBlOjpz
YW5pdGl6ZVZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcG9zZWRWYWx1ZSkKIHsKLSAgICByZXR1cm4g
SW5wdXRFbGVtZW50OjpzYW5pdGl6ZVZhbHVlRm9yVGV4dEZpZWxkKGVsZW1lbnQoKSwgcHJvcG9z
ZWRWYWx1ZSk7CisjaWYgRU5BQkxFKFdDU1MpCisgICAgaWYgKCFlbGVtZW50KCktPmlzQ29uZm9y
bVRvSW5wdXRNYXNrKHByb3Bvc2VkVmFsdWUpKSB7CisgICAgICAgIGlmIChpc0NvbmZvcm1Ub0lu
cHV0TWFzayhlbGVtZW50KCktPnZhbHVlKCkpKQorICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQt
PnZhbHVlKCk7CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICB9CisjZW5kaWYKKyAgICBy
ZXR1cm4gcmVwbGFjZUVPTEFuZExpbWl0TGVuZ3RoKHByb3Bvc2VkVmFsdWUsIEhUTUxJbnB1dEVs
ZW1lbnQ6Om1heGltdW1MZW5ndGgpOworfQorCit2b2lkIFRleHRGaWVsZElucHV0VHlwZTo6aGFu
ZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoQmVmb3JlVGV4dEluc2VydGVkRXZlbnQqIGV2ZW50
KQoreworICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSB0ZXh0IHRvIGJlIGluc2VydGVkIHdpbGwg
bm90IHZpb2xhdGUgdGhlIG1heExlbmd0aC4KKworICAgIC8vIFdlIHVzZSBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OnRleHQoKSBpbnN0ZWFkIG9mIElucHV0RWxlbWVudDo6dmFsdWUoKQor
ICAgIC8vIGJlY2F1c2UgdGhleSBjYW4gYmUgbWlzbWF0Y2hlZCBieSBzYW5pdGl6ZVZhbHVlKCkg
aW4KKyAgICAvLyBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnN1YnRyZWVIYXNDaGFuZ2Vk
KCkgaW4gc29tZSBjYXNlcy4KKyAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBudW1HcmFwaGVtZUNs
dXN0ZXJzKHRvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKGVsZW1lbnQoKS0+cmVuZGVyZXIo
KSktPnRleHQoKSk7CisKKyAgICAvLyBzZWxlY3Rpb25MZW5ndGggcmVwcmVzZW50cyB0aGUgc2Vs
ZWN0aW9uIGxlbmd0aCBvZiB0aGlzIHRleHQgZmllbGQgdG8gYmUKKyAgICAvLyByZW1vdmVkIGJ5
IHRoaXMgaW5zZXJ0aW9uLgorICAgIC8vIElmIHRoZSB0ZXh0IGZpZWxkIGhhcyBubyBmb2N1cywg
d2UgZG9uJ3QgbmVlZCB0byB0YWtlIGFjY291bnQgb2YgdGhlCisgICAgLy8gc2VsZWN0aW9uIGxl
bmd0aC4gVGhlIHNlbGVjdGlvbiBpcyB0aGUgc291cmNlIG9mIHRleHQgZHJhZy1hbmQtZHJvcCBp
bgorICAgIC8vIHRoYXQgY2FzZSwgYW5kIG5vdGhpbmcgaW4gdGhlIHRleHQgZmllbGQgd2lsbCBi
ZSByZW1vdmVkLgorICAgIHVuc2lnbmVkIHNlbGVjdGlvbkxlbmd0aCA9IGVsZW1lbnQoKS0+Zm9j
dXNlZCgpID8gbnVtR3JhcGhlbWVDbHVzdGVycyhwbGFpblRleHQoZWxlbWVudCgpLT5kb2N1bWVu
dCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2Uo
KS5nZXQoKSkpIDogMDsKKyAgICBBU1NFUlQob2xkTGVuZ3RoID49IHNlbGVjdGlvbkxlbmd0aCk7
CisKKyAgICAvLyBTZWxlY3RlZCBjaGFyYWN0ZXJzIHdpbGwgYmUgcmVtb3ZlZCBieSB0aGUgbmV4
dCB0ZXh0IGV2ZW50LgorICAgIHVuc2lnbmVkIGJhc2VMZW5ndGggPSBvbGRMZW5ndGggLSBzZWxl
Y3Rpb25MZW5ndGg7CisgICAgdW5zaWduZWQgbWF4TGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGlzVGV4dFR5cGUoKSA/IGVsZW1lbnQoKS0+bWF4TGVuZ3RoKCkgOiBIVE1MSW5wdXRFbGVt
ZW50OjptYXhpbXVtTGVuZ3RoKTsgLy8gbWF4TGVuZ3RoIGNhbiBuZXZlciBiZSBuZWdhdGl2ZS4K
KyAgICB1bnNpZ25lZCBhcHBlbmRhYmxlTGVuZ3RoID0gbWF4TGVuZ3RoID4gYmFzZUxlbmd0aCA/
IG1heExlbmd0aCAtIGJhc2VMZW5ndGggOiAwOworCisgICAgLy8gVHJ1bmNhdGUgdGhlIGluc2Vy
dGVkIHRleHQgdG8gYXZvaWQgdmlvbGF0aW5nIHRoZSBtYXhMZW5ndGggYW5kIG90aGVyIGNvbnN0
cmFpbnRzLgorI2lmIEVOQUJMRShXQ1NTKQorICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBlbGVt
ZW50KCktPmRvY3VtZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpOworICAgIFN0cmluZyBjYW5kaWRhdGVTdHJpbmcgPSB0b1JlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZShlbGVtZW50KCktPnJlbmRlcmVyKCkpLT50ZXh0KCk7CisgICAg
aWYgKHNlbGVjdGlvbkxlbmd0aCkKKyAgICAgICAgY2FuZGlkYXRlU3RyaW5nLnJlcGxhY2UocmFu
Z2UtPnN0YXJ0T2Zmc2V0KCksIHJhbmdlLT5lbmRPZmZzZXQoKSwgZXZlbnQtPnRleHQoKSk7Cisg
ICAgZWxzZQorICAgICAgICBjYW5kaWRhdGVTdHJpbmcuaW5zZXJ0KGV2ZW50LT50ZXh0KCksIHJh
bmdlLT5zdGFydE9mZnNldCgpKTsKKyAgICBpZiAoIWVsZW1lbnQoKS0+aXNDb25mb3JtVG9JbnB1
dE1hc2soY2FuZGlkYXRlU3RyaW5nKSkgeworICAgICAgICBldmVudC0+c2V0VGV4dCgiIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBldmVudC0+c2V0VGV4dChyZXBsYWNl
RU9MQW5kTGltaXRMZW5ndGgoZXZlbnQtPnRleHQoKSwgYXBwZW5kYWJsZUxlbmd0aCkpOwogfQog
CiBib29sIFRleHRGaWVsZElucHV0VHlwZTo6c2hvdWxkUmVzcGVjdExpc3RBdHRyaWJ1dGUoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuaCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmgKaW5kZXggODZhZDBlZjFhY2Q0
YmE2YjE5ZjExYmE4NmNhYTRhMDg3MTg0ZTE4Yy4uZjU4NWFiYjE3NGI1ODcwODdkZjlhNWU5MDRm
NGYzNDYxNzJhMTlmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJ
bnB1dFR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5o
CkBAIC00OCwxMSArNDgsMTIgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJv
b2wgaXNUZXh0RmllbGQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgdmFsdWVNaXNzaW5nKGNv
bnN0IFN0cmluZyYpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVCZWZvcmVUZXh0SW5z
ZXJ0ZWRFdmVudChCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCopOwogICAgIHZpcnR1YWwgdm9pZCBm
b3J3YXJkRXZlbnQoRXZlbnQqKTsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU3VibWl0SW1wbGlj
aXRseShFdmVudCopOwogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihS
ZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHNob3Vs
ZFVzZUlucHV0TWV0aG9kKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBTdHJpbmcgc2FuaXRpemVWYWx1
ZShjb25zdCBTdHJpbmcmIHByb3Bvc2VkVmFsdWUpOworICAgIHZpcnR1YWwgU3RyaW5nIHNhbml0
aXplVmFsdWUoY29uc3QgU3RyaW5nJik7CiAgICAgdmlydHVhbCBib29sIHNob3VsZFJlc3BlY3RM
aXN0QXR0cmlidXRlKCk7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCmluZGV4IDJhZGI4MmEyZTU0MWEx
OWE1NDhjYzM5MDI3YzBiYzgzZjQ5NzE5MTAuLjhkYTk0YmE1MzI3ODkyMGU5M2E3YzMwNDIxM2Qx
NmM1YjcxNWY4ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVk
ZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUg
IkhpdFRlc3RSZXN1bHQuaCIKLSNpbmNsdWRlICJJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJM
b2NhbGl6ZWRTdHJpbmdzLmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtS2V5Ym9hcmRFdmVudC5oIgpAQCAtNzUsNiArNzQsOCBAQCBSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShOb2RlKiBub2RlLCBib29s
IHBsYWNlaAogICAgICwgbV9zZWFyY2hFdmVudFRpbWVyKHRoaXMsICZSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OnNlYXJjaEV2ZW50VGltZXJGaXJlZCkKICAgICAsIG1fc2VhcmNoUG9wdXAo
MCkKIHsKKyAgICBBU1NFUlQobm9kZS0+aXNIVE1MRWxlbWVudCgpKTsKKyAgICBBU1NFUlQobm9k
ZS0+dG9JbnB1dEVsZW1lbnQoKSk7CiB9CiAKIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6
flJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZSgpCkBAIC0xMDYsOCArMTA3LDcgQEAgUmVuZGVy
U3R5bGUqIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6dGV4dEJhc2VTdHlsZSgpIGNvbnN0
CiAKIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjphZGRTZWFyY2hSZXN1bHQoKQog
ewotICAgIEFTU0VSVChub2RlKCktPmlzSFRNTEVsZW1lbnQoKSk7Ci0gICAgSFRNTElucHV0RWxl
bWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obm9kZSgpKTsKKyAg
ICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IGlucHV0RWxlbWVudCgpOwogICAgIGlmIChpbnB1
dC0+bWF4UmVzdWx0cygpIDw9IDApCiAgICAgICAgIHJldHVybjsKIApAQCAtMTM4LDEzICsxMzgs
MTEgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmFkZFNlYXJjaFJlc3VsdCgp
CiAKIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzdG9wU2VhcmNoRXZlbnRUaW1l
cigpCiB7Ci0gICAgQVNTRVJUKG5vZGUoKS0+aXNIVE1MRWxlbWVudCgpKTsKICAgICBtX3NlYXJj
aEV2ZW50VGltZXIuc3RvcCgpOwogfQogCiB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6c2hvd1BvcHVwKCkKIHsKLSAgICBBU1NFUlQobm9kZSgpLT5pc0hUTUxFbGVtZW50KCkpOwog
ICAgIGlmIChtX3NlYXJjaFBvcHVwSXNWaXNpYmxlKQogICAgICAgICByZXR1cm47CiAKQEAgLTE2
MCw3ICsxNTgsNyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2hvd1BvcHVw
KCkKICAgICBtX3NlYXJjaFBvcHVwLT5sb2FkUmVjZW50U2VhcmNoZXMobmFtZSwgbV9yZWNlbnRT
ZWFyY2hlcyk7CiAKICAgICAvLyBUcmltIHRoZSByZWNlbnQgc2VhcmNoZXMgbGlzdCBpZiB0aGUg
bWF4aW11bSBzaXplIGhhcyBjaGFuZ2VkIHNpbmNlIHdlIGxhc3Qgc2F2ZWQuCi0gICAgSFRNTElu
cHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obm9kZSgp
KTsKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IGlucHV0RWxlbWVudCgpOwogICAgIGlm
IChzdGF0aWNfY2FzdDxpbnQ+KG1fcmVjZW50U2VhcmNoZXMuc2l6ZSgpKSA+IGlucHV0LT5tYXhS
ZXN1bHRzKCkpIHsKICAgICAgICAgZG8gewogICAgICAgICAgICAgbV9yZWNlbnRTZWFyY2hlcy5y
ZW1vdmVMYXN0KCk7CkBAIC0xNzQsNyArMTcyLDYgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6OnNob3dQb3B1cCgpCiAKIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
OjpoaWRlUG9wdXAoKQogewotICAgIEFTU0VSVChub2RlKCktPmlzSFRNTEVsZW1lbnQoKSk7CiAg
ICAgaWYgKG1fc2VhcmNoUG9wdXApCiAgICAgICAgIG1fc2VhcmNoUG9wdXAtPnBvcHVwTWVudSgp
LT5oaWRlKCk7CiB9CkBAIC0xODgsMTggKzE4NSwxNiBAQCB2b2lkIFJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZTo6c3VidHJlZUhhc0NoYW5nZWQoKQogICAgIGJvb2wgd2FzQ2hhbmdlZCA9IGVs
ZW1lbnQtPndhc0NoYW5nZWRTaW5jZUxhc3RGb3JtQ29udHJvbENoYW5nZUV2ZW50KCk7CiAgICAg
ZWxlbWVudC0+c2V0Q2hhbmdlZFNpbmNlTGFzdEZvcm1Db250cm9sQ2hhbmdlRXZlbnQodHJ1ZSk7
CiAKLSAgICBJbnB1dEVsZW1lbnQqIGlucHV0ID0gaW5wdXRFbGVtZW50KCk7CisgICAgSFRNTElu
cHV0RWxlbWVudCogaW5wdXQgPSBpbnB1dEVsZW1lbnQoKTsKICAgICAvLyBXZSBkb24ndCBuZWVk
IHRvIGNhbGwgc2FuaXRpemVVc2VySW5wdXRWYWx1ZSgpIGZ1bmN0aW9uIGhlcmUgYmVjYXVzZQot
ICAgIC8vIElucHV0RWxlbWVudDo6aGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoKSBoYXMg
YWxyZWFkeSBjYWxsZWQKKyAgICAvLyBIVE1MSW5wdXRFbGVtZW50OjpoYW5kbGVCZWZvcmVUZXh0
SW5zZXJ0ZWRFdmVudCgpIGhhcyBhbHJlYWR5IGNhbGxlZAogICAgIC8vIHNhbml0aXplVXNlcklu
cHV0VmFsdWUoKS4KICAgICAvLyBzYW5pdGl6ZVZhbHVlKCkgaXMgbmVlZGVkIGJlY2F1c2UgSU1F
IGlucHV0IGRvZXNuJ3QgZGlzcGF0Y2ggQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuCiAgICAgU3Ry
aW5nIHZhbHVlID0gdGV4dCgpOwogICAgIGlmIChpbnB1dC0+aXNBY2NlcHRhYmxlVmFsdWUodmFs
dWUpKQogICAgICAgICBpbnB1dC0+c2V0VmFsdWVGcm9tUmVuZGVyZXIoaW5wdXQtPnNhbml0aXpl
VmFsdWUoaW5wdXQtPmNvbnZlcnRGcm9tVmlzaWJsZVZhbHVlKHZhbHVlKSkpOwotICAgIGlmIChu
b2RlKCktPmlzSFRNTEVsZW1lbnQoKSkgewotICAgICAgICAvLyBSZWNhbGMgZm9yIDppbnZhbGlk
IGFuZCBoYXNVbmFjY2VwdGFibGVWYWx1ZSgpIGNoYW5nZS4KLSAgICAgICAgc3RhdGljX2Nhc3Q8
SFRNTElucHV0RWxlbWVudCo+KGlucHV0KS0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOwotICAgIH0K
KyAgICAvLyBSZWNhbGMgZm9yIDppbnZhbGlkIGFuZCBoYXNVbmFjY2VwdGFibGVWYWx1ZSgpIGNo
YW5nZS4KKyAgICBpbnB1dC0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOwogCiAgICAgaWYgKG1fY2Fu
Y2VsQnV0dG9uKQogICAgICAgICB1cGRhdGVDYW5jZWxCdXR0b25WaXNpYmlsaXR5KCk7CkBAIC03
MTAsNyArNzA1LDcgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnVwZGF0ZUZy
b21FbGVtZW50KCkKICAgICAgICAgICAgIC8vIEZvciBIVE1MSW5wdXRFbGVtZW50LCB1cGRhdGUg
dGhlIHJlbmRlcmVyIHZhbHVlIGlmIHRoZSBmb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVy
KCkKICAgICAgICAgICAgIC8vIGZsYWcgaXMgZmFsc2UuIEl0IHByb3RlY3RzIGFuIHVuYWNjZXB0
YWJsZSByZW5kZXJlciB2YWx1ZSBmcm9tCiAgICAgICAgICAgICAvLyBiZWluZyBvdmVyd3JpdHRl
biB3aXRoIHRoZSBET00gdmFsdWUuCi0gICAgICAgICAgICBpZiAoIXN0YXRpY19jYXN0PEhUTUxJ
bnB1dEVsZW1lbnQqPihub2RlKCkpLT5mb3JtQ29udHJvbFZhbHVlTWF0Y2hlc1JlbmRlcmVyKCkp
CisgICAgICAgICAgICBpZiAoIWlucHV0RWxlbWVudCgpLT5mb3JtQ29udHJvbFZhbHVlTWF0Y2hl
c1JlbmRlcmVyKCkpCiAgICAgICAgICAgICAgICAgc2V0SW5uZXJUZXh0VmFsdWUoaW5wdXRFbGVt
ZW50KCktPnZpc2libGVWYWx1ZSgpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTc1NSw4ICs3NTAs
NiBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6
OmNyZWF0ZUlubmVyVGV4dFN0eWxlKGNvbnN0CiAKIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y3JlYXRlSW5uZXJCbG9ja1N0eWxlKGNvbnN0IFJl
bmRlclN0eWxlKiBzdGFydFN0eWxlKSBjb25zdAogewotICAgIEFTU0VSVChub2RlKCktPmlzSFRN
TEVsZW1lbnQoKSk7Ci0KICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGlubmVyQmxvY2tTdHlsZSA9
IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKICAgICBpbm5lckJsb2NrU3R5bGUtPmluaGVyaXRGcm9t
KHN0YXJ0U3R5bGUpOwogCkBAIC03NzEsOCArNzY0LDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHls
ZT4gUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjcmVhdGVJbm5lckJsb2NrU3R5bGUoY29u
c3QKIAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
OjpjcmVhdGVSZXN1bHRzQnV0dG9uU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUp
IGNvbnN0CiB7Ci0gICAgQVNTRVJUKG5vZGUoKS0+aXNIVE1MRWxlbWVudCgpKTsKLSAgICBIVE1M
SW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihub2Rl
KCkpOworICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gaW5wdXRFbGVtZW50KCk7CiAKICAg
ICBSZWZQdHI8UmVuZGVyU3R5bGU+IHJlc3VsdHNCbG9ja1N0eWxlOwogICAgIGlmIChpbnB1dC0+
bWF4UmVzdWx0cygpIDwgMCkKQEAgLTc5Myw3ICs3ODUsNiBAQCBQYXNzUmVmUHRyPFJlbmRlclN0
eWxlPiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZVJlc3VsdHNCdXR0b25TdHls
ZShjbwogCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmU6OmNyZWF0ZUNhbmNlbEJ1dHRvblN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBzdGFydFN0eWxl
KSBjb25zdAogewotICAgIEFTU0VSVChub2RlKCktPmlzSFRNTEVsZW1lbnQoKSk7CiAgICAgUmVm
UHRyPFJlbmRlclN0eWxlPiBjYW5jZWxCbG9ja1N0eWxlOwogICAgIAogICAgIGlmIChSZWZQdHI8
UmVuZGVyU3R5bGU+IHBzZXVkb1N0eWxlID0gZ2V0Q2FjaGVkUHNldWRvU3R5bGUoU0VBUkNIX0NB
TkNFTF9CVVRUT04pKQpAQCAtODExLDcgKzgwMiw2IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+
IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y3JlYXRlQ2FuY2VsQnV0dG9uU3R5bGUoY29u
CiAKIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6
Y3JlYXRlSW5uZXJTcGluQnV0dG9uU3R5bGUoKSBjb25zdAogewotICAgIEFTU0VSVChub2RlKCkt
PmlzSFRNTEVsZW1lbnQoKSk7CiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBidXR0b25TdHlsZSA9
IGdldENhY2hlZFBzZXVkb1N0eWxlKElOTkVSX1NQSU5fQlVUVE9OKTsKICAgICBpZiAoIWJ1dHRv
blN0eWxlKQogICAgICAgICBidXR0b25TdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKQEAg
LTgyMSw3ICs4MTEsNiBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OmNyZWF0ZUlubmVyU3BpbkJ1dHRvblN0eWxlKAogCiBQYXNzUmVmUHRyPFJl
bmRlclN0eWxlPiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZU91dGVyU3BpbkJ1
dHRvblN0eWxlKCkgY29uc3QKIHsKLSAgICBBU1NFUlQobm9kZSgpLT5pc0hUTUxFbGVtZW50KCkp
OwogICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gYnV0dG9uU3R5bGUgPSBnZXRDYWNoZWRQc2V1ZG9T
dHlsZShPVVRFUl9TUElOX0JVVFRPTik7CiAgICAgaWYgKCFidXR0b25TdHlsZSkKICAgICAgICAg
YnV0dG9uU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CkBAIC04MzIsNyArODIxLDYgQEAg
UGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjcmVh
dGVPdXRlclNwaW5CdXR0b25TdHlsZSgKICNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQogUGFzc1Jl
ZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjcmVhdGVTcGVl
Y2hCdXR0b25TdHlsZSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKG5vZGUoKS0+aXNIVE1MRWxlbWVu
dCgpKTsKICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGJ1dHRvblN0eWxlID0gZ2V0Q2FjaGVkUHNl
dWRvU3R5bGUoSU5QVVRfU1BFRUNIX0JVVFRPTik7CiAgICAgaWYgKCFidXR0b25TdHlsZSkKICAg
ICAgICAgYnV0dG9uU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CkBAIC04NTgsOSArODQ2
LDcgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnVwZGF0ZUNhbmNlbEJ1dHRv
blZpc2liaWxpdHkoKSBjb25zdAogCiBFVmlzaWJpbGl0eSBSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmU6OnZpc2liaWxpdHlGb3JDYW5jZWxCdXR0b24oKSBjb25zdAogewotICAgIEFTU0VSVChu
b2RlKCktPmlzSFRNTEVsZW1lbnQoKSk7Ci0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBz
dGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4obm9kZSgpKTsKLSAgICByZXR1cm4gaW5wdXQt
PnZhbHVlKCkuaXNFbXB0eSgpID8gSElEREVOIDogVklTSUJMRTsKKyAgICByZXR1cm4gaW5wdXRF
bGVtZW50KCktPnZhbHVlKCkuaXNFbXB0eSgpID8gSElEREVOIDogVklTSUJMRTsKIH0KIAogY29u
c3QgQXRvbWljU3RyaW5nJiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmF1dG9zYXZlTmFt
ZSgpIGNvbnN0CkBAIC04NzAsMTMgKzg1NiwxMiBAQCBjb25zdCBBdG9taWNTdHJpbmcmIFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZTo6YXV0b3NhdmVOYW1lKCkgY29uc3QKIAogdm9pZCBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnN0YXJ0U2VhcmNoRXZlbnRUaW1lcigpCiB7Ci0gICAg
QVNTRVJUKG5vZGUoKS0+aXNIVE1MRWxlbWVudCgpKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSB0
ZXh0KCkubGVuZ3RoKCk7CiAKICAgICAvLyBJZiB0aGVyZSdzIG5vIHRleHQsIGZpcmUgdGhlIGV2
ZW50IHJpZ2h0IGF3YXkuCiAgICAgaWYgKCFsZW5ndGgpIHsKICAgICAgICAgc3RvcFNlYXJjaEV2
ZW50VGltZXIoKTsKLSAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5vZGUo
KSktPm9uU2VhcmNoKCk7CisgICAgICAgIGlucHV0RWxlbWVudCgpLT5vblNlYXJjaCgpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC04ODcsMTYgKzg3MiwxNCBAQCB2b2lkIFJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZTo6c3RhcnRTZWFyY2hFdmVudFRpbWVyKCkKIAogdm9pZCBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNlYXJjaEV2ZW50VGltZXJGaXJlZChUaW1lcjxSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU+KikKIHsKLSAgICBBU1NFUlQobm9kZSgpLT5pc0hUTUxF
bGVtZW50KCkpOwotICAgIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihub2RlKCkpLT5v
blNlYXJjaCgpOworICAgIGlucHV0RWxlbWVudCgpLT5vblNlYXJjaCgpOwogfQogCiAvLyBQb3B1
cE1lbnVDbGllbnQgbWV0aG9kcwogdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnZh
bHVlQ2hhbmdlZCh1bnNpZ25lZCBsaXN0SW5kZXgsIGJvb2wgZmlyZUV2ZW50cykKIHsKLSAgICBB
U1NFUlQobm9kZSgpLT5pc0hUTUxFbGVtZW50KCkpOwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDxp
bnQ+KGxpc3RJbmRleCkgPCBsaXN0U2l6ZSgpKTsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1
dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihub2RlKCkpOworICAgIEhUTUxJbnB1
dEVsZW1lbnQqIGlucHV0ID0gaW5wdXRFbGVtZW50KCk7CiAgICAgaWYgKHN0YXRpY19jYXN0PGlu
dD4obGlzdEluZGV4KSA9PSAobGlzdFNpemUoKSAtIDEpKSB7CiAgICAgICAgIGlmIChmaXJlRXZl
bnRzKSB7CiAgICAgICAgICAgICBtX3JlY2VudFNlYXJjaGVzLmNsZWFyKCk7CkBAIC0xMDMwLDgg
KzEwMTMsNyBAQCBib29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aXRlbUlzU2VsZWN0
ZWQodW5zaWduZWQpIGNvbnN0CiAKIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpz
ZXRUZXh0RnJvbUl0ZW0odW5zaWduZWQgbGlzdEluZGV4KQogewotICAgIEFTU0VSVChub2RlKCkt
PmlzSFRNTEVsZW1lbnQoKSk7Ci0gICAgc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5v
ZGUoKSktPnNldFZhbHVlKGl0ZW1UZXh0KGxpc3RJbmRleCkpOworICAgIGlucHV0RWxlbWVudCgp
LT5zZXRWYWx1ZShpdGVtVGV4dChsaXN0SW5kZXgpKTsKIH0KIAogRm9udFNlbGVjdG9yKiBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmZvbnRTZWxlY3RvcigpIGNvbnN0CkBAIC0xMTE4LDcg
KzExMDAsNyBAQCBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lOjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZQogICAgIHJldHVybiB3aWRnZXQucmVs
ZWFzZSgpOwogfQogCi1JbnB1dEVsZW1lbnQqIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6
aW5wdXRFbGVtZW50KCkgY29uc3QKK0hUTUxJbnB1dEVsZW1lbnQqIFJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZTo6aW5wdXRFbGVtZW50KCkgY29uc3QKIHsKICAgICByZXR1cm4gbm9kZSgpLT50
b0lucHV0RWxlbWVudCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCmluZGV4IDE4ZTVmYzhiYzQ5MDNiM2MyYjhj
NWEyZjUzN2NkODhjNjc4YTZlYmEuLmY0M2FhMWIzYTlhZDJiMjA1ODBhMWFmOTQwZTEyY2U0ZGYy
M2E4YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lLmgKQEAgLTMwLDcgKzMwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBJbnB1dEVsZW1lbnQ7CitjbGFzcyBIVE1MSW5wdXRFbGVtZW50OwogY2xh
c3MgSW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQ7CiBjbGFzcyBTZWFyY2hGaWVsZENhbmNl
bEJ1dHRvbkVsZW1lbnQ7CiBjbGFzcyBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50OwpA
QCAtMTQyLDcgKzE0Miw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBIb3N0V2luZG93KiBob3N0
V2luZG93KCkgY29uc3Q7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRl
U2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhKiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbGJh
ckNvbnRyb2xTaXplKTsKIAotICAgIElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50KCkgY29uc3Q7
CisgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50KCkgY29uc3Q7CiAKICAgICB2aXJ0
dWFsIGludCB0ZXh0QmxvY2tJbnNldExlZnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCB0ZXh0
QmxvY2tJbnNldFJpZ2h0KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lLmNwcAppbmRleCBjMmMwOWVkYTNmZDI1YWEyZjNjNTJiODYwYTBlYjJiMDY2Njk1YTFlLi40
Njk0MDU0NWFlNTQwNTExNjUzYTQzMDNiNjc2N2Y0ODBjODc5NzNmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKQEAgLTc1MSw3ICs3NTEsNyBAQCBib29sIFJlbmRl
clRoZW1lOjppc0NoZWNrZWQoY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAogICAgIGlmICgh
by0+bm9kZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBJbnB1dEVsZW1lbnQqIGlu
cHV0RWxlbWVudCA9IG8tPm5vZGUoKS0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICBIVE1MSW5wdXRF
bGVtZW50KiBpbnB1dEVsZW1lbnQgPSBvLT5ub2RlKCktPnRvSW5wdXRFbGVtZW50KCk7CiAgICAg
aWYgKCFpbnB1dEVsZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNzYzLDcgKzc2
Myw3IEBAIGJvb2wgUmVuZGVyVGhlbWU6OmlzSW5kZXRlcm1pbmF0ZShjb25zdCBSZW5kZXJPYmpl
Y3QqIG8pIGNvbnN0CiAgICAgaWYgKCFvLT5ub2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gby0+bm9kZSgpLT50b0lucHV0RWxl
bWVudCgpOworICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IG8tPm5vZGUoKS0+
dG9JbnB1dEVsZW1lbnQoKTsKICAgICBpZiAoIWlucHV0RWxlbWVudCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCkBAIC05NjUsNyArOTY1LDcgQEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0UHJv
Z3Jlc3NCYXJTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW4KIH0K
ICNlbmRpZgogCi1ib29sIFJlbmRlclRoZW1lOjpzaG91bGRIYXZlU3BpbkJ1dHRvbihJbnB1dEVs
ZW1lbnQqIGlucHV0RWxlbWVudCkgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWU6OnNob3VsZEhhdmVT
cGluQnV0dG9uKEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gaW5wdXRFbGVtZW50LT5pc1N0ZXBwYWJsZSgpICYmICFpbnB1dEVsZW1lbnQtPmlzUmFu
Z2VDb250cm9sKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCmluZGV4
IGUxM2UxYmEwNDFlOTViMGRjMDBiMzE5NWY5NzExM2IwM2QyM2I5YzUuLjE1N2JhM2E1ZDJkOGFl
NjhmYTk0MGI3MjhhZWY4OGNiNWFlMDNiZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZS5oCkBAIC0zNiw2ICszNiw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IEVsZW1lbnQ7CitjbGFzcyBIVE1MSW5wdXRFbGVtZW50OwogY2xhc3MgUG9wdXBNZW51OwogY2xh
c3MgUmVuZGVyTWVudUxpc3Q7CiAjaWYgRU5BQkxFKE1FVEVSX1RBRykKQEAgLTIwMSw3ICsyMDIs
NyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU2hvd1Bs
YWNlaG9sZGVyV2hlbkZvY3VzZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRIYXZlU3BpbkJ1dHRvbihJbnB1dEVsZW1lbnQqKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGJvb2wgc2hvdWxkSGF2ZVNwaW5CdXR0b24oSFRNTElucHV0RWxlbWVudCopIGNvbnN0
OwogCiBwcm90ZWN0ZWQ6CiAgICAgLy8gVGhlIHBsYXRmb3JtIHNlbGVjdGlvbiBjb2xvci4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMmZjMTA1OTAyMjEyYTMxNzZlMjVkNzg0YTA5NjEw
ZTUzNDM1YTMxZS4uZTQ2Y2IxZjI3ZDA5ZmQ5NzI0NDg0MDIzMmU3ZDVhYmViNmMxYzg2OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMS0wNS0wNiAgS2Vu
dCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgUnlv
c3VrZSBOaXdhLgorCisgICAgICAgIEVsaW1pbmF0ZSBXZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQu
e2NwcCxofQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NjAyNjIKKworICAgICAgICAqIHNyYy9XZWJJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJJbnB1dEVsZW1lbnQ6OmRlZmF1bHRNYXhMZW5ndGgpOgorICAgICAgICAgIFJlcGxh
Y2UgSW5wdXRFbGVtZW50OjpzX21heGltdW1MZW5ndGggd2l0aCBIVE1MSW5wdXRFbGVtZW50Ojpt
YXhpbXVtTGVuZ3RoLgorICAgICAgICAoV2ViS2l0Ojp0b1dlYklucHV0RWxlbWVudCk6CisgICAg
ICAgICAgRm9sbG93IHRoZSByZXR1cm4gdHlwZSBjaGFuZ2Ugb2YgTm9kZTo6dG9JbnB1dEVsZW1l
bnQoKS4KKwogMjAxMS0wNS0wNiAgSnVzdGluIFNjaHVoICA8anNjaHVoQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViSW5wdXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYklucHV0RWxlbWVudC5jcHAKaW5kZXggMzQ0OGJiNmIzMjgwNmRiN2FkZDE0
YTI2ZTEwNzViM2FlNjE2NDRmNi4uOGEyMWVkOTFkZmFiODc5NDYxYTlmZTMyODc5NmExODYxZDZh
ZmVkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW5wdXRFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbnB1dEVsZW1lbnQu
Y3BwCkBAIC0xNTIsNyArMTUyLDcgQEAgYm9vbCBXZWJJbnB1dEVsZW1lbnQ6OmlzQ2hlY2tlZCgp
IGNvbnN0CiAKIGludCBXZWJJbnB1dEVsZW1lbnQ6OmRlZmF1bHRNYXhMZW5ndGgoKQogewotICAg
IHJldHVybiBIVE1MSW5wdXRFbGVtZW50OjpzX21heGltdW1MZW5ndGg7CisgICAgcmV0dXJuIEhU
TUxJbnB1dEVsZW1lbnQ6Om1heGltdW1MZW5ndGg7CiB9CiAKIFdlYklucHV0RWxlbWVudDo6V2Vi
SW5wdXRFbGVtZW50KGNvbnN0IFBhc3NSZWZQdHI8SFRNTElucHV0RWxlbWVudD4mIGVsZW0pCkBA
IC0xNzMsMTIgKzE3MywxMCBAQCBXZWJJbnB1dEVsZW1lbnQ6Om9wZXJhdG9yIFBhc3NSZWZQdHI8
SFRNTElucHV0RWxlbWVudD4oKSBjb25zdAogCiBXZWJJbnB1dEVsZW1lbnQqIHRvV2ViSW5wdXRF
bGVtZW50KFdlYkVsZW1lbnQqIHdlYkVsZW1lbnQpCiB7Ci0gICAgSW5wdXRFbGVtZW50KiBpbnB1
dEVsZW1lbnQgPSB3ZWJFbGVtZW50LT51bndyYXA8RWxlbWVudD4oKS0+dG9JbnB1dEVsZW1lbnQo
KTsKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSB3ZWJFbGVtZW50LT51bndy
YXA8RWxlbWVudD4oKS0+dG9JbnB1dEVsZW1lbnQoKTsKICAgICBpZiAoIWlucHV0RWxlbWVudCkK
ICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBBU1NFUlQod2ViRWxlbWVudC0+dW53cmFwPEVsZW1l
bnQ+KCktPmlzSFRNTEVsZW1lbnQoKSk7Ci0KICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViSW5w
dXRFbGVtZW50Kj4od2ViRWxlbWVudCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Z3RrL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRleCBlMDg1ZThl
YzEyMTJhN2I2YjE5ZWM2Y2QzMTdjOTc0OThhNWU0ZTJmLi4xNTNmMmYzZDM2OWNiZTlkMmJhOWUx
NWJkNTFmMzMwODlkZmU1N2QzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIw
MTEtMDUtMDYgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IFJ5b3N1a2UgTml3YS4KKworICAgICAgICBFbGltaW5hdGUgV2ViQ29yZS9kb20v
SW5wdXRFbGVtZW50LntjcHAsaH0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTYwMjYyCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVy
VHJlZVN1cHBvcnRHdGsuY3BwOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpz
ZXRBdXRvZmlsbGVkKToKKyAgICAgICAgICBGb2xsb3cgdGhlIHJldHVybiB0eXBlIGNoYW5nZSBv
ZiBOb2RlOjp0b0lucHV0RWxlbWVudCgpLgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0
R3RrOjpzZXRWYWx1ZUZvclVzZXIpOiBkaXR0by4KKwogMjAxMS0wNS0wNiAgTWFydGluIFJvYmlu
c29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWGFuIExv
cGV6LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJl
bmRlclRyZWVTdXBwb3J0R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAKaW5kZXggNTMwZGY2NjFlOTc0MGViNjgwMTY3
NTFhYzM1NmE5ZWVhOGY3MjEwOC4uMmIxNTRhMjA2ZDdjOTM1YjA3ZTRjYjJkMTZkZWRjMmY0NDc0
ODY3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJl
bmRlclRyZWVTdXBwb3J0R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwCkBAIC0zNiw3ICszNiw2IEBACiAjaW5j
bHVkZSAiR0NDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5j
bHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgotI2luY2x1ZGUgIklucHV0RWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkpTRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiSlNEb2N1bWVudC5oIgogI2luY2x1ZGUg
IkpTRWxlbWVudC5oIgpAQCAtNzYwLDExICs3NTksMTEgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRHdGs6OnNldEF1dG9maWxsZWQoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYg
bm8KICAgICBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KHRvSlMoZXhlYywgbm9kZU9iamVj
dCkpOwogICAgIGlmICghZWxlbWVudCkKICAgICAgICAgcmV0dXJuOwotICAgIElucHV0RWxlbWVu
dCogaW5wdXRFbGVtZW50ID0gZWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICBIVE1MSW5w
dXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBlbGVtZW50LT50b0lucHV0RWxlbWVudCgpOwogICAg
IGlmICghaW5wdXRFbGVtZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBzdGF0aWNfY2FzdDxI
VE1MSW5wdXRFbGVtZW50Kj4oaW5wdXRFbGVtZW50KS0+c2V0QXV0b2ZpbGxlZChhdXRvZmlsbGVk
KTsKKyAgICBpbnB1dEVsZW1lbnQtPnNldEF1dG9maWxsZWQoYXV0b2ZpbGxlZCk7CiB9CiAKIHZv
aWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZXRWYWx1ZUZvclVzZXIoSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTVmFsdWVSZWYgbm9kZU9iamVjdCwgSlNTdHJpbmdSZWYgdmFsdWUpCkBAIC03
NzMsNyArNzcyLDcgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnNldFZhbHVlRm9y
VXNlcihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZgogICAgIEVsZW1lbnQqIGVsZW1l
bnQgPSB0b0VsZW1lbnQodG9KUyhleGVjLCBub2RlT2JqZWN0KSk7CiAgICAgaWYgKCFlbGVtZW50
KQogICAgICAgICByZXR1cm47Ci0gICAgSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBlbGVt
ZW50LT50b0lucHV0RWxlbWVudCgpOworICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVu
dCA9IGVsZW1lbnQtPnRvSW5wdXRFbGVtZW50KCk7CiAgICAgaWYgKCFpbnB1dEVsZW1lbnQpCiAg
ICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBh
Z2UuY3BwIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCmluZGV4IGI0NTljYjJh
M2JhYmQwNDBkNTljNjk4NmM0MzEzMTRhZWQ4YzIwY2IuLjk3NWM0NGEwZGQ1N2ZiMjI5YjRlZDU4
YzA0NTllYjg3MTJmYTZiMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJw
YWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKQEAgLTE0NDYs
NyArMTQ0Niw3IEBAIFFWYXJpYW50IFFXZWJQYWdlOjppbnB1dE1ldGhvZFF1ZXJ5KFF0OjpJbnB1
dE1ldGhvZFF1ZXJ5IHByb3BlcnR5KSBjb25zdAogICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFFWYXJpYW50KGlucHV0RWxlbWVudC0+bWF4TGVuZ3RoKCkpOwogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBRVmFyaWFu
dChJbnB1dEVsZW1lbnQ6OnNfbWF4aW11bUxlbmd0aCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IFFWYXJpYW50KEhUTUxJbnB1dEVsZW1lbnQ6Om1heGltdW1MZW5ndGgpOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgcmV0dXJuIFFWYXJpYW50KDApOwogICAgICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9n
CmluZGV4IDlmYjczZTk2YTdiZTM2YmFkMzY3N2Y4ZjgwMTkyYjk2M2YyN2Q4NjguLjAyNGFjMjM3
YTc4Y2EwN2M3NDU5NGUwOGNlZTgwZWMyN2VmNWRiMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvcXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTcgQEAKKzIwMTEtMDUtMDYgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IFJ5b3N1a2UgTml3YS4KKworICAgICAgICBFbGltaW5hdGUg
V2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LntjcHAsaH0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMjYyCisKKyAgICAgICAgKiBBcGkvcXdlYnBhZ2Uu
Y3BwOgorICAgICAgICAoUVdlYlBhZ2U6OmlucHV0TWV0aG9kUXVlcnkpOgorICAgICAgICAgIFJl
cGxhY2UgSW5wdXRFbGVtZW50OjpzX21heGltdW1MZW5ndGggd2l0aCBIVE1MSW5wdXRFbGVtZW50
OjptYXhpbXVtTGVuZ3RoLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0LmNwcDoKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRBdXRv
ZmlsbGVkKToKKyAgICAgICAgICBGb2xsb3cgdGhlIHJldHVybiB0eXBlIGNoYW5nZSBvZiBOb2Rl
Ojp0b0lucHV0RWxlbWVudCgpLgorCiAyMDExLTA1LTA0ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5v
cm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEdsYXprb3Yu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQuY3BwCmluZGV4IDczMDBiN2IyNDM0YjQ3NmJhY2ZjMDc5ZDkyY2Vh
ZmZmMjQzN2QwYmQuLjY4MmI4Nzg5YzkyM2Q0OGUzNzllNGIwMjdmMjIzNDNmODc5NzUzMjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVT
dXBwb3J0UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQuY3BwCkBAIC01Myw3ICs1Myw2IEBACiAjaW5jbHVkZSAiR2VvbG9j
YXRpb25Qb3NpdGlvbi5oIgogI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCiAjaW5jbHVkZSAiSFRN
TElucHV0RWxlbWVudC5oIgotI2luY2x1ZGUgIklucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIklu
c3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgogI2luY2x1ZGUgIk5v
dGlmaWNhdGlvblByZXNlbnRlckNsaWVudFF0LmgiCkBAIC0yNDMsMTEgKzI0MiwxMSBAQCB2b2lk
IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpzZXRBdXRvZmlsbGVkKGNvbnN0IFFXZWJFbGVtZW50
JiBlbGVtZW50LCBib29sIGlzQQogICAgIFdlYkNvcmU6OkVsZW1lbnQqIHdlYkVsZW1lbnQgPSBl
bGVtZW50Lm1fZWxlbWVudDsKICAgICBpZiAoIXdlYkVsZW1lbnQpCiAgICAgICAgIHJldHVybjsK
LSAgICBJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IHdlYkVsZW1lbnQtPnRvSW5wdXRFbGVt
ZW50KCk7CisgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gd2ViRWxlbWVudC0+
dG9JbnB1dEVsZW1lbnQoKTsKICAgICBpZiAoIWlucHV0RWxlbWVudCkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGlucHV0RWxlbWVudCktPnNl
dEF1dG9maWxsZWQoaXNBdXRvZmlsbGVkKTsKKyAgICBpbnB1dEVsZW1lbnQtPnNldEF1dG9maWxs
ZWQoaXNBdXRvZmlsbGVkKTsKIH0KIAogdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6c2V0
SmF2YVNjcmlwdFByb2ZpbGluZ0VuYWJsZWQoUVdlYkZyYW1lKiBmcmFtZSwgYm9vbCBlbmFibGVk
KQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>