<?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>88980</bug_id>
          
          <creation_ts>2012-06-13 03:08:05 -0700</creation_ts>
          <short_desc>[Forms] Move search field related code to RenderSearchField from RenderTextControlSingleLine</short_desc>
          <delta_ts>2012-06-17 21:57:22 -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>Forms</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>89155</dependson>
          <blocked>88979</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter>yosin</reporter>
          <assigned_to>yosin</assigned_to>
          <cc>adele</cc>
    
    <cc>eric</cc>
    
    <cc>japhet</cc>
    
    <cc>jochen</cc>
    
    <cc>joepeck</cc>
    
    <cc>jonlee</cc>
    
    <cc>rakuco</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>647848</commentid>
    <comment_count>0</comment_count>
    <who name="">yosin</who>
    <bug_when>2012-06-13 03:08:05 -0700</bug_when>
    <thetext>This is part of set RenderTextControlSingleLine free from HTMLInputElement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648997</commentid>
    <comment_count>1</comment_count>
      <attachid>147533</attachid>
    <who name="">yosin</who>
    <bug_when>2012-06-14 02:38:15 -0700</bug_when>
    <thetext>Created attachment 147533
Patch 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649033</commentid>
    <comment_count>2</comment_count>
      <attachid>147533</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-06-14 03:18:06 -0700</bug_when>
    <thetext>Comment on attachment 147533
Patch 1

Attachment 147533 did not pass win-ews (win):
Output: http://queues.webkit.org/results/12950664</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649042</commentid>
    <comment_count>3</comment_count>
      <attachid>147545</attachid>
    <who name="">yosin</who>
    <bug_when>2012-06-14 03:30:07 -0700</bug_when>
    <thetext>Created attachment 147545
Patch 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649089</commentid>
    <comment_count>4</comment_count>
      <attachid>147545</attachid>
    <who name="">yosin</who>
    <bug_when>2012-06-14 05:31:08 -0700</bug_when>
    <thetext>Comment on attachment 147545
Patch 2

Could you review this patch?
Thanks in advance.

* Build locally on CR-Linux and Mac
* Move around codes and small changes for new class RenderSearchFiled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649090</commentid>
    <comment_count>5</comment_count>
      <attachid>147545</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-06-14 05:34:41 -0700</bug_when>
    <thetext>Comment on attachment 147545
Patch 2

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

&gt; Source/WebCore/html/HTMLInputElement.cpp:53
&gt; +#include &quot;RenderSearchField.h&quot;

Using RenderSearchField in HTMLInputElement.cpp is not good.
We should move such code to SearchInputType.

&gt; Source/WebCore/html/TextFieldInputType.cpp:203
&gt;  RenderObject* TextFieldInputType::createRenderer(RenderArena* arena, RenderStyle*) const
&gt;  {
&gt; -    return new (arena) RenderTextControlSingleLine(element());
&gt; +    return isSearchField() ? new (arena) RenderSearchField(element()) : new (arena) RenderTextControlSingleLine(element());

Should introduce SearchInputType::createRenderer().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649724</commentid>
    <comment_count>6</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-06-14 18:45:03 -0700</bug_when>
    <thetext>We need to make sure copied code has correct revision history. So you need to
* Work with SVN checkout, or
* Make another patch only for copying RenderTextControlSingleLine.{cpp,h} to RenderSearchField.{cpp,h} before this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649829</commentid>
    <comment_count>7</comment_count>
      <attachid>147722</attachid>
    <who name="">yosin</who>
    <bug_when>2012-06-14 21:15:45 -0700</bug_when>
    <thetext>Created attachment 147722
Patch 3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649848</commentid>
    <comment_count>8</comment_count>
      <attachid>147722</attachid>
    <who name="">yosin</who>
    <bug_when>2012-06-14 21:47:08 -0700</bug_when>
    <thetext>Comment on attachment 147722
Patch 3

Could you review this patch?
Thanks in advance.

* Local build on CR-Linux and Mac.
* Changed since last patch:
** Changes of RenderSearchField are diffed from copied RenderTextControlSingleLine
** Add InputType::addSearchResult
** Add SearchInputType::createRenderer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649852</commentid>
    <comment_count>9</comment_count>
      <attachid>147722</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-06-14 21:53:17 -0700</bug_when>
    <thetext>Comment on attachment 147722
Patch 3

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

&gt; Source/WebCore/html/InputType.cpp:529
&gt; +void InputType::addSearchResult()
&gt; +{
&gt; +    ASSERT_NOT_REACHED();
&gt; +}

I prefer removing ASSERT_NO_REACHED() here and isSearchField() check in loader/FormSubmission.cpp because we can reduce two virtual calls to one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649868</commentid>
    <comment_count>10</comment_count>
      <attachid>147730</attachid>
    <who name="">yosin</who>
    <bug_when>2012-06-14 22:09:58 -0700</bug_when>
    <thetext>Created attachment 147730
Patch 4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649872</commentid>
    <comment_count>11</comment_count>
      <attachid>147730</attachid>
    <who name="">yosin</who>
    <bug_when>2012-06-14 22:11:30 -0700</bug_when>
    <thetext>Comment on attachment 147730
Patch 4

Could you review this patch?
Thanks in advance.

== Changes from last review ==
* InputType::addSearchResult: Remove ASSERT_NOT_REACHED
* FormSubmission::create: Call HTMLInputElement::addSearchResult w/o isSearchField gurad</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649875</commentid>
    <comment_count>12</comment_count>
    <who name="">yosin</who>
    <bug_when>2012-06-14 22:16:02 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 147722 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=147722&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/InputType.cpp:529
&gt; &gt; +void InputType::addSearchResult()
&gt; &gt; +{
&gt; &gt; +    ASSERT_NOT_REACHED();
&gt; &gt; +}
&gt; 
&gt; I prefer removing ASSERT_NO_REACHED() here and isSearchField() check in loader/FormSubmission.cpp because we can reduce two virtual calls to one.

For loader/FormSubmission.cpp, create method, I would like to introduce
HTMLInputElement::appendToFormValue and replace below fragment:

            HTMLInputElement* input = static_cast&lt;HTMLInputElement*&gt;(control);
            if (input-&gt;isTextField()) {
                formValues.append(pair&lt;String, String&gt;(input-&gt;name().string(), input-&gt;value()));
                input-&gt;addSearchResult();
            }

New methods are

HTMLInputElement::appendFormValue(Vector&lt;pair&lt;String, String&gt; &gt; formValues)
{
    m_inputType-&gt;appendFormValue(formValues);
}


InputType::appendFormValue(Vector&lt;pair&lt;String, String&gt; &gt; formValues)
{
    // nothing to do
}

TextFieldInputType::appendFormValue(Vector&lt;pair&lt;String, String&gt; &gt; formValues)
{
    formValues.append(pair&lt;String, String&gt;(element()-&gt;name().string(), element()-&gt;value()));
}

SearchInptType::appendFormValue(Vector&lt;pair&lt;String, String&gt; &gt; formValues)
{
    TextFieldInputType::appendFormValue(formValues);
    addSearchResult();
}

In this way, I would like to introduce FormValues class, Vector&lt;pair&lt;String, String&gt;&gt; is little bit long.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649878</commentid>
    <comment_count>13</comment_count>
      <attachid>147730</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-06-14 22:19:51 -0700</bug_when>
    <thetext>Comment on attachment 147730
Patch 4

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

&gt; Source/WebCore/ChangeLog:77
&gt; +        * rendering/RenderingAllInOne.cpp: Added RenderSearchField.cpp
&gt; +
&gt; +2012-06-14  Yoshifumi Inoue  &lt;yosin@chromium.org&gt;
&gt; +

There are two ChangeLog entries.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649885</commentid>
    <comment_count>14</comment_count>
      <attachid>147732</attachid>
    <who name="">yosin</who>
    <bug_when>2012-06-14 22:31:17 -0700</bug_when>
    <thetext>Created attachment 147732
Patch 5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649887</commentid>
    <comment_count>15</comment_count>
      <attachid>147732</attachid>
    <who name="">yosin</who>
    <bug_when>2012-06-14 22:32:12 -0700</bug_when>
    <thetext>Comment on attachment 147732
Patch 5

Oops, sorry... m(_ _)m

Could you review this patch?
Thanks in advance.

== Changes from last review ==
* Remove duplicated ChangeLog entry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649894</commentid>
    <comment_count>16</comment_count>
      <attachid>147732</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-06-14 22:49:59 -0700</bug_when>
    <thetext>Comment on attachment 147732
Patch 5

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

&gt; Source/WebCore/rendering/RenderSearchField.cpp:-459
&gt; -
&gt; -    if (m_searchPopupIsVisible)
&gt; -        m_searchPopup-&gt;popupMenu()-&gt;updateFromElement();
&gt; -}

RenderSearchField should have this code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649909</commentid>
    <comment_count>17</comment_count>
      <attachid>147741</attachid>
    <who name="">yosin</who>
    <bug_when>2012-06-14 23:15:30 -0700</bug_when>
    <thetext>Created attachment 147741
Patch 6</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649913</commentid>
    <comment_count>18</comment_count>
      <attachid>147741</attachid>
    <who name="">yosin</who>
    <bug_when>2012-06-14 23:17:23 -0700</bug_when>
    <thetext>Comment on attachment 147741
Patch 6

Could you review this patch?
Thanks in advance.

== Changes from last review ==
* Recover RenderSearchField::updateFromElement and changed for RenderSearchField.
* Add updateFromElement into RenderSearchField.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649923</commentid>
    <comment_count>19</comment_count>
      <attachid>147741</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-06-14 23:32:53 -0700</bug_when>
    <thetext>Comment on attachment 147741
Patch 6

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

&gt; Source/WebCore/rendering/RenderSearchField.cpp:-448
&gt; -LayoutUnit RenderTextControlSingleLine::computeControlHeight(LayoutUnit lineHeight, LayoutUnit nonContentHeight) const
&gt; -{
&gt; -    HTMLElement* resultsButton = resultsButtonElement();
&gt; -    if (RenderBox* resultsRenderer = resultsButton ? resultsButton-&gt;renderBox() : 0) {
&gt; -        resultsRenderer-&gt;computeLogicalHeight();
&gt; -        nonContentHeight = max(nonContentHeight, resultsRenderer-&gt;borderAndPaddingHeight() + resultsRenderer-&gt;marginHeight());
&gt; -        lineHeight = max(lineHeight, resultsRenderer-&gt;height());
&gt; -    }
&gt; -    HTMLElement* cancelButton = cancelButtonElement();
&gt; -    if (RenderBox* cancelRenderer = cancelButton ? cancelButton-&gt;renderBox() : 0) {
&gt; -        cancelRenderer-&gt;computeLogicalHeight();
&gt; -        nonContentHeight = max(nonContentHeight, cancelRenderer-&gt;borderAndPaddingHeight() + cancelRenderer-&gt;marginHeight());
&gt; -        lineHeight = max(lineHeight, cancelRenderer-&gt;height());
&gt; -    }
&gt; -
&gt; -    return lineHeight + nonContentHeight;
&gt; -}

resultsButtonElement() and cancelButtonElement() are search-specific elements.  This function should not be removed.

&gt; Source/WebCore/rendering/RenderSearchField.cpp:-518
&gt; -void RenderTextControlSingleLine::updateCancelButtonVisibility() const
&gt; -{
&gt; -    RenderObject* cancelButtonRenderer = cancelButtonElement()-&gt;renderer();
&gt; -    if (!cancelButtonRenderer)
&gt; -        return;
&gt; -
&gt; -    const RenderStyle* curStyle = cancelButtonRenderer-&gt;style();
&gt; -    EVisibility buttonVisibility = visibilityForCancelButton();
&gt; -    if (curStyle-&gt;visibility() == buttonVisibility)
&gt; -        return;
&gt; -
&gt; -    RefPtr&lt;RenderStyle&gt; cancelButtonStyle = RenderStyle::clone(curStyle);
&gt; -    cancelButtonStyle-&gt;setVisibility(buttonVisibility);
&gt; -    cancelButtonRenderer-&gt;setStyle(cancelButtonStyle);
&gt; -}
&gt; -
&gt; -EVisibility RenderTextControlSingleLine::visibilityForCancelButton() const
&gt; -{
&gt; -    return (style()-&gt;visibility() == HIDDEN || inputElement()-&gt;value().isEmpty()) ? HIDDEN : VISIBLE;
&gt; -}

cancelButtonElement() is search-specific.  This should not be removed.

&gt; Source/WebCore/rendering/RenderSearchField.cpp:-529
&gt; -const AtomicString&amp; RenderTextControlSingleLine::autosaveName() const
&gt; -{
&gt; -    return static_cast&lt;Element*&gt;(node())-&gt;getAttribute(autosaveAttr);
&gt; -}

autosaveName() is search-specific.  This should not be removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650002</commentid>
    <comment_count>20</comment_count>
      <attachid>147771</attachid>
    <who name="">yosin</who>
    <bug_when>2012-06-15 01:10:05 -0700</bug_when>
    <thetext>Created attachment 147771
Patch 7</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650023</commentid>
    <comment_count>21</comment_count>
      <attachid>147771</attachid>
    <who name="">yosin</who>
    <bug_when>2012-06-15 02:05:22 -0700</bug_when>
    <thetext>Comment on attachment 147771
Patch 7

Could you review this patch?
Thanks in advance and sorry for many patches.

== Changes since last review ==
* Move cancel and results button related codes to RenderSearchField
* Move search field related code to SearchInputType from HTMLInputElement
** now HTMLInputElement free from search field.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650031</commentid>
    <comment_count>22</comment_count>
      <attachid>147771</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-06-15 02:15:05 -0700</bug_when>
    <thetext>Comment on attachment 147771
Patch 7

ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650047</commentid>
    <comment_count>23</comment_count>
      <attachid>147771</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-15 02:53:42 -0700</bug_when>
    <thetext>Comment on attachment 147771
Patch 7

Clearing flags on attachment: 147771

Committed r120432: &lt;http://trac.webkit.org/changeset/120432&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650048</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-15 02:53:48 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651090</commentid>
    <comment_count>25</comment_count>
    <who name="">yosin</who>
    <bug_when>2012-06-17 19:06:53 -0700</bug_when>
    <thetext>Reverted r120432 for reason:

Failed to copy merge history to RenderSerachField.{cpp,h}

Committed r120557: &lt;http://trac.webkit.org/changeset/120557&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651156</commentid>
    <comment_count>26</comment_count>
      <attachid>148048</attachid>
    <who name="">yosin</who>
    <bug_when>2012-06-17 21:39:25 -0700</bug_when>
    <thetext>Created attachment 148048
Patch 8</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651164</commentid>
    <comment_count>27</comment_count>
      <attachid>148050</attachid>
    <who name="">yosin</who>
    <bug_when>2012-06-17 21:52:06 -0700</bug_when>
    <thetext>Created attachment 148050
Patch 9</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651167</commentid>
    <comment_count>28</comment_count>
      <attachid>148051</attachid>
    <who name="">yosin</who>
    <bug_when>2012-06-17 21:54:45 -0700</bug_when>
    <thetext>Created attachment 148051
Patch 10</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651168</commentid>
    <comment_count>29</comment_count>
      <attachid>148051</attachid>
    <who name="">yosin</who>
    <bug_when>2012-06-17 21:57:14 -0700</bug_when>
    <thetext>Comment on attachment 148051
Patch 10

Clearing flags on attachment: 148051

Committed r120569: &lt;http://trac.webkit.org/changeset/120569&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651169</commentid>
    <comment_count>30</comment_count>
    <who name="">yosin</who>
    <bug_when>2012-06-17 21:57:22 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147533</attachid>
            <date>2012-06-14 02:38:15 -0700</date>
            <delta_ts>2012-06-14 03:30:01 -0700</delta_ts>
            <desc>Patch 1</desc>
            <filename>bug-88980-20120614183814.patch</filename>
            <type>text/plain</type>
            <size>47907</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwMjk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmUyNzU4NTg2MTkxMTBl
Yjc1ZGE0NGUyODUxYWI0YjM3YmQzNGY4Zi4uNTAyYTg1YjRlYjAyNmM2YzkzNGY4YzlhMTk3YjEz
ZDM4NmI0ZjYxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDczIEBACisyMDEyLTA2LTE0ICBZb3No
aWZ1bWkgSW5vdWUgIDx5b3NpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Zvcm1zXSBNb3Zl
IHNlYXJjaCBmaWVsZCByZWxhdGVkIGNvZGUgdG8gUmVuZGVyU2VhcmNoRmllbGQgZnJvbSBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTg4OTgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtb3ZlcyBzZWFyY2ggZmllbGQgcmVsYXRlZCBtZXRo
b2RzIGluIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZQorICAgICAgICB0byBuZXcgY2xhc3Mg
UmVuZGVyU2VhcmNoRmllbGQgYW5kIGNoYW5nZXMgcmVsYXRlZCBjbGFzc2VzIHRvIHVzZQorICAg
ICAgICBSZW5kZXJTZWFyY2hGaWVsZC4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgcGF0
Y2ggZG9lc24ndCBjaGFuZ2UgYmVoYXZpb3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDog
QWRkZWQgbmV3IGZpbGUgUmVuZGVyU2VhcmNoRmllbGQuY3BwCisgICAgICAgICogR05VbWFrZWZp
bGUubGlzdC5hbTogQWRkZWQgbmV3IGZpbGUgUmVuZGVyU2VhcmNoRmllbGQuY3BwIGFuZCBSZW5k
ZXJTZWFyY2hGaWVsZC5oCisgICAgICAgICogVGFyZ2V0LnByaTogZGl0dG8KKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6IGRpaXRvCisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2o6IGRpdHRvCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBk
aXR0bworICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MSW5wdXRFbGVtZW50OjphZGRTZWFyY2hSZXN1bHQpOiBDaGFuZ2VkIHRvIHVzZSBS
ZW5kZXJTZWFyY2hGaWVsZC4KKyAgICAgICAgKiBodG1sL1NlYXJjaElucHV0VHlwZS5jcHA6Cisg
ICAgICAgICogaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dEZpZWxkSW5wdXRUeXBlOjpjcmVhdGVSZW5kZXJlcik6IENoYW5nZWQgdG8gY3JlYXRlIHJl
bmRlciBvYmplY3QgYnkgaW5wdXQgdHlwZS4KKyAgICAgICAgKiBodG1sL3NoYWRvdy9UZXh0Q29u
dHJvbElubmVyRWxlbWVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoRmllbGRSZXN1
bHRzQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclNlYXJjaEZpZWxkLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTZWFyY2hGaWVsZDo6UmVuZGVyU2VhcmNoRmllbGQpOiBNb3ZlZCBmcm9tIFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjp+
UmVuZGVyU2VhcmNoRmllbGQpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNo
RmllbGQ6OmFkZFNlYXJjaFJlc3VsdCk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
ZWFyY2hGaWVsZDo6c2hvd1BvcHVwKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNl
YXJjaEZpZWxkOjpoaWRlUG9wdXApOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2Vh
cmNoRmllbGQ6OmNvbXB1dGVIZWlnaHRMaW1pdCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU2VhcmNoRmllbGQ6OmNlbnRlckNvbnRhaW5lcklmTmVlZGVkKTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6dmFsdWVDaGFuZ2VkKTogTW92ZWQgZnJv
bSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
ZWFyY2hGaWVsZDo6aXRlbVRleHQpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2Vh
cmNoRmllbGQ6Oml0ZW1MYWJlbCk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFy
Y2hGaWVsZDo6aXRlbUljb24pOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNo
RmllbGQ6Oml0ZW1Jc0VuYWJsZWQpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2Vh
cmNoRmllbGQ6Oml0ZW1TdHlsZSk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFy
Y2hGaWVsZDo6bWVudVN0eWxlKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJj
aEZpZWxkOjpjbGllbnRJbnNldExlZnQpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U2VhcmNoRmllbGQ6OmNsaWVudEluc2V0UmlnaHQpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU2VhcmNoRmllbGQ6OmNsaWVudFBhZGRpbmdMZWZ0KTogZGl0dG8KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjpjbGllbnRQYWRkaW5nUmlnaHQpOiBkaXR0bworICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6Omxpc3RTaXplKTogZGl0dG8KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjpzZWxlY3RlZEluZGV4KTogZGl0dG8KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjpwb3B1cERpZEhpZGUpOiBkaXR0bwor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6Oml0ZW1Jc1NlcGFyYXRvcik6IGRp
dHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6aXRlbUlzTGFiZWwpOiBk
aXR0bworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6Oml0ZW1Jc1NlbGVjdGVk
KTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjpzZXRUZXh0RnJv
bUl0ZW0pOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OmZvbnRT
ZWxlY3Rvcik6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6aG9z
dFdpbmRvdyk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6Y3Jl
YXRlU2Nyb2xsYmFyKTogZGl0dG8KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmll
bGQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZS5oLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OnBv
cHVwSXNWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OnRvUmVuZGVyU2VhcmNoRmllbGQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUpOiBSZW1vdmVkIHNlYXJjaCBmaWVsZHMuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6On5SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjb21w
dXRlSGVpZ2h0TGltaXQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6bGF5b3V0KTogQ2hhbmdlZCB0byBjYWxsIGNvbXB1dGVIZWlnaHRMaW1p
dCBhbmQgY2VudGVyQ29udGFpbmVySWZOZWVkZWQgZm9yIHNlYXJjaCBmaWVsZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6dXBkYXRlRnJvbUVsZW1lbnQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaDoKKyAg
ICAgICAgKFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNlbnRlckNvbnRhaW5lcklmTmVlZGVkKTogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNvbnRh
aW5lckVsZW1lbnQpOiBFeHBvc2VkIGZvciBSZW5kZXJTZWFyY2hGaWVsZC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aW5uZXJCbG9ja0VsZW1lbnQpOiBk
aXR0bworCiAyMDEyLTA2LTE0ICBFZGFlbmEgU2FsaW5hcyBKYXNzbyAgPGVkYWVuYUBhcHBsZS5j
b20+CiAKICAgICAgICAgZWwuZ2V0QXR0cmlidXRlKCd0eXBlJykgcmV0dXJucyAnbnVsbCcgd2hl
biBzZXR0aW5nIGVsLnR5cGUgdG8gbnVsbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBlMWFjM2Y4
ZmU3OGZjODVjMGM0ZDE1YzA4OTc2YjVkYjJkMTUyYmFjLi43ZmQ5M2E5ODcxZGQwOTM5Nzg4ZGZi
YzFhNGE1ZWMwZDI3MjQyZTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTM4Nyw2ICsxMzg3
LDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIHJlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXIu
Y3BwCiAgICAgcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclBhcnQuY3BwCiAgICAgcmVuZGVyaW5n
L1JlbmRlclNjcm9sbGJhclRoZW1lLmNwcAorICAgIHJlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVs
ZC5jcHAKICAgICByZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcAogICAgIHJlbmRlcmluZy9SZW5k
ZXJUYWJsZS5jcHAKICAgICByZW5kZXJpbmcvUmVuZGVyVGFibGVDYXB0aW9uLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggNTRmOTFmYzA3OTU1NTEzMTdkN2E3YjU0ZTUwYjRi
NDUxOGNlMTNhYi4uMjhjOWEwMmUwMWIzMGZjNWU3ODZlMmMwZWRlNzQ4ZDA2M2Y2MDJlOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0zOTA2LDYgKzM5MDYsOCBAQCB3ZWJjb3Jl
X3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJQ
YXJ0LmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJUaGVtZS5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJUaGVtZS5oIFwK
KwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwIFwKKwlTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuaCBcCiAJU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNlbGVjdGlvbkluZm8uaCBcCiAJU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNsaWRlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTbGlkZXIuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291
cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCAxNGY3ZWQxODBhNzEyYmU1MDQ4OGFjODVjNjFj
NmNlNDI2ZDdkMzg0Li42OWJhYTkyOWZkNjcyYzkyNjE2NDhmOGIyMjBmNTdiY2U2N2QzZmQxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1RhcmdldC5wcmkKQEAgLTEzMDksNiArMTMwOSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHJlbmRl
cmluZy9SZW5kZXJTY3JvbGxiYXIuY3BwIFwKICAgICByZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFy
UGFydC5jcHAgXAogICAgIHJlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJUaGVtZS5jcHAgXAorICAg
IHJlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAgXAogICAgIHJlbmRlcmluZy9SZW5kZXJT
bGlkZXIuY3BwIFwKICAgICByZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwIFwKICAgICByZW5kZXJp
bmcvUmVuZGVyVGFibGVDYXB0aW9uLmNwcCBcCkBAIC0yNTE0LDYgKzI1MTUsNyBAQCBIRUFERVJT
ICs9IFwKICAgICByZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmggXAogICAgIHJlbmRlcmluZy9S
ZW5kZXJTY3JvbGxiYXJQYXJ0LmggXAogICAgIHJlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJUaGVt
ZS5oIFwKKyAgICByZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuaCBcCiAgICAgcmVuZGVyaW5n
L1JlbmRlclNsaWRlci5oIFwKICAgICByZW5kZXJpbmcvUmVuZGVyVGFibGVDYXB0aW9uLmggXAog
ICAgIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggN2E0
NTBkNzYzNDRjMTY2MzY4MmVhZDc2MTQ5OGZmMGFiOWUzODZhZS4uZDk2NDNkZTk5MWRmMWQ5ZjIz
MjFkYjc3MjIxYTJhOTk4M2VmNzVkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNDg5OCw2ICs0ODk4
LDggQEAKICAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyUGFydC5oJywKICAg
ICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyVGhlbWUuY3BwJywKICAgICAgICAg
ICAgICdyZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyVGhlbWUuaCcsCisgICAgICAgICAgICAncmVu
ZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmNwcCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL1Jl
bmRlclNlYXJjaEZpZWxkLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTZWxlY3Rp
b25JbmZvLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwJywKICAg
ICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmgnLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCAxN2FlMGRmNTE2NjY2MWVhYzNhMWI3
MGFjMmIzZjdmODQ2MDIyN2U1Li5kMDZkZGFhYTE0NjJkODljYzUxZjlmM2VkNmQ4YmVlNDg5Y2Vh
ZGVjIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpA
QCAtNDE1MDMsNiArNDE1MDMsNjIgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRlclNlYXJjaEZpZWxkLmNwcCIKKwkJCQk+
CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCQlF
eGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0i
VkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJ
CTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCQlFeGNs
dWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkND
TENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxG
aWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIiCisJ
CQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlO
YW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+
CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZMaXRl
fFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9v
bAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25m
aWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJEZWJ1Z19BbGx8
V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29s
CisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZp
Z3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IlByb2R1Y3Rpb258
V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29s
CisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZp
Z3VyYXRpb24+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVu
ZGVyaW5nXFJlbmRlclNlYXJjaEZpZWxkLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUK
IAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xSZW5kZXJTZWxlY3Rpb25JbmZvLmgiCiAJ
CQkJPgogCQkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDYxYTc4NWE1ZjRjMmFmMGM4YTRiMTMxOTg4ODRmNDA3ZjE3
ZDZhMzEuLjkyZTAyYzE0YzJmYWI3NDI4Y2ZhZDkzNTJkMjY5OWYyZTBhMjM5MGYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEx
ODksNiArMTE4OSw4IEBACiAJCTQ1MDk5QzQxMTM3MEE3ODAwMDU4RDUxMyAvKiBJY29uVVJMLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1MDk5QzQw
MTM3MEE3ODAwMDU4RDUxMyAvKiBJY29uVVJMLmNwcCAqLzsgfTsKIAkJNDUwQ0VCRjAxNTA3M0JC
RTAwMkJCMTQ5IC8qIExhYmVsYWJsZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDUwQ0VCRUUxNTA3M0JCRTAwMkJCMTQ5IC8qIExhYmVs
YWJsZUVsZW1lbnQuY3BwICovOyB9OwogCQk0NTBDRUJGMTE1MDczQkJFMDAyQkIxNDkgLyogTGFi
ZWxhYmxlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDUwQ0VCRUYxNTA3M0JCRTAwMkJCMTQ5IC8qIExhYmVsYWJsZUVsZW1lbnQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0NThGRTQwOTE1
ODlERjBCMDA1NjA5RTYgLyogUmVuZGVyU2VhcmNoRmllbGQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDU4RkU0MDcxNTg5REYwQjAwNTYwOUU2IC8q
IFJlbmRlclNlYXJjaEZpZWxkLmNwcCAqLzsgfTsKKwkJNDU4RkU0MEExNTg5REYwQjAwNTYwOUU2
IC8qIFJlbmRlclNlYXJjaEZpZWxkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0NThGRTQwODE1ODlERjBCMDA1NjA5RTYgLyogUmVuZGVyU2VhcmNoRmll
bGQuaCAqLzsgfTsKIAkJNDVCQUMyQjAxMzYwQkJBQjAwNURBMjU4IC8qIEljb25VUkwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1QkFDMkFGMTM2MEJC
QUIwMDVEQTI1OCAvKiBJY29uVVJMLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNDVGRUE1Q0YxNTZEREU4QzAwNjU0MTAxIC8qIERlY2ltYWwuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDVGRUE1Q0Qx
NTZEREU4QzAwNjU0MTAxIC8qIERlY2ltYWwuY3BwICovOyB9OwogCQk0NUZFQTVEMDE1NkRERThD
MDA2NTQxMDEgLyogRGVjaW1hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDVGRUE1Q0UxNTZEREU4QzAwNjU0MTAxIC8qIERlY2ltYWwuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtODIxNCw2ICs4MjE2
LDggQEAKIAkJNDUwOTlDNDAxMzcwQTc4MDAwNThENTEzIC8qIEljb25VUkwuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSWNvblVSTC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTQ1MENFQkVFMTUwNzNCQkUwMDJCQjE0OSAvKiBMYWJlbGFibGVFbGVt
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExhYmVsYWJsZUVs
ZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NTBDRUJFRjE1MDczQkJF
MDAyQkIxNDkgLyogTGFiZWxhYmxlRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBMYWJlbGFibGVFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTQ1OEZFNDA3MTU4OURGMEIwMDU2MDlFNiAvKiBSZW5kZXJTZWFyY2hGaWVsZC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTZWFyY2hGaWVsZC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ1OEZFNDA4MTU4OURGMEIwMDU2MDlFNiAvKiBS
ZW5kZXJTZWFyY2hGaWVsZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5k
ZXJTZWFyY2hGaWVsZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NUJBQzJBRjEz
NjBCQkFCMDA1REEyNTggLyogSWNvblVSTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJY29uVVJMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ1RkVBNUNEMTU2
RERFOEMwMDY1NDEwMSAvKiBEZWNpbWFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IERlY2ltYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NUZF
QTVDRTE1NkRERThDMDA2NTQxMDEgLyogRGVjaW1hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBEZWNpbWFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTEw
NCw2ICsyMTEwOCw4IEBACiAJCQkJQkMzQkU5OTIwRTlDMUM3QzAwODM1NTg4IC8qIFJlbmRlclNj
cm9sbGJhclBhcnQuaCAqLywKIAkJCQlCQzNCRTlBNDBFOUMyMzk2MDA4MzU1ODggLyogUmVuZGVy
U2Nyb2xsYmFyVGhlbWUuY3BwICovLAogCQkJCUJDM0JFOTk4MEU5QzFFNUQwMDgzNTU4OCAvKiBS
ZW5kZXJTY3JvbGxiYXJUaGVtZS5oICovLAorCQkJCTQ1OEZFNDA3MTU4OURGMEIwMDU2MDlFNiAv
KiBSZW5kZXJTZWFyY2hGaWVsZC5jcHAgKi8sCisJCQkJNDU4RkU0MDgxNTg5REYwQjAwNTYwOUU2
IC8qIFJlbmRlclNlYXJjaEZpZWxkLmggKi8sCiAJCQkJMEYxMUE1NEUwRjM5MjMzMTAwQzM3ODg0
IC8qIFJlbmRlclNlbGVjdGlvbkluZm8uaCAqLywKIAkJCQlBQjI0N0E2QTBBRkQ2MzgzMDAzRkE1
RkQgLyogUmVuZGVyU2xpZGVyLmNwcCAqLywKIAkJCQlBQjI0N0E2QjBBRkQ2MzgzMDAzRkE1RkQg
LyogUmVuZGVyU2xpZGVyLmggKi8sCkBAIC0yNDI2MCw2ICsyNDI2Niw3IEBACiAJCQkJQkMzQkU5
OTQwRTlDMUM3QzAwODM1NTg4IC8qIFJlbmRlclNjcm9sbGJhci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMzQkU5OTUwRTlDMUM3QzAwODM1NTg4IC8qIFJlbmRlclNjcm9sbGJhclBhcnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDM0JFOTk5MEU5QzFFNUQwMDgzNTU4OCAvKiBSZW5kZXJTY3JvbGxi
YXJUaGVtZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDU4RkU0MEExNTg5REYwQjAwNTYwOUU2IC8q
IFJlbmRlclNlYXJjaEZpZWxkLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjExQTU0RjBGMzkyMzMx
MDBDMzc4ODQgLyogUmVuZGVyU2VsZWN0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUIy
NDdBNkQwQUZENjM4MzAwM0ZBNUZEIC8qIFJlbmRlclNsaWRlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkM4QzhGQUUwRERDRDMxQjAwQjU5MkY0IC8qIFJlbmRlclN0eWxlLmggaW4gSGVhZGVycyAq
LywKQEAgLTI3NDUzLDYgKzI3NDYwLDcgQEAKIAkJCQlCQzNCRTk5MzBFOUMxQzdDMDA4MzU1ODgg
LyogUmVuZGVyU2Nyb2xsYmFyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDM0JFOUFCMEU5QzI0
MjAwMDgzNTU4OCAvKiBSZW5kZXJTY3JvbGxiYXJQYXJ0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUJDM0JFOUE1MEU5QzIzOTYwMDgzNTU4OCAvKiBSZW5kZXJTY3JvbGxiYXJUaGVtZS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk0NThGRTQwOTE1ODlERjBCMDA1NjA5RTYgLyogUmVuZGVyU2VhcmNo
RmllbGQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQUIyNDdBNkMwQUZENjM4MzAwM0ZBNUZEIC8q
IFJlbmRlclNsaWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzhDOEZBRDBERENEMzFCMDBC
NTkyRjQgLyogUmVuZGVyU3R5bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0RTU3MTcxMzEz
Mjc2MjAwQ0Y4NUFGIC8qIFJlbmRlclNWR0FsbEluT25lLmNwcCBpbiBTb3VyY2VzICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKaW5kZXggZWQ1YjBjNjNlMmJhMDFk
Yzg0MzJkZmE0ZTMwNDA5ZDc3ZjgzYzAwOS4uNmZjYzQ0NWFmYzFmYjcyOTBkYzVkOGNmZjM0NWQ1
NzhhOWU0MDVmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCkBA
IC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgogI2luY2x1ZGUg
Ik1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJOdW1iZXJJbnB1dFR5cGUuaCIKKyNpbmNsdWRlICJS
ZW5kZXJTZWFyY2hGaWVsZC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZS5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiU2VhcmNoSW5wdXRUeXBl
LmgiCkBAIC0xMzIwLDcgKzEzMjEsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmFkZFNlYXJj
aFJlc3VsdCgpCiB7CiAgICAgQVNTRVJUKGlzU2VhcmNoRmllbGQoKSk7CiAgICAgaWYgKHJlbmRl
cmVyKCkpCi0gICAgICAgIHRvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKHJlbmRlcmVyKCkp
LT5hZGRTZWFyY2hSZXN1bHQoKTsKKyAgICAgICAgdG9SZW5kZXJTZWFyY2hGaWVsZChyZW5kZXJl
cigpKS0+YWRkU2VhcmNoUmVzdWx0KCk7CiB9CiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6b25T
ZWFyY2goKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9TZWFyY2hJbnB1dFR5cGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9TZWFyY2hJbnB1dFR5cGUuY3BwCmluZGV4IDZmNTAw
ZGFmM2Y3YjVmMWUwNWJkNGEyZDBiMmY5ZWU0N2MzYjA0YTQuLjUwZWZlM2M4NzA4NzhmMjIyNmMx
MzNkMjg3MDY0OGRiZmU0NDBhYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvU2Vh
cmNoSW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1NlYXJjaElucHV0VHlw
ZS5jcHAKQEAgLTMzLDcgKzMzLDcgQEAKIAogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIK
ICNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lLmgiCisjaW5jbHVkZSAiUmVuZGVyU2VhcmNoRmllbGQuaCIKICNpbmNsdWRlICJT
aGFkb3dSb290LmgiCiAjaW5jbHVkZSAiVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgiCiAjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
VGV4dEZpZWxkSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5w
dXRUeXBlLmNwcAppbmRleCA4MTg5MTQ0YTk5MzgwYTU4ZDBjOGE1YTc3YWNmMGI2OGMwZTBmNDhl
Li42YTcwZjk1ZTdjMzgyNzUwMDA4MTNmYTJmYzVlNDkxNjViNzdiNTZlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwCkBAIC00Myw3ICs0Myw3IEBACiAjaW5j
bHVkZSAiS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5k
ZXJMYXllci5oIgotI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oIgorI2lu
Y2x1ZGUgIlJlbmRlclNlYXJjaEZpZWxkLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNp
bmNsdWRlICJTaGFkb3dSb290LmgiCiAjaW5jbHVkZSAiVGV4dENvbnRyb2xJbm5lckVsZW1lbnRz
LmgiCkBAIC0yMDAsNyArMjAwLDcgQEAgYm9vbCBUZXh0RmllbGRJbnB1dFR5cGU6OnNob3VsZFN1
Ym1pdEltcGxpY2l0bHkoRXZlbnQqIGV2ZW50KQogCiBSZW5kZXJPYmplY3QqIFRleHRGaWVsZElu
cHV0VHlwZTo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSop
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZShlbGVtZW50KCkpOworICAgIHJldHVybiBpc1NlYXJjaEZpZWxkKCkgPyBuZXcgKGFyZW5h
KSBSZW5kZXJTZWFyY2hGaWVsZChlbGVtZW50KCkpIDogbmV3IChhcmVuYSkgUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lKGVsZW1lbnQoKSk7CiB9CiAKIGJvb2wgVGV4dEZpZWxkSW5wdXRUeXBl
OjpuZWVkc0NvbnRhaW5lcigpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcAppbmRleCAxMDBkYWViNjQ3Yjlk
NzdhYTRjMWI0MzEyYmM5YzVlNWZiMTg3YWQ2Li41ZDI2ODQxYzI0MzU3MDU1ZjdiNWI5OGI3MTgx
OGIzMDU3YzFhZDEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0
Q29udHJvbElubmVyRWxlbWVudHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93
L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRl
ICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1
ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCIKKyNp
bmNsdWRlICJSZW5kZXJTZWFyY2hGaWVsZC5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNp
bmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIK
QEAgLTE1MSw3ICsxNTEsNyBAQCB2b2lkIFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbkVsZW1lbnQ6
OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQogICAgIGlmIChldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBldmVudC0+aXNNb3VzZUV2ZW50KCkg
JiYgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRv
bikgewogICAgICAgICBpbnB1dC0+Zm9jdXMoKTsKICAgICAgICAgaW5wdXQtPnNlbGVjdCgpOwot
ICAgICAgICBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUqIHJlbmRlcmVyID0gdG9SZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmUoaW5wdXQtPnJlbmRlcmVyKCkpOworICAgICAgICBSZW5kZXJT
ZWFyY2hGaWVsZCogcmVuZGVyZXIgPSB0b1JlbmRlclNlYXJjaEZpZWxkKGlucHV0LT5yZW5kZXJl
cigpKTsKICAgICAgICAgaWYgKHJlbmRlcmVyLT5wb3B1cElzVmlzaWJsZSgpKQogICAgICAgICAg
ICAgcmVuZGVyZXItPmhpZGVQb3B1cCgpOwogICAgICAgICBlbHNlIGlmIChpbnB1dC0+bWF4UmVz
dWx0cygpID4gMCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
ZWFyY2hGaWVsZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmll
bGQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmIwNzA0MGNhMTc2YTc3NTA2OTA2Mjk2ZGJkOGY5NzM3Yzg3ZjM4
ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Vh
cmNoRmllbGQuY3BwCkBAIC0wLDAgKzEsMzIwIEBACisvKioKKyAqIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwNywgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAg
ICAgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6
Ly93d3cudG9yY2htb2JpbGUuY29tLykgCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiUmVuZGVyU2VhcmNoRmllbGQuaCIKKworI2luY2x1ZGUgIkNTU0ZvbnRT
ZWxlY3Rvci5oIgorI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKKyNpbmNsdWRlICJDaHJv
bWUuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCisj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgorI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRl
ICJMb2NhbGl6ZWRTdHJpbmdzLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAi
UmVuZGVyU2Nyb2xsYmFyLmgiCisjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKKyNpbmNsdWRlICJT
ZWFyY2hQb3B1cE1lbnUuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlNpbXBs
ZUZvbnREYXRhLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgorI2luY2x1ZGUgIlRleHRD
b250cm9sSW5uZXJFbGVtZW50cy5oIgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKKy8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUmVuZGVyU2VhcmNoRmllbGQ6OlJlbmRlclNlYXJjaEZp
ZWxkKE5vZGUqIG5vZGUpCisgICAgOiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUobm9kZSkK
KyAgICAsIG1fc2VhcmNoUG9wdXBJc1Zpc2libGUoZmFsc2UpCisgICAgLCBtX3NlYXJjaFBvcHVw
KDApCit7CisgICAgQVNTRVJUKG5vZGUtPmlzSFRNTEVsZW1lbnQoKSk7CisgICAgQVNTRVJUKG5v
ZGUtPnRvSW5wdXRFbGVtZW50KCkpOworfQorCitSZW5kZXJTZWFyY2hGaWVsZDo6flJlbmRlclNl
YXJjaEZpZWxkKCkKK3sKKyAgICBpZiAobV9zZWFyY2hQb3B1cCkgeworICAgICAgICBtX3NlYXJj
aFBvcHVwLT5wb3B1cE1lbnUoKS0+ZGlzY29ubmVjdENsaWVudCgpOworICAgICAgICBtX3NlYXJj
aFBvcHVwID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyU2VhcmNoRmllbGQ6OmFkZFNlYXJj
aFJlc3VsdCgpCit7CisgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBpbnB1dEVsZW1lbnQo
KTsKKyAgICBpZiAoaW5wdXQtPm1heFJlc3VsdHMoKSA8PSAwKQorICAgICAgICByZXR1cm47CisK
KyAgICBTdHJpbmcgdmFsdWUgPSBpbnB1dC0+dmFsdWUoKTsKKyAgICBpZiAodmFsdWUuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVu
dCgpLT5zZXR0aW5ncygpOworICAgIGlmICghc2V0dGluZ3MgfHwgc2V0dGluZ3MtPnByaXZhdGVC
cm93c2luZ0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IHNpemUgPSBzdGF0
aWNfY2FzdDxpbnQ+KG1fcmVjZW50U2VhcmNoZXMuc2l6ZSgpKTsKKyAgICBmb3IgKGludCBpID0g
c2l6ZSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGlmIChtX3JlY2VudFNlYXJjaGVzW2ld
ID09IHZhbHVlKQorICAgICAgICAgICAgbV9yZWNlbnRTZWFyY2hlcy5yZW1vdmUoaSk7CisgICAg
fQorCisgICAgbV9yZWNlbnRTZWFyY2hlcy5pbnNlcnQoMCwgdmFsdWUpOworICAgIHdoaWxlIChz
dGF0aWNfY2FzdDxpbnQ+KG1fcmVjZW50U2VhcmNoZXMuc2l6ZSgpKSA+IGlucHV0LT5tYXhSZXN1
bHRzKCkpCisgICAgICAgIG1fcmVjZW50U2VhcmNoZXMucmVtb3ZlTGFzdCgpOworCisgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lID0gYXV0b3NhdmVOYW1lKCk7CisgICAgaWYgKCFtX3NlYXJj
aFBvcHVwKQorICAgICAgICBtX3NlYXJjaFBvcHVwID0gZG9jdW1lbnQoKS0+cGFnZSgpLT5jaHJv
bWUoKS0+Y3JlYXRlU2VhcmNoUG9wdXBNZW51KHRoaXMpOworCisgICAgbV9zZWFyY2hQb3B1cC0+
c2F2ZVJlY2VudFNlYXJjaGVzKG5hbWUsIG1fcmVjZW50U2VhcmNoZXMpOworfQorCit2b2lkIFJl
bmRlclNlYXJjaEZpZWxkOjpzaG93UG9wdXAoKQoreworICAgIGlmIChtX3NlYXJjaFBvcHVwSXNW
aXNpYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fc2VhcmNoUG9wdXApCisgICAg
ICAgIG1fc2VhcmNoUG9wdXAgPSBkb2N1bWVudCgpLT5wYWdlKCktPmNocm9tZSgpLT5jcmVhdGVT
ZWFyY2hQb3B1cE1lbnUodGhpcyk7CisKKyAgICBpZiAoIW1fc2VhcmNoUG9wdXAtPmVuYWJsZWQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zZWFyY2hQb3B1cElzVmlzaWJsZSA9IHRydWU7
CisKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUgPSBhdXRvc2F2ZU5hbWUoKTsKKyAgICBt
X3NlYXJjaFBvcHVwLT5sb2FkUmVjZW50U2VhcmNoZXMobmFtZSwgbV9yZWNlbnRTZWFyY2hlcyk7
CisKKyAgICAvLyBUcmltIHRoZSByZWNlbnQgc2VhcmNoZXMgbGlzdCBpZiB0aGUgbWF4aW11bSBz
aXplIGhhcyBjaGFuZ2VkIHNpbmNlIHdlIGxhc3Qgc2F2ZWQuCisgICAgSFRNTElucHV0RWxlbWVu
dCogaW5wdXQgPSBpbnB1dEVsZW1lbnQoKTsKKyAgICBpZiAoc3RhdGljX2Nhc3Q8aW50PihtX3Jl
Y2VudFNlYXJjaGVzLnNpemUoKSkgPiBpbnB1dC0+bWF4UmVzdWx0cygpKSB7CisgICAgICAgIGRv
IHsKKyAgICAgICAgICAgIG1fcmVjZW50U2VhcmNoZXMucmVtb3ZlTGFzdCgpOworICAgICAgICB9
IHdoaWxlIChzdGF0aWNfY2FzdDxpbnQ+KG1fcmVjZW50U2VhcmNoZXMuc2l6ZSgpKSA+IGlucHV0
LT5tYXhSZXN1bHRzKCkpOworCisgICAgICAgIG1fc2VhcmNoUG9wdXAtPnNhdmVSZWNlbnRTZWFy
Y2hlcyhuYW1lLCBtX3JlY2VudFNlYXJjaGVzKTsKKyAgICB9CisKKyAgICBtX3NlYXJjaFBvcHVw
LT5wb3B1cE1lbnUoKS0+c2hvdyhwaXhlbFNuYXBwZWRJbnRSZWN0KGFic29sdXRlQm91bmRpbmdC
b3hSZWN0KCkpLCBkb2N1bWVudCgpLT52aWV3KCksIC0xKTsKK30KKwordm9pZCBSZW5kZXJTZWFy
Y2hGaWVsZDo6aGlkZVBvcHVwKCkKK3sKKyAgICBpZiAobV9zZWFyY2hQb3B1cCkKKyAgICAgICAg
bV9zZWFyY2hQb3B1cC0+cG9wdXBNZW51KCktPmhpZGUoKTsKK30KKworTGF5b3V0VW5pdCBSZW5k
ZXJTZWFyY2hGaWVsZDo6Y29tcHV0ZUhlaWdodExpbWl0KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
aGVpZ2h0KCk7Cit9CisKK3ZvaWQgUmVuZGVyU2VhcmNoRmllbGQ6OmNlbnRlckNvbnRhaW5lcklm
TmVlZGVkKFJlbmRlckJveCogY29udGFpbmVyUmVuZGVyZXIpIGNvbnN0Cit7CisgICAgaWYgKCFj
b250YWluZXJSZW5kZXJlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGNvbnRhaW5lclJl
bmRlcmVyLT5oZWlnaHQoKSA8PSBjb250ZW50SGVpZ2h0KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIEEgcXVpcmsgZm9yIGZpbmQtaW4tcGFnZSBib3ggb24gU2FmYXJpIFdpbmRvd3MuCisg
ICAgLy8gaHR0cDovL3dlYmtpdC5vcmcvYi82MzE1NworICAgIExheW91dFVuaXQgaGVpZ2h0RGlm
ZiA9IGNvbnRhaW5lclJlbmRlcmVyLT5oZWlnaHQoKSAtIGNvbnRlbnRIZWlnaHQoKTsKKyAgICBj
b250YWluZXJSZW5kZXJlci0+c2V0WShjb250YWluZXJSZW5kZXJlci0+eSgpIC0gKGhlaWdodERp
ZmYgLyAyICsgbGF5b3V0TW9kKGhlaWdodERpZmYsIDIpKSk7Cit9CisKKy8vIFBvcHVwTWVudUNs
aWVudCBtZXRob2RzCit2b2lkIFJlbmRlclNlYXJjaEZpZWxkOjp2YWx1ZUNoYW5nZWQodW5zaWdu
ZWQgbGlzdEluZGV4LCBib29sIGZpcmVFdmVudHMpCit7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0
PGludD4obGlzdEluZGV4KSA8IGxpc3RTaXplKCkpOworICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlu
cHV0ID0gaW5wdXRFbGVtZW50KCk7CisgICAgaWYgKHN0YXRpY19jYXN0PGludD4obGlzdEluZGV4
KSA9PSAobGlzdFNpemUoKSAtIDEpKSB7CisgICAgICAgIGlmIChmaXJlRXZlbnRzKSB7CisgICAg
ICAgICAgICBtX3JlY2VudFNlYXJjaGVzLmNsZWFyKCk7CisgICAgICAgICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIG5hbWUgPSBhdXRvc2F2ZU5hbWUoKTsKKyAgICAgICAgICAgIGlmICghbmFtZS5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fc2VhcmNoUG9wdXApCisgICAgICAg
ICAgICAgICAgICAgIG1fc2VhcmNoUG9wdXAgPSBkb2N1bWVudCgpLT5wYWdlKCktPmNocm9tZSgp
LT5jcmVhdGVTZWFyY2hQb3B1cE1lbnUodGhpcyk7CisgICAgICAgICAgICAgICAgbV9zZWFyY2hQ
b3B1cC0+c2F2ZVJlY2VudFNlYXJjaGVzKG5hbWUsIG1fcmVjZW50U2VhcmNoZXMpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW5wdXQtPnNldFZhbHVl
KGl0ZW1UZXh0KGxpc3RJbmRleCkpOworICAgICAgICBpZiAoZmlyZUV2ZW50cykKKyAgICAgICAg
ICAgIGlucHV0LT5vblNlYXJjaCgpOworICAgICAgICBpbnB1dC0+c2VsZWN0KCk7CisgICAgfQor
fQorCitTdHJpbmcgUmVuZGVyU2VhcmNoRmllbGQ6Oml0ZW1UZXh0KHVuc2lnbmVkIGxpc3RJbmRl
eCkgY29uc3QKK3sKKyAgICBpbnQgc2l6ZSA9IGxpc3RTaXplKCk7CisgICAgaWYgKHNpemUgPT0g
MSkgeworICAgICAgICBBU1NFUlQoIWxpc3RJbmRleCk7CisgICAgICAgIHJldHVybiBzZWFyY2hN
ZW51Tm9SZWNlbnRTZWFyY2hlc1RleHQoKTsKKyAgICB9CisgICAgaWYgKCFsaXN0SW5kZXgpCisg
ICAgICAgIHJldHVybiBzZWFyY2hNZW51UmVjZW50U2VhcmNoZXNUZXh0KCk7CisgICAgaWYgKGl0
ZW1Jc1NlcGFyYXRvcihsaXN0SW5kZXgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAg
aWYgKHN0YXRpY19jYXN0PGludD4obGlzdEluZGV4KSA9PSAoc2l6ZSAtIDEpKQorICAgICAgICBy
ZXR1cm4gc2VhcmNoTWVudUNsZWFyUmVjZW50U2VhcmNoZXNUZXh0KCk7CisgICAgcmV0dXJuIG1f
cmVjZW50U2VhcmNoZXNbbGlzdEluZGV4IC0gMV07Cit9CisKK1N0cmluZyBSZW5kZXJTZWFyY2hG
aWVsZDo6aXRlbUxhYmVsKHVuc2lnbmVkKSBjb25zdAoreworICAgIHJldHVybiBTdHJpbmcoKTsK
K30KKworU3RyaW5nIFJlbmRlclNlYXJjaEZpZWxkOjppdGVtSWNvbih1bnNpZ25lZCkgY29uc3QK
K3sKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK2Jvb2wgUmVuZGVyU2VhcmNoRmllbGQ6Oml0
ZW1Jc0VuYWJsZWQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAoreworICAgICBpZiAoIWxpc3RJ
bmRleCB8fCBpdGVtSXNTZXBhcmF0b3IobGlzdEluZGV4KSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHJldHVybiB0cnVlOworfQorCitQb3B1cE1lbnVTdHlsZSBSZW5kZXJTZWFyY2hGaWVs
ZDo6aXRlbVN0eWxlKHVuc2lnbmVkKSBjb25zdAoreworICAgIHJldHVybiBtZW51U3R5bGUoKTsK
K30KKworUG9wdXBNZW51U3R5bGUgUmVuZGVyU2VhcmNoRmllbGQ6Om1lbnVTdHlsZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIFBvcHVwTWVudVN0eWxlKHN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRD
b2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgc3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENT
U1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSwgc3R5bGUoKS0+Zm9udCgpLCBzdHlsZSgpLT52aXNp
YmlsaXR5KCkgPT0gVklTSUJMRSwKKyAgICAgICAgc3R5bGUoKS0+ZGlzcGxheSgpID09IE5PTkUs
IHN0eWxlKCktPnRleHRJbmRlbnQoKSwgc3R5bGUoKS0+ZGlyZWN0aW9uKCksIGlzT3ZlcnJpZGUo
c3R5bGUoKS0+dW5pY29kZUJpZGkoKSkpOworfQorCitpbnQgUmVuZGVyU2VhcmNoRmllbGQ6OmNs
aWVudEluc2V0TGVmdCgpIGNvbnN0Cit7CisgICAgLy8gSW5zZXQgdGhlIG1lbnUgYnkgdGhlIHJh
ZGl1cyBvZiB0aGUgY2FwIG9uIHRoZSBsZWZ0IHNvIHRoYXQKKyAgICAvLyBpdCBvbmx5IHJ1bnMg
YWxvbmcgdGhlIHN0cmFpZ2h0IHBhcnQgb2YgdGhlIGJlemVsLgorICAgIHJldHVybiBoZWlnaHQo
KSAvIDI7Cit9CisKK2ludCBSZW5kZXJTZWFyY2hGaWVsZDo6Y2xpZW50SW5zZXRSaWdodCgpIGNv
bnN0Cit7CisgICAgLy8gSW5zZXQgdGhlIG1lbnUgYnkgdGhlIHJhZGl1cyBvZiB0aGUgY2FwIG9u
IHRoZSByaWdodCBzbyB0aGF0CisgICAgLy8gaXQgb25seSBydW5zIGFsb25nIHRoZSBzdHJhaWdo
dCBwYXJ0IG9mIHRoZSBiZXplbCAodW5sZXNzIGl0IG5lZWRzCisgICAgLy8gdG8gYmUgd2lkZXIp
LgorICAgIHJldHVybiBoZWlnaHQoKSAvIDI7Cit9CisKK0xheW91dFVuaXQgUmVuZGVyU2VhcmNo
RmllbGQ6OmNsaWVudFBhZGRpbmdMZWZ0KCkgY29uc3QKK3sKKyAgICBMYXlvdXRVbml0IHBhZGRp
bmcgPSBwYWRkaW5nTGVmdCgpOworICAgIGlmIChSZW5kZXJCb3gqIGJveCA9IGlubmVyQmxvY2tF
bGVtZW50KCkgPyBpbm5lckJsb2NrRWxlbWVudCgpLT5yZW5kZXJCb3goKSA6IDApCisgICAgICAg
IHBhZGRpbmcgKz0gYm94LT54KCk7CisgICAgcmV0dXJuIHBhZGRpbmc7Cit9CisKK0xheW91dFVu
aXQgUmVuZGVyU2VhcmNoRmllbGQ6OmNsaWVudFBhZGRpbmdSaWdodCgpIGNvbnN0Cit7CisgICAg
TGF5b3V0VW5pdCBwYWRkaW5nID0gcGFkZGluZ1JpZ2h0KCk7CisgICAgaWYgKFJlbmRlckJveCog
Y29udGFpbmVyQm94ID0gY29udGFpbmVyRWxlbWVudCgpID8gY29udGFpbmVyRWxlbWVudCgpLT5y
ZW5kZXJCb3goKSA6IDApIHsKKyAgICAgICAgaWYgKFJlbmRlckJveCogaW5uZXJCbG9ja0JveCA9
IGlubmVyQmxvY2tFbGVtZW50KCkgPyBpbm5lckJsb2NrRWxlbWVudCgpLT5yZW5kZXJCb3goKSA6
IDApCisgICAgICAgICAgICBwYWRkaW5nICs9IGNvbnRhaW5lckJveC0+d2lkdGgoKSAtIChpbm5l
ckJsb2NrQm94LT54KCkgKyBpbm5lckJsb2NrQm94LT53aWR0aCgpKTsKKyAgICB9CisgICAgcmV0
dXJuIHBhZGRpbmc7Cit9CisKK2ludCBSZW5kZXJTZWFyY2hGaWVsZDo6bGlzdFNpemUoKSBjb25z
dAoreworICAgIC8vIElmIHRoZXJlIGFyZSBubyByZWNlbnQgc2VhcmNoZXMsIHRoZW4gb3VyIG1l
bnUgd2lsbCBoYXZlIDEgIk5vIHJlY2VudCBzZWFyY2hlcyIgaXRlbS4KKyAgICBpZiAoIW1fcmVj
ZW50U2VhcmNoZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gMTsKKyAgICAvLyBPdGhlcndpc2Us
IGxlYXZlIHJvb20gaW4gdGhlIG1lbnUgZm9yIGEgaGVhZGVyLCBhIHNlcGFyYXRvciwgYW5kIHRo
ZSAiQ2xlYXIgcmVjZW50IHNlYXJjaGVzIiBpdGVtLgorICAgIHJldHVybiBtX3JlY2VudFNlYXJj
aGVzLnNpemUoKSArIDM7Cit9CisKK2ludCBSZW5kZXJTZWFyY2hGaWVsZDo6c2VsZWN0ZWRJbmRl
eCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIC0xOworfQorCit2b2lkIFJlbmRlclNlYXJjaEZpZWxk
Ojpwb3B1cERpZEhpZGUoKQoreworICAgIG1fc2VhcmNoUG9wdXBJc1Zpc2libGUgPSBmYWxzZTsK
K30KKworYm9vbCBSZW5kZXJTZWFyY2hGaWVsZDo6aXRlbUlzU2VwYXJhdG9yKHVuc2lnbmVkIGxp
c3RJbmRleCkgY29uc3QKK3sKKyAgICAvLyBUaGUgc2VwYXJhdG9yIHdpbGwgYmUgdGhlIHNlY29u
ZCB0byBsYXN0IGl0ZW0gaW4gb3VyIGxpc3QuCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4o
bGlzdEluZGV4KSA9PSAobGlzdFNpemUoKSAtIDIpOworfQorCitib29sIFJlbmRlclNlYXJjaEZp
ZWxkOjppdGVtSXNMYWJlbCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJu
ICFsaXN0SW5kZXg7Cit9CisKK2Jvb2wgUmVuZGVyU2VhcmNoRmllbGQ6Oml0ZW1Jc1NlbGVjdGVk
KHVuc2lnbmVkKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJT
ZWFyY2hGaWVsZDo6c2V0VGV4dEZyb21JdGVtKHVuc2lnbmVkIGxpc3RJbmRleCkKK3sKKyAgICBp
bnB1dEVsZW1lbnQoKS0+c2V0VmFsdWUoaXRlbVRleHQobGlzdEluZGV4KSk7Cit9CisKK0ZvbnRT
ZWxlY3RvciogUmVuZGVyU2VhcmNoRmllbGQ6OmZvbnRTZWxlY3RvcigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGRvY3VtZW50KCktPnN0eWxlUmVzb2x2ZXIoKS0+Zm9udFNlbGVjdG9yKCk7Cit9CisK
K0hvc3RXaW5kb3cqIFJlbmRlclNlYXJjaEZpZWxkOjpob3N0V2luZG93KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gZG9jdW1lbnQoKS0+dmlldygpLT5ob3N0V2luZG93KCk7Cit9CisKKworUGFzc1Jl
ZlB0cjxTY3JvbGxiYXI+IFJlbmRlclNlYXJjaEZpZWxkOjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xs
YWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlv
biwgU2Nyb2xsYmFyQ29udHJvbFNpemUgY29udHJvbFNpemUpCit7CisgICAgUmVmUHRyPFNjcm9s
bGJhcj4gd2lkZ2V0OworICAgIGJvb2wgaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUgPSBzdHlsZSgp
LT5oYXNQc2V1ZG9TdHlsZShTQ1JPTExCQVIpOworICAgIGlmIChoYXNDdXN0b21TY3JvbGxiYXJT
dHlsZSkKKyAgICAgICAgd2lkZ2V0ID0gUmVuZGVyU2Nyb2xsYmFyOjpjcmVhdGVDdXN0b21TY3Jv
bGxiYXIoc2Nyb2xsYWJsZUFyZWEsIG9yaWVudGF0aW9uLCB0aGlzLT5ub2RlKCkpOworICAgIGVs
c2UKKyAgICAgICAgd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIoc2Ny
b2xsYWJsZUFyZWEsIG9yaWVudGF0aW9uLCBjb250cm9sU2l6ZSk7CisgICAgcmV0dXJuIHdpZGdl
dC5yZWxlYXNlKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTZWFyY2hGaWVsZC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNl
YXJjaEZpZWxkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjcwOGJmM2Q1YmI4ZTI2ZTI1N2YwYTQyYjc2MjgzYWFm
Yjg1MTE3NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTZWFyY2hGaWVsZC5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDcsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRw
Oi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBSZW5kZXJT
ZWFyY2hGaWVsZF9oCisjZGVmaW5lIFJlbmRlclNlYXJjaEZpZWxkX2gKKworI2luY2x1ZGUgIlBv
cHVwTWVudUNsaWVudC5oIgorI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEhUTUxJbnB1dEVsZW1lbnQ7CitjbGFz
cyBTZWFyY2hQb3B1cE1lbnU7CisKK2NsYXNzIFJlbmRlclNlYXJjaEZpZWxkIDogcHVibGljIFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZSwgcHJpdmF0ZSBQb3B1cE1lbnVDbGllbnQgeworcHVi
bGljOgorICAgIFJlbmRlclNlYXJjaEZpZWxkKE5vZGUqKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJT
ZWFyY2hGaWVsZCgpOworCisgICAgdm9pZCBhZGRTZWFyY2hSZXN1bHQoKTsKKyAgICB2b2lkIHN0
b3BTZWFyY2hFdmVudFRpbWVyKCk7CisKKyAgICBib29sIHBvcHVwSXNWaXNpYmxlKCkgY29uc3Qg
eyByZXR1cm4gbV9zZWFyY2hQb3B1cElzVmlzaWJsZTsgfQorICAgIHZvaWQgc2hvd1BvcHVwKCk7
CisgICAgdm9pZCBoaWRlUG9wdXAoKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIExheW91dFVu
aXQgY29tcHV0ZUhlaWdodExpbWl0KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lk
IGNlbnRlckNvbnRhaW5lcklmTmVlZGVkKFJlbmRlckJveCopIGNvbnN0IE9WRVJSSURFOworCisg
ICAgLy8gUG9wdXBNZW51Q2xpZW50IG1ldGhvZHMKKyAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFu
Z2VkKHVuc2lnbmVkIGxpc3RJbmRleCwgYm9vbCBmaXJlRXZlbnRzID0gdHJ1ZSkgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIHNlbGVjdGlvbkNoYW5nZWQodW5zaWduZWQsIGJvb2wpIE9WRVJS
SURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZWxlY3Rpb25DbGVhcmVkKCkgT1ZFUlJJREUgeyB9
CisgICAgdmlydHVhbCBTdHJpbmcgaXRlbVRleHQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdCBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIFN0cmluZyBpdGVtTGFiZWwodW5zaWduZWQgbGlzdEluZGV4
KSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFN0cmluZyBpdGVtSWNvbih1bnNpZ25lZCBs
aXN0SW5kZXgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgU3RyaW5nIGl0ZW1Ub29sVGlw
KHVuc2lnbmVkKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBTdHJpbmcoKTsgfQorICAgIHZpcnR1
YWwgU3RyaW5nIGl0ZW1BY2Nlc3NpYmlsaXR5VGV4dCh1bnNpZ25lZCkgY29uc3QgT1ZFUlJJREUg
eyByZXR1cm4gU3RyaW5nKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXRlbUlzRW5hYmxlZCh1bnNp
Z25lZCBsaXN0SW5kZXgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgUG9wdXBNZW51U3R5
bGUgaXRlbVN0eWxlKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmly
dHVhbCBQb3B1cE1lbnVTdHlsZSBtZW51U3R5bGUoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIGludCBjbGllbnRJbnNldExlZnQoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGlu
dCBjbGllbnRJbnNldFJpZ2h0KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBMYXlvdXRV
bml0IGNsaWVudFBhZGRpbmdMZWZ0KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBMYXlv
dXRVbml0IGNsaWVudFBhZGRpbmdSaWdodCgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwg
aW50IGxpc3RTaXplKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBpbnQgc2VsZWN0ZWRJ
bmRleCgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBwb3B1cERpZEhpZGUoKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgaXRlbUlzU2VwYXJhdG9yKHVuc2lnbmVkIGxpc3RJ
bmRleCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGl0ZW1Jc0xhYmVsKHVuc2ln
bmVkIGxpc3RJbmRleCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGl0ZW1Jc1Nl
bGVjdGVkKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBi
b29sIHNob3VsZFBvcE92ZXIoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQorICAg
IHZpcnR1YWwgYm9vbCB2YWx1ZVNob3VsZENoYW5nZU9uSG90VHJhY2soKSBjb25zdCBPVkVSUklE
RSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0RnJvbUl0ZW0odW5z
aWduZWQgbGlzdEluZGV4KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIEZvbnRTZWxlY3RvciogZm9u
dFNlbGVjdG9yKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBIb3N0V2luZG93KiBob3N0
V2luZG93KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNjcm9sbGJh
cj4gY3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhKiwgU2Nyb2xsYmFyT3JpZW50YXRpb24s
IFNjcm9sbGJhckNvbnRyb2xTaXplKSBPVkVSUklERTsKKworICAgIGJvb2wgbV9zZWFyY2hQb3B1
cElzVmlzaWJsZTsKKyAgICBSZWZQdHI8U2VhcmNoUG9wdXBNZW51PiBtX3NlYXJjaFBvcHVwOwor
ICAgIFZlY3RvcjxTdHJpbmc+IG1fcmVjZW50U2VhcmNoZXM7Cit9OworCitpbmxpbmUgUmVuZGVy
U2VhcmNoRmllbGQqIHRvUmVuZGVyU2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7
CisgICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc1RleHRGaWVsZCgpKTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8UmVuZGVyU2VhcmNoRmllbGQqPihvYmplY3QpOworfQorCisvLyBUaGlz
IHdpbGwgY2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCit2b2lkIHRvUmVu
ZGVyU2VhcmNoRmllbGQoY29uc3QgUmVuZGVyU2VhcmNoRmllbGQqKTsKKworfQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZS5jcHAKaW5kZXggODQ4ZmMyMTE5N2MyYTdkMjRmMjY0OGRmNzAyMDUyOWYzYzg4
MGQzYi4uMDg5ODdjM2EzZjk0MTJkYTJmMjZkNmQ2NjYwNWNjNTM1ZTFjY2UxMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZS5jcHAKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUg
IkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiSFRN
TElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhpdFRl
c3RSZXN1bHQuaCIKICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCkBAIC0zOSw3ICszOCw2
IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIu
aCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgotI2luY2x1ZGUgIlNlYXJjaFBvcHVwTWVudS5o
IgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNp
bmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCkBAIC03MCwxMCArNjgsOCBAQCBWaXNpYmxlUG9zaXRp
b24gUmVuZGVyVGV4dENvbnRyb2xJbm5lckJsb2NrOjpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExh
eW91dFBvaW50JgogCiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OlJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZShOb2RlKiBub2RlKQogICAgIDogUmVuZGVyVGV4dENvbnRyb2wobm9kZSkK
LSAgICAsIG1fc2VhcmNoUG9wdXBJc1Zpc2libGUoZmFsc2UpCiAgICAgLCBtX3Nob3VsZERyYXdD
YXBzTG9ja0luZGljYXRvcihmYWxzZSkKICAgICAsIG1fZGVzaXJlZElubmVyVGV4dEhlaWdodCgt
MSkKLSAgICAsIG1fc2VhcmNoUG9wdXAoMCkKIHsKICAgICBBU1NFUlQobm9kZS0+aXNIVE1MRWxl
bWVudCgpKTsKICAgICBBU1NFUlQobm9kZS0+dG9JbnB1dEVsZW1lbnQoKSk7CkBAIC04MSwyMCAr
NzcsNiBAQCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OlJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZShOb2RlKiBub2RlKQogCiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6On5SZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUoKQogewotICAgIGlmIChtX3NlYXJjaFBvcHVwKSB7Ci0g
ICAgICAgIG1fc2VhcmNoUG9wdXAtPnBvcHVwTWVudSgpLT5kaXNjb25uZWN0Q2xpZW50KCk7Ci0g
ICAgICAgIG1fc2VhcmNoUG9wdXAgPSAwOwotICAgIH0KLX0KLQotaW5saW5lIEhUTUxFbGVtZW50
KiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNvbnRhaW5lckVsZW1lbnQoKSBjb25zdAot
ewotICAgIHJldHVybiBpbnB1dEVsZW1lbnQoKS0+Y29udGFpbmVyRWxlbWVudCgpOwotfQotCi1p
bmxpbmUgSFRNTEVsZW1lbnQqIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aW5uZXJCbG9j
a0VsZW1lbnQoKSBjb25zdAotewotICAgIHJldHVybiBpbnB1dEVsZW1lbnQoKS0+aW5uZXJCbG9j
a0VsZW1lbnQoKTsKIH0KIAogaW5saW5lIEhUTUxFbGVtZW50KiBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6OmlubmVyU3BpbkJ1dHRvbkVsZW1lbnQoKSBjb25zdApAQCAtMTE4LDcyICsxMDAs
NiBAQCBSZW5kZXJTdHlsZSogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp0ZXh0QmFzZVN0
eWxlKCkgY29uc3QKICAgICByZXR1cm4gaW5uZXJCbG9jayA/IGlubmVyQmxvY2stPnJlbmRlcmVy
KCktPnN0eWxlKCkgOiBzdHlsZSgpOwogfQogCi12b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZTo6YWRkU2VhcmNoUmVzdWx0KCkKLXsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9
IGlucHV0RWxlbWVudCgpOwotICAgIGlmIChpbnB1dC0+bWF4UmVzdWx0cygpIDw9IDApCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFN0cmluZyB2YWx1ZSA9IGlucHV0LT52YWx1ZSgpOwotICAgIGlm
ICh2YWx1ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNldHRpbmdzKiBzZXR0
aW5ncyA9IGRvY3VtZW50KCktPnNldHRpbmdzKCk7Ci0gICAgaWYgKCFzZXR0aW5ncyB8fCBzZXR0
aW5ncy0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
bnQgc2l6ZSA9IHN0YXRpY19jYXN0PGludD4obV9yZWNlbnRTZWFyY2hlcy5zaXplKCkpOwotICAg
IGZvciAoaW50IGkgPSBzaXplIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgaWYgKG1fcmVj
ZW50U2VhcmNoZXNbaV0gPT0gdmFsdWUpCi0gICAgICAgICAgICBtX3JlY2VudFNlYXJjaGVzLnJl
bW92ZShpKTsKLSAgICB9Ci0KLSAgICBtX3JlY2VudFNlYXJjaGVzLmluc2VydCgwLCB2YWx1ZSk7
Ci0gICAgd2hpbGUgKHN0YXRpY19jYXN0PGludD4obV9yZWNlbnRTZWFyY2hlcy5zaXplKCkpID4g
aW5wdXQtPm1heFJlc3VsdHMoKSkKLSAgICAgICAgbV9yZWNlbnRTZWFyY2hlcy5yZW1vdmVMYXN0
KCk7Ci0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUgPSBhdXRvc2F2ZU5hbWUoKTsKLSAg
ICBpZiAoIW1fc2VhcmNoUG9wdXApCi0gICAgICAgIG1fc2VhcmNoUG9wdXAgPSBkb2N1bWVudCgp
LT5wYWdlKCktPmNocm9tZSgpLT5jcmVhdGVTZWFyY2hQb3B1cE1lbnUodGhpcyk7Ci0KLSAgICBt
X3NlYXJjaFBvcHVwLT5zYXZlUmVjZW50U2VhcmNoZXMobmFtZSwgbV9yZWNlbnRTZWFyY2hlcyk7
Ci19Ci0KLXZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzaG93UG9wdXAoKQotewot
ICAgIGlmIChtX3NlYXJjaFBvcHVwSXNWaXNpYmxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAoIW1fc2VhcmNoUG9wdXApCi0gICAgICAgIG1fc2VhcmNoUG9wdXAgPSBkb2N1bWVudCgpLT5w
YWdlKCktPmNocm9tZSgpLT5jcmVhdGVTZWFyY2hQb3B1cE1lbnUodGhpcyk7Ci0KLSAgICBpZiAo
IW1fc2VhcmNoUG9wdXAtPmVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zZWFy
Y2hQb3B1cElzVmlzaWJsZSA9IHRydWU7Ci0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUg
PSBhdXRvc2F2ZU5hbWUoKTsKLSAgICBtX3NlYXJjaFBvcHVwLT5sb2FkUmVjZW50U2VhcmNoZXMo
bmFtZSwgbV9yZWNlbnRTZWFyY2hlcyk7Ci0KLSAgICAvLyBUcmltIHRoZSByZWNlbnQgc2VhcmNo
ZXMgbGlzdCBpZiB0aGUgbWF4aW11bSBzaXplIGhhcyBjaGFuZ2VkIHNpbmNlIHdlIGxhc3Qgc2F2
ZWQuCi0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBpbnB1dEVsZW1lbnQoKTsKLSAgICBp
ZiAoc3RhdGljX2Nhc3Q8aW50PihtX3JlY2VudFNlYXJjaGVzLnNpemUoKSkgPiBpbnB1dC0+bWF4
UmVzdWx0cygpKSB7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIG1fcmVjZW50U2VhcmNoZXMu
cmVtb3ZlTGFzdCgpOwotICAgICAgICB9IHdoaWxlIChzdGF0aWNfY2FzdDxpbnQ+KG1fcmVjZW50
U2VhcmNoZXMuc2l6ZSgpKSA+IGlucHV0LT5tYXhSZXN1bHRzKCkpOwotCi0gICAgICAgIG1fc2Vh
cmNoUG9wdXAtPnNhdmVSZWNlbnRTZWFyY2hlcyhuYW1lLCBtX3JlY2VudFNlYXJjaGVzKTsKLSAg
ICB9Ci0KLSAgICBtX3NlYXJjaFBvcHVwLT5wb3B1cE1lbnUoKS0+c2hvdyhwaXhlbFNuYXBwZWRJ
bnRSZWN0KGFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkpLCBkb2N1bWVudCgpLT52aWV3KCksIC0x
KTsKLX0KLQotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmhpZGVQb3B1cCgpCi17
Ci0gICAgaWYgKG1fc2VhcmNoUG9wdXApCi0gICAgICAgIG1fc2VhcmNoUG9wdXAtPnBvcHVwTWVu
dSgpLT5oaWRlKCk7Ci19Ci0KIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpwYWlu
dChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQog
ewogICAgIFJlbmRlclRleHRDb250cm9sOjpwYWludChwYWludEluZm8sIHBhaW50T2Zmc2V0KTsK
QEAgLTIwMCw2ICsxMTYsMTEgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnBh
aW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYKICAgICB9CiB9CiAK
K0xheW91dFVuaXQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjb21wdXRlSGVpZ2h0TGlt
aXQoKSBjb25zdAoreworICAgIHJldHVybiBjb250YWluZXJFbGVtZW50KCkgPyBjb250ZW50SGVp
Z2h0KCkgOiBoZWlnaHQoKTsKK30KKwogdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6
OmxheW91dCgpCiB7CiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZW1vdmUgdGhlIGhlaWdodC1y
ZWxhdGVkIGhhY2tzIGluIGxheW91dCgpIGFuZApAQCAtMjI1LDcgKzE0Niw3IEBAIHZvaWQgUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsYXlvdXQoKQogICAgIExheW91dFVuaXQgZGVzaXJl
ZEhlaWdodCA9IHRleHRCbG9ja0hlaWdodCgpOwogICAgIExheW91dFVuaXQgY3VycmVudEhlaWdo
dCA9IGlubmVyVGV4dFJlbmRlcmVyLT5oZWlnaHQoKTsKIAotICAgIExheW91dFVuaXQgaGVpZ2h0
TGltaXQgPSAoaW5wdXRFbGVtZW50KCktPmlzU2VhcmNoRmllbGQoKSB8fCAhY29udGFpbmVyKSA/
IGhlaWdodCgpIDogY29udGVudEhlaWdodCgpOworICAgIExheW91dFVuaXQgaGVpZ2h0TGltaXQg
PSBjb21wdXRlSGVpZ2h0TGltaXQoKTsKICAgICBpZiAoY3VycmVudEhlaWdodCA+IGhlaWdodExp
bWl0KSB7CiAgICAgICAgIGlmIChkZXNpcmVkSGVpZ2h0ICE9IGN1cnJlbnRIZWlnaHQpCiAgICAg
ICAgICAgICBzZXROZWVkc0xheW91dCh0cnVlLCBNYXJrT25seVRoaXMpOwpAQCAtMjU4LDEyICsx
NzksOCBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5b3V0KCkKICAgICBp
ZiAoIWNvbnRhaW5lciAmJiBjdXJyZW50SGVpZ2h0ICE9IGNvbnRlbnRIZWlnaHQoKSkgewogICAg
ICAgICBMYXlvdXRVbml0IGhlaWdodERpZmYgPSBjdXJyZW50SGVpZ2h0IC0gY29udGVudEhlaWdo
dCgpOwogICAgICAgICBpbm5lclRleHRSZW5kZXJlci0+c2V0WShpbm5lclRleHRSZW5kZXJlci0+
eSgpIC0gKGhlaWdodERpZmYgLyAyICsgbGF5b3V0TW9kKGhlaWdodERpZmYsIDIpKSk7Ci0gICAg
fSBlbHNlIGlmIChpbnB1dEVsZW1lbnQoKS0+aXNTZWFyY2hGaWVsZCgpICYmIGNvbnRhaW5lclJl
bmRlcmVyICYmIGNvbnRhaW5lclJlbmRlcmVyLT5oZWlnaHQoKSA+IGNvbnRlbnRIZWlnaHQoKSkg
ewotICAgICAgICAvLyBBIHF1aXJrIGZvciBmaW5kLWluLXBhZ2UgYm94IG9uIFNhZmFyaSBXaW5k
b3dzLgotICAgICAgICAvLyBodHRwOi8vd2Via2l0Lm9yZy9iLzYzMTU3Ci0gICAgICAgIExheW91
dFVuaXQgaGVpZ2h0RGlmZiA9IGNvbnRhaW5lclJlbmRlcmVyLT5oZWlnaHQoKSAtIGNvbnRlbnRI
ZWlnaHQoKTsKLSAgICAgICAgY29udGFpbmVyUmVuZGVyZXItPnNldFkoY29udGFpbmVyUmVuZGVy
ZXItPnkoKSAtIChoZWlnaHREaWZmIC8gMiArIGxheW91dE1vZChoZWlnaHREaWZmLCAyKSkpOwot
ICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgY2VudGVyQ29udGFpbmVySWZOZWVkZWQoY29udGFp
bmVyUmVuZGVyZXIpOwogCiAgICAgLy8gSWdub3JlcyB0aGUgcGFkZGluZ3MgZm9yIHRoZSBpbm5l
ciBzcGluIGJ1dHRvbi4KICAgICBpZiAoUmVuZGVyQm94KiBpbm5lclNwaW5Cb3ggPSBpbm5lclNw
aW5CdXR0b25FbGVtZW50KCkgPyBpbm5lclNwaW5CdXR0b25FbGVtZW50KCktPnJlbmRlckJveCgp
IDogMCkgewpAQCAtNDUzLDkgKzM3MCw2IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lOjp1cGRhdGVGcm9tRWxlbWVudCgpCiAKICAgICBpZiAoY2FuY2VsQnV0dG9uRWxlbWVudCgp
KQogICAgICAgICB1cGRhdGVDYW5jZWxCdXR0b25WaXNpYmlsaXR5KCk7Ci0KLSAgICBpZiAobV9z
ZWFyY2hQb3B1cElzVmlzaWJsZSkKLSAgICAgICAgbV9zZWFyY2hQb3B1cC0+cG9wdXBNZW51KCkt
PnVwZGF0ZUZyb21FbGVtZW50KCk7CiB9CiAKIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZTo6Y3JlYXRlSW5uZXJUZXh0U3R5bGUoY29uc3QgUmVuZGVy
U3R5bGUqIHN0YXJ0U3R5bGUpIGNvbnN0CkBAIC01MjgsMTU2ICs0NDIsNiBAQCBjb25zdCBBdG9t
aWNTdHJpbmcmIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6YXV0b3NhdmVOYW1lKCkgY29u
c3QKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSktPmdldEF0dHJpYnV0
ZShhdXRvc2F2ZUF0dHIpOwogfQogCi0vLyBQb3B1cE1lbnVDbGllbnQgbWV0aG9kcwotdm9pZCBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnZhbHVlQ2hhbmdlZCh1bnNpZ25lZCBsaXN0SW5k
ZXgsIGJvb2wgZmlyZUV2ZW50cykKLXsKLSAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihsaXN0
SW5kZXgpIDwgbGlzdFNpemUoKSk7Ci0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBpbnB1
dEVsZW1lbnQoKTsKLSAgICBpZiAoc3RhdGljX2Nhc3Q8aW50PihsaXN0SW5kZXgpID09IChsaXN0
U2l6ZSgpIC0gMSkpIHsKLSAgICAgICAgaWYgKGZpcmVFdmVudHMpIHsKLSAgICAgICAgICAgIG1f
cmVjZW50U2VhcmNoZXMuY2xlYXIoKTsKLSAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZSA9IGF1dG9zYXZlTmFtZSgpOwotICAgICAgICAgICAgaWYgKCFuYW1lLmlzRW1wdHkoKSkg
ewotICAgICAgICAgICAgICAgIGlmICghbV9zZWFyY2hQb3B1cCkKLSAgICAgICAgICAgICAgICAg
ICAgbV9zZWFyY2hQb3B1cCA9IGRvY3VtZW50KCktPnBhZ2UoKS0+Y2hyb21lKCktPmNyZWF0ZVNl
YXJjaFBvcHVwTWVudSh0aGlzKTsKLSAgICAgICAgICAgICAgICBtX3NlYXJjaFBvcHVwLT5zYXZl
UmVjZW50U2VhcmNoZXMobmFtZSwgbV9yZWNlbnRTZWFyY2hlcyk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpbnB1dC0+c2V0VmFsdWUoaXRlbVRleHQo
bGlzdEluZGV4KSk7Ci0gICAgICAgIGlmIChmaXJlRXZlbnRzKQotICAgICAgICAgICAgaW5wdXQt
Pm9uU2VhcmNoKCk7Ci0gICAgICAgIGlucHV0LT5zZWxlY3QoKTsKLSAgICB9Ci19Ci0KLVN0cmlu
ZyBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Oml0ZW1UZXh0KHVuc2lnbmVkIGxpc3RJbmRl
eCkgY29uc3QKLXsKLSAgICBpbnQgc2l6ZSA9IGxpc3RTaXplKCk7Ci0gICAgaWYgKHNpemUgPT0g
MSkgewotICAgICAgICBBU1NFUlQoIWxpc3RJbmRleCk7Ci0gICAgICAgIHJldHVybiBzZWFyY2hN
ZW51Tm9SZWNlbnRTZWFyY2hlc1RleHQoKTsKLSAgICB9Ci0gICAgaWYgKCFsaXN0SW5kZXgpCi0g
ICAgICAgIHJldHVybiBzZWFyY2hNZW51UmVjZW50U2VhcmNoZXNUZXh0KCk7Ci0gICAgaWYgKGl0
ZW1Jc1NlcGFyYXRvcihsaXN0SW5kZXgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAg
aWYgKHN0YXRpY19jYXN0PGludD4obGlzdEluZGV4KSA9PSAoc2l6ZSAtIDEpKQotICAgICAgICBy
ZXR1cm4gc2VhcmNoTWVudUNsZWFyUmVjZW50U2VhcmNoZXNUZXh0KCk7Ci0gICAgcmV0dXJuIG1f
cmVjZW50U2VhcmNoZXNbbGlzdEluZGV4IC0gMV07Ci19Ci0KLVN0cmluZyBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6Oml0ZW1MYWJlbCh1bnNpZ25lZCkgY29uc3QKLXsKLSAgICByZXR1cm4g
U3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Oml0ZW1J
Y29uKHVuc2lnbmVkKSBjb25zdAotewotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotYm9vbCBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Oml0ZW1Jc0VuYWJsZWQodW5zaWduZWQgbGlzdElu
ZGV4KSBjb25zdAotewotICAgICBpZiAoIWxpc3RJbmRleCB8fCBpdGVtSXNTZXBhcmF0b3IobGlz
dEluZGV4KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1Q
b3B1cE1lbnVTdHlsZSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Oml0ZW1TdHlsZSh1bnNp
Z25lZCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWVudVN0eWxlKCk7Ci19Ci0KLVBvcHVwTWVudVN0
eWxlIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bWVudVN0eWxlKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gUG9wdXBNZW51U3R5bGUoc3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENT
U1Byb3BlcnR5Q29sb3IpLCBzdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kQ29sb3IpLCBzdHlsZSgpLT5mb250KCksIHN0eWxlKCktPnZpc2liaWxpdHko
KSA9PSBWSVNJQkxFLAotICAgICAgICBzdHlsZSgpLT5kaXNwbGF5KCkgPT0gTk9ORSwgc3R5bGUo
KS0+dGV4dEluZGVudCgpLCBzdHlsZSgpLT5kaXJlY3Rpb24oKSwgaXNPdmVycmlkZShzdHlsZSgp
LT51bmljb2RlQmlkaSgpKSk7Ci19Ci0KLWludCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6
OmNsaWVudEluc2V0TGVmdCgpIGNvbnN0Ci17Ci0gICAgLy8gSW5zZXQgdGhlIG1lbnUgYnkgdGhl
IHJhZGl1cyBvZiB0aGUgY2FwIG9uIHRoZSBsZWZ0IHNvIHRoYXQKLSAgICAvLyBpdCBvbmx5IHJ1
bnMgYWxvbmcgdGhlIHN0cmFpZ2h0IHBhcnQgb2YgdGhlIGJlemVsLgotICAgIHJldHVybiBoZWln
aHQoKSAvIDI7Ci19Ci0KLWludCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNsaWVudElu
c2V0UmlnaHQoKSBjb25zdAotewotICAgIC8vIEluc2V0IHRoZSBtZW51IGJ5IHRoZSByYWRpdXMg
b2YgdGhlIGNhcCBvbiB0aGUgcmlnaHQgc28gdGhhdAotICAgIC8vIGl0IG9ubHkgcnVucyBhbG9u
ZyB0aGUgc3RyYWlnaHQgcGFydCBvZiB0aGUgYmV6ZWwgKHVubGVzcyBpdCBuZWVkcwotICAgIC8v
IHRvIGJlIHdpZGVyKS4KLSAgICByZXR1cm4gaGVpZ2h0KCkgLyAyOwotfQotCi1MYXlvdXRVbml0
IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y2xpZW50UGFkZGluZ0xlZnQoKSBjb25zdAot
ewotICAgIExheW91dFVuaXQgcGFkZGluZyA9IHBhZGRpbmdMZWZ0KCk7Ci0gICAgaWYgKFJlbmRl
ckJveCogYm94ID0gaW5uZXJCbG9ja0VsZW1lbnQoKSA/IGlubmVyQmxvY2tFbGVtZW50KCktPnJl
bmRlckJveCgpIDogMCkKLSAgICAgICAgcGFkZGluZyArPSBib3gtPngoKTsKLSAgICByZXR1cm4g
cGFkZGluZzsKLX0KLQotTGF5b3V0VW5pdCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNs
aWVudFBhZGRpbmdSaWdodCgpIGNvbnN0Ci17Ci0gICAgTGF5b3V0VW5pdCBwYWRkaW5nID0gcGFk
ZGluZ1JpZ2h0KCk7Ci0gICAgaWYgKFJlbmRlckJveCogY29udGFpbmVyQm94ID0gY29udGFpbmVy
RWxlbWVudCgpID8gY29udGFpbmVyRWxlbWVudCgpLT5yZW5kZXJCb3goKSA6IDApIHsKLSAgICAg
ICAgaWYgKFJlbmRlckJveCogaW5uZXJCbG9ja0JveCA9IGlubmVyQmxvY2tFbGVtZW50KCkgPyBp
bm5lckJsb2NrRWxlbWVudCgpLT5yZW5kZXJCb3goKSA6IDApCi0gICAgICAgICAgICBwYWRkaW5n
ICs9IGNvbnRhaW5lckJveC0+d2lkdGgoKSAtIChpbm5lckJsb2NrQm94LT54KCkgKyBpbm5lckJs
b2NrQm94LT53aWR0aCgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHBhZGRpbmc7Ci19Ci0KLWludCBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Omxpc3RTaXplKCkgY29uc3QKLXsKLSAgICAvLyBJ
ZiB0aGVyZSBhcmUgbm8gcmVjZW50IHNlYXJjaGVzLCB0aGVuIG91ciBtZW51IHdpbGwgaGF2ZSAx
ICJObyByZWNlbnQgc2VhcmNoZXMiIGl0ZW0uCi0gICAgaWYgKCFtX3JlY2VudFNlYXJjaGVzLnNp
emUoKSkKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgLy8gT3RoZXJ3aXNlLCBsZWF2ZSByb29tIGlu
IHRoZSBtZW51IGZvciBhIGhlYWRlciwgYSBzZXBhcmF0b3IsIGFuZCB0aGUgIkNsZWFyIHJlY2Vu
dCBzZWFyY2hlcyIgaXRlbS4KLSAgICByZXR1cm4gbV9yZWNlbnRTZWFyY2hlcy5zaXplKCkgKyAz
OwotfQotCi1pbnQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzZWxlY3RlZEluZGV4KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gLTE7Ci19Ci0KLXZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjpwb3B1cERpZEhpZGUoKQotewotICAgIG1fc2VhcmNoUG9wdXBJc1Zpc2libGUgPSBm
YWxzZTsKLX0KLQotYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Oml0ZW1Jc1NlcGFy
YXRvcih1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0Ci17Ci0gICAgLy8gVGhlIHNlcGFyYXRvciB3
aWxsIGJlIHRoZSBzZWNvbmQgdG8gbGFzdCBpdGVtIGluIG91ciBsaXN0LgotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxpbnQ+KGxpc3RJbmRleCkgPT0gKGxpc3RTaXplKCkgLSAyKTsKLX0KLQotYm9v
bCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Oml0ZW1Jc0xhYmVsKHVuc2lnbmVkIGxpc3RJ
bmRleCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGlzdEluZGV4ID09IDA7Ci19Ci0KLWJvb2wgUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppdGVtSXNTZWxlY3RlZCh1bnNpZ25lZCkgY29uc3QK
LXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lOjpzZXRUZXh0RnJvbUl0ZW0odW5zaWduZWQgbGlzdEluZGV4KQotewotICAgIGlucHV0RWxl
bWVudCgpLT5zZXRWYWx1ZShpdGVtVGV4dChsaXN0SW5kZXgpKTsKLX0KLQotRm9udFNlbGVjdG9y
KiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmZvbnRTZWxlY3RvcigpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGRvY3VtZW50KCktPnN0eWxlUmVzb2x2ZXIoKS0+Zm9udFNlbGVjdG9yKCk7Ci19
Ci0KLUhvc3RXaW5kb3cqIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aG9zdFdpbmRvdygp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRvY3VtZW50KCktPnZpZXcoKS0+aG9zdFdpbmRvdygpOwot
fQotCiB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6YXV0b3Njcm9sbCgpCiB7CiAg
ICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gaW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJCb3goKS0+
bGF5ZXIoKTsKQEAgLTc0MSwxNyArNTA1LDYgQEAgYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmU6OmxvZ2ljYWxTY3JvbGwoU2Nyb2xsTG9naWNhbERpcmVjdGlvbiBkaXJlY3Rpb24KICAg
ICByZXR1cm4gUmVuZGVyQmxvY2s6OmxvZ2ljYWxTY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0
eSwgbXVsdGlwbGllciwgc3RvcE5vZGUpOwogfQogCi1QYXNzUmVmUHRyPFNjcm9sbGJhcj4gUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEq
IHNjcm9sbGFibGVBcmVhLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xs
YmFyQ29udHJvbFNpemUgY29udHJvbFNpemUpCi17Ci0gICAgUmVmUHRyPFNjcm9sbGJhcj4gd2lk
Z2V0OwotICAgIGJvb2wgaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUgPSBzdHlsZSgpLT5oYXNQc2V1
ZG9TdHlsZShTQ1JPTExCQVIpOwotICAgIGlmIChoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSkKLSAg
ICAgICAgd2lkZ2V0ID0gUmVuZGVyU2Nyb2xsYmFyOjpjcmVhdGVDdXN0b21TY3JvbGxiYXIoc2Ny
b2xsYWJsZUFyZWEsIG9yaWVudGF0aW9uLCB0aGlzLT5ub2RlKCkpOwotICAgIGVsc2UKLSAgICAg
ICAgd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIoc2Nyb2xsYWJsZUFy
ZWEsIG9yaWVudGF0aW9uLCBjb250cm9sU2l6ZSk7Ci0gICAgcmV0dXJuIHdpZGdldC5yZWxlYXNl
KCk7Ci19Ci0KIEhUTUxJbnB1dEVsZW1lbnQqIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6
aW5wdXRFbGVtZW50KCkgY29uc3QKIHsKICAgICByZXR1cm4gbm9kZSgpLT50b0lucHV0RWxlbWVu
dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZS5oCmluZGV4IDZlMjFjODU2YzEwZmE5ZmJhNDM2YzA2Zjc0OWMxNGUxZTJh
ODBiYTYuLjcxZmE5ODAyZjM3ZGNlYThhYzYxZTM3NzdhZmEyYTE4MDhkNTFlOWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lLmgKQEAgLTIzLDE1ICsyMywxNCBAQAogI2lmbmRlZiBSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmVfaAogI2RlZmluZSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmVfaAogCi0jaW5jbHVk
ZSAiUG9wdXBNZW51Q2xpZW50LmgiCisjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2lu
Y2x1ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgSFRNTElucHV0RWxlbWVudDsKLWNsYXNzIFNlYXJjaFBvcHVwTWVudTsKIAotY2xhc3MgUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lIDogcHVibGljIFJlbmRlclRleHRDb250cm9sLCBwcml2
YXRlIFBvcHVwTWVudUNsaWVudCB7CitjbGFzcyBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUg
OiBwdWJsaWMgUmVuZGVyVGV4dENvbnRyb2wgewogcHVibGljOgogICAgIFJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZShOb2RlKik7CiAgICAgdmlydHVhbCB+UmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lKCk7CkBAIC00MCwxNCArMzksMTggQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8UmVu
ZGVyU3R5bGU+IGNyZWF0ZUlubmVyQmxvY2tTdHlsZShjb25zdCBSZW5kZXJTdHlsZSogc3RhcnRT
dHlsZSkgY29uc3Q7CiAgICAgdm9pZCB1cGRhdGVDYW5jZWxCdXR0b25WaXNpYmlsaXR5KCkgY29u
c3Q7CiAKLSAgICB2b2lkIGFkZFNlYXJjaFJlc3VsdCgpOwotICAgIHZvaWQgc3RvcFNlYXJjaEV2
ZW50VGltZXIoKTsKKyAgICB2b2lkIGNhcHNMb2NrU3RhdGVNYXlIYXZlQ2hhbmdlZCgpOwogCi0g
ICAgYm9vbCBwb3B1cElzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VhcmNoUG9wdXBJc1Zp
c2libGU7IH0KLSAgICB2b2lkIHNob3dQb3B1cCgpOwotICAgIHZvaWQgaGlkZVBvcHVwKCk7Citw
cm90ZWN0ZWQ6CisgICAgdmlydHVhbCBMYXlvdXRVbml0IGNvbXB1dGVIZWlnaHRMaW1pdCgpIGNv
bnN0OworICAgIHZpcnR1YWwgdm9pZCBjZW50ZXJDb250YWluZXJJZk5lZWRlZChSZW5kZXJCb3gq
KSBjb25zdCB7IH0KIAotICAgIHZvaWQgY2Fwc0xvY2tTdGF0ZU1heUhhdmVDaGFuZ2VkKCk7Cisg
ICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50KCkgY29uc3Q7CisKKyAgICBIVE1MRWxl
bWVudCogY29udGFpbmVyRWxlbWVudCgpIGNvbnN0OworICAgIEhUTUxFbGVtZW50KiBpbm5lckJs
b2NrRWxlbWVudCgpIGNvbnN0OworCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdXRvc2F2ZU5h
bWUoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaGFzQ29udHJvbENsaXAo
KSBjb25zdDsKQEAgLTgzLDUyICs4NiwyNSBAQCBwcml2YXRlOgogCiAgICAgRVZpc2liaWxpdHkg
dmlzaWJpbGl0eUZvckNhbmNlbEJ1dHRvbigpIGNvbnN0OwogICAgIGJvb2wgdGV4dFNob3VsZEJl
VHJ1bmNhdGVkKCkgY29uc3Q7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdXRvc2F2ZU5hbWUo
KSBjb25zdDsKLQotICAgIC8vIFBvcHVwTWVudUNsaWVudCBtZXRob2RzCi0gICAgdmlydHVhbCB2
b2lkIHZhbHVlQ2hhbmdlZCh1bnNpZ25lZCBsaXN0SW5kZXgsIGJvb2wgZmlyZUV2ZW50cyA9IHRy
dWUpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKHVuc2lnbmVk
LCBib29sKSBPVkVSUklERSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0aW9uQ2xlYXJlZCgp
IE9WRVJSSURFIHsgfQotICAgIHZpcnR1YWwgU3RyaW5nIGl0ZW1UZXh0KHVuc2lnbmVkIGxpc3RJ
bmRleCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBTdHJpbmcgaXRlbUxhYmVsKHVuc2ln
bmVkIGxpc3RJbmRleCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBTdHJpbmcgaXRlbUlj
b24odW5zaWduZWQgbGlzdEluZGV4KSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFN0cmlu
ZyBpdGVtVG9vbFRpcCh1bnNpZ25lZCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gU3RyaW5nKCk7
IH0KLSAgICB2aXJ0dWFsIFN0cmluZyBpdGVtQWNjZXNzaWJpbGl0eVRleHQodW5zaWduZWQpIGNv
bnN0IE9WRVJSSURFIHsgcmV0dXJuIFN0cmluZygpOyB9Ci0gICAgdmlydHVhbCBib29sIGl0ZW1J
c0VuYWJsZWQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFs
IFBvcHVwTWVudVN0eWxlIGl0ZW1TdHlsZSh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0IE9WRVJS
SURFOwotICAgIHZpcnR1YWwgUG9wdXBNZW51U3R5bGUgbWVudVN0eWxlKCkgY29uc3QgT1ZFUlJJ
REU7Ci0gICAgdmlydHVhbCBpbnQgY2xpZW50SW5zZXRMZWZ0KCkgY29uc3QgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCBpbnQgY2xpZW50SW5zZXRSaWdodCgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZp
cnR1YWwgTGF5b3V0VW5pdCBjbGllbnRQYWRkaW5nTGVmdCgpIGNvbnN0IE9WRVJSSURFOwotICAg
IHZpcnR1YWwgTGF5b3V0VW5pdCBjbGllbnRQYWRkaW5nUmlnaHQoKSBjb25zdCBPVkVSUklERTsK
LSAgICB2aXJ0dWFsIGludCBsaXN0U2l6ZSgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwg
aW50IHNlbGVjdGVkSW5kZXgoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgcG9w
dXBEaWRIaWRlKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBib29sIGl0ZW1Jc1NlcGFyYXRvcih1
bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCBpdGVt
SXNMYWJlbCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwg
Ym9vbCBpdGVtSXNTZWxlY3RlZCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0IE9WRVJSSURFOwot
ICAgIHZpcnR1YWwgYm9vbCBzaG91bGRQb3BPdmVyKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4g
ZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgdmFsdWVTaG91bGRDaGFuZ2VPbkhvdFRyYWNrKCkg
Y29uc3QgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4
dEZyb21JdGVtKHVuc2lnbmVkIGxpc3RJbmRleCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBGb250
U2VsZWN0b3IqIGZvbnRTZWxlY3RvcigpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgSG9z
dFdpbmRvdyogaG9zdFdpbmRvdygpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxTY3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSosIFNjcm9sbGJh
ck9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSkgT1ZFUlJJREU7CiAKLSAgICBIVE1M
SW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQoKSBjb25zdDsKLQotICAgIEhUTUxFbGVtZW50KiBj
b250YWluZXJFbGVtZW50KCkgY29uc3Q7Ci0gICAgSFRNTEVsZW1lbnQqIGlubmVyQmxvY2tFbGVt
ZW50KCkgY29uc3Q7CiAgICAgSFRNTEVsZW1lbnQqIGlubmVyU3BpbkJ1dHRvbkVsZW1lbnQoKSBj
b25zdDsKICAgICBIVE1MRWxlbWVudCogcmVzdWx0c0J1dHRvbkVsZW1lbnQoKSBjb25zdDsKICAg
ICBIVE1MRWxlbWVudCogY2FuY2VsQnV0dG9uRWxlbWVudCgpIGNvbnN0OwogCi0gICAgYm9vbCBt
X3NlYXJjaFBvcHVwSXNWaXNpYmxlOwogICAgIGJvb2wgbV9zaG91bGREcmF3Q2Fwc0xvY2tJbmRp
Y2F0b3I7CiAgICAgTGF5b3V0VW5pdCBtX2Rlc2lyZWRJbm5lclRleHRIZWlnaHQ7Ci0gICAgUmVm
UHRyPFNlYXJjaFBvcHVwTWVudT4gbV9zZWFyY2hQb3B1cDsKLSAgICBWZWN0b3I8U3RyaW5nPiBt
X3JlY2VudFNlYXJjaGVzOwogfTsKIAoraW5saW5lIEhUTUxFbGVtZW50KiBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OmNvbnRhaW5lckVsZW1lbnQoKSBjb25zdAoreworICAgIHJldHVybiBp
bnB1dEVsZW1lbnQoKS0+Y29udGFpbmVyRWxlbWVudCgpOworfQorCitpbmxpbmUgSFRNTEVsZW1l
bnQqIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aW5uZXJCbG9ja0VsZW1lbnQoKSBjb25z
dAoreworICAgIHJldHVybiBpbnB1dEVsZW1lbnQoKS0+aW5uZXJCbG9ja0VsZW1lbnQoKTsKK30K
KwogaW5saW5lIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZSogdG9SZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmUoUmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgQVNTRVJUKCFvYmplY3Qg
fHwgb2JqZWN0LT5pc1RleHRGaWVsZCgpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147545</attachid>
            <date>2012-06-14 03:30:07 -0700</date>
            <delta_ts>2012-06-14 21:15:40 -0700</delta_ts>
            <desc>Patch 2</desc>
            <filename>bug-88980-20120614193006.patch</filename>
            <type>text/plain</type>
            <size>48540</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwMjk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmUyNzU4NTg2MTkxMTBl
Yjc1ZGE0NGUyODUxYWI0YjM3YmQzNGY4Zi4uNzE2NDNkZDQxMTI5NDRmMzMyYjNhOWRlYWRjMjUz
OTA5Njk4ODgzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc0IEBACisyMDEyLTA2LTE0ICBZb3No
aWZ1bWkgSW5vdWUgIDx5b3NpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Zvcm1zXSBNb3Zl
IHNlYXJjaCBmaWVsZCByZWxhdGVkIGNvZGUgdG8gUmVuZGVyU2VhcmNoRmllbGQgZnJvbSBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTg4OTgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtb3ZlcyBzZWFyY2ggZmllbGQgcmVsYXRlZCBtZXRo
b2RzIGluIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZQorICAgICAgICB0byBuZXcgY2xhc3Mg
UmVuZGVyU2VhcmNoRmllbGQgYW5kIGNoYW5nZXMgcmVsYXRlZCBjbGFzc2VzIHRvIHVzZQorICAg
ICAgICBSZW5kZXJTZWFyY2hGaWVsZC4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgcGF0
Y2ggZG9lc24ndCBjaGFuZ2UgYmVoYXZpb3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDog
QWRkZWQgbmV3IGZpbGUgUmVuZGVyU2VhcmNoRmllbGQuY3BwCisgICAgICAgICogR05VbWFrZWZp
bGUubGlzdC5hbTogQWRkZWQgbmV3IGZpbGUgUmVuZGVyU2VhcmNoRmllbGQuY3BwIGFuZCBSZW5k
ZXJTZWFyY2hGaWVsZC5oCisgICAgICAgICogVGFyZ2V0LnByaTogZGl0dG8KKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6IGRpaXRvCisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2o6IGRpdHRvCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBk
aXR0bworICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MSW5wdXRFbGVtZW50OjphZGRTZWFyY2hSZXN1bHQpOiBDaGFuZ2VkIHRvIHVzZSBS
ZW5kZXJTZWFyY2hGaWVsZC4KKyAgICAgICAgKiBodG1sL1NlYXJjaElucHV0VHlwZS5jcHA6Cisg
ICAgICAgICogaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dEZpZWxkSW5wdXRUeXBlOjpjcmVhdGVSZW5kZXJlcik6IENoYW5nZWQgdG8gY3JlYXRlIHJl
bmRlciBvYmplY3QgYnkgaW5wdXQgdHlwZS4KKyAgICAgICAgKiBodG1sL3NoYWRvdy9UZXh0Q29u
dHJvbElubmVyRWxlbWVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoRmllbGRSZXN1
bHRzQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlcmluZ0FsbEluT25lLmNwcDogQWRkZWQgUmVuZGVyU2VhcmNoRmllbGQuY3BwLgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OlJlbmRlclNlYXJjaEZpZWxkKTogTW92ZWQg
ZnJvbSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTZWFyY2hGaWVsZDo6flJlbmRlclNlYXJjaEZpZWxkKTogZGl0dG8KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNlYXJjaEZpZWxkOjphZGRTZWFyY2hSZXN1bHQpOiBkaXR0bworICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OnNob3dQb3B1cCk6IGRpdHRvCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6aGlkZVBvcHVwKTogZGl0dG8KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjpjb21wdXRlSGVpZ2h0TGltaXQpOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjpjZW50ZXJDb250YWluZXJJZk5lZWRl
ZCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OnZhbHVlQ2hh
bmdlZCk6IE1vdmVkIGZyb20gUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6Oml0ZW1UZXh0KTogZGl0dG8KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjppdGVtTGFiZWwpOiBkaXR0bworICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6Oml0ZW1JY29uKTogZGl0dG8KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNlYXJjaEZpZWxkOjppdGVtSXNFbmFibGVkKTogZGl0dG8KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjppdGVtU3R5bGUpOiBkaXR0bworICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6Om1lbnVTdHlsZSk6IGRpdHRvCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6Y2xpZW50SW5zZXRMZWZ0KTogZGl0dG8KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjpjbGllbnRJbnNldFJpZ2h0KTogZGl0dG8KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjpjbGllbnRQYWRkaW5nTGVmdCk6IGRp
dHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6Y2xpZW50UGFkZGluZ1Jp
Z2h0KTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjpsaXN0U2l6
ZSk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6c2VsZWN0ZWRJ
bmRleCk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6cG9wdXBE
aWRIaWRlKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjppdGVt
SXNTZXBhcmF0b3IpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6
Oml0ZW1Jc0xhYmVsKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxk
OjppdGVtSXNTZWxlY3RlZCk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hG
aWVsZDo6c2V0VGV4dEZyb21JdGVtKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNl
YXJjaEZpZWxkOjpmb250U2VsZWN0b3IpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U2VhcmNoRmllbGQ6Omhvc3RXaW5kb3cpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U2VhcmNoRmllbGQ6OmNyZWF0ZVNjcm9sbGJhcik6IGRpdHRvCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclNlYXJjaEZpZWxkLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNlYXJjaEZpZWxkOjpwb3B1cElzVmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjp0b1JlbmRl
clNlYXJjaEZpZWxkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKTogUmVtb3ZlZCBzZWFyY2ggZmllbGRzLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp+UmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZTo6Y29tcHV0ZUhlaWdodExpbWl0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmxheW91dCk6IENoYW5nZWQgdG8gY2FsbCBj
b21wdXRlSGVpZ2h0TGltaXQgYW5kIGNlbnRlckNvbnRhaW5lcklmTmVlZGVkIGZvciBzZWFyY2gg
ZmllbGQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnVw
ZGF0ZUZyb21FbGVtZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lLmg6CisgICAgICAgIChSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjZW50ZXJDb250YWlu
ZXJJZk5lZWRlZCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjpjb250YWluZXJFbGVtZW50KTogRXhwb3NlZCBmb3IgUmVuZGVyU2VhcmNoRmll
bGQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmlubmVy
QmxvY2tFbGVtZW50KTogZGl0dG8KKwogMjAxMi0wNi0xNCAgRWRhZW5hIFNhbGluYXMgSmFzc28g
IDxlZGFlbmFAYXBwbGUuY29tPgogCiAgICAgICAgIGVsLmdldEF0dHJpYnV0ZSgndHlwZScpIHJl
dHVybnMgJ251bGwnIHdoZW4gc2V0dGluZyBlbC50eXBlIHRvIG51bGwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQKaW5kZXggZTFhYzNmOGZlNzhmYzg1YzBjNGQxNWMwODk3NmI1ZGIyZDE1MmJhYy4uN2ZkOTNh
OTg3MWRkMDkzOTc4OGRmYmMxYTRhNWVjMGQyNzI0MmU3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQK
QEAgLTEzODcsNiArMTM4Nyw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICByZW5kZXJpbmcv
UmVuZGVyU2Nyb2xsYmFyLmNwcAogICAgIHJlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJQYXJ0LmNw
cAogICAgIHJlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJUaGVtZS5jcHAKKyAgICByZW5kZXJpbmcv
UmVuZGVyU2VhcmNoRmllbGQuY3BwCiAgICAgcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAKICAg
ICByZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCiAgICAgcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2Fw
dGlvbi5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0g
Yi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDU0ZjkxZmMwNzk1NTUx
MzE3ZDdhN2I1NGU1MGI0YjQ1MThjZTEzYWIuLjI4YzlhMDJlMDFiMzBmYzVlNzg2ZTJjMGVkZTc0
OGQwNjNmNjAyZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMzkwNiw2ICsz
OTA2LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU2Nyb2xsYmFyUGFydC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U2Nyb2xsYmFyVGhlbWUuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Ny
b2xsYmFyVGhlbWUuaCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZp
ZWxkLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmgg
XAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWxlY3Rpb25JbmZvLmggXAogCVNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
VGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggMTRmN2VkMTgwYTcx
MmJlNTA0ODhhYzg1YzYxYzZjZTQyNmQ3ZDM4NC4uNjliYWE5MjlmZDY3MmM5MjYxNjQ4ZjhiMjIw
ZjU3YmNlNjdkM2ZkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC0xMzA5LDYgKzEzMDksNyBAQCBTT1VSQ0VT
ICs9IFwKICAgICByZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmNwcCBcCiAgICAgcmVuZGVyaW5n
L1JlbmRlclNjcm9sbGJhclBhcnQuY3BwIFwKICAgICByZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFy
VGhlbWUuY3BwIFwKKyAgICByZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwIFwKICAgICBy
ZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcCBcCiAgICAgcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNw
cCBcCiAgICAgcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2FwdGlvbi5jcHAgXApAQCAtMjUxNCw2ICsy
NTE1LDcgQEAgSEVBREVSUyArPSBcCiAgICAgcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhci5oIFwK
ICAgICByZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyUGFydC5oIFwKICAgICByZW5kZXJpbmcvUmVu
ZGVyU2Nyb2xsYmFyVGhlbWUuaCBcCisgICAgcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmgg
XAogICAgIHJlbmRlcmluZy9SZW5kZXJTbGlkZXIuaCBcCiAgICAgcmVuZGVyaW5nL1JlbmRlclRh
YmxlQ2FwdGlvbi5oIFwKICAgICByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmggXApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCmluZGV4IDdhNDUwZDc2MzQ0YzE2NjM2ODJlYWQ3NjE0OThmZjBhYjllMzg2YWUuLmQ5
NjQzZGU5OTFkZjFkOWYyMzIxZGI3NzIyMWEyYTk5ODNlZjc1ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
QEAgLTQ4OTgsNiArNDg5OCw4IEBACiAgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNjcm9s
bGJhclBhcnQuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclRoZW1l
LmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclRoZW1lLmgnLAor
ICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAnLAorICAgICAgICAg
ICAgJ3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5oJywKICAgICAgICAgICAgICdyZW5kZXJp
bmcvUmVuZGVyU2VsZWN0aW9uSW5mby5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVy
U2xpZGVyLmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNsaWRlci5oJywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggMTdhZTBk
ZjUxNjY2NjFlYWMzYTFiNzBhYzJiM2Y3Zjg0NjAyMjdlNS4uZDA2ZGRhYWExNDYyZDg5Y2M1MWY5
ZjNlZDZkOGJlZTQ4OWNlYWRlYyAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oKQEAgLTQxNTAzLDYgKzQxNTAzLDYyIEBACiAJCQkJPgogCQkJPC9GaWxl
PgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xSZW5kZXJTZWFyY2hG
aWVsZC5jcHAiCisJCQkJPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJEZWJ1
Z3xXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRv
b2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29u
ZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iUmVsZWFzZXxX
aW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wK
KwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmln
dXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iRGVidWdfQ2Fpcm9f
Q0ZMaXRlfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJ
CQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0Zp
bGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJSZWxl
YXNlX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJ
CQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+
CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJ
TmFtZT0iRGVidWdfQWxsfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJ
CQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4K
KwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlO
YW1lPSJQcm9kdWN0aW9ufFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJ
CQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4K
KwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xSZW5kZXJTZWFyY2hGaWVsZC5oIgorCQkJCT4KKwkJCTwv
RmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcUmVuZGVyU2Vs
ZWN0aW9uSW5mby5oIgogCQkJCT4KIAkJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2MWE3ODVhNWY0YzJhZjBjOGE0
YjEzMTk4ODg0ZjQwN2YxN2Q2YTMxLi45MmUwMmMxNGMyZmFiNzQyOGNmYWQ5MzUyZDI2OTlmMmUw
YTIzOTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC0xMTg5LDYgKzExODksOCBAQAogCQk0NTA5OUM0MTEzNzBBNzgwMDA1OEQ1
MTMgLyogSWNvblVSTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0NTA5OUM0MDEzNzBBNzgwMDA1OEQ1MTMgLyogSWNvblVSTC5jcHAgKi87IH07CiAJ
CTQ1MENFQkYwMTUwNzNCQkUwMDJCQjE0OSAvKiBMYWJlbGFibGVFbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1MENFQkVFMTUwNzNCQkUw
MDJCQjE0OSAvKiBMYWJlbGFibGVFbGVtZW50LmNwcCAqLzsgfTsKIAkJNDUwQ0VCRjExNTA3M0JC
RTAwMkJCMTQ5IC8qIExhYmVsYWJsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1MENFQkVGMTUwNzNCQkUwMDJCQjE0OSAvKiBMYWJlbGFi
bGVFbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJNDU4RkU0MDkxNTg5REYwQjAwNTYwOUU2IC8qIFJlbmRlclNlYXJjaEZpZWxkLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1OEZFNDA3MTU4
OURGMEIwMDU2MDlFNiAvKiBSZW5kZXJTZWFyY2hGaWVsZC5jcHAgKi87IH07CisJCTQ1OEZFNDBB
MTU4OURGMEIwMDU2MDlFNiAvKiBSZW5kZXJTZWFyY2hGaWVsZC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDU4RkU0MDgxNTg5REYwQjAwNTYwOUU2IC8q
IFJlbmRlclNlYXJjaEZpZWxkLmggKi87IH07CiAJCTQ1QkFDMkIwMTM2MEJCQUIwMDVEQTI1OCAv
KiBJY29uVVJMLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0NUJBQzJBRjEzNjBCQkFCMDA1REEyNTggLyogSWNvblVSTC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ1RkVBNUNGMTU2RERFOEMwMDY1NDEw
MSAvKiBEZWNpbWFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ1RkVBNUNEMTU2RERFOEMwMDY1NDEwMSAvKiBEZWNpbWFsLmNwcCAqLzsgfTsKIAkJ
NDVGRUE1RDAxNTZEREU4QzAwNjU0MTAxIC8qIERlY2ltYWwuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1RkVBNUNFMTU2RERFOEMwMDY1NDEwMSAvKiBE
ZWNpbWFsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTgyMTQsNiArODIxNiw4IEBACiAJCTQ1MDk5QzQwMTM3MEE3ODAwMDU4RDUxMyAvKiBJY29u
VVJMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEljb25VUkwuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NTBDRUJFRTE1MDczQkJFMDAyQkIxNDkg
LyogTGFiZWxhYmxlRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBMYWJlbGFibGVFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDUwQ0VCRUYxNTA3M0JCRTAwMkJCMTQ5IC8qIExhYmVsYWJsZUVsZW1lbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGFiZWxhYmxlRWxlbWVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk0NThGRTQwNzE1ODlERjBCMDA1NjA5RTYgLyogUmVuZGVyU2VhcmNo
RmllbGQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU2Vh
cmNoRmllbGQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NThGRTQwODE1ODlE
RjBCMDA1NjA5RTYgLyogUmVuZGVyU2VhcmNoRmllbGQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVuZGVyU2VhcmNoRmllbGQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNDVCQUMyQUYxMzYwQkJBQjAwNURBMjU4IC8qIEljb25VUkwuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSWNvblVSTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0NUZFQTVDRDE1NkRERThDMDA2NTQxMDEgLyogRGVjaW1hbC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZWNpbWFsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDVGRUE1Q0UxNTZEREU4QzAwNjU0MTAxIC8qIERlY2ltYWwuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVjaW1hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMjExMDQsNiArMjExMDgsOCBAQAogCQkJCUJDM0JFOTkyMEU5QzFDN0MwMDgz
NTU4OCAvKiBSZW5kZXJTY3JvbGxiYXJQYXJ0LmggKi8sCiAJCQkJQkMzQkU5QTQwRTlDMjM5NjAw
ODM1NTg4IC8qIFJlbmRlclNjcm9sbGJhclRoZW1lLmNwcCAqLywKIAkJCQlCQzNCRTk5ODBFOUMx
RTVEMDA4MzU1ODggLyogUmVuZGVyU2Nyb2xsYmFyVGhlbWUuaCAqLywKKwkJCQk0NThGRTQwNzE1
ODlERjBCMDA1NjA5RTYgLyogUmVuZGVyU2VhcmNoRmllbGQuY3BwICovLAorCQkJCTQ1OEZFNDA4
MTU4OURGMEIwMDU2MDlFNiAvKiBSZW5kZXJTZWFyY2hGaWVsZC5oICovLAogCQkJCTBGMTFBNTRF
MEYzOTIzMzEwMEMzNzg4NCAvKiBSZW5kZXJTZWxlY3Rpb25JbmZvLmggKi8sCiAJCQkJQUIyNDdB
NkEwQUZENjM4MzAwM0ZBNUZEIC8qIFJlbmRlclNsaWRlci5jcHAgKi8sCiAJCQkJQUIyNDdBNkIw
QUZENjM4MzAwM0ZBNUZEIC8qIFJlbmRlclNsaWRlci5oICovLApAQCAtMjQyNjAsNiArMjQyNjYs
NyBAQAogCQkJCUJDM0JFOTk0MEU5QzFDN0MwMDgzNTU4OCAvKiBSZW5kZXJTY3JvbGxiYXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDM0JFOTk1MEU5QzFDN0MwMDgzNTU4OCAvKiBSZW5kZXJTY3Jv
bGxiYXJQYXJ0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzNCRTk5OTBFOUMxRTVEMDA4MzU1ODgg
LyogUmVuZGVyU2Nyb2xsYmFyVGhlbWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ1OEZFNDBBMTU4
OURGMEIwMDU2MDlFNiAvKiBSZW5kZXJTZWFyY2hGaWVsZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYxMUE1NEYwRjM5MjMzMTAwQzM3ODg0IC8qIFJlbmRlclNlbGVjdGlvbkluZm8uaCBpbiBIZWFk
ZXJzICovLAogCQkJCUFCMjQ3QTZEMEFGRDYzODMwMDNGQTVGRCAvKiBSZW5kZXJTbGlkZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDOEM4RkFFMEREQ0QzMUIwMEI1OTJGNCAvKiBSZW5kZXJTdHls
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzQ1Myw2ICsyNzQ2MCw3IEBACiAJCQkJQkMzQkU5OTMw
RTlDMUM3QzAwODM1NTg4IC8qIFJlbmRlclNjcm9sbGJhci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCQzNCRTlBQjBFOUMyNDIwMDA4MzU1ODggLyogUmVuZGVyU2Nyb2xsYmFyUGFydC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCQzNCRTlBNTBFOUMyMzk2MDA4MzU1ODggLyogUmVuZGVyU2Nyb2xs
YmFyVGhlbWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDU4RkU0MDkxNTg5REYwQjAwNTYwOUU2
IC8qIFJlbmRlclNlYXJjaEZpZWxkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUFCMjQ3QTZDMEFG
RDYzODMwMDNGQTVGRCAvKiBSZW5kZXJTbGlkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM4
QzhGQUQwRERDRDMxQjAwQjU5MkY0IC8qIFJlbmRlclN0eWxlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGNEU1NzE3MTMxMzI3NjIwMENGODVBRiAvKiBSZW5kZXJTVkdBbGxJbk9uZS5jcHAgaW4g
U291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCmluZGV4
IGVkNWIwYzYzZTJiYTAxZGM4NDMyZGZhNGUzMDQwOWQ3N2Y4M2MwMDkuLjZmY2M0NDVhZmMxZmI3
MjkwZGM1ZDhjZmYzNDVkNTc4YTllNDA1ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTElucHV0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5w
dXRFbGVtZW50LmNwcApAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmlu
Z3MuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTnVtYmVySW5wdXRUeXBl
LmgiCisjaW5jbHVkZSAiUmVuZGVyU2VhcmNoRmllbGQuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUg
IlNlYXJjaElucHV0VHlwZS5oIgpAQCAtMTMyMCw3ICsxMzIxLDcgQEAgdm9pZCBIVE1MSW5wdXRF
bGVtZW50OjphZGRTZWFyY2hSZXN1bHQoKQogewogICAgIEFTU0VSVChpc1NlYXJjaEZpZWxkKCkp
OwogICAgIGlmIChyZW5kZXJlcigpKQotICAgICAgICB0b1JlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZShyZW5kZXJlcigpKS0+YWRkU2VhcmNoUmVzdWx0KCk7CisgICAgICAgIHRvUmVuZGVyU2Vh
cmNoRmllbGQocmVuZGVyZXIoKSktPmFkZFNlYXJjaFJlc3VsdCgpOwogfQogCiB2b2lkIEhUTUxJ
bnB1dEVsZW1lbnQ6Om9uU2VhcmNoKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
U2VhcmNoSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvU2VhcmNoSW5wdXRUeXBl
LmNwcAppbmRleCA2ZjUwMGRhZjNmN2I1ZjFlMDViZDRhMmQwYjJmOWVlNDdjM2IwNGE0Li41MGVm
ZTNjODcwODc4ZjIyMjZjMTMzZDI4NzA2NDhkYmZlNDQwYWM2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL1NlYXJjaElucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9TZWFyY2hJbnB1dFR5cGUuY3BwCkBAIC0zMyw3ICszMyw3IEBACiAKICNpbmNsdWRlICJIVE1M
SW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgotI2luY2x1ZGUgIlJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oIgorI2luY2x1ZGUgIlJlbmRlclNlYXJjaEZpZWxk
LmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgogI2luY2x1ZGUgIlRleHRDb250cm9sSW5uZXJF
bGVtZW50cy5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL1RleHRGaWVsZElucHV0VHlwZS5jcHAKaW5kZXggODE4OTE0NGE5OTM4MGE1OGQwYzhhNWE3
N2FjZjBiNjhjMGUwZjQ4ZS4uNmE3MGY5NWU3YzM4Mjc1MDAwODEzZmEyZmM1ZTQ5MTY1Yjc3YjU2
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9UZXh0RmllbGRJbnB1dFR5cGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvVGV4dEZpZWxkSW5wdXRUeXBlLmNwcApAQCAtNDMs
NyArNDMsNyBAQAogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJQYWdlLmgi
CiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmUuaCIKKyNpbmNsdWRlICJSZW5kZXJTZWFyY2hGaWVsZC5oIgogI2luY2x1ZGUgIlJl
bmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgogI2luY2x1ZGUgIlRleHRDb250
cm9sSW5uZXJFbGVtZW50cy5oIgpAQCAtMjAwLDcgKzIwMCw3IEBAIGJvb2wgVGV4dEZpZWxkSW5w
dXRUeXBlOjpzaG91bGRTdWJtaXRJbXBsaWNpdGx5KEV2ZW50KiBldmVudCkKIAogUmVuZGVyT2Jq
ZWN0KiBUZXh0RmllbGRJbnB1dFR5cGU6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVu
YSwgUmVuZGVyU3R5bGUqKSBjb25zdAogewotICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmUoZWxlbWVudCgpKTsKKyAgICByZXR1cm4gaXNTZWFyY2hGaWVs
ZCgpID8gbmV3IChhcmVuYSkgUmVuZGVyU2VhcmNoRmllbGQoZWxlbWVudCgpKSA6IG5ldyAoYXJl
bmEpIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShlbGVtZW50KCkpOwogfQogCiBib29sIFRl
eHRGaWVsZElucHV0VHlwZTo6bmVlZHNDb250YWluZXIoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAKaW5k
ZXggMTAwZGFlYjY0N2I5ZDc3YWE0YzFiNDMxMmJjOWM1ZTVmYjE4N2FkNi4uNWQyNjg0MWMyNDM1
NzA1NWY3YjViOThiNzE4MThiMzA1N2MxYWQxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCkBAIC0zNyw3ICsz
Nyw3IEBACiAjaW5jbHVkZSAiSFRNTFRleHRBcmVhRWxlbWVudC5oIgogI2luY2x1ZGUgIk1vdXNl
RXZlbnQuaCIKICNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lLmgiCisjaW5jbHVkZSAiUmVuZGVyU2VhcmNoRmllbGQuaCIKICNpbmNsdWRlICJS
ZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNj
cm9sbGJhclRoZW1lLmgiCkBAIC0xNTEsNyArMTUxLDcgQEAgdm9pZCBTZWFyY2hGaWVsZFJlc3Vs
dHNCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICBp
ZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgZXZlbnQt
PmlzTW91c2VFdmVudCgpICYmIHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCktPmJ1dHRv
bigpID09IExlZnRCdXR0b24pIHsKICAgICAgICAgaW5wdXQtPmZvY3VzKCk7CiAgICAgICAgIGlu
cHV0LT5zZWxlY3QoKTsKLSAgICAgICAgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKiByZW5k
ZXJlciA9IHRvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKGlucHV0LT5yZW5kZXJlcigpKTsK
KyAgICAgICAgUmVuZGVyU2VhcmNoRmllbGQqIHJlbmRlcmVyID0gdG9SZW5kZXJTZWFyY2hGaWVs
ZChpbnB1dC0+cmVuZGVyZXIoKSk7CiAgICAgICAgIGlmIChyZW5kZXJlci0+cG9wdXBJc1Zpc2li
bGUoKSkKICAgICAgICAgICAgIHJlbmRlcmVyLT5oaWRlUG9wdXAoKTsKICAgICAgICAgZWxzZSBp
ZiAoaW5wdXQtPm1heFJlc3VsdHMoKSA+IDApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNlYXJjaEZpZWxkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMDcwNDBjYTE3NmE3NzUwNjkwNjI5
NmRiZDhmOTczN2M4N2YzOGRjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmNwcApAQCAtMCwwICsxLDMyMCBAQAorLyoqCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogICAgICAgICAgIChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pIAorICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlclNlYXJjaEZpZWxkLmgiCisKKyNp
bmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIKKyNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgi
CisjaW5jbHVkZSAiQ2hyb21lLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFt
ZVNlbGVjdGlvbi5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhUTUxJbnB1
dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVz
dWx0LmgiCisjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgorI2luY2x1ZGUgIlBhZ2UuaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJMYXll
ci5oIgorI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhci5oIgorI2luY2x1ZGUgIlJlbmRlclRoZW1l
LmgiCisjaW5jbHVkZSAiU2VhcmNoUG9wdXBNZW51LmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIK
KyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIK
KyNpbmNsdWRlICJUZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCIKKwordXNpbmcgbmFtZXNwYWNl
IHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVz
OworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1JlbmRlclNlYXJjaEZpZWxk
OjpSZW5kZXJTZWFyY2hGaWVsZChOb2RlKiBub2RlKQorICAgIDogUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lKG5vZGUpCisgICAgLCBtX3NlYXJjaFBvcHVwSXNWaXNpYmxlKGZhbHNlKQorICAg
ICwgbV9zZWFyY2hQb3B1cCgwKQoreworICAgIEFTU0VSVChub2RlLT5pc0hUTUxFbGVtZW50KCkp
OworICAgIEFTU0VSVChub2RlLT50b0lucHV0RWxlbWVudCgpKTsKK30KKworUmVuZGVyU2VhcmNo
RmllbGQ6On5SZW5kZXJTZWFyY2hGaWVsZCgpCit7CisgICAgaWYgKG1fc2VhcmNoUG9wdXApIHsK
KyAgICAgICAgbV9zZWFyY2hQb3B1cC0+cG9wdXBNZW51KCktPmRpc2Nvbm5lY3RDbGllbnQoKTsK
KyAgICAgICAgbV9zZWFyY2hQb3B1cCA9IDA7CisgICAgfQorfQorCit2b2lkIFJlbmRlclNlYXJj
aEZpZWxkOjphZGRTZWFyY2hSZXN1bHQoKQoreworICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0
ID0gaW5wdXRFbGVtZW50KCk7CisgICAgaWYgKGlucHV0LT5tYXhSZXN1bHRzKCkgPD0gMCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgU3RyaW5nIHZhbHVlID0gaW5wdXQtPnZhbHVlKCk7CisgICAg
aWYgKHZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU2V0dGluZ3MqIHNl
dHRpbmdzID0gZG9jdW1lbnQoKS0+c2V0dGluZ3MoKTsKKyAgICBpZiAoIXNldHRpbmdzIHx8IHNl
dHRpbmdzLT5wcml2YXRlQnJvd3NpbmdFbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGludCBzaXplID0gc3RhdGljX2Nhc3Q8aW50PihtX3JlY2VudFNlYXJjaGVzLnNpemUoKSk7Cisg
ICAgZm9yIChpbnQgaSA9IHNpemUgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBpZiAobV9y
ZWNlbnRTZWFyY2hlc1tpXSA9PSB2YWx1ZSkKKyAgICAgICAgICAgIG1fcmVjZW50U2VhcmNoZXMu
cmVtb3ZlKGkpOworICAgIH0KKworICAgIG1fcmVjZW50U2VhcmNoZXMuaW5zZXJ0KDAsIHZhbHVl
KTsKKyAgICB3aGlsZSAoc3RhdGljX2Nhc3Q8aW50PihtX3JlY2VudFNlYXJjaGVzLnNpemUoKSkg
PiBpbnB1dC0+bWF4UmVzdWx0cygpKQorICAgICAgICBtX3JlY2VudFNlYXJjaGVzLnJlbW92ZUxh
c3QoKTsKKworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSA9IGF1dG9zYXZlTmFtZSgpOwor
ICAgIGlmICghbV9zZWFyY2hQb3B1cCkKKyAgICAgICAgbV9zZWFyY2hQb3B1cCA9IGRvY3VtZW50
KCktPnBhZ2UoKS0+Y2hyb21lKCktPmNyZWF0ZVNlYXJjaFBvcHVwTWVudSh0aGlzKTsKKworICAg
IG1fc2VhcmNoUG9wdXAtPnNhdmVSZWNlbnRTZWFyY2hlcyhuYW1lLCBtX3JlY2VudFNlYXJjaGVz
KTsKK30KKwordm9pZCBSZW5kZXJTZWFyY2hGaWVsZDo6c2hvd1BvcHVwKCkKK3sKKyAgICBpZiAo
bV9zZWFyY2hQb3B1cElzVmlzaWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3Nl
YXJjaFBvcHVwKQorICAgICAgICBtX3NlYXJjaFBvcHVwID0gZG9jdW1lbnQoKS0+cGFnZSgpLT5j
aHJvbWUoKS0+Y3JlYXRlU2VhcmNoUG9wdXBNZW51KHRoaXMpOworCisgICAgaWYgKCFtX3NlYXJj
aFBvcHVwLT5lbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2VhcmNoUG9wdXBJ
c1Zpc2libGUgPSB0cnVlOworCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lID0gYXV0b3Nh
dmVOYW1lKCk7CisgICAgbV9zZWFyY2hQb3B1cC0+bG9hZFJlY2VudFNlYXJjaGVzKG5hbWUsIG1f
cmVjZW50U2VhcmNoZXMpOworCisgICAgLy8gVHJpbSB0aGUgcmVjZW50IHNlYXJjaGVzIGxpc3Qg
aWYgdGhlIG1heGltdW0gc2l6ZSBoYXMgY2hhbmdlZCBzaW5jZSB3ZSBsYXN0IHNhdmVkLgorICAg
IEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gaW5wdXRFbGVtZW50KCk7CisgICAgaWYgKHN0YXRp
Y19jYXN0PGludD4obV9yZWNlbnRTZWFyY2hlcy5zaXplKCkpID4gaW5wdXQtPm1heFJlc3VsdHMo
KSkgeworICAgICAgICBkbyB7CisgICAgICAgICAgICBtX3JlY2VudFNlYXJjaGVzLnJlbW92ZUxh
c3QoKTsKKyAgICAgICAgfSB3aGlsZSAoc3RhdGljX2Nhc3Q8aW50PihtX3JlY2VudFNlYXJjaGVz
LnNpemUoKSkgPiBpbnB1dC0+bWF4UmVzdWx0cygpKTsKKworICAgICAgICBtX3NlYXJjaFBvcHVw
LT5zYXZlUmVjZW50U2VhcmNoZXMobmFtZSwgbV9yZWNlbnRTZWFyY2hlcyk7CisgICAgfQorCisg
ICAgbV9zZWFyY2hQb3B1cC0+cG9wdXBNZW51KCktPnNob3cocGl4ZWxTbmFwcGVkSW50UmVjdChh
YnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpKSwgZG9jdW1lbnQoKS0+dmlldygpLCAtMSk7Cit9CisK
K3ZvaWQgUmVuZGVyU2VhcmNoRmllbGQ6OmhpZGVQb3B1cCgpCit7CisgICAgaWYgKG1fc2VhcmNo
UG9wdXApCisgICAgICAgIG1fc2VhcmNoUG9wdXAtPnBvcHVwTWVudSgpLT5oaWRlKCk7Cit9CisK
K0xheW91dFVuaXQgUmVuZGVyU2VhcmNoRmllbGQ6OmNvbXB1dGVIZWlnaHRMaW1pdCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGhlaWdodCgpOworfQorCit2b2lkIFJlbmRlclNlYXJjaEZpZWxkOjpj
ZW50ZXJDb250YWluZXJJZk5lZWRlZChSZW5kZXJCb3gqIGNvbnRhaW5lclJlbmRlcmVyKSBjb25z
dAoreworICAgIGlmICghY29udGFpbmVyUmVuZGVyZXIpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChjb250YWluZXJSZW5kZXJlci0+aGVpZ2h0KCkgPD0gY29udGVudEhlaWdodCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBBIHF1aXJrIGZvciBmaW5kLWluLXBhZ2UgYm94IG9uIFNh
ZmFyaSBXaW5kb3dzLgorICAgIC8vIGh0dHA6Ly93ZWJraXQub3JnL2IvNjMxNTcKKyAgICBMYXlv
dXRVbml0IGhlaWdodERpZmYgPSBjb250YWluZXJSZW5kZXJlci0+aGVpZ2h0KCkgLSBjb250ZW50
SGVpZ2h0KCk7CisgICAgY29udGFpbmVyUmVuZGVyZXItPnNldFkoY29udGFpbmVyUmVuZGVyZXIt
PnkoKSAtIChoZWlnaHREaWZmIC8gMiArIGxheW91dE1vZChoZWlnaHREaWZmLCAyKSkpOworfQor
CisvLyBQb3B1cE1lbnVDbGllbnQgbWV0aG9kcwordm9pZCBSZW5kZXJTZWFyY2hGaWVsZDo6dmFs
dWVDaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCwgYm9vbCBmaXJlRXZlbnRzKQoreworICAgIEFT
U0VSVChzdGF0aWNfY2FzdDxpbnQ+KGxpc3RJbmRleCkgPCBsaXN0U2l6ZSgpKTsKKyAgICBIVE1M
SW5wdXRFbGVtZW50KiBpbnB1dCA9IGlucHV0RWxlbWVudCgpOworICAgIGlmIChzdGF0aWNfY2Fz
dDxpbnQ+KGxpc3RJbmRleCkgPT0gKGxpc3RTaXplKCkgLSAxKSkgeworICAgICAgICBpZiAoZmly
ZUV2ZW50cykgeworICAgICAgICAgICAgbV9yZWNlbnRTZWFyY2hlcy5jbGVhcigpOworICAgICAg
ICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lID0gYXV0b3NhdmVOYW1lKCk7CisgICAgICAg
ICAgICBpZiAoIW5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX3NlYXJj
aFBvcHVwKQorICAgICAgICAgICAgICAgICAgICBtX3NlYXJjaFBvcHVwID0gZG9jdW1lbnQoKS0+
cGFnZSgpLT5jaHJvbWUoKS0+Y3JlYXRlU2VhcmNoUG9wdXBNZW51KHRoaXMpOworICAgICAgICAg
ICAgICAgIG1fc2VhcmNoUG9wdXAtPnNhdmVSZWNlbnRTZWFyY2hlcyhuYW1lLCBtX3JlY2VudFNl
YXJjaGVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IGlucHV0LT5zZXRWYWx1ZShpdGVtVGV4dChsaXN0SW5kZXgpKTsKKyAgICAgICAgaWYgKGZpcmVF
dmVudHMpCisgICAgICAgICAgICBpbnB1dC0+b25TZWFyY2goKTsKKyAgICAgICAgaW5wdXQtPnNl
bGVjdCgpOworICAgIH0KK30KKworU3RyaW5nIFJlbmRlclNlYXJjaEZpZWxkOjppdGVtVGV4dCh1
bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0Cit7CisgICAgaW50IHNpemUgPSBsaXN0U2l6ZSgpOwor
ICAgIGlmIChzaXplID09IDEpIHsKKyAgICAgICAgQVNTRVJUKCFsaXN0SW5kZXgpOworICAgICAg
ICByZXR1cm4gc2VhcmNoTWVudU5vUmVjZW50U2VhcmNoZXNUZXh0KCk7CisgICAgfQorICAgIGlm
ICghbGlzdEluZGV4KQorICAgICAgICByZXR1cm4gc2VhcmNoTWVudVJlY2VudFNlYXJjaGVzVGV4
dCgpOworICAgIGlmIChpdGVtSXNTZXBhcmF0b3IobGlzdEluZGV4KSkKKyAgICAgICAgcmV0dXJu
IFN0cmluZygpOworICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ+KGxpc3RJbmRleCkgPT0gKHNpemUg
LSAxKSkKKyAgICAgICAgcmV0dXJuIHNlYXJjaE1lbnVDbGVhclJlY2VudFNlYXJjaGVzVGV4dCgp
OworICAgIHJldHVybiBtX3JlY2VudFNlYXJjaGVzW2xpc3RJbmRleCAtIDFdOworfQorCitTdHJp
bmcgUmVuZGVyU2VhcmNoRmllbGQ6Oml0ZW1MYWJlbCh1bnNpZ25lZCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBSZW5kZXJTZWFyY2hGaWVsZDo6aXRlbUljb24o
dW5zaWduZWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitib29sIFJlbmRl
clNlYXJjaEZpZWxkOjppdGVtSXNFbmFibGVkKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKK3sK
KyAgICAgaWYgKCFsaXN0SW5kZXggfHwgaXRlbUlzU2VwYXJhdG9yKGxpc3RJbmRleCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUG9wdXBNZW51U3R5bGUg
UmVuZGVyU2VhcmNoRmllbGQ6Oml0ZW1TdHlsZSh1bnNpZ25lZCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbWVudVN0eWxlKCk7Cit9CisKK1BvcHVwTWVudVN0eWxlIFJlbmRlclNlYXJjaEZpZWxkOjpt
ZW51U3R5bGUoKSBjb25zdAoreworICAgIHJldHVybiBQb3B1cE1lbnVTdHlsZShzdHlsZSgpLT52
aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciksIHN0eWxlKCktPnZpc2l0ZWRE
ZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciksIHN0eWxlKCktPmZvbnQo
KSwgc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUsCisgICAgICAgIHN0eWxlKCktPmRp
c3BsYXkoKSA9PSBOT05FLCBzdHlsZSgpLT50ZXh0SW5kZW50KCksIHN0eWxlKCktPmRpcmVjdGlv
bigpLCBpc092ZXJyaWRlKHN0eWxlKCktPnVuaWNvZGVCaWRpKCkpKTsKK30KKworaW50IFJlbmRl
clNlYXJjaEZpZWxkOjpjbGllbnRJbnNldExlZnQoKSBjb25zdAoreworICAgIC8vIEluc2V0IHRo
ZSBtZW51IGJ5IHRoZSByYWRpdXMgb2YgdGhlIGNhcCBvbiB0aGUgbGVmdCBzbyB0aGF0CisgICAg
Ly8gaXQgb25seSBydW5zIGFsb25nIHRoZSBzdHJhaWdodCBwYXJ0IG9mIHRoZSBiZXplbC4KKyAg
ICByZXR1cm4gaGVpZ2h0KCkgLyAyOworfQorCitpbnQgUmVuZGVyU2VhcmNoRmllbGQ6OmNsaWVu
dEluc2V0UmlnaHQoKSBjb25zdAoreworICAgIC8vIEluc2V0IHRoZSBtZW51IGJ5IHRoZSByYWRp
dXMgb2YgdGhlIGNhcCBvbiB0aGUgcmlnaHQgc28gdGhhdAorICAgIC8vIGl0IG9ubHkgcnVucyBh
bG9uZyB0aGUgc3RyYWlnaHQgcGFydCBvZiB0aGUgYmV6ZWwgKHVubGVzcyBpdCBuZWVkcworICAg
IC8vIHRvIGJlIHdpZGVyKS4KKyAgICByZXR1cm4gaGVpZ2h0KCkgLyAyOworfQorCitMYXlvdXRV
bml0IFJlbmRlclNlYXJjaEZpZWxkOjpjbGllbnRQYWRkaW5nTGVmdCgpIGNvbnN0Cit7CisgICAg
TGF5b3V0VW5pdCBwYWRkaW5nID0gcGFkZGluZ0xlZnQoKTsKKyAgICBpZiAoUmVuZGVyQm94KiBi
b3ggPSBpbm5lckJsb2NrRWxlbWVudCgpID8gaW5uZXJCbG9ja0VsZW1lbnQoKS0+cmVuZGVyQm94
KCkgOiAwKQorICAgICAgICBwYWRkaW5nICs9IGJveC0+eCgpOworICAgIHJldHVybiBwYWRkaW5n
OworfQorCitMYXlvdXRVbml0IFJlbmRlclNlYXJjaEZpZWxkOjpjbGllbnRQYWRkaW5nUmlnaHQo
KSBjb25zdAoreworICAgIExheW91dFVuaXQgcGFkZGluZyA9IHBhZGRpbmdSaWdodCgpOworICAg
IGlmIChSZW5kZXJCb3gqIGNvbnRhaW5lckJveCA9IGNvbnRhaW5lckVsZW1lbnQoKSA/IGNvbnRh
aW5lckVsZW1lbnQoKS0+cmVuZGVyQm94KCkgOiAwKSB7CisgICAgICAgIGlmIChSZW5kZXJCb3gq
IGlubmVyQmxvY2tCb3ggPSBpbm5lckJsb2NrRWxlbWVudCgpID8gaW5uZXJCbG9ja0VsZW1lbnQo
KS0+cmVuZGVyQm94KCkgOiAwKQorICAgICAgICAgICAgcGFkZGluZyArPSBjb250YWluZXJCb3gt
PndpZHRoKCkgLSAoaW5uZXJCbG9ja0JveC0+eCgpICsgaW5uZXJCbG9ja0JveC0+d2lkdGgoKSk7
CisgICAgfQorICAgIHJldHVybiBwYWRkaW5nOworfQorCitpbnQgUmVuZGVyU2VhcmNoRmllbGQ6
Omxpc3RTaXplKCkgY29uc3QKK3sKKyAgICAvLyBJZiB0aGVyZSBhcmUgbm8gcmVjZW50IHNlYXJj
aGVzLCB0aGVuIG91ciBtZW51IHdpbGwgaGF2ZSAxICJObyByZWNlbnQgc2VhcmNoZXMiIGl0ZW0u
CisgICAgaWYgKCFtX3JlY2VudFNlYXJjaGVzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIDE7Cisg
ICAgLy8gT3RoZXJ3aXNlLCBsZWF2ZSByb29tIGluIHRoZSBtZW51IGZvciBhIGhlYWRlciwgYSBz
ZXBhcmF0b3IsIGFuZCB0aGUgIkNsZWFyIHJlY2VudCBzZWFyY2hlcyIgaXRlbS4KKyAgICByZXR1
cm4gbV9yZWNlbnRTZWFyY2hlcy5zaXplKCkgKyAzOworfQorCitpbnQgUmVuZGVyU2VhcmNoRmll
bGQ6OnNlbGVjdGVkSW5kZXgoKSBjb25zdAoreworICAgIHJldHVybiAtMTsKK30KKwordm9pZCBS
ZW5kZXJTZWFyY2hGaWVsZDo6cG9wdXBEaWRIaWRlKCkKK3sKKyAgICBtX3NlYXJjaFBvcHVwSXNW
aXNpYmxlID0gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyU2VhcmNoRmllbGQ6Oml0ZW1Jc1NlcGFy
YXRvcih1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0Cit7CisgICAgLy8gVGhlIHNlcGFyYXRvciB3
aWxsIGJlIHRoZSBzZWNvbmQgdG8gbGFzdCBpdGVtIGluIG91ciBsaXN0LgorICAgIHJldHVybiBz
dGF0aWNfY2FzdDxpbnQ+KGxpc3RJbmRleCkgPT0gKGxpc3RTaXplKCkgLSAyKTsKK30KKworYm9v
bCBSZW5kZXJTZWFyY2hGaWVsZDo6aXRlbUlzTGFiZWwodW5zaWduZWQgbGlzdEluZGV4KSBjb25z
dAoreworICAgIHJldHVybiAhbGlzdEluZGV4OworfQorCitib29sIFJlbmRlclNlYXJjaEZpZWxk
OjppdGVtSXNTZWxlY3RlZCh1bnNpZ25lZCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3ZvaWQgUmVuZGVyU2VhcmNoRmllbGQ6OnNldFRleHRGcm9tSXRlbSh1bnNpZ25lZCBsaXN0
SW5kZXgpCit7CisgICAgaW5wdXRFbGVtZW50KCktPnNldFZhbHVlKGl0ZW1UZXh0KGxpc3RJbmRl
eCkpOworfQorCitGb250U2VsZWN0b3IqIFJlbmRlclNlYXJjaEZpZWxkOjpmb250U2VsZWN0b3Io
KSBjb25zdAoreworICAgIHJldHVybiBkb2N1bWVudCgpLT5zdHlsZVJlc29sdmVyKCktPmZvbnRT
ZWxlY3RvcigpOworfQorCitIb3N0V2luZG93KiBSZW5kZXJTZWFyY2hGaWVsZDo6aG9zdFdpbmRv
dygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRvY3VtZW50KCktPnZpZXcoKS0+aG9zdFdpbmRvdygp
OworfQorCisKK1Bhc3NSZWZQdHI8U2Nyb2xsYmFyPiBSZW5kZXJTZWFyY2hGaWVsZDo6Y3JlYXRl
U2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSwgU2Nyb2xsYmFyT3JpZW50
YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplIGNvbnRyb2xTaXplKQorewor
ICAgIFJlZlB0cjxTY3JvbGxiYXI+IHdpZGdldDsKKyAgICBib29sIGhhc0N1c3RvbVNjcm9sbGJh
clN0eWxlID0gc3R5bGUoKS0+aGFzUHNldWRvU3R5bGUoU0NST0xMQkFSKTsKKyAgICBpZiAoaGFz
Q3VzdG9tU2Nyb2xsYmFyU3R5bGUpCisgICAgICAgIHdpZGdldCA9IFJlbmRlclNjcm9sbGJhcjo6
Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKHNjcm9sbGFibGVBcmVhLCBvcmllbnRhdGlvbiwgdGhpcy0+
bm9kZSgpKTsKKyAgICBlbHNlCisgICAgICAgIHdpZGdldCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0
aXZlU2Nyb2xsYmFyKHNjcm9sbGFibGVBcmVhLCBvcmllbnRhdGlvbiwgY29udHJvbFNpemUpOwor
ICAgIHJldHVybiB3aWRnZXQucmVsZWFzZSgpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI3MDhiZjNkNWJiOGUyNmUy
NTdmMGE0MmI3NjI4M2FhZmI4NTExNzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuaApAQCAtMCwwICsxLDk1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICogQ29weXJpZ2h0IChD
KSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisK
KyNpZm5kZWYgUmVuZGVyU2VhcmNoRmllbGRfaAorI2RlZmluZSBSZW5kZXJTZWFyY2hGaWVsZF9o
CisKKyNpbmNsdWRlICJQb3B1cE1lbnVDbGllbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBIVE1MSW5w
dXRFbGVtZW50OworY2xhc3MgU2VhcmNoUG9wdXBNZW51OworCitjbGFzcyBSZW5kZXJTZWFyY2hG
aWVsZCA6IHB1YmxpYyBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUsIHByaXZhdGUgUG9wdXBN
ZW51Q2xpZW50IHsKK3B1YmxpYzoKKyAgICBSZW5kZXJTZWFyY2hGaWVsZChOb2RlKik7CisgICAg
dmlydHVhbCB+UmVuZGVyU2VhcmNoRmllbGQoKTsKKworICAgIHZvaWQgYWRkU2VhcmNoUmVzdWx0
KCk7CisgICAgdm9pZCBzdG9wU2VhcmNoRXZlbnRUaW1lcigpOworCisgICAgYm9vbCBwb3B1cElz
VmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VhcmNoUG9wdXBJc1Zpc2libGU7IH0KKyAgICB2
b2lkIHNob3dQb3B1cCgpOworICAgIHZvaWQgaGlkZVBvcHVwKCk7CisKK3ByaXZhdGU6CisgICAg
dmlydHVhbCBMYXlvdXRVbml0IGNvbXB1dGVIZWlnaHRMaW1pdCgpIGNvbnN0IE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCBjZW50ZXJDb250YWluZXJJZk5lZWRlZChSZW5kZXJCb3gqKSBjb25z
dCBPVkVSUklERTsKKworICAgIC8vIFBvcHVwTWVudUNsaWVudCBtZXRob2RzCisgICAgdmlydHVh
bCB2b2lkIHZhbHVlQ2hhbmdlZCh1bnNpZ25lZCBsaXN0SW5kZXgsIGJvb2wgZmlyZUV2ZW50cyA9
IHRydWUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKHVuc2ln
bmVkLCBib29sKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0aW9uQ2xlYXJl
ZCgpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgU3RyaW5nIGl0ZW1UZXh0KHVuc2lnbmVkIGxp
c3RJbmRleCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBTdHJpbmcgaXRlbUxhYmVsKHVu
c2lnbmVkIGxpc3RJbmRleCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBTdHJpbmcgaXRl
bUljb24odW5zaWduZWQgbGlzdEluZGV4KSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFN0
cmluZyBpdGVtVG9vbFRpcCh1bnNpZ25lZCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gU3RyaW5n
KCk7IH0KKyAgICB2aXJ0dWFsIFN0cmluZyBpdGVtQWNjZXNzaWJpbGl0eVRleHQodW5zaWduZWQp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIFN0cmluZygpOyB9CisgICAgdmlydHVhbCBib29sIGl0
ZW1Jc0VuYWJsZWQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIFBvcHVwTWVudVN0eWxlIGl0ZW1TdHlsZSh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0IE9W
RVJSSURFOworICAgIHZpcnR1YWwgUG9wdXBNZW51U3R5bGUgbWVudVN0eWxlKCkgY29uc3QgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBpbnQgY2xpZW50SW5zZXRMZWZ0KCkgY29uc3QgT1ZFUlJJREU7
CisgICAgdmlydHVhbCBpbnQgY2xpZW50SW5zZXRSaWdodCgpIGNvbnN0IE9WRVJSSURFOworICAg
IHZpcnR1YWwgTGF5b3V0VW5pdCBjbGllbnRQYWRkaW5nTGVmdCgpIGNvbnN0IE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBjbGllbnRQYWRkaW5nUmlnaHQoKSBjb25zdCBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIGludCBsaXN0U2l6ZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1
YWwgaW50IHNlbGVjdGVkSW5kZXgoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQg
cG9wdXBEaWRIaWRlKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGl0ZW1Jc1NlcGFyYXRv
cih1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBp
dGVtSXNMYWJlbCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1
YWwgYm9vbCBpdGVtSXNTZWxlY3RlZCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0IE9WRVJSSURF
OworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRQb3BPdmVyKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgdmFsdWVTaG91bGRDaGFuZ2VPbkhvdFRyYWNr
KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0
VGV4dEZyb21JdGVtKHVuc2lnbmVkIGxpc3RJbmRleCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBG
b250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcigpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwg
SG9zdFdpbmRvdyogaG9zdFdpbmRvdygpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxTY3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSosIFNjcm9s
bGJhck9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSkgT1ZFUlJJREU7CisKKyAgICBi
b29sIG1fc2VhcmNoUG9wdXBJc1Zpc2libGU7CisgICAgUmVmUHRyPFNlYXJjaFBvcHVwTWVudT4g
bV9zZWFyY2hQb3B1cDsKKyAgICBWZWN0b3I8U3RyaW5nPiBtX3JlY2VudFNlYXJjaGVzOworfTsK
KworaW5saW5lIFJlbmRlclNlYXJjaEZpZWxkKiB0b1JlbmRlclNlYXJjaEZpZWxkKFJlbmRlck9i
amVjdCogb2JqZWN0KQoreworICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNUZXh0Rmll
bGQoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclNlYXJjaEZpZWxkKj4ob2JqZWN0
KTsKK30KKworLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBj
YXN0Lgordm9pZCB0b1JlbmRlclNlYXJjaEZpZWxkKGNvbnN0IFJlbmRlclNlYXJjaEZpZWxkKik7
CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCmluZGV4IDg0OGZjMjExOTdjMmE3ZDI0ZjI2
NDhkZjcwMjA1MjlmM2M4ODBkM2IuLjA4OTg3YzNhM2Y5NDEyZGEyZjI2ZDZkNjY2MDVjYzUzNWUx
Y2NlMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiRnJh
bWUuaCIKICNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5o
IgotI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
ICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5o
IgpAQCAtMzksNyArMzgsNiBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAi
UmVuZGVyU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKLSNpbmNsdWRlICJT
ZWFyY2hQb3B1cE1lbnUuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNpbXBs
ZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgpAQCAtNzAsMTAgKzY4LDgg
QEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlclRleHRDb250cm9sSW5uZXJCbG9jazo6cG9zaXRpb25G
b3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYKIAogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
OjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUoTm9kZSogbm9kZSkKICAgICA6IFJlbmRlclRl
eHRDb250cm9sKG5vZGUpCi0gICAgLCBtX3NlYXJjaFBvcHVwSXNWaXNpYmxlKGZhbHNlKQogICAg
ICwgbV9zaG91bGREcmF3Q2Fwc0xvY2tJbmRpY2F0b3IoZmFsc2UpCiAgICAgLCBtX2Rlc2lyZWRJ
bm5lclRleHRIZWlnaHQoLTEpCi0gICAgLCBtX3NlYXJjaFBvcHVwKDApCiB7CiAgICAgQVNTRVJU
KG5vZGUtPmlzSFRNTEVsZW1lbnQoKSk7CiAgICAgQVNTRVJUKG5vZGUtPnRvSW5wdXRFbGVtZW50
KCkpOwpAQCAtODEsMjAgKzc3LDYgQEAgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUoTm9kZSogbm9kZSkKIAogUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjp+UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKCkKIHsKLSAgICBpZiAobV9z
ZWFyY2hQb3B1cCkgewotICAgICAgICBtX3NlYXJjaFBvcHVwLT5wb3B1cE1lbnUoKS0+ZGlzY29u
bmVjdENsaWVudCgpOwotICAgICAgICBtX3NlYXJjaFBvcHVwID0gMDsKLSAgICB9Ci19Ci0KLWlu
bGluZSBIVE1MRWxlbWVudCogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjb250YWluZXJF
bGVtZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gaW5wdXRFbGVtZW50KCktPmNvbnRhaW5lckVs
ZW1lbnQoKTsKLX0KLQotaW5saW5lIEhUTUxFbGVtZW50KiBSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmU6OmlubmVyQmxvY2tFbGVtZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gaW5wdXRFbGVt
ZW50KCktPmlubmVyQmxvY2tFbGVtZW50KCk7CiB9CiAKIGlubGluZSBIVE1MRWxlbWVudCogUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppbm5lclNwaW5CdXR0b25FbGVtZW50KCkgY29uc3QK
QEAgLTExOCw3MiArMTAwLDYgQEAgUmVuZGVyU3R5bGUqIFJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZTo6dGV4dEJhc2VTdHlsZSgpIGNvbnN0CiAgICAgcmV0dXJuIGlubmVyQmxvY2sgPyBpbm5l
ckJsb2NrLT5yZW5kZXJlcigpLT5zdHlsZSgpIDogc3R5bGUoKTsKIH0KIAotdm9pZCBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OmFkZFNlYXJjaFJlc3VsdCgpCi17Ci0gICAgSFRNTElucHV0
RWxlbWVudCogaW5wdXQgPSBpbnB1dEVsZW1lbnQoKTsKLSAgICBpZiAoaW5wdXQtPm1heFJlc3Vs
dHMoKSA8PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTdHJpbmcgdmFsdWUgPSBpbnB1dC0+
dmFsdWUoKTsKLSAgICBpZiAodmFsdWUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudCgpLT5zZXR0aW5ncygpOwotICAgIGlmICgh
c2V0dGluZ3MgfHwgc2V0dGluZ3MtPnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaW50IHNpemUgPSBzdGF0aWNfY2FzdDxpbnQ+KG1fcmVjZW50U2VhcmNo
ZXMuc2l6ZSgpKTsKLSAgICBmb3IgKGludCBpID0gc2l6ZSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0g
ICAgICAgIGlmIChtX3JlY2VudFNlYXJjaGVzW2ldID09IHZhbHVlKQotICAgICAgICAgICAgbV9y
ZWNlbnRTZWFyY2hlcy5yZW1vdmUoaSk7Ci0gICAgfQotCi0gICAgbV9yZWNlbnRTZWFyY2hlcy5p
bnNlcnQoMCwgdmFsdWUpOwotICAgIHdoaWxlIChzdGF0aWNfY2FzdDxpbnQ+KG1fcmVjZW50U2Vh
cmNoZXMuc2l6ZSgpKSA+IGlucHV0LT5tYXhSZXN1bHRzKCkpCi0gICAgICAgIG1fcmVjZW50U2Vh
cmNoZXMucmVtb3ZlTGFzdCgpOwotCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lID0gYXV0
b3NhdmVOYW1lKCk7Ci0gICAgaWYgKCFtX3NlYXJjaFBvcHVwKQotICAgICAgICBtX3NlYXJjaFBv
cHVwID0gZG9jdW1lbnQoKS0+cGFnZSgpLT5jaHJvbWUoKS0+Y3JlYXRlU2VhcmNoUG9wdXBNZW51
KHRoaXMpOwotCi0gICAgbV9zZWFyY2hQb3B1cC0+c2F2ZVJlY2VudFNlYXJjaGVzKG5hbWUsIG1f
cmVjZW50U2VhcmNoZXMpOwotfQotCi12b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6
c2hvd1BvcHVwKCkKLXsKLSAgICBpZiAobV9zZWFyY2hQb3B1cElzVmlzaWJsZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKCFtX3NlYXJjaFBvcHVwKQotICAgICAgICBtX3NlYXJjaFBvcHVw
ID0gZG9jdW1lbnQoKS0+cGFnZSgpLT5jaHJvbWUoKS0+Y3JlYXRlU2VhcmNoUG9wdXBNZW51KHRo
aXMpOwotCi0gICAgaWYgKCFtX3NlYXJjaFBvcHVwLT5lbmFibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fc2VhcmNoUG9wdXBJc1Zpc2libGUgPSB0cnVlOwotCi0gICAgY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lID0gYXV0b3NhdmVOYW1lKCk7Ci0gICAgbV9zZWFyY2hQb3B1cC0+bG9h
ZFJlY2VudFNlYXJjaGVzKG5hbWUsIG1fcmVjZW50U2VhcmNoZXMpOwotCi0gICAgLy8gVHJpbSB0
aGUgcmVjZW50IHNlYXJjaGVzIGxpc3QgaWYgdGhlIG1heGltdW0gc2l6ZSBoYXMgY2hhbmdlZCBz
aW5jZSB3ZSBsYXN0IHNhdmVkLgotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gaW5wdXRF
bGVtZW50KCk7Ci0gICAgaWYgKHN0YXRpY19jYXN0PGludD4obV9yZWNlbnRTZWFyY2hlcy5zaXpl
KCkpID4gaW5wdXQtPm1heFJlc3VsdHMoKSkgewotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBt
X3JlY2VudFNlYXJjaGVzLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgfSB3aGlsZSAoc3RhdGljX2Nh
c3Q8aW50PihtX3JlY2VudFNlYXJjaGVzLnNpemUoKSkgPiBpbnB1dC0+bWF4UmVzdWx0cygpKTsK
LQotICAgICAgICBtX3NlYXJjaFBvcHVwLT5zYXZlUmVjZW50U2VhcmNoZXMobmFtZSwgbV9yZWNl
bnRTZWFyY2hlcyk7Ci0gICAgfQotCi0gICAgbV9zZWFyY2hQb3B1cC0+cG9wdXBNZW51KCktPnNo
b3cocGl4ZWxTbmFwcGVkSW50UmVjdChhYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpKSwgZG9jdW1l
bnQoKS0+dmlldygpLCAtMSk7Ci19Ci0KLXZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
OjpoaWRlUG9wdXAoKQotewotICAgIGlmIChtX3NlYXJjaFBvcHVwKQotICAgICAgICBtX3NlYXJj
aFBvcHVwLT5wb3B1cE1lbnUoKS0+aGlkZSgpOwotfQotCiB2b2lkIFJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50
JiBwYWludE9mZnNldCkKIHsKICAgICBSZW5kZXJUZXh0Q29udHJvbDo6cGFpbnQocGFpbnRJbmZv
LCBwYWludE9mZnNldCk7CkBAIC0yMDAsNiArMTE2LDExIEBAIHZvaWQgUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9p
bnQmCiAgICAgfQogfQogCitMYXlvdXRVbml0IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6
Y29tcHV0ZUhlaWdodExpbWl0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29udGFpbmVyRWxlbWVu
dCgpID8gY29udGVudEhlaWdodCgpIDogaGVpZ2h0KCk7Cit9CisKIHZvaWQgUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lOjpsYXlvdXQoKQogewogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVt
b3ZlIHRoZSBoZWlnaHQtcmVsYXRlZCBoYWNrcyBpbiBsYXlvdXQoKSBhbmQKQEAgLTIyNSw3ICsx
NDYsNyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5b3V0KCkKICAgICBM
YXlvdXRVbml0IGRlc2lyZWRIZWlnaHQgPSB0ZXh0QmxvY2tIZWlnaHQoKTsKICAgICBMYXlvdXRV
bml0IGN1cnJlbnRIZWlnaHQgPSBpbm5lclRleHRSZW5kZXJlci0+aGVpZ2h0KCk7CiAKLSAgICBM
YXlvdXRVbml0IGhlaWdodExpbWl0ID0gKGlucHV0RWxlbWVudCgpLT5pc1NlYXJjaEZpZWxkKCkg
fHwgIWNvbnRhaW5lcikgPyBoZWlnaHQoKSA6IGNvbnRlbnRIZWlnaHQoKTsKKyAgICBMYXlvdXRV
bml0IGhlaWdodExpbWl0ID0gY29tcHV0ZUhlaWdodExpbWl0KCk7CiAgICAgaWYgKGN1cnJlbnRI
ZWlnaHQgPiBoZWlnaHRMaW1pdCkgewogICAgICAgICBpZiAoZGVzaXJlZEhlaWdodCAhPSBjdXJy
ZW50SGVpZ2h0KQogICAgICAgICAgICAgc2V0TmVlZHNMYXlvdXQodHJ1ZSwgTWFya09ubHlUaGlz
KTsKQEAgLTI1OCwxMiArMTc5LDggQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6
OmxheW91dCgpCiAgICAgaWYgKCFjb250YWluZXIgJiYgY3VycmVudEhlaWdodCAhPSBjb250ZW50
SGVpZ2h0KCkpIHsKICAgICAgICAgTGF5b3V0VW5pdCBoZWlnaHREaWZmID0gY3VycmVudEhlaWdo
dCAtIGNvbnRlbnRIZWlnaHQoKTsKICAgICAgICAgaW5uZXJUZXh0UmVuZGVyZXItPnNldFkoaW5u
ZXJUZXh0UmVuZGVyZXItPnkoKSAtIChoZWlnaHREaWZmIC8gMiArIGxheW91dE1vZChoZWlnaHRE
aWZmLCAyKSkpOwotICAgIH0gZWxzZSBpZiAoaW5wdXRFbGVtZW50KCktPmlzU2VhcmNoRmllbGQo
KSAmJiBjb250YWluZXJSZW5kZXJlciAmJiBjb250YWluZXJSZW5kZXJlci0+aGVpZ2h0KCkgPiBj
b250ZW50SGVpZ2h0KCkpIHsKLSAgICAgICAgLy8gQSBxdWlyayBmb3IgZmluZC1pbi1wYWdlIGJv
eCBvbiBTYWZhcmkgV2luZG93cy4KLSAgICAgICAgLy8gaHR0cDovL3dlYmtpdC5vcmcvYi82MzE1
NwotICAgICAgICBMYXlvdXRVbml0IGhlaWdodERpZmYgPSBjb250YWluZXJSZW5kZXJlci0+aGVp
Z2h0KCkgLSBjb250ZW50SGVpZ2h0KCk7Ci0gICAgICAgIGNvbnRhaW5lclJlbmRlcmVyLT5zZXRZ
KGNvbnRhaW5lclJlbmRlcmVyLT55KCkgLSAoaGVpZ2h0RGlmZiAvIDIgKyBsYXlvdXRNb2QoaGVp
Z2h0RGlmZiwgMikpKTsKLSAgICB9CisgICAgfSBlbHNlCisgICAgICAgIGNlbnRlckNvbnRhaW5l
cklmTmVlZGVkKGNvbnRhaW5lclJlbmRlcmVyKTsKIAogICAgIC8vIElnbm9yZXMgdGhlIHBhZGRp
bmdzIGZvciB0aGUgaW5uZXIgc3BpbiBidXR0b24uCiAgICAgaWYgKFJlbmRlckJveCogaW5uZXJT
cGluQm94ID0gaW5uZXJTcGluQnV0dG9uRWxlbWVudCgpID8gaW5uZXJTcGluQnV0dG9uRWxlbWVu
dCgpLT5yZW5kZXJCb3goKSA6IDApIHsKQEAgLTQ1Myw5ICszNzAsNiBAQCB2b2lkIFJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZTo6dXBkYXRlRnJvbUVsZW1lbnQoKQogCiAgICAgaWYgKGNhbmNl
bEJ1dHRvbkVsZW1lbnQoKSkKICAgICAgICAgdXBkYXRlQ2FuY2VsQnV0dG9uVmlzaWJpbGl0eSgp
OwotCi0gICAgaWYgKG1fc2VhcmNoUG9wdXBJc1Zpc2libGUpCi0gICAgICAgIG1fc2VhcmNoUG9w
dXAtPnBvcHVwTWVudSgpLT51cGRhdGVGcm9tRWxlbWVudCgpOwogfQogCiBQYXNzUmVmUHRyPFJl
bmRlclN0eWxlPiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZUlubmVyVGV4dFN0
eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBzdGFydFN0eWxlKSBjb25zdApAQCAtNTI4LDE1NiArNDQy
LDYgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmF1
dG9zYXZlTmFtZSgpIGNvbnN0CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2Rl
KCkpLT5nZXRBdHRyaWJ1dGUoYXV0b3NhdmVBdHRyKTsKIH0KIAotLy8gUG9wdXBNZW51Q2xpZW50
IG1ldGhvZHMKLXZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp2YWx1ZUNoYW5nZWQo
dW5zaWduZWQgbGlzdEluZGV4LCBib29sIGZpcmVFdmVudHMpCi17Ci0gICAgQVNTRVJUKHN0YXRp
Y19jYXN0PGludD4obGlzdEluZGV4KSA8IGxpc3RTaXplKCkpOwotICAgIEhUTUxJbnB1dEVsZW1l
bnQqIGlucHV0ID0gaW5wdXRFbGVtZW50KCk7Ci0gICAgaWYgKHN0YXRpY19jYXN0PGludD4obGlz
dEluZGV4KSA9PSAobGlzdFNpemUoKSAtIDEpKSB7Ci0gICAgICAgIGlmIChmaXJlRXZlbnRzKSB7
Ci0gICAgICAgICAgICBtX3JlY2VudFNlYXJjaGVzLmNsZWFyKCk7Ci0gICAgICAgICAgICBjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWUgPSBhdXRvc2F2ZU5hbWUoKTsKLSAgICAgICAgICAgIGlmICgh
bmFtZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIW1fc2VhcmNoUG9wdXApCi0g
ICAgICAgICAgICAgICAgICAgIG1fc2VhcmNoUG9wdXAgPSBkb2N1bWVudCgpLT5wYWdlKCktPmNo
cm9tZSgpLT5jcmVhdGVTZWFyY2hQb3B1cE1lbnUodGhpcyk7Ci0gICAgICAgICAgICAgICAgbV9z
ZWFyY2hQb3B1cC0+c2F2ZVJlY2VudFNlYXJjaGVzKG5hbWUsIG1fcmVjZW50U2VhcmNoZXMpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW5wdXQtPnNl
dFZhbHVlKGl0ZW1UZXh0KGxpc3RJbmRleCkpOwotICAgICAgICBpZiAoZmlyZUV2ZW50cykKLSAg
ICAgICAgICAgIGlucHV0LT5vblNlYXJjaCgpOwotICAgICAgICBpbnB1dC0+c2VsZWN0KCk7Ci0g
ICAgfQotfQotCi1TdHJpbmcgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppdGVtVGV4dCh1
bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0Ci17Ci0gICAgaW50IHNpemUgPSBsaXN0U2l6ZSgpOwot
ICAgIGlmIChzaXplID09IDEpIHsKLSAgICAgICAgQVNTRVJUKCFsaXN0SW5kZXgpOwotICAgICAg
ICByZXR1cm4gc2VhcmNoTWVudU5vUmVjZW50U2VhcmNoZXNUZXh0KCk7Ci0gICAgfQotICAgIGlm
ICghbGlzdEluZGV4KQotICAgICAgICByZXR1cm4gc2VhcmNoTWVudVJlY2VudFNlYXJjaGVzVGV4
dCgpOwotICAgIGlmIChpdGVtSXNTZXBhcmF0b3IobGlzdEluZGV4KSkKLSAgICAgICAgcmV0dXJu
IFN0cmluZygpOwotICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ+KGxpc3RJbmRleCkgPT0gKHNpemUg
LSAxKSkKLSAgICAgICAgcmV0dXJuIHNlYXJjaE1lbnVDbGVhclJlY2VudFNlYXJjaGVzVGV4dCgp
OwotICAgIHJldHVybiBtX3JlY2VudFNlYXJjaGVzW2xpc3RJbmRleCAtIDFdOwotfQotCi1TdHJp
bmcgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppdGVtTGFiZWwodW5zaWduZWQpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1TdHJpbmcgUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjppdGVtSWNvbih1bnNpZ25lZCkgY29uc3QKLXsKLSAgICByZXR1cm4gU3RyaW5n
KCk7Ci19Ci0KLWJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppdGVtSXNFbmFibGVk
KHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKLXsKLSAgICAgaWYgKCFsaXN0SW5kZXggfHwgaXRl
bUlzU2VwYXJhdG9yKGxpc3RJbmRleCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotUG9wdXBNZW51U3R5bGUgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
OjppdGVtU3R5bGUodW5zaWduZWQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1lbnVTdHlsZSgpOwot
fQotCi1Qb3B1cE1lbnVTdHlsZSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Om1lbnVTdHls
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFBvcHVwTWVudVN0eWxlKHN0eWxlKCktPnZpc2l0ZWRE
ZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgc3R5bGUoKS0+dmlzaXRlZERlcGVuZGVu
dENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSwgc3R5bGUoKS0+Zm9udCgpLCBzdHls
ZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSwKLSAgICAgICAgc3R5bGUoKS0+ZGlzcGxheSgp
ID09IE5PTkUsIHN0eWxlKCktPnRleHRJbmRlbnQoKSwgc3R5bGUoKS0+ZGlyZWN0aW9uKCksIGlz
T3ZlcnJpZGUoc3R5bGUoKS0+dW5pY29kZUJpZGkoKSkpOwotfQotCi1pbnQgUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lOjpjbGllbnRJbnNldExlZnQoKSBjb25zdAotewotICAgIC8vIEluc2V0
IHRoZSBtZW51IGJ5IHRoZSByYWRpdXMgb2YgdGhlIGNhcCBvbiB0aGUgbGVmdCBzbyB0aGF0Ci0g
ICAgLy8gaXQgb25seSBydW5zIGFsb25nIHRoZSBzdHJhaWdodCBwYXJ0IG9mIHRoZSBiZXplbC4K
LSAgICByZXR1cm4gaGVpZ2h0KCkgLyAyOwotfQotCi1pbnQgUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjpjbGllbnRJbnNldFJpZ2h0KCkgY29uc3QKLXsKLSAgICAvLyBJbnNldCB0aGUgbWVu
dSBieSB0aGUgcmFkaXVzIG9mIHRoZSBjYXAgb24gdGhlIHJpZ2h0IHNvIHRoYXQKLSAgICAvLyBp
dCBvbmx5IHJ1bnMgYWxvbmcgdGhlIHN0cmFpZ2h0IHBhcnQgb2YgdGhlIGJlemVsICh1bmxlc3Mg
aXQgbmVlZHMKLSAgICAvLyB0byBiZSB3aWRlcikuCi0gICAgcmV0dXJuIGhlaWdodCgpIC8gMjsK
LX0KLQotTGF5b3V0VW5pdCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNsaWVudFBhZGRp
bmdMZWZ0KCkgY29uc3QKLXsKLSAgICBMYXlvdXRVbml0IHBhZGRpbmcgPSBwYWRkaW5nTGVmdCgp
OwotICAgIGlmIChSZW5kZXJCb3gqIGJveCA9IGlubmVyQmxvY2tFbGVtZW50KCkgPyBpbm5lckJs
b2NrRWxlbWVudCgpLT5yZW5kZXJCb3goKSA6IDApCi0gICAgICAgIHBhZGRpbmcgKz0gYm94LT54
KCk7Ci0gICAgcmV0dXJuIHBhZGRpbmc7Ci19Ci0KLUxheW91dFVuaXQgUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjpjbGllbnRQYWRkaW5nUmlnaHQoKSBjb25zdAotewotICAgIExheW91dFVu
aXQgcGFkZGluZyA9IHBhZGRpbmdSaWdodCgpOwotICAgIGlmIChSZW5kZXJCb3gqIGNvbnRhaW5l
ckJveCA9IGNvbnRhaW5lckVsZW1lbnQoKSA/IGNvbnRhaW5lckVsZW1lbnQoKS0+cmVuZGVyQm94
KCkgOiAwKSB7Ci0gICAgICAgIGlmIChSZW5kZXJCb3gqIGlubmVyQmxvY2tCb3ggPSBpbm5lckJs
b2NrRWxlbWVudCgpID8gaW5uZXJCbG9ja0VsZW1lbnQoKS0+cmVuZGVyQm94KCkgOiAwKQotICAg
ICAgICAgICAgcGFkZGluZyArPSBjb250YWluZXJCb3gtPndpZHRoKCkgLSAoaW5uZXJCbG9ja0Jv
eC0+eCgpICsgaW5uZXJCbG9ja0JveC0+d2lkdGgoKSk7Ci0gICAgfQotICAgIHJldHVybiBwYWRk
aW5nOwotfQotCi1pbnQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsaXN0U2l6ZSgpIGNv
bnN0Ci17Ci0gICAgLy8gSWYgdGhlcmUgYXJlIG5vIHJlY2VudCBzZWFyY2hlcywgdGhlbiBvdXIg
bWVudSB3aWxsIGhhdmUgMSAiTm8gcmVjZW50IHNlYXJjaGVzIiBpdGVtLgotICAgIGlmICghbV9y
ZWNlbnRTZWFyY2hlcy5zaXplKCkpCi0gICAgICAgIHJldHVybiAxOwotICAgIC8vIE90aGVyd2lz
ZSwgbGVhdmUgcm9vbSBpbiB0aGUgbWVudSBmb3IgYSBoZWFkZXIsIGEgc2VwYXJhdG9yLCBhbmQg
dGhlICJDbGVhciByZWNlbnQgc2VhcmNoZXMiIGl0ZW0uCi0gICAgcmV0dXJuIG1fcmVjZW50U2Vh
cmNoZXMuc2l6ZSgpICsgMzsKLX0KLQotaW50IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6
c2VsZWN0ZWRJbmRleCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIC0xOwotfQotCi12b2lkIFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZTo6cG9wdXBEaWRIaWRlKCkKLXsKLSAgICBtX3NlYXJjaFBv
cHVwSXNWaXNpYmxlID0gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lOjppdGVtSXNTZXBhcmF0b3IodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAotewotICAgIC8v
IFRoZSBzZXBhcmF0b3Igd2lsbCBiZSB0aGUgc2Vjb25kIHRvIGxhc3QgaXRlbSBpbiBvdXIgbGlz
dC4KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihsaXN0SW5kZXgpID09IChsaXN0U2l6ZSgp
IC0gMik7Ci19Ci0KLWJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppdGVtSXNMYWJl
bCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxpc3RJbmRleCA9PSAw
OwotfQotCi1ib29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aXRlbUlzU2VsZWN0ZWQo
dW5zaWduZWQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZTo6c2V0VGV4dEZyb21JdGVtKHVuc2lnbmVkIGxpc3RJbmRleCkK
LXsKLSAgICBpbnB1dEVsZW1lbnQoKS0+c2V0VmFsdWUoaXRlbVRleHQobGlzdEluZGV4KSk7Ci19
Ci0KLUZvbnRTZWxlY3RvciogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpmb250U2VsZWN0
b3IoKSBjb25zdAotewotICAgIHJldHVybiBkb2N1bWVudCgpLT5zdHlsZVJlc29sdmVyKCktPmZv
bnRTZWxlY3RvcigpOwotfQotCi1Ib3N0V2luZG93KiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmU6Omhvc3RXaW5kb3coKSBjb25zdAotewotICAgIHJldHVybiBkb2N1bWVudCgpLT52aWV3KCkt
Pmhvc3RXaW5kb3coKTsKLX0KLQogdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmF1
dG9zY3JvbGwoKQogewogICAgIFJlbmRlckxheWVyKiBsYXllciA9IGlubmVyVGV4dEVsZW1lbnQo
KS0+cmVuZGVyQm94KCktPmxheWVyKCk7CkBAIC03NDEsMTcgKzUwNSw2IEBAIGJvb2wgUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsb2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rp
b24gZGlyZWN0aW9uCiAgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpsb2dpY2FsU2Nyb2xsKGRpcmVj
dGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIsIHN0b3BOb2RlKTsKIH0KIAotUGFzc1JlZlB0
cjxTY3JvbGxiYXI+IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y3JlYXRlU2Nyb2xsYmFy
KFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplIGNvbnRyb2xTaXplKQotewotICAgIFJlZlB0
cjxTY3JvbGxiYXI+IHdpZGdldDsKLSAgICBib29sIGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlID0g
c3R5bGUoKS0+aGFzUHNldWRvU3R5bGUoU0NST0xMQkFSKTsKLSAgICBpZiAoaGFzQ3VzdG9tU2Ny
b2xsYmFyU3R5bGUpCi0gICAgICAgIHdpZGdldCA9IFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3Vz
dG9tU2Nyb2xsYmFyKHNjcm9sbGFibGVBcmVhLCBvcmllbnRhdGlvbiwgdGhpcy0+bm9kZSgpKTsK
LSAgICBlbHNlCi0gICAgICAgIHdpZGdldCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xs
YmFyKHNjcm9sbGFibGVBcmVhLCBvcmllbnRhdGlvbiwgY29udHJvbFNpemUpOwotICAgIHJldHVy
biB3aWRnZXQucmVsZWFzZSgpOwotfQotCiBIVE1MSW5wdXRFbGVtZW50KiBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OmlucHV0RWxlbWVudCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG5vZGUo
KS0+dG9JbnB1dEVsZW1lbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAppbmRleCA2ZTIxYzg1NmMxMGZhOWZiYTQz
NmMwNmY3NDljMTRlMWUyYTgwYmE2Li43MWZhOTgwMmYzN2RjZWE4YWM2MWUzNzc3YWZhMmExODA4
ZDUxZTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZS5oCkBAIC0yMywxNSArMjMsMTQgQEAKICNpZm5kZWYgUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lX2gKICNkZWZpbmUgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lX2gKIAotI2luY2x1ZGUgIlBvcHVwTWVudUNsaWVudC5oIgorI2luY2x1ZGUgIkhUTUxJbnB1
dEVsZW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbC5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxJbnB1dEVsZW1lbnQ7Ci1jbGFzcyBTZWFyY2hQb3B1cE1l
bnU7CiAKLWNsYXNzIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZSA6IHB1YmxpYyBSZW5kZXJU
ZXh0Q29udHJvbCwgcHJpdmF0ZSBQb3B1cE1lbnVDbGllbnQgeworY2xhc3MgUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lIDogcHVibGljIFJlbmRlclRleHRDb250cm9sIHsKIHB1YmxpYzoKICAg
ICBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUoTm9kZSopOwogICAgIHZpcnR1YWwgflJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZSgpOwpAQCAtNDAsMTQgKzM5LDE4IEBAIHB1YmxpYzoKICAg
ICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBjcmVhdGVJbm5lckJsb2NrU3R5bGUoY29uc3QgUmVu
ZGVyU3R5bGUqIHN0YXJ0U3R5bGUpIGNvbnN0OwogICAgIHZvaWQgdXBkYXRlQ2FuY2VsQnV0dG9u
VmlzaWJpbGl0eSgpIGNvbnN0OwogCi0gICAgdm9pZCBhZGRTZWFyY2hSZXN1bHQoKTsKLSAgICB2
b2lkIHN0b3BTZWFyY2hFdmVudFRpbWVyKCk7CisgICAgdm9pZCBjYXBzTG9ja1N0YXRlTWF5SGF2
ZUNoYW5nZWQoKTsKIAotICAgIGJvb2wgcG9wdXBJc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBt
X3NlYXJjaFBvcHVwSXNWaXNpYmxlOyB9Ci0gICAgdm9pZCBzaG93UG9wdXAoKTsKLSAgICB2b2lk
IGhpZGVQb3B1cCgpOworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBjb21wdXRl
SGVpZ2h0TGltaXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgY2VudGVyQ29udGFpbmVySWZO
ZWVkZWQoUmVuZGVyQm94KikgY29uc3QgeyB9CiAKLSAgICB2b2lkIGNhcHNMb2NrU3RhdGVNYXlI
YXZlQ2hhbmdlZCgpOworICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCgpIGNvbnN0
OworCisgICAgSFRNTEVsZW1lbnQqIGNvbnRhaW5lckVsZW1lbnQoKSBjb25zdDsKKyAgICBIVE1M
RWxlbWVudCogaW5uZXJCbG9ja0VsZW1lbnQoKSBjb25zdDsKKworICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgYXV0b3NhdmVOYW1lKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29s
IGhhc0NvbnRyb2xDbGlwKCkgY29uc3Q7CkBAIC04Myw1MiArODYsMjUgQEAgcHJpdmF0ZToKIAog
ICAgIEVWaXNpYmlsaXR5IHZpc2liaWxpdHlGb3JDYW5jZWxCdXR0b24oKSBjb25zdDsKICAgICBi
b29sIHRleHRTaG91bGRCZVRydW5jYXRlZCgpIGNvbnN0OwotICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgYXV0b3NhdmVOYW1lKCkgY29uc3Q7Ci0KLSAgICAvLyBQb3B1cE1lbnVDbGllbnQgbWV0aG9k
cwotICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQodW5zaWduZWQgbGlzdEluZGV4LCBib29s
IGZpcmVFdmVudHMgPSB0cnVlKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0aW9u
Q2hhbmdlZCh1bnNpZ25lZCwgYm9vbCkgT1ZFUlJJREUgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNl
bGVjdGlvbkNsZWFyZWQoKSBPVkVSUklERSB7IH0KLSAgICB2aXJ0dWFsIFN0cmluZyBpdGVtVGV4
dCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgU3RyaW5n
IGl0ZW1MYWJlbCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1
YWwgU3RyaW5nIGl0ZW1JY29uKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCBTdHJpbmcgaXRlbVRvb2xUaXAodW5zaWduZWQpIGNvbnN0IE9WRVJSSURFIHsg
cmV0dXJuIFN0cmluZygpOyB9Ci0gICAgdmlydHVhbCBTdHJpbmcgaXRlbUFjY2Vzc2liaWxpdHlU
ZXh0KHVuc2lnbmVkKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBTdHJpbmcoKTsgfQotICAgIHZp
cnR1YWwgYm9vbCBpdGVtSXNFbmFibGVkKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QgT1ZFUlJJ
REU7Ci0gICAgdmlydHVhbCBQb3B1cE1lbnVTdHlsZSBpdGVtU3R5bGUodW5zaWduZWQgbGlzdElu
ZGV4KSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFBvcHVwTWVudVN0eWxlIG1lbnVTdHls
ZSgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgaW50IGNsaWVudEluc2V0TGVmdCgpIGNv
bnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgaW50IGNsaWVudEluc2V0UmlnaHQoKSBjb25zdCBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIExheW91dFVuaXQgY2xpZW50UGFkZGluZ0xlZnQoKSBjb25z
dCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIExheW91dFVuaXQgY2xpZW50UGFkZGluZ1JpZ2h0KCkg
Y29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBpbnQgbGlzdFNpemUoKSBjb25zdCBPVkVSUklE
RTsKLSAgICB2aXJ0dWFsIGludCBzZWxlY3RlZEluZGV4KCkgY29uc3QgT1ZFUlJJREU7Ci0gICAg
dmlydHVhbCB2b2lkIHBvcHVwRGlkSGlkZSgpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCBp
dGVtSXNTZXBhcmF0b3IodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdCBPVkVSUklERTsKLSAgICB2
aXJ0dWFsIGJvb2wgaXRlbUlzTGFiZWwodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdCBPVkVSUklE
RTsKLSAgICB2aXJ0dWFsIGJvb2wgaXRlbUlzU2VsZWN0ZWQodW5zaWduZWQgbGlzdEluZGV4KSBj
b25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUG9wT3ZlcigpIGNvbnN0IE9W
RVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIHZhbHVlU2hvdWxkQ2hh
bmdlT25Ib3RUcmFjaygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmly
dHVhbCB2b2lkIHNldFRleHRGcm9tSXRlbSh1bnNpZ25lZCBsaXN0SW5kZXgpIE9WRVJSSURFOwot
ICAgIHZpcnR1YWwgRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IoKSBjb25zdCBPVkVSUklERTsK
LSAgICB2aXJ0dWFsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3coKSBjb25zdCBPVkVSUklERTsKLSAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYWJs
ZUFyZWEqLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUpIE9WRVJS
SURFOwogCi0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50KCkgY29uc3Q7Ci0KLSAg
ICBIVE1MRWxlbWVudCogY29udGFpbmVyRWxlbWVudCgpIGNvbnN0OwotICAgIEhUTUxFbGVtZW50
KiBpbm5lckJsb2NrRWxlbWVudCgpIGNvbnN0OwogICAgIEhUTUxFbGVtZW50KiBpbm5lclNwaW5C
dXR0b25FbGVtZW50KCkgY29uc3Q7CiAgICAgSFRNTEVsZW1lbnQqIHJlc3VsdHNCdXR0b25FbGVt
ZW50KCkgY29uc3Q7CiAgICAgSFRNTEVsZW1lbnQqIGNhbmNlbEJ1dHRvbkVsZW1lbnQoKSBjb25z
dDsKIAotICAgIGJvb2wgbV9zZWFyY2hQb3B1cElzVmlzaWJsZTsKICAgICBib29sIG1fc2hvdWxk
RHJhd0NhcHNMb2NrSW5kaWNhdG9yOwogICAgIExheW91dFVuaXQgbV9kZXNpcmVkSW5uZXJUZXh0
SGVpZ2h0OwotICAgIFJlZlB0cjxTZWFyY2hQb3B1cE1lbnU+IG1fc2VhcmNoUG9wdXA7Ci0gICAg
VmVjdG9yPFN0cmluZz4gbV9yZWNlbnRTZWFyY2hlczsKIH07CiAKK2lubGluZSBIVE1MRWxlbWVu
dCogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjb250YWluZXJFbGVtZW50KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gaW5wdXRFbGVtZW50KCktPmNvbnRhaW5lckVsZW1lbnQoKTsKK30KKwor
aW5saW5lIEhUTUxFbGVtZW50KiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmlubmVyQmxv
Y2tFbGVtZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaW5wdXRFbGVtZW50KCktPmlubmVyQmxv
Y2tFbGVtZW50KCk7Cit9CisKIGlubGluZSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUqIHRv
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKFJlbmRlck9iamVjdCogb2JqZWN0KQogewogICAg
IEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNUZXh0RmllbGQoKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyaW5nQWxsSW5PbmUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcmluZ0FsbEluT25lLmNwcAppbmRleCBkMTdiZDMxM2E0MzE5
MGM5YmRmZTVjZThkMzJmOGY3MTg1NDQ0YTRmLi4xZjBhNGEzOGU3MmUyMWE3ZGMzZjBhZGNkM2Nh
ZTM2M2M4YTUxZDkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
aW5nQWxsSW5PbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJpbmdB
bGxJbk9uZS5jcHAKQEAgLTkxLDYgKzkxLDcgQEAKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIu
Y3BwIgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhclBhcnQuY3BwIgogI2luY2x1ZGUgIlJlbmRl
clNjcm9sbGJhclRoZW1lLmNwcCIKKyNpbmNsdWRlICJSZW5kZXJTZWFyY2hGaWVsZC5jcHAiCiAj
aW5jbHVkZSAiUmVuZGVyU2xpZGVyLmNwcCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZS5jcHAiCiAj
aW5jbHVkZSAiUmVuZGVyVGFibGVDYXB0aW9uLmNwcCIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147722</attachid>
            <date>2012-06-14 21:15:45 -0700</date>
            <delta_ts>2012-06-14 22:09:53 -0700</delta_ts>
            <desc>Patch 3</desc>
            <filename>bug-88980-20120615131544.patch</filename>
            <type>text/plain</type>
            <size>67811</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwMzkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDNlNmUyYmZhNGE2MzBi
MTA5ZGIyMmFiMzMxZWI3MGI2NDg3ZjMzZi4uNDM5MDQxOTM3ZGJhZmI0ZTJjZjAyMmQxNDFiNDI4
OWZjOTEwNzY2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc2IEBACisyMDEyLTA2LTE1ICBZb3No
aWZ1bWkgSW5vdWUgIDx5b3NpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Zvcm1zXSBNb3Zl
IHNlYXJjaCBmaWVsZCByZWxhdGVkIGNvZGUgdG8gUmVuZGVyU2VhcmNoRmllbGQgZnJvbSBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTg4OTgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtb3ZlcyBzZWFyY2ggZmllbGQgcmVsYXRlZCBtZXRo
b2RzIGluIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZQorICAgICAgICB0byBuZXcgY2xhc3Mg
UmVuZGVyU2VhcmNoRmllbGQgYW5kIGNoYW5nZXMgcmVsYXRlZCBjbGFzc2VzIHRvIHVzZQorICAg
ICAgICBSZW5kZXJTZWFyY2hGaWVsZC4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgcGF0
Y2ggZG9lc24ndCBjaGFuZ2UgYmVoYXZpb3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDog
QWRkZWQgbmV3IGZpbGUgUmVuZGVyU2VhcmNoRmllbGQuY3BwCisgICAgICAgICogR05VbWFrZWZp
bGUubGlzdC5hbTogQWRkZWQgbmV3IGZpbGUgUmVuZGVyU2VhcmNoRmllbGQuY3BwIGFuZCBSZW5k
ZXJTZWFyY2hGaWVsZC5oCisgICAgICAgICogVGFyZ2V0LnByaTogZGl0dG8KKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6IGRpaXRvCisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2o6IGRpdHRvCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBk
aXR0bworICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MSW5wdXRFbGVtZW50OjphZGRTZWFyY2hSZXN1bHQpOiBDaGFuZ2VkIHRvIGNhbGwg
SW5wdXRUeXBlOjphZGRTZWFyY2hSZXN1bHQuCisgICAgICAgICogaHRtbC9JbnB1dFR5cGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjphZGRTZWFyY2hSZXN1bHQpOiBBZGRlZC4K
KyAgICAgICAgKiBodG1sL1NlYXJjaElucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
ZWFyY2hJbnB1dFR5cGU6OmFkZFNlYXJjaFJlc3VsdCk6IE1vdmVkIGZyb20gSFRNTElucHV0RWxl
bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaElucHV0VHlwZTo6Y3JlYXRlUmVuZGVyZXIp
OiBBZGRlZCB0byBjcmVhdGUgUmVuZGVyU2VhcmNoRmllbGQuCisgICAgICAgICogaHRtbC9TZWFy
Y2hGaWVsZElucHV0VHlwZS5oOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoRmllbGRJbnB1dFR5
cGUpOgorICAgICAgICAqIGh0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50OjpkZWZh
dWx0RXZlbnRIYW5kbGVyKTogVXNlIFJlbmRlclNlYXJjaEZpZWxkIGluc3RlYWQgb2YgUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTZWFyY2hG
aWVsZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6UmVuZGVyU2Vh
cmNoRmllbGQpOiBSZW5hbWVkIHRvIFJlbmRlclNlYXJjaEZpZWxkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU2VhcmNoRmllbGQ6On5SZW5kZXJTZWFyY2hGaWVsZCk6IGRpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OmFkZFNlYXJjaFJlc3VsdCk6IGRpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OnNob3dQb3B1cCk6IGRpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OmhpZGVQb3B1cCk6IGRpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OnZhbHVlQ2hhbmdlZCk6IGRpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6Oml0ZW1UZXh0KTogZGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6aXRlbUxhYmVsKTogZGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6aXRlbUljb24pOiBkaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjppdGVtSXNFbmFibGVkKTogZGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6aXRlbVN0eWxlKTogZGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6bWVudVN0eWxlKTogZGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6Y2xpZW50SW5zZXRMZWZ0
KTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6Y2xpZW50SW5z
ZXRSaWdodCk6IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OmNs
aWVudFBhZGRpbmdMZWZ0KTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hG
aWVsZDo6Y2xpZW50UGFkZGluZ1JpZ2h0KTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTZWFyY2hGaWVsZDo6bGlzdFNpemUpOiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNlYXJjaEZpZWxkOjpzZWxlY3RlZEluZGV4KTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTZWFyY2hGaWVsZDo6cG9wdXBEaWRIaWRlKTogZGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTZWFyY2hGaWVsZDo6aXRlbUlzU2VwYXJhdG9yKTogZGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6aXRlbUlzTGFiZWwpOiBkaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjppdGVtSXNTZWxlY3RlZCk6IGRpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OnNldFRleHRGcm9tSXRlbSk6IGRpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OmZvbnRTZWxlY3Rvcik6IGRp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6Omhvc3RXaW5kb3cpOiBk
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjpjcmVhdGVTY3JvbGxi
YXIpOiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjpjb21wdXRl
SGVpZ2h0TGltaXQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxk
OjpjZW50ZXJDb250YWluZXJJZk5lZWRlZCk6IEFkZGVkLgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJTZWFyY2hGaWVsZC5oOgorICAgICAgICAoV2ViQ29yZTo6dG9SZW5kZXJTZWFyY2hGaWVs
ZCk6IEFkZGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUpOiBSZW1vdmUgc2VhcmNoIGZpZWxkIHJlbGF0ZWQg
Y29kZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6flJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZSk6IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjb21wdXRlSGVpZ2h0TGltaXQpOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5b3V0KTogVXNl
IG5ldyBtZXRob2RzIGZvciByZW1vdmluZyBpc1NlYXJjaEZpZWxkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp1cGRhdGVGcm9tRWxlbWVudCk6IFJlbW92
ZWQgc2VhcmNoIGZpZWxkIHJlbGF0ZWQgY29kZS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OmNlbnRlckNvbnRhaW5lcklmTmVlZGVkKTogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNvbnRhaW5lckVsZW1lbnQp
OiBFeHBvc2VkIGZvciBSZW5kZXJTZWFyY2hGaWVsZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZTo6aW5uZXJCbG9ja0VsZW1lbnQpOiBFeHBvc2VkIGZvciBS
ZW5kZXJTZWFyY2hGaWVsZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyaW5nQWxsSW5PbmUu
Y3BwOiBBZGRlZCBSZW5kZXJTZWFyY2hGaWVsZC5jcHAKKwogMjAxMi0wNi0xNCAgWW9zaGlmdW1p
IElub3VlICA8eW9zaW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtGb3Jtc10gQ29weSBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUue2NwcCxofSB0byBSZW5kZXJTZWFyY2hGaWxlZC57Y3Bw
LGh9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGUyNzNjMGZkNTYwMTViOTU5NjNiZmI0ODM4OWEw
M2IyYzc1YmRiYWQuLjlhZDg1YmI5NDIyNTA0ZGMzMmNkNmQxZmY4OGYzNDY4M2FlZDQ2ZmEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMzg3LDYgKzEzODcsNyBAQCBTRVQoV2ViQ29yZV9TT1VS
Q0VTCiAgICAgcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhci5jcHAKICAgICByZW5kZXJpbmcvUmVu
ZGVyU2Nyb2xsYmFyUGFydC5jcHAKICAgICByZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyVGhlbWUu
Y3BwCisgICAgcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmNwcAogICAgIHJlbmRlcmluZy9S
ZW5kZXJTbGlkZXIuY3BwCiAgICAgcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAogICAgIHJlbmRl
cmluZy9SZW5kZXJUYWJsZUNhcHRpb24uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpp
bmRleCA0YTQ1YzdmMDM0MDAxMmFiMzYxZTAzYmNiYTk0MjY3NDJlYzU2MDcwLi4zN2I3ZTVhYzI5
OTdlYTMxNjFlOTRhYzg2NDYxYTZjZTY3NjViMzQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0KQEAgLTM5MDYsNiArMzkwNiw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclBhcnQuaCBcCiAJU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclRoZW1lLmNwcCBcCiAJU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclRoZW1lLmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTZWFyY2hGaWVsZC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Vs
ZWN0aW9uSW5mby5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNw
cCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5oIFwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJp
CmluZGV4IDE0ZjdlZDE4MGE3MTJiZTUwNDg4YWM4NWM2MWM2Y2U0MjZkN2QzODQuLjY5YmFhOTI5
ZmQ2NzJjOTI2MTY0OGY4YjIyMGY1N2JjZTY3ZDNmZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMTMwOSw2
ICsxMzA5LDcgQEAgU09VUkNFUyArPSBcCiAgICAgcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhci5j
cHAgXAogICAgIHJlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJQYXJ0LmNwcCBcCiAgICAgcmVuZGVy
aW5nL1JlbmRlclNjcm9sbGJhclRoZW1lLmNwcCBcCisgICAgcmVuZGVyaW5nL1JlbmRlclNlYXJj
aEZpZWxkLmNwcCBcCiAgICAgcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAgXAogICAgIHJlbmRl
cmluZy9SZW5kZXJUYWJsZS5jcHAgXAogICAgIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNhcHRpb24u
Y3BwIFwKQEAgLTI1MTQsNiArMjUxNSw3IEBAIEhFQURFUlMgKz0gXAogICAgIHJlbmRlcmluZy9S
ZW5kZXJTY3JvbGxiYXIuaCBcCiAgICAgcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclBhcnQuaCBc
CiAgICAgcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclRoZW1lLmggXAorICAgIHJlbmRlcmluZy9S
ZW5kZXJTZWFyY2hGaWVsZC5oIFwKICAgICByZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmggXAogICAg
IHJlbmRlcmluZy9SZW5kZXJUYWJsZUNhcHRpb24uaCBcCiAgICAgcmVuZGVyaW5nL1JlbmRlclRh
YmxlQ2VsbC5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA5Y2I2YzdkNDM2ZDNhZDQ3MmY0YTY2OTk5
NDhlMmI0MDIwMzdlNTMzLi41YmI2ZGRhNTRkYmY5NmI0N2RjMWNiYTEzOTVhMTIzYTNmNjYwYTNh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCkBAIC00OTAyLDYgKzQ5MDIsOCBAQAogICAgICAgICAgICAgJ3Jl
bmRlcmluZy9SZW5kZXJTY3JvbGxiYXJQYXJ0LmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9S
ZW5kZXJTY3JvbGxiYXJUaGVtZS5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJT
Y3JvbGxiYXJUaGVtZS5oJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmll
bGQuY3BwJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuaCcsCiAg
ICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNlbGVjdGlvbkluZm8uaCcsCiAgICAgICAgICAg
ICAncmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9S
ZW5kZXJTbGlkZXIuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCmluZGV4IDE3YWUwZGY1MTY2NjYxZWFjM2ExYjcwYWMyYjNmN2Y4NDYwMjI3ZTUuLmQw
NmRkYWFhMTQ2MmQ4OWNjNTFmOWYzZWQ2ZDhiZWU0ODljZWFkZWMgMTAwNzU1Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC00MTUwMyw2ICs0MTUwMyw2MiBA
QAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5k
ZXJpbmdcUmVuZGVyU2VhcmNoRmllbGQuY3BwIgorCQkJCT4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRp
b24KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVl
IgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJ
CQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJ
CQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgor
CQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkv
PgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJ
CU5hbWU9IkRlYnVnX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9
InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wi
CisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRp
b24KKwkJCQkJTmFtZT0iUmVsZWFzZV9DYWlyb19DRkxpdGV8V2luMzIiCisJCQkJCUV4Y2x1ZGVk
RnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29t
cGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVD
b25maWd1cmF0aW9uCisJCQkJCU5hbWU9IkRlYnVnX0FsbHxXaW4zMiIKKwkJCQkJRXhjbHVkZWRG
cm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21w
aWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNv
bmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iUHJvZHVjdGlvbnxXaW4zMiIKKwkJCQkJRXhjbHVkZWRG
cm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21w
aWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTwvRmlsZT4K
KwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcUmVuZGVyU2VhcmNoRmll
bGQuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cmVuZGVyaW5nXFJlbmRlclNlbGVjdGlvbkluZm8uaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
ZWMzNjY2ZDVhNWM1Yzc4ODIzMTI3M2Y3YTk0OWRlOTA1ZjQ5ZmNhMi4uZGY4ZDVhODYyNWI4Nzcy
ZGEyOGY2Y2RlMGMyODJkYThmMTQyZmRmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTE4OSw2ICsxMTg5LDggQEAKIAkJNDUw
OTlDNDExMzcwQTc4MDAwNThENTEzIC8qIEljb25VUkwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDUwOTlDNDAxMzcwQTc4MDAwNThENTEzIC8qIElj
b25VUkwuY3BwICovOyB9OwogCQk0NTBDRUJGMDE1MDczQkJFMDAyQkIxNDkgLyogTGFiZWxhYmxl
RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0NTBDRUJFRTE1MDczQkJFMDAyQkIxNDkgLyogTGFiZWxhYmxlRWxlbWVudC5jcHAgKi87IH07
CiAJCTQ1MENFQkYxMTUwNzNCQkUwMDJCQjE0OSAvKiBMYWJlbGFibGVFbGVtZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NTBDRUJFRjE1MDczQkJF
MDAyQkIxNDkgLyogTGFiZWxhYmxlRWxlbWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTQ1OEZFNDA5MTU4OURGMEIwMDU2MDlFNiAvKiBSZW5k
ZXJTZWFyY2hGaWVsZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0NThGRTQwNzE1ODlERjBCMDA1NjA5RTYgLyogUmVuZGVyU2VhcmNoRmllbGQuY3Bw
ICovOyB9OworCQk0NThGRTQwQTE1ODlERjBCMDA1NjA5RTYgLyogUmVuZGVyU2VhcmNoRmllbGQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1OEZFNDA4
MTU4OURGMEIwMDU2MDlFNiAvKiBSZW5kZXJTZWFyY2hGaWVsZC5oICovOyB9OwogCQk0NUJBQzJC
MDEzNjBCQkFCMDA1REEyNTggLyogSWNvblVSTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDVCQUMyQUYxMzYwQkJBQjAwNURBMjU4IC8qIEljb25VUkwu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NUZF
QTVDRjE1NkRERThDMDA2NTQxMDEgLyogRGVjaW1hbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NUZFQTVDRDE1NkRERThDMDA2NTQxMDEgLyogRGVj
aW1hbC5jcHAgKi87IH07CiAJCTQ1RkVBNUQwMTU2RERFOEMwMDY1NDEwMSAvKiBEZWNpbWFsLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NUZFQTVDRTE1
NkRERThDMDA2NTQxMDEgLyogRGVjaW1hbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC04MjE4LDYgKzgyMjAsOCBAQAogCQk0NTA5OUM0MDEzNzBB
NzgwMDA1OEQ1MTMgLyogSWNvblVSTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBJY29uVVJMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDUwQ0VC
RUUxNTA3M0JCRTAwMkJCMTQ5IC8qIExhYmVsYWJsZUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGFiZWxhYmxlRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTQ1MENFQkVGMTUwNzNCQkUwMDJCQjE0OSAvKiBMYWJlbGFibGVF
bGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExhYmVsYWJsZUVsZW1l
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDU4RkU0MDcxNTg5REYwQjAwNTYw
OUU2IC8qIFJlbmRlclNlYXJjaEZpZWxkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFJlbmRlclNlYXJjaEZpZWxkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNDU4RkU0MDgxNTg5REYwQjAwNTYwOUU2IC8qIFJlbmRlclNlYXJjaEZpZWxkLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNlYXJjaEZpZWxkLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ1QkFDMkFGMTM2MEJCQUIwMDVEQTI1OCAvKiBJY29u
VVJMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEljb25VUkwuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDVGRUE1Q0QxNTZEREU4QzAwNjU0MTAxIC8qIERlY2lt
YWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVjaW1hbC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ1RkVBNUNFMTU2RERFOEMwMDY1NDEwMSAv
KiBEZWNpbWFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlY2ltYWwuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxMTE2LDYgKzIxMTIwLDggQEAKIAkJCQlC
QzNCRTk5MjBFOUMxQzdDMDA4MzU1ODggLyogUmVuZGVyU2Nyb2xsYmFyUGFydC5oICovLAogCQkJ
CUJDM0JFOUE0MEU5QzIzOTYwMDgzNTU4OCAvKiBSZW5kZXJTY3JvbGxiYXJUaGVtZS5jcHAgKi8s
CiAJCQkJQkMzQkU5OTgwRTlDMUU1RDAwODM1NTg4IC8qIFJlbmRlclNjcm9sbGJhclRoZW1lLmgg
Ki8sCisJCQkJNDU4RkU0MDcxNTg5REYwQjAwNTYwOUU2IC8qIFJlbmRlclNlYXJjaEZpZWxkLmNw
cCAqLywKKwkJCQk0NThGRTQwODE1ODlERjBCMDA1NjA5RTYgLyogUmVuZGVyU2VhcmNoRmllbGQu
aCAqLywKIAkJCQkwRjExQTU0RTBGMzkyMzMxMDBDMzc4ODQgLyogUmVuZGVyU2VsZWN0aW9uSW5m
by5oICovLAogCQkJCUFCMjQ3QTZBMEFGRDYzODMwMDNGQTVGRCAvKiBSZW5kZXJTbGlkZXIuY3Bw
ICovLAogCQkJCUFCMjQ3QTZCMEFGRDYzODMwMDNGQTVGRCAvKiBSZW5kZXJTbGlkZXIuaCAqLywK
QEAgLTI0MjcyLDYgKzI0Mjc4LDcgQEAKIAkJCQlCQzNCRTk5NDBFOUMxQzdDMDA4MzU1ODggLyog
UmVuZGVyU2Nyb2xsYmFyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzNCRTk5NTBFOUMxQzdDMDA4
MzU1ODggLyogUmVuZGVyU2Nyb2xsYmFyUGFydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMzQkU5
OTkwRTlDMUU1RDAwODM1NTg4IC8qIFJlbmRlclNjcm9sbGJhclRoZW1lLmggaW4gSGVhZGVycyAq
LywKKwkJCQk0NThGRTQwQTE1ODlERjBCMDA1NjA5RTYgLyogUmVuZGVyU2VhcmNoRmllbGQuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMTFBNTRGMEYzOTIzMzEwMEMzNzg4NCAvKiBSZW5kZXJTZWxl
Y3Rpb25JbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlBQjI0N0E2RDBBRkQ2MzgzMDAzRkE1RkQg
LyogUmVuZGVyU2xpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzhDOEZBRTBERENEMzFCMDBC
NTkyRjQgLyogUmVuZGVyU3R5bGUuaCBpbiBIZWFkZXJzICovLApAQCAtMjc0NjcsNiArMjc0NzQs
NyBAQAogCQkJCUJDM0JFOTkzMEU5QzFDN0MwMDgzNTU4OCAvKiBSZW5kZXJTY3JvbGxiYXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkMzQkU5QUIwRTlDMjQyMDAwODM1NTg4IC8qIFJlbmRlclNj
cm9sbGJhclBhcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMzQkU5QTUwRTlDMjM5NjAwODM1
NTg4IC8qIFJlbmRlclNjcm9sbGJhclRoZW1lLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ1OEZF
NDA5MTU4OURGMEIwMDU2MDlFNiAvKiBSZW5kZXJTZWFyY2hGaWVsZC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBQjI0N0E2QzBBRkQ2MzgzMDAzRkE1RkQgLyogUmVuZGVyU2xpZGVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUJDOEM4RkFEMEREQ0QzMUIwMEI1OTJGNCAvKiBSZW5kZXJTdHlsZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjRFNTcxNzEzMTMyNzYyMDBDRjg1QUYgLyogUmVuZGVy
U1ZHQWxsSW5PbmUuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5w
dXRFbGVtZW50LmNwcAppbmRleCBlMDAxNTAzZDE3MjgzZTA3YTE3ZDY1NmM2NjAxYTEyMmYzZmUz
Mjg0Li44YzE5MThlZDUzNjQxZmY3MjA3NDExYjU5NDVmYzI0ZTI5MGQ3NTQ0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKQEAgLTEzMTgsOSArMTMxOCw3IEBAIGJv
b2wgSFRNTElucHV0RWxlbWVudDo6aXNSZXF1aXJlZEZvcm1Db250cm9sKCkgY29uc3QKIAogdm9p
ZCBIVE1MSW5wdXRFbGVtZW50OjphZGRTZWFyY2hSZXN1bHQoKQogewotICAgIEFTU0VSVChpc1Nl
YXJjaEZpZWxkKCkpOwotICAgIGlmIChyZW5kZXJlcigpKQotICAgICAgICB0b1JlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZShyZW5kZXJlcigpKS0+YWRkU2VhcmNoUmVzdWx0KCk7CisgICAgbV9p
bnB1dFR5cGUtPmFkZFNlYXJjaFJlc3VsdCgpOwogfQogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6
Om9uU2VhcmNoKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcAppbmRleCBkZmM1MGUwMGJkOGFi
MGQyN2FmM2M1OWZiNDRhNTFmMTIwNjg4Nzk3Li4yOWM5ZjgwMWNlMmRjNmIzMmQ1N2Q0NGQyY2Rj
MzQwNDQ0ZTA5MTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCkBAIC01MjMsNiArNTIz
LDExIEBAIHZvaWQgSW5wdXRUeXBlOjphY2Nlc3NLZXlBY3Rpb24oYm9vbCkKICAgICBlbGVtZW50
KCktPmZvY3VzKGZhbHNlKTsKIH0KIAordm9pZCBJbnB1dFR5cGU6OmFkZFNlYXJjaFJlc3VsdCgp
Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIHZvaWQgSW5wdXRUeXBlOjphdHRh
Y2goKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuaCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmgKaW5kZXggMzg2MDUxZmFjYjcxMGE2YjU2
YmRiN2E4ZjBhNTk5N2M2MzUxYjIwMC4uNGVjMWIzMmRjOTY2NWM5NTc1MzAzM2JlMmVhMDA0NjRm
MDBlZDA1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5oCkBAIC0yMjIsNiArMjIyLDcgQEAgcHVi
bGljOgogCiAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoKTsKICAgICB2aXJ0dWFs
IFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSop
IGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGRTZWFyY2hSZXN1bHQoKTsKICAgICB2aXJ0dWFs
IHZvaWQgYXR0YWNoKCk7CiAgICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwogICAgIHZpcnR1YWwg
dm9pZCBtaW5Pck1heEF0dHJpYnV0ZUNoYW5nZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvU2VhcmNoSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvU2VhcmNo
SW5wdXRUeXBlLmNwcAppbmRleCA2ZjUwMGRhZjNmN2I1ZjFlMDViZDRhMmQwYjJmOWVlNDdjM2Iw
NGE0Li5iNzdmMDk4YmY2Njg3ZmZiYmJmNjMyMTBkZTA4NDc4NjkyZjZkODdlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL1NlYXJjaElucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9TZWFyY2hJbnB1dFR5cGUuY3BwCkBAIC0zMyw3ICszMyw3IEBACiAKICNpbmNs
dWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgotI2lu
Y2x1ZGUgIlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oIgorI2luY2x1ZGUgIlJlbmRlclNl
YXJjaEZpZWxkLmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgogI2luY2x1ZGUgIlRleHRDb250
cm9sSW5uZXJFbGVtZW50cy5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CkBAIC01MSw2
ICs1MSwxNyBAQCBQYXNzT3duUHRyPElucHV0VHlwZT4gU2VhcmNoSW5wdXRUeXBlOjpjcmVhdGUo
SFRNTElucHV0RWxlbWVudCogZWxlbWVudCkKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNlYXJj
aElucHV0VHlwZShlbGVtZW50KSk7CiB9CiAKK3ZvaWQgU2VhcmNoSW5wdXRUeXBlOjphZGRTZWFy
Y2hSZXN1bHQoKQoreworICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZWxlbWVudCgp
LT5yZW5kZXJlcigpKQorICAgICAgICB0b1JlbmRlclNlYXJjaEZpZWxkKHJlbmRlcmVyKS0+YWRk
U2VhcmNoUmVzdWx0KCk7Cit9CisKK1JlbmRlck9iamVjdCogU2VhcmNoSW5wdXRUeXBlOjpjcmVh
dGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKikgY29uc3QKK3sKKyAg
ICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyU2VhcmNoRmllbGQoZWxlbWVudCgpKTsKK30KKwog
Y29uc3QgQXRvbWljU3RyaW5nJiBTZWFyY2hJbnB1dFR5cGU6OmZvcm1Db250cm9sVHlwZSgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIElucHV0VHlwZU5hbWVzOjpzZWFyY2goKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvU2VhcmNoSW5wdXRUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL1NlYXJjaElucHV0VHlwZS5oCmluZGV4IGFiMTkxMDNhZmRmYWU4ZTU1NjY3YmY0Y2U0MTMy
ZmI4ODA1YjgyMjUuLmFjNzIyNjM5YTliZTE0ZTllNWMzZjA3M2RmNmZjY2I1ODZlNWE1ZDUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvU2VhcmNoSW5wdXRUeXBlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9TZWFyY2hJbnB1dFR5cGUuaApAQCAtNDgsNiArNDgsOCBAQCBwdWJs
aWM6CiAKIHByaXZhdGU6CiAgICAgU2VhcmNoSW5wdXRUeXBlKEhUTUxJbnB1dEVsZW1lbnQqKTsK
KyAgICB2aXJ0dWFsIHZvaWQgYWRkU2VhcmNoUmVzdWx0KCkgT1ZFUlJJREU7CisgICAgdmlydHVh
bCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUq
KSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNv
bnRyb2xUeXBlKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIHNob3VsZFJlc3Bl
Y3RTcGVlY2hBdHRyaWJ1dGUoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgaXNTZWFyY2hG
aWVsZCgpIGNvbnN0IE9WRVJSSURFOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
c2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAKaW5kZXggMTAwZGFlYjY0N2I5ZDc3
YWE0YzFiNDMxMmJjOWM1ZTVmYjE4N2FkNi4uNWQyNjg0MWMyNDM1NzA1NWY3YjViOThiNzE4MThi
MzA1N2MxYWQxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENv
bnRyb2xJbm5lckVsZW1lbnRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9U
ZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCkBAIC0zNyw3ICszNyw3IEBACiAjaW5jbHVkZSAi
SFRNTFRleHRBcmVhRWxlbWVudC5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKICNpbmNsdWRl
ICJQYWdlLmgiCi0jaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgiCisjaW5j
bHVkZSAiUmVuZGVyU2VhcmNoRmllbGQuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5j
bHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCkBA
IC0xNTEsNyArMTUxLDcgQEAgdm9pZCBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50Ojpk
ZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgZXZlbnQtPmlzTW91c2VFdmVudCgpICYm
IHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCktPmJ1dHRvbigpID09IExlZnRCdXR0b24p
IHsKICAgICAgICAgaW5wdXQtPmZvY3VzKCk7CiAgICAgICAgIGlucHV0LT5zZWxlY3QoKTsKLSAg
ICAgICAgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKiByZW5kZXJlciA9IHRvUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lKGlucHV0LT5yZW5kZXJlcigpKTsKKyAgICAgICAgUmVuZGVyU2Vh
cmNoRmllbGQqIHJlbmRlcmVyID0gdG9SZW5kZXJTZWFyY2hGaWVsZChpbnB1dC0+cmVuZGVyZXIo
KSk7CiAgICAgICAgIGlmIChyZW5kZXJlci0+cG9wdXBJc1Zpc2libGUoKSkKICAgICAgICAgICAg
IHJlbmRlcmVyLT5oaWRlUG9wdXAoKTsKICAgICAgICAgZWxzZSBpZiAoaW5wdXQtPm1heFJlc3Vs
dHMoKSA+IDApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Vh
cmNoRmllbGQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxk
LmNwcAppbmRleCA4NDhmYzIxMTk3YzJhN2QyNGYyNjQ4ZGY3MDIwNTI5ZjNjODgwZDNiLi40NjYw
ZWFjNzY3NDkxZDU2NzY3MTFmNjkzZTIzODgwZDdiOTgzNDA4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAKQEAgLTIyLDcgKzIyLDcgQEAKICAq
LwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lLmgiCisjaW5jbHVkZSAiUmVuZGVyU2VhcmNoRmllbGQuaCIKIAogI2luY2x1ZGUgIkNT
U0ZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKQEAgLTUxLDM1
ICs1MSwxOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFt
ZXM7CiAKLVZpc2libGVQb3NpdGlvbiBSZW5kZXJUZXh0Q29udHJvbElubmVyQmxvY2s6OnBvc2l0
aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KQotewotICAgIExheW91dFBvaW50
IGNvbnRlbnRzUG9pbnQocG9pbnQpOwotCi0gICAgLy8gTXVsdGlsaW5lIHRleHQgY29udHJvbHMg
aGF2ZSB0aGUgc2Nyb2xsIG9uIHNoYWRvd0FuY2VzdG9yTm9kZSwgc28gd2UgbmVlZCB0byB0YWtl
IHRoYXQKLSAgICAvLyBpbnRvIGFjY291bnQgaGVyZS4KLSAgICBpZiAobV9tdWx0aUxpbmUpIHsK
LSAgICAgICAgUmVuZGVyVGV4dENvbnRyb2wqIHJlbmRlcmVyID0gdG9SZW5kZXJUZXh0Q29udHJv
bChub2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpLT5yZW5kZXJlcigpKTsKLSAgICAgICAgaWYg
KHJlbmRlcmVyLT5oYXNPdmVyZmxvd0NsaXAoKSkKLSAgICAgICAgICAgIGNvbnRlbnRzUG9pbnQg
Kz0gcmVuZGVyZXItPnNjcm9sbGVkQ29udGVudE9mZnNldCgpOwotICAgIH0KLQotICAgIHJldHVy
biBSZW5kZXJCbG9jazo6cG9zaXRpb25Gb3JQb2ludChjb250ZW50c1BvaW50KTsKLX0KLQogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShOb2RlKiBub2RlKQotICAgIDogUmVuZGVy
VGV4dENvbnRyb2wobm9kZSkKK1JlbmRlclNlYXJjaEZpZWxkOjpSZW5kZXJTZWFyY2hGaWVsZChO
b2RlKiBub2RlKQorICAgIDogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKG5vZGUpCiAgICAg
LCBtX3NlYXJjaFBvcHVwSXNWaXNpYmxlKGZhbHNlKQotICAgICwgbV9zaG91bGREcmF3Q2Fwc0xv
Y2tJbmRpY2F0b3IoZmFsc2UpCi0gICAgLCBtX2Rlc2lyZWRJbm5lclRleHRIZWlnaHQoLTEpCiAg
ICAgLCBtX3NlYXJjaFBvcHVwKDApCiB7CiAgICAgQVNTRVJUKG5vZGUtPmlzSFRNTEVsZW1lbnQo
KSk7CiAgICAgQVNTRVJUKG5vZGUtPnRvSW5wdXRFbGVtZW50KCkpOwogfQogCi1SZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmU6On5SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUoKQorUmVuZGVy
U2VhcmNoRmllbGQ6On5SZW5kZXJTZWFyY2hGaWVsZCgpCiB7CiAgICAgaWYgKG1fc2VhcmNoUG9w
dXApIHsKICAgICAgICAgbV9zZWFyY2hQb3B1cC0+cG9wdXBNZW51KCktPmRpc2Nvbm5lY3RDbGll
bnQoKTsKQEAgLTg3LDM4ICs3MCw3IEBAIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6flJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZSgpCiAgICAgfQogfQogCi1pbmxpbmUgSFRNTEVsZW1l
bnQqIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y29udGFpbmVyRWxlbWVudCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGlucHV0RWxlbWVudCgpLT5jb250YWluZXJFbGVtZW50KCk7Ci19Ci0K
LWlubGluZSBIVE1MRWxlbWVudCogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppbm5lckJs
b2NrRWxlbWVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlucHV0RWxlbWVudCgpLT5pbm5lckJs
b2NrRWxlbWVudCgpOwotfQotCi1pbmxpbmUgSFRNTEVsZW1lbnQqIFJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZTo6aW5uZXJTcGluQnV0dG9uRWxlbWVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGlucHV0RWxlbWVudCgpLT5pbm5lclNwaW5CdXR0b25FbGVtZW50KCk7Ci19Ci0KLWlubGluZSBI
VE1MRWxlbWVudCogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpyZXN1bHRzQnV0dG9uRWxl
bWVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlucHV0RWxlbWVudCgpLT5yZXN1bHRzQnV0dG9u
RWxlbWVudCgpOwotfQotCi1pbmxpbmUgSFRNTEVsZW1lbnQqIFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6Y2FuY2VsQnV0dG9uRWxlbWVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlucHV0
RWxlbWVudCgpLT5jYW5jZWxCdXR0b25FbGVtZW50KCk7Ci19Ci0KLVJlbmRlclN0eWxlKiBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnRleHRCYXNlU3R5bGUoKSBjb25zdAotewotICAgIEhU
TUxFbGVtZW50KiBpbm5lckJsb2NrID0gaW5uZXJCbG9ja0VsZW1lbnQoKTsKLSAgICByZXR1cm4g
aW5uZXJCbG9jayA/IGlubmVyQmxvY2stPnJlbmRlcmVyKCktPnN0eWxlKCkgOiBzdHlsZSgpOwot
fQotCi12b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6YWRkU2VhcmNoUmVzdWx0KCkK
K3ZvaWQgUmVuZGVyU2VhcmNoRmllbGQ6OmFkZFNlYXJjaFJlc3VsdCgpCiB7CiAgICAgSFRNTElu
cHV0RWxlbWVudCogaW5wdXQgPSBpbnB1dEVsZW1lbnQoKTsKICAgICBpZiAoaW5wdXQtPm1heFJl
c3VsdHMoKSA8PSAwKQpAQCAtMTQ5LDcgKzEwMSw3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjphZGRTZWFyY2hSZXN1bHQoKQogICAgIG1fc2VhcmNoUG9wdXAtPnNhdmVSZWNl
bnRTZWFyY2hlcyhuYW1lLCBtX3JlY2VudFNlYXJjaGVzKTsKIH0KIAotdm9pZCBSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmU6OnNob3dQb3B1cCgpCit2b2lkIFJlbmRlclNlYXJjaEZpZWxkOjpz
aG93UG9wdXAoKQogewogICAgIGlmIChtX3NlYXJjaFBvcHVwSXNWaXNpYmxlKQogICAgICAgICBy
ZXR1cm47CkBAIC0xNzgsMzU4ICsxMzAsMTQgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmU6OnNob3dQb3B1cCgpCiAgICAgbV9zZWFyY2hQb3B1cC0+cG9wdXBNZW51KCktPnNob3co
cGl4ZWxTbmFwcGVkSW50UmVjdChhYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpKSwgZG9jdW1lbnQo
KS0+dmlldygpLCAtMSk7CiB9CiAKLXZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpo
aWRlUG9wdXAoKQordm9pZCBSZW5kZXJTZWFyY2hGaWVsZDo6aGlkZVBvcHVwKCkKIHsKICAgICBp
ZiAobV9zZWFyY2hQb3B1cCkKICAgICAgICAgbV9zZWFyY2hQb3B1cC0+cG9wdXBNZW51KCktPmhp
ZGUoKTsKIH0KIAotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnBhaW50KFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCi17Ci0gICAg
UmVuZGVyVGV4dENvbnRyb2w6OnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwotCi0gICAg
aWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kICYmIG1fc2hv
dWxkRHJhd0NhcHNMb2NrSW5kaWNhdG9yKSB7Ci0gICAgICAgIExheW91dFJlY3QgY29udGVudHNS
ZWN0ID0gY29udGVudEJveFJlY3QoKTsKLQotICAgICAgICAvLyBDZW50ZXIgdmVydGljYWxseSBs
aWtlIHRoZSB0ZXh0LgotICAgICAgICBjb250ZW50c1JlY3Quc2V0WSgoaGVpZ2h0KCkgLSBjb250
ZW50c1JlY3QuaGVpZ2h0KCkpIC8gMik7Ci0KLSAgICAgICAgLy8gQ29udmVydCB0aGUgcmVjdCBp
bnRvIHRoZSBjb29yZHMgdXNlZCBmb3IgcGFpbnRpbmcgdGhlIGNvbnRlbnQKLSAgICAgICAgY29u
dGVudHNSZWN0Lm1vdmVCeShwYWludE9mZnNldCArIGxvY2F0aW9uKCkpOwotICAgICAgICB0aGVt
ZSgpLT5wYWludENhcHNMb2NrSW5kaWNhdG9yKHRoaXMsIHBhaW50SW5mbywgcGl4ZWxTbmFwcGVk
SW50UmVjdChjb250ZW50c1JlY3QpKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjpsYXlvdXQoKQotewotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVtb3Zl
IHRoZSBoZWlnaHQtcmVsYXRlZCBoYWNrcyBpbiBsYXlvdXQoKSBhbmQKLSAgICAvLyBzdHlsZURp
ZENoYW5nZSgpLiBXZSBuZWVkIHRoZW0gYmVjYXVzZQotICAgIC8vIC0gQ2VudGVyIHRoZSBpbm5l
ciBlbGVtZW50cyB2ZXJ0aWNhbGx5IGlmIHRoZSBpbnB1dCBoZWlnaHQgaXMgdGFsbGVyIHRoYW4K
LSAgICAvLyAgIHRoZSBpbnRyaW5zaWMgaGVpZ2h0IG9mIHRoZSBpbm5lciBlbGVtZW50cy4KLSAg
ICAvLyAtIFNocmluayB0aGUgaW5uZXIgZWxtZW50IGhlaWdodHMgaWYgdGhlIGlucHV0IGhlaWdo
dCBpcyBzYW1sbGVyIHRoYW4gdGhlCi0gICAgLy8gICBpbnRyaW5zaWMgaGVpZ2h0cyBvZiB0aGUg
aW5uZXIgZWxlbWVudHMuCi0KLSAgICAvLyBXZSBkb24ndCBob25vciBwYWRkaW5ncyBhbmQgYm9y
ZGVycyBmb3IgdGV4dGZpZWxkcyB3aXRob3V0IGRlY29yYXRpb25zCi0gICAgLy8gYW5kIHR5cGU9
c2VhcmNoIGlmIHRoZSB0ZXh0IGhlaWdodCBpcyB0YWxsZXIgdGhhbiB0aGUgY29udGVudEhlaWdo
dCgpCi0gICAgLy8gYmVjYXVzZSBvZiBjb21wYWJpbGl0eS4KLQotICAgIFJlbmRlckJsb2NrOjps
YXlvdXRCbG9jayhmYWxzZSk7Ci0KLSAgICBSZW5kZXJCb3gqIGlubmVyVGV4dFJlbmRlcmVyID0g
aW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJCb3goKTsKLSAgICBBU1NFUlQoaW5uZXJUZXh0UmVu
ZGVyZXIpOwotICAgIFJlbmRlckJveCogaW5uZXJCbG9ja1JlbmRlcmVyID0gaW5uZXJCbG9ja0Vs
ZW1lbnQoKSA/IGlubmVyQmxvY2tFbGVtZW50KCktPnJlbmRlckJveCgpIDogMDsKLSAgICBIVE1M
RWxlbWVudCogY29udGFpbmVyID0gY29udGFpbmVyRWxlbWVudCgpOwotICAgIFJlbmRlckJveCog
Y29udGFpbmVyUmVuZGVyZXIgPSBjb250YWluZXIgPyBjb250YWluZXItPnJlbmRlckJveCgpIDog
MDsKLQotICAgIC8vIFNldCB0aGUgdGV4dCBibG9jayBoZWlnaHQKLSAgICBMYXlvdXRVbml0IGRl
c2lyZWRIZWlnaHQgPSB0ZXh0QmxvY2tIZWlnaHQoKTsKLSAgICBMYXlvdXRVbml0IGN1cnJlbnRI
ZWlnaHQgPSBpbm5lclRleHRSZW5kZXJlci0+aGVpZ2h0KCk7Ci0KLSAgICBMYXlvdXRVbml0IGhl
aWdodExpbWl0ID0gKGlucHV0RWxlbWVudCgpLT5pc1NlYXJjaEZpZWxkKCkgfHwgIWNvbnRhaW5l
cikgPyBoZWlnaHQoKSA6IGNvbnRlbnRIZWlnaHQoKTsKLSAgICBpZiAoY3VycmVudEhlaWdodCA+
IGhlaWdodExpbWl0KSB7Ci0gICAgICAgIGlmIChkZXNpcmVkSGVpZ2h0ICE9IGN1cnJlbnRIZWln
aHQpCi0gICAgICAgICAgICBzZXROZWVkc0xheW91dCh0cnVlLCBNYXJrT25seVRoaXMpOwotCi0g
ICAgICAgIGlubmVyVGV4dFJlbmRlcmVyLT5zdHlsZSgpLT5zZXRIZWlnaHQoTGVuZ3RoKGRlc2ly
ZWRIZWlnaHQsIEZpeGVkKSk7Ci0gICAgICAgIG1fZGVzaXJlZElubmVyVGV4dEhlaWdodCA9IGRl
c2lyZWRIZWlnaHQ7Ci0gICAgICAgIGlmIChpbm5lckJsb2NrUmVuZGVyZXIpCi0gICAgICAgICAg
ICBpbm5lckJsb2NrUmVuZGVyZXItPnN0eWxlKCktPnNldEhlaWdodChMZW5ndGgoZGVzaXJlZEhl
aWdodCwgRml4ZWQpKTsKLSAgICB9Ci0gICAgLy8gVGhlIGNvbnRhaW5lciBtaWdodCBiZSB0YWxs
ZXIgYmVjYXVzZSBvZiBkZWNvcmF0aW9uIGVsZW1lbnRzLgotICAgIGlmIChjb250YWluZXJSZW5k
ZXJlcikgewotICAgICAgICBjb250YWluZXJSZW5kZXJlci0+bGF5b3V0SWZOZWVkZWQoKTsKLSAg
ICAgICAgTGF5b3V0VW5pdCBjb250YWluZXJIZWlnaHQgPSBjb250YWluZXJSZW5kZXJlci0+aGVp
Z2h0KCk7Ci0gICAgICAgIGlmIChjb250YWluZXJIZWlnaHQgPiBoZWlnaHRMaW1pdCkgewotICAg
ICAgICAgICAgY29udGFpbmVyUmVuZGVyZXItPnN0eWxlKCktPnNldEhlaWdodChMZW5ndGgoaGVp
Z2h0TGltaXQsIEZpeGVkKSk7Ci0gICAgICAgICAgICBzZXROZWVkc0xheW91dCh0cnVlLCBNYXJr
T25seVRoaXMpOwotICAgICAgICB9IGVsc2UgaWYgKGNvbnRhaW5lclJlbmRlcmVyLT5oZWlnaHQo
KSA8IGNvbnRlbnRIZWlnaHQoKSkgewotICAgICAgICAgICAgY29udGFpbmVyUmVuZGVyZXItPnN0
eWxlKCktPnNldEhlaWdodChMZW5ndGgoY29udGVudEhlaWdodCgpLCBGaXhlZCkpOwotICAgICAg
ICAgICAgc2V0TmVlZHNMYXlvdXQodHJ1ZSwgTWFya09ubHlUaGlzKTsKLSAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICBjb250YWluZXJSZW5kZXJlci0+c3R5bGUoKS0+c2V0SGVpZ2h0KExlbmd0
aChjb250YWluZXJIZWlnaHQsIEZpeGVkKSk7Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgbmVlZCBh
bm90aGVyIGxheW91dCBwYXNzLCB3ZSBoYXZlIGNoYW5nZWQgb25lIG9mIGNoaWxkcmVuJ3MgaGVp
Z2h0IHNvIHdlIG5lZWQgdG8gcmVsYXlvdXQgdGhlbS4KLSAgICBpZiAobmVlZHNMYXlvdXQoKSkK
LSAgICAgICAgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKHRydWUpOwotCi0gICAgLy8gQ2VudGVy
IHRoZSBjaGlsZCBibG9jayB2ZXJ0aWNhbGx5Ci0gICAgY3VycmVudEhlaWdodCA9IGlubmVyVGV4
dFJlbmRlcmVyLT5oZWlnaHQoKTsKLSAgICBpZiAoIWNvbnRhaW5lciAmJiBjdXJyZW50SGVpZ2h0
ICE9IGNvbnRlbnRIZWlnaHQoKSkgewotICAgICAgICBMYXlvdXRVbml0IGhlaWdodERpZmYgPSBj
dXJyZW50SGVpZ2h0IC0gY29udGVudEhlaWdodCgpOwotICAgICAgICBpbm5lclRleHRSZW5kZXJl
ci0+c2V0WShpbm5lclRleHRSZW5kZXJlci0+eSgpIC0gKGhlaWdodERpZmYgLyAyICsgbGF5b3V0
TW9kKGhlaWdodERpZmYsIDIpKSk7Ci0gICAgfSBlbHNlIGlmIChpbnB1dEVsZW1lbnQoKS0+aXNT
ZWFyY2hGaWVsZCgpICYmIGNvbnRhaW5lclJlbmRlcmVyICYmIGNvbnRhaW5lclJlbmRlcmVyLT5o
ZWlnaHQoKSA+IGNvbnRlbnRIZWlnaHQoKSkgewotICAgICAgICAvLyBBIHF1aXJrIGZvciBmaW5k
LWluLXBhZ2UgYm94IG9uIFNhZmFyaSBXaW5kb3dzLgotICAgICAgICAvLyBodHRwOi8vd2Via2l0
Lm9yZy9iLzYzMTU3Ci0gICAgICAgIExheW91dFVuaXQgaGVpZ2h0RGlmZiA9IGNvbnRhaW5lclJl
bmRlcmVyLT5oZWlnaHQoKSAtIGNvbnRlbnRIZWlnaHQoKTsKLSAgICAgICAgY29udGFpbmVyUmVu
ZGVyZXItPnNldFkoY29udGFpbmVyUmVuZGVyZXItPnkoKSAtIChoZWlnaHREaWZmIC8gMiArIGxh
eW91dE1vZChoZWlnaHREaWZmLCAyKSkpOwotICAgIH0KLQotICAgIC8vIElnbm9yZXMgdGhlIHBh
ZGRpbmdzIGZvciB0aGUgaW5uZXIgc3BpbiBidXR0b24uCi0gICAgaWYgKFJlbmRlckJveCogaW5u
ZXJTcGluQm94ID0gaW5uZXJTcGluQnV0dG9uRWxlbWVudCgpID8gaW5uZXJTcGluQnV0dG9uRWxl
bWVudCgpLT5yZW5kZXJCb3goKSA6IDApIHsKLSAgICAgICAgUmVuZGVyQm94KiBwYXJlbnRCb3gg
PSBpbm5lclNwaW5Cb3gtPnBhcmVudEJveCgpOwotICAgICAgICBpZiAoY29udGFpbmVyUmVuZGVy
ZXIgJiYgIWNvbnRhaW5lclJlbmRlcmVyLT5zdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KCkpCi0gICAgICAgICAgICBpbm5lclNwaW5Cb3gtPnNldExvY2F0aW9uKExheW91dFBvaW50KC1w
YWRkaW5nTGVmdCgpLCAtcGFkZGluZ1RvcCgpKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGlubmVyU3BpbkJveC0+c2V0TG9jYXRpb24oTGF5b3V0UG9pbnQocGFyZW50Qm94LT53aWR0aCgp
IC0gaW5uZXJTcGluQm94LT53aWR0aCgpICsgcGFkZGluZ1JpZ2h0KCksIC1wYWRkaW5nVG9wKCkp
KTsKLSAgICAgICAgaW5uZXJTcGluQm94LT5zZXRIZWlnaHQoaGVpZ2h0KCkgLSBib3JkZXJUb3Ao
KSAtIGJvcmRlckJvdHRvbSgpKTsKLSAgICB9Ci0KLSAgICBIVE1MRWxlbWVudCogcGxhY2Vob2xk
ZXJFbGVtZW50ID0gaW5wdXRFbGVtZW50KCktPnBsYWNlaG9sZGVyRWxlbWVudCgpOwotICAgIGlm
IChSZW5kZXJCb3gqIHBsYWNlaG9sZGVyQm94ID0gcGxhY2Vob2xkZXJFbGVtZW50ID8gcGxhY2Vo
b2xkZXJFbGVtZW50LT5yZW5kZXJCb3goKSA6IDApIHsKLSAgICAgICAgcGxhY2Vob2xkZXJCb3gt
PnN0eWxlKCktPnNldFdpZHRoKExlbmd0aChpbm5lclRleHRSZW5kZXJlci0+d2lkdGgoKSAtIHBs
YWNlaG9sZGVyQm94LT5ib3JkZXJBbmRQYWRkaW5nV2lkdGgoKSwgRml4ZWQpKTsKLSAgICAgICAg
cGxhY2Vob2xkZXJCb3gtPnN0eWxlKCktPnNldEhlaWdodChMZW5ndGgoaW5uZXJUZXh0UmVuZGVy
ZXItPmhlaWdodCgpIC0gcGxhY2Vob2xkZXJCb3gtPmJvcmRlckFuZFBhZGRpbmdIZWlnaHQoKSwg
Rml4ZWQpKTsKLSAgICAgICAgYm9vbCBwbGFjZWhvbGRlckJveEhhZExheW91dCA9IHBsYWNlaG9s
ZGVyQm94LT5ldmVySGFkTGF5b3V0KCk7Ci0gICAgICAgIHBsYWNlaG9sZGVyQm94LT5sYXlvdXRJ
Zk5lZWRlZCgpOwotICAgICAgICBMYXlvdXRQb2ludCB0ZXh0T2Zmc2V0ID0gaW5uZXJUZXh0UmVu
ZGVyZXItPmxvY2F0aW9uKCk7Ci0gICAgICAgIGlmIChpbm5lckJsb2NrRWxlbWVudCgpICYmIGlu
bmVyQmxvY2tFbGVtZW50KCktPnJlbmRlckJveCgpKQotICAgICAgICAgICAgdGV4dE9mZnNldCAr
PSB0b0xheW91dFNpemUoaW5uZXJCbG9ja0VsZW1lbnQoKS0+cmVuZGVyQm94KCktPmxvY2F0aW9u
KCkpOwotICAgICAgICBpZiAoY29udGFpbmVyUmVuZGVyZXIpCi0gICAgICAgICAgICB0ZXh0T2Zm
c2V0ICs9IHRvTGF5b3V0U2l6ZShjb250YWluZXJSZW5kZXJlci0+bG9jYXRpb24oKSk7Ci0gICAg
ICAgIHBsYWNlaG9sZGVyQm94LT5zZXRMb2NhdGlvbih0ZXh0T2Zmc2V0KTsKLQotICAgICAgICBp
ZiAoIXBsYWNlaG9sZGVyQm94SGFkTGF5b3V0ICYmIHBsYWNlaG9sZGVyQm94LT5jaGVja0ZvclJl
cGFpbnREdXJpbmdMYXlvdXQoKSkgewotICAgICAgICAgICAgLy8gVGhpcyBhc3N1bWVzIGEgc2hh
ZG93IHRyZWUgd2l0aG91dCBmbG9hdHMuIElmIGZsb2F0cyBhcmUgYWRkZWQsIHRoZQotICAgICAg
ICAgICAgLy8gbG9naWMgc2hvdWxkIGJlIHNoYXJlZCB3aXRoIFJlbmRlckJsb2NrOjpsYXlvdXRC
bG9ja0NoaWxkLgotICAgICAgICAgICAgcGxhY2Vob2xkZXJCb3gtPnJlcGFpbnQoKTsKLSAgICAg
ICAgfQotICAgIH0KLX0KLQotYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Om5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1
bHQsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2lu
dCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKLXsKLSAg
ICBpZiAoIVJlbmRlclRleHRDb250cm9sOjpub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBv
aW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBoaXRUZXN0QWN0aW9uKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gU2F5IHRoYXQgd2UgaGl0IHRoZSBpbm5lciB0ZXh0
IGVsZW1lbnQgaWYKLSAgICAvLyAgLSB3ZSBoaXQgYSBub2RlIGluc2lkZSB0aGUgaW5uZXIgdGV4
dCBlbGVtZW50LAotICAgIC8vICAtIHdlIGhpdCB0aGUgPGlucHV0PiBlbGVtZW50IChlLmcuIHdl
J3JlIG92ZXIgdGhlIGJvcmRlciBvciBwYWRkaW5nKSwgb3IKLSAgICAvLyAgLSB3ZSBoaXQgcmVn
aW9ucyBub3QgaW4gYW55IGRlY29yYXRpb24gYnV0dG9ucy4KLSAgICBIVE1MRWxlbWVudCogY29u
dGFpbmVyID0gY29udGFpbmVyRWxlbWVudCgpOwotICAgIGlmIChyZXN1bHQuaW5uZXJOb2RlKCkt
PmlzRGVzY2VuZGFudE9mKGlubmVyVGV4dEVsZW1lbnQoKSkgfHwgcmVzdWx0LmlubmVyTm9kZSgp
ID09IG5vZGUoKSB8fCAoY29udGFpbmVyICYmIGNvbnRhaW5lciA9PSByZXN1bHQuaW5uZXJOb2Rl
KCkpKSB7Ci0gICAgICAgIExheW91dFBvaW50IHBvaW50SW5QYXJlbnQgPSBwb2ludEluQ29udGFp
bmVyOwotICAgICAgICBpZiAoY29udGFpbmVyICYmIGlubmVyQmxvY2tFbGVtZW50KCkpIHsKLSAg
ICAgICAgICAgIGlmIChpbm5lckJsb2NrRWxlbWVudCgpLT5yZW5kZXJCb3goKSkKLSAgICAgICAg
ICAgICAgICBwb2ludEluUGFyZW50IC09IHRvTGF5b3V0U2l6ZShpbm5lckJsb2NrRWxlbWVudCgp
LT5yZW5kZXJCb3goKS0+bG9jYXRpb24oKSk7Ci0gICAgICAgICAgICBpZiAoY29udGFpbmVyLT5y
ZW5kZXJCb3goKSkKLSAgICAgICAgICAgICAgICBwb2ludEluUGFyZW50IC09IHRvTGF5b3V0U2l6
ZShjb250YWluZXItPnJlbmRlckJveCgpLT5sb2NhdGlvbigpKTsKLSAgICAgICAgfQotICAgICAg
ICBoaXRJbm5lclRleHRFbGVtZW50KHJlc3VsdCwgcG9pbnRJblBhcmVudCwgYWNjdW11bGF0ZWRP
ZmZzZXQpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25z
dCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCi17Ci0gICAgbV9kZXNpcmVkSW5uZXJUZXh0SGVpZ2h0
ID0gLTE7Ci0gICAgUmVuZGVyVGV4dENvbnRyb2w6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0
eWxlKTsKLQotICAgIC8vIFdlIG1heSBoYXZlIHNldCB0aGUgd2lkdGggYW5kIHRoZSBoZWlnaHQg
aW4gdGhlIG9sZCBzdHlsZSBpbiBsYXlvdXQoKS4KLSAgICAvLyBSZXNldCB0aGVtIG5vdyB0byBh
dm9pZCBnZXR0aW5nIGEgc3B1cmlvdXMgbGF5b3V0IGhpbnQuCi0gICAgSFRNTEVsZW1lbnQqIGlu
bmVyQmxvY2sgPSBpbm5lckJsb2NrRWxlbWVudCgpOwotICAgIGlmIChSZW5kZXJPYmplY3QqIGlu
bmVyQmxvY2tSZW5kZXJlciA9IGlubmVyQmxvY2sgPyBpbm5lckJsb2NrLT5yZW5kZXJlcigpIDog
MCkgewotICAgICAgICBpbm5lckJsb2NrUmVuZGVyZXItPnN0eWxlKCktPnNldEhlaWdodChMZW5n
dGgoKSk7Ci0gICAgICAgIGlubmVyQmxvY2tSZW5kZXJlci0+c3R5bGUoKS0+c2V0V2lkdGgoTGVu
Z3RoKCkpOwotICAgIH0KLSAgICBIVE1MRWxlbWVudCogY29udGFpbmVyID0gY29udGFpbmVyRWxl
bWVudCgpOwotICAgIGlmIChSZW5kZXJPYmplY3QqIGNvbnRhaW5lclJlbmRlcmVyID0gY29udGFp
bmVyID8gY29udGFpbmVyLT5yZW5kZXJlcigpIDogMCkgewotICAgICAgICBjb250YWluZXJSZW5k
ZXJlci0+c3R5bGUoKS0+c2V0SGVpZ2h0KExlbmd0aCgpKTsKLSAgICAgICAgY29udGFpbmVyUmVu
ZGVyZXItPnN0eWxlKCktPnNldFdpZHRoKExlbmd0aCgpKTsKLSAgICB9Ci0gICAgaWYgKEhUTUxF
bGVtZW50KiBwbGFjZWhvbGRlciA9IGlucHV0RWxlbWVudCgpLT5wbGFjZWhvbGRlckVsZW1lbnQo
KSkKLSAgICAgICAgcGxhY2Vob2xkZXItPnNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVy
dHlUZXh0T3ZlcmZsb3csIHRleHRTaG91bGRCZVRydW5jYXRlZCgpID8gQ1NTVmFsdWVFbGxpcHNp
cyA6IENTU1ZhbHVlQ2xpcCk7Ci0gICAgc2V0SGFzT3ZlcmZsb3dDbGlwKGZhbHNlKTsKLX0KLQot
dm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNhcHNMb2NrU3RhdGVNYXlIYXZlQ2hh
bmdlZCgpCi17Ci0gICAgaWYgKCFub2RlKCkgfHwgIWRvY3VtZW50KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIC8vIE9ubHkgZHJhdyB0aGUgY2FwcyBsb2NrIGluZGljYXRvciBpZiB0aGVzZSB0
aGluZ3MgYXJlIHRydWU6Ci0gICAgLy8gMSkgVGhlIGZpZWxkIGlzIGEgcGFzc3dvcmQgZmllbGQK
LSAgICAvLyAyKSBUaGUgZnJhbWUgaXMgYWN0aXZlCi0gICAgLy8gMykgVGhlIGVsZW1lbnQgaXMg
Zm9jdXNlZAotICAgIC8vIDQpIFRoZSBjYXBzIGxvY2sgaXMgb24KLSAgICBib29sIHNob3VsZERy
YXdDYXBzTG9ja0luZGljYXRvciA9IGZhbHNlOwotCi0gICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRv
Y3VtZW50KCktPmZyYW1lKCkpCi0gICAgICAgIHNob3VsZERyYXdDYXBzTG9ja0luZGljYXRvciA9
IGlucHV0RWxlbWVudCgpLT5pc1Bhc3N3b3JkRmllbGQoKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmJiBmcmFtZS0+c2VsZWN0aW9uKCktPmlzRm9jdXNlZEFuZEFjdGl2
ZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGRvY3VtZW50KCkt
PmZvY3VzZWROb2RlKCkgPT0gbm9kZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICYmIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Y3VycmVudENhcHNMb2NrU3RhdGUoKTsK
LQotICAgIGlmIChzaG91bGREcmF3Q2Fwc0xvY2tJbmRpY2F0b3IgIT0gbV9zaG91bGREcmF3Q2Fw
c0xvY2tJbmRpY2F0b3IpIHsKLSAgICAgICAgbV9zaG91bGREcmF3Q2Fwc0xvY2tJbmRpY2F0b3Ig
PSBzaG91bGREcmF3Q2Fwc0xvY2tJbmRpY2F0b3I7Ci0gICAgICAgIHJlcGFpbnQoKTsKLSAgICB9
Ci19Ci0KLWJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpoYXNDb250cm9sQ2xpcCgp
IGNvbnN0Ci17Ci0gICAgLy8gQXBwbHkgY29udHJvbCBjbGlwIGZvciB0ZXh0IGZpZWxkcyB3aXRo
IGRlY29yYXRpb25zLgotICAgIHJldHVybiAhIWNvbnRhaW5lckVsZW1lbnQoKTsKLX0KLQotTGF5
b3V0UmVjdCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNvbnRyb2xDbGlwUmVjdChjb25z
dCBMYXlvdXRQb2ludCYgYWRkaXRpb25hbE9mZnNldCkgY29uc3QKLXsKLSAgICBBU1NFUlQoaGFz
Q29udHJvbENsaXAoKSk7Ci0gICAgTGF5b3V0UmVjdCBjbGlwUmVjdCA9IHVuaW9uUmVjdChjb250
ZW50Qm94UmVjdCgpLCBjb250YWluZXJFbGVtZW50KCktPnJlbmRlckJveCgpLT5mcmFtZVJlY3Qo
KSk7Ci0gICAgY2xpcFJlY3QubW92ZUJ5KGFkZGl0aW9uYWxPZmZzZXQpOwotICAgIHJldHVybiBj
bGlwUmVjdDsKLX0KLQotZmxvYXQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpnZXRBdmdD
aGFyV2lkdGgoQXRvbWljU3RyaW5nIGZhbWlseSkKLXsKLSAgICAvLyBTaW5jZSBMdWNpZGEgR3Jh
bmRlIGlzIHRoZSBkZWZhdWx0IGZvbnQsIHdlIHdhbnQgdGhpcyB0byBtYXRjaCB0aGUgd2lkdGgK
LSAgICAvLyBvZiBNUyBTaGVsbCBEbGcsIHRoZSBkZWZhdWx0IGZvbnQgZm9yIHRleHRhcmVhcyBp
biBGaXJlZm94LCBTYWZhcmkgV2luIGFuZAotICAgIC8vIElFIGZvciBzb21lIGVuY29kaW5ncyAo
aW4gSUUsIHRoZSBkZWZhdWx0IGZvbnQgaXMgZW5jb2Rpbmcgc3BlY2lmaWMpLgotICAgIC8vIDkw
MSBpcyB0aGUgYXZnQ2hhcldpZHRoIHZhbHVlIGluIHRoZSBPUy8yIHRhYmxlIGZvciBNUyBTaGVs
bCBEbGcuCi0gICAgaWYgKGZhbWlseSA9PSBBdG9taWNTdHJpbmcoIkx1Y2lkYSBHcmFuZGUiKSkK
LSAgICAgICAgcmV0dXJuIHNjYWxlRW1Ub1VuaXRzKDkwMSk7Ci0KLSAgICByZXR1cm4gUmVuZGVy
VGV4dENvbnRyb2w6OmdldEF2Z0NoYXJXaWR0aChmYW1pbHkpOwotfQotCi1MYXlvdXRVbml0IFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6cHJlZmVycmVkQ29udGVudFdpZHRoKGZsb2F0IGNo
YXJXaWR0aCkgY29uc3QKLXsKLSAgICBpbnQgZmFjdG9yOwotICAgIGJvb2wgaW5jbHVkZXNEZWNv
cmF0aW9uID0gaW5wdXRFbGVtZW50KCktPnNpemVTaG91bGRJbmNsdWRlRGVjb3JhdGlvbihmYWN0
b3IpOwotICAgIGlmIChmYWN0b3IgPD0gMCkKLSAgICAgICAgZmFjdG9yID0gMjA7Ci0KLSAgICBM
YXlvdXRVbml0IHJlc3VsdCA9IHN0YXRpY19jYXN0PExheW91dFVuaXQ+KGNlaWxlZExheW91dFVu
aXQoY2hhcldpZHRoICogZmFjdG9yKSk7Ci0KLSAgICBmbG9hdCBtYXhDaGFyV2lkdGggPSAwLmY7
Ci0gICAgQXRvbWljU3RyaW5nIGZhbWlseSA9IHN0eWxlKCktPmZvbnQoKS5mYW1pbHkoKS5mYW1p
bHkoKTsKLSAgICAvLyBTaW5jZSBMdWNpZGEgR3JhbmRlIGlzIHRoZSBkZWZhdWx0IGZvbnQsIHdl
IHdhbnQgdGhpcyB0byBtYXRjaCB0aGUgd2lkdGgKLSAgICAvLyBvZiBNUyBTaGVsbCBEbGcsIHRo
ZSBkZWZhdWx0IGZvbnQgZm9yIHRleHRhcmVhcyBpbiBGaXJlZm94LCBTYWZhcmkgV2luIGFuZAot
ICAgIC8vIElFIGZvciBzb21lIGVuY29kaW5ncyAoaW4gSUUsIHRoZSBkZWZhdWx0IGZvbnQgaXMg
ZW5jb2Rpbmcgc3BlY2lmaWMpLgotICAgIC8vIDQwMjcgaXMgdGhlICh4TWF4IC0geE1pbikgdmFs
dWUgaW4gdGhlICJoZWFkIiBmb250IHRhYmxlIGZvciBNUyBTaGVsbCBEbGcuCi0gICAgaWYgKGZh
bWlseSA9PSBBdG9taWNTdHJpbmcoIkx1Y2lkYSBHcmFuZGUiKSkKLSAgICAgICAgbWF4Q2hhcldp
ZHRoID0gc2NhbGVFbVRvVW5pdHMoNDAyNyk7Ci0gICAgZWxzZSBpZiAoaGFzVmFsaWRBdmdDaGFy
V2lkdGgoZmFtaWx5KSkKLSAgICAgICAgbWF4Q2hhcldpZHRoID0gcm91bmRmKHN0eWxlKCktPmZv
bnQoKS5wcmltYXJ5Rm9udCgpLT5tYXhDaGFyV2lkdGgoKSk7Ci0KLSAgICAvLyBGb3IgdGV4dCBp
bnB1dHMsIElFIGFkZHMgc29tZSBleHRyYSB3aWR0aC4KLSAgICBpZiAobWF4Q2hhcldpZHRoID4g
MC5mKQotICAgICAgICByZXN1bHQgKz0gbWF4Q2hhcldpZHRoIC0gY2hhcldpZHRoOwotCi0gICAg
aWYgKGluY2x1ZGVzRGVjb3JhdGlvbikgewotICAgICAgICBIVE1MRWxlbWVudCogc3BpbkJ1dHRv
biA9IGlubmVyU3BpbkJ1dHRvbkVsZW1lbnQoKTsKLSAgICAgICAgaWYgKFJlbmRlckJveCogc3Bp
blJlbmRlcmVyID0gc3BpbkJ1dHRvbiA/IHNwaW5CdXR0b24tPnJlbmRlckJveCgpIDogMCkgewot
ICAgICAgICAgICAgcmVzdWx0ICs9IHNwaW5SZW5kZXJlci0+Ym9yZGVyTGVmdCgpICsgc3BpblJl
bmRlcmVyLT5ib3JkZXJSaWdodCgpICsKLSAgICAgICAgICAgICAgICAgIHNwaW5SZW5kZXJlci0+
cGFkZGluZ0xlZnQoKSArIHNwaW5SZW5kZXJlci0+cGFkZGluZ1JpZ2h0KCk7Ci0gICAgICAgICAg
ICAvLyBTaW5jZSB0aGUgd2lkdGggb2Ygc3BpblJlbmRlcmVyIGlzIG5vdCBjYWxjdWxhdGVkIHll
dCwgc3BpblJlbmRlcmVyLT53aWR0aCgpIHJldHVybnMgMC4KLSAgICAgICAgICAgIC8vIFNvIGNv
bXB1dGVkU3R5bGUoKS0+d2lkdGgoKSBpcyB1c2VkIGluc3RlYWQuCi0gICAgICAgICAgICByZXN1
bHQgKz0gc3BpbkJ1dHRvbi0+Y29tcHV0ZWRTdHlsZSgpLT53aWR0aCgpLnZhbHVlKCk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1MYXlvdXRVbml0IFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZTo6Y29tcHV0ZUNvbnRyb2xIZWlnaHQoTGF5b3V0VW5pdCBs
aW5lSGVpZ2h0LCBMYXlvdXRVbml0IG5vbkNvbnRlbnRIZWlnaHQpIGNvbnN0Ci17Ci0gICAgSFRN
TEVsZW1lbnQqIHJlc3VsdHNCdXR0b24gPSByZXN1bHRzQnV0dG9uRWxlbWVudCgpOwotICAgIGlm
IChSZW5kZXJCb3gqIHJlc3VsdHNSZW5kZXJlciA9IHJlc3VsdHNCdXR0b24gPyByZXN1bHRzQnV0
dG9uLT5yZW5kZXJCb3goKSA6IDApIHsKLSAgICAgICAgcmVzdWx0c1JlbmRlcmVyLT5jb21wdXRl
TG9naWNhbEhlaWdodCgpOwotICAgICAgICBub25Db250ZW50SGVpZ2h0ID0gbWF4KG5vbkNvbnRl
bnRIZWlnaHQsIHJlc3VsdHNSZW5kZXJlci0+Ym9yZGVyQW5kUGFkZGluZ0hlaWdodCgpICsgcmVz
dWx0c1JlbmRlcmVyLT5tYXJnaW5IZWlnaHQoKSk7Ci0gICAgICAgIGxpbmVIZWlnaHQgPSBtYXgo
bGluZUhlaWdodCwgcmVzdWx0c1JlbmRlcmVyLT5oZWlnaHQoKSk7Ci0gICAgfQotICAgIEhUTUxF
bGVtZW50KiBjYW5jZWxCdXR0b24gPSBjYW5jZWxCdXR0b25FbGVtZW50KCk7Ci0gICAgaWYgKFJl
bmRlckJveCogY2FuY2VsUmVuZGVyZXIgPSBjYW5jZWxCdXR0b24gPyBjYW5jZWxCdXR0b24tPnJl
bmRlckJveCgpIDogMCkgewotICAgICAgICBjYW5jZWxSZW5kZXJlci0+Y29tcHV0ZUxvZ2ljYWxI
ZWlnaHQoKTsKLSAgICAgICAgbm9uQ29udGVudEhlaWdodCA9IG1heChub25Db250ZW50SGVpZ2h0
LCBjYW5jZWxSZW5kZXJlci0+Ym9yZGVyQW5kUGFkZGluZ0hlaWdodCgpICsgY2FuY2VsUmVuZGVy
ZXItPm1hcmdpbkhlaWdodCgpKTsKLSAgICAgICAgbGluZUhlaWdodCA9IG1heChsaW5lSGVpZ2h0
LCBjYW5jZWxSZW5kZXJlci0+aGVpZ2h0KCkpOwotICAgIH0KLQotICAgIHJldHVybiBsaW5lSGVp
Z2h0ICsgbm9uQ29udGVudEhlaWdodDsKLX0KLQotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmU6OnVwZGF0ZUZyb21FbGVtZW50KCkKLXsKLSAgICBSZW5kZXJUZXh0Q29udHJvbDo6dXBk
YXRlRnJvbUVsZW1lbnQoKTsKLQotICAgIGlmIChjYW5jZWxCdXR0b25FbGVtZW50KCkpCi0gICAg
ICAgIHVwZGF0ZUNhbmNlbEJ1dHRvblZpc2liaWxpdHkoKTsKLQotICAgIGlmIChtX3NlYXJjaFBv
cHVwSXNWaXNpYmxlKQotICAgICAgICBtX3NlYXJjaFBvcHVwLT5wb3B1cE1lbnUoKS0+dXBkYXRl
RnJvbUVsZW1lbnQoKTsKLX0KLQotUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lOjpjcmVhdGVJbm5lclRleHRTdHlsZShjb25zdCBSZW5kZXJTdHlsZSog
c3RhcnRTdHlsZSkgY29uc3QKLXsKLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHRleHRCbG9ja1N0
eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOyAgIAotICAgIHRleHRCbG9ja1N0eWxlLT5pbmhl
cml0RnJvbShzdGFydFN0eWxlKTsKLSAgICBhZGp1c3RJbm5lclRleHRTdHlsZShzdGFydFN0eWxl
LCB0ZXh0QmxvY2tTdHlsZS5nZXQoKSk7Ci0KLSAgICB0ZXh0QmxvY2tTdHlsZS0+c2V0V2hpdGVT
cGFjZShQUkUpOwotICAgIHRleHRCbG9ja1N0eWxlLT5zZXRXb3JkV3JhcChOb3JtYWxXb3JkV3Jh
cCk7Ci0gICAgdGV4dEJsb2NrU3R5bGUtPnNldE92ZXJmbG93WChPSElEREVOKTsKLSAgICB0ZXh0
QmxvY2tTdHlsZS0+c2V0T3ZlcmZsb3dZKE9ISURERU4pOwotICAgIHRleHRCbG9ja1N0eWxlLT5z
ZXRUZXh0T3ZlcmZsb3codGV4dFNob3VsZEJlVHJ1bmNhdGVkKCkgPyBUZXh0T3ZlcmZsb3dFbGxp
cHNpcyA6IFRleHRPdmVyZmxvd0NsaXApOwotCi0gICAgaWYgKG1fZGVzaXJlZElubmVyVGV4dEhl
aWdodCA+PSAwKQotICAgICAgICB0ZXh0QmxvY2tTdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChtX2Rl
c2lyZWRJbm5lclRleHRIZWlnaHQsIEZpeGVkKSk7Ci0gICAgLy8gRG8gbm90IGFsbG93IGxpbmUt
aGVpZ2h0IHRvIGJlIHNtYWxsZXIgdGhhbiBvdXIgZGVmYXVsdC4KLSAgICBpZiAodGV4dEJsb2Nr
U3R5bGUtPmZvbnRNZXRyaWNzKCkubGluZVNwYWNpbmcoKSA+IGxpbmVIZWlnaHQodHJ1ZSwgSG9y
aXpvbnRhbExpbmUsIFBvc2l0aW9uT2ZJbnRlcmlvckxpbmVCb3hlcykpCi0gICAgICAgIHRleHRC
bG9ja1N0eWxlLT5zZXRMaW5lSGVpZ2h0KExlbmd0aCgtMTAwLjBmLCBQZXJjZW50KSk7Ci0KLSAg
ICB0ZXh0QmxvY2tTdHlsZS0+c2V0RGlzcGxheShCTE9DSyk7Ci0KLSAgICByZXR1cm4gdGV4dEJs
b2NrU3R5bGUucmVsZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZUlubmVyQmxvY2tTdHlsZShjb25zdCBSZW5kZXJT
dHlsZSogc3RhcnRTdHlsZSkgY29uc3QKLXsKLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGlubmVy
QmxvY2tTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKLSAgICBpbm5lckJsb2NrU3R5bGUt
PmluaGVyaXRGcm9tKHN0YXJ0U3R5bGUpOwotCi0gICAgaW5uZXJCbG9ja1N0eWxlLT5zZXRCb3hG
bGV4KDEpOwotICAgIGlubmVyQmxvY2tTdHlsZS0+c2V0RGlzcGxheShCTE9DSyk7Ci0gICAgaW5u
ZXJCbG9ja1N0eWxlLT5zZXREaXJlY3Rpb24oTFRSKTsKLQotICAgIC8vIFdlIGRvbid0IHdhbnQg
dGhlIHNoYWRvdyBkb20gdG8gYmUgZWRpdGFibGUsIHNvIHdlIHNldCB0aGlzIGJsb2NrIHRvIHJl
YWQtb25seSBpbiBjYXNlIHRoZSBpbnB1dCBpdHNlbGYgaXMgZWRpdGFibGUuCi0gICAgaW5uZXJC
bG9ja1N0eWxlLT5zZXRVc2VyTW9kaWZ5KFJFQURfT05MWSk7Ci0KLSAgICByZXR1cm4gaW5uZXJC
bG9ja1N0eWxlLnJlbGVhc2UoKTsKLX0KLQotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmU6OnVwZGF0ZUNhbmNlbEJ1dHRvblZpc2liaWxpdHkoKSBjb25zdAotewotICAgIFJlbmRlck9i
amVjdCogY2FuY2VsQnV0dG9uUmVuZGVyZXIgPSBjYW5jZWxCdXR0b25FbGVtZW50KCktPnJlbmRl
cmVyKCk7Ci0gICAgaWYgKCFjYW5jZWxCdXR0b25SZW5kZXJlcikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgY29uc3QgUmVuZGVyU3R5bGUqIGN1clN0eWxlID0gY2FuY2VsQnV0dG9uUmVuZGVyZXIt
PnN0eWxlKCk7Ci0gICAgRVZpc2liaWxpdHkgYnV0dG9uVmlzaWJpbGl0eSA9IHZpc2liaWxpdHlG
b3JDYW5jZWxCdXR0b24oKTsKLSAgICBpZiAoY3VyU3R5bGUtPnZpc2liaWxpdHkoKSA9PSBidXR0
b25WaXNpYmlsaXR5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+
IGNhbmNlbEJ1dHRvblN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lKGN1clN0eWxlKTsKLSAgICBj
YW5jZWxCdXR0b25TdHlsZS0+c2V0VmlzaWJpbGl0eShidXR0b25WaXNpYmlsaXR5KTsKLSAgICBj
YW5jZWxCdXR0b25SZW5kZXJlci0+c2V0U3R5bGUoY2FuY2VsQnV0dG9uU3R5bGUpOwotfQotCi1F
VmlzaWJpbGl0eSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnZpc2liaWxpdHlGb3JDYW5j
ZWxCdXR0b24oKSBjb25zdAotewotICAgIHJldHVybiAoc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09
IEhJRERFTiB8fCBpbnB1dEVsZW1lbnQoKS0+dmFsdWUoKS5pc0VtcHR5KCkpID8gSElEREVOIDog
VklTSUJMRTsKLX0KLQotYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnRleHRTaG91
bGRCZVRydW5jYXRlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRvY3VtZW50KCktPmZvY3VzZWRO
b2RlKCkgIT0gbm9kZSgpCi0gICAgICAgICYmIHN0eWxlKCktPnRleHRPdmVyZmxvdygpID09IFRl
eHRPdmVyZmxvd0VsbGlwc2lzOwotfQotCi1jb25zdCBBdG9taWNTdHJpbmcmIFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6YXV0b3NhdmVOYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSktPmdldEF0dHJpYnV0ZShhdXRvc2F2ZUF0dHIpOwot
fQotCiAvLyBQb3B1cE1lbnVDbGllbnQgbWV0aG9kcwotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6OnZhbHVlQ2hhbmdlZCh1bnNpZ25lZCBsaXN0SW5kZXgsIGJvb2wgZmlyZUV2ZW50
cykKK3ZvaWQgUmVuZGVyU2VhcmNoRmllbGQ6OnZhbHVlQ2hhbmdlZCh1bnNpZ25lZCBsaXN0SW5k
ZXgsIGJvb2wgZmlyZUV2ZW50cykKIHsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihsaXN0
SW5kZXgpIDwgbGlzdFNpemUoKSk7CiAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBpbnB1
dEVsZW1lbnQoKTsKQEAgLTU1MSw3ICsxNTksNyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6dmFsdWVDaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCwgYm9vbCBmaXJlRXZlbgog
ICAgIH0KIH0KIAotU3RyaW5nIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aXRlbVRleHQo
dW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAorU3RyaW5nIFJlbmRlclNlYXJjaEZpZWxkOjppdGVt
VGV4dCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0CiB7CiAgICAgaW50IHNpemUgPSBsaXN0U2l6
ZSgpOwogICAgIGlmIChzaXplID09IDEpIHsKQEAgLTU2Nyw0MiArMTc1LDQyIEBAIFN0cmluZyBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Oml0ZW1UZXh0KHVuc2lnbmVkIGxpc3RJbmRleCkg
Y29uc3QKICAgICByZXR1cm4gbV9yZWNlbnRTZWFyY2hlc1tsaXN0SW5kZXggLSAxXTsKIH0KIAot
U3RyaW5nIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aXRlbUxhYmVsKHVuc2lnbmVkKSBj
b25zdAorU3RyaW5nIFJlbmRlclNlYXJjaEZpZWxkOjppdGVtTGFiZWwodW5zaWduZWQpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi1TdHJpbmcgUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjppdGVtSWNvbih1bnNpZ25lZCkgY29uc3QKK1N0cmluZyBSZW5kZXJTZWFyY2hG
aWVsZDo6aXRlbUljb24odW5zaWduZWQpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFN0cmluZygpOwog
fQogCi1ib29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aXRlbUlzRW5hYmxlZCh1bnNp
Z25lZCBsaXN0SW5kZXgpIGNvbnN0Citib29sIFJlbmRlclNlYXJjaEZpZWxkOjppdGVtSXNFbmFi
bGVkKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKIHsKICAgICAgaWYgKCFsaXN0SW5kZXggfHwg
aXRlbUlzU2VwYXJhdG9yKGxpc3RJbmRleCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotUG9wdXBNZW51U3R5bGUgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lOjppdGVtU3R5bGUodW5zaWduZWQpIGNvbnN0CitQb3B1cE1lbnVTdHlsZSBSZW5kZXJTZWFy
Y2hGaWVsZDo6aXRlbVN0eWxlKHVuc2lnbmVkKSBjb25zdAogewogICAgIHJldHVybiBtZW51U3R5
bGUoKTsKIH0KIAotUG9wdXBNZW51U3R5bGUgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpt
ZW51U3R5bGUoKSBjb25zdAorUG9wdXBNZW51U3R5bGUgUmVuZGVyU2VhcmNoRmllbGQ6Om1lbnVT
dHlsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFBvcHVwTWVudVN0eWxlKHN0eWxlKCktPnZpc2l0
ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgc3R5bGUoKS0+dmlzaXRlZERlcGVu
ZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSwgc3R5bGUoKS0+Zm9udCgpLCBz
dHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSwKICAgICAgICAgc3R5bGUoKS0+ZGlzcGxh
eSgpID09IE5PTkUsIHN0eWxlKCktPnRleHRJbmRlbnQoKSwgc3R5bGUoKS0+ZGlyZWN0aW9uKCks
IGlzT3ZlcnJpZGUoc3R5bGUoKS0+dW5pY29kZUJpZGkoKSkpOwogfQogCi1pbnQgUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lOjpjbGllbnRJbnNldExlZnQoKSBjb25zdAoraW50IFJlbmRlclNl
YXJjaEZpZWxkOjpjbGllbnRJbnNldExlZnQoKSBjb25zdAogewogICAgIC8vIEluc2V0IHRoZSBt
ZW51IGJ5IHRoZSByYWRpdXMgb2YgdGhlIGNhcCBvbiB0aGUgbGVmdCBzbyB0aGF0CiAgICAgLy8g
aXQgb25seSBydW5zIGFsb25nIHRoZSBzdHJhaWdodCBwYXJ0IG9mIHRoZSBiZXplbC4KICAgICBy
ZXR1cm4gaGVpZ2h0KCkgLyAyOwogfQogCi1pbnQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
OjpjbGllbnRJbnNldFJpZ2h0KCkgY29uc3QKK2ludCBSZW5kZXJTZWFyY2hGaWVsZDo6Y2xpZW50
SW5zZXRSaWdodCgpIGNvbnN0CiB7CiAgICAgLy8gSW5zZXQgdGhlIG1lbnUgYnkgdGhlIHJhZGl1
cyBvZiB0aGUgY2FwIG9uIHRoZSByaWdodCBzbyB0aGF0CiAgICAgLy8gaXQgb25seSBydW5zIGFs
b25nIHRoZSBzdHJhaWdodCBwYXJ0IG9mIHRoZSBiZXplbCAodW5sZXNzIGl0IG5lZWRzCkBAIC02
MTAsNyArMjE4LDcgQEAgaW50IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y2xpZW50SW5z
ZXRSaWdodCgpIGNvbnN0CiAgICAgcmV0dXJuIGhlaWdodCgpIC8gMjsKIH0KIAotTGF5b3V0VW5p
dCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNsaWVudFBhZGRpbmdMZWZ0KCkgY29uc3QK
K0xheW91dFVuaXQgUmVuZGVyU2VhcmNoRmllbGQ6OmNsaWVudFBhZGRpbmdMZWZ0KCkgY29uc3QK
IHsKICAgICBMYXlvdXRVbml0IHBhZGRpbmcgPSBwYWRkaW5nTGVmdCgpOwogICAgIGlmIChSZW5k
ZXJCb3gqIGJveCA9IGlubmVyQmxvY2tFbGVtZW50KCkgPyBpbm5lckJsb2NrRWxlbWVudCgpLT5y
ZW5kZXJCb3goKSA6IDApCkBAIC02MTgsNyArMjI2LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmU6OmNsaWVudFBhZGRpbmdMZWZ0KCkgY29uc3QKICAgICByZXR1cm4g
cGFkZGluZzsKIH0KIAotTGF5b3V0VW5pdCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNs
aWVudFBhZGRpbmdSaWdodCgpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlclNlYXJjaEZpZWxkOjpj
bGllbnRQYWRkaW5nUmlnaHQoKSBjb25zdAogewogICAgIExheW91dFVuaXQgcGFkZGluZyA9IHBh
ZGRpbmdSaWdodCgpOwogICAgIGlmIChSZW5kZXJCb3gqIGNvbnRhaW5lckJveCA9IGNvbnRhaW5l
ckVsZW1lbnQoKSA/IGNvbnRhaW5lckVsZW1lbnQoKS0+cmVuZGVyQm94KCkgOiAwKSB7CkBAIC02
MjgsNyArMjM2LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNs
aWVudFBhZGRpbmdSaWdodCgpIGNvbnN0CiAgICAgcmV0dXJuIHBhZGRpbmc7CiB9CiAKLWludCBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Omxpc3RTaXplKCkgY29uc3QKK2ludCBSZW5kZXJT
ZWFyY2hGaWVsZDo6bGlzdFNpemUoKSBjb25zdAogewogICAgIC8vIElmIHRoZXJlIGFyZSBubyBy
ZWNlbnQgc2VhcmNoZXMsIHRoZW4gb3VyIG1lbnUgd2lsbCBoYXZlIDEgIk5vIHJlY2VudCBzZWFy
Y2hlcyIgaXRlbS4KICAgICBpZiAoIW1fcmVjZW50U2VhcmNoZXMuc2l6ZSgpKQpAQCAtNjM3LDEx
MSArMjQ1LDQ5IEBAIGludCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Omxpc3RTaXplKCkg
Y29uc3QKICAgICByZXR1cm4gbV9yZWNlbnRTZWFyY2hlcy5zaXplKCkgKyAzOwogfQogCi1pbnQg
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzZWxlY3RlZEluZGV4KCkgY29uc3QKK2ludCBS
ZW5kZXJTZWFyY2hGaWVsZDo6c2VsZWN0ZWRJbmRleCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIC0x
OwogfQogCi12b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6cG9wdXBEaWRIaWRlKCkK
K3ZvaWQgUmVuZGVyU2VhcmNoRmllbGQ6OnBvcHVwRGlkSGlkZSgpCiB7CiAgICAgbV9zZWFyY2hQ
b3B1cElzVmlzaWJsZSA9IGZhbHNlOwogfQogCi1ib29sIFJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZTo6aXRlbUlzU2VwYXJhdG9yKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKK2Jvb2wgUmVu
ZGVyU2VhcmNoRmllbGQ6Oml0ZW1Jc1NlcGFyYXRvcih1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0
CiB7CiAgICAgLy8gVGhlIHNlcGFyYXRvciB3aWxsIGJlIHRoZSBzZWNvbmQgdG8gbGFzdCBpdGVt
IGluIG91ciBsaXN0LgogICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGxpc3RJbmRleCkgPT0g
KGxpc3RTaXplKCkgLSAyKTsKIH0KIAotYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6
Oml0ZW1Jc0xhYmVsKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKK2Jvb2wgUmVuZGVyU2VhcmNo
RmllbGQ6Oml0ZW1Jc0xhYmVsKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbGlzdEluZGV4ID09IDA7CisgICAgcmV0dXJuICFsaXN0SW5kZXg7CiB9CiAKLWJvb2wgUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppdGVtSXNTZWxlY3RlZCh1bnNpZ25lZCkgY29uc3QK
K2Jvb2wgUmVuZGVyU2VhcmNoRmllbGQ6Oml0ZW1Jc1NlbGVjdGVkKHVuc2lnbmVkKSBjb25zdAog
ewogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmU6OnNldFRleHRGcm9tSXRlbSh1bnNpZ25lZCBsaXN0SW5kZXgpCit2b2lkIFJlbmRlclNlYXJj
aEZpZWxkOjpzZXRUZXh0RnJvbUl0ZW0odW5zaWduZWQgbGlzdEluZGV4KQogewogICAgIGlucHV0
RWxlbWVudCgpLT5zZXRWYWx1ZShpdGVtVGV4dChsaXN0SW5kZXgpKTsKIH0KIAotRm9udFNlbGVj
dG9yKiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmZvbnRTZWxlY3RvcigpIGNvbnN0CitG
b250U2VsZWN0b3IqIFJlbmRlclNlYXJjaEZpZWxkOjpmb250U2VsZWN0b3IoKSBjb25zdAogewog
ICAgIHJldHVybiBkb2N1bWVudCgpLT5zdHlsZVJlc29sdmVyKCktPmZvbnRTZWxlY3RvcigpOwog
fQogCi1Ib3N0V2luZG93KiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Omhvc3RXaW5kb3co
KSBjb25zdAorSG9zdFdpbmRvdyogUmVuZGVyU2VhcmNoRmllbGQ6Omhvc3RXaW5kb3coKSBjb25z
dAogewogICAgIHJldHVybiBkb2N1bWVudCgpLT52aWV3KCktPmhvc3RXaW5kb3coKTsKIH0KIAot
dm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmF1dG9zY3JvbGwoKQotewotICAgIFJl
bmRlckxheWVyKiBsYXllciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVyQm94KCktPmxheWVy
KCk7Ci0gICAgaWYgKGxheWVyKQotICAgICAgICBsYXllci0+YXV0b3Njcm9sbCgpOwotfQotCi1p
bnQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzY3JvbGxXaWR0aCgpIGNvbnN0Ci17Ci0g
ICAgaWYgKGlubmVyVGV4dEVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGlubmVyVGV4dEVsZW1l
bnQoKS0+c2Nyb2xsV2lkdGgoKTsKLSAgICByZXR1cm4gUmVuZGVyQmxvY2s6OnNjcm9sbFdpZHRo
KCk7Ci19CiAKLWludCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNjcm9sbEhlaWdodCgp
IGNvbnN0Ci17Ci0gICAgaWYgKGlubmVyVGV4dEVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGlu
bmVyVGV4dEVsZW1lbnQoKS0+c2Nyb2xsSGVpZ2h0KCk7Ci0gICAgcmV0dXJuIFJlbmRlckJsb2Nr
OjpzY3JvbGxIZWlnaHQoKTsKLX0KLQotaW50IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6
c2Nyb2xsTGVmdCgpIGNvbnN0Ci17Ci0gICAgaWYgKGlubmVyVGV4dEVsZW1lbnQoKSkKLSAgICAg
ICAgcmV0dXJuIGlubmVyVGV4dEVsZW1lbnQoKS0+c2Nyb2xsTGVmdCgpOwotICAgIHJldHVybiBS
ZW5kZXJCbG9jazo6c2Nyb2xsTGVmdCgpOwotfQotCi1pbnQgUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjpzY3JvbGxUb3AoKSBjb25zdAotewotICAgIGlmIChpbm5lclRleHRFbGVtZW50KCkp
Ci0gICAgICAgIHJldHVybiBpbm5lclRleHRFbGVtZW50KCktPnNjcm9sbFRvcCgpOwotICAgIHJl
dHVybiBSZW5kZXJCbG9jazo6c2Nyb2xsVG9wKCk7Ci19Ci0KLXZvaWQgUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjpzZXRTY3JvbGxMZWZ0KGludCBuZXdMZWZ0KQotewotICAgIGlmIChpbm5l
clRleHRFbGVtZW50KCkpCi0gICAgICAgIGlubmVyVGV4dEVsZW1lbnQoKS0+c2V0U2Nyb2xsTGVm
dChuZXdMZWZ0KTsKLX0KLQotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNldFNj
cm9sbFRvcChpbnQgbmV3VG9wKQotewotICAgIGlmIChpbm5lclRleHRFbGVtZW50KCkpCi0gICAg
ICAgIGlubmVyVGV4dEVsZW1lbnQoKS0+c2V0U2Nyb2xsVG9wKG5ld1RvcCk7Ci19Ci0KLWJvb2wg
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVj
dGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIE5v
ZGUqKiBzdG9wTm9kZSkKLXsKLSAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBpbm5lclRleHRFbGVt
ZW50KCktPnJlbmRlckJveCgpLT5sYXllcigpOwotICAgIGlmIChsYXllciAmJiBsYXllci0+c2Ny
b2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICByZXR1cm4gUmVuZGVyQmxvY2s6OnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFy
aXR5LCBtdWx0aXBsaWVyLCBzdG9wTm9kZSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjpsb2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24gZGlyZWN0aW9u
LCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwgTm9kZSoq
IHN0b3BOb2RlKQotewotICAgIFJlbmRlckxheWVyKiBsYXllciA9IGlubmVyVGV4dEVsZW1lbnQo
KS0+cmVuZGVyQm94KCktPmxheWVyKCk7Ci0gICAgaWYgKGxheWVyICYmIGxheWVyLT5zY3JvbGwo
bG9naWNhbFRvUGh5c2ljYWwoZGlyZWN0aW9uLCBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5n
TW9kZSgpLCBzdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgZ3JhbnVsYXJp
dHksIG11bHRpcGxpZXIpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gUmVuZGVy
QmxvY2s6OmxvZ2ljYWxTY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllciwg
c3RvcE5vZGUpOwotfQotCi1QYXNzUmVmUHRyPFNjcm9sbGJhcj4gUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVh
LCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUg
Y29udHJvbFNpemUpCitQYXNzUmVmUHRyPFNjcm9sbGJhcj4gUmVuZGVyU2VhcmNoRmllbGQ6OmNy
ZWF0ZVNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEsIFNjcm9sbGJhck9y
aWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkK
IHsKICAgICBSZWZQdHI8U2Nyb2xsYmFyPiB3aWRnZXQ7CiAgICAgYm9vbCBoYXNDdXN0b21TY3Jv
bGxiYXJTdHlsZSA9IHN0eWxlKCktPmhhc1BzZXVkb1N0eWxlKFNDUk9MTEJBUik7CkBAIC03NTIs
OSArMjk4LDIzIEBAIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmU6OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxhYmxlQXJlCiAgICAgcmV0dXJuIHdpZGdldC5y
ZWxlYXNlKCk7CiB9CiAKLUhUTUxJbnB1dEVsZW1lbnQqIFJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZTo6aW5wdXRFbGVtZW50KCkgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyU2VhcmNoRmllbGQ6
OmNvbXB1dGVIZWlnaHRMaW1pdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhlaWdodCgpOworfQor
Cit2b2lkIFJlbmRlclNlYXJjaEZpZWxkOjpjZW50ZXJDb250YWluZXJJZk5lZWRlZChSZW5kZXJC
b3gqIGNvbnRhaW5lclJlbmRlcmVyKSBjb25zdAogewotICAgIHJldHVybiBub2RlKCktPnRvSW5w
dXRFbGVtZW50KCk7CisgICAgaWYgKCFjb250YWluZXJSZW5kZXJlcikKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKGNvbnRhaW5lclJlbmRlcmVyLT5oZWlnaHQoKSA8PSBjb250ZW50SGVpZ2h0
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEEgcXVpcmsgZm9yIGZpbmQtaW4tcGFnZSBi
b3ggb24gU2FmYXJpIFdpbmRvd3MuCisgICAgLy8gaHR0cDovL3dlYmtpdC5vcmcvYi82MzE1Nwor
ICAgIExheW91dFVuaXQgaGVpZ2h0RGlmZiA9IGNvbnRhaW5lclJlbmRlcmVyLT5oZWlnaHQoKSAt
IGNvbnRlbnRIZWlnaHQoKTsKKyAgICBjb250YWluZXJSZW5kZXJlci0+c2V0WShjb250YWluZXJS
ZW5kZXJlci0+eSgpIC0gKGhlaWdodERpZmYgLyAyICsgbGF5b3V0TW9kKGhlaWdodERpZmYsIDIp
KSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
ZWFyY2hGaWVsZC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxk
LmgKaW5kZXggNmUyMWM4NTZjMTBmYTlmYmE0MzZjMDZmNzQ5YzE0ZTFlMmE4MGJhNi4uYjcwOGJm
M2Q1YmI4ZTI2ZTI1N2YwYTQyYjc2MjgzYWFmYjg1MTE3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmgKQEAgLTIwLDI1ICsyMCwyMSBAQAogICoKICAq
LwogCi0jaWZuZGVmIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZV9oCi0jZGVmaW5lIFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZV9oCisjaWZuZGVmIFJlbmRlclNlYXJjaEZpZWxkX2gKKyNk
ZWZpbmUgUmVuZGVyU2VhcmNoRmllbGRfaAogCiAjaW5jbHVkZSAiUG9wdXBNZW51Q2xpZW50Lmgi
Ci0jaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2wuaCIKKyNpbmNsdWRlICJSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1MSW5w
dXRFbGVtZW50OwogY2xhc3MgU2VhcmNoUG9wdXBNZW51OwogCi1jbGFzcyBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUgOiBwdWJsaWMgUmVuZGVyVGV4dENvbnRyb2wsIHByaXZhdGUgUG9wdXBN
ZW51Q2xpZW50IHsKK2NsYXNzIFJlbmRlclNlYXJjaEZpZWxkIDogcHVibGljIFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZSwgcHJpdmF0ZSBQb3B1cE1lbnVDbGllbnQgewogcHVibGljOgotICAg
IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShOb2RlKik7Ci0gICAgdmlydHVhbCB+UmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lKCk7Ci0gICAgLy8gRklYTUU6IE1vdmUgY3JlYXRlKlN0eWxl
KCkgdG8gdGhlaXIgY2xhc3Nlcy4KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+
IGNyZWF0ZUlubmVyVGV4dFN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBzdGFydFN0eWxlKSBjb25z
dDsKLSAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBjcmVhdGVJbm5lckJsb2NrU3R5bGUoY29u
c3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUpIGNvbnN0OwotICAgIHZvaWQgdXBkYXRlQ2FuY2Vs
QnV0dG9uVmlzaWJpbGl0eSgpIGNvbnN0OworICAgIFJlbmRlclNlYXJjaEZpZWxkKE5vZGUqKTsK
KyAgICB2aXJ0dWFsIH5SZW5kZXJTZWFyY2hGaWVsZCgpOwogCiAgICAgdm9pZCBhZGRTZWFyY2hS
ZXN1bHQoKTsKICAgICB2b2lkIHN0b3BTZWFyY2hFdmVudFRpbWVyKCk7CkBAIC00Nyw0MyArNDMs
OSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzaG93UG9wdXAoKTsKICAgICB2b2lkIGhpZGVQb3B1cCgp
OwogCi0gICAgdm9pZCBjYXBzTG9ja1N0YXRlTWF5SGF2ZUNoYW5nZWQoKTsKLQogcHJpdmF0ZToK
LSAgICB2aXJ0dWFsIGJvb2wgaGFzQ29udHJvbENsaXAoKSBjb25zdDsKLSAgICB2aXJ0dWFsIExh
eW91dFJlY3QgY29udHJvbENsaXBSZWN0KGNvbnN0IExheW91dFBvaW50JikgY29uc3Q7Ci0gICAg
dmlydHVhbCBib29sIGlzVGV4dEZpZWxkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAg
dmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7Ci0gICAg
dmlydHVhbCB2b2lkIGxheW91dCgpOwotCi0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiBw
b2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhp
dFRlc3RBY3Rpb24pOwotCi0gICAgdmlydHVhbCB2b2lkIGF1dG9zY3JvbGwoKTsKLQotICAgIC8v
IFN1YmNsYXNzZWQgdG8gZm9yd2FyZCB0byBvdXIgaW5uZXIgZGl2LgotICAgIHZpcnR1YWwgaW50
IHNjcm9sbExlZnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBzY3JvbGxUb3AoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIGludCBzY3JvbGxXaWR0aCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHNj
cm9sbEhlaWdodCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxMZWZ0KGludCk7
Ci0gICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbFRvcChpbnQpOwotICAgIHZpcnR1YWwgYm9vbCBz
Y3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGll
ciA9IDEsIE5vZGUqKiBzdG9wTm9kZSA9IDApOwotICAgIHZpcnR1YWwgYm9vbCBsb2dpY2FsU2Ny
b2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0
aXBsaWVyID0gMSwgTm9kZSoqIHN0b3BOb2RlID0gMCk7Ci0KLSAgICBpbnQgdGV4dEJsb2NrV2lk
dGgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGZsb2F0IGdldEF2Z0NoYXJXaWR0aChBdG9taWNTdHJp
bmcgZmFtaWx5KTsKLSAgICB2aXJ0dWFsIExheW91dFVuaXQgcHJlZmVycmVkQ29udGVudFdpZHRo
KGZsb2F0IGNoYXJXaWR0aCkgY29uc3Q7Ci0gICAgdmlydHVhbCBMYXlvdXRVbml0IGNvbXB1dGVD
b250cm9sSGVpZ2h0KExheW91dFVuaXQgbGluZUhlaWdodCwgTGF5b3V0VW5pdCBub25Db250ZW50
SGVpZ2h0KSBjb25zdCBPVkVSUklERTsKLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRnJv
bUVsZW1lbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJl
bmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwotCi0gICAgdmlydHVhbCBSZW5kZXJT
dHlsZSogdGV4dEJhc2VTdHlsZSgpIGNvbnN0OwotCi0gICAgRVZpc2liaWxpdHkgdmlzaWJpbGl0
eUZvckNhbmNlbEJ1dHRvbigpIGNvbnN0OwotICAgIGJvb2wgdGV4dFNob3VsZEJlVHJ1bmNhdGVk
KCkgY29uc3Q7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdXRvc2F2ZU5hbWUoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIExheW91dFVuaXQgY29tcHV0ZUhlaWdodExpbWl0KCkgY29uc3QgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIGNlbnRlckNvbnRhaW5lcklmTmVlZGVkKFJlbmRlckJveCop
IGNvbnN0IE9WRVJSSURFOwogCiAgICAgLy8gUG9wdXBNZW51Q2xpZW50IG1ldGhvZHMKICAgICB2
aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCwgYm9vbCBmaXJlRXZl
bnRzID0gdHJ1ZSkgT1ZFUlJJREU7CkBAIC0xMTQsNDIgKzc2LDE5IEBAIHByaXZhdGU6CiAgICAg
dmlydHVhbCBIb3N0V2luZG93KiBob3N0V2luZG93KCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmly
dHVhbCBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVh
KiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplKSBPVkVSUklERTsK
IAotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCgpIGNvbnN0OwotCi0gICAgSFRN
TEVsZW1lbnQqIGNvbnRhaW5lckVsZW1lbnQoKSBjb25zdDsKLSAgICBIVE1MRWxlbWVudCogaW5u
ZXJCbG9ja0VsZW1lbnQoKSBjb25zdDsKLSAgICBIVE1MRWxlbWVudCogaW5uZXJTcGluQnV0dG9u
RWxlbWVudCgpIGNvbnN0OwotICAgIEhUTUxFbGVtZW50KiByZXN1bHRzQnV0dG9uRWxlbWVudCgp
IGNvbnN0OwotICAgIEhUTUxFbGVtZW50KiBjYW5jZWxCdXR0b25FbGVtZW50KCkgY29uc3Q7Ci0K
ICAgICBib29sIG1fc2VhcmNoUG9wdXBJc1Zpc2libGU7Ci0gICAgYm9vbCBtX3Nob3VsZERyYXdD
YXBzTG9ja0luZGljYXRvcjsKLSAgICBMYXlvdXRVbml0IG1fZGVzaXJlZElubmVyVGV4dEhlaWdo
dDsKICAgICBSZWZQdHI8U2VhcmNoUG9wdXBNZW51PiBtX3NlYXJjaFBvcHVwOwogICAgIFZlY3Rv
cjxTdHJpbmc+IG1fcmVjZW50U2VhcmNoZXM7CiB9OwogCi1pbmxpbmUgUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lKiB0b1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShSZW5kZXJPYmplY3Qq
IG9iamVjdCkKK2lubGluZSBSZW5kZXJTZWFyY2hGaWVsZCogdG9SZW5kZXJTZWFyY2hGaWVsZChS
ZW5kZXJPYmplY3QqIG9iamVjdCkKIHsKICAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlz
VGV4dEZpZWxkKCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmUqPihvYmplY3QpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJTZWFyY2hG
aWVsZCo+KG9iamVjdCk7CiB9CiAKIC8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4g
dW5uZWNlc3NhcnkgY2FzdC4KLXZvaWQgdG9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUoY29u
c3QgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKik7Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotY2xhc3MgUmVuZGVyVGV4dENvbnRyb2xJbm5lckJsb2NrIDogcHVibGlj
IFJlbmRlckJsb2NrIHsKLXB1YmxpYzoKLSAgICBSZW5kZXJUZXh0Q29udHJvbElubmVyQmxvY2so
Tm9kZSogbm9kZSwgYm9vbCBpc011bHRpTGluZSkgOiBSZW5kZXJCbG9jayhub2RlKSwgbV9tdWx0
aUxpbmUoaXNNdWx0aUxpbmUpIHsgfQotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgYm9vbCBoYXNM
aW5lSWZFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIFZpc2libGVQ
b3NpdGlvbiBwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50Jik7Ci0KLSAgICBib29s
IG1fbXVsdGlMaW5lOwotfTsKK3ZvaWQgdG9SZW5kZXJTZWFyY2hGaWVsZChjb25zdCBSZW5kZXJT
ZWFyY2hGaWVsZCopOwogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKaW5kZXggODQ4ZmMyMTE5N2MyYTdk
MjRmMjY0OGRmNzAyMDUyOWYzYzg4MGQzYi4uMDg5ODdjM2EzZjk0MTJkYTJmMjZkNmQ2NjYwNWNj
NTM1ZTFjY2UxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRl
ICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiRnJhbWVW
aWV3LmgiCi0jaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJp
bmdzLmgiCkBAIC0zOSw3ICszOCw2IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNs
dWRlICJSZW5kZXJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgotI2luY2x1
ZGUgIlNlYXJjaFBvcHVwTWVudS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAi
U2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCkBAIC03MCwxMCAr
NjgsOCBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyVGV4dENvbnRyb2xJbm5lckJsb2NrOjpwb3Np
dGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JgogCiBSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShOb2RlKiBub2RlKQogICAgIDogUmVu
ZGVyVGV4dENvbnRyb2wobm9kZSkKLSAgICAsIG1fc2VhcmNoUG9wdXBJc1Zpc2libGUoZmFsc2Up
CiAgICAgLCBtX3Nob3VsZERyYXdDYXBzTG9ja0luZGljYXRvcihmYWxzZSkKICAgICAsIG1fZGVz
aXJlZElubmVyVGV4dEhlaWdodCgtMSkKLSAgICAsIG1fc2VhcmNoUG9wdXAoMCkKIHsKICAgICBB
U1NFUlQobm9kZS0+aXNIVE1MRWxlbWVudCgpKTsKICAgICBBU1NFUlQobm9kZS0+dG9JbnB1dEVs
ZW1lbnQoKSk7CkBAIC04MSwyMCArNzcsNiBAQCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6
OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShOb2RlKiBub2RlKQogCiBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6On5SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUoKQogewotICAgIGlm
IChtX3NlYXJjaFBvcHVwKSB7Ci0gICAgICAgIG1fc2VhcmNoUG9wdXAtPnBvcHVwTWVudSgpLT5k
aXNjb25uZWN0Q2xpZW50KCk7Ci0gICAgICAgIG1fc2VhcmNoUG9wdXAgPSAwOwotICAgIH0KLX0K
LQotaW5saW5lIEhUTUxFbGVtZW50KiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNvbnRh
aW5lckVsZW1lbnQoKSBjb25zdAotewotICAgIHJldHVybiBpbnB1dEVsZW1lbnQoKS0+Y29udGFp
bmVyRWxlbWVudCgpOwotfQotCi1pbmxpbmUgSFRNTEVsZW1lbnQqIFJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZTo6aW5uZXJCbG9ja0VsZW1lbnQoKSBjb25zdAotewotICAgIHJldHVybiBpbnB1
dEVsZW1lbnQoKS0+aW5uZXJCbG9ja0VsZW1lbnQoKTsKIH0KIAogaW5saW5lIEhUTUxFbGVtZW50
KiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmlubmVyU3BpbkJ1dHRvbkVsZW1lbnQoKSBj
b25zdApAQCAtMTE4LDcyICsxMDAsNiBAQCBSZW5kZXJTdHlsZSogUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjp0ZXh0QmFzZVN0eWxlKCkgY29uc3QKICAgICByZXR1cm4gaW5uZXJCbG9jayA/
IGlubmVyQmxvY2stPnJlbmRlcmVyKCktPnN0eWxlKCkgOiBzdHlsZSgpOwogfQogCi12b2lkIFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6YWRkU2VhcmNoUmVzdWx0KCkKLXsKLSAgICBIVE1M
SW5wdXRFbGVtZW50KiBpbnB1dCA9IGlucHV0RWxlbWVudCgpOwotICAgIGlmIChpbnB1dC0+bWF4
UmVzdWx0cygpIDw9IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIFN0cmluZyB2YWx1ZSA9IGlu
cHV0LT52YWx1ZSgpOwotICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50KCktPnNldHRpbmdzKCk7Ci0gICAg
aWYgKCFzZXR0aW5ncyB8fCBzZXR0aW5ncy0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpbnQgc2l6ZSA9IHN0YXRpY19jYXN0PGludD4obV9yZWNlbnRT
ZWFyY2hlcy5zaXplKCkpOwotICAgIGZvciAoaW50IGkgPSBzaXplIC0gMTsgaSA+PSAwOyAtLWkp
IHsKLSAgICAgICAgaWYgKG1fcmVjZW50U2VhcmNoZXNbaV0gPT0gdmFsdWUpCi0gICAgICAgICAg
ICBtX3JlY2VudFNlYXJjaGVzLnJlbW92ZShpKTsKLSAgICB9Ci0KLSAgICBtX3JlY2VudFNlYXJj
aGVzLmluc2VydCgwLCB2YWx1ZSk7Ci0gICAgd2hpbGUgKHN0YXRpY19jYXN0PGludD4obV9yZWNl
bnRTZWFyY2hlcy5zaXplKCkpID4gaW5wdXQtPm1heFJlc3VsdHMoKSkKLSAgICAgICAgbV9yZWNl
bnRTZWFyY2hlcy5yZW1vdmVMYXN0KCk7Ci0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUg
PSBhdXRvc2F2ZU5hbWUoKTsKLSAgICBpZiAoIW1fc2VhcmNoUG9wdXApCi0gICAgICAgIG1fc2Vh
cmNoUG9wdXAgPSBkb2N1bWVudCgpLT5wYWdlKCktPmNocm9tZSgpLT5jcmVhdGVTZWFyY2hQb3B1
cE1lbnUodGhpcyk7Ci0KLSAgICBtX3NlYXJjaFBvcHVwLT5zYXZlUmVjZW50U2VhcmNoZXMobmFt
ZSwgbV9yZWNlbnRTZWFyY2hlcyk7Ci19Ci0KLXZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lOjpzaG93UG9wdXAoKQotewotICAgIGlmIChtX3NlYXJjaFBvcHVwSXNWaXNpYmxlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fc2VhcmNoUG9wdXApCi0gICAgICAgIG1fc2VhcmNo
UG9wdXAgPSBkb2N1bWVudCgpLT5wYWdlKCktPmNocm9tZSgpLT5jcmVhdGVTZWFyY2hQb3B1cE1l
bnUodGhpcyk7Ci0KLSAgICBpZiAoIW1fc2VhcmNoUG9wdXAtPmVuYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9zZWFyY2hQb3B1cElzVmlzaWJsZSA9IHRydWU7Ci0KLSAgICBjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWUgPSBhdXRvc2F2ZU5hbWUoKTsKLSAgICBtX3NlYXJjaFBvcHVw
LT5sb2FkUmVjZW50U2VhcmNoZXMobmFtZSwgbV9yZWNlbnRTZWFyY2hlcyk7Ci0KLSAgICAvLyBU
cmltIHRoZSByZWNlbnQgc2VhcmNoZXMgbGlzdCBpZiB0aGUgbWF4aW11bSBzaXplIGhhcyBjaGFu
Z2VkIHNpbmNlIHdlIGxhc3Qgc2F2ZWQuCi0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBp
bnB1dEVsZW1lbnQoKTsKLSAgICBpZiAoc3RhdGljX2Nhc3Q8aW50PihtX3JlY2VudFNlYXJjaGVz
LnNpemUoKSkgPiBpbnB1dC0+bWF4UmVzdWx0cygpKSB7Ci0gICAgICAgIGRvIHsKLSAgICAgICAg
ICAgIG1fcmVjZW50U2VhcmNoZXMucmVtb3ZlTGFzdCgpOwotICAgICAgICB9IHdoaWxlIChzdGF0
aWNfY2FzdDxpbnQ+KG1fcmVjZW50U2VhcmNoZXMuc2l6ZSgpKSA+IGlucHV0LT5tYXhSZXN1bHRz
KCkpOwotCi0gICAgICAgIG1fc2VhcmNoUG9wdXAtPnNhdmVSZWNlbnRTZWFyY2hlcyhuYW1lLCBt
X3JlY2VudFNlYXJjaGVzKTsKLSAgICB9Ci0KLSAgICBtX3NlYXJjaFBvcHVwLT5wb3B1cE1lbnUo
KS0+c2hvdyhwaXhlbFNuYXBwZWRJbnRSZWN0KGFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkpLCBk
b2N1bWVudCgpLT52aWV3KCksIC0xKTsKLX0KLQotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmU6OmhpZGVQb3B1cCgpCi17Ci0gICAgaWYgKG1fc2VhcmNoUG9wdXApCi0gICAgICAgIG1f
c2VhcmNoUG9wdXAtPnBvcHVwTWVudSgpLT5oaWRlKCk7Ci19Ci0KIHZvaWQgUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0
UG9pbnQmIHBhaW50T2Zmc2V0KQogewogICAgIFJlbmRlclRleHRDb250cm9sOjpwYWludChwYWlu
dEluZm8sIHBhaW50T2Zmc2V0KTsKQEAgLTIwMCw2ICsxMTYsMTEgQEAgdm9pZCBSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmU6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlv
dXRQb2ludCYKICAgICB9CiB9CiAKK0xheW91dFVuaXQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lOjpjb21wdXRlSGVpZ2h0TGltaXQoKSBjb25zdAoreworICAgIHJldHVybiBjb250YWluZXJF
bGVtZW50KCkgPyBjb250ZW50SGVpZ2h0KCkgOiBoZWlnaHQoKTsKK30KKwogdm9pZCBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OmxheW91dCgpCiB7CiAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCByZW1vdmUgdGhlIGhlaWdodC1yZWxhdGVkIGhhY2tzIGluIGxheW91dCgpIGFuZApAQCAtMjI1
LDcgKzE0Niw3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsYXlvdXQoKQog
ICAgIExheW91dFVuaXQgZGVzaXJlZEhlaWdodCA9IHRleHRCbG9ja0hlaWdodCgpOwogICAgIExh
eW91dFVuaXQgY3VycmVudEhlaWdodCA9IGlubmVyVGV4dFJlbmRlcmVyLT5oZWlnaHQoKTsKIAot
ICAgIExheW91dFVuaXQgaGVpZ2h0TGltaXQgPSAoaW5wdXRFbGVtZW50KCktPmlzU2VhcmNoRmll
bGQoKSB8fCAhY29udGFpbmVyKSA/IGhlaWdodCgpIDogY29udGVudEhlaWdodCgpOworICAgIExh
eW91dFVuaXQgaGVpZ2h0TGltaXQgPSBjb21wdXRlSGVpZ2h0TGltaXQoKTsKICAgICBpZiAoY3Vy
cmVudEhlaWdodCA+IGhlaWdodExpbWl0KSB7CiAgICAgICAgIGlmIChkZXNpcmVkSGVpZ2h0ICE9
IGN1cnJlbnRIZWlnaHQpCiAgICAgICAgICAgICBzZXROZWVkc0xheW91dCh0cnVlLCBNYXJrT25s
eVRoaXMpOwpAQCAtMjU4LDEyICsxNzksOCBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZTo6bGF5b3V0KCkKICAgICBpZiAoIWNvbnRhaW5lciAmJiBjdXJyZW50SGVpZ2h0ICE9IGNv
bnRlbnRIZWlnaHQoKSkgewogICAgICAgICBMYXlvdXRVbml0IGhlaWdodERpZmYgPSBjdXJyZW50
SGVpZ2h0IC0gY29udGVudEhlaWdodCgpOwogICAgICAgICBpbm5lclRleHRSZW5kZXJlci0+c2V0
WShpbm5lclRleHRSZW5kZXJlci0+eSgpIC0gKGhlaWdodERpZmYgLyAyICsgbGF5b3V0TW9kKGhl
aWdodERpZmYsIDIpKSk7Ci0gICAgfSBlbHNlIGlmIChpbnB1dEVsZW1lbnQoKS0+aXNTZWFyY2hG
aWVsZCgpICYmIGNvbnRhaW5lclJlbmRlcmVyICYmIGNvbnRhaW5lclJlbmRlcmVyLT5oZWlnaHQo
KSA+IGNvbnRlbnRIZWlnaHQoKSkgewotICAgICAgICAvLyBBIHF1aXJrIGZvciBmaW5kLWluLXBh
Z2UgYm94IG9uIFNhZmFyaSBXaW5kb3dzLgotICAgICAgICAvLyBodHRwOi8vd2Via2l0Lm9yZy9i
LzYzMTU3Ci0gICAgICAgIExheW91dFVuaXQgaGVpZ2h0RGlmZiA9IGNvbnRhaW5lclJlbmRlcmVy
LT5oZWlnaHQoKSAtIGNvbnRlbnRIZWlnaHQoKTsKLSAgICAgICAgY29udGFpbmVyUmVuZGVyZXIt
PnNldFkoY29udGFpbmVyUmVuZGVyZXItPnkoKSAtIChoZWlnaHREaWZmIC8gMiArIGxheW91dE1v
ZChoZWlnaHREaWZmLCAyKSkpOwotICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgY2VudGVyQ29u
dGFpbmVySWZOZWVkZWQoY29udGFpbmVyUmVuZGVyZXIpOwogCiAgICAgLy8gSWdub3JlcyB0aGUg
cGFkZGluZ3MgZm9yIHRoZSBpbm5lciBzcGluIGJ1dHRvbi4KICAgICBpZiAoUmVuZGVyQm94KiBp
bm5lclNwaW5Cb3ggPSBpbm5lclNwaW5CdXR0b25FbGVtZW50KCkgPyBpbm5lclNwaW5CdXR0b25F
bGVtZW50KCktPnJlbmRlckJveCgpIDogMCkgewpAQCAtNDUzLDkgKzM3MCw2IEBAIHZvaWQgUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp1cGRhdGVGcm9tRWxlbWVudCgpCiAKICAgICBpZiAo
Y2FuY2VsQnV0dG9uRWxlbWVudCgpKQogICAgICAgICB1cGRhdGVDYW5jZWxCdXR0b25WaXNpYmls
aXR5KCk7Ci0KLSAgICBpZiAobV9zZWFyY2hQb3B1cElzVmlzaWJsZSkKLSAgICAgICAgbV9zZWFy
Y2hQb3B1cC0+cG9wdXBNZW51KCktPnVwZGF0ZUZyb21FbGVtZW50KCk7CiB9CiAKIFBhc3NSZWZQ
dHI8UmVuZGVyU3R5bGU+IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y3JlYXRlSW5uZXJU
ZXh0U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUpIGNvbnN0CkBAIC01MjgsMTU2
ICs0NDIsNiBAQCBjb25zdCBBdG9taWNTdHJpbmcmIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6YXV0b3NhdmVOYW1lKCkgY29uc3QKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudCo+
KG5vZGUoKSktPmdldEF0dHJpYnV0ZShhdXRvc2F2ZUF0dHIpOwogfQogCi0vLyBQb3B1cE1lbnVD
bGllbnQgbWV0aG9kcwotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnZhbHVlQ2hh
bmdlZCh1bnNpZ25lZCBsaXN0SW5kZXgsIGJvb2wgZmlyZUV2ZW50cykKLXsKLSAgICBBU1NFUlQo
c3RhdGljX2Nhc3Q8aW50PihsaXN0SW5kZXgpIDwgbGlzdFNpemUoKSk7Ci0gICAgSFRNTElucHV0
RWxlbWVudCogaW5wdXQgPSBpbnB1dEVsZW1lbnQoKTsKLSAgICBpZiAoc3RhdGljX2Nhc3Q8aW50
PihsaXN0SW5kZXgpID09IChsaXN0U2l6ZSgpIC0gMSkpIHsKLSAgICAgICAgaWYgKGZpcmVFdmVu
dHMpIHsKLSAgICAgICAgICAgIG1fcmVjZW50U2VhcmNoZXMuY2xlYXIoKTsKLSAgICAgICAgICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSA9IGF1dG9zYXZlTmFtZSgpOwotICAgICAgICAgICAg
aWYgKCFuYW1lLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGlmICghbV9zZWFyY2hQb3B1
cCkKLSAgICAgICAgICAgICAgICAgICAgbV9zZWFyY2hQb3B1cCA9IGRvY3VtZW50KCktPnBhZ2Uo
KS0+Y2hyb21lKCktPmNyZWF0ZVNlYXJjaFBvcHVwTWVudSh0aGlzKTsKLSAgICAgICAgICAgICAg
ICBtX3NlYXJjaFBvcHVwLT5zYXZlUmVjZW50U2VhcmNoZXMobmFtZSwgbV9yZWNlbnRTZWFyY2hl
cyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpbnB1
dC0+c2V0VmFsdWUoaXRlbVRleHQobGlzdEluZGV4KSk7Ci0gICAgICAgIGlmIChmaXJlRXZlbnRz
KQotICAgICAgICAgICAgaW5wdXQtPm9uU2VhcmNoKCk7Ci0gICAgICAgIGlucHV0LT5zZWxlY3Qo
KTsKLSAgICB9Ci19Ci0KLVN0cmluZyBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Oml0ZW1U
ZXh0KHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKLXsKLSAgICBpbnQgc2l6ZSA9IGxpc3RTaXpl
KCk7Ci0gICAgaWYgKHNpemUgPT0gMSkgewotICAgICAgICBBU1NFUlQoIWxpc3RJbmRleCk7Ci0g
ICAgICAgIHJldHVybiBzZWFyY2hNZW51Tm9SZWNlbnRTZWFyY2hlc1RleHQoKTsKLSAgICB9Ci0g
ICAgaWYgKCFsaXN0SW5kZXgpCi0gICAgICAgIHJldHVybiBzZWFyY2hNZW51UmVjZW50U2VhcmNo
ZXNUZXh0KCk7Ci0gICAgaWYgKGl0ZW1Jc1NlcGFyYXRvcihsaXN0SW5kZXgpKQotICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci0gICAgaWYgKHN0YXRpY19jYXN0PGludD4obGlzdEluZGV4KSA9PSAo
c2l6ZSAtIDEpKQotICAgICAgICByZXR1cm4gc2VhcmNoTWVudUNsZWFyUmVjZW50U2VhcmNoZXNU
ZXh0KCk7Ci0gICAgcmV0dXJuIG1fcmVjZW50U2VhcmNoZXNbbGlzdEluZGV4IC0gMV07Ci19Ci0K
LVN0cmluZyBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Oml0ZW1MYWJlbCh1bnNpZ25lZCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6Oml0ZW1JY29uKHVuc2lnbmVkKSBjb25zdAotewotICAgIHJldHVybiBT
dHJpbmcoKTsKLX0KLQotYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Oml0ZW1Jc0Vu
YWJsZWQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAotewotICAgICBpZiAoIWxpc3RJbmRleCB8
fCBpdGVtSXNTZXBhcmF0b3IobGlzdEluZGV4KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1Qb3B1cE1lbnVTdHlsZSBSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmU6Oml0ZW1TdHlsZSh1bnNpZ25lZCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWVudVN0eWxl
KCk7Ci19Ci0KLVBvcHVwTWVudVN0eWxlIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bWVu
dVN0eWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gUG9wdXBNZW51U3R5bGUoc3R5bGUoKS0+dmlz
aXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBzdHlsZSgpLT52aXNpdGVkRGVw
ZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLCBzdHlsZSgpLT5mb250KCks
IHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFLAotICAgICAgICBzdHlsZSgpLT5kaXNw
bGF5KCkgPT0gTk9ORSwgc3R5bGUoKS0+dGV4dEluZGVudCgpLCBzdHlsZSgpLT5kaXJlY3Rpb24o
KSwgaXNPdmVycmlkZShzdHlsZSgpLT51bmljb2RlQmlkaSgpKSk7Ci19Ci0KLWludCBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNsaWVudEluc2V0TGVmdCgpIGNvbnN0Ci17Ci0gICAgLy8g
SW5zZXQgdGhlIG1lbnUgYnkgdGhlIHJhZGl1cyBvZiB0aGUgY2FwIG9uIHRoZSBsZWZ0IHNvIHRo
YXQKLSAgICAvLyBpdCBvbmx5IHJ1bnMgYWxvbmcgdGhlIHN0cmFpZ2h0IHBhcnQgb2YgdGhlIGJl
emVsLgotICAgIHJldHVybiBoZWlnaHQoKSAvIDI7Ci19Ci0KLWludCBSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OmNsaWVudEluc2V0UmlnaHQoKSBjb25zdAotewotICAgIC8vIEluc2V0IHRo
ZSBtZW51IGJ5IHRoZSByYWRpdXMgb2YgdGhlIGNhcCBvbiB0aGUgcmlnaHQgc28gdGhhdAotICAg
IC8vIGl0IG9ubHkgcnVucyBhbG9uZyB0aGUgc3RyYWlnaHQgcGFydCBvZiB0aGUgYmV6ZWwgKHVu
bGVzcyBpdCBuZWVkcwotICAgIC8vIHRvIGJlIHdpZGVyKS4KLSAgICByZXR1cm4gaGVpZ2h0KCkg
LyAyOwotfQotCi1MYXlvdXRVbml0IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y2xpZW50
UGFkZGluZ0xlZnQoKSBjb25zdAotewotICAgIExheW91dFVuaXQgcGFkZGluZyA9IHBhZGRpbmdM
ZWZ0KCk7Ci0gICAgaWYgKFJlbmRlckJveCogYm94ID0gaW5uZXJCbG9ja0VsZW1lbnQoKSA/IGlu
bmVyQmxvY2tFbGVtZW50KCktPnJlbmRlckJveCgpIDogMCkKLSAgICAgICAgcGFkZGluZyArPSBi
b3gtPngoKTsKLSAgICByZXR1cm4gcGFkZGluZzsKLX0KLQotTGF5b3V0VW5pdCBSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmU6OmNsaWVudFBhZGRpbmdSaWdodCgpIGNvbnN0Ci17Ci0gICAgTGF5
b3V0VW5pdCBwYWRkaW5nID0gcGFkZGluZ1JpZ2h0KCk7Ci0gICAgaWYgKFJlbmRlckJveCogY29u
dGFpbmVyQm94ID0gY29udGFpbmVyRWxlbWVudCgpID8gY29udGFpbmVyRWxlbWVudCgpLT5yZW5k
ZXJCb3goKSA6IDApIHsKLSAgICAgICAgaWYgKFJlbmRlckJveCogaW5uZXJCbG9ja0JveCA9IGlu
bmVyQmxvY2tFbGVtZW50KCkgPyBpbm5lckJsb2NrRWxlbWVudCgpLT5yZW5kZXJCb3goKSA6IDAp
Ci0gICAgICAgICAgICBwYWRkaW5nICs9IGNvbnRhaW5lckJveC0+d2lkdGgoKSAtIChpbm5lckJs
b2NrQm94LT54KCkgKyBpbm5lckJsb2NrQm94LT53aWR0aCgpKTsKLSAgICB9Ci0gICAgcmV0dXJu
IHBhZGRpbmc7Ci19Ci0KLWludCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Omxpc3RTaXpl
KCkgY29uc3QKLXsKLSAgICAvLyBJZiB0aGVyZSBhcmUgbm8gcmVjZW50IHNlYXJjaGVzLCB0aGVu
IG91ciBtZW51IHdpbGwgaGF2ZSAxICJObyByZWNlbnQgc2VhcmNoZXMiIGl0ZW0uCi0gICAgaWYg
KCFtX3JlY2VudFNlYXJjaGVzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgLy8gT3Ro
ZXJ3aXNlLCBsZWF2ZSByb29tIGluIHRoZSBtZW51IGZvciBhIGhlYWRlciwgYSBzZXBhcmF0b3Is
IGFuZCB0aGUgIkNsZWFyIHJlY2VudCBzZWFyY2hlcyIgaXRlbS4KLSAgICByZXR1cm4gbV9yZWNl
bnRTZWFyY2hlcy5zaXplKCkgKyAzOwotfQotCi1pbnQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lOjpzZWxlY3RlZEluZGV4KCkgY29uc3QKLXsKLSAgICByZXR1cm4gLTE7Ci19Ci0KLXZvaWQg
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpwb3B1cERpZEhpZGUoKQotewotICAgIG1fc2Vh
cmNoUG9wdXBJc1Zpc2libGUgPSBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6Oml0ZW1Jc1NlcGFyYXRvcih1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0Ci17Ci0g
ICAgLy8gVGhlIHNlcGFyYXRvciB3aWxsIGJlIHRoZSBzZWNvbmQgdG8gbGFzdCBpdGVtIGluIG91
ciBsaXN0LgotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGxpc3RJbmRleCkgPT0gKGxpc3RT
aXplKCkgLSAyKTsKLX0KLQotYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Oml0ZW1J
c0xhYmVsKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGlzdEluZGV4
ID09IDA7Ci19Ci0KLWJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppdGVtSXNTZWxl
Y3RlZCh1bnNpZ25lZCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzZXRUZXh0RnJvbUl0ZW0odW5zaWduZWQgbGlzdElu
ZGV4KQotewotICAgIGlucHV0RWxlbWVudCgpLT5zZXRWYWx1ZShpdGVtVGV4dChsaXN0SW5kZXgp
KTsKLX0KLQotRm9udFNlbGVjdG9yKiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmZvbnRT
ZWxlY3RvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRvY3VtZW50KCktPnN0eWxlUmVzb2x2ZXIo
KS0+Zm9udFNlbGVjdG9yKCk7Ci19Ci0KLUhvc3RXaW5kb3cqIFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6aG9zdFdpbmRvdygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRvY3VtZW50KCktPnZp
ZXcoKS0+aG9zdFdpbmRvdygpOwotfQotCiB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6YXV0b3Njcm9sbCgpCiB7CiAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gaW5uZXJUZXh0RWxl
bWVudCgpLT5yZW5kZXJCb3goKS0+bGF5ZXIoKTsKQEAgLTc0MSwxNyArNTA1LDYgQEAgYm9vbCBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmxvZ2ljYWxTY3JvbGwoU2Nyb2xsTG9naWNhbERp
cmVjdGlvbiBkaXJlY3Rpb24KICAgICByZXR1cm4gUmVuZGVyQmxvY2s6OmxvZ2ljYWxTY3JvbGwo
ZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllciwgc3RvcE5vZGUpOwogfQogCi1QYXNz
UmVmUHRyPFNjcm9sbGJhcj4gUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjcmVhdGVTY3Jv
bGxiYXIoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhLCBTY3JvbGxiYXJPcmllbnRhdGlv
biBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUgY29udHJvbFNpemUpCi17Ci0gICAg
UmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0OwotICAgIGJvb2wgaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5
bGUgPSBzdHlsZSgpLT5oYXNQc2V1ZG9TdHlsZShTQ1JPTExCQVIpOwotICAgIGlmIChoYXNDdXN0
b21TY3JvbGxiYXJTdHlsZSkKLSAgICAgICAgd2lkZ2V0ID0gUmVuZGVyU2Nyb2xsYmFyOjpjcmVh
dGVDdXN0b21TY3JvbGxiYXIoc2Nyb2xsYWJsZUFyZWEsIG9yaWVudGF0aW9uLCB0aGlzLT5ub2Rl
KCkpOwotICAgIGVsc2UKLSAgICAgICAgd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVT
Y3JvbGxiYXIoc2Nyb2xsYWJsZUFyZWEsIG9yaWVudGF0aW9uLCBjb250cm9sU2l6ZSk7Ci0gICAg
cmV0dXJuIHdpZGdldC5yZWxlYXNlKCk7Ci19Ci0KIEhUTUxJbnB1dEVsZW1lbnQqIFJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZTo6aW5wdXRFbGVtZW50KCkgY29uc3QKIHsKICAgICByZXR1cm4g
bm9kZSgpLT50b0lucHV0RWxlbWVudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCmluZGV4IDZlMjFjODU2YzEwZmE5
ZmJhNDM2YzA2Zjc0OWMxNGUxZTJhODBiYTYuLjcxZmE5ODAyZjM3ZGNlYThhYzYxZTM3NzdhZmEy
YTE4MDhkNTFlOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgKQEAgLTIzLDE1ICsyMywxNCBAQAogI2lmbmRlZiBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmVfaAogI2RlZmluZSBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmVfaAogCi0jaW5jbHVkZSAiUG9wdXBNZW51Q2xpZW50LmgiCisjaW5jbHVkZSAiSFRN
TElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSFRNTElucHV0RWxlbWVudDsKLWNsYXNzIFNlYXJjaFBv
cHVwTWVudTsKIAotY2xhc3MgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lIDogcHVibGljIFJl
bmRlclRleHRDb250cm9sLCBwcml2YXRlIFBvcHVwTWVudUNsaWVudCB7CitjbGFzcyBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmUgOiBwdWJsaWMgUmVuZGVyVGV4dENvbnRyb2wgewogcHVibGlj
OgogICAgIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShOb2RlKik7CiAgICAgdmlydHVhbCB+
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKCk7CkBAIC00MCwxNCArMzksMTggQEAgcHVibGlj
OgogICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IGNyZWF0ZUlubmVyQmxvY2tTdHlsZShjb25z
dCBSZW5kZXJTdHlsZSogc3RhcnRTdHlsZSkgY29uc3Q7CiAgICAgdm9pZCB1cGRhdGVDYW5jZWxC
dXR0b25WaXNpYmlsaXR5KCkgY29uc3Q7CiAKLSAgICB2b2lkIGFkZFNlYXJjaFJlc3VsdCgpOwot
ICAgIHZvaWQgc3RvcFNlYXJjaEV2ZW50VGltZXIoKTsKKyAgICB2b2lkIGNhcHNMb2NrU3RhdGVN
YXlIYXZlQ2hhbmdlZCgpOwogCi0gICAgYm9vbCBwb3B1cElzVmlzaWJsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2VhcmNoUG9wdXBJc1Zpc2libGU7IH0KLSAgICB2b2lkIHNob3dQb3B1cCgpOwotICAg
IHZvaWQgaGlkZVBvcHVwKCk7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBMYXlvdXRVbml0IGNv
bXB1dGVIZWlnaHRMaW1pdCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBjZW50ZXJDb250YWlu
ZXJJZk5lZWRlZChSZW5kZXJCb3gqKSBjb25zdCB7IH0KIAotICAgIHZvaWQgY2Fwc0xvY2tTdGF0
ZU1heUhhdmVDaGFuZ2VkKCk7CisgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50KCkg
Y29uc3Q7CisKKyAgICBIVE1MRWxlbWVudCogY29udGFpbmVyRWxlbWVudCgpIGNvbnN0OworICAg
IEhUTUxFbGVtZW50KiBpbm5lckJsb2NrRWxlbWVudCgpIGNvbnN0OworCisgICAgY29uc3QgQXRv
bWljU3RyaW5nJiBhdXRvc2F2ZU5hbWUoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFs
IGJvb2wgaGFzQ29udHJvbENsaXAoKSBjb25zdDsKQEAgLTgzLDUyICs4NiwyNSBAQCBwcml2YXRl
OgogCiAgICAgRVZpc2liaWxpdHkgdmlzaWJpbGl0eUZvckNhbmNlbEJ1dHRvbigpIGNvbnN0Owog
ICAgIGJvb2wgdGV4dFNob3VsZEJlVHJ1bmNhdGVkKCkgY29uc3Q7Ci0gICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBhdXRvc2F2ZU5hbWUoKSBjb25zdDsKLQotICAgIC8vIFBvcHVwTWVudUNsaWVudCBt
ZXRob2RzCi0gICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZCh1bnNpZ25lZCBsaXN0SW5kZXgs
IGJvb2wgZmlyZUV2ZW50cyA9IHRydWUpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZWxl
Y3Rpb25DaGFuZ2VkKHVuc2lnbmVkLCBib29sKSBPVkVSUklERSB7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgc2VsZWN0aW9uQ2xlYXJlZCgpIE9WRVJSSURFIHsgfQotICAgIHZpcnR1YWwgU3RyaW5nIGl0
ZW1UZXh0KHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBT
dHJpbmcgaXRlbUxhYmVsKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QgT1ZFUlJJREU7Ci0gICAg
dmlydHVhbCBTdHJpbmcgaXRlbUljb24odW5zaWduZWQgbGlzdEluZGV4KSBjb25zdCBPVkVSUklE
RTsKLSAgICB2aXJ0dWFsIFN0cmluZyBpdGVtVG9vbFRpcCh1bnNpZ25lZCkgY29uc3QgT1ZFUlJJ
REUgeyByZXR1cm4gU3RyaW5nKCk7IH0KLSAgICB2aXJ0dWFsIFN0cmluZyBpdGVtQWNjZXNzaWJp
bGl0eVRleHQodW5zaWduZWQpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIFN0cmluZygpOyB9Ci0g
ICAgdmlydHVhbCBib29sIGl0ZW1Jc0VuYWJsZWQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdCBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIFBvcHVwTWVudVN0eWxlIGl0ZW1TdHlsZSh1bnNpZ25lZCBs
aXN0SW5kZXgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgUG9wdXBNZW51U3R5bGUgbWVu
dVN0eWxlKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBpbnQgY2xpZW50SW5zZXRMZWZ0
KCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBpbnQgY2xpZW50SW5zZXRSaWdodCgpIGNv
bnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBjbGllbnRQYWRkaW5nTGVmdCgp
IGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBjbGllbnRQYWRkaW5nUmln
aHQoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGludCBsaXN0U2l6ZSgpIGNvbnN0IE9W
RVJSSURFOwotICAgIHZpcnR1YWwgaW50IHNlbGVjdGVkSW5kZXgoKSBjb25zdCBPVkVSUklERTsK
LSAgICB2aXJ0dWFsIHZvaWQgcG9wdXBEaWRIaWRlKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBi
b29sIGl0ZW1Jc1NlcGFyYXRvcih1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0IE9WRVJSSURFOwot
ICAgIHZpcnR1YWwgYm9vbCBpdGVtSXNMYWJlbCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0IE9W
RVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCBpdGVtSXNTZWxlY3RlZCh1bnNpZ25lZCBsaXN0SW5k
ZXgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRQb3BPdmVyKCkgY29u
c3QgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgdmFsdWVTaG91
bGRDaGFuZ2VPbkhvdFRyYWNrKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0VGV4dEZyb21JdGVtKHVuc2lnbmVkIGxpc3RJbmRleCkgT1ZFUlJJ
REU7Ci0gICAgdmlydHVhbCBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcigpIGNvbnN0IE9WRVJS
SURFOwotICAgIHZpcnR1YWwgSG9zdFdpbmRvdyogaG9zdFdpbmRvdygpIGNvbnN0IE9WRVJSSURF
OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTY3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJhcihTY3Jv
bGxhYmxlQXJlYSosIFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSkg
T1ZFUlJJREU7CiAKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQoKSBjb25zdDsK
LQotICAgIEhUTUxFbGVtZW50KiBjb250YWluZXJFbGVtZW50KCkgY29uc3Q7Ci0gICAgSFRNTEVs
ZW1lbnQqIGlubmVyQmxvY2tFbGVtZW50KCkgY29uc3Q7CiAgICAgSFRNTEVsZW1lbnQqIGlubmVy
U3BpbkJ1dHRvbkVsZW1lbnQoKSBjb25zdDsKICAgICBIVE1MRWxlbWVudCogcmVzdWx0c0J1dHRv
bkVsZW1lbnQoKSBjb25zdDsKICAgICBIVE1MRWxlbWVudCogY2FuY2VsQnV0dG9uRWxlbWVudCgp
IGNvbnN0OwogCi0gICAgYm9vbCBtX3NlYXJjaFBvcHVwSXNWaXNpYmxlOwogICAgIGJvb2wgbV9z
aG91bGREcmF3Q2Fwc0xvY2tJbmRpY2F0b3I7CiAgICAgTGF5b3V0VW5pdCBtX2Rlc2lyZWRJbm5l
clRleHRIZWlnaHQ7Ci0gICAgUmVmUHRyPFNlYXJjaFBvcHVwTWVudT4gbV9zZWFyY2hQb3B1cDsK
LSAgICBWZWN0b3I8U3RyaW5nPiBtX3JlY2VudFNlYXJjaGVzOwogfTsKIAoraW5saW5lIEhUTUxF
bGVtZW50KiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNvbnRhaW5lckVsZW1lbnQoKSBj
b25zdAoreworICAgIHJldHVybiBpbnB1dEVsZW1lbnQoKS0+Y29udGFpbmVyRWxlbWVudCgpOwor
fQorCitpbmxpbmUgSFRNTEVsZW1lbnQqIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aW5u
ZXJCbG9ja0VsZW1lbnQoKSBjb25zdAoreworICAgIHJldHVybiBpbnB1dEVsZW1lbnQoKS0+aW5u
ZXJCbG9ja0VsZW1lbnQoKTsKK30KKwogaW5saW5lIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZSogdG9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUoUmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7
CiAgICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc1RleHRGaWVsZCgpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJpbmdBbGxJbk9uZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyaW5nQWxsSW5PbmUuY3BwCmluZGV4IGQxN2JkMzEz
YTQzMTkwYzliZGZlNWNlOGQzMmY4ZjcxODU0NDRhNGYuLjFmMGE0YTM4ZTcyZTIxYTdkYzNmMGFk
Y2QzY2FlMzYzYzhhNTFkOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJpbmdBbGxJbk9uZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
cmluZ0FsbEluT25lLmNwcApAQCAtOTEsNiArOTEsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNjcm9s
bGJhci5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU2Nyb2xsYmFyUGFydC5jcHAiCiAjaW5jbHVkZSAi
UmVuZGVyU2Nyb2xsYmFyVGhlbWUuY3BwIgorI2luY2x1ZGUgIlJlbmRlclNlYXJjaEZpZWxkLmNw
cCIKICNpbmNsdWRlICJSZW5kZXJTbGlkZXIuY3BwIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlLmNw
cCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNhcHRpb24uY3BwIgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147730</attachid>
            <date>2012-06-14 22:09:58 -0700</date>
            <delta_ts>2012-06-14 22:31:12 -0700</delta_ts>
            <desc>Patch 4</desc>
            <filename>bug-88980-20120615140957.patch</filename>
            <type>text/plain</type>
            <size>73691</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwMzk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmM4M2MyODcwMTAzODhh
NWE3M2I5YzdlN2E2NmE2YTQ1OTQyYmNjMi4uNWE0NmE0Mjg1OTZkYzUzODdkMzIyMDJiMDgwYWM5
YThkNDhlZjJhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2MCBAQAorMjAxMi0wNi0xNSAgWW9z
aGlmdW1pIElub3VlICA8eW9zaW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtGb3Jtc10gTW92
ZSBzZWFyY2ggZmllbGQgcmVsYXRlZCBjb2RlIHRvIFJlbmRlclNlYXJjaEZpZWxkIGZyb20gUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04ODk4MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbW92ZXMgc2VhcmNoIGZpZWxkIHJlbGF0ZWQgbWV0
aG9kcyBpbiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUKKyAgICAgICAgdG8gbmV3IGNsYXNz
IFJlbmRlclNlYXJjaEZpZWxkIGFuZCBjaGFuZ2VzIHJlbGF0ZWQgY2xhc3NlcyB0byB1c2UKKyAg
ICAgICAgUmVuZGVyU2VhcmNoRmllbGQuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBUaGlzIHBh
dGNoIGRvZXNuJ3QgY2hhbmdlIGJlaGF2aW9yLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6
IEFkZGVkIG5ldyBmaWxlIFJlbmRlclNlYXJjaEZpZWxkLmNwcAorICAgICAgICAqIEdOVW1ha2Vm
aWxlLmxpc3QuYW06IEFkZGVkIG5ldyBmaWxlIFJlbmRlclNlYXJjaEZpZWxkLmNwcCBhbmQgUmVu
ZGVyU2VhcmNoRmllbGQuaAorICAgICAgICAqIFRhcmdldC5wcmk6IGRpdHRvCisgICAgICAgICog
V2ViQ29yZS5neXBpOiBkaWl0bworICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qOiBkaXR0bworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajog
ZGl0dG8KKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTElucHV0RWxlbWVudDo6YWRkU2VhcmNoUmVzdWx0KTogQ2hhbmdlZCB0byBjYWxs
IElucHV0VHlwZTo6YWRkU2VhcmNoUmVzdWx0LgorICAgICAgICAqIGh0bWwvSW5wdXRUeXBlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OklucHV0VHlwZTo6YWRkU2VhcmNoUmVzdWx0KTogQWRkZWQu
CisgICAgICAgICogaHRtbC9TZWFyY2hJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2VhcmNoSW5wdXRUeXBlOjphZGRTZWFyY2hSZXN1bHQpOiBNb3ZlZCBmcm9tIEhUTUxJbnB1dEVs
ZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hJbnB1dFR5cGU6OmNyZWF0ZVJlbmRlcmVy
KTogQWRkZWQgdG8gY3JlYXRlIFJlbmRlclNlYXJjaEZpZWxkLgorICAgICAgICAqIGh0bWwvU2Vh
cmNoRmllbGRJbnB1dFR5cGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaEZpZWxkSW5wdXRU
eXBlKToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uRWxlbWVudDo6ZGVm
YXVsdEV2ZW50SGFuZGxlcik6IFVzZSBSZW5kZXJTZWFyY2hGaWVsZCBpbnN0ZWFkIG9mIFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZS4KKyAgICAgICAgKiBsb2FkZXIvRm9ybVN1Ym1pc3Npb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybVN1Ym1pc3Npb246OmNyZWF0ZSk6IEdvdCByaWQg
aXNTZWFyY2hGaWVsZCgpIGd1YXJkIGZvciBhZGRTZWFyY2hSZXN1bHQoKS4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U2VhcmNoRmllbGQ6OlJlbmRlclNlYXJjaEZpZWxkKTogUmVuYW1lZCB0byBSZW5kZXJTZWFyY2hG
aWVsZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjp+UmVuZGVyU2VhcmNo
RmllbGQpOiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjphZGRT
ZWFyY2hSZXN1bHQpOiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxk
OjpzaG93UG9wdXApOiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxk
OjpoaWRlUG9wdXApOiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxk
Ojp2YWx1ZUNoYW5nZWQpOiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZp
ZWxkOjppdGVtVGV4dCk6IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmll
bGQ6Oml0ZW1MYWJlbCk6IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmll
bGQ6Oml0ZW1JY29uKTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVs
ZDo6aXRlbUlzRW5hYmxlZCk6IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNo
RmllbGQ6Oml0ZW1TdHlsZSk6IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNo
RmllbGQ6Om1lbnVTdHlsZSk6IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNo
RmllbGQ6OmNsaWVudEluc2V0TGVmdCk6IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U2VhcmNoRmllbGQ6OmNsaWVudEluc2V0UmlnaHQpOiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNlYXJjaEZpZWxkOjpjbGllbnRQYWRkaW5nTGVmdCk6IGRpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OmNsaWVudFBhZGRpbmdSaWdodCk6IGRpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6Omxpc3RTaXplKTogZGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6c2VsZWN0ZWRJbmRleCk6IGRpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OnBvcHVwRGlkSGlkZSk6IGRp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6Oml0ZW1Jc1NlcGFyYXRv
cik6IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6Oml0ZW1Jc0xh
YmVsKTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6aXRlbUlz
U2VsZWN0ZWQpOiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjpz
ZXRUZXh0RnJvbUl0ZW0pOiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZp
ZWxkOjpmb250U2VsZWN0b3IpOiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJj
aEZpZWxkOjpob3N0V2luZG93KTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFy
Y2hGaWVsZDo6Y3JlYXRlU2Nyb2xsYmFyKTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTZWFyY2hGaWVsZDo6Y29tcHV0ZUhlaWdodExpbWl0KTogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6Y2VudGVyQ29udGFpbmVySWZOZWVkZWQpOiBBZGRlZC4K
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuaDoKKyAgICAgICAgKFdlYkNv
cmU6OnRvUmVuZGVyU2VhcmNoRmllbGQpOiBBZGRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKTogUmVtb3Zl
IHNlYXJjaCBmaWVsZCByZWxhdGVkIGNvZGUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmU6On5SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUpOiBkaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y29tcHV0ZUhl
aWdodExpbWl0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6OmxheW91dCk6IFVzZSBuZXcgbWV0aG9kcyBmb3IgcmVtb3ZpbmcgaXNTZWFyY2hG
aWVsZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6dXBk
YXRlRnJvbUVsZW1lbnQpOiBSZW1vdmVkIHNlYXJjaCBmaWVsZCByZWxhdGVkIGNvZGUuCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjZW50ZXJDb250YWluZXJJZk5l
ZWRlZCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lOjpjb250YWluZXJFbGVtZW50KTogRXhwb3NlZCBmb3IgUmVuZGVyU2VhcmNoRmllbGQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmlubmVyQmxvY2tF
bGVtZW50KTogRXhwb3NlZCBmb3IgUmVuZGVyU2VhcmNoRmllbGQuCisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlcmluZ0FsbEluT25lLmNwcDogQWRkZWQgUmVuZGVyU2VhcmNoRmllbGQuY3BwCisK
KzIwMTItMDYtMTQgIFlvc2hpZnVtaSBJbm91ZSAgPHlvc2luQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBbRm9ybXNdIENvcHkgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLntjcHAsaH0gdG8g
UmVuZGVyU2VhcmNoRmlsZWQue2NwcCxofQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODkxNTUKKworICAgICAgICBSZXZpZXdlZCBieSBLZW50IFRhbXVy
YS4KKworICAgICAgICBUaGlzIHBhdGNoIGNvcGllcyBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmUuY3BwIGFuZCAuaCBpbnRvIFJlbmRlclNlYXJjaEZpZWxkLmNwcAorICAgICAgICBhbmQgLmgg
d2l0aCBqdXN0ICJjcCIgY29kZS4gTmV3IGZpbGVzIGFyZW4ndCBjb21waWxlZCB1bnRpbCBidWcg
ODg5ODAuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBUaGlzIHBhdGNoIGRvZXNuJ3QgY2hhbmdl
IGJlaGF2aW9yLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbElubmVyQmxvY2s6OnBv
c2l0aW9uRm9yUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp+UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y29udGFp
bmVyRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmU6OmlubmVyQmxvY2tFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6aW5uZXJTcGluQnV0dG9uRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnJlc3VsdHNCdXR0b25FbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y2FuY2VsQnV0dG9u
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6
OnRleHRCYXNlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjphZGRTZWFyY2hSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lOjpzaG93UG9wdXApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lOjpoaWRlUG9wdXApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OmxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjYXBzTG9ja1N0YXRlTWF5SGF2ZUNo
YW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpo
YXNDb250cm9sQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmU6OmNvbnRyb2xDbGlwUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OmdldEF2Z0NoYXJXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnByZWZlcnJlZENvbnRlbnRXaWR0aCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNvbXB1dGVDb250cm9sSGVp
Z2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6dXBk
YXRlRnJvbUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjpjcmVhdGVJbm5lclRleHRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZUlubmVyQmxvY2tTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnVwZGF0ZUNhbmNlbEJ1dHRvblZp
c2liaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
Ojp2aXNpYmlsaXR5Rm9yQ2FuY2VsQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZTo6dGV4dFNob3VsZEJlVHJ1bmNhdGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6YXV0b3NhdmVOYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6dmFsdWVDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aXRlbVRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppdGVtTGFi
ZWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppdGVt
SWNvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Oml0
ZW1Jc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lOjppdGVtU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjptZW51U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjpjbGllbnRJbnNldExlZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lOjpjbGllbnRJbnNldFJpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y2xpZW50UGFkZGluZ0xlZnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjbGllbnRQYWRkaW5nUmln
aHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsaXN0
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNl
bGVjdGVkSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lOjpwb3B1cERpZEhpZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjppdGVtSXNTZXBhcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lOjppdGVtSXNMYWJlbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Oml0ZW1Jc1NlbGVjdGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2V0VGV4dEZyb21JdGVtKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Zm9udFNlbGVjdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aG9zdFdpbmRv
dyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmF1dG9z
Y3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpz
Y3JvbGxXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmU6OnNjcm9sbEhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6OnNjcm9sbExlZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjpzY3JvbGxUb3ApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lOjpzZXRTY3JvbGxMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZTo6c2V0U2Nyb2xsVG9wKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bG9naWNhbFNjcm9sbCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZVNjcm9sbGJhcik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmlucHV0RWxlbWVu
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmg6IEFkZGVkLgorICAg
ICAgICAoUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6cG9wdXBJc1Zpc2libGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppc1RleHRGaWVsZCk6CisgICAgICAg
IChXZWJDb3JlOjp0b1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZSk6CisgICAgICAgIChSZW5k
ZXJUZXh0Q29udHJvbElubmVyQmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENv
bnRyb2xJbm5lckJsb2NrOjpSZW5kZXJUZXh0Q29udHJvbElubmVyQmxvY2spOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xJbm5lckJsb2NrOjpoYXNMaW5lSWZFbXB0eSk6CisK
IDIwMTItMDYtMTQgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFZhbGlkYXRlIGZvcm0gc3RhdGUgc3RyaW5ncyBpbiBGb3JtQ29udHJvbGxlcjo6c2V0U3RhdGVG
b3JOZXdGb3JtRWxlbWVudHMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBlMjczYzBmZDU2MDE1
Yjk1OTYzYmZiNDgzODlhMDNiMmM3NWJkYmFkLi45YWQ4NWJiOTQyMjUwNGRjMzJjZDZkMWZmODhm
MzQ2ODNhZWQ0NmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTM4Nyw2ICsxMzg3LDcgQEAg
U0VUKFdlYkNvcmVfU09VUkNFUwogICAgIHJlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXIuY3BwCiAg
ICAgcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclBhcnQuY3BwCiAgICAgcmVuZGVyaW5nL1JlbmRl
clNjcm9sbGJhclRoZW1lLmNwcAorICAgIHJlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAK
ICAgICByZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcAogICAgIHJlbmRlcmluZy9SZW5kZXJUYWJs
ZS5jcHAKICAgICByZW5kZXJpbmcvUmVuZGVyVGFibGVDYXB0aW9uLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0KaW5kZXggNGE0NWM3ZjAzNDAwMTJhYjM2MWUwM2JjYmE5NDI2NzQyZWM1
NjA3MC4uMzdiN2U1YWMyOTk3ZWEzMTYxZTk0YWM4NjQ2MWE2Y2U2NzY1YjM0MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0zOTA2LDYgKzM5MDYsOCBAQCB3ZWJjb3JlX3NvdXJj
ZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJQYXJ0Lmgg
XAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJUaGVtZS5jcHAgXAog
CVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJUaGVtZS5oIFwKKwlTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwIFwKKwlTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNlbGVjdGlvbkluZm8uaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNsaWRlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlk
ZXIuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dl
YkNvcmUvVGFyZ2V0LnByaQppbmRleCAxNGY3ZWQxODBhNzEyYmU1MDQ4OGFjODVjNjFjNmNlNDI2
ZDdkMzg0Li42OWJhYTkyOWZkNjcyYzkyNjE2NDhmOGIyMjBmNTdiY2U2N2QzZmQxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1Rhcmdl
dC5wcmkKQEAgLTEzMDksNiArMTMwOSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHJlbmRlcmluZy9S
ZW5kZXJTY3JvbGxiYXIuY3BwIFwKICAgICByZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyUGFydC5j
cHAgXAogICAgIHJlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJUaGVtZS5jcHAgXAorICAgIHJlbmRl
cmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAgXAogICAgIHJlbmRlcmluZy9SZW5kZXJTbGlkZXIu
Y3BwIFwKICAgICByZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwIFwKICAgICByZW5kZXJpbmcvUmVu
ZGVyVGFibGVDYXB0aW9uLmNwcCBcCkBAIC0yNTE0LDYgKzI1MTUsNyBAQCBIRUFERVJTICs9IFwK
ICAgICByZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmggXAogICAgIHJlbmRlcmluZy9SZW5kZXJT
Y3JvbGxiYXJQYXJ0LmggXAogICAgIHJlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJUaGVtZS5oIFwK
KyAgICByZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuaCBcCiAgICAgcmVuZGVyaW5nL1JlbmRl
clNsaWRlci5oIFwKICAgICByZW5kZXJpbmcvUmVuZGVyVGFibGVDYXB0aW9uLmggXAogICAgIHJl
bmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggOWNiNmM3ZDQz
NmQzYWQ0NzJmNGE2Njk5OTQ4ZTJiNDAyMDM3ZTUzMy4uNWJiNmRkYTU0ZGJmOTZiNDdkYzFjYmEx
Mzk1YTEyM2EzZjY2MGEzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNDkwMiw2ICs0OTAyLDggQEAK
ICAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyUGFydC5oJywKICAgICAgICAg
ICAgICdyZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyVGhlbWUuY3BwJywKICAgICAgICAgICAgICdy
ZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyVGhlbWUuaCcsCisgICAgICAgICAgICAncmVuZGVyaW5n
L1JlbmRlclNlYXJjaEZpZWxkLmNwcCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNl
YXJjaEZpZWxkLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTZWxlY3Rpb25JbmZv
LmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwJywKICAgICAgICAg
ICAgICdyZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCAxN2FlMGRmNTE2NjY2MWVhYzNhMWI3MGFjMmIz
ZjdmODQ2MDIyN2U1Li5kMDZkZGFhYTE0NjJkODljYzUxZjlmM2VkNmQ4YmVlNDg5Y2VhZGVjIDEw
MDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtNDE1
MDMsNiArNDE1MDMsNjIgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRlclNlYXJjaEZpZWxkLmNwcCIKKwkJCQk+CisJCQkJ
PEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCQlFeGNsdWRl
ZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENv
bXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxl
Q29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZy
b21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBp
bGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29u
ZmlndXJhdGlvbgorCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIiCisJCQkJCUV4
Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJW
Q0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJ
PEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZMaXRlfFdpbjMy
IgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJ
CQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0
aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJEZWJ1Z19BbGx8V2luMzIi
CisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJ
CQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRp
b24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IlByb2R1Y3Rpb258V2luMzIi
CisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJ
CQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRp
b24+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5n
XFJlbmRlclNlYXJjaEZpZWxkLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xSZW5kZXJTZWxlY3Rpb25JbmZvLmgiCiAJCQkJPgog
CQkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IGVjMzY2NmQ1YTVjNWM3ODgyMzEyNzNmN2E5NDlkZTkwNWY0OWZjYTIu
LmRmOGQ1YTg2MjViODc3MmRhMjhmNmNkZTBjMjgyZGE4ZjE0MmZkZmMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTExODksNiAr
MTE4OSw4IEBACiAJCTQ1MDk5QzQxMTM3MEE3ODAwMDU4RDUxMyAvKiBJY29uVVJMLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1MDk5QzQwMTM3MEE3
ODAwMDU4RDUxMyAvKiBJY29uVVJMLmNwcCAqLzsgfTsKIAkJNDUwQ0VCRjAxNTA3M0JCRTAwMkJC
MTQ5IC8qIExhYmVsYWJsZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDUwQ0VCRUUxNTA3M0JCRTAwMkJCMTQ5IC8qIExhYmVsYWJsZUVs
ZW1lbnQuY3BwICovOyB9OwogCQk0NTBDRUJGMTE1MDczQkJFMDAyQkIxNDkgLyogTGFiZWxhYmxl
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDUwQ0VCRUYxNTA3M0JCRTAwMkJCMTQ5IC8qIExhYmVsYWJsZUVsZW1lbnQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0NThGRTQwOTE1ODlERjBC
MDA1NjA5RTYgLyogUmVuZGVyU2VhcmNoRmllbGQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDU4RkU0MDcxNTg5REYwQjAwNTYwOUU2IC8qIFJlbmRl
clNlYXJjaEZpZWxkLmNwcCAqLzsgfTsKKwkJNDU4RkU0MEExNTg5REYwQjAwNTYwOUU2IC8qIFJl
bmRlclNlYXJjaEZpZWxkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0NThGRTQwODE1ODlERjBCMDA1NjA5RTYgLyogUmVuZGVyU2VhcmNoRmllbGQuaCAq
LzsgfTsKIAkJNDVCQUMyQjAxMzYwQkJBQjAwNURBMjU4IC8qIEljb25VUkwuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1QkFDMkFGMTM2MEJCQUIwMDVE
QTI1OCAvKiBJY29uVVJMLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNDVGRUE1Q0YxNTZEREU4QzAwNjU0MTAxIC8qIERlY2ltYWwuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDVGRUE1Q0QxNTZEREU4
QzAwNjU0MTAxIC8qIERlY2ltYWwuY3BwICovOyB9OwogCQk0NUZFQTVEMDE1NkRERThDMDA2NTQx
MDEgLyogRGVjaW1hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDVGRUE1Q0UxNTZEREU4QzAwNjU0MTAxIC8qIERlY2ltYWwuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtODIxOCw2ICs4MjIwLDggQEAK
IAkJNDUwOTlDNDAxMzcwQTc4MDAwNThENTEzIC8qIEljb25VUkwuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSWNvblVSTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTQ1MENFQkVFMTUwNzNCQkUwMDJCQjE0OSAvKiBMYWJlbGFibGVFbGVtZW50LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExhYmVsYWJsZUVsZW1lbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NTBDRUJFRjE1MDczQkJFMDAyQkIx
NDkgLyogTGFiZWxhYmxlRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBMYWJlbGFibGVFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ1OEZF
NDA3MTU4OURGMEIwMDU2MDlFNiAvKiBSZW5kZXJTZWFyY2hGaWVsZC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTZWFyY2hGaWVsZC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ1OEZFNDA4MTU4OURGMEIwMDU2MDlFNiAvKiBSZW5kZXJT
ZWFyY2hGaWVsZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTZWFy
Y2hGaWVsZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NUJBQzJBRjEzNjBCQkFC
MDA1REEyNTggLyogSWNvblVSTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
Y29uVVJMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ1RkVBNUNEMTU2RERFOEMw
MDY1NDEwMSAvKiBEZWNpbWFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IERlY2ltYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NUZFQTVDRTE1
NkRERThDMDA2NTQxMDEgLyogRGVjaW1hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEZWNpbWFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTExNiw2ICsy
MTEyMCw4IEBACiAJCQkJQkMzQkU5OTIwRTlDMUM3QzAwODM1NTg4IC8qIFJlbmRlclNjcm9sbGJh
clBhcnQuaCAqLywKIAkJCQlCQzNCRTlBNDBFOUMyMzk2MDA4MzU1ODggLyogUmVuZGVyU2Nyb2xs
YmFyVGhlbWUuY3BwICovLAogCQkJCUJDM0JFOTk4MEU5QzFFNUQwMDgzNTU4OCAvKiBSZW5kZXJT
Y3JvbGxiYXJUaGVtZS5oICovLAorCQkJCTQ1OEZFNDA3MTU4OURGMEIwMDU2MDlFNiAvKiBSZW5k
ZXJTZWFyY2hGaWVsZC5jcHAgKi8sCisJCQkJNDU4RkU0MDgxNTg5REYwQjAwNTYwOUU2IC8qIFJl
bmRlclNlYXJjaEZpZWxkLmggKi8sCiAJCQkJMEYxMUE1NEUwRjM5MjMzMTAwQzM3ODg0IC8qIFJl
bmRlclNlbGVjdGlvbkluZm8uaCAqLywKIAkJCQlBQjI0N0E2QTBBRkQ2MzgzMDAzRkE1RkQgLyog
UmVuZGVyU2xpZGVyLmNwcCAqLywKIAkJCQlBQjI0N0E2QjBBRkQ2MzgzMDAzRkE1RkQgLyogUmVu
ZGVyU2xpZGVyLmggKi8sCkBAIC0yNDI3Miw2ICsyNDI3OCw3IEBACiAJCQkJQkMzQkU5OTQwRTlD
MUM3QzAwODM1NTg4IC8qIFJlbmRlclNjcm9sbGJhci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMz
QkU5OTUwRTlDMUM3QzAwODM1NTg4IC8qIFJlbmRlclNjcm9sbGJhclBhcnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDM0JFOTk5MEU5QzFFNUQwMDgzNTU4OCAvKiBSZW5kZXJTY3JvbGxiYXJUaGVt
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDU4RkU0MEExNTg5REYwQjAwNTYwOUU2IC8qIFJlbmRl
clNlYXJjaEZpZWxkLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjExQTU0RjBGMzkyMzMxMDBDMzc4
ODQgLyogUmVuZGVyU2VsZWN0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUIyNDdBNkQw
QUZENjM4MzAwM0ZBNUZEIC8qIFJlbmRlclNsaWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM4
QzhGQUUwRERDRDMxQjAwQjU5MkY0IC8qIFJlbmRlclN0eWxlLmggaW4gSGVhZGVycyAqLywKQEAg
LTI3NDY3LDYgKzI3NDc0LDcgQEAKIAkJCQlCQzNCRTk5MzBFOUMxQzdDMDA4MzU1ODggLyogUmVu
ZGVyU2Nyb2xsYmFyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDM0JFOUFCMEU5QzI0MjAwMDgz
NTU4OCAvKiBSZW5kZXJTY3JvbGxiYXJQYXJ0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDM0JF
OUE1MEU5QzIzOTYwMDgzNTU4OCAvKiBSZW5kZXJTY3JvbGxiYXJUaGVtZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk0NThGRTQwOTE1ODlERjBCMDA1NjA5RTYgLyogUmVuZGVyU2VhcmNoRmllbGQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQUIyNDdBNkMwQUZENjM4MzAwM0ZBNUZEIC8qIFJlbmRl
clNsaWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzhDOEZBRDBERENEMzFCMDBCNTkyRjQg
LyogUmVuZGVyU3R5bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0RTU3MTcxMzEzMjc2MjAw
Q0Y4NUFGIC8qIFJlbmRlclNWR0FsbEluT25lLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKaW5kZXggZTAwMTUwM2QxNzI4M2UwN2ExN2Q2
NTZjNjYwMWExMjJmM2ZlMzI4NC4uOGMxOTE4ZWQ1MzY0MWZmNzIwNzQxMWI1OTQ1ZmMyNGUyOTBk
NzU0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCkBAIC0xMzE4
LDkgKzEzMTgsNyBAQCBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmlzUmVxdWlyZWRGb3JtQ29udHJv
bCgpIGNvbnN0CiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6YWRkU2VhcmNoUmVzdWx0KCkKIHsK
LSAgICBBU1NFUlQoaXNTZWFyY2hGaWVsZCgpKTsKLSAgICBpZiAocmVuZGVyZXIoKSkKLSAgICAg
ICAgdG9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUocmVuZGVyZXIoKSktPmFkZFNlYXJjaFJl
c3VsdCgpOworICAgIG1faW5wdXRUeXBlLT5hZGRTZWFyY2hSZXN1bHQoKTsKIH0KIAogdm9pZCBI
VE1MSW5wdXRFbGVtZW50OjpvblNlYXJjaCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0lucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAKaW5k
ZXggZGZjNTBlMDBiZDhhYjBkMjdhZjNjNTlmYjQ0YTUxZjEyMDY4ODc5Ny4uZjU1MGJlZThkNjcx
NjhkOTM3YjlmMmZmMDgwODkwYTAyYWJkOWMwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9JbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNw
cApAQCAtNTIzLDYgKzUyMywxMCBAQCB2b2lkIElucHV0VHlwZTo6YWNjZXNzS2V5QWN0aW9uKGJv
b2wpCiAgICAgZWxlbWVudCgpLT5mb2N1cyhmYWxzZSk7CiB9CiAKK3ZvaWQgSW5wdXRUeXBlOjph
ZGRTZWFyY2hSZXN1bHQoKQoreworfQorCiB2b2lkIElucHV0VHlwZTo6YXR0YWNoKCkKIHsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0lucHV0VHlwZS5oCmluZGV4IDM4NjA1MWZhY2I3MTBhNmI1NmJkYjdhOGYwYTU5
OTdjNjM1MWIyMDAuLjRlYzFiMzJkYzk2NjVjOTU3NTMwMzNiZTJlYTAwNDY0ZjAwZWQwNTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9JbnB1dFR5cGUuaApAQCAtMjIyLDYgKzIyMiw3IEBAIHB1YmxpYzoKIAogICAg
IHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKCk7CiAgICAgdmlydHVhbCBSZW5kZXJPYmpl
Y3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgYWRkU2VhcmNoUmVzdWx0KCk7CiAgICAgdmlydHVhbCB2b2lkIGF0dGFj
aCgpOwogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKTsKICAgICB2aXJ0dWFsIHZvaWQgbWluT3JN
YXhBdHRyaWJ1dGVDaGFuZ2VkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1Nl
YXJjaElucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1NlYXJjaElucHV0VHlwZS5j
cHAKaW5kZXggNmY1MDBkYWYzZjdiNWYxZTA1YmQ0YTJkMGIyZjllZTQ3YzNiMDRhNC4uYjc3ZjA5
OGJmNjY4N2ZmYmJiZjYzMjEwZGUwODQ3ODY5MmY2ZDg3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9TZWFyY2hJbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
U2VhcmNoSW5wdXRUeXBlLmNwcApAQCAtMzMsNyArMzMsNyBAQAogCiAjaW5jbHVkZSAiSFRNTElu
cHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKLSNpbmNsdWRlICJSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCIKKyNpbmNsdWRlICJSZW5kZXJTZWFyY2hGaWVsZC5o
IgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKICNpbmNsdWRlICJUZXh0Q29udHJvbElubmVyRWxl
bWVudHMuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgpAQCAtNTEsNiArNTEsMTcgQEAg
UGFzc093blB0cjxJbnB1dFR5cGU+IFNlYXJjaElucHV0VHlwZTo6Y3JlYXRlKEhUTUxJbnB1dEVs
ZW1lbnQqIGVsZW1lbnQpCiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTZWFyY2hJbnB1dFR5cGUo
ZWxlbWVudCkpOwogfQogCit2b2lkIFNlYXJjaElucHV0VHlwZTo6YWRkU2VhcmNoUmVzdWx0KCkK
K3sKKyAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGVsZW1lbnQoKS0+cmVuZGVyZXIo
KSkKKyAgICAgICAgdG9SZW5kZXJTZWFyY2hGaWVsZChyZW5kZXJlciktPmFkZFNlYXJjaFJlc3Vs
dCgpOworfQorCitSZW5kZXJPYmplY3QqIFNlYXJjaElucHV0VHlwZTo6Y3JlYXRlUmVuZGVyZXIo
UmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSopIGNvbnN0Cit7CisgICAgcmV0dXJuIG5l
dyAoYXJlbmEpIFJlbmRlclNlYXJjaEZpZWxkKGVsZW1lbnQoKSk7Cit9CisKIGNvbnN0IEF0b21p
Y1N0cmluZyYgU2VhcmNoSW5wdXRUeXBlOjpmb3JtQ29udHJvbFR5cGUoKSBjb25zdAogewogICAg
IHJldHVybiBJbnB1dFR5cGVOYW1lczo6c2VhcmNoKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL1NlYXJjaElucHV0VHlwZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9TZWFyY2hJ
bnB1dFR5cGUuaAppbmRleCBhYjE5MTAzYWZkZmFlOGU1NTY2N2JmNGNlNDEzMmZiODgwNWI4MjI1
Li5hYzcyMjYzOWE5YmUxNGU5ZTVjM2YwNzNkZjZmY2NiNTg2ZTVhNWQ1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL1NlYXJjaElucHV0VHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvU2VhcmNoSW5wdXRUeXBlLmgKQEAgLTQ4LDYgKzQ4LDggQEAgcHVibGljOgogCiBwcml2
YXRlOgogICAgIFNlYXJjaElucHV0VHlwZShIVE1MSW5wdXRFbGVtZW50Kik7CisgICAgdmlydHVh
bCB2b2lkIGFkZFNlYXJjaFJlc3VsdCgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgUmVuZGVyT2Jq
ZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKikgY29uc3QgT1ZF
UlJJREU7CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGZvcm1Db250cm9sVHlwZSgp
IGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRSZXNwZWN0U3BlZWNoQXR0
cmlidXRlKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIGlzU2VhcmNoRmllbGQoKSBjb25z
dCBPVkVSUklERTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRD
b250cm9sSW5uZXJFbGVtZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0
Q29udHJvbElubmVyRWxlbWVudHMuY3BwCmluZGV4IDEwMGRhZWI2NDdiOWQ3N2FhNGMxYjQzMTJi
YzljNWU1ZmIxODdhZDYuLjVkMjY4NDFjMjQzNTcwNTVmN2I1Yjk4YjcxODE4YjMwNTdjMWFkMTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJF
bGVtZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJ
bm5lckVsZW1lbnRzLmNwcApAQCAtMzcsNyArMzcsNyBAQAogI2luY2x1ZGUgIkhUTUxUZXh0QXJl
YUVsZW1lbnQuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgot
I2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oIgorI2luY2x1ZGUgIlJlbmRl
clNlYXJjaEZpZWxkLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNjcmlw
dENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgpAQCAtMTUxLDcgKzE1
MSw3IEBAIHZvaWQgU2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50
SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLm1vdXNlZG93bkV2ZW50ICYmIGV2ZW50LT5pc01vdXNlRXZlbnQoKSAmJiBzdGF0aWNfY2Fz
dDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CiAgICAgICAg
IGlucHV0LT5mb2N1cygpOwogICAgICAgICBpbnB1dC0+c2VsZWN0KCk7Ci0gICAgICAgIFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZSogcmVuZGVyZXIgPSB0b1JlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZShpbnB1dC0+cmVuZGVyZXIoKSk7CisgICAgICAgIFJlbmRlclNlYXJjaEZpZWxkKiBy
ZW5kZXJlciA9IHRvUmVuZGVyU2VhcmNoRmllbGQoaW5wdXQtPnJlbmRlcmVyKCkpOwogICAgICAg
ICBpZiAocmVuZGVyZXItPnBvcHVwSXNWaXNpYmxlKCkpCiAgICAgICAgICAgICByZW5kZXJlci0+
aGlkZVBvcHVwKCk7CiAgICAgICAgIGVsc2UgaWYgKGlucHV0LT5tYXhSZXN1bHRzKCkgPiAwKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zvcm1TdWJtaXNzaW9uLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHAKaW5kZXggZGEwMzk4N2VlNWU5
NDU0MTZmMTUxODQ0MjZkZTIxNmVkZGFjNTU5Ni4uMjQ3Y2U0MDY4YWQ1Y2ZhYjdmNjlkMjE1NTcw
MzEyOTAyNDMzNzdkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zvcm1TdWJt
aXNzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRm9ybVN1Ym1pc3Npb24uY3Bw
CkBAIC0xOTAsOCArMTkwLDcgQEAgUGFzc1JlZlB0cjxGb3JtU3VibWlzc2lvbj4gRm9ybVN1Ym1p
c3Npb246OmNyZWF0ZShIVE1MRm9ybUVsZW1lbnQqIGZvcm0sIGNvbnN0IEEKICAgICAgICAgICAg
IEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+
KGNvbnRyb2wpOwogICAgICAgICAgICAgaWYgKGlucHV0LT5pc1RleHRGaWVsZCgpKSB7CiAgICAg
ICAgICAgICAgICAgZm9ybVZhbHVlcy5hcHBlbmQocGFpcjxTdHJpbmcsIFN0cmluZz4oaW5wdXQt
Pm5hbWUoKS5zdHJpbmcoKSwgaW5wdXQtPnZhbHVlKCkpKTsKLSAgICAgICAgICAgICAgICBpZiAo
aW5wdXQtPmlzU2VhcmNoRmllbGQoKSkKLSAgICAgICAgICAgICAgICAgICAgaW5wdXQtPmFkZFNl
YXJjaFJlc3VsdCgpOworICAgICAgICAgICAgICAgIGlucHV0LT5hZGRTZWFyY2hSZXN1bHQoKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChpbnB1dC0+aXNQYXNzd29yZEZpZWxkKCkg
JiYgIWlucHV0LT52YWx1ZSgpLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBjb250YWluc1Bh
c3N3b3JkRGF0YSA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU2VhcmNoRmllbGQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNl
YXJjaEZpZWxkLmNwcAppbmRleCA4NDhmYzIxMTk3YzJhN2QyNGYyNjQ4ZGY3MDIwNTI5ZjNjODgw
ZDNiLi40NjYwZWFjNzY3NDkxZDU2NzY3MTFmNjkzZTIzODgwZDdiOTgzNDA4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAKQEAgLTIyLDcgKzIy
LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lLmgiCisjaW5jbHVkZSAiUmVuZGVyU2VhcmNoRmllbGQuaCIKIAogI2lu
Y2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIK
QEAgLTUxLDM1ICs1MSwxOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFj
ZSBIVE1MTmFtZXM7CiAKLVZpc2libGVQb3NpdGlvbiBSZW5kZXJUZXh0Q29udHJvbElubmVyQmxv
Y2s6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KQotewotICAgIExh
eW91dFBvaW50IGNvbnRlbnRzUG9pbnQocG9pbnQpOwotCi0gICAgLy8gTXVsdGlsaW5lIHRleHQg
Y29udHJvbHMgaGF2ZSB0aGUgc2Nyb2xsIG9uIHNoYWRvd0FuY2VzdG9yTm9kZSwgc28gd2UgbmVl
ZCB0byB0YWtlIHRoYXQKLSAgICAvLyBpbnRvIGFjY291bnQgaGVyZS4KLSAgICBpZiAobV9tdWx0
aUxpbmUpIHsKLSAgICAgICAgUmVuZGVyVGV4dENvbnRyb2wqIHJlbmRlcmVyID0gdG9SZW5kZXJU
ZXh0Q29udHJvbChub2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpLT5yZW5kZXJlcigpKTsKLSAg
ICAgICAgaWYgKHJlbmRlcmVyLT5oYXNPdmVyZmxvd0NsaXAoKSkKLSAgICAgICAgICAgIGNvbnRl
bnRzUG9pbnQgKz0gcmVuZGVyZXItPnNjcm9sbGVkQ29udGVudE9mZnNldCgpOwotICAgIH0KLQot
ICAgIHJldHVybiBSZW5kZXJCbG9jazo6cG9zaXRpb25Gb3JQb2ludChjb250ZW50c1BvaW50KTsK
LX0KLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1SZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShOb2RlKiBub2RlKQotICAg
IDogUmVuZGVyVGV4dENvbnRyb2wobm9kZSkKK1JlbmRlclNlYXJjaEZpZWxkOjpSZW5kZXJTZWFy
Y2hGaWVsZChOb2RlKiBub2RlKQorICAgIDogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKG5v
ZGUpCiAgICAgLCBtX3NlYXJjaFBvcHVwSXNWaXNpYmxlKGZhbHNlKQotICAgICwgbV9zaG91bGRE
cmF3Q2Fwc0xvY2tJbmRpY2F0b3IoZmFsc2UpCi0gICAgLCBtX2Rlc2lyZWRJbm5lclRleHRIZWln
aHQoLTEpCiAgICAgLCBtX3NlYXJjaFBvcHVwKDApCiB7CiAgICAgQVNTRVJUKG5vZGUtPmlzSFRN
TEVsZW1lbnQoKSk7CiAgICAgQVNTRVJUKG5vZGUtPnRvSW5wdXRFbGVtZW50KCkpOwogfQogCi1S
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6On5SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUo
KQorUmVuZGVyU2VhcmNoRmllbGQ6On5SZW5kZXJTZWFyY2hGaWVsZCgpCiB7CiAgICAgaWYgKG1f
c2VhcmNoUG9wdXApIHsKICAgICAgICAgbV9zZWFyY2hQb3B1cC0+cG9wdXBNZW51KCktPmRpc2Nv
bm5lY3RDbGllbnQoKTsKQEAgLTg3LDM4ICs3MCw3IEBAIFJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZTo6flJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZSgpCiAgICAgfQogfQogCi1pbmxpbmUg
SFRNTEVsZW1lbnQqIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y29udGFpbmVyRWxlbWVu
dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlucHV0RWxlbWVudCgpLT5jb250YWluZXJFbGVtZW50
KCk7Ci19Ci0KLWlubGluZSBIVE1MRWxlbWVudCogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
Ojppbm5lckJsb2NrRWxlbWVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlucHV0RWxlbWVudCgp
LT5pbm5lckJsb2NrRWxlbWVudCgpOwotfQotCi1pbmxpbmUgSFRNTEVsZW1lbnQqIFJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZTo6aW5uZXJTcGluQnV0dG9uRWxlbWVudCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGlucHV0RWxlbWVudCgpLT5pbm5lclNwaW5CdXR0b25FbGVtZW50KCk7Ci19Ci0K
LWlubGluZSBIVE1MRWxlbWVudCogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpyZXN1bHRz
QnV0dG9uRWxlbWVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlucHV0RWxlbWVudCgpLT5yZXN1
bHRzQnV0dG9uRWxlbWVudCgpOwotfQotCi1pbmxpbmUgSFRNTEVsZW1lbnQqIFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6Y2FuY2VsQnV0dG9uRWxlbWVudCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGlucHV0RWxlbWVudCgpLT5jYW5jZWxCdXR0b25FbGVtZW50KCk7Ci19Ci0KLVJlbmRlclN0
eWxlKiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnRleHRCYXNlU3R5bGUoKSBjb25zdAot
ewotICAgIEhUTUxFbGVtZW50KiBpbm5lckJsb2NrID0gaW5uZXJCbG9ja0VsZW1lbnQoKTsKLSAg
ICByZXR1cm4gaW5uZXJCbG9jayA/IGlubmVyQmxvY2stPnJlbmRlcmVyKCktPnN0eWxlKCkgOiBz
dHlsZSgpOwotfQotCi12b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6YWRkU2VhcmNo
UmVzdWx0KCkKK3ZvaWQgUmVuZGVyU2VhcmNoRmllbGQ6OmFkZFNlYXJjaFJlc3VsdCgpCiB7CiAg
ICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBpbnB1dEVsZW1lbnQoKTsKICAgICBpZiAoaW5w
dXQtPm1heFJlc3VsdHMoKSA8PSAwKQpAQCAtMTQ5LDcgKzEwMSw3IEBAIHZvaWQgUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lOjphZGRTZWFyY2hSZXN1bHQoKQogICAgIG1fc2VhcmNoUG9wdXAt
PnNhdmVSZWNlbnRTZWFyY2hlcyhuYW1lLCBtX3JlY2VudFNlYXJjaGVzKTsKIH0KIAotdm9pZCBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNob3dQb3B1cCgpCit2b2lkIFJlbmRlclNlYXJj
aEZpZWxkOjpzaG93UG9wdXAoKQogewogICAgIGlmIChtX3NlYXJjaFBvcHVwSXNWaXNpYmxlKQog
ICAgICAgICByZXR1cm47CkBAIC0xNzgsMzU4ICsxMzAsMTQgQEAgdm9pZCBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OnNob3dQb3B1cCgpCiAgICAgbV9zZWFyY2hQb3B1cC0+cG9wdXBNZW51
KCktPnNob3cocGl4ZWxTbmFwcGVkSW50UmVjdChhYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpKSwg
ZG9jdW1lbnQoKS0+dmlldygpLCAtMSk7CiB9CiAKLXZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjpoaWRlUG9wdXAoKQordm9pZCBSZW5kZXJTZWFyY2hGaWVsZDo6aGlkZVBvcHVwKCkK
IHsKICAgICBpZiAobV9zZWFyY2hQb3B1cCkKICAgICAgICAgbV9zZWFyY2hQb3B1cC0+cG9wdXBN
ZW51KCktPmhpZGUoKTsKIH0KIAotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnBh
aW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQp
Ci17Ci0gICAgUmVuZGVyVGV4dENvbnRyb2w6OnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQp
OwotCi0gICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlQmxvY2tCYWNrZ3JvdW5k
ICYmIG1fc2hvdWxkRHJhd0NhcHNMb2NrSW5kaWNhdG9yKSB7Ci0gICAgICAgIExheW91dFJlY3Qg
Y29udGVudHNSZWN0ID0gY29udGVudEJveFJlY3QoKTsKLQotICAgICAgICAvLyBDZW50ZXIgdmVy
dGljYWxseSBsaWtlIHRoZSB0ZXh0LgotICAgICAgICBjb250ZW50c1JlY3Quc2V0WSgoaGVpZ2h0
KCkgLSBjb250ZW50c1JlY3QuaGVpZ2h0KCkpIC8gMik7Ci0KLSAgICAgICAgLy8gQ29udmVydCB0
aGUgcmVjdCBpbnRvIHRoZSBjb29yZHMgdXNlZCBmb3IgcGFpbnRpbmcgdGhlIGNvbnRlbnQKLSAg
ICAgICAgY29udGVudHNSZWN0Lm1vdmVCeShwYWludE9mZnNldCArIGxvY2F0aW9uKCkpOwotICAg
ICAgICB0aGVtZSgpLT5wYWludENhcHNMb2NrSW5kaWNhdG9yKHRoaXMsIHBhaW50SW5mbywgcGl4
ZWxTbmFwcGVkSW50UmVjdChjb250ZW50c1JlY3QpKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsYXlvdXQoKQotewotICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgcmVtb3ZlIHRoZSBoZWlnaHQtcmVsYXRlZCBoYWNrcyBpbiBsYXlvdXQoKSBhbmQKLSAgICAv
LyBzdHlsZURpZENoYW5nZSgpLiBXZSBuZWVkIHRoZW0gYmVjYXVzZQotICAgIC8vIC0gQ2VudGVy
IHRoZSBpbm5lciBlbGVtZW50cyB2ZXJ0aWNhbGx5IGlmIHRoZSBpbnB1dCBoZWlnaHQgaXMgdGFs
bGVyIHRoYW4KLSAgICAvLyAgIHRoZSBpbnRyaW5zaWMgaGVpZ2h0IG9mIHRoZSBpbm5lciBlbGVt
ZW50cy4KLSAgICAvLyAtIFNocmluayB0aGUgaW5uZXIgZWxtZW50IGhlaWdodHMgaWYgdGhlIGlu
cHV0IGhlaWdodCBpcyBzYW1sbGVyIHRoYW4gdGhlCi0gICAgLy8gICBpbnRyaW5zaWMgaGVpZ2h0
cyBvZiB0aGUgaW5uZXIgZWxlbWVudHMuCi0KLSAgICAvLyBXZSBkb24ndCBob25vciBwYWRkaW5n
cyBhbmQgYm9yZGVycyBmb3IgdGV4dGZpZWxkcyB3aXRob3V0IGRlY29yYXRpb25zCi0gICAgLy8g
YW5kIHR5cGU9c2VhcmNoIGlmIHRoZSB0ZXh0IGhlaWdodCBpcyB0YWxsZXIgdGhhbiB0aGUgY29u
dGVudEhlaWdodCgpCi0gICAgLy8gYmVjYXVzZSBvZiBjb21wYWJpbGl0eS4KLQotICAgIFJlbmRl
ckJsb2NrOjpsYXlvdXRCbG9jayhmYWxzZSk7Ci0KLSAgICBSZW5kZXJCb3gqIGlubmVyVGV4dFJl
bmRlcmVyID0gaW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJCb3goKTsKLSAgICBBU1NFUlQoaW5u
ZXJUZXh0UmVuZGVyZXIpOwotICAgIFJlbmRlckJveCogaW5uZXJCbG9ja1JlbmRlcmVyID0gaW5u
ZXJCbG9ja0VsZW1lbnQoKSA/IGlubmVyQmxvY2tFbGVtZW50KCktPnJlbmRlckJveCgpIDogMDsK
LSAgICBIVE1MRWxlbWVudCogY29udGFpbmVyID0gY29udGFpbmVyRWxlbWVudCgpOwotICAgIFJl
bmRlckJveCogY29udGFpbmVyUmVuZGVyZXIgPSBjb250YWluZXIgPyBjb250YWluZXItPnJlbmRl
ckJveCgpIDogMDsKLQotICAgIC8vIFNldCB0aGUgdGV4dCBibG9jayBoZWlnaHQKLSAgICBMYXlv
dXRVbml0IGRlc2lyZWRIZWlnaHQgPSB0ZXh0QmxvY2tIZWlnaHQoKTsKLSAgICBMYXlvdXRVbml0
IGN1cnJlbnRIZWlnaHQgPSBpbm5lclRleHRSZW5kZXJlci0+aGVpZ2h0KCk7Ci0KLSAgICBMYXlv
dXRVbml0IGhlaWdodExpbWl0ID0gKGlucHV0RWxlbWVudCgpLT5pc1NlYXJjaEZpZWxkKCkgfHwg
IWNvbnRhaW5lcikgPyBoZWlnaHQoKSA6IGNvbnRlbnRIZWlnaHQoKTsKLSAgICBpZiAoY3VycmVu
dEhlaWdodCA+IGhlaWdodExpbWl0KSB7Ci0gICAgICAgIGlmIChkZXNpcmVkSGVpZ2h0ICE9IGN1
cnJlbnRIZWlnaHQpCi0gICAgICAgICAgICBzZXROZWVkc0xheW91dCh0cnVlLCBNYXJrT25seVRo
aXMpOwotCi0gICAgICAgIGlubmVyVGV4dFJlbmRlcmVyLT5zdHlsZSgpLT5zZXRIZWlnaHQoTGVu
Z3RoKGRlc2lyZWRIZWlnaHQsIEZpeGVkKSk7Ci0gICAgICAgIG1fZGVzaXJlZElubmVyVGV4dEhl
aWdodCA9IGRlc2lyZWRIZWlnaHQ7Ci0gICAgICAgIGlmIChpbm5lckJsb2NrUmVuZGVyZXIpCi0g
ICAgICAgICAgICBpbm5lckJsb2NrUmVuZGVyZXItPnN0eWxlKCktPnNldEhlaWdodChMZW5ndGgo
ZGVzaXJlZEhlaWdodCwgRml4ZWQpKTsKLSAgICB9Ci0gICAgLy8gVGhlIGNvbnRhaW5lciBtaWdo
dCBiZSB0YWxsZXIgYmVjYXVzZSBvZiBkZWNvcmF0aW9uIGVsZW1lbnRzLgotICAgIGlmIChjb250
YWluZXJSZW5kZXJlcikgewotICAgICAgICBjb250YWluZXJSZW5kZXJlci0+bGF5b3V0SWZOZWVk
ZWQoKTsKLSAgICAgICAgTGF5b3V0VW5pdCBjb250YWluZXJIZWlnaHQgPSBjb250YWluZXJSZW5k
ZXJlci0+aGVpZ2h0KCk7Ci0gICAgICAgIGlmIChjb250YWluZXJIZWlnaHQgPiBoZWlnaHRMaW1p
dCkgewotICAgICAgICAgICAgY29udGFpbmVyUmVuZGVyZXItPnN0eWxlKCktPnNldEhlaWdodChM
ZW5ndGgoaGVpZ2h0TGltaXQsIEZpeGVkKSk7Ci0gICAgICAgICAgICBzZXROZWVkc0xheW91dCh0
cnVlLCBNYXJrT25seVRoaXMpOwotICAgICAgICB9IGVsc2UgaWYgKGNvbnRhaW5lclJlbmRlcmVy
LT5oZWlnaHQoKSA8IGNvbnRlbnRIZWlnaHQoKSkgewotICAgICAgICAgICAgY29udGFpbmVyUmVu
ZGVyZXItPnN0eWxlKCktPnNldEhlaWdodChMZW5ndGgoY29udGVudEhlaWdodCgpLCBGaXhlZCkp
OwotICAgICAgICAgICAgc2V0TmVlZHNMYXlvdXQodHJ1ZSwgTWFya09ubHlUaGlzKTsKLSAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICBjb250YWluZXJSZW5kZXJlci0+c3R5bGUoKS0+c2V0SGVp
Z2h0KExlbmd0aChjb250YWluZXJIZWlnaHQsIEZpeGVkKSk7Ci0gICAgfQotCi0gICAgLy8gSWYg
d2UgbmVlZCBhbm90aGVyIGxheW91dCBwYXNzLCB3ZSBoYXZlIGNoYW5nZWQgb25lIG9mIGNoaWxk
cmVuJ3MgaGVpZ2h0IHNvIHdlIG5lZWQgdG8gcmVsYXlvdXQgdGhlbS4KLSAgICBpZiAobmVlZHNM
YXlvdXQoKSkKLSAgICAgICAgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKHRydWUpOwotCi0gICAg
Ly8gQ2VudGVyIHRoZSBjaGlsZCBibG9jayB2ZXJ0aWNhbGx5Ci0gICAgY3VycmVudEhlaWdodCA9
IGlubmVyVGV4dFJlbmRlcmVyLT5oZWlnaHQoKTsKLSAgICBpZiAoIWNvbnRhaW5lciAmJiBjdXJy
ZW50SGVpZ2h0ICE9IGNvbnRlbnRIZWlnaHQoKSkgewotICAgICAgICBMYXlvdXRVbml0IGhlaWdo
dERpZmYgPSBjdXJyZW50SGVpZ2h0IC0gY29udGVudEhlaWdodCgpOwotICAgICAgICBpbm5lclRl
eHRSZW5kZXJlci0+c2V0WShpbm5lclRleHRSZW5kZXJlci0+eSgpIC0gKGhlaWdodERpZmYgLyAy
ICsgbGF5b3V0TW9kKGhlaWdodERpZmYsIDIpKSk7Ci0gICAgfSBlbHNlIGlmIChpbnB1dEVsZW1l
bnQoKS0+aXNTZWFyY2hGaWVsZCgpICYmIGNvbnRhaW5lclJlbmRlcmVyICYmIGNvbnRhaW5lclJl
bmRlcmVyLT5oZWlnaHQoKSA+IGNvbnRlbnRIZWlnaHQoKSkgewotICAgICAgICAvLyBBIHF1aXJr
IGZvciBmaW5kLWluLXBhZ2UgYm94IG9uIFNhZmFyaSBXaW5kb3dzLgotICAgICAgICAvLyBodHRw
Oi8vd2Via2l0Lm9yZy9iLzYzMTU3Ci0gICAgICAgIExheW91dFVuaXQgaGVpZ2h0RGlmZiA9IGNv
bnRhaW5lclJlbmRlcmVyLT5oZWlnaHQoKSAtIGNvbnRlbnRIZWlnaHQoKTsKLSAgICAgICAgY29u
dGFpbmVyUmVuZGVyZXItPnNldFkoY29udGFpbmVyUmVuZGVyZXItPnkoKSAtIChoZWlnaHREaWZm
IC8gMiArIGxheW91dE1vZChoZWlnaHREaWZmLCAyKSkpOwotICAgIH0KLQotICAgIC8vIElnbm9y
ZXMgdGhlIHBhZGRpbmdzIGZvciB0aGUgaW5uZXIgc3BpbiBidXR0b24uCi0gICAgaWYgKFJlbmRl
ckJveCogaW5uZXJTcGluQm94ID0gaW5uZXJTcGluQnV0dG9uRWxlbWVudCgpID8gaW5uZXJTcGlu
QnV0dG9uRWxlbWVudCgpLT5yZW5kZXJCb3goKSA6IDApIHsKLSAgICAgICAgUmVuZGVyQm94KiBw
YXJlbnRCb3ggPSBpbm5lclNwaW5Cb3gtPnBhcmVudEJveCgpOwotICAgICAgICBpZiAoY29udGFp
bmVyUmVuZGVyZXIgJiYgIWNvbnRhaW5lclJlbmRlcmVyLT5zdHlsZSgpLT5pc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCkpCi0gICAgICAgICAgICBpbm5lclNwaW5Cb3gtPnNldExvY2F0aW9uKExheW91
dFBvaW50KC1wYWRkaW5nTGVmdCgpLCAtcGFkZGluZ1RvcCgpKSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGlubmVyU3BpbkJveC0+c2V0TG9jYXRpb24oTGF5b3V0UG9pbnQocGFyZW50Qm94
LT53aWR0aCgpIC0gaW5uZXJTcGluQm94LT53aWR0aCgpICsgcGFkZGluZ1JpZ2h0KCksIC1wYWRk
aW5nVG9wKCkpKTsKLSAgICAgICAgaW5uZXJTcGluQm94LT5zZXRIZWlnaHQoaGVpZ2h0KCkgLSBi
b3JkZXJUb3AoKSAtIGJvcmRlckJvdHRvbSgpKTsKLSAgICB9Ci0KLSAgICBIVE1MRWxlbWVudCog
cGxhY2Vob2xkZXJFbGVtZW50ID0gaW5wdXRFbGVtZW50KCktPnBsYWNlaG9sZGVyRWxlbWVudCgp
OwotICAgIGlmIChSZW5kZXJCb3gqIHBsYWNlaG9sZGVyQm94ID0gcGxhY2Vob2xkZXJFbGVtZW50
ID8gcGxhY2Vob2xkZXJFbGVtZW50LT5yZW5kZXJCb3goKSA6IDApIHsKLSAgICAgICAgcGxhY2Vo
b2xkZXJCb3gtPnN0eWxlKCktPnNldFdpZHRoKExlbmd0aChpbm5lclRleHRSZW5kZXJlci0+d2lk
dGgoKSAtIHBsYWNlaG9sZGVyQm94LT5ib3JkZXJBbmRQYWRkaW5nV2lkdGgoKSwgRml4ZWQpKTsK
LSAgICAgICAgcGxhY2Vob2xkZXJCb3gtPnN0eWxlKCktPnNldEhlaWdodChMZW5ndGgoaW5uZXJU
ZXh0UmVuZGVyZXItPmhlaWdodCgpIC0gcGxhY2Vob2xkZXJCb3gtPmJvcmRlckFuZFBhZGRpbmdI
ZWlnaHQoKSwgRml4ZWQpKTsKLSAgICAgICAgYm9vbCBwbGFjZWhvbGRlckJveEhhZExheW91dCA9
IHBsYWNlaG9sZGVyQm94LT5ldmVySGFkTGF5b3V0KCk7Ci0gICAgICAgIHBsYWNlaG9sZGVyQm94
LT5sYXlvdXRJZk5lZWRlZCgpOwotICAgICAgICBMYXlvdXRQb2ludCB0ZXh0T2Zmc2V0ID0gaW5u
ZXJUZXh0UmVuZGVyZXItPmxvY2F0aW9uKCk7Ci0gICAgICAgIGlmIChpbm5lckJsb2NrRWxlbWVu
dCgpICYmIGlubmVyQmxvY2tFbGVtZW50KCktPnJlbmRlckJveCgpKQotICAgICAgICAgICAgdGV4
dE9mZnNldCArPSB0b0xheW91dFNpemUoaW5uZXJCbG9ja0VsZW1lbnQoKS0+cmVuZGVyQm94KCkt
PmxvY2F0aW9uKCkpOwotICAgICAgICBpZiAoY29udGFpbmVyUmVuZGVyZXIpCi0gICAgICAgICAg
ICB0ZXh0T2Zmc2V0ICs9IHRvTGF5b3V0U2l6ZShjb250YWluZXJSZW5kZXJlci0+bG9jYXRpb24o
KSk7Ci0gICAgICAgIHBsYWNlaG9sZGVyQm94LT5zZXRMb2NhdGlvbih0ZXh0T2Zmc2V0KTsKLQot
ICAgICAgICBpZiAoIXBsYWNlaG9sZGVyQm94SGFkTGF5b3V0ICYmIHBsYWNlaG9sZGVyQm94LT5j
aGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSkgewotICAgICAgICAgICAgLy8gVGhpcyBhc3N1
bWVzIGEgc2hhZG93IHRyZWUgd2l0aG91dCBmbG9hdHMuIElmIGZsb2F0cyBhcmUgYWRkZWQsIHRo
ZQotICAgICAgICAgICAgLy8gbG9naWMgc2hvdWxkIGJlIHNoYXJlZCB3aXRoIFJlbmRlckJsb2Nr
OjpsYXlvdXRCbG9ja0NoaWxkLgotICAgICAgICAgICAgcGxhY2Vob2xkZXJCb3gtPnJlcGFpbnQo
KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmU6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVz
dWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBM
YXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlv
bikKLXsKLSAgICBpZiAoIVJlbmRlclRleHRDb250cm9sOjpub2RlQXRQb2ludChyZXF1ZXN0LCBy
ZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBoaXRUZXN0QWN0aW9u
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gU2F5IHRoYXQgd2UgaGl0IHRoZSBp
bm5lciB0ZXh0IGVsZW1lbnQgaWYKLSAgICAvLyAgLSB3ZSBoaXQgYSBub2RlIGluc2lkZSB0aGUg
aW5uZXIgdGV4dCBlbGVtZW50LAotICAgIC8vICAtIHdlIGhpdCB0aGUgPGlucHV0PiBlbGVtZW50
IChlLmcuIHdlJ3JlIG92ZXIgdGhlIGJvcmRlciBvciBwYWRkaW5nKSwgb3IKLSAgICAvLyAgLSB3
ZSBoaXQgcmVnaW9ucyBub3QgaW4gYW55IGRlY29yYXRpb24gYnV0dG9ucy4KLSAgICBIVE1MRWxl
bWVudCogY29udGFpbmVyID0gY29udGFpbmVyRWxlbWVudCgpOwotICAgIGlmIChyZXN1bHQuaW5u
ZXJOb2RlKCktPmlzRGVzY2VuZGFudE9mKGlubmVyVGV4dEVsZW1lbnQoKSkgfHwgcmVzdWx0Lmlu
bmVyTm9kZSgpID09IG5vZGUoKSB8fCAoY29udGFpbmVyICYmIGNvbnRhaW5lciA9PSByZXN1bHQu
aW5uZXJOb2RlKCkpKSB7Ci0gICAgICAgIExheW91dFBvaW50IHBvaW50SW5QYXJlbnQgPSBwb2lu
dEluQ29udGFpbmVyOwotICAgICAgICBpZiAoY29udGFpbmVyICYmIGlubmVyQmxvY2tFbGVtZW50
KCkpIHsKLSAgICAgICAgICAgIGlmIChpbm5lckJsb2NrRWxlbWVudCgpLT5yZW5kZXJCb3goKSkK
LSAgICAgICAgICAgICAgICBwb2ludEluUGFyZW50IC09IHRvTGF5b3V0U2l6ZShpbm5lckJsb2Nr
RWxlbWVudCgpLT5yZW5kZXJCb3goKS0+bG9jYXRpb24oKSk7Ci0gICAgICAgICAgICBpZiAoY29u
dGFpbmVyLT5yZW5kZXJCb3goKSkKLSAgICAgICAgICAgICAgICBwb2ludEluUGFyZW50IC09IHRv
TGF5b3V0U2l6ZShjb250YWluZXItPnJlbmRlckJveCgpLT5sb2NhdGlvbigpKTsKLSAgICAgICAg
fQotICAgICAgICBoaXRJbm5lclRleHRFbGVtZW50KHJlc3VsdCwgcG9pbnRJblBhcmVudCwgYWNj
dW11bGF0ZWRPZmZzZXQpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBk
aWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCi17Ci0gICAgbV9kZXNpcmVkSW5uZXJU
ZXh0SGVpZ2h0ID0gLTE7Ci0gICAgUmVuZGVyVGV4dENvbnRyb2w6OnN0eWxlRGlkQ2hhbmdlKGRp
ZmYsIG9sZFN0eWxlKTsKLQotICAgIC8vIFdlIG1heSBoYXZlIHNldCB0aGUgd2lkdGggYW5kIHRo
ZSBoZWlnaHQgaW4gdGhlIG9sZCBzdHlsZSBpbiBsYXlvdXQoKS4KLSAgICAvLyBSZXNldCB0aGVt
IG5vdyB0byBhdm9pZCBnZXR0aW5nIGEgc3B1cmlvdXMgbGF5b3V0IGhpbnQuCi0gICAgSFRNTEVs
ZW1lbnQqIGlubmVyQmxvY2sgPSBpbm5lckJsb2NrRWxlbWVudCgpOwotICAgIGlmIChSZW5kZXJP
YmplY3QqIGlubmVyQmxvY2tSZW5kZXJlciA9IGlubmVyQmxvY2sgPyBpbm5lckJsb2NrLT5yZW5k
ZXJlcigpIDogMCkgewotICAgICAgICBpbm5lckJsb2NrUmVuZGVyZXItPnN0eWxlKCktPnNldEhl
aWdodChMZW5ndGgoKSk7Ci0gICAgICAgIGlubmVyQmxvY2tSZW5kZXJlci0+c3R5bGUoKS0+c2V0
V2lkdGgoTGVuZ3RoKCkpOwotICAgIH0KLSAgICBIVE1MRWxlbWVudCogY29udGFpbmVyID0gY29u
dGFpbmVyRWxlbWVudCgpOwotICAgIGlmIChSZW5kZXJPYmplY3QqIGNvbnRhaW5lclJlbmRlcmVy
ID0gY29udGFpbmVyID8gY29udGFpbmVyLT5yZW5kZXJlcigpIDogMCkgewotICAgICAgICBjb250
YWluZXJSZW5kZXJlci0+c3R5bGUoKS0+c2V0SGVpZ2h0KExlbmd0aCgpKTsKLSAgICAgICAgY29u
dGFpbmVyUmVuZGVyZXItPnN0eWxlKCktPnNldFdpZHRoKExlbmd0aCgpKTsKLSAgICB9Ci0gICAg
aWYgKEhUTUxFbGVtZW50KiBwbGFjZWhvbGRlciA9IGlucHV0RWxlbWVudCgpLT5wbGFjZWhvbGRl
ckVsZW1lbnQoKSkKLSAgICAgICAgcGxhY2Vob2xkZXItPnNldElubGluZVN0eWxlUHJvcGVydHko
Q1NTUHJvcGVydHlUZXh0T3ZlcmZsb3csIHRleHRTaG91bGRCZVRydW5jYXRlZCgpID8gQ1NTVmFs
dWVFbGxpcHNpcyA6IENTU1ZhbHVlQ2xpcCk7Ci0gICAgc2V0SGFzT3ZlcmZsb3dDbGlwKGZhbHNl
KTsKLX0KLQotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNhcHNMb2NrU3RhdGVN
YXlIYXZlQ2hhbmdlZCgpCi17Ci0gICAgaWYgKCFub2RlKCkgfHwgIWRvY3VtZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIE9ubHkgZHJhdyB0aGUgY2FwcyBsb2NrIGluZGljYXRvciBp
ZiB0aGVzZSB0aGluZ3MgYXJlIHRydWU6Ci0gICAgLy8gMSkgVGhlIGZpZWxkIGlzIGEgcGFzc3dv
cmQgZmllbGQKLSAgICAvLyAyKSBUaGUgZnJhbWUgaXMgYWN0aXZlCi0gICAgLy8gMykgVGhlIGVs
ZW1lbnQgaXMgZm9jdXNlZAotICAgIC8vIDQpIFRoZSBjYXBzIGxvY2sgaXMgb24KLSAgICBib29s
IHNob3VsZERyYXdDYXBzTG9ja0luZGljYXRvciA9IGZhbHNlOwotCi0gICAgaWYgKEZyYW1lKiBm
cmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpCi0gICAgICAgIHNob3VsZERyYXdDYXBzTG9ja0lu
ZGljYXRvciA9IGlucHV0RWxlbWVudCgpLT5pc1Bhc3N3b3JkRmllbGQoKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBmcmFtZS0+c2VsZWN0aW9uKCktPmlzRm9jdXNl
ZEFuZEFjdGl2ZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGRv
Y3VtZW50KCktPmZvY3VzZWROb2RlKCkgPT0gbm9kZSgpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICYmIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Y3VycmVudENhcHNMb2Nr
U3RhdGUoKTsKLQotICAgIGlmIChzaG91bGREcmF3Q2Fwc0xvY2tJbmRpY2F0b3IgIT0gbV9zaG91
bGREcmF3Q2Fwc0xvY2tJbmRpY2F0b3IpIHsKLSAgICAgICAgbV9zaG91bGREcmF3Q2Fwc0xvY2tJ
bmRpY2F0b3IgPSBzaG91bGREcmF3Q2Fwc0xvY2tJbmRpY2F0b3I7Ci0gICAgICAgIHJlcGFpbnQo
KTsKLSAgICB9Ci19Ci0KLWJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpoYXNDb250
cm9sQ2xpcCgpIGNvbnN0Ci17Ci0gICAgLy8gQXBwbHkgY29udHJvbCBjbGlwIGZvciB0ZXh0IGZp
ZWxkcyB3aXRoIGRlY29yYXRpb25zLgotICAgIHJldHVybiAhIWNvbnRhaW5lckVsZW1lbnQoKTsK
LX0KLQotTGF5b3V0UmVjdCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNvbnRyb2xDbGlw
UmVjdChjb25zdCBMYXlvdXRQb2ludCYgYWRkaXRpb25hbE9mZnNldCkgY29uc3QKLXsKLSAgICBB
U1NFUlQoaGFzQ29udHJvbENsaXAoKSk7Ci0gICAgTGF5b3V0UmVjdCBjbGlwUmVjdCA9IHVuaW9u
UmVjdChjb250ZW50Qm94UmVjdCgpLCBjb250YWluZXJFbGVtZW50KCktPnJlbmRlckJveCgpLT5m
cmFtZVJlY3QoKSk7Ci0gICAgY2xpcFJlY3QubW92ZUJ5KGFkZGl0aW9uYWxPZmZzZXQpOwotICAg
IHJldHVybiBjbGlwUmVjdDsKLX0KLQotZmxvYXQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
OjpnZXRBdmdDaGFyV2lkdGgoQXRvbWljU3RyaW5nIGZhbWlseSkKLXsKLSAgICAvLyBTaW5jZSBM
dWNpZGEgR3JhbmRlIGlzIHRoZSBkZWZhdWx0IGZvbnQsIHdlIHdhbnQgdGhpcyB0byBtYXRjaCB0
aGUgd2lkdGgKLSAgICAvLyBvZiBNUyBTaGVsbCBEbGcsIHRoZSBkZWZhdWx0IGZvbnQgZm9yIHRl
eHRhcmVhcyBpbiBGaXJlZm94LCBTYWZhcmkgV2luIGFuZAotICAgIC8vIElFIGZvciBzb21lIGVu
Y29kaW5ncyAoaW4gSUUsIHRoZSBkZWZhdWx0IGZvbnQgaXMgZW5jb2Rpbmcgc3BlY2lmaWMpLgot
ICAgIC8vIDkwMSBpcyB0aGUgYXZnQ2hhcldpZHRoIHZhbHVlIGluIHRoZSBPUy8yIHRhYmxlIGZv
ciBNUyBTaGVsbCBEbGcuCi0gICAgaWYgKGZhbWlseSA9PSBBdG9taWNTdHJpbmcoIkx1Y2lkYSBH
cmFuZGUiKSkKLSAgICAgICAgcmV0dXJuIHNjYWxlRW1Ub1VuaXRzKDkwMSk7Ci0KLSAgICByZXR1
cm4gUmVuZGVyVGV4dENvbnRyb2w6OmdldEF2Z0NoYXJXaWR0aChmYW1pbHkpOwotfQotCi1MYXlv
dXRVbml0IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6cHJlZmVycmVkQ29udGVudFdpZHRo
KGZsb2F0IGNoYXJXaWR0aCkgY29uc3QKLXsKLSAgICBpbnQgZmFjdG9yOwotICAgIGJvb2wgaW5j
bHVkZXNEZWNvcmF0aW9uID0gaW5wdXRFbGVtZW50KCktPnNpemVTaG91bGRJbmNsdWRlRGVjb3Jh
dGlvbihmYWN0b3IpOwotICAgIGlmIChmYWN0b3IgPD0gMCkKLSAgICAgICAgZmFjdG9yID0gMjA7
Ci0KLSAgICBMYXlvdXRVbml0IHJlc3VsdCA9IHN0YXRpY19jYXN0PExheW91dFVuaXQ+KGNlaWxl
ZExheW91dFVuaXQoY2hhcldpZHRoICogZmFjdG9yKSk7Ci0KLSAgICBmbG9hdCBtYXhDaGFyV2lk
dGggPSAwLmY7Ci0gICAgQXRvbWljU3RyaW5nIGZhbWlseSA9IHN0eWxlKCktPmZvbnQoKS5mYW1p
bHkoKS5mYW1pbHkoKTsKLSAgICAvLyBTaW5jZSBMdWNpZGEgR3JhbmRlIGlzIHRoZSBkZWZhdWx0
IGZvbnQsIHdlIHdhbnQgdGhpcyB0byBtYXRjaCB0aGUgd2lkdGgKLSAgICAvLyBvZiBNUyBTaGVs
bCBEbGcsIHRoZSBkZWZhdWx0IGZvbnQgZm9yIHRleHRhcmVhcyBpbiBGaXJlZm94LCBTYWZhcmkg
V2luIGFuZAotICAgIC8vIElFIGZvciBzb21lIGVuY29kaW5ncyAoaW4gSUUsIHRoZSBkZWZhdWx0
IGZvbnQgaXMgZW5jb2Rpbmcgc3BlY2lmaWMpLgotICAgIC8vIDQwMjcgaXMgdGhlICh4TWF4IC0g
eE1pbikgdmFsdWUgaW4gdGhlICJoZWFkIiBmb250IHRhYmxlIGZvciBNUyBTaGVsbCBEbGcuCi0g
ICAgaWYgKGZhbWlseSA9PSBBdG9taWNTdHJpbmcoIkx1Y2lkYSBHcmFuZGUiKSkKLSAgICAgICAg
bWF4Q2hhcldpZHRoID0gc2NhbGVFbVRvVW5pdHMoNDAyNyk7Ci0gICAgZWxzZSBpZiAoaGFzVmFs
aWRBdmdDaGFyV2lkdGgoZmFtaWx5KSkKLSAgICAgICAgbWF4Q2hhcldpZHRoID0gcm91bmRmKHN0
eWxlKCktPmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5tYXhDaGFyV2lkdGgoKSk7Ci0KLSAgICAvLyBG
b3IgdGV4dCBpbnB1dHMsIElFIGFkZHMgc29tZSBleHRyYSB3aWR0aC4KLSAgICBpZiAobWF4Q2hh
cldpZHRoID4gMC5mKQotICAgICAgICByZXN1bHQgKz0gbWF4Q2hhcldpZHRoIC0gY2hhcldpZHRo
OwotCi0gICAgaWYgKGluY2x1ZGVzRGVjb3JhdGlvbikgewotICAgICAgICBIVE1MRWxlbWVudCog
c3BpbkJ1dHRvbiA9IGlubmVyU3BpbkJ1dHRvbkVsZW1lbnQoKTsKLSAgICAgICAgaWYgKFJlbmRl
ckJveCogc3BpblJlbmRlcmVyID0gc3BpbkJ1dHRvbiA/IHNwaW5CdXR0b24tPnJlbmRlckJveCgp
IDogMCkgewotICAgICAgICAgICAgcmVzdWx0ICs9IHNwaW5SZW5kZXJlci0+Ym9yZGVyTGVmdCgp
ICsgc3BpblJlbmRlcmVyLT5ib3JkZXJSaWdodCgpICsKLSAgICAgICAgICAgICAgICAgIHNwaW5S
ZW5kZXJlci0+cGFkZGluZ0xlZnQoKSArIHNwaW5SZW5kZXJlci0+cGFkZGluZ1JpZ2h0KCk7Ci0g
ICAgICAgICAgICAvLyBTaW5jZSB0aGUgd2lkdGggb2Ygc3BpblJlbmRlcmVyIGlzIG5vdCBjYWxj
dWxhdGVkIHlldCwgc3BpblJlbmRlcmVyLT53aWR0aCgpIHJldHVybnMgMC4KLSAgICAgICAgICAg
IC8vIFNvIGNvbXB1dGVkU3R5bGUoKS0+d2lkdGgoKSBpcyB1c2VkIGluc3RlYWQuCi0gICAgICAg
ICAgICByZXN1bHQgKz0gc3BpbkJ1dHRvbi0+Y29tcHV0ZWRTdHlsZSgpLT53aWR0aCgpLnZhbHVl
KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1MYXlvdXRV
bml0IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y29tcHV0ZUNvbnRyb2xIZWlnaHQoTGF5
b3V0VW5pdCBsaW5lSGVpZ2h0LCBMYXlvdXRVbml0IG5vbkNvbnRlbnRIZWlnaHQpIGNvbnN0Ci17
Ci0gICAgSFRNTEVsZW1lbnQqIHJlc3VsdHNCdXR0b24gPSByZXN1bHRzQnV0dG9uRWxlbWVudCgp
OwotICAgIGlmIChSZW5kZXJCb3gqIHJlc3VsdHNSZW5kZXJlciA9IHJlc3VsdHNCdXR0b24gPyBy
ZXN1bHRzQnV0dG9uLT5yZW5kZXJCb3goKSA6IDApIHsKLSAgICAgICAgcmVzdWx0c1JlbmRlcmVy
LT5jb21wdXRlTG9naWNhbEhlaWdodCgpOwotICAgICAgICBub25Db250ZW50SGVpZ2h0ID0gbWF4
KG5vbkNvbnRlbnRIZWlnaHQsIHJlc3VsdHNSZW5kZXJlci0+Ym9yZGVyQW5kUGFkZGluZ0hlaWdo
dCgpICsgcmVzdWx0c1JlbmRlcmVyLT5tYXJnaW5IZWlnaHQoKSk7Ci0gICAgICAgIGxpbmVIZWln
aHQgPSBtYXgobGluZUhlaWdodCwgcmVzdWx0c1JlbmRlcmVyLT5oZWlnaHQoKSk7Ci0gICAgfQot
ICAgIEhUTUxFbGVtZW50KiBjYW5jZWxCdXR0b24gPSBjYW5jZWxCdXR0b25FbGVtZW50KCk7Ci0g
ICAgaWYgKFJlbmRlckJveCogY2FuY2VsUmVuZGVyZXIgPSBjYW5jZWxCdXR0b24gPyBjYW5jZWxC
dXR0b24tPnJlbmRlckJveCgpIDogMCkgewotICAgICAgICBjYW5jZWxSZW5kZXJlci0+Y29tcHV0
ZUxvZ2ljYWxIZWlnaHQoKTsKLSAgICAgICAgbm9uQ29udGVudEhlaWdodCA9IG1heChub25Db250
ZW50SGVpZ2h0LCBjYW5jZWxSZW5kZXJlci0+Ym9yZGVyQW5kUGFkZGluZ0hlaWdodCgpICsgY2Fu
Y2VsUmVuZGVyZXItPm1hcmdpbkhlaWdodCgpKTsKLSAgICAgICAgbGluZUhlaWdodCA9IG1heChs
aW5lSGVpZ2h0LCBjYW5jZWxSZW5kZXJlci0+aGVpZ2h0KCkpOwotICAgIH0KLQotICAgIHJldHVy
biBsaW5lSGVpZ2h0ICsgbm9uQ29udGVudEhlaWdodDsKLX0KLQotdm9pZCBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OnVwZGF0ZUZyb21FbGVtZW50KCkKLXsKLSAgICBSZW5kZXJUZXh0Q29u
dHJvbDo6dXBkYXRlRnJvbUVsZW1lbnQoKTsKLQotICAgIGlmIChjYW5jZWxCdXR0b25FbGVtZW50
KCkpCi0gICAgICAgIHVwZGF0ZUNhbmNlbEJ1dHRvblZpc2liaWxpdHkoKTsKLQotICAgIGlmICht
X3NlYXJjaFBvcHVwSXNWaXNpYmxlKQotICAgICAgICBtX3NlYXJjaFBvcHVwLT5wb3B1cE1lbnUo
KS0+dXBkYXRlRnJvbUVsZW1lbnQoKTsKLX0KLQotUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjcmVhdGVJbm5lclRleHRTdHlsZShjb25zdCBSZW5k
ZXJTdHlsZSogc3RhcnRTdHlsZSkgY29uc3QKLXsKLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHRl
eHRCbG9ja1N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOyAgIAotICAgIHRleHRCbG9ja1N0
eWxlLT5pbmhlcml0RnJvbShzdGFydFN0eWxlKTsKLSAgICBhZGp1c3RJbm5lclRleHRTdHlsZShz
dGFydFN0eWxlLCB0ZXh0QmxvY2tTdHlsZS5nZXQoKSk7Ci0KLSAgICB0ZXh0QmxvY2tTdHlsZS0+
c2V0V2hpdGVTcGFjZShQUkUpOwotICAgIHRleHRCbG9ja1N0eWxlLT5zZXRXb3JkV3JhcChOb3Jt
YWxXb3JkV3JhcCk7Ci0gICAgdGV4dEJsb2NrU3R5bGUtPnNldE92ZXJmbG93WChPSElEREVOKTsK
LSAgICB0ZXh0QmxvY2tTdHlsZS0+c2V0T3ZlcmZsb3dZKE9ISURERU4pOwotICAgIHRleHRCbG9j
a1N0eWxlLT5zZXRUZXh0T3ZlcmZsb3codGV4dFNob3VsZEJlVHJ1bmNhdGVkKCkgPyBUZXh0T3Zl
cmZsb3dFbGxpcHNpcyA6IFRleHRPdmVyZmxvd0NsaXApOwotCi0gICAgaWYgKG1fZGVzaXJlZElu
bmVyVGV4dEhlaWdodCA+PSAwKQotICAgICAgICB0ZXh0QmxvY2tTdHlsZS0+c2V0SGVpZ2h0KExl
bmd0aChtX2Rlc2lyZWRJbm5lclRleHRIZWlnaHQsIEZpeGVkKSk7Ci0gICAgLy8gRG8gbm90IGFs
bG93IGxpbmUtaGVpZ2h0IHRvIGJlIHNtYWxsZXIgdGhhbiBvdXIgZGVmYXVsdC4KLSAgICBpZiAo
dGV4dEJsb2NrU3R5bGUtPmZvbnRNZXRyaWNzKCkubGluZVNwYWNpbmcoKSA+IGxpbmVIZWlnaHQo
dHJ1ZSwgSG9yaXpvbnRhbExpbmUsIFBvc2l0aW9uT2ZJbnRlcmlvckxpbmVCb3hlcykpCi0gICAg
ICAgIHRleHRCbG9ja1N0eWxlLT5zZXRMaW5lSGVpZ2h0KExlbmd0aCgtMTAwLjBmLCBQZXJjZW50
KSk7Ci0KLSAgICB0ZXh0QmxvY2tTdHlsZS0+c2V0RGlzcGxheShCTE9DSyk7Ci0KLSAgICByZXR1
cm4gdGV4dEJsb2NrU3R5bGUucmVsZWFzZSgpOwotfQotCi1QYXNzUmVmUHRyPFJlbmRlclN0eWxl
PiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZUlubmVyQmxvY2tTdHlsZShjb25z
dCBSZW5kZXJTdHlsZSogc3RhcnRTdHlsZSkgY29uc3QKLXsKLSAgICBSZWZQdHI8UmVuZGVyU3R5
bGU+IGlubmVyQmxvY2tTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKLSAgICBpbm5lckJs
b2NrU3R5bGUtPmluaGVyaXRGcm9tKHN0YXJ0U3R5bGUpOwotCi0gICAgaW5uZXJCbG9ja1N0eWxl
LT5zZXRCb3hGbGV4KDEpOwotICAgIGlubmVyQmxvY2tTdHlsZS0+c2V0RGlzcGxheShCTE9DSyk7
Ci0gICAgaW5uZXJCbG9ja1N0eWxlLT5zZXREaXJlY3Rpb24oTFRSKTsKLQotICAgIC8vIFdlIGRv
bid0IHdhbnQgdGhlIHNoYWRvdyBkb20gdG8gYmUgZWRpdGFibGUsIHNvIHdlIHNldCB0aGlzIGJs
b2NrIHRvIHJlYWQtb25seSBpbiBjYXNlIHRoZSBpbnB1dCBpdHNlbGYgaXMgZWRpdGFibGUuCi0g
ICAgaW5uZXJCbG9ja1N0eWxlLT5zZXRVc2VyTW9kaWZ5KFJFQURfT05MWSk7Ci0KLSAgICByZXR1
cm4gaW5uZXJCbG9ja1N0eWxlLnJlbGVhc2UoKTsKLX0KLQotdm9pZCBSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OnVwZGF0ZUNhbmNlbEJ1dHRvblZpc2liaWxpdHkoKSBjb25zdAotewotICAg
IFJlbmRlck9iamVjdCogY2FuY2VsQnV0dG9uUmVuZGVyZXIgPSBjYW5jZWxCdXR0b25FbGVtZW50
KCktPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFjYW5jZWxCdXR0b25SZW5kZXJlcikKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgY29uc3QgUmVuZGVyU3R5bGUqIGN1clN0eWxlID0gY2FuY2VsQnV0dG9u
UmVuZGVyZXItPnN0eWxlKCk7Ci0gICAgRVZpc2liaWxpdHkgYnV0dG9uVmlzaWJpbGl0eSA9IHZp
c2liaWxpdHlGb3JDYW5jZWxCdXR0b24oKTsKLSAgICBpZiAoY3VyU3R5bGUtPnZpc2liaWxpdHko
KSA9PSBidXR0b25WaXNpYmlsaXR5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8UmVu
ZGVyU3R5bGU+IGNhbmNlbEJ1dHRvblN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lKGN1clN0eWxl
KTsKLSAgICBjYW5jZWxCdXR0b25TdHlsZS0+c2V0VmlzaWJpbGl0eShidXR0b25WaXNpYmlsaXR5
KTsKLSAgICBjYW5jZWxCdXR0b25SZW5kZXJlci0+c2V0U3R5bGUoY2FuY2VsQnV0dG9uU3R5bGUp
OwotfQotCi1FVmlzaWJpbGl0eSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnZpc2liaWxp
dHlGb3JDYW5jZWxCdXR0b24oKSBjb25zdAotewotICAgIHJldHVybiAoc3R5bGUoKS0+dmlzaWJp
bGl0eSgpID09IEhJRERFTiB8fCBpbnB1dEVsZW1lbnQoKS0+dmFsdWUoKS5pc0VtcHR5KCkpID8g
SElEREVOIDogVklTSUJMRTsKLX0KLQotYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6
OnRleHRTaG91bGRCZVRydW5jYXRlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRvY3VtZW50KCkt
PmZvY3VzZWROb2RlKCkgIT0gbm9kZSgpCi0gICAgICAgICYmIHN0eWxlKCktPnRleHRPdmVyZmxv
dygpID09IFRleHRPdmVyZmxvd0VsbGlwc2lzOwotfQotCi1jb25zdCBBdG9taWNTdHJpbmcmIFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6YXV0b3NhdmVOYW1lKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSktPmdldEF0dHJpYnV0ZShhdXRvc2F2
ZUF0dHIpOwotfQotCiAvLyBQb3B1cE1lbnVDbGllbnQgbWV0aG9kcwotdm9pZCBSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmU6OnZhbHVlQ2hhbmdlZCh1bnNpZ25lZCBsaXN0SW5kZXgsIGJvb2wg
ZmlyZUV2ZW50cykKK3ZvaWQgUmVuZGVyU2VhcmNoRmllbGQ6OnZhbHVlQ2hhbmdlZCh1bnNpZ25l
ZCBsaXN0SW5kZXgsIGJvb2wgZmlyZUV2ZW50cykKIHsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8
aW50PihsaXN0SW5kZXgpIDwgbGlzdFNpemUoKSk7CiAgICAgSFRNTElucHV0RWxlbWVudCogaW5w
dXQgPSBpbnB1dEVsZW1lbnQoKTsKQEAgLTU1MSw3ICsxNTksNyBAQCB2b2lkIFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6dmFsdWVDaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCwgYm9vbCBm
aXJlRXZlbgogICAgIH0KIH0KIAotU3RyaW5nIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6
aXRlbVRleHQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAorU3RyaW5nIFJlbmRlclNlYXJjaEZp
ZWxkOjppdGVtVGV4dCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0CiB7CiAgICAgaW50IHNpemUg
PSBsaXN0U2l6ZSgpOwogICAgIGlmIChzaXplID09IDEpIHsKQEAgLTU2Nyw0MiArMTc1LDQyIEBA
IFN0cmluZyBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Oml0ZW1UZXh0KHVuc2lnbmVkIGxp
c3RJbmRleCkgY29uc3QKICAgICByZXR1cm4gbV9yZWNlbnRTZWFyY2hlc1tsaXN0SW5kZXggLSAx
XTsKIH0KIAotU3RyaW5nIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aXRlbUxhYmVsKHVu
c2lnbmVkKSBjb25zdAorU3RyaW5nIFJlbmRlclNlYXJjaEZpZWxkOjppdGVtTGFiZWwodW5zaWdu
ZWQpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi1TdHJpbmcgUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lOjppdGVtSWNvbih1bnNpZ25lZCkgY29uc3QKK1N0cmluZyBSZW5k
ZXJTZWFyY2hGaWVsZDo6aXRlbUljb24odW5zaWduZWQpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFN0
cmluZygpOwogfQogCi1ib29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aXRlbUlzRW5h
YmxlZCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0Citib29sIFJlbmRlclNlYXJjaEZpZWxkOjpp
dGVtSXNFbmFibGVkKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKIHsKICAgICAgaWYgKCFsaXN0
SW5kZXggfHwgaXRlbUlzU2VwYXJhdG9yKGxpc3RJbmRleCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotUG9wdXBNZW51U3R5bGUgUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjppdGVtU3R5bGUodW5zaWduZWQpIGNvbnN0CitQb3B1cE1lbnVTdHlsZSBS
ZW5kZXJTZWFyY2hGaWVsZDo6aXRlbVN0eWxlKHVuc2lnbmVkKSBjb25zdAogewogICAgIHJldHVy
biBtZW51U3R5bGUoKTsKIH0KIAotUG9wdXBNZW51U3R5bGUgUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjptZW51U3R5bGUoKSBjb25zdAorUG9wdXBNZW51U3R5bGUgUmVuZGVyU2VhcmNoRmll
bGQ6Om1lbnVTdHlsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFBvcHVwTWVudVN0eWxlKHN0eWxl
KCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgc3R5bGUoKS0+dmlz
aXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSwgc3R5bGUoKS0+
Zm9udCgpLCBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSwKICAgICAgICAgc3R5bGUo
KS0+ZGlzcGxheSgpID09IE5PTkUsIHN0eWxlKCktPnRleHRJbmRlbnQoKSwgc3R5bGUoKS0+ZGly
ZWN0aW9uKCksIGlzT3ZlcnJpZGUoc3R5bGUoKS0+dW5pY29kZUJpZGkoKSkpOwogfQogCi1pbnQg
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjbGllbnRJbnNldExlZnQoKSBjb25zdAoraW50
IFJlbmRlclNlYXJjaEZpZWxkOjpjbGllbnRJbnNldExlZnQoKSBjb25zdAogewogICAgIC8vIElu
c2V0IHRoZSBtZW51IGJ5IHRoZSByYWRpdXMgb2YgdGhlIGNhcCBvbiB0aGUgbGVmdCBzbyB0aGF0
CiAgICAgLy8gaXQgb25seSBydW5zIGFsb25nIHRoZSBzdHJhaWdodCBwYXJ0IG9mIHRoZSBiZXpl
bC4KICAgICByZXR1cm4gaGVpZ2h0KCkgLyAyOwogfQogCi1pbnQgUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjpjbGllbnRJbnNldFJpZ2h0KCkgY29uc3QKK2ludCBSZW5kZXJTZWFyY2hGaWVs
ZDo6Y2xpZW50SW5zZXRSaWdodCgpIGNvbnN0CiB7CiAgICAgLy8gSW5zZXQgdGhlIG1lbnUgYnkg
dGhlIHJhZGl1cyBvZiB0aGUgY2FwIG9uIHRoZSByaWdodCBzbyB0aGF0CiAgICAgLy8gaXQgb25s
eSBydW5zIGFsb25nIHRoZSBzdHJhaWdodCBwYXJ0IG9mIHRoZSBiZXplbCAodW5sZXNzIGl0IG5l
ZWRzCkBAIC02MTAsNyArMjE4LDcgQEAgaW50IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6
Y2xpZW50SW5zZXRSaWdodCgpIGNvbnN0CiAgICAgcmV0dXJuIGhlaWdodCgpIC8gMjsKIH0KIAot
TGF5b3V0VW5pdCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNsaWVudFBhZGRpbmdMZWZ0
KCkgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyU2VhcmNoRmllbGQ6OmNsaWVudFBhZGRpbmdMZWZ0
KCkgY29uc3QKIHsKICAgICBMYXlvdXRVbml0IHBhZGRpbmcgPSBwYWRkaW5nTGVmdCgpOwogICAg
IGlmIChSZW5kZXJCb3gqIGJveCA9IGlubmVyQmxvY2tFbGVtZW50KCkgPyBpbm5lckJsb2NrRWxl
bWVudCgpLT5yZW5kZXJCb3goKSA6IDApCkBAIC02MTgsNyArMjI2LDcgQEAgTGF5b3V0VW5pdCBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNsaWVudFBhZGRpbmdMZWZ0KCkgY29uc3QKICAg
ICByZXR1cm4gcGFkZGluZzsKIH0KIAotTGF5b3V0VW5pdCBSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmU6OmNsaWVudFBhZGRpbmdSaWdodCgpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlclNlYXJj
aEZpZWxkOjpjbGllbnRQYWRkaW5nUmlnaHQoKSBjb25zdAogewogICAgIExheW91dFVuaXQgcGFk
ZGluZyA9IHBhZGRpbmdSaWdodCgpOwogICAgIGlmIChSZW5kZXJCb3gqIGNvbnRhaW5lckJveCA9
IGNvbnRhaW5lckVsZW1lbnQoKSA/IGNvbnRhaW5lckVsZW1lbnQoKS0+cmVuZGVyQm94KCkgOiAw
KSB7CkBAIC02MjgsNyArMjM2LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmU6OmNsaWVudFBhZGRpbmdSaWdodCgpIGNvbnN0CiAgICAgcmV0dXJuIHBhZGRpbmc7CiB9
CiAKLWludCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Omxpc3RTaXplKCkgY29uc3QKK2lu
dCBSZW5kZXJTZWFyY2hGaWVsZDo6bGlzdFNpemUoKSBjb25zdAogewogICAgIC8vIElmIHRoZXJl
IGFyZSBubyByZWNlbnQgc2VhcmNoZXMsIHRoZW4gb3VyIG1lbnUgd2lsbCBoYXZlIDEgIk5vIHJl
Y2VudCBzZWFyY2hlcyIgaXRlbS4KICAgICBpZiAoIW1fcmVjZW50U2VhcmNoZXMuc2l6ZSgpKQpA
QCAtNjM3LDExMSArMjQ1LDQ5IEBAIGludCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Omxp
c3RTaXplKCkgY29uc3QKICAgICByZXR1cm4gbV9yZWNlbnRTZWFyY2hlcy5zaXplKCkgKyAzOwog
fQogCi1pbnQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzZWxlY3RlZEluZGV4KCkgY29u
c3QKK2ludCBSZW5kZXJTZWFyY2hGaWVsZDo6c2VsZWN0ZWRJbmRleCgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIC0xOwogfQogCi12b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6cG9wdXBE
aWRIaWRlKCkKK3ZvaWQgUmVuZGVyU2VhcmNoRmllbGQ6OnBvcHVwRGlkSGlkZSgpCiB7CiAgICAg
bV9zZWFyY2hQb3B1cElzVmlzaWJsZSA9IGZhbHNlOwogfQogCi1ib29sIFJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6aXRlbUlzU2VwYXJhdG9yKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QK
K2Jvb2wgUmVuZGVyU2VhcmNoRmllbGQ6Oml0ZW1Jc1NlcGFyYXRvcih1bnNpZ25lZCBsaXN0SW5k
ZXgpIGNvbnN0CiB7CiAgICAgLy8gVGhlIHNlcGFyYXRvciB3aWxsIGJlIHRoZSBzZWNvbmQgdG8g
bGFzdCBpdGVtIGluIG91ciBsaXN0LgogICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGxpc3RJ
bmRleCkgPT0gKGxpc3RTaXplKCkgLSAyKTsKIH0KIAotYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6Oml0ZW1Jc0xhYmVsKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKK2Jvb2wgUmVu
ZGVyU2VhcmNoRmllbGQ6Oml0ZW1Jc0xhYmVsKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbGlzdEluZGV4ID09IDA7CisgICAgcmV0dXJuICFsaXN0SW5kZXg7CiB9CiAK
LWJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppdGVtSXNTZWxlY3RlZCh1bnNpZ25l
ZCkgY29uc3QKK2Jvb2wgUmVuZGVyU2VhcmNoRmllbGQ6Oml0ZW1Jc1NlbGVjdGVkKHVuc2lnbmVk
KSBjb25zdAogewogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OnNldFRleHRGcm9tSXRlbSh1bnNpZ25lZCBsaXN0SW5kZXgpCit2b2lkIFJl
bmRlclNlYXJjaEZpZWxkOjpzZXRUZXh0RnJvbUl0ZW0odW5zaWduZWQgbGlzdEluZGV4KQogewog
ICAgIGlucHV0RWxlbWVudCgpLT5zZXRWYWx1ZShpdGVtVGV4dChsaXN0SW5kZXgpKTsKIH0KIAot
Rm9udFNlbGVjdG9yKiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmZvbnRTZWxlY3Rvcigp
IGNvbnN0CitGb250U2VsZWN0b3IqIFJlbmRlclNlYXJjaEZpZWxkOjpmb250U2VsZWN0b3IoKSBj
b25zdAogewogICAgIHJldHVybiBkb2N1bWVudCgpLT5zdHlsZVJlc29sdmVyKCktPmZvbnRTZWxl
Y3RvcigpOwogfQogCi1Ib3N0V2luZG93KiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Omhv
c3RXaW5kb3coKSBjb25zdAorSG9zdFdpbmRvdyogUmVuZGVyU2VhcmNoRmllbGQ6Omhvc3RXaW5k
b3coKSBjb25zdAogewogICAgIHJldHVybiBkb2N1bWVudCgpLT52aWV3KCktPmhvc3RXaW5kb3co
KTsKIH0KIAotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmF1dG9zY3JvbGwoKQot
ewotICAgIFJlbmRlckxheWVyKiBsYXllciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVyQm94
KCktPmxheWVyKCk7Ci0gICAgaWYgKGxheWVyKQotICAgICAgICBsYXllci0+YXV0b3Njcm9sbCgp
OwotfQotCi1pbnQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzY3JvbGxXaWR0aCgpIGNv
bnN0Ci17Ci0gICAgaWYgKGlubmVyVGV4dEVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGlubmVy
VGV4dEVsZW1lbnQoKS0+c2Nyb2xsV2lkdGgoKTsKLSAgICByZXR1cm4gUmVuZGVyQmxvY2s6OnNj
cm9sbFdpZHRoKCk7Ci19CiAKLWludCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNjcm9s
bEhlaWdodCgpIGNvbnN0Ci17Ci0gICAgaWYgKGlubmVyVGV4dEVsZW1lbnQoKSkKLSAgICAgICAg
cmV0dXJuIGlubmVyVGV4dEVsZW1lbnQoKS0+c2Nyb2xsSGVpZ2h0KCk7Ci0gICAgcmV0dXJuIFJl
bmRlckJsb2NrOjpzY3JvbGxIZWlnaHQoKTsKLX0KLQotaW50IFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6c2Nyb2xsTGVmdCgpIGNvbnN0Ci17Ci0gICAgaWYgKGlubmVyVGV4dEVsZW1lbnQo
KSkKLSAgICAgICAgcmV0dXJuIGlubmVyVGV4dEVsZW1lbnQoKS0+c2Nyb2xsTGVmdCgpOwotICAg
IHJldHVybiBSZW5kZXJCbG9jazo6c2Nyb2xsTGVmdCgpOwotfQotCi1pbnQgUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lOjpzY3JvbGxUb3AoKSBjb25zdAotewotICAgIGlmIChpbm5lclRleHRF
bGVtZW50KCkpCi0gICAgICAgIHJldHVybiBpbm5lclRleHRFbGVtZW50KCktPnNjcm9sbFRvcCgp
OwotICAgIHJldHVybiBSZW5kZXJCbG9jazo6c2Nyb2xsVG9wKCk7Ci19Ci0KLXZvaWQgUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzZXRTY3JvbGxMZWZ0KGludCBuZXdMZWZ0KQotewotICAg
IGlmIChpbm5lclRleHRFbGVtZW50KCkpCi0gICAgICAgIGlubmVyVGV4dEVsZW1lbnQoKS0+c2V0
U2Nyb2xsTGVmdChuZXdMZWZ0KTsKLX0KLQotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmU6OnNldFNjcm9sbFRvcChpbnQgbmV3VG9wKQotewotICAgIGlmIChpbm5lclRleHRFbGVtZW50
KCkpCi0gICAgICAgIGlubmVyVGV4dEVsZW1lbnQoKS0+c2V0U2Nyb2xsVG9wKG5ld1RvcCk7Ci19
Ci0KLWJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzY3JvbGwoU2Nyb2xsRGlyZWN0
aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRp
cGxpZXIsIE5vZGUqKiBzdG9wTm9kZSkKLXsKLSAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBpbm5l
clRleHRFbGVtZW50KCktPnJlbmRlckJveCgpLT5sYXllcigpOwotICAgIGlmIChsYXllciAmJiBs
YXllci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gUmVuZGVyQmxvY2s6OnNjcm9sbChkaXJlY3Rpb24s
IGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyLCBzdG9wTm9kZSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lOjpsb2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24g
ZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGll
ciwgTm9kZSoqIHN0b3BOb2RlKQotewotICAgIFJlbmRlckxheWVyKiBsYXllciA9IGlubmVyVGV4
dEVsZW1lbnQoKS0+cmVuZGVyQm94KCktPmxheWVyKCk7Ci0gICAgaWYgKGxheWVyICYmIGxheWVy
LT5zY3JvbGwobG9naWNhbFRvUGh5c2ljYWwoZGlyZWN0aW9uLCBzdHlsZSgpLT5pc0hvcml6b250
YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwg
Z3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1
cm4gUmVuZGVyQmxvY2s6OmxvZ2ljYWxTY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVs
dGlwbGllciwgc3RvcE5vZGUpOwotfQotCi1QYXNzUmVmUHRyPFNjcm9sbGJhcj4gUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lOjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEqIHNjcm9s
bGFibGVBcmVhLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29u
dHJvbFNpemUgY29udHJvbFNpemUpCitQYXNzUmVmUHRyPFNjcm9sbGJhcj4gUmVuZGVyU2VhcmNo
RmllbGQ6OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEsIFNj
cm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250
cm9sU2l6ZSkKIHsKICAgICBSZWZQdHI8U2Nyb2xsYmFyPiB3aWRnZXQ7CiAgICAgYm9vbCBoYXND
dXN0b21TY3JvbGxiYXJTdHlsZSA9IHN0eWxlKCktPmhhc1BzZXVkb1N0eWxlKFNDUk9MTEJBUik7
CkBAIC03NTIsOSArMjk4LDIzIEBAIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxhYmxlQXJlCiAgICAgcmV0dXJu
IHdpZGdldC5yZWxlYXNlKCk7CiB9CiAKLUhUTUxJbnB1dEVsZW1lbnQqIFJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6aW5wdXRFbGVtZW50KCkgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyU2Vh
cmNoRmllbGQ6OmNvbXB1dGVIZWlnaHRMaW1pdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhlaWdo
dCgpOworfQorCit2b2lkIFJlbmRlclNlYXJjaEZpZWxkOjpjZW50ZXJDb250YWluZXJJZk5lZWRl
ZChSZW5kZXJCb3gqIGNvbnRhaW5lclJlbmRlcmVyKSBjb25zdAogewotICAgIHJldHVybiBub2Rl
KCktPnRvSW5wdXRFbGVtZW50KCk7CisgICAgaWYgKCFjb250YWluZXJSZW5kZXJlcikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKGNvbnRhaW5lclJlbmRlcmVyLT5oZWlnaHQoKSA8PSBjb250
ZW50SGVpZ2h0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEEgcXVpcmsgZm9yIGZpbmQt
aW4tcGFnZSBib3ggb24gU2FmYXJpIFdpbmRvd3MuCisgICAgLy8gaHR0cDovL3dlYmtpdC5vcmcv
Yi82MzE1NworICAgIExheW91dFVuaXQgaGVpZ2h0RGlmZiA9IGNvbnRhaW5lclJlbmRlcmVyLT5o
ZWlnaHQoKSAtIGNvbnRlbnRIZWlnaHQoKTsKKyAgICBjb250YWluZXJSZW5kZXJlci0+c2V0WShj
b250YWluZXJSZW5kZXJlci0+eSgpIC0gKGhlaWdodERpZmYgLyAyICsgbGF5b3V0TW9kKGhlaWdo
dERpZmYsIDIpKSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTZWFyY2hGaWVsZC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNl
YXJjaEZpZWxkLmgKaW5kZXggNmUyMWM4NTZjMTBmYTlmYmE0MzZjMDZmNzQ5YzE0ZTFlMmE4MGJh
Ni4uYjcwOGJmM2Q1YmI4ZTI2ZTI1N2YwYTQyYjc2MjgzYWFmYjg1MTE3NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmgKQEAgLTIwLDI1ICsyMCwyMSBA
QAogICoKICAqLwogCi0jaWZuZGVmIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZV9oCi0jZGVm
aW5lIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZV9oCisjaWZuZGVmIFJlbmRlclNlYXJjaEZp
ZWxkX2gKKyNkZWZpbmUgUmVuZGVyU2VhcmNoRmllbGRfaAogCiAjaW5jbHVkZSAiUG9wdXBNZW51
Q2xpZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2wuaCIKKyNpbmNsdWRlICJSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBIVE1MSW5wdXRFbGVtZW50OwogY2xhc3MgU2VhcmNoUG9wdXBNZW51OwogCi1jbGFzcyBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUgOiBwdWJsaWMgUmVuZGVyVGV4dENvbnRyb2wsIHByaXZh
dGUgUG9wdXBNZW51Q2xpZW50IHsKK2NsYXNzIFJlbmRlclNlYXJjaEZpZWxkIDogcHVibGljIFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZSwgcHJpdmF0ZSBQb3B1cE1lbnVDbGllbnQgewogcHVi
bGljOgotICAgIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShOb2RlKik7Ci0gICAgdmlydHVh
bCB+UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKCk7Ci0gICAgLy8gRklYTUU6IE1vdmUgY3Jl
YXRlKlN0eWxlKCkgdG8gdGhlaXIgY2xhc3Nlcy4KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UmVu
ZGVyU3R5bGU+IGNyZWF0ZUlubmVyVGV4dFN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBzdGFydFN0
eWxlKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBjcmVhdGVJbm5lckJsb2Nr
U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUpIGNvbnN0OwotICAgIHZvaWQgdXBk
YXRlQ2FuY2VsQnV0dG9uVmlzaWJpbGl0eSgpIGNvbnN0OworICAgIFJlbmRlclNlYXJjaEZpZWxk
KE5vZGUqKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJTZWFyY2hGaWVsZCgpOwogCiAgICAgdm9pZCBh
ZGRTZWFyY2hSZXN1bHQoKTsKICAgICB2b2lkIHN0b3BTZWFyY2hFdmVudFRpbWVyKCk7CkBAIC00
Nyw0MyArNDMsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzaG93UG9wdXAoKTsKICAgICB2b2lkIGhp
ZGVQb3B1cCgpOwogCi0gICAgdm9pZCBjYXBzTG9ja1N0YXRlTWF5SGF2ZUNoYW5nZWQoKTsKLQog
cHJpdmF0ZToKLSAgICB2aXJ0dWFsIGJvb2wgaGFzQ29udHJvbENsaXAoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIExheW91dFJlY3QgY29udHJvbENsaXBSZWN0KGNvbnN0IExheW91dFBvaW50JikgY29u
c3Q7Ci0gICAgdmlydHVhbCBib29sIGlzVGV4dEZpZWxkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQotCi0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50
Jik7Ci0gICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwotCi0gICAgdmlydHVhbCBib29sIG5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91
dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRP
ZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwotCi0gICAgdmlydHVhbCB2b2lkIGF1dG9zY3JvbGwoKTsK
LQotICAgIC8vIFN1YmNsYXNzZWQgdG8gZm9yd2FyZCB0byBvdXIgaW5uZXIgZGl2LgotICAgIHZp
cnR1YWwgaW50IHNjcm9sbExlZnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBzY3JvbGxUb3Ao
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBzY3JvbGxXaWR0aCgpIGNvbnN0OwotICAgIHZpcnR1
YWwgaW50IHNjcm9sbEhlaWdodCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxM
ZWZ0KGludCk7Ci0gICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbFRvcChpbnQpOwotICAgIHZpcnR1
YWwgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQg
bXVsdGlwbGllciA9IDEsIE5vZGUqKiBzdG9wTm9kZSA9IDApOwotICAgIHZpcnR1YWwgYm9vbCBs
b2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBm
bG9hdCBtdWx0aXBsaWVyID0gMSwgTm9kZSoqIHN0b3BOb2RlID0gMCk7Ci0KLSAgICBpbnQgdGV4
dEJsb2NrV2lkdGgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGZsb2F0IGdldEF2Z0NoYXJXaWR0aChB
dG9taWNTdHJpbmcgZmFtaWx5KTsKLSAgICB2aXJ0dWFsIExheW91dFVuaXQgcHJlZmVycmVkQ29u
dGVudFdpZHRoKGZsb2F0IGNoYXJXaWR0aCkgY29uc3Q7Ci0gICAgdmlydHVhbCBMYXlvdXRVbml0
IGNvbXB1dGVDb250cm9sSGVpZ2h0KExheW91dFVuaXQgbGluZUhlaWdodCwgTGF5b3V0VW5pdCBu
b25Db250ZW50SGVpZ2h0KSBjb25zdCBPVkVSUklERTsKLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlRnJvbUVsZW1lbnQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5
bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwotCi0gICAgdmlydHVh
bCBSZW5kZXJTdHlsZSogdGV4dEJhc2VTdHlsZSgpIGNvbnN0OwotCi0gICAgRVZpc2liaWxpdHkg
dmlzaWJpbGl0eUZvckNhbmNlbEJ1dHRvbigpIGNvbnN0OwotICAgIGJvb2wgdGV4dFNob3VsZEJl
VHJ1bmNhdGVkKCkgY29uc3Q7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdXRvc2F2ZU5hbWUo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIExheW91dFVuaXQgY29tcHV0ZUhlaWdodExpbWl0KCkgY29u
c3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNlbnRlckNvbnRhaW5lcklmTmVlZGVkKFJl
bmRlckJveCopIGNvbnN0IE9WRVJSSURFOwogCiAgICAgLy8gUG9wdXBNZW51Q2xpZW50IG1ldGhv
ZHMKICAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCwgYm9v
bCBmaXJlRXZlbnRzID0gdHJ1ZSkgT1ZFUlJJREU7CkBAIC0xMTQsNDIgKzc2LDE5IEBAIHByaXZh
dGU6CiAgICAgdmlydHVhbCBIb3N0V2luZG93KiBob3N0V2luZG93KCkgY29uc3QgT1ZFUlJJREU7
CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFNjcm9s
bGFibGVBcmVhKiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplKSBP
VkVSUklERTsKIAotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCgpIGNvbnN0Owot
Ci0gICAgSFRNTEVsZW1lbnQqIGNvbnRhaW5lckVsZW1lbnQoKSBjb25zdDsKLSAgICBIVE1MRWxl
bWVudCogaW5uZXJCbG9ja0VsZW1lbnQoKSBjb25zdDsKLSAgICBIVE1MRWxlbWVudCogaW5uZXJT
cGluQnV0dG9uRWxlbWVudCgpIGNvbnN0OwotICAgIEhUTUxFbGVtZW50KiByZXN1bHRzQnV0dG9u
RWxlbWVudCgpIGNvbnN0OwotICAgIEhUTUxFbGVtZW50KiBjYW5jZWxCdXR0b25FbGVtZW50KCkg
Y29uc3Q7Ci0KICAgICBib29sIG1fc2VhcmNoUG9wdXBJc1Zpc2libGU7Ci0gICAgYm9vbCBtX3No
b3VsZERyYXdDYXBzTG9ja0luZGljYXRvcjsKLSAgICBMYXlvdXRVbml0IG1fZGVzaXJlZElubmVy
VGV4dEhlaWdodDsKICAgICBSZWZQdHI8U2VhcmNoUG9wdXBNZW51PiBtX3NlYXJjaFBvcHVwOwog
ICAgIFZlY3RvcjxTdHJpbmc+IG1fcmVjZW50U2VhcmNoZXM7CiB9OwogCi1pbmxpbmUgUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lKiB0b1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShSZW5k
ZXJPYmplY3QqIG9iamVjdCkKK2lubGluZSBSZW5kZXJTZWFyY2hGaWVsZCogdG9SZW5kZXJTZWFy
Y2hGaWVsZChSZW5kZXJPYmplY3QqIG9iamVjdCkKIHsKICAgICBBU1NFUlQoIW9iamVjdCB8fCBv
YmplY3QtPmlzVGV4dEZpZWxkKCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmUqPihvYmplY3QpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5k
ZXJTZWFyY2hGaWVsZCo+KG9iamVjdCk7CiB9CiAKIC8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUg
ZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KLXZvaWQgdG9SZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmUoY29uc3QgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKik7Ci0KLS8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgUmVuZGVyVGV4dENvbnRyb2xJbm5lckJsb2Nr
IDogcHVibGljIFJlbmRlckJsb2NrIHsKLXB1YmxpYzoKLSAgICBSZW5kZXJUZXh0Q29udHJvbElu
bmVyQmxvY2soTm9kZSogbm9kZSwgYm9vbCBpc011bHRpTGluZSkgOiBSZW5kZXJCbG9jayhub2Rl
KSwgbV9tdWx0aUxpbmUoaXNNdWx0aUxpbmUpIHsgfQotCi1wcml2YXRlOgotICAgIHZpcnR1YWwg
Ym9vbCBoYXNMaW5lSWZFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFs
IFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50Jik7Ci0K
LSAgICBib29sIG1fbXVsdGlMaW5lOwotfTsKK3ZvaWQgdG9SZW5kZXJTZWFyY2hGaWVsZChjb25z
dCBSZW5kZXJTZWFyY2hGaWVsZCopOwogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKaW5kZXggODQ4ZmMy
MTE5N2MyYTdkMjRmMjY0OGRmNzAyMDUyOWYzYzg4MGQzYi4uMDg5ODdjM2EzZjk0MTJkYTJmMjZk
NmQ2NjYwNWNjNTM1ZTFjY2UxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKQEAgLTMwLDcgKzMwLDYgQEAK
ICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVk
ZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJMb2Nh
bGl6ZWRTdHJpbmdzLmgiCkBAIC0zOSw3ICszOCw2IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIu
aCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5o
IgotI2luY2x1ZGUgIlNlYXJjaFBvcHVwTWVudS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAj
aW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCkBA
IC03MCwxMCArNjgsOCBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyVGV4dENvbnRyb2xJbm5lckJs
b2NrOjpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JgogCiBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShOb2RlKiBub2RlKQog
ICAgIDogUmVuZGVyVGV4dENvbnRyb2wobm9kZSkKLSAgICAsIG1fc2VhcmNoUG9wdXBJc1Zpc2li
bGUoZmFsc2UpCiAgICAgLCBtX3Nob3VsZERyYXdDYXBzTG9ja0luZGljYXRvcihmYWxzZSkKICAg
ICAsIG1fZGVzaXJlZElubmVyVGV4dEhlaWdodCgtMSkKLSAgICAsIG1fc2VhcmNoUG9wdXAoMCkK
IHsKICAgICBBU1NFUlQobm9kZS0+aXNIVE1MRWxlbWVudCgpKTsKICAgICBBU1NFUlQobm9kZS0+
dG9JbnB1dEVsZW1lbnQoKSk7CkBAIC04MSwyMCArNzcsNiBAQCBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShOb2RlKiBub2RlKQogCiBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6On5SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUoKQog
ewotICAgIGlmIChtX3NlYXJjaFBvcHVwKSB7Ci0gICAgICAgIG1fc2VhcmNoUG9wdXAtPnBvcHVw
TWVudSgpLT5kaXNjb25uZWN0Q2xpZW50KCk7Ci0gICAgICAgIG1fc2VhcmNoUG9wdXAgPSAwOwot
ICAgIH0KLX0KLQotaW5saW5lIEhUTUxFbGVtZW50KiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmU6OmNvbnRhaW5lckVsZW1lbnQoKSBjb25zdAotewotICAgIHJldHVybiBpbnB1dEVsZW1lbnQo
KS0+Y29udGFpbmVyRWxlbWVudCgpOwotfQotCi1pbmxpbmUgSFRNTEVsZW1lbnQqIFJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZTo6aW5uZXJCbG9ja0VsZW1lbnQoKSBjb25zdAotewotICAgIHJl
dHVybiBpbnB1dEVsZW1lbnQoKS0+aW5uZXJCbG9ja0VsZW1lbnQoKTsKIH0KIAogaW5saW5lIEhU
TUxFbGVtZW50KiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmlubmVyU3BpbkJ1dHRvbkVs
ZW1lbnQoKSBjb25zdApAQCAtMTE4LDcyICsxMDAsNiBAQCBSZW5kZXJTdHlsZSogUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lOjp0ZXh0QmFzZVN0eWxlKCkgY29uc3QKICAgICByZXR1cm4gaW5u
ZXJCbG9jayA/IGlubmVyQmxvY2stPnJlbmRlcmVyKCktPnN0eWxlKCkgOiBzdHlsZSgpOwogfQog
Ci12b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6YWRkU2VhcmNoUmVzdWx0KCkKLXsK
LSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IGlucHV0RWxlbWVudCgpOwotICAgIGlmIChp
bnB1dC0+bWF4UmVzdWx0cygpIDw9IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIFN0cmluZyB2
YWx1ZSA9IGlucHV0LT52YWx1ZSgpOwotICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50KCktPnNldHRpbmdz
KCk7Ci0gICAgaWYgKCFzZXR0aW5ncyB8fCBzZXR0aW5ncy0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQgc2l6ZSA9IHN0YXRpY19jYXN0PGludD4o
bV9yZWNlbnRTZWFyY2hlcy5zaXplKCkpOwotICAgIGZvciAoaW50IGkgPSBzaXplIC0gMTsgaSA+
PSAwOyAtLWkpIHsKLSAgICAgICAgaWYgKG1fcmVjZW50U2VhcmNoZXNbaV0gPT0gdmFsdWUpCi0g
ICAgICAgICAgICBtX3JlY2VudFNlYXJjaGVzLnJlbW92ZShpKTsKLSAgICB9Ci0KLSAgICBtX3Jl
Y2VudFNlYXJjaGVzLmluc2VydCgwLCB2YWx1ZSk7Ci0gICAgd2hpbGUgKHN0YXRpY19jYXN0PGlu
dD4obV9yZWNlbnRTZWFyY2hlcy5zaXplKCkpID4gaW5wdXQtPm1heFJlc3VsdHMoKSkKLSAgICAg
ICAgbV9yZWNlbnRTZWFyY2hlcy5yZW1vdmVMYXN0KCk7Ci0KLSAgICBjb25zdCBBdG9taWNTdHJp
bmcmIG5hbWUgPSBhdXRvc2F2ZU5hbWUoKTsKLSAgICBpZiAoIW1fc2VhcmNoUG9wdXApCi0gICAg
ICAgIG1fc2VhcmNoUG9wdXAgPSBkb2N1bWVudCgpLT5wYWdlKCktPmNocm9tZSgpLT5jcmVhdGVT
ZWFyY2hQb3B1cE1lbnUodGhpcyk7Ci0KLSAgICBtX3NlYXJjaFBvcHVwLT5zYXZlUmVjZW50U2Vh
cmNoZXMobmFtZSwgbV9yZWNlbnRTZWFyY2hlcyk7Ci19Ci0KLXZvaWQgUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjpzaG93UG9wdXAoKQotewotICAgIGlmIChtX3NlYXJjaFBvcHVwSXNWaXNp
YmxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fc2VhcmNoUG9wdXApCi0gICAgICAg
IG1fc2VhcmNoUG9wdXAgPSBkb2N1bWVudCgpLT5wYWdlKCktPmNocm9tZSgpLT5jcmVhdGVTZWFy
Y2hQb3B1cE1lbnUodGhpcyk7Ci0KLSAgICBpZiAoIW1fc2VhcmNoUG9wdXAtPmVuYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zZWFyY2hQb3B1cElzVmlzaWJsZSA9IHRydWU7Ci0K
LSAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUgPSBhdXRvc2F2ZU5hbWUoKTsKLSAgICBtX3Nl
YXJjaFBvcHVwLT5sb2FkUmVjZW50U2VhcmNoZXMobmFtZSwgbV9yZWNlbnRTZWFyY2hlcyk7Ci0K
LSAgICAvLyBUcmltIHRoZSByZWNlbnQgc2VhcmNoZXMgbGlzdCBpZiB0aGUgbWF4aW11bSBzaXpl
IGhhcyBjaGFuZ2VkIHNpbmNlIHdlIGxhc3Qgc2F2ZWQuCi0gICAgSFRNTElucHV0RWxlbWVudCog
aW5wdXQgPSBpbnB1dEVsZW1lbnQoKTsKLSAgICBpZiAoc3RhdGljX2Nhc3Q8aW50PihtX3JlY2Vu
dFNlYXJjaGVzLnNpemUoKSkgPiBpbnB1dC0+bWF4UmVzdWx0cygpKSB7Ci0gICAgICAgIGRvIHsK
LSAgICAgICAgICAgIG1fcmVjZW50U2VhcmNoZXMucmVtb3ZlTGFzdCgpOwotICAgICAgICB9IHdo
aWxlIChzdGF0aWNfY2FzdDxpbnQ+KG1fcmVjZW50U2VhcmNoZXMuc2l6ZSgpKSA+IGlucHV0LT5t
YXhSZXN1bHRzKCkpOwotCi0gICAgICAgIG1fc2VhcmNoUG9wdXAtPnNhdmVSZWNlbnRTZWFyY2hl
cyhuYW1lLCBtX3JlY2VudFNlYXJjaGVzKTsKLSAgICB9Ci0KLSAgICBtX3NlYXJjaFBvcHVwLT5w
b3B1cE1lbnUoKS0+c2hvdyhwaXhlbFNuYXBwZWRJbnRSZWN0KGFic29sdXRlQm91bmRpbmdCb3hS
ZWN0KCkpLCBkb2N1bWVudCgpLT52aWV3KCksIC0xKTsKLX0KLQotdm9pZCBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OmhpZGVQb3B1cCgpCi17Ci0gICAgaWYgKG1fc2VhcmNoUG9wdXApCi0g
ICAgICAgIG1fc2VhcmNoUG9wdXAtPnBvcHVwTWVudSgpLT5oaWRlKCk7Ci19Ci0KIHZvaWQgUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogewogICAgIFJlbmRlclRleHRDb250cm9sOjpw
YWludChwYWludEluZm8sIHBhaW50T2Zmc2V0KTsKQEAgLTIwMCw2ICsxMTYsMTEgQEAgdm9pZCBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBMYXlvdXRQb2ludCYKICAgICB9CiB9CiAKK0xheW91dFVuaXQgUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjpjb21wdXRlSGVpZ2h0TGltaXQoKSBjb25zdAoreworICAgIHJldHVybiBj
b250YWluZXJFbGVtZW50KCkgPyBjb250ZW50SGVpZ2h0KCkgOiBoZWlnaHQoKTsKK30KKwogdm9p
ZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmxheW91dCgpCiB7CiAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCByZW1vdmUgdGhlIGhlaWdodC1yZWxhdGVkIGhhY2tzIGluIGxheW91dCgpIGFu
ZApAQCAtMjI1LDcgKzE0Niw3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjps
YXlvdXQoKQogICAgIExheW91dFVuaXQgZGVzaXJlZEhlaWdodCA9IHRleHRCbG9ja0hlaWdodCgp
OwogICAgIExheW91dFVuaXQgY3VycmVudEhlaWdodCA9IGlubmVyVGV4dFJlbmRlcmVyLT5oZWln
aHQoKTsKIAotICAgIExheW91dFVuaXQgaGVpZ2h0TGltaXQgPSAoaW5wdXRFbGVtZW50KCktPmlz
U2VhcmNoRmllbGQoKSB8fCAhY29udGFpbmVyKSA/IGhlaWdodCgpIDogY29udGVudEhlaWdodCgp
OworICAgIExheW91dFVuaXQgaGVpZ2h0TGltaXQgPSBjb21wdXRlSGVpZ2h0TGltaXQoKTsKICAg
ICBpZiAoY3VycmVudEhlaWdodCA+IGhlaWdodExpbWl0KSB7CiAgICAgICAgIGlmIChkZXNpcmVk
SGVpZ2h0ICE9IGN1cnJlbnRIZWlnaHQpCiAgICAgICAgICAgICBzZXROZWVkc0xheW91dCh0cnVl
LCBNYXJrT25seVRoaXMpOwpAQCAtMjU4LDEyICsxNzksOCBAQCB2b2lkIFJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6bGF5b3V0KCkKICAgICBpZiAoIWNvbnRhaW5lciAmJiBjdXJyZW50SGVp
Z2h0ICE9IGNvbnRlbnRIZWlnaHQoKSkgewogICAgICAgICBMYXlvdXRVbml0IGhlaWdodERpZmYg
PSBjdXJyZW50SGVpZ2h0IC0gY29udGVudEhlaWdodCgpOwogICAgICAgICBpbm5lclRleHRSZW5k
ZXJlci0+c2V0WShpbm5lclRleHRSZW5kZXJlci0+eSgpIC0gKGhlaWdodERpZmYgLyAyICsgbGF5
b3V0TW9kKGhlaWdodERpZmYsIDIpKSk7Ci0gICAgfSBlbHNlIGlmIChpbnB1dEVsZW1lbnQoKS0+
aXNTZWFyY2hGaWVsZCgpICYmIGNvbnRhaW5lclJlbmRlcmVyICYmIGNvbnRhaW5lclJlbmRlcmVy
LT5oZWlnaHQoKSA+IGNvbnRlbnRIZWlnaHQoKSkgewotICAgICAgICAvLyBBIHF1aXJrIGZvciBm
aW5kLWluLXBhZ2UgYm94IG9uIFNhZmFyaSBXaW5kb3dzLgotICAgICAgICAvLyBodHRwOi8vd2Vi
a2l0Lm9yZy9iLzYzMTU3Ci0gICAgICAgIExheW91dFVuaXQgaGVpZ2h0RGlmZiA9IGNvbnRhaW5l
clJlbmRlcmVyLT5oZWlnaHQoKSAtIGNvbnRlbnRIZWlnaHQoKTsKLSAgICAgICAgY29udGFpbmVy
UmVuZGVyZXItPnNldFkoY29udGFpbmVyUmVuZGVyZXItPnkoKSAtIChoZWlnaHREaWZmIC8gMiAr
IGxheW91dE1vZChoZWlnaHREaWZmLCAyKSkpOwotICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAg
Y2VudGVyQ29udGFpbmVySWZOZWVkZWQoY29udGFpbmVyUmVuZGVyZXIpOwogCiAgICAgLy8gSWdu
b3JlcyB0aGUgcGFkZGluZ3MgZm9yIHRoZSBpbm5lciBzcGluIGJ1dHRvbi4KICAgICBpZiAoUmVu
ZGVyQm94KiBpbm5lclNwaW5Cb3ggPSBpbm5lclNwaW5CdXR0b25FbGVtZW50KCkgPyBpbm5lclNw
aW5CdXR0b25FbGVtZW50KCktPnJlbmRlckJveCgpIDogMCkgewpAQCAtNDUzLDkgKzM3MCw2IEBA
IHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp1cGRhdGVGcm9tRWxlbWVudCgpCiAK
ICAgICBpZiAoY2FuY2VsQnV0dG9uRWxlbWVudCgpKQogICAgICAgICB1cGRhdGVDYW5jZWxCdXR0
b25WaXNpYmlsaXR5KCk7Ci0KLSAgICBpZiAobV9zZWFyY2hQb3B1cElzVmlzaWJsZSkKLSAgICAg
ICAgbV9zZWFyY2hQb3B1cC0+cG9wdXBNZW51KCktPnVwZGF0ZUZyb21FbGVtZW50KCk7CiB9CiAK
IFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y3Jl
YXRlSW5uZXJUZXh0U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUpIGNvbnN0CkBA
IC01MjgsMTU2ICs0NDIsNiBAQCBjb25zdCBBdG9taWNTdHJpbmcmIFJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZTo6YXV0b3NhdmVOYW1lKCkgY29uc3QKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
RWxlbWVudCo+KG5vZGUoKSktPmdldEF0dHJpYnV0ZShhdXRvc2F2ZUF0dHIpOwogfQogCi0vLyBQ
b3B1cE1lbnVDbGllbnQgbWV0aG9kcwotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6
OnZhbHVlQ2hhbmdlZCh1bnNpZ25lZCBsaXN0SW5kZXgsIGJvb2wgZmlyZUV2ZW50cykKLXsKLSAg
ICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihsaXN0SW5kZXgpIDwgbGlzdFNpemUoKSk7Ci0gICAg
SFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBpbnB1dEVsZW1lbnQoKTsKLSAgICBpZiAoc3RhdGlj
X2Nhc3Q8aW50PihsaXN0SW5kZXgpID09IChsaXN0U2l6ZSgpIC0gMSkpIHsKLSAgICAgICAgaWYg
KGZpcmVFdmVudHMpIHsKLSAgICAgICAgICAgIG1fcmVjZW50U2VhcmNoZXMuY2xlYXIoKTsKLSAg
ICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSA9IGF1dG9zYXZlTmFtZSgpOwotICAg
ICAgICAgICAgaWYgKCFuYW1lLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGlmICghbV9z
ZWFyY2hQb3B1cCkKLSAgICAgICAgICAgICAgICAgICAgbV9zZWFyY2hQb3B1cCA9IGRvY3VtZW50
KCktPnBhZ2UoKS0+Y2hyb21lKCktPmNyZWF0ZVNlYXJjaFBvcHVwTWVudSh0aGlzKTsKLSAgICAg
ICAgICAgICAgICBtX3NlYXJjaFBvcHVwLT5zYXZlUmVjZW50U2VhcmNoZXMobmFtZSwgbV9yZWNl
bnRTZWFyY2hlcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAg
ICAgICBpbnB1dC0+c2V0VmFsdWUoaXRlbVRleHQobGlzdEluZGV4KSk7Ci0gICAgICAgIGlmIChm
aXJlRXZlbnRzKQotICAgICAgICAgICAgaW5wdXQtPm9uU2VhcmNoKCk7Ci0gICAgICAgIGlucHV0
LT5zZWxlY3QoKTsKLSAgICB9Ci19Ci0KLVN0cmluZyBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmU6Oml0ZW1UZXh0KHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKLXsKLSAgICBpbnQgc2l6ZSA9
IGxpc3RTaXplKCk7Ci0gICAgaWYgKHNpemUgPT0gMSkgewotICAgICAgICBBU1NFUlQoIWxpc3RJ
bmRleCk7Ci0gICAgICAgIHJldHVybiBzZWFyY2hNZW51Tm9SZWNlbnRTZWFyY2hlc1RleHQoKTsK
LSAgICB9Ci0gICAgaWYgKCFsaXN0SW5kZXgpCi0gICAgICAgIHJldHVybiBzZWFyY2hNZW51UmVj
ZW50U2VhcmNoZXNUZXh0KCk7Ci0gICAgaWYgKGl0ZW1Jc1NlcGFyYXRvcihsaXN0SW5kZXgpKQot
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgaWYgKHN0YXRpY19jYXN0PGludD4obGlzdElu
ZGV4KSA9PSAoc2l6ZSAtIDEpKQotICAgICAgICByZXR1cm4gc2VhcmNoTWVudUNsZWFyUmVjZW50
U2VhcmNoZXNUZXh0KCk7Ci0gICAgcmV0dXJuIG1fcmVjZW50U2VhcmNoZXNbbGlzdEluZGV4IC0g
MV07Ci19Ci0KLVN0cmluZyBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Oml0ZW1MYWJlbCh1
bnNpZ25lZCkgY29uc3QKLXsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Oml0ZW1JY29uKHVuc2lnbmVkKSBjb25zdAotewotICAg
IHJldHVybiBTdHJpbmcoKTsKLX0KLQotYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6
Oml0ZW1Jc0VuYWJsZWQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAotewotICAgICBpZiAoIWxp
c3RJbmRleCB8fCBpdGVtSXNTZXBhcmF0b3IobGlzdEluZGV4KSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1Qb3B1cE1lbnVTdHlsZSBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6Oml0ZW1TdHlsZSh1bnNpZ25lZCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bWVudVN0eWxlKCk7Ci19Ci0KLVBvcHVwTWVudVN0eWxlIFJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZTo6bWVudVN0eWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gUG9wdXBNZW51U3R5bGUoc3R5
bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBzdHlsZSgpLT52
aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLCBzdHlsZSgp
LT5mb250KCksIHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFLAotICAgICAgICBzdHls
ZSgpLT5kaXNwbGF5KCkgPT0gTk9ORSwgc3R5bGUoKS0+dGV4dEluZGVudCgpLCBzdHlsZSgpLT5k
aXJlY3Rpb24oKSwgaXNPdmVycmlkZShzdHlsZSgpLT51bmljb2RlQmlkaSgpKSk7Ci19Ci0KLWlu
dCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNsaWVudEluc2V0TGVmdCgpIGNvbnN0Ci17
Ci0gICAgLy8gSW5zZXQgdGhlIG1lbnUgYnkgdGhlIHJhZGl1cyBvZiB0aGUgY2FwIG9uIHRoZSBs
ZWZ0IHNvIHRoYXQKLSAgICAvLyBpdCBvbmx5IHJ1bnMgYWxvbmcgdGhlIHN0cmFpZ2h0IHBhcnQg
b2YgdGhlIGJlemVsLgotICAgIHJldHVybiBoZWlnaHQoKSAvIDI7Ci19Ci0KLWludCBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNsaWVudEluc2V0UmlnaHQoKSBjb25zdAotewotICAgIC8v
IEluc2V0IHRoZSBtZW51IGJ5IHRoZSByYWRpdXMgb2YgdGhlIGNhcCBvbiB0aGUgcmlnaHQgc28g
dGhhdAotICAgIC8vIGl0IG9ubHkgcnVucyBhbG9uZyB0aGUgc3RyYWlnaHQgcGFydCBvZiB0aGUg
YmV6ZWwgKHVubGVzcyBpdCBuZWVkcwotICAgIC8vIHRvIGJlIHdpZGVyKS4KLSAgICByZXR1cm4g
aGVpZ2h0KCkgLyAyOwotfQotCi1MYXlvdXRVbml0IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6Y2xpZW50UGFkZGluZ0xlZnQoKSBjb25zdAotewotICAgIExheW91dFVuaXQgcGFkZGluZyA9
IHBhZGRpbmdMZWZ0KCk7Ci0gICAgaWYgKFJlbmRlckJveCogYm94ID0gaW5uZXJCbG9ja0VsZW1l
bnQoKSA/IGlubmVyQmxvY2tFbGVtZW50KCktPnJlbmRlckJveCgpIDogMCkKLSAgICAgICAgcGFk
ZGluZyArPSBib3gtPngoKTsKLSAgICByZXR1cm4gcGFkZGluZzsKLX0KLQotTGF5b3V0VW5pdCBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNsaWVudFBhZGRpbmdSaWdodCgpIGNvbnN0Ci17
Ci0gICAgTGF5b3V0VW5pdCBwYWRkaW5nID0gcGFkZGluZ1JpZ2h0KCk7Ci0gICAgaWYgKFJlbmRl
ckJveCogY29udGFpbmVyQm94ID0gY29udGFpbmVyRWxlbWVudCgpID8gY29udGFpbmVyRWxlbWVu
dCgpLT5yZW5kZXJCb3goKSA6IDApIHsKLSAgICAgICAgaWYgKFJlbmRlckJveCogaW5uZXJCbG9j
a0JveCA9IGlubmVyQmxvY2tFbGVtZW50KCkgPyBpbm5lckJsb2NrRWxlbWVudCgpLT5yZW5kZXJC
b3goKSA6IDApCi0gICAgICAgICAgICBwYWRkaW5nICs9IGNvbnRhaW5lckJveC0+d2lkdGgoKSAt
IChpbm5lckJsb2NrQm94LT54KCkgKyBpbm5lckJsb2NrQm94LT53aWR0aCgpKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHBhZGRpbmc7Ci19Ci0KLWludCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6
Omxpc3RTaXplKCkgY29uc3QKLXsKLSAgICAvLyBJZiB0aGVyZSBhcmUgbm8gcmVjZW50IHNlYXJj
aGVzLCB0aGVuIG91ciBtZW51IHdpbGwgaGF2ZSAxICJObyByZWNlbnQgc2VhcmNoZXMiIGl0ZW0u
Ci0gICAgaWYgKCFtX3JlY2VudFNlYXJjaGVzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIDE7Ci0g
ICAgLy8gT3RoZXJ3aXNlLCBsZWF2ZSByb29tIGluIHRoZSBtZW51IGZvciBhIGhlYWRlciwgYSBz
ZXBhcmF0b3IsIGFuZCB0aGUgIkNsZWFyIHJlY2VudCBzZWFyY2hlcyIgaXRlbS4KLSAgICByZXR1
cm4gbV9yZWNlbnRTZWFyY2hlcy5zaXplKCkgKyAzOwotfQotCi1pbnQgUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjpzZWxlY3RlZEluZGV4KCkgY29uc3QKLXsKLSAgICByZXR1cm4gLTE7Ci19
Ci0KLXZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpwb3B1cERpZEhpZGUoKQotewot
ICAgIG1fc2VhcmNoUG9wdXBJc1Zpc2libGUgPSBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmU6Oml0ZW1Jc1NlcGFyYXRvcih1bnNpZ25lZCBsaXN0SW5kZXgpIGNv
bnN0Ci17Ci0gICAgLy8gVGhlIHNlcGFyYXRvciB3aWxsIGJlIHRoZSBzZWNvbmQgdG8gbGFzdCBp
dGVtIGluIG91ciBsaXN0LgotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGxpc3RJbmRleCkg
PT0gKGxpc3RTaXplKCkgLSAyKTsKLX0KLQotYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmU6Oml0ZW1Jc0xhYmVsKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bGlzdEluZGV4ID09IDA7Ci19Ci0KLWJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpp
dGVtSXNTZWxlY3RlZCh1bnNpZ25lZCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LXZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzZXRUZXh0RnJvbUl0ZW0odW5zaWdu
ZWQgbGlzdEluZGV4KQotewotICAgIGlucHV0RWxlbWVudCgpLT5zZXRWYWx1ZShpdGVtVGV4dChs
aXN0SW5kZXgpKTsKLX0KLQotRm9udFNlbGVjdG9yKiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmU6OmZvbnRTZWxlY3RvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRvY3VtZW50KCktPnN0eWxl
UmVzb2x2ZXIoKS0+Zm9udFNlbGVjdG9yKCk7Ci19Ci0KLUhvc3RXaW5kb3cqIFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6aG9zdFdpbmRvdygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRvY3Vt
ZW50KCktPnZpZXcoKS0+aG9zdFdpbmRvdygpOwotfQotCiB2b2lkIFJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZTo6YXV0b3Njcm9sbCgpCiB7CiAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gaW5u
ZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJCb3goKS0+bGF5ZXIoKTsKQEAgLTc0MSwxNyArNTA1LDYg
QEAgYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmxvZ2ljYWxTY3JvbGwoU2Nyb2xs
TG9naWNhbERpcmVjdGlvbiBkaXJlY3Rpb24KICAgICByZXR1cm4gUmVuZGVyQmxvY2s6OmxvZ2lj
YWxTY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllciwgc3RvcE5vZGUpOwog
fQogCi1QYXNzUmVmUHRyPFNjcm9sbGJhcj4gUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpj
cmVhdGVTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhLCBTY3JvbGxiYXJP
cmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUgY29udHJvbFNpemUp
Ci17Ci0gICAgUmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0OwotICAgIGJvb2wgaGFzQ3VzdG9tU2Ny
b2xsYmFyU3R5bGUgPSBzdHlsZSgpLT5oYXNQc2V1ZG9TdHlsZShTQ1JPTExCQVIpOwotICAgIGlm
IChoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSkKLSAgICAgICAgd2lkZ2V0ID0gUmVuZGVyU2Nyb2xs
YmFyOjpjcmVhdGVDdXN0b21TY3JvbGxiYXIoc2Nyb2xsYWJsZUFyZWEsIG9yaWVudGF0aW9uLCB0
aGlzLT5ub2RlKCkpOwotICAgIGVsc2UKLSAgICAgICAgd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVh
dGVOYXRpdmVTY3JvbGxiYXIoc2Nyb2xsYWJsZUFyZWEsIG9yaWVudGF0aW9uLCBjb250cm9sU2l6
ZSk7Ci0gICAgcmV0dXJuIHdpZGdldC5yZWxlYXNlKCk7Ci19Ci0KIEhUTUxJbnB1dEVsZW1lbnQq
IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aW5wdXRFbGVtZW50KCkgY29uc3QKIHsKICAg
ICByZXR1cm4gbm9kZSgpLT50b0lucHV0RWxlbWVudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCmluZGV4IDZlMjFj
ODU2YzEwZmE5ZmJhNDM2YzA2Zjc0OWMxNGUxZTJhODBiYTYuLjcxZmE5ODAyZjM3ZGNlYThhYzYx
ZTM3NzdhZmEyYTE4MDhkNTFlOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgKQEAgLTIzLDE1ICsyMywxNCBAQAog
I2lmbmRlZiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmVfaAogI2RlZmluZSBSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmVfaAogCi0jaW5jbHVkZSAiUG9wdXBNZW51Q2xpZW50LmgiCisjaW5j
bHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSFRNTElucHV0RWxlbWVudDsKLWNsYXNz
IFNlYXJjaFBvcHVwTWVudTsKIAotY2xhc3MgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lIDog
cHVibGljIFJlbmRlclRleHRDb250cm9sLCBwcml2YXRlIFBvcHVwTWVudUNsaWVudCB7CitjbGFz
cyBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUgOiBwdWJsaWMgUmVuZGVyVGV4dENvbnRyb2wg
ewogcHVibGljOgogICAgIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShOb2RlKik7CiAgICAg
dmlydHVhbCB+UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKCk7CkBAIC00MCwxNCArMzksMTgg
QEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IGNyZWF0ZUlubmVyQmxvY2tT
dHlsZShjb25zdCBSZW5kZXJTdHlsZSogc3RhcnRTdHlsZSkgY29uc3Q7CiAgICAgdm9pZCB1cGRh
dGVDYW5jZWxCdXR0b25WaXNpYmlsaXR5KCkgY29uc3Q7CiAKLSAgICB2b2lkIGFkZFNlYXJjaFJl
c3VsdCgpOwotICAgIHZvaWQgc3RvcFNlYXJjaEV2ZW50VGltZXIoKTsKKyAgICB2b2lkIGNhcHNM
b2NrU3RhdGVNYXlIYXZlQ2hhbmdlZCgpOwogCi0gICAgYm9vbCBwb3B1cElzVmlzaWJsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc2VhcmNoUG9wdXBJc1Zpc2libGU7IH0KLSAgICB2b2lkIHNob3dQb3B1
cCgpOwotICAgIHZvaWQgaGlkZVBvcHVwKCk7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBMYXlv
dXRVbml0IGNvbXB1dGVIZWlnaHRMaW1pdCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBjZW50
ZXJDb250YWluZXJJZk5lZWRlZChSZW5kZXJCb3gqKSBjb25zdCB7IH0KIAotICAgIHZvaWQgY2Fw
c0xvY2tTdGF0ZU1heUhhdmVDaGFuZ2VkKCk7CisgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRF
bGVtZW50KCkgY29uc3Q7CisKKyAgICBIVE1MRWxlbWVudCogY29udGFpbmVyRWxlbWVudCgpIGNv
bnN0OworICAgIEhUTUxFbGVtZW50KiBpbm5lckJsb2NrRWxlbWVudCgpIGNvbnN0OworCisgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiBhdXRvc2F2ZU5hbWUoKSBjb25zdDsKIAogcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIGJvb2wgaGFzQ29udHJvbENsaXAoKSBjb25zdDsKQEAgLTgzLDUyICs4NiwyNSBA
QCBwcml2YXRlOgogCiAgICAgRVZpc2liaWxpdHkgdmlzaWJpbGl0eUZvckNhbmNlbEJ1dHRvbigp
IGNvbnN0OwogICAgIGJvb2wgdGV4dFNob3VsZEJlVHJ1bmNhdGVkKCkgY29uc3Q7Ci0gICAgY29u
c3QgQXRvbWljU3RyaW5nJiBhdXRvc2F2ZU5hbWUoKSBjb25zdDsKLQotICAgIC8vIFBvcHVwTWVu
dUNsaWVudCBtZXRob2RzCi0gICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZCh1bnNpZ25lZCBs
aXN0SW5kZXgsIGJvb2wgZmlyZUV2ZW50cyA9IHRydWUpIE9WRVJSSURFOwotICAgIHZpcnR1YWwg
dm9pZCBzZWxlY3Rpb25DaGFuZ2VkKHVuc2lnbmVkLCBib29sKSBPVkVSUklERSB7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgc2VsZWN0aW9uQ2xlYXJlZCgpIE9WRVJSSURFIHsgfQotICAgIHZpcnR1YWwg
U3RyaW5nIGl0ZW1UZXh0KHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QgT1ZFUlJJREU7Ci0gICAg
dmlydHVhbCBTdHJpbmcgaXRlbUxhYmVsKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QgT1ZFUlJJ
REU7Ci0gICAgdmlydHVhbCBTdHJpbmcgaXRlbUljb24odW5zaWduZWQgbGlzdEluZGV4KSBjb25z
dCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFN0cmluZyBpdGVtVG9vbFRpcCh1bnNpZ25lZCkgY29u
c3QgT1ZFUlJJREUgeyByZXR1cm4gU3RyaW5nKCk7IH0KLSAgICB2aXJ0dWFsIFN0cmluZyBpdGVt
QWNjZXNzaWJpbGl0eVRleHQodW5zaWduZWQpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIFN0cmlu
ZygpOyB9Ci0gICAgdmlydHVhbCBib29sIGl0ZW1Jc0VuYWJsZWQodW5zaWduZWQgbGlzdEluZGV4
KSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFBvcHVwTWVudVN0eWxlIGl0ZW1TdHlsZSh1
bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgUG9wdXBNZW51
U3R5bGUgbWVudVN0eWxlKCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBpbnQgY2xpZW50
SW5zZXRMZWZ0KCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBpbnQgY2xpZW50SW5zZXRS
aWdodCgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBjbGllbnRQYWRk
aW5nTGVmdCgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBjbGllbnRQ
YWRkaW5nUmlnaHQoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGludCBsaXN0U2l6ZSgp
IGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgaW50IHNlbGVjdGVkSW5kZXgoKSBjb25zdCBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgcG9wdXBEaWRIaWRlKCkgT1ZFUlJJREU7Ci0gICAg
dmlydHVhbCBib29sIGl0ZW1Jc1NlcGFyYXRvcih1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0IE9W
RVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCBpdGVtSXNMYWJlbCh1bnNpZ25lZCBsaXN0SW5kZXgp
IGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCBpdGVtSXNTZWxlY3RlZCh1bnNpZ25l
ZCBsaXN0SW5kZXgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRQb3BP
dmVyKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wg
dmFsdWVTaG91bGRDaGFuZ2VPbkhvdFRyYWNrKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gZmFs
c2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dEZyb21JdGVtKHVuc2lnbmVkIGxpc3RJbmRl
eCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcigpIGNv
bnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgSG9zdFdpbmRvdyogaG9zdFdpbmRvdygpIGNvbnN0
IE9WRVJSSURFOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTY3JvbGxiYXI+IGNyZWF0ZVNjcm9s
bGJhcihTY3JvbGxhYmxlQXJlYSosIFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250
cm9sU2l6ZSkgT1ZFUlJJREU7CiAKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQo
KSBjb25zdDsKLQotICAgIEhUTUxFbGVtZW50KiBjb250YWluZXJFbGVtZW50KCkgY29uc3Q7Ci0g
ICAgSFRNTEVsZW1lbnQqIGlubmVyQmxvY2tFbGVtZW50KCkgY29uc3Q7CiAgICAgSFRNTEVsZW1l
bnQqIGlubmVyU3BpbkJ1dHRvbkVsZW1lbnQoKSBjb25zdDsKICAgICBIVE1MRWxlbWVudCogcmVz
dWx0c0J1dHRvbkVsZW1lbnQoKSBjb25zdDsKICAgICBIVE1MRWxlbWVudCogY2FuY2VsQnV0dG9u
RWxlbWVudCgpIGNvbnN0OwogCi0gICAgYm9vbCBtX3NlYXJjaFBvcHVwSXNWaXNpYmxlOwogICAg
IGJvb2wgbV9zaG91bGREcmF3Q2Fwc0xvY2tJbmRpY2F0b3I7CiAgICAgTGF5b3V0VW5pdCBtX2Rl
c2lyZWRJbm5lclRleHRIZWlnaHQ7Ci0gICAgUmVmUHRyPFNlYXJjaFBvcHVwTWVudT4gbV9zZWFy
Y2hQb3B1cDsKLSAgICBWZWN0b3I8U3RyaW5nPiBtX3JlY2VudFNlYXJjaGVzOwogfTsKIAoraW5s
aW5lIEhUTUxFbGVtZW50KiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNvbnRhaW5lckVs
ZW1lbnQoKSBjb25zdAoreworICAgIHJldHVybiBpbnB1dEVsZW1lbnQoKS0+Y29udGFpbmVyRWxl
bWVudCgpOworfQorCitpbmxpbmUgSFRNTEVsZW1lbnQqIFJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZTo6aW5uZXJCbG9ja0VsZW1lbnQoKSBjb25zdAoreworICAgIHJldHVybiBpbnB1dEVsZW1l
bnQoKS0+aW5uZXJCbG9ja0VsZW1lbnQoKTsKK30KKwogaW5saW5lIFJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZSogdG9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUoUmVuZGVyT2JqZWN0KiBv
YmplY3QpCiB7CiAgICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc1RleHRGaWVsZCgpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJpbmdBbGxJbk9uZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyaW5nQWxsSW5PbmUuY3BwCmluZGV4
IGQxN2JkMzEzYTQzMTkwYzliZGZlNWNlOGQzMmY4ZjcxODU0NDRhNGYuLjFmMGE0YTM4ZTcyZTIx
YTdkYzNmMGFkY2QzY2FlMzYzYzhhNTFkOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJpbmdBbGxJbk9uZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlcmluZ0FsbEluT25lLmNwcApAQCAtOTEsNiArOTEsNyBAQAogI2luY2x1ZGUgIlJl
bmRlclNjcm9sbGJhci5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU2Nyb2xsYmFyUGFydC5jcHAiCiAj
aW5jbHVkZSAiUmVuZGVyU2Nyb2xsYmFyVGhlbWUuY3BwIgorI2luY2x1ZGUgIlJlbmRlclNlYXJj
aEZpZWxkLmNwcCIKICNpbmNsdWRlICJSZW5kZXJTbGlkZXIuY3BwIgogI2luY2x1ZGUgIlJlbmRl
clRhYmxlLmNwcCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNhcHRpb24uY3BwIgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147732</attachid>
            <date>2012-06-14 22:31:17 -0700</date>
            <delta_ts>2012-06-14 23:15:24 -0700</delta_ts>
            <desc>Patch 5</desc>
            <filename>bug-88980-20120615143116.patch</filename>
            <type>text/plain</type>
            <size>68788</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwMzk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmM4M2MyODcwMTAzODhh
NWE3M2I5YzdlN2E2NmE2YTQ1OTQyYmNjMi4uYThmMGI0OTZlZmE4YTg1ZTJlMjkyMTAzN2Q4NDky
NTdjZGQ4MGE5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc4IEBACisyMDEyLTA2LTE1ICBZb3No
aWZ1bWkgSW5vdWUgIDx5b3NpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Zvcm1zXSBNb3Zl
IHNlYXJjaCBmaWVsZCByZWxhdGVkIGNvZGUgdG8gUmVuZGVyU2VhcmNoRmllbGQgZnJvbSBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTg4OTgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtb3ZlcyBzZWFyY2ggZmllbGQgcmVsYXRlZCBtZXRo
b2RzIGluIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZQorICAgICAgICB0byBuZXcgY2xhc3Mg
UmVuZGVyU2VhcmNoRmllbGQgYW5kIGNoYW5nZXMgcmVsYXRlZCBjbGFzc2VzIHRvIHVzZQorICAg
ICAgICBSZW5kZXJTZWFyY2hGaWVsZC4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgcGF0
Y2ggZG9lc24ndCBjaGFuZ2UgYmVoYXZpb3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDog
QWRkZWQgbmV3IGZpbGUgUmVuZGVyU2VhcmNoRmllbGQuY3BwCisgICAgICAgICogR05VbWFrZWZp
bGUubGlzdC5hbTogQWRkZWQgbmV3IGZpbGUgUmVuZGVyU2VhcmNoRmllbGQuY3BwIGFuZCBSZW5k
ZXJTZWFyY2hGaWVsZC5oCisgICAgICAgICogVGFyZ2V0LnByaTogZGl0dG8KKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6IGRpaXRvCisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2o6IGRpdHRvCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBk
aXR0bworICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MSW5wdXRFbGVtZW50OjphZGRTZWFyY2hSZXN1bHQpOiBDaGFuZ2VkIHRvIGNhbGwg
SW5wdXRUeXBlOjphZGRTZWFyY2hSZXN1bHQuCisgICAgICAgICogaHRtbC9JbnB1dFR5cGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjphZGRTZWFyY2hSZXN1bHQpOiBBZGRlZC4K
KyAgICAgICAgKiBodG1sL1NlYXJjaElucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
ZWFyY2hJbnB1dFR5cGU6OmFkZFNlYXJjaFJlc3VsdCk6IE1vdmVkIGZyb20gSFRNTElucHV0RWxl
bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaElucHV0VHlwZTo6Y3JlYXRlUmVuZGVyZXIp
OiBBZGRlZCB0byBjcmVhdGUgUmVuZGVyU2VhcmNoRmllbGQuCisgICAgICAgICogaHRtbC9TZWFy
Y2hGaWVsZElucHV0VHlwZS5oOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoRmllbGRJbnB1dFR5
cGUpOgorICAgICAgICAqIGh0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50OjpkZWZh
dWx0RXZlbnRIYW5kbGVyKTogVXNlIFJlbmRlclNlYXJjaEZpZWxkIGluc3RlYWQgb2YgUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lLgorICAgICAgICAqIGxvYWRlci9Gb3JtU3VibWlzc2lvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGb3JtU3VibWlzc2lvbjo6Y3JlYXRlKTogR290IHJpZCBp
c1NlYXJjaEZpZWxkKCkgZ3VhcmQgZm9yIGFkZFNlYXJjaFJlc3VsdCgpLgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
ZWFyY2hGaWVsZDo6UmVuZGVyU2VhcmNoRmllbGQpOiBSZW5hbWVkIHRvIFJlbmRlclNlYXJjaEZp
ZWxkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6On5SZW5kZXJTZWFyY2hG
aWVsZCk6IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OmFkZFNl
YXJjaFJlc3VsdCk6IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6
OnNob3dQb3B1cCk6IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6
OmhpZGVQb3B1cCk6IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6
OnZhbHVlQ2hhbmdlZCk6IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmll
bGQ6Oml0ZW1UZXh0KTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVs
ZDo6aXRlbUxhYmVsKTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVs
ZDo6aXRlbUljb24pOiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxk
OjppdGVtSXNFbmFibGVkKTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hG
aWVsZDo6aXRlbVN0eWxlKTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hG
aWVsZDo6bWVudVN0eWxlKTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hG
aWVsZDo6Y2xpZW50SW5zZXRMZWZ0KTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
ZWFyY2hGaWVsZDo6Y2xpZW50SW5zZXRSaWdodCk6IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU2VhcmNoRmllbGQ6OmNsaWVudFBhZGRpbmdMZWZ0KTogZGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6Y2xpZW50UGFkZGluZ1JpZ2h0KTogZGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6bGlzdFNpemUpOiBkaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjpzZWxlY3RlZEluZGV4KTogZGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6cG9wdXBEaWRIaWRlKTogZGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6aXRlbUlzU2VwYXJhdG9y
KTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6aXRlbUlzTGFi
ZWwpOiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjppdGVtSXNT
ZWxlY3RlZCk6IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OnNl
dFRleHRGcm9tSXRlbSk6IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmll
bGQ6OmZvbnRTZWxlY3Rvcik6IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNo
RmllbGQ6Omhvc3RXaW5kb3cpOiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJj
aEZpZWxkOjpjcmVhdGVTY3JvbGxiYXIpOiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNlYXJjaEZpZWxkOjpjb21wdXRlSGVpZ2h0TGltaXQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNlYXJjaEZpZWxkOjpjZW50ZXJDb250YWluZXJJZk5lZWRlZCk6IEFkZGVkLgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5oOgorICAgICAgICAoV2ViQ29y
ZTo6dG9SZW5kZXJTZWFyY2hGaWVsZCk6IEFkZGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUpOiBSZW1vdmUg
c2VhcmNoIGZpZWxkIHJlbGF0ZWQgY29kZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6flJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZSk6IGRpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjb21wdXRlSGVp
Z2h0TGltaXQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6bGF5b3V0KTogVXNlIG5ldyBtZXRob2RzIGZvciByZW1vdmluZyBpc1NlYXJjaEZp
ZWxkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp1cGRh
dGVGcm9tRWxlbWVudCk6IFJlbW92ZWQgc2VhcmNoIGZpZWxkIHJlbGF0ZWQgY29kZS4KKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmg6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNlbnRlckNvbnRhaW5lcklmTmVl
ZGVkKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmU6OmNvbnRhaW5lckVsZW1lbnQpOiBFeHBvc2VkIGZvciBSZW5kZXJTZWFyY2hGaWVsZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aW5uZXJCbG9ja0Vs
ZW1lbnQpOiBFeHBvc2VkIGZvciBSZW5kZXJTZWFyY2hGaWVsZC4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyaW5nQWxsSW5PbmUuY3BwOiBBZGRlZCBSZW5kZXJTZWFyY2hGaWVsZC5jcHAKKwog
MjAxMi0wNi0xNCAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
VmFsaWRhdGUgZm9ybSBzdGF0ZSBzdHJpbmdzIGluIEZvcm1Db250cm9sbGVyOjpzZXRTdGF0ZUZv
ck5ld0Zvcm1FbGVtZW50cygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGUyNzNjMGZkNTYwMTVi
OTU5NjNiZmI0ODM4OWEwM2IyYzc1YmRiYWQuLjlhZDg1YmI5NDIyNTA0ZGMzMmNkNmQxZmY4OGYz
NDY4M2FlZDQ2ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMzg3LDYgKzEzODcsNyBAQCBT
RVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhci5jcHAKICAg
ICByZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyUGFydC5jcHAKICAgICByZW5kZXJpbmcvUmVuZGVy
U2Nyb2xsYmFyVGhlbWUuY3BwCisgICAgcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmNwcAog
ICAgIHJlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwCiAgICAgcmVuZGVyaW5nL1JlbmRlclRhYmxl
LmNwcAogICAgIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNhcHRpb24uY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQppbmRleCA0YTQ1YzdmMDM0MDAxMmFiMzYxZTAzYmNiYTk0MjY3NDJlYzU2
MDcwLi4zN2I3ZTVhYzI5OTdlYTMxNjFlOTRhYzg2NDYxYTZjZTY3NjViMzQwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTM5MDYsNiArMzkwNiw4IEBAIHdlYmNvcmVfc291cmNl
cyArPSBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclBhcnQuaCBc
CiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclRoZW1lLmNwcCBcCiAJ
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclRoZW1lLmggXAorCVNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAgXAorCVNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU2VsZWN0aW9uSW5mby5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU2xpZGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRl
ci5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2Vi
Q29yZS9UYXJnZXQucHJpCmluZGV4IDE0ZjdlZDE4MGE3MTJiZTUwNDg4YWM4NWM2MWM2Y2U0MjZk
N2QzODQuLjY5YmFhOTI5ZmQ2NzJjOTI2MTY0OGY4YjIyMGY1N2JjZTY3ZDNmZDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0
LnByaQpAQCAtMTMwOSw2ICsxMzA5LDcgQEAgU09VUkNFUyArPSBcCiAgICAgcmVuZGVyaW5nL1Jl
bmRlclNjcm9sbGJhci5jcHAgXAogICAgIHJlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJQYXJ0LmNw
cCBcCiAgICAgcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclRoZW1lLmNwcCBcCisgICAgcmVuZGVy
aW5nL1JlbmRlclNlYXJjaEZpZWxkLmNwcCBcCiAgICAgcmVuZGVyaW5nL1JlbmRlclNsaWRlci5j
cHAgXAogICAgIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAgXAogICAgIHJlbmRlcmluZy9SZW5k
ZXJUYWJsZUNhcHRpb24uY3BwIFwKQEAgLTI1MTQsNiArMjUxNSw3IEBAIEhFQURFUlMgKz0gXAog
ICAgIHJlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXIuaCBcCiAgICAgcmVuZGVyaW5nL1JlbmRlclNj
cm9sbGJhclBhcnQuaCBcCiAgICAgcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclRoZW1lLmggXAor
ICAgIHJlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5oIFwKICAgICByZW5kZXJpbmcvUmVuZGVy
U2xpZGVyLmggXAogICAgIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNhcHRpb24uaCBcCiAgICAgcmVu
ZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA5Y2I2YzdkNDM2
ZDNhZDQ3MmY0YTY2OTk5NDhlMmI0MDIwMzdlNTMzLi41YmI2ZGRhNTRkYmY5NmI0N2RjMWNiYTEz
OTVhMTIzYTNmNjYwYTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC00OTAyLDYgKzQ5MDIsOCBAQAog
ICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJQYXJ0LmgnLAogICAgICAgICAg
ICAgJ3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJUaGVtZS5jcHAnLAogICAgICAgICAgICAgJ3Jl
bmRlcmluZy9SZW5kZXJTY3JvbGxiYXJUaGVtZS5oJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcv
UmVuZGVyU2VhcmNoRmllbGQuY3BwJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyU2Vh
cmNoRmllbGQuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNlbGVjdGlvbkluZm8u
aCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAnLAogICAgICAgICAg
ICAgJ3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDE3YWUwZGY1MTY2NjYxZWFjM2ExYjcwYWMyYjNm
N2Y4NDYwMjI3ZTUuLmQwNmRkYWFhMTQ2MmQ4OWNjNTFmOWYzZWQ2ZDhiZWU0ODljZWFkZWMgMTAw
NzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC00MTUw
Myw2ICs0MTUwMyw2MiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlxyZW5kZXJpbmdcUmVuZGVyU2VhcmNoRmllbGQuY3BwIgorCQkJCT4KKwkJCQk8
RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJCUV4Y2x1ZGVk
RnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29t
cGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVD
b25maWd1cmF0aW9uCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJv
bUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGls
ZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25m
aWd1cmF0aW9uCisJCQkJCU5hbWU9IkRlYnVnX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJRXhj
bHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZD
Q0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8
RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iUmVsZWFzZV9DYWlyb19DRkxpdGV8V2luMzIi
CisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJ
CQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRp
b24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IkRlYnVnX0FsbHxXaW4zMiIK
KwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJ
CU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlv
bj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iUHJvZHVjdGlvbnxXaW4zMiIK
KwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJ
CU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlv
bj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdc
UmVuZGVyU2VhcmNoRmllbGQuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRlclNlbGVjdGlvbkluZm8uaCIKIAkJCQk+CiAJ
CQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggZWMzNjY2ZDVhNWM1Yzc4ODIzMTI3M2Y3YTk0OWRlOTA1ZjQ5ZmNhMi4u
ZGY4ZDVhODYyNWI4NzcyZGEyOGY2Y2RlMGMyODJkYThmMTQyZmRmYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTE4OSw2ICsx
MTg5LDggQEAKIAkJNDUwOTlDNDExMzcwQTc4MDAwNThENTEzIC8qIEljb25VUkwuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDUwOTlDNDAxMzcwQTc4
MDAwNThENTEzIC8qIEljb25VUkwuY3BwICovOyB9OwogCQk0NTBDRUJGMDE1MDczQkJFMDAyQkIx
NDkgLyogTGFiZWxhYmxlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0NTBDRUJFRTE1MDczQkJFMDAyQkIxNDkgLyogTGFiZWxhYmxlRWxl
bWVudC5jcHAgKi87IH07CiAJCTQ1MENFQkYxMTUwNzNCQkUwMDJCQjE0OSAvKiBMYWJlbGFibGVF
bGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
NTBDRUJFRjE1MDczQkJFMDAyQkIxNDkgLyogTGFiZWxhYmxlRWxlbWVudC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTQ1OEZFNDA5MTU4OURGMEIw
MDU2MDlFNiAvKiBSZW5kZXJTZWFyY2hGaWVsZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NThGRTQwNzE1ODlERjBCMDA1NjA5RTYgLyogUmVuZGVy
U2VhcmNoRmllbGQuY3BwICovOyB9OworCQk0NThGRTQwQTE1ODlERjBCMDA1NjA5RTYgLyogUmVu
ZGVyU2VhcmNoRmllbGQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ1OEZFNDA4MTU4OURGMEIwMDU2MDlFNiAvKiBSZW5kZXJTZWFyY2hGaWVsZC5oICov
OyB9OwogCQk0NUJBQzJCMDEzNjBCQkFCMDA1REEyNTggLyogSWNvblVSTC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDVCQUMyQUYxMzYwQkJBQjAwNURB
MjU4IC8qIEljb25VUkwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk0NUZFQTVDRjE1NkRERThDMDA2NTQxMDEgLyogRGVjaW1hbC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NUZFQTVDRDE1NkRERThD
MDA2NTQxMDEgLyogRGVjaW1hbC5jcHAgKi87IH07CiAJCTQ1RkVBNUQwMTU2RERFOEMwMDY1NDEw
MSAvKiBEZWNpbWFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0NUZFQTVDRTE1NkRERThDMDA2NTQxMDEgLyogRGVjaW1hbC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC04MjE4LDYgKzgyMjAsOCBAQAog
CQk0NTA5OUM0MDEzNzBBNzgwMDA1OEQ1MTMgLyogSWNvblVSTC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJY29uVVJMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNDUwQ0VCRUUxNTA3M0JCRTAwMkJCMTQ5IC8qIExhYmVsYWJsZUVsZW1lbnQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGFiZWxhYmxlRWxlbWVudC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ1MENFQkVGMTUwNzNCQkUwMDJCQjE0
OSAvKiBMYWJlbGFibGVFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IExhYmVsYWJsZUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDU4RkU0
MDcxNTg5REYwQjAwNTYwOUU2IC8qIFJlbmRlclNlYXJjaEZpZWxkLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNlYXJjaEZpZWxkLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDU4RkU0MDgxNTg5REYwQjAwNTYwOUU2IC8qIFJlbmRlclNl
YXJjaEZpZWxkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNlYXJj
aEZpZWxkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ1QkFDMkFGMTM2MEJCQUIw
MDVEQTI1OCAvKiBJY29uVVJMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElj
b25VUkwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDVGRUE1Q0QxNTZEREU4QzAw
NjU0MTAxIC8qIERlY2ltYWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRGVjaW1hbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ1RkVBNUNFMTU2
RERFOEMwMDY1NDEwMSAvKiBEZWNpbWFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERlY2ltYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxMTE2LDYgKzIx
MTIwLDggQEAKIAkJCQlCQzNCRTk5MjBFOUMxQzdDMDA4MzU1ODggLyogUmVuZGVyU2Nyb2xsYmFy
UGFydC5oICovLAogCQkJCUJDM0JFOUE0MEU5QzIzOTYwMDgzNTU4OCAvKiBSZW5kZXJTY3JvbGxi
YXJUaGVtZS5jcHAgKi8sCiAJCQkJQkMzQkU5OTgwRTlDMUU1RDAwODM1NTg4IC8qIFJlbmRlclNj
cm9sbGJhclRoZW1lLmggKi8sCisJCQkJNDU4RkU0MDcxNTg5REYwQjAwNTYwOUU2IC8qIFJlbmRl
clNlYXJjaEZpZWxkLmNwcCAqLywKKwkJCQk0NThGRTQwODE1ODlERjBCMDA1NjA5RTYgLyogUmVu
ZGVyU2VhcmNoRmllbGQuaCAqLywKIAkJCQkwRjExQTU0RTBGMzkyMzMxMDBDMzc4ODQgLyogUmVu
ZGVyU2VsZWN0aW9uSW5mby5oICovLAogCQkJCUFCMjQ3QTZBMEFGRDYzODMwMDNGQTVGRCAvKiBS
ZW5kZXJTbGlkZXIuY3BwICovLAogCQkJCUFCMjQ3QTZCMEFGRDYzODMwMDNGQTVGRCAvKiBSZW5k
ZXJTbGlkZXIuaCAqLywKQEAgLTI0MjcyLDYgKzI0Mjc4LDcgQEAKIAkJCQlCQzNCRTk5NDBFOUMx
QzdDMDA4MzU1ODggLyogUmVuZGVyU2Nyb2xsYmFyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzNC
RTk5NTBFOUMxQzdDMDA4MzU1ODggLyogUmVuZGVyU2Nyb2xsYmFyUGFydC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMzQkU5OTkwRTlDMUU1RDAwODM1NTg4IC8qIFJlbmRlclNjcm9sbGJhclRoZW1l
LmggaW4gSGVhZGVycyAqLywKKwkJCQk0NThGRTQwQTE1ODlERjBCMDA1NjA5RTYgLyogUmVuZGVy
U2VhcmNoRmllbGQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTFBNTRGMEYzOTIzMzEwMEMzNzg4
NCAvKiBSZW5kZXJTZWxlY3Rpb25JbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlBQjI0N0E2RDBB
RkQ2MzgzMDAzRkE1RkQgLyogUmVuZGVyU2xpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzhD
OEZBRTBERENEMzFCMDBCNTkyRjQgLyogUmVuZGVyU3R5bGUuaCBpbiBIZWFkZXJzICovLApAQCAt
Mjc0NjcsNiArMjc0NzQsNyBAQAogCQkJCUJDM0JFOTkzMEU5QzFDN0MwMDgzNTU4OCAvKiBSZW5k
ZXJTY3JvbGxiYXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMzQkU5QUIwRTlDMjQyMDAwODM1
NTg4IC8qIFJlbmRlclNjcm9sbGJhclBhcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMzQkU5
QTUwRTlDMjM5NjAwODM1NTg4IC8qIFJlbmRlclNjcm9sbGJhclRoZW1lLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTQ1OEZFNDA5MTU4OURGMEIwMDU2MDlFNiAvKiBSZW5kZXJTZWFyY2hGaWVsZC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBQjI0N0E2QzBBRkQ2MzgzMDAzRkE1RkQgLyogUmVuZGVy
U2xpZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDOEM4RkFEMEREQ0QzMUIwMEI1OTJGNCAv
KiBSZW5kZXJTdHlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjRFNTcxNzEzMTMyNzYyMDBD
Rjg1QUYgLyogUmVuZGVyU1ZHQWxsSW5PbmUuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAppbmRleCBlMDAxNTAzZDE3MjgzZTA3YTE3ZDY1
NmM2NjAxYTEyMmYzZmUzMjg0Li44YzE5MThlZDUzNjQxZmY3MjA3NDExYjU5NDVmYzI0ZTI5MGQ3
NTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKQEAgLTEzMTgs
OSArMTMxOCw3IEBAIGJvb2wgSFRNTElucHV0RWxlbWVudDo6aXNSZXF1aXJlZEZvcm1Db250cm9s
KCkgY29uc3QKIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjphZGRTZWFyY2hSZXN1bHQoKQogewot
ICAgIEFTU0VSVChpc1NlYXJjaEZpZWxkKCkpOwotICAgIGlmIChyZW5kZXJlcigpKQotICAgICAg
ICB0b1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShyZW5kZXJlcigpKS0+YWRkU2VhcmNoUmVz
dWx0KCk7CisgICAgbV9pbnB1dFR5cGUtPmFkZFNlYXJjaFJlc3VsdCgpOwogfQogCiB2b2lkIEhU
TUxJbnB1dEVsZW1lbnQ6Om9uU2VhcmNoKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcAppbmRl
eCBkZmM1MGUwMGJkOGFiMGQyN2FmM2M1OWZiNDRhNTFmMTIwNjg4Nzk3Li5mNTUwYmVlOGQ2NzE2
OGQ5MzdiOWYyZmYwODA4OTBhMDJhYmQ5YzA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0lucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3Bw
CkBAIC01MjMsNiArNTIzLDEwIEBAIHZvaWQgSW5wdXRUeXBlOjphY2Nlc3NLZXlBY3Rpb24oYm9v
bCkKICAgICBlbGVtZW50KCktPmZvY3VzKGZhbHNlKTsKIH0KIAordm9pZCBJbnB1dFR5cGU6OmFk
ZFNlYXJjaFJlc3VsdCgpCit7Cit9CisKIHZvaWQgSW5wdXRUeXBlOjphdHRhY2goKQogewogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuaCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSW5wdXRUeXBlLmgKaW5kZXggMzg2MDUxZmFjYjcxMGE2YjU2YmRiN2E4ZjBhNTk5
N2M2MzUxYjIwMC4uNGVjMWIzMmRjOTY2NWM5NTc1MzAzM2JlMmVhMDA0NjRmMDBlZDA1MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0lucHV0VHlwZS5oCkBAIC0yMjIsNiArMjIyLDcgQEAgcHVibGljOgogCiAgICAg
dmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoKTsKICAgICB2aXJ0dWFsIFJlbmRlck9iamVj
dCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCBhZGRTZWFyY2hSZXN1bHQoKTsKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNo
KCk7CiAgICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwogICAgIHZpcnR1YWwgdm9pZCBtaW5Pck1h
eEF0dHJpYnV0ZUNoYW5nZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvU2Vh
cmNoSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvU2VhcmNoSW5wdXRUeXBlLmNw
cAppbmRleCA2ZjUwMGRhZjNmN2I1ZjFlMDViZDRhMmQwYjJmOWVlNDdjM2IwNGE0Li5iNzdmMDk4
YmY2Njg3ZmZiYmJmNjMyMTBkZTA4NDc4NjkyZjZkODdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL1NlYXJjaElucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9T
ZWFyY2hJbnB1dFR5cGUuY3BwCkBAIC0zMyw3ICszMyw3IEBACiAKICNpbmNsdWRlICJIVE1MSW5w
dXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgotI2luY2x1ZGUgIlJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZS5oIgorI2luY2x1ZGUgIlJlbmRlclNlYXJjaEZpZWxkLmgi
CiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgogI2luY2x1ZGUgIlRleHRDb250cm9sSW5uZXJFbGVt
ZW50cy5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CkBAIC01MSw2ICs1MSwxNyBAQCBQ
YXNzT3duUHRyPElucHV0VHlwZT4gU2VhcmNoSW5wdXRUeXBlOjpjcmVhdGUoSFRNTElucHV0RWxl
bWVudCogZWxlbWVudCkKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNlYXJjaElucHV0VHlwZShl
bGVtZW50KSk7CiB9CiAKK3ZvaWQgU2VhcmNoSW5wdXRUeXBlOjphZGRTZWFyY2hSZXN1bHQoKQor
eworICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZWxlbWVudCgpLT5yZW5kZXJlcigp
KQorICAgICAgICB0b1JlbmRlclNlYXJjaEZpZWxkKHJlbmRlcmVyKS0+YWRkU2VhcmNoUmVzdWx0
KCk7Cit9CisKK1JlbmRlck9iamVjdCogU2VhcmNoSW5wdXRUeXBlOjpjcmVhdGVSZW5kZXJlcihS
ZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKikgY29uc3QKK3sKKyAgICByZXR1cm4gbmV3
IChhcmVuYSkgUmVuZGVyU2VhcmNoRmllbGQoZWxlbWVudCgpKTsKK30KKwogY29uc3QgQXRvbWlj
U3RyaW5nJiBTZWFyY2hJbnB1dFR5cGU6OmZvcm1Db250cm9sVHlwZSgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIElucHV0VHlwZU5hbWVzOjpzZWFyY2goKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvU2VhcmNoSW5wdXRUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1NlYXJjaElu
cHV0VHlwZS5oCmluZGV4IGFiMTkxMDNhZmRmYWU4ZTU1NjY3YmY0Y2U0MTMyZmI4ODA1YjgyMjUu
LmFjNzIyNjM5YTliZTE0ZTllNWMzZjA3M2RmNmZjY2I1ODZlNWE1ZDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvU2VhcmNoSW5wdXRUeXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9TZWFyY2hJbnB1dFR5cGUuaApAQCAtNDgsNiArNDgsOCBAQCBwdWJsaWM6CiAKIHByaXZh
dGU6CiAgICAgU2VhcmNoSW5wdXRUeXBlKEhUTUxJbnB1dEVsZW1lbnQqKTsKKyAgICB2aXJ0dWFs
IHZvaWQgYWRkU2VhcmNoUmVzdWx0KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBSZW5kZXJPYmpl
Y3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKSBjb25zdCBPVkVS
UklERTsKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xUeXBlKCkg
Y29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIHNob3VsZFJlc3BlY3RTcGVlY2hBdHRy
aWJ1dGUoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgaXNTZWFyY2hGaWVsZCgpIGNvbnN0
IE9WRVJSSURFOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENv
bnRyb2xJbm5lckVsZW1lbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRD
b250cm9sSW5uZXJFbGVtZW50cy5jcHAKaW5kZXggMTAwZGFlYjY0N2I5ZDc3YWE0YzFiNDMxMmJj
OWM1ZTVmYjE4N2FkNi4uNWQyNjg0MWMyNDM1NzA1NWY3YjViOThiNzE4MThiMzA1N2MxYWQxMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVs
ZW1lbnRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElu
bmVyRWxlbWVudHMuY3BwCkBAIC0zNyw3ICszNyw3IEBACiAjaW5jbHVkZSAiSFRNTFRleHRBcmVh
RWxlbWVudC5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJQYWdlLmgiCi0j
aW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgiCisjaW5jbHVkZSAiUmVuZGVy
U2VhcmNoRmllbGQuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2NyaXB0
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCkBAIC0xNTEsNyArMTUx
LDcgQEAgdm9pZCBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRI
YW5kbGVyKEV2ZW50KiBldmVudCkKICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkubW91c2Vkb3duRXZlbnQgJiYgZXZlbnQtPmlzTW91c2VFdmVudCgpICYmIHN0YXRpY19jYXN0
PE1vdXNlRXZlbnQqPihldmVudCktPmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKICAgICAgICAg
aW5wdXQtPmZvY3VzKCk7CiAgICAgICAgIGlucHV0LT5zZWxlY3QoKTsKLSAgICAgICAgUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lKiByZW5kZXJlciA9IHRvUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lKGlucHV0LT5yZW5kZXJlcigpKTsKKyAgICAgICAgUmVuZGVyU2VhcmNoRmllbGQqIHJl
bmRlcmVyID0gdG9SZW5kZXJTZWFyY2hGaWVsZChpbnB1dC0+cmVuZGVyZXIoKSk7CiAgICAgICAg
IGlmIChyZW5kZXJlci0+cG9wdXBJc1Zpc2libGUoKSkKICAgICAgICAgICAgIHJlbmRlcmVyLT5o
aWRlUG9wdXAoKTsKICAgICAgICAgZWxzZSBpZiAoaW5wdXQtPm1heFJlc3VsdHMoKSA+IDApCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRm9ybVN1Ym1pc3Npb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0Zvcm1TdWJtaXNzaW9uLmNwcAppbmRleCBkYTAzOTg3ZWU1ZTk0
NTQxNmYxNTE4NDQyNmRlMjE2ZWRkYWM1NTk2Li4yNDdjZTQwNjhhZDVjZmFiN2Y2OWQyMTU1NzAz
MTI5MDI0MzM3N2Q5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRm9ybVN1Ym1p
c3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHAK
QEAgLTE5MCw4ICsxOTAsNyBAQCBQYXNzUmVmUHRyPEZvcm1TdWJtaXNzaW9uPiBGb3JtU3VibWlz
c2lvbjo6Y3JlYXRlKEhUTUxGb3JtRWxlbWVudCogZm9ybSwgY29uc3QgQQogICAgICAgICAgICAg
SFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4o
Y29udHJvbCk7CiAgICAgICAgICAgICBpZiAoaW5wdXQtPmlzVGV4dEZpZWxkKCkpIHsKICAgICAg
ICAgICAgICAgICBmb3JtVmFsdWVzLmFwcGVuZChwYWlyPFN0cmluZywgU3RyaW5nPihpbnB1dC0+
bmFtZSgpLnN0cmluZygpLCBpbnB1dC0+dmFsdWUoKSkpOwotICAgICAgICAgICAgICAgIGlmIChp
bnB1dC0+aXNTZWFyY2hGaWVsZCgpKQotICAgICAgICAgICAgICAgICAgICBpbnB1dC0+YWRkU2Vh
cmNoUmVzdWx0KCk7CisgICAgICAgICAgICAgICAgaW5wdXQtPmFkZFNlYXJjaFJlc3VsdCgpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGlucHV0LT5pc1Bhc3N3b3JkRmllbGQoKSAm
JiAhaW5wdXQtPnZhbHVlKCkuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGNvbnRhaW5zUGFz
c3dvcmREYXRhID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTZWFyY2hGaWVsZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Vh
cmNoRmllbGQuY3BwCmluZGV4IDg0OGZjMjExOTdjMmE3ZDI0ZjI2NDhkZjcwMjA1MjlmM2M4ODBk
M2IuLjQ2NjBlYWM3Njc0OTFkNTY3NjcxMWY2OTNlMjM4ODBkN2I5ODM0MDggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmNwcApAQCAtMjIsNyArMjIs
NyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuaCIKKyNpbmNsdWRlICJSZW5kZXJTZWFyY2hGaWVsZC5oIgogCiAjaW5j
bHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgpA
QCAtNTEsMzUgKzUxLDE4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNl
IEhUTUxOYW1lczsKIAotVmlzaWJsZVBvc2l0aW9uIFJlbmRlclRleHRDb250cm9sSW5uZXJCbG9j
azo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpCi17Ci0gICAgTGF5
b3V0UG9pbnQgY29udGVudHNQb2ludChwb2ludCk7Ci0KLSAgICAvLyBNdWx0aWxpbmUgdGV4dCBj
b250cm9scyBoYXZlIHRoZSBzY3JvbGwgb24gc2hhZG93QW5jZXN0b3JOb2RlLCBzbyB3ZSBuZWVk
IHRvIHRha2UgdGhhdAotICAgIC8vIGludG8gYWNjb3VudCBoZXJlLgotICAgIGlmIChtX211bHRp
TGluZSkgewotICAgICAgICBSZW5kZXJUZXh0Q29udHJvbCogcmVuZGVyZXIgPSB0b1JlbmRlclRl
eHRDb250cm9sKG5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCktPnJlbmRlcmVyKCkpOwotICAg
ICAgICBpZiAocmVuZGVyZXItPmhhc092ZXJmbG93Q2xpcCgpKQotICAgICAgICAgICAgY29udGVu
dHNQb2ludCArPSByZW5kZXJlci0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIFJlbmRlckJsb2NrOjpwb3NpdGlvbkZvclBvaW50KGNvbnRlbnRzUG9pbnQpOwot
fQotCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKE5vZGUqIG5vZGUpCi0gICAg
OiBSZW5kZXJUZXh0Q29udHJvbChub2RlKQorUmVuZGVyU2VhcmNoRmllbGQ6OlJlbmRlclNlYXJj
aEZpZWxkKE5vZGUqIG5vZGUpCisgICAgOiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUobm9k
ZSkKICAgICAsIG1fc2VhcmNoUG9wdXBJc1Zpc2libGUoZmFsc2UpCi0gICAgLCBtX3Nob3VsZERy
YXdDYXBzTG9ja0luZGljYXRvcihmYWxzZSkKLSAgICAsIG1fZGVzaXJlZElubmVyVGV4dEhlaWdo
dCgtMSkKICAgICAsIG1fc2VhcmNoUG9wdXAoMCkKIHsKICAgICBBU1NFUlQobm9kZS0+aXNIVE1M
RWxlbWVudCgpKTsKICAgICBBU1NFUlQobm9kZS0+dG9JbnB1dEVsZW1lbnQoKSk7CiB9CiAKLVJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6flJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZSgp
CitSZW5kZXJTZWFyY2hGaWVsZDo6flJlbmRlclNlYXJjaEZpZWxkKCkKIHsKICAgICBpZiAobV9z
ZWFyY2hQb3B1cCkgewogICAgICAgICBtX3NlYXJjaFBvcHVwLT5wb3B1cE1lbnUoKS0+ZGlzY29u
bmVjdENsaWVudCgpOwpAQCAtODcsMzggKzcwLDcgQEAgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lOjp+UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKCkKICAgICB9CiB9CiAKLWlubGluZSBI
VE1MRWxlbWVudCogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjb250YWluZXJFbGVtZW50
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gaW5wdXRFbGVtZW50KCktPmNvbnRhaW5lckVsZW1lbnQo
KTsKLX0KLQotaW5saW5lIEhUTUxFbGVtZW50KiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6
OmlubmVyQmxvY2tFbGVtZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gaW5wdXRFbGVtZW50KCkt
PmlubmVyQmxvY2tFbGVtZW50KCk7Ci19Ci0KLWlubGluZSBIVE1MRWxlbWVudCogUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lOjppbm5lclNwaW5CdXR0b25FbGVtZW50KCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gaW5wdXRFbGVtZW50KCktPmlubmVyU3BpbkJ1dHRvbkVsZW1lbnQoKTsKLX0KLQot
aW5saW5lIEhUTUxFbGVtZW50KiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnJlc3VsdHNC
dXR0b25FbGVtZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gaW5wdXRFbGVtZW50KCktPnJlc3Vs
dHNCdXR0b25FbGVtZW50KCk7Ci19Ci0KLWlubGluZSBIVE1MRWxlbWVudCogUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lOjpjYW5jZWxCdXR0b25FbGVtZW50KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gaW5wdXRFbGVtZW50KCktPmNhbmNlbEJ1dHRvbkVsZW1lbnQoKTsKLX0KLQotUmVuZGVyU3R5
bGUqIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6dGV4dEJhc2VTdHlsZSgpIGNvbnN0Ci17
Ci0gICAgSFRNTEVsZW1lbnQqIGlubmVyQmxvY2sgPSBpbm5lckJsb2NrRWxlbWVudCgpOwotICAg
IHJldHVybiBpbm5lckJsb2NrID8gaW5uZXJCbG9jay0+cmVuZGVyZXIoKS0+c3R5bGUoKSA6IHN0
eWxlKCk7Ci19Ci0KLXZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjphZGRTZWFyY2hS
ZXN1bHQoKQordm9pZCBSZW5kZXJTZWFyY2hGaWVsZDo6YWRkU2VhcmNoUmVzdWx0KCkKIHsKICAg
ICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IGlucHV0RWxlbWVudCgpOwogICAgIGlmIChpbnB1
dC0+bWF4UmVzdWx0cygpIDw9IDApCkBAIC0xNDksNyArMTAxLDcgQEAgdm9pZCBSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmU6OmFkZFNlYXJjaFJlc3VsdCgpCiAgICAgbV9zZWFyY2hQb3B1cC0+
c2F2ZVJlY2VudFNlYXJjaGVzKG5hbWUsIG1fcmVjZW50U2VhcmNoZXMpOwogfQogCi12b2lkIFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2hvd1BvcHVwKCkKK3ZvaWQgUmVuZGVyU2VhcmNo
RmllbGQ6OnNob3dQb3B1cCgpCiB7CiAgICAgaWYgKG1fc2VhcmNoUG9wdXBJc1Zpc2libGUpCiAg
ICAgICAgIHJldHVybjsKQEAgLTE3OCwzNTggKzEzMCwxNCBAQCB2b2lkIFJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6c2hvd1BvcHVwKCkKICAgICBtX3NlYXJjaFBvcHVwLT5wb3B1cE1lbnUo
KS0+c2hvdyhwaXhlbFNuYXBwZWRJbnRSZWN0KGFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkpLCBk
b2N1bWVudCgpLT52aWV3KCksIC0xKTsKIH0KIAotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmU6OmhpZGVQb3B1cCgpCit2b2lkIFJlbmRlclNlYXJjaEZpZWxkOjpoaWRlUG9wdXAoKQog
ewogICAgIGlmIChtX3NlYXJjaFBvcHVwKQogICAgICAgICBtX3NlYXJjaFBvcHVwLT5wb3B1cE1l
bnUoKS0+aGlkZSgpOwogfQogCi12b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6cGFp
bnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkK
LXsKLSAgICBSZW5kZXJUZXh0Q29udHJvbDo6cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7
Ci0KLSAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQg
JiYgbV9zaG91bGREcmF3Q2Fwc0xvY2tJbmRpY2F0b3IpIHsKLSAgICAgICAgTGF5b3V0UmVjdCBj
b250ZW50c1JlY3QgPSBjb250ZW50Qm94UmVjdCgpOwotCi0gICAgICAgIC8vIENlbnRlciB2ZXJ0
aWNhbGx5IGxpa2UgdGhlIHRleHQuCi0gICAgICAgIGNvbnRlbnRzUmVjdC5zZXRZKChoZWlnaHQo
KSAtIGNvbnRlbnRzUmVjdC5oZWlnaHQoKSkgLyAyKTsKLQotICAgICAgICAvLyBDb252ZXJ0IHRo
ZSByZWN0IGludG8gdGhlIGNvb3JkcyB1c2VkIGZvciBwYWludGluZyB0aGUgY29udGVudAotICAg
ICAgICBjb250ZW50c1JlY3QubW92ZUJ5KHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKSk7Ci0gICAg
ICAgIHRoZW1lKCktPnBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IodGhpcywgcGFpbnRJbmZvLCBwaXhl
bFNuYXBwZWRJbnRSZWN0KGNvbnRlbnRzUmVjdCkpOwotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OmxheW91dCgpCi17Ci0gICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCByZW1vdmUgdGhlIGhlaWdodC1yZWxhdGVkIGhhY2tzIGluIGxheW91dCgpIGFuZAotICAgIC8v
IHN0eWxlRGlkQ2hhbmdlKCkuIFdlIG5lZWQgdGhlbSBiZWNhdXNlCi0gICAgLy8gLSBDZW50ZXIg
dGhlIGlubmVyIGVsZW1lbnRzIHZlcnRpY2FsbHkgaWYgdGhlIGlucHV0IGhlaWdodCBpcyB0YWxs
ZXIgdGhhbgotICAgIC8vICAgdGhlIGludHJpbnNpYyBoZWlnaHQgb2YgdGhlIGlubmVyIGVsZW1l
bnRzLgotICAgIC8vIC0gU2hyaW5rIHRoZSBpbm5lciBlbG1lbnQgaGVpZ2h0cyBpZiB0aGUgaW5w
dXQgaGVpZ2h0IGlzIHNhbWxsZXIgdGhhbiB0aGUKLSAgICAvLyAgIGludHJpbnNpYyBoZWlnaHRz
IG9mIHRoZSBpbm5lciBlbGVtZW50cy4KLQotICAgIC8vIFdlIGRvbid0IGhvbm9yIHBhZGRpbmdz
IGFuZCBib3JkZXJzIGZvciB0ZXh0ZmllbGRzIHdpdGhvdXQgZGVjb3JhdGlvbnMKLSAgICAvLyBh
bmQgdHlwZT1zZWFyY2ggaWYgdGhlIHRleHQgaGVpZ2h0IGlzIHRhbGxlciB0aGFuIHRoZSBjb250
ZW50SGVpZ2h0KCkKLSAgICAvLyBiZWNhdXNlIG9mIGNvbXBhYmlsaXR5LgotCi0gICAgUmVuZGVy
QmxvY2s6OmxheW91dEJsb2NrKGZhbHNlKTsKLQotICAgIFJlbmRlckJveCogaW5uZXJUZXh0UmVu
ZGVyZXIgPSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRlckJveCgpOwotICAgIEFTU0VSVChpbm5l
clRleHRSZW5kZXJlcik7Ci0gICAgUmVuZGVyQm94KiBpbm5lckJsb2NrUmVuZGVyZXIgPSBpbm5l
ckJsb2NrRWxlbWVudCgpID8gaW5uZXJCbG9ja0VsZW1lbnQoKS0+cmVuZGVyQm94KCkgOiAwOwot
ICAgIEhUTUxFbGVtZW50KiBjb250YWluZXIgPSBjb250YWluZXJFbGVtZW50KCk7Ci0gICAgUmVu
ZGVyQm94KiBjb250YWluZXJSZW5kZXJlciA9IGNvbnRhaW5lciA/IGNvbnRhaW5lci0+cmVuZGVy
Qm94KCkgOiAwOwotCi0gICAgLy8gU2V0IHRoZSB0ZXh0IGJsb2NrIGhlaWdodAotICAgIExheW91
dFVuaXQgZGVzaXJlZEhlaWdodCA9IHRleHRCbG9ja0hlaWdodCgpOwotICAgIExheW91dFVuaXQg
Y3VycmVudEhlaWdodCA9IGlubmVyVGV4dFJlbmRlcmVyLT5oZWlnaHQoKTsKLQotICAgIExheW91
dFVuaXQgaGVpZ2h0TGltaXQgPSAoaW5wdXRFbGVtZW50KCktPmlzU2VhcmNoRmllbGQoKSB8fCAh
Y29udGFpbmVyKSA/IGhlaWdodCgpIDogY29udGVudEhlaWdodCgpOwotICAgIGlmIChjdXJyZW50
SGVpZ2h0ID4gaGVpZ2h0TGltaXQpIHsKLSAgICAgICAgaWYgKGRlc2lyZWRIZWlnaHQgIT0gY3Vy
cmVudEhlaWdodCkKLSAgICAgICAgICAgIHNldE5lZWRzTGF5b3V0KHRydWUsIE1hcmtPbmx5VGhp
cyk7Ci0KLSAgICAgICAgaW5uZXJUZXh0UmVuZGVyZXItPnN0eWxlKCktPnNldEhlaWdodChMZW5n
dGgoZGVzaXJlZEhlaWdodCwgRml4ZWQpKTsKLSAgICAgICAgbV9kZXNpcmVkSW5uZXJUZXh0SGVp
Z2h0ID0gZGVzaXJlZEhlaWdodDsKLSAgICAgICAgaWYgKGlubmVyQmxvY2tSZW5kZXJlcikKLSAg
ICAgICAgICAgIGlubmVyQmxvY2tSZW5kZXJlci0+c3R5bGUoKS0+c2V0SGVpZ2h0KExlbmd0aChk
ZXNpcmVkSGVpZ2h0LCBGaXhlZCkpOwotICAgIH0KLSAgICAvLyBUaGUgY29udGFpbmVyIG1pZ2h0
IGJlIHRhbGxlciBiZWNhdXNlIG9mIGRlY29yYXRpb24gZWxlbWVudHMuCi0gICAgaWYgKGNvbnRh
aW5lclJlbmRlcmVyKSB7Ci0gICAgICAgIGNvbnRhaW5lclJlbmRlcmVyLT5sYXlvdXRJZk5lZWRl
ZCgpOwotICAgICAgICBMYXlvdXRVbml0IGNvbnRhaW5lckhlaWdodCA9IGNvbnRhaW5lclJlbmRl
cmVyLT5oZWlnaHQoKTsKLSAgICAgICAgaWYgKGNvbnRhaW5lckhlaWdodCA+IGhlaWdodExpbWl0
KSB7Ci0gICAgICAgICAgICBjb250YWluZXJSZW5kZXJlci0+c3R5bGUoKS0+c2V0SGVpZ2h0KExl
bmd0aChoZWlnaHRMaW1pdCwgRml4ZWQpKTsKLSAgICAgICAgICAgIHNldE5lZWRzTGF5b3V0KHRy
dWUsIE1hcmtPbmx5VGhpcyk7Ci0gICAgICAgIH0gZWxzZSBpZiAoY29udGFpbmVyUmVuZGVyZXIt
PmhlaWdodCgpIDwgY29udGVudEhlaWdodCgpKSB7Ci0gICAgICAgICAgICBjb250YWluZXJSZW5k
ZXJlci0+c3R5bGUoKS0+c2V0SGVpZ2h0KExlbmd0aChjb250ZW50SGVpZ2h0KCksIEZpeGVkKSk7
Ci0gICAgICAgICAgICBzZXROZWVkc0xheW91dCh0cnVlLCBNYXJrT25seVRoaXMpOwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIGNvbnRhaW5lclJlbmRlcmVyLT5zdHlsZSgpLT5zZXRIZWln
aHQoTGVuZ3RoKGNvbnRhaW5lckhlaWdodCwgRml4ZWQpKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB3
ZSBuZWVkIGFub3RoZXIgbGF5b3V0IHBhc3MsIHdlIGhhdmUgY2hhbmdlZCBvbmUgb2YgY2hpbGRy
ZW4ncyBoZWlnaHQgc28gd2UgbmVlZCB0byByZWxheW91dCB0aGVtLgotICAgIGlmIChuZWVkc0xh
eW91dCgpKQotICAgICAgICBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2sodHJ1ZSk7Ci0KLSAgICAv
LyBDZW50ZXIgdGhlIGNoaWxkIGJsb2NrIHZlcnRpY2FsbHkKLSAgICBjdXJyZW50SGVpZ2h0ID0g
aW5uZXJUZXh0UmVuZGVyZXItPmhlaWdodCgpOwotICAgIGlmICghY29udGFpbmVyICYmIGN1cnJl
bnRIZWlnaHQgIT0gY29udGVudEhlaWdodCgpKSB7Ci0gICAgICAgIExheW91dFVuaXQgaGVpZ2h0
RGlmZiA9IGN1cnJlbnRIZWlnaHQgLSBjb250ZW50SGVpZ2h0KCk7Ci0gICAgICAgIGlubmVyVGV4
dFJlbmRlcmVyLT5zZXRZKGlubmVyVGV4dFJlbmRlcmVyLT55KCkgLSAoaGVpZ2h0RGlmZiAvIDIg
KyBsYXlvdXRNb2QoaGVpZ2h0RGlmZiwgMikpKTsKLSAgICB9IGVsc2UgaWYgKGlucHV0RWxlbWVu
dCgpLT5pc1NlYXJjaEZpZWxkKCkgJiYgY29udGFpbmVyUmVuZGVyZXIgJiYgY29udGFpbmVyUmVu
ZGVyZXItPmhlaWdodCgpID4gY29udGVudEhlaWdodCgpKSB7Ci0gICAgICAgIC8vIEEgcXVpcmsg
Zm9yIGZpbmQtaW4tcGFnZSBib3ggb24gU2FmYXJpIFdpbmRvd3MuCi0gICAgICAgIC8vIGh0dHA6
Ly93ZWJraXQub3JnL2IvNjMxNTcKLSAgICAgICAgTGF5b3V0VW5pdCBoZWlnaHREaWZmID0gY29u
dGFpbmVyUmVuZGVyZXItPmhlaWdodCgpIC0gY29udGVudEhlaWdodCgpOwotICAgICAgICBjb250
YWluZXJSZW5kZXJlci0+c2V0WShjb250YWluZXJSZW5kZXJlci0+eSgpIC0gKGhlaWdodERpZmYg
LyAyICsgbGF5b3V0TW9kKGhlaWdodERpZmYsIDIpKSk7Ci0gICAgfQotCi0gICAgLy8gSWdub3Jl
cyB0aGUgcGFkZGluZ3MgZm9yIHRoZSBpbm5lciBzcGluIGJ1dHRvbi4KLSAgICBpZiAoUmVuZGVy
Qm94KiBpbm5lclNwaW5Cb3ggPSBpbm5lclNwaW5CdXR0b25FbGVtZW50KCkgPyBpbm5lclNwaW5C
dXR0b25FbGVtZW50KCktPnJlbmRlckJveCgpIDogMCkgewotICAgICAgICBSZW5kZXJCb3gqIHBh
cmVudEJveCA9IGlubmVyU3BpbkJveC0+cGFyZW50Qm94KCk7Ci0gICAgICAgIGlmIChjb250YWlu
ZXJSZW5kZXJlciAmJiAhY29udGFpbmVyUmVuZGVyZXItPnN0eWxlKCktPmlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24oKSkKLSAgICAgICAgICAgIGlubmVyU3BpbkJveC0+c2V0TG9jYXRpb24oTGF5b3V0
UG9pbnQoLXBhZGRpbmdMZWZ0KCksIC1wYWRkaW5nVG9wKCkpKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgaW5uZXJTcGluQm94LT5zZXRMb2NhdGlvbihMYXlvdXRQb2ludChwYXJlbnRCb3gt
PndpZHRoKCkgLSBpbm5lclNwaW5Cb3gtPndpZHRoKCkgKyBwYWRkaW5nUmlnaHQoKSwgLXBhZGRp
bmdUb3AoKSkpOwotICAgICAgICBpbm5lclNwaW5Cb3gtPnNldEhlaWdodChoZWlnaHQoKSAtIGJv
cmRlclRvcCgpIC0gYm9yZGVyQm90dG9tKCkpOwotICAgIH0KLQotICAgIEhUTUxFbGVtZW50KiBw
bGFjZWhvbGRlckVsZW1lbnQgPSBpbnB1dEVsZW1lbnQoKS0+cGxhY2Vob2xkZXJFbGVtZW50KCk7
Ci0gICAgaWYgKFJlbmRlckJveCogcGxhY2Vob2xkZXJCb3ggPSBwbGFjZWhvbGRlckVsZW1lbnQg
PyBwbGFjZWhvbGRlckVsZW1lbnQtPnJlbmRlckJveCgpIDogMCkgewotICAgICAgICBwbGFjZWhv
bGRlckJveC0+c3R5bGUoKS0+c2V0V2lkdGgoTGVuZ3RoKGlubmVyVGV4dFJlbmRlcmVyLT53aWR0
aCgpIC0gcGxhY2Vob2xkZXJCb3gtPmJvcmRlckFuZFBhZGRpbmdXaWR0aCgpLCBGaXhlZCkpOwot
ICAgICAgICBwbGFjZWhvbGRlckJveC0+c3R5bGUoKS0+c2V0SGVpZ2h0KExlbmd0aChpbm5lclRl
eHRSZW5kZXJlci0+aGVpZ2h0KCkgLSBwbGFjZWhvbGRlckJveC0+Ym9yZGVyQW5kUGFkZGluZ0hl
aWdodCgpLCBGaXhlZCkpOwotICAgICAgICBib29sIHBsYWNlaG9sZGVyQm94SGFkTGF5b3V0ID0g
cGxhY2Vob2xkZXJCb3gtPmV2ZXJIYWRMYXlvdXQoKTsKLSAgICAgICAgcGxhY2Vob2xkZXJCb3gt
PmxheW91dElmTmVlZGVkKCk7Ci0gICAgICAgIExheW91dFBvaW50IHRleHRPZmZzZXQgPSBpbm5l
clRleHRSZW5kZXJlci0+bG9jYXRpb24oKTsKLSAgICAgICAgaWYgKGlubmVyQmxvY2tFbGVtZW50
KCkgJiYgaW5uZXJCbG9ja0VsZW1lbnQoKS0+cmVuZGVyQm94KCkpCi0gICAgICAgICAgICB0ZXh0
T2Zmc2V0ICs9IHRvTGF5b3V0U2l6ZShpbm5lckJsb2NrRWxlbWVudCgpLT5yZW5kZXJCb3goKS0+
bG9jYXRpb24oKSk7Ci0gICAgICAgIGlmIChjb250YWluZXJSZW5kZXJlcikKLSAgICAgICAgICAg
IHRleHRPZmZzZXQgKz0gdG9MYXlvdXRTaXplKGNvbnRhaW5lclJlbmRlcmVyLT5sb2NhdGlvbigp
KTsKLSAgICAgICAgcGxhY2Vob2xkZXJCb3gtPnNldExvY2F0aW9uKHRleHRPZmZzZXQpOwotCi0g
ICAgICAgIGlmICghcGxhY2Vob2xkZXJCb3hIYWRMYXlvdXQgJiYgcGxhY2Vob2xkZXJCb3gtPmNo
ZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpKSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGFzc3Vt
ZXMgYSBzaGFkb3cgdHJlZSB3aXRob3V0IGZsb2F0cy4gSWYgZmxvYXRzIGFyZSBhZGRlZCwgdGhl
Ci0gICAgICAgICAgICAvLyBsb2dpYyBzaG91bGQgYmUgc2hhcmVkIHdpdGggUmVuZGVyQmxvY2s6
OmxheW91dEJsb2NrQ2hpbGQuCi0gICAgICAgICAgICBwbGFjZWhvbGRlckJveC0+cmVwYWludCgp
OwotICAgICAgICB9Ci0gICAgfQotfQotCi1ib29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1
bHQmIHJlc3VsdCwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExh
eW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9u
KQotewotICAgIGlmICghUmVuZGVyVGV4dENvbnRyb2w6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJl
c3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGhpdFRlc3RBY3Rpb24p
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBTYXkgdGhhdCB3ZSBoaXQgdGhlIGlu
bmVyIHRleHQgZWxlbWVudCBpZgotICAgIC8vICAtIHdlIGhpdCBhIG5vZGUgaW5zaWRlIHRoZSBp
bm5lciB0ZXh0IGVsZW1lbnQsCi0gICAgLy8gIC0gd2UgaGl0IHRoZSA8aW5wdXQ+IGVsZW1lbnQg
KGUuZy4gd2UncmUgb3ZlciB0aGUgYm9yZGVyIG9yIHBhZGRpbmcpLCBvcgotICAgIC8vICAtIHdl
IGhpdCByZWdpb25zIG5vdCBpbiBhbnkgZGVjb3JhdGlvbiBidXR0b25zLgotICAgIEhUTUxFbGVt
ZW50KiBjb250YWluZXIgPSBjb250YWluZXJFbGVtZW50KCk7Ci0gICAgaWYgKHJlc3VsdC5pbm5l
ck5vZGUoKS0+aXNEZXNjZW5kYW50T2YoaW5uZXJUZXh0RWxlbWVudCgpKSB8fCByZXN1bHQuaW5u
ZXJOb2RlKCkgPT0gbm9kZSgpIHx8IChjb250YWluZXIgJiYgY29udGFpbmVyID09IHJlc3VsdC5p
bm5lck5vZGUoKSkpIHsKLSAgICAgICAgTGF5b3V0UG9pbnQgcG9pbnRJblBhcmVudCA9IHBvaW50
SW5Db250YWluZXI7Ci0gICAgICAgIGlmIChjb250YWluZXIgJiYgaW5uZXJCbG9ja0VsZW1lbnQo
KSkgewotICAgICAgICAgICAgaWYgKGlubmVyQmxvY2tFbGVtZW50KCktPnJlbmRlckJveCgpKQot
ICAgICAgICAgICAgICAgIHBvaW50SW5QYXJlbnQgLT0gdG9MYXlvdXRTaXplKGlubmVyQmxvY2tF
bGVtZW50KCktPnJlbmRlckJveCgpLT5sb2NhdGlvbigpKTsKLSAgICAgICAgICAgIGlmIChjb250
YWluZXItPnJlbmRlckJveCgpKQotICAgICAgICAgICAgICAgIHBvaW50SW5QYXJlbnQgLT0gdG9M
YXlvdXRTaXplKGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmxvY2F0aW9uKCkpOwotICAgICAgICB9
Ci0gICAgICAgIGhpdElubmVyVGV4dEVsZW1lbnQocmVzdWx0LCBwb2ludEluUGFyZW50LCBhY2N1
bXVsYXRlZE9mZnNldCk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZTo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRp
ZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKLXsKLSAgICBtX2Rlc2lyZWRJbm5lclRl
eHRIZWlnaHQgPSAtMTsKLSAgICBSZW5kZXJUZXh0Q29udHJvbDo6c3R5bGVEaWRDaGFuZ2UoZGlm
Ziwgb2xkU3R5bGUpOwotCi0gICAgLy8gV2UgbWF5IGhhdmUgc2V0IHRoZSB3aWR0aCBhbmQgdGhl
IGhlaWdodCBpbiB0aGUgb2xkIHN0eWxlIGluIGxheW91dCgpLgotICAgIC8vIFJlc2V0IHRoZW0g
bm93IHRvIGF2b2lkIGdldHRpbmcgYSBzcHVyaW91cyBsYXlvdXQgaGludC4KLSAgICBIVE1MRWxl
bWVudCogaW5uZXJCbG9jayA9IGlubmVyQmxvY2tFbGVtZW50KCk7Ci0gICAgaWYgKFJlbmRlck9i
amVjdCogaW5uZXJCbG9ja1JlbmRlcmVyID0gaW5uZXJCbG9jayA/IGlubmVyQmxvY2stPnJlbmRl
cmVyKCkgOiAwKSB7Ci0gICAgICAgIGlubmVyQmxvY2tSZW5kZXJlci0+c3R5bGUoKS0+c2V0SGVp
Z2h0KExlbmd0aCgpKTsKLSAgICAgICAgaW5uZXJCbG9ja1JlbmRlcmVyLT5zdHlsZSgpLT5zZXRX
aWR0aChMZW5ndGgoKSk7Ci0gICAgfQotICAgIEhUTUxFbGVtZW50KiBjb250YWluZXIgPSBjb250
YWluZXJFbGVtZW50KCk7Ci0gICAgaWYgKFJlbmRlck9iamVjdCogY29udGFpbmVyUmVuZGVyZXIg
PSBjb250YWluZXIgPyBjb250YWluZXItPnJlbmRlcmVyKCkgOiAwKSB7Ci0gICAgICAgIGNvbnRh
aW5lclJlbmRlcmVyLT5zdHlsZSgpLT5zZXRIZWlnaHQoTGVuZ3RoKCkpOwotICAgICAgICBjb250
YWluZXJSZW5kZXJlci0+c3R5bGUoKS0+c2V0V2lkdGgoTGVuZ3RoKCkpOwotICAgIH0KLSAgICBp
ZiAoSFRNTEVsZW1lbnQqIHBsYWNlaG9sZGVyID0gaW5wdXRFbGVtZW50KCktPnBsYWNlaG9sZGVy
RWxlbWVudCgpKQotICAgICAgICBwbGFjZWhvbGRlci0+c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShD
U1NQcm9wZXJ0eVRleHRPdmVyZmxvdywgdGV4dFNob3VsZEJlVHJ1bmNhdGVkKCkgPyBDU1NWYWx1
ZUVsbGlwc2lzIDogQ1NTVmFsdWVDbGlwKTsKLSAgICBzZXRIYXNPdmVyZmxvd0NsaXAoZmFsc2Up
OwotfQotCi12b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y2Fwc0xvY2tTdGF0ZU1h
eUhhdmVDaGFuZ2VkKCkKLXsKLSAgICBpZiAoIW5vZGUoKSB8fCAhZG9jdW1lbnQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgLy8gT25seSBkcmF3IHRoZSBjYXBzIGxvY2sgaW5kaWNhdG9yIGlm
IHRoZXNlIHRoaW5ncyBhcmUgdHJ1ZToKLSAgICAvLyAxKSBUaGUgZmllbGQgaXMgYSBwYXNzd29y
ZCBmaWVsZAotICAgIC8vIDIpIFRoZSBmcmFtZSBpcyBhY3RpdmUKLSAgICAvLyAzKSBUaGUgZWxl
bWVudCBpcyBmb2N1c2VkCi0gICAgLy8gNCkgVGhlIGNhcHMgbG9jayBpcyBvbgotICAgIGJvb2wg
c2hvdWxkRHJhd0NhcHNMb2NrSW5kaWNhdG9yID0gZmFsc2U7Ci0KLSAgICBpZiAoRnJhbWUqIGZy
YW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkKLSAgICAgICAgc2hvdWxkRHJhd0NhcHNMb2NrSW5k
aWNhdG9yID0gaW5wdXRFbGVtZW50KCktPmlzUGFzc3dvcmRGaWVsZCgpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICYmIGZyYW1lLT5zZWxlY3Rpb24oKS0+aXNGb2N1c2Vk
QW5kQWN0aXZlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgZG9j
dW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSA9PSBub2RlKCkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJiYgUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpjdXJyZW50Q2Fwc0xvY2tT
dGF0ZSgpOwotCi0gICAgaWYgKHNob3VsZERyYXdDYXBzTG9ja0luZGljYXRvciAhPSBtX3Nob3Vs
ZERyYXdDYXBzTG9ja0luZGljYXRvcikgewotICAgICAgICBtX3Nob3VsZERyYXdDYXBzTG9ja0lu
ZGljYXRvciA9IHNob3VsZERyYXdDYXBzTG9ja0luZGljYXRvcjsKLSAgICAgICAgcmVwYWludCgp
OwotICAgIH0KLX0KLQotYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Omhhc0NvbnRy
b2xDbGlwKCkgY29uc3QKLXsKLSAgICAvLyBBcHBseSBjb250cm9sIGNsaXAgZm9yIHRleHQgZmll
bGRzIHdpdGggZGVjb3JhdGlvbnMuCi0gICAgcmV0dXJuICEhY29udGFpbmVyRWxlbWVudCgpOwot
fQotCi1MYXlvdXRSZWN0IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y29udHJvbENsaXBS
ZWN0KGNvbnN0IExheW91dFBvaW50JiBhZGRpdGlvbmFsT2Zmc2V0KSBjb25zdAotewotICAgIEFT
U0VSVChoYXNDb250cm9sQ2xpcCgpKTsKLSAgICBMYXlvdXRSZWN0IGNsaXBSZWN0ID0gdW5pb25S
ZWN0KGNvbnRlbnRCb3hSZWN0KCksIGNvbnRhaW5lckVsZW1lbnQoKS0+cmVuZGVyQm94KCktPmZy
YW1lUmVjdCgpKTsKLSAgICBjbGlwUmVjdC5tb3ZlQnkoYWRkaXRpb25hbE9mZnNldCk7Ci0gICAg
cmV0dXJuIGNsaXBSZWN0OwotfQotCi1mbG9hdCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6
OmdldEF2Z0NoYXJXaWR0aChBdG9taWNTdHJpbmcgZmFtaWx5KQotewotICAgIC8vIFNpbmNlIEx1
Y2lkYSBHcmFuZGUgaXMgdGhlIGRlZmF1bHQgZm9udCwgd2Ugd2FudCB0aGlzIHRvIG1hdGNoIHRo
ZSB3aWR0aAotICAgIC8vIG9mIE1TIFNoZWxsIERsZywgdGhlIGRlZmF1bHQgZm9udCBmb3IgdGV4
dGFyZWFzIGluIEZpcmVmb3gsIFNhZmFyaSBXaW4gYW5kCi0gICAgLy8gSUUgZm9yIHNvbWUgZW5j
b2RpbmdzIChpbiBJRSwgdGhlIGRlZmF1bHQgZm9udCBpcyBlbmNvZGluZyBzcGVjaWZpYykuCi0g
ICAgLy8gOTAxIGlzIHRoZSBhdmdDaGFyV2lkdGggdmFsdWUgaW4gdGhlIE9TLzIgdGFibGUgZm9y
IE1TIFNoZWxsIERsZy4KLSAgICBpZiAoZmFtaWx5ID09IEF0b21pY1N0cmluZygiTHVjaWRhIEdy
YW5kZSIpKQotICAgICAgICByZXR1cm4gc2NhbGVFbVRvVW5pdHMoOTAxKTsKLQotICAgIHJldHVy
biBSZW5kZXJUZXh0Q29udHJvbDo6Z2V0QXZnQ2hhcldpZHRoKGZhbWlseSk7Ci19Ci0KLUxheW91
dFVuaXQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpwcmVmZXJyZWRDb250ZW50V2lkdGgo
ZmxvYXQgY2hhcldpZHRoKSBjb25zdAotewotICAgIGludCBmYWN0b3I7Ci0gICAgYm9vbCBpbmNs
dWRlc0RlY29yYXRpb24gPSBpbnB1dEVsZW1lbnQoKS0+c2l6ZVNob3VsZEluY2x1ZGVEZWNvcmF0
aW9uKGZhY3Rvcik7Ci0gICAgaWYgKGZhY3RvciA8PSAwKQotICAgICAgICBmYWN0b3IgPSAyMDsK
LQotICAgIExheW91dFVuaXQgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8TGF5b3V0VW5pdD4oY2VpbGVk
TGF5b3V0VW5pdChjaGFyV2lkdGggKiBmYWN0b3IpKTsKLQotICAgIGZsb2F0IG1heENoYXJXaWR0
aCA9IDAuZjsKLSAgICBBdG9taWNTdHJpbmcgZmFtaWx5ID0gc3R5bGUoKS0+Zm9udCgpLmZhbWls
eSgpLmZhbWlseSgpOwotICAgIC8vIFNpbmNlIEx1Y2lkYSBHcmFuZGUgaXMgdGhlIGRlZmF1bHQg
Zm9udCwgd2Ugd2FudCB0aGlzIHRvIG1hdGNoIHRoZSB3aWR0aAotICAgIC8vIG9mIE1TIFNoZWxs
IERsZywgdGhlIGRlZmF1bHQgZm9udCBmb3IgdGV4dGFyZWFzIGluIEZpcmVmb3gsIFNhZmFyaSBX
aW4gYW5kCi0gICAgLy8gSUUgZm9yIHNvbWUgZW5jb2RpbmdzIChpbiBJRSwgdGhlIGRlZmF1bHQg
Zm9udCBpcyBlbmNvZGluZyBzcGVjaWZpYykuCi0gICAgLy8gNDAyNyBpcyB0aGUgKHhNYXggLSB4
TWluKSB2YWx1ZSBpbiB0aGUgImhlYWQiIGZvbnQgdGFibGUgZm9yIE1TIFNoZWxsIERsZy4KLSAg
ICBpZiAoZmFtaWx5ID09IEF0b21pY1N0cmluZygiTHVjaWRhIEdyYW5kZSIpKQotICAgICAgICBt
YXhDaGFyV2lkdGggPSBzY2FsZUVtVG9Vbml0cyg0MDI3KTsKLSAgICBlbHNlIGlmIChoYXNWYWxp
ZEF2Z0NoYXJXaWR0aChmYW1pbHkpKQotICAgICAgICBtYXhDaGFyV2lkdGggPSByb3VuZGYoc3R5
bGUoKS0+Zm9udCgpLnByaW1hcnlGb250KCktPm1heENoYXJXaWR0aCgpKTsKLQotICAgIC8vIEZv
ciB0ZXh0IGlucHV0cywgSUUgYWRkcyBzb21lIGV4dHJhIHdpZHRoLgotICAgIGlmIChtYXhDaGFy
V2lkdGggPiAwLmYpCi0gICAgICAgIHJlc3VsdCArPSBtYXhDaGFyV2lkdGggLSBjaGFyV2lkdGg7
Ci0KLSAgICBpZiAoaW5jbHVkZXNEZWNvcmF0aW9uKSB7Ci0gICAgICAgIEhUTUxFbGVtZW50KiBz
cGluQnV0dG9uID0gaW5uZXJTcGluQnV0dG9uRWxlbWVudCgpOwotICAgICAgICBpZiAoUmVuZGVy
Qm94KiBzcGluUmVuZGVyZXIgPSBzcGluQnV0dG9uID8gc3BpbkJ1dHRvbi0+cmVuZGVyQm94KCkg
OiAwKSB7Ci0gICAgICAgICAgICByZXN1bHQgKz0gc3BpblJlbmRlcmVyLT5ib3JkZXJMZWZ0KCkg
KyBzcGluUmVuZGVyZXItPmJvcmRlclJpZ2h0KCkgKwotICAgICAgICAgICAgICAgICAgc3BpblJl
bmRlcmVyLT5wYWRkaW5nTGVmdCgpICsgc3BpblJlbmRlcmVyLT5wYWRkaW5nUmlnaHQoKTsKLSAg
ICAgICAgICAgIC8vIFNpbmNlIHRoZSB3aWR0aCBvZiBzcGluUmVuZGVyZXIgaXMgbm90IGNhbGN1
bGF0ZWQgeWV0LCBzcGluUmVuZGVyZXItPndpZHRoKCkgcmV0dXJucyAwLgotICAgICAgICAgICAg
Ly8gU28gY29tcHV0ZWRTdHlsZSgpLT53aWR0aCgpIGlzIHVzZWQgaW5zdGVhZC4KLSAgICAgICAg
ICAgIHJlc3VsdCArPSBzcGluQnV0dG9uLT5jb21wdXRlZFN0eWxlKCktPndpZHRoKCkudmFsdWUo
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUxheW91dFVu
aXQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjb21wdXRlQ29udHJvbEhlaWdodChMYXlv
dXRVbml0IGxpbmVIZWlnaHQsIExheW91dFVuaXQgbm9uQ29udGVudEhlaWdodCkgY29uc3QKLXsK
LSAgICBIVE1MRWxlbWVudCogcmVzdWx0c0J1dHRvbiA9IHJlc3VsdHNCdXR0b25FbGVtZW50KCk7
Ci0gICAgaWYgKFJlbmRlckJveCogcmVzdWx0c1JlbmRlcmVyID0gcmVzdWx0c0J1dHRvbiA/IHJl
c3VsdHNCdXR0b24tPnJlbmRlckJveCgpIDogMCkgewotICAgICAgICByZXN1bHRzUmVuZGVyZXIt
PmNvbXB1dGVMb2dpY2FsSGVpZ2h0KCk7Ci0gICAgICAgIG5vbkNvbnRlbnRIZWlnaHQgPSBtYXgo
bm9uQ29udGVudEhlaWdodCwgcmVzdWx0c1JlbmRlcmVyLT5ib3JkZXJBbmRQYWRkaW5nSGVpZ2h0
KCkgKyByZXN1bHRzUmVuZGVyZXItPm1hcmdpbkhlaWdodCgpKTsKLSAgICAgICAgbGluZUhlaWdo
dCA9IG1heChsaW5lSGVpZ2h0LCByZXN1bHRzUmVuZGVyZXItPmhlaWdodCgpKTsKLSAgICB9Ci0g
ICAgSFRNTEVsZW1lbnQqIGNhbmNlbEJ1dHRvbiA9IGNhbmNlbEJ1dHRvbkVsZW1lbnQoKTsKLSAg
ICBpZiAoUmVuZGVyQm94KiBjYW5jZWxSZW5kZXJlciA9IGNhbmNlbEJ1dHRvbiA/IGNhbmNlbEJ1
dHRvbi0+cmVuZGVyQm94KCkgOiAwKSB7Ci0gICAgICAgIGNhbmNlbFJlbmRlcmVyLT5jb21wdXRl
TG9naWNhbEhlaWdodCgpOwotICAgICAgICBub25Db250ZW50SGVpZ2h0ID0gbWF4KG5vbkNvbnRl
bnRIZWlnaHQsIGNhbmNlbFJlbmRlcmVyLT5ib3JkZXJBbmRQYWRkaW5nSGVpZ2h0KCkgKyBjYW5j
ZWxSZW5kZXJlci0+bWFyZ2luSGVpZ2h0KCkpOwotICAgICAgICBsaW5lSGVpZ2h0ID0gbWF4KGxp
bmVIZWlnaHQsIGNhbmNlbFJlbmRlcmVyLT5oZWlnaHQoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IGxpbmVIZWlnaHQgKyBub25Db250ZW50SGVpZ2h0OwotfQotCi12b2lkIFJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6dXBkYXRlRnJvbUVsZW1lbnQoKQotewotICAgIFJlbmRlclRleHRDb250
cm9sOjp1cGRhdGVGcm9tRWxlbWVudCgpOwotCi0gICAgaWYgKGNhbmNlbEJ1dHRvbkVsZW1lbnQo
KSkKLSAgICAgICAgdXBkYXRlQ2FuY2VsQnV0dG9uVmlzaWJpbGl0eSgpOwotCi0gICAgaWYgKG1f
c2VhcmNoUG9wdXBJc1Zpc2libGUpCi0gICAgICAgIG1fc2VhcmNoUG9wdXAtPnBvcHVwTWVudSgp
LT51cGRhdGVGcm9tRWxlbWVudCgpOwotfQotCi1QYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZUlubmVyVGV4dFN0eWxlKGNvbnN0IFJlbmRl
clN0eWxlKiBzdGFydFN0eWxlKSBjb25zdAotewotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gdGV4
dEJsb2NrU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7ICAgCi0gICAgdGV4dEJsb2NrU3R5
bGUtPmluaGVyaXRGcm9tKHN0YXJ0U3R5bGUpOwotICAgIGFkanVzdElubmVyVGV4dFN0eWxlKHN0
YXJ0U3R5bGUsIHRleHRCbG9ja1N0eWxlLmdldCgpKTsKLQotICAgIHRleHRCbG9ja1N0eWxlLT5z
ZXRXaGl0ZVNwYWNlKFBSRSk7Ci0gICAgdGV4dEJsb2NrU3R5bGUtPnNldFdvcmRXcmFwKE5vcm1h
bFdvcmRXcmFwKTsKLSAgICB0ZXh0QmxvY2tTdHlsZS0+c2V0T3ZlcmZsb3dYKE9ISURERU4pOwot
ICAgIHRleHRCbG9ja1N0eWxlLT5zZXRPdmVyZmxvd1koT0hJRERFTik7Ci0gICAgdGV4dEJsb2Nr
U3R5bGUtPnNldFRleHRPdmVyZmxvdyh0ZXh0U2hvdWxkQmVUcnVuY2F0ZWQoKSA/IFRleHRPdmVy
Zmxvd0VsbGlwc2lzIDogVGV4dE92ZXJmbG93Q2xpcCk7Ci0KLSAgICBpZiAobV9kZXNpcmVkSW5u
ZXJUZXh0SGVpZ2h0ID49IDApCi0gICAgICAgIHRleHRCbG9ja1N0eWxlLT5zZXRIZWlnaHQoTGVu
Z3RoKG1fZGVzaXJlZElubmVyVGV4dEhlaWdodCwgRml4ZWQpKTsKLSAgICAvLyBEbyBub3QgYWxs
b3cgbGluZS1oZWlnaHQgdG8gYmUgc21hbGxlciB0aGFuIG91ciBkZWZhdWx0LgotICAgIGlmICh0
ZXh0QmxvY2tTdHlsZS0+Zm9udE1ldHJpY3MoKS5saW5lU3BhY2luZygpID4gbGluZUhlaWdodCh0
cnVlLCBIb3Jpem9udGFsTGluZSwgUG9zaXRpb25PZkludGVyaW9yTGluZUJveGVzKSkKLSAgICAg
ICAgdGV4dEJsb2NrU3R5bGUtPnNldExpbmVIZWlnaHQoTGVuZ3RoKC0xMDAuMGYsIFBlcmNlbnQp
KTsKLQotICAgIHRleHRCbG9ja1N0eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsKLQotICAgIHJldHVy
biB0ZXh0QmxvY2tTdHlsZS5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+
IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y3JlYXRlSW5uZXJCbG9ja1N0eWxlKGNvbnN0
IFJlbmRlclN0eWxlKiBzdGFydFN0eWxlKSBjb25zdAotewotICAgIFJlZlB0cjxSZW5kZXJTdHls
ZT4gaW5uZXJCbG9ja1N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwotICAgIGlubmVyQmxv
Y2tTdHlsZS0+aW5oZXJpdEZyb20oc3RhcnRTdHlsZSk7Ci0KLSAgICBpbm5lckJsb2NrU3R5bGUt
PnNldEJveEZsZXgoMSk7Ci0gICAgaW5uZXJCbG9ja1N0eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsK
LSAgICBpbm5lckJsb2NrU3R5bGUtPnNldERpcmVjdGlvbihMVFIpOwotCi0gICAgLy8gV2UgZG9u
J3Qgd2FudCB0aGUgc2hhZG93IGRvbSB0byBiZSBlZGl0YWJsZSwgc28gd2Ugc2V0IHRoaXMgYmxv
Y2sgdG8gcmVhZC1vbmx5IGluIGNhc2UgdGhlIGlucHV0IGl0c2VsZiBpcyBlZGl0YWJsZS4KLSAg
ICBpbm5lckJsb2NrU3R5bGUtPnNldFVzZXJNb2RpZnkoUkVBRF9PTkxZKTsKLQotICAgIHJldHVy
biBpbm5lckJsb2NrU3R5bGUucmVsZWFzZSgpOwotfQotCi12b2lkIFJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZTo6dXBkYXRlQ2FuY2VsQnV0dG9uVmlzaWJpbGl0eSgpIGNvbnN0Ci17Ci0gICAg
UmVuZGVyT2JqZWN0KiBjYW5jZWxCdXR0b25SZW5kZXJlciA9IGNhbmNlbEJ1dHRvbkVsZW1lbnQo
KS0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIWNhbmNlbEJ1dHRvblJlbmRlcmVyKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBjb25zdCBSZW5kZXJTdHlsZSogY3VyU3R5bGUgPSBjYW5jZWxCdXR0b25S
ZW5kZXJlci0+c3R5bGUoKTsKLSAgICBFVmlzaWJpbGl0eSBidXR0b25WaXNpYmlsaXR5ID0gdmlz
aWJpbGl0eUZvckNhbmNlbEJ1dHRvbigpOwotICAgIGlmIChjdXJTdHlsZS0+dmlzaWJpbGl0eSgp
ID09IGJ1dHRvblZpc2liaWxpdHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxSZW5k
ZXJTdHlsZT4gY2FuY2VsQnV0dG9uU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmUoY3VyU3R5bGUp
OwotICAgIGNhbmNlbEJ1dHRvblN0eWxlLT5zZXRWaXNpYmlsaXR5KGJ1dHRvblZpc2liaWxpdHkp
OwotICAgIGNhbmNlbEJ1dHRvblJlbmRlcmVyLT5zZXRTdHlsZShjYW5jZWxCdXR0b25TdHlsZSk7
Ci19Ci0KLUVWaXNpYmlsaXR5IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6dmlzaWJpbGl0
eUZvckNhbmNlbEJ1dHRvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIChzdHlsZSgpLT52aXNpYmls
aXR5KCkgPT0gSElEREVOIHx8IGlucHV0RWxlbWVudCgpLT52YWx1ZSgpLmlzRW1wdHkoKSkgPyBI
SURERU4gOiBWSVNJQkxFOwotfQotCi1ib29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6
dGV4dFNob3VsZEJlVHJ1bmNhdGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZG9jdW1lbnQoKS0+
Zm9jdXNlZE5vZGUoKSAhPSBub2RlKCkKLSAgICAgICAgJiYgc3R5bGUoKS0+dGV4dE92ZXJmbG93
KCkgPT0gVGV4dE92ZXJmbG93RWxsaXBzaXM7Ci19Ci0KLWNvbnN0IEF0b21pY1N0cmluZyYgUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjphdXRvc2F2ZU5hbWUoKSBjb25zdAotewotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKS0+Z2V0QXR0cmlidXRlKGF1dG9zYXZl
QXR0cik7Ci19Ci0KIC8vIFBvcHVwTWVudUNsaWVudCBtZXRob2RzCi12b2lkIFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6dmFsdWVDaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCwgYm9vbCBm
aXJlRXZlbnRzKQordm9pZCBSZW5kZXJTZWFyY2hGaWVsZDo6dmFsdWVDaGFuZ2VkKHVuc2lnbmVk
IGxpc3RJbmRleCwgYm9vbCBmaXJlRXZlbnRzKQogewogICAgIEFTU0VSVChzdGF0aWNfY2FzdDxp
bnQ+KGxpc3RJbmRleCkgPCBsaXN0U2l6ZSgpKTsKICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1
dCA9IGlucHV0RWxlbWVudCgpOwpAQCAtNTUxLDcgKzE1OSw3IEBAIHZvaWQgUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lOjp2YWx1ZUNoYW5nZWQodW5zaWduZWQgbGlzdEluZGV4LCBib29sIGZp
cmVFdmVuCiAgICAgfQogfQogCi1TdHJpbmcgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpp
dGVtVGV4dCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0CitTdHJpbmcgUmVuZGVyU2VhcmNoRmll
bGQ6Oml0ZW1UZXh0KHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKIHsKICAgICBpbnQgc2l6ZSA9
IGxpc3RTaXplKCk7CiAgICAgaWYgKHNpemUgPT0gMSkgewpAQCAtNTY3LDQyICsxNzUsNDIgQEAg
U3RyaW5nIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aXRlbVRleHQodW5zaWduZWQgbGlz
dEluZGV4KSBjb25zdAogICAgIHJldHVybiBtX3JlY2VudFNlYXJjaGVzW2xpc3RJbmRleCAtIDFd
OwogfQogCi1TdHJpbmcgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppdGVtTGFiZWwodW5z
aWduZWQpIGNvbnN0CitTdHJpbmcgUmVuZGVyU2VhcmNoRmllbGQ6Oml0ZW1MYWJlbCh1bnNpZ25l
ZCkgY29uc3QKIHsKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLVN0cmluZyBSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmU6Oml0ZW1JY29uKHVuc2lnbmVkKSBjb25zdAorU3RyaW5nIFJlbmRl
clNlYXJjaEZpZWxkOjppdGVtSWNvbih1bnNpZ25lZCkgY29uc3QKIHsKICAgICByZXR1cm4gU3Ry
aW5nKCk7CiB9CiAKLWJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppdGVtSXNFbmFi
bGVkKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKK2Jvb2wgUmVuZGVyU2VhcmNoRmllbGQ6Oml0
ZW1Jc0VuYWJsZWQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAogewogICAgICBpZiAoIWxpc3RJ
bmRleCB8fCBpdGVtSXNTZXBhcmF0b3IobGlzdEluZGV4KSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIHJldHVybiB0cnVlOwogfQogCi1Qb3B1cE1lbnVTdHlsZSBSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6Oml0ZW1TdHlsZSh1bnNpZ25lZCkgY29uc3QKK1BvcHVwTWVudVN0eWxlIFJl
bmRlclNlYXJjaEZpZWxkOjppdGVtU3R5bGUodW5zaWduZWQpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1lbnVTdHlsZSgpOwogfQogCi1Qb3B1cE1lbnVTdHlsZSBSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmU6Om1lbnVTdHlsZSgpIGNvbnN0CitQb3B1cE1lbnVTdHlsZSBSZW5kZXJTZWFyY2hGaWVs
ZDo6bWVudVN0eWxlKCkgY29uc3QKIHsKICAgICByZXR1cm4gUG9wdXBNZW51U3R5bGUoc3R5bGUo
KS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBzdHlsZSgpLT52aXNp
dGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLCBzdHlsZSgpLT5m
b250KCksIHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFLAogICAgICAgICBzdHlsZSgp
LT5kaXNwbGF5KCkgPT0gTk9ORSwgc3R5bGUoKS0+dGV4dEluZGVudCgpLCBzdHlsZSgpLT5kaXJl
Y3Rpb24oKSwgaXNPdmVycmlkZShzdHlsZSgpLT51bmljb2RlQmlkaSgpKSk7CiB9CiAKLWludCBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNsaWVudEluc2V0TGVmdCgpIGNvbnN0CitpbnQg
UmVuZGVyU2VhcmNoRmllbGQ6OmNsaWVudEluc2V0TGVmdCgpIGNvbnN0CiB7CiAgICAgLy8gSW5z
ZXQgdGhlIG1lbnUgYnkgdGhlIHJhZGl1cyBvZiB0aGUgY2FwIG9uIHRoZSBsZWZ0IHNvIHRoYXQK
ICAgICAvLyBpdCBvbmx5IHJ1bnMgYWxvbmcgdGhlIHN0cmFpZ2h0IHBhcnQgb2YgdGhlIGJlemVs
LgogICAgIHJldHVybiBoZWlnaHQoKSAvIDI7CiB9CiAKLWludCBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6OmNsaWVudEluc2V0UmlnaHQoKSBjb25zdAoraW50IFJlbmRlclNlYXJjaEZpZWxk
OjpjbGllbnRJbnNldFJpZ2h0KCkgY29uc3QKIHsKICAgICAvLyBJbnNldCB0aGUgbWVudSBieSB0
aGUgcmFkaXVzIG9mIHRoZSBjYXAgb24gdGhlIHJpZ2h0IHNvIHRoYXQKICAgICAvLyBpdCBvbmx5
IHJ1bnMgYWxvbmcgdGhlIHN0cmFpZ2h0IHBhcnQgb2YgdGhlIGJlemVsICh1bmxlc3MgaXQgbmVl
ZHMKQEAgLTYxMCw3ICsyMTgsNyBAQCBpbnQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpj
bGllbnRJbnNldFJpZ2h0KCkgY29uc3QKICAgICByZXR1cm4gaGVpZ2h0KCkgLyAyOwogfQogCi1M
YXlvdXRVbml0IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y2xpZW50UGFkZGluZ0xlZnQo
KSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJTZWFyY2hGaWVsZDo6Y2xpZW50UGFkZGluZ0xlZnQo
KSBjb25zdAogewogICAgIExheW91dFVuaXQgcGFkZGluZyA9IHBhZGRpbmdMZWZ0KCk7CiAgICAg
aWYgKFJlbmRlckJveCogYm94ID0gaW5uZXJCbG9ja0VsZW1lbnQoKSA/IGlubmVyQmxvY2tFbGVt
ZW50KCktPnJlbmRlckJveCgpIDogMCkKQEAgLTYxOCw3ICsyMjYsNyBAQCBMYXlvdXRVbml0IFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y2xpZW50UGFkZGluZ0xlZnQoKSBjb25zdAogICAg
IHJldHVybiBwYWRkaW5nOwogfQogCi1MYXlvdXRVbml0IFJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZTo6Y2xpZW50UGFkZGluZ1JpZ2h0KCkgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyU2VhcmNo
RmllbGQ6OmNsaWVudFBhZGRpbmdSaWdodCgpIGNvbnN0CiB7CiAgICAgTGF5b3V0VW5pdCBwYWRk
aW5nID0gcGFkZGluZ1JpZ2h0KCk7CiAgICAgaWYgKFJlbmRlckJveCogY29udGFpbmVyQm94ID0g
Y29udGFpbmVyRWxlbWVudCgpID8gY29udGFpbmVyRWxlbWVudCgpLT5yZW5kZXJCb3goKSA6IDAp
IHsKQEAgLTYyOCw3ICsyMzYsNyBAQCBMYXlvdXRVbml0IFJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZTo6Y2xpZW50UGFkZGluZ1JpZ2h0KCkgY29uc3QKICAgICByZXR1cm4gcGFkZGluZzsKIH0K
IAotaW50IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGlzdFNpemUoKSBjb25zdAoraW50
IFJlbmRlclNlYXJjaEZpZWxkOjpsaXN0U2l6ZSgpIGNvbnN0CiB7CiAgICAgLy8gSWYgdGhlcmUg
YXJlIG5vIHJlY2VudCBzZWFyY2hlcywgdGhlbiBvdXIgbWVudSB3aWxsIGhhdmUgMSAiTm8gcmVj
ZW50IHNlYXJjaGVzIiBpdGVtLgogICAgIGlmICghbV9yZWNlbnRTZWFyY2hlcy5zaXplKCkpCkBA
IC02MzcsMTExICsyNDUsNDkgQEAgaW50IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGlz
dFNpemUoKSBjb25zdAogICAgIHJldHVybiBtX3JlY2VudFNlYXJjaGVzLnNpemUoKSArIDM7CiB9
CiAKLWludCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNlbGVjdGVkSW5kZXgoKSBjb25z
dAoraW50IFJlbmRlclNlYXJjaEZpZWxkOjpzZWxlY3RlZEluZGV4KCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gLTE7CiB9CiAKLXZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpwb3B1cERp
ZEhpZGUoKQordm9pZCBSZW5kZXJTZWFyY2hGaWVsZDo6cG9wdXBEaWRIaWRlKCkKIHsKICAgICBt
X3NlYXJjaFBvcHVwSXNWaXNpYmxlID0gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjppdGVtSXNTZXBhcmF0b3IodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAor
Ym9vbCBSZW5kZXJTZWFyY2hGaWVsZDo6aXRlbUlzU2VwYXJhdG9yKHVuc2lnbmVkIGxpc3RJbmRl
eCkgY29uc3QKIHsKICAgICAvLyBUaGUgc2VwYXJhdG9yIHdpbGwgYmUgdGhlIHNlY29uZCB0byBs
YXN0IGl0ZW0gaW4gb3VyIGxpc3QuCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obGlzdElu
ZGV4KSA9PSAobGlzdFNpemUoKSAtIDIpOwogfQogCi1ib29sIFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6aXRlbUlzTGFiZWwodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAorYm9vbCBSZW5k
ZXJTZWFyY2hGaWVsZDo6aXRlbUlzTGFiZWwodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAogewot
ICAgIHJldHVybiBsaXN0SW5kZXggPT0gMDsKKyAgICByZXR1cm4gIWxpc3RJbmRleDsKIH0KIAot
Ym9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Oml0ZW1Jc1NlbGVjdGVkKHVuc2lnbmVk
KSBjb25zdAorYm9vbCBSZW5kZXJTZWFyY2hGaWVsZDo6aXRlbUlzU2VsZWN0ZWQodW5zaWduZWQp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZTo6c2V0VGV4dEZyb21JdGVtKHVuc2lnbmVkIGxpc3RJbmRleCkKK3ZvaWQgUmVu
ZGVyU2VhcmNoRmllbGQ6OnNldFRleHRGcm9tSXRlbSh1bnNpZ25lZCBsaXN0SW5kZXgpCiB7CiAg
ICAgaW5wdXRFbGVtZW50KCktPnNldFZhbHVlKGl0ZW1UZXh0KGxpc3RJbmRleCkpOwogfQogCi1G
b250U2VsZWN0b3IqIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Zm9udFNlbGVjdG9yKCkg
Y29uc3QKK0ZvbnRTZWxlY3RvciogUmVuZGVyU2VhcmNoRmllbGQ6OmZvbnRTZWxlY3RvcigpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIGRvY3VtZW50KCktPnN0eWxlUmVzb2x2ZXIoKS0+Zm9udFNlbGVj
dG9yKCk7CiB9CiAKLUhvc3RXaW5kb3cqIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aG9z
dFdpbmRvdygpIGNvbnN0CitIb3N0V2luZG93KiBSZW5kZXJTZWFyY2hGaWVsZDo6aG9zdFdpbmRv
dygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGRvY3VtZW50KCktPnZpZXcoKS0+aG9zdFdpbmRvdygp
OwogfQogCi12b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6YXV0b3Njcm9sbCgpCi17
Ci0gICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gaW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJCb3go
KS0+bGF5ZXIoKTsKLSAgICBpZiAobGF5ZXIpCi0gICAgICAgIGxheWVyLT5hdXRvc2Nyb2xsKCk7
Ci19Ci0KLWludCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNjcm9sbFdpZHRoKCkgY29u
c3QKLXsKLSAgICBpZiAoaW5uZXJUZXh0RWxlbWVudCgpKQotICAgICAgICByZXR1cm4gaW5uZXJU
ZXh0RWxlbWVudCgpLT5zY3JvbGxXaWR0aCgpOwotICAgIHJldHVybiBSZW5kZXJCbG9jazo6c2Ny
b2xsV2lkdGgoKTsKLX0KIAotaW50IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2Nyb2xs
SGVpZ2h0KCkgY29uc3QKLXsKLSAgICBpZiAoaW5uZXJUZXh0RWxlbWVudCgpKQotICAgICAgICBy
ZXR1cm4gaW5uZXJUZXh0RWxlbWVudCgpLT5zY3JvbGxIZWlnaHQoKTsKLSAgICByZXR1cm4gUmVu
ZGVyQmxvY2s6OnNjcm9sbEhlaWdodCgpOwotfQotCi1pbnQgUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjpzY3JvbGxMZWZ0KCkgY29uc3QKLXsKLSAgICBpZiAoaW5uZXJUZXh0RWxlbWVudCgp
KQotICAgICAgICByZXR1cm4gaW5uZXJUZXh0RWxlbWVudCgpLT5zY3JvbGxMZWZ0KCk7Ci0gICAg
cmV0dXJuIFJlbmRlckJsb2NrOjpzY3JvbGxMZWZ0KCk7Ci19Ci0KLWludCBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OnNjcm9sbFRvcCgpIGNvbnN0Ci17Ci0gICAgaWYgKGlubmVyVGV4dEVs
ZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGlubmVyVGV4dEVsZW1lbnQoKS0+c2Nyb2xsVG9wKCk7
Ci0gICAgcmV0dXJuIFJlbmRlckJsb2NrOjpzY3JvbGxUb3AoKTsKLX0KLQotdm9pZCBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNldFNjcm9sbExlZnQoaW50IG5ld0xlZnQpCi17Ci0gICAg
aWYgKGlubmVyVGV4dEVsZW1lbnQoKSkKLSAgICAgICAgaW5uZXJUZXh0RWxlbWVudCgpLT5zZXRT
Y3JvbGxMZWZ0KG5ld0xlZnQpOwotfQotCi12b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6c2V0U2Nyb2xsVG9wKGludCBuZXdUb3ApCi17Ci0gICAgaWYgKGlubmVyVGV4dEVsZW1lbnQo
KSkKLSAgICAgICAgaW5uZXJUZXh0RWxlbWVudCgpLT5zZXRTY3JvbGxUb3AobmV3VG9wKTsKLX0K
LQotYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNjcm9sbChTY3JvbGxEaXJlY3Rp
b24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlw
bGllciwgTm9kZSoqIHN0b3BOb2RlKQotewotICAgIFJlbmRlckxheWVyKiBsYXllciA9IGlubmVy
VGV4dEVsZW1lbnQoKS0+cmVuZGVyQm94KCktPmxheWVyKCk7Ci0gICAgaWYgKGxheWVyICYmIGxh
eWVyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpCi0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIHJldHVybiBSZW5kZXJCbG9jazo6c2Nyb2xsKGRpcmVjdGlvbiwg
Z3JhbnVsYXJpdHksIG11bHRpcGxpZXIsIHN0b3BOb2RlKTsKLX0KLQotYm9vbCBSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmU6OmxvZ2ljYWxTY3JvbGwoU2Nyb2xsTG9naWNhbERpcmVjdGlvbiBk
aXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVy
LCBOb2RlKiogc3RvcE5vZGUpCi17Ci0gICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gaW5uZXJUZXh0
RWxlbWVudCgpLT5yZW5kZXJCb3goKS0+bGF5ZXIoKTsKLSAgICBpZiAobGF5ZXIgJiYgbGF5ZXIt
PnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChkaXJlY3Rpb24sIHN0eWxlKCktPmlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCksIHN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpLCBn
cmFudWxhcml0eSwgbXVsdGlwbGllcikpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVy
biBSZW5kZXJCbG9jazo6bG9naWNhbFNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0
aXBsaWVyLCBzdG9wTm9kZSk7Ci19Ci0KLVBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSogc2Nyb2xs
YWJsZUFyZWEsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250
cm9sU2l6ZSBjb250cm9sU2l6ZSkKK1Bhc3NSZWZQdHI8U2Nyb2xsYmFyPiBSZW5kZXJTZWFyY2hG
aWVsZDo6Y3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSwgU2Ny
b2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplIGNvbnRy
b2xTaXplKQogewogICAgIFJlZlB0cjxTY3JvbGxiYXI+IHdpZGdldDsKICAgICBib29sIGhhc0N1
c3RvbVNjcm9sbGJhclN0eWxlID0gc3R5bGUoKS0+aGFzUHNldWRvU3R5bGUoU0NST0xMQkFSKTsK
QEAgLTc1Miw5ICsyOTgsMjMgQEAgUGFzc1JlZlB0cjxTY3JvbGxiYXI+IFJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6Y3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmUKICAgICByZXR1cm4g
d2lkZ2V0LnJlbGVhc2UoKTsKIH0KIAotSFRNTElucHV0RWxlbWVudCogUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjppbnB1dEVsZW1lbnQoKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJTZWFy
Y2hGaWVsZDo6Y29tcHV0ZUhlaWdodExpbWl0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGVpZ2h0
KCk7Cit9CisKK3ZvaWQgUmVuZGVyU2VhcmNoRmllbGQ6OmNlbnRlckNvbnRhaW5lcklmTmVlZGVk
KFJlbmRlckJveCogY29udGFpbmVyUmVuZGVyZXIpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG5vZGUo
KS0+dG9JbnB1dEVsZW1lbnQoKTsKKyAgICBpZiAoIWNvbnRhaW5lclJlbmRlcmVyKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoY29udGFpbmVyUmVuZGVyZXItPmhlaWdodCgpIDw9IGNvbnRl
bnRIZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQSBxdWlyayBmb3IgZmluZC1p
bi1wYWdlIGJveCBvbiBTYWZhcmkgV2luZG93cy4KKyAgICAvLyBodHRwOi8vd2Via2l0Lm9yZy9i
LzYzMTU3CisgICAgTGF5b3V0VW5pdCBoZWlnaHREaWZmID0gY29udGFpbmVyUmVuZGVyZXItPmhl
aWdodCgpIC0gY29udGVudEhlaWdodCgpOworICAgIGNvbnRhaW5lclJlbmRlcmVyLT5zZXRZKGNv
bnRhaW5lclJlbmRlcmVyLT55KCkgLSAoaGVpZ2h0RGlmZiAvIDIgKyBsYXlvdXRNb2QoaGVpZ2h0
RGlmZiwgMikpKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNlYXJjaEZpZWxkLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Vh
cmNoRmllbGQuaAppbmRleCA2ZTIxYzg1NmMxMGZhOWZiYTQzNmMwNmY3NDljMTRlMWUyYTgwYmE2
Li5iNzA4YmYzZDViYjhlMjZlMjU3ZjBhNDJiNzYyODNhYWZiODUxMTc3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuaApAQCAtMjAsMjUgKzIwLDIxIEBA
CiAgKgogICovCiAKLSNpZm5kZWYgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lX2gKLSNkZWZp
bmUgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lX2gKKyNpZm5kZWYgUmVuZGVyU2VhcmNoRmll
bGRfaAorI2RlZmluZSBSZW5kZXJTZWFyY2hGaWVsZF9oCiAKICNpbmNsdWRlICJQb3B1cE1lbnVD
bGllbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbC5oIgorI2luY2x1ZGUgIlJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IEhUTUxJbnB1dEVsZW1lbnQ7CiBjbGFzcyBTZWFyY2hQb3B1cE1lbnU7CiAKLWNsYXNzIFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZSA6IHB1YmxpYyBSZW5kZXJUZXh0Q29udHJvbCwgcHJpdmF0
ZSBQb3B1cE1lbnVDbGllbnQgeworY2xhc3MgUmVuZGVyU2VhcmNoRmllbGQgOiBwdWJsaWMgUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLCBwcml2YXRlIFBvcHVwTWVudUNsaWVudCB7CiBwdWJs
aWM6Ci0gICAgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKE5vZGUqKTsKLSAgICB2aXJ0dWFs
IH5SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUoKTsKLSAgICAvLyBGSVhNRTogTW92ZSBjcmVh
dGUqU3R5bGUoKSB0byB0aGVpciBjbGFzc2VzLgotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxSZW5k
ZXJTdHlsZT4gY3JlYXRlSW5uZXJUZXh0U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5
bGUpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IGNyZWF0ZUlubmVyQmxvY2tT
dHlsZShjb25zdCBSZW5kZXJTdHlsZSogc3RhcnRTdHlsZSkgY29uc3Q7Ci0gICAgdm9pZCB1cGRh
dGVDYW5jZWxCdXR0b25WaXNpYmlsaXR5KCkgY29uc3Q7CisgICAgUmVuZGVyU2VhcmNoRmllbGQo
Tm9kZSopOworICAgIHZpcnR1YWwgflJlbmRlclNlYXJjaEZpZWxkKCk7CiAKICAgICB2b2lkIGFk
ZFNlYXJjaFJlc3VsdCgpOwogICAgIHZvaWQgc3RvcFNlYXJjaEV2ZW50VGltZXIoKTsKQEAgLTQ3
LDQzICs0Myw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNob3dQb3B1cCgpOwogICAgIHZvaWQgaGlk
ZVBvcHVwKCk7CiAKLSAgICB2b2lkIGNhcHNMb2NrU3RhdGVNYXlIYXZlQ2hhbmdlZCgpOwotCiBw
cml2YXRlOgotICAgIHZpcnR1YWwgYm9vbCBoYXNDb250cm9sQ2xpcCgpIGNvbnN0OwotICAgIHZp
cnR1YWwgTGF5b3V0UmVjdCBjb250cm9sQ2xpcFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmKSBjb25z
dDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0RmllbGQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQm
KTsKLSAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0
UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0
UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9m
ZnNldCwgSGl0VGVzdEFjdGlvbik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXV0b3Njcm9sbCgpOwot
Ci0gICAgLy8gU3ViY2xhc3NlZCB0byBmb3J3YXJkIHRvIG91ciBpbm5lciBkaXYuCi0gICAgdmly
dHVhbCBpbnQgc2Nyb2xsTGVmdCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHNjcm9sbFRvcCgp
IGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHNjcm9sbFdpZHRoKCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBpbnQgc2Nyb2xsSGVpZ2h0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbExl
ZnQoaW50KTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsVG9wKGludCk7Ci0gICAgdmlydHVh
bCBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBt
dWx0aXBsaWVyID0gMSwgTm9kZSoqIHN0b3BOb2RlID0gMCk7Ci0gICAgdmlydHVhbCBib29sIGxv
Z2ljYWxTY3JvbGwoU2Nyb2xsTG9naWNhbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZs
b2F0IG11bHRpcGxpZXIgPSAxLCBOb2RlKiogc3RvcE5vZGUgPSAwKTsKLQotICAgIGludCB0ZXh0
QmxvY2tXaWR0aCgpIGNvbnN0OwotICAgIHZpcnR1YWwgZmxvYXQgZ2V0QXZnQ2hhcldpZHRoKEF0
b21pY1N0cmluZyBmYW1pbHkpOwotICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBwcmVmZXJyZWRDb250
ZW50V2lkdGgoZmxvYXQgY2hhcldpZHRoKSBjb25zdDsKLSAgICB2aXJ0dWFsIExheW91dFVuaXQg
Y29tcHV0ZUNvbnRyb2xIZWlnaHQoTGF5b3V0VW5pdCBsaW5lSGVpZ2h0LCBMYXlvdXRVbml0IG5v
bkNvbnRlbnRIZWlnaHQpIGNvbnN0IE9WRVJSSURFOwotICAgIAotICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVGcm9tRWxlbWVudCgpOwotICAgIHZpcnR1YWwgdm9pZCBzdHlsZURpZENoYW5nZShTdHls
ZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7Ci0KLSAgICB2aXJ0dWFs
IFJlbmRlclN0eWxlKiB0ZXh0QmFzZVN0eWxlKCkgY29uc3Q7Ci0KLSAgICBFVmlzaWJpbGl0eSB2
aXNpYmlsaXR5Rm9yQ2FuY2VsQnV0dG9uKCkgY29uc3Q7Ci0gICAgYm9vbCB0ZXh0U2hvdWxkQmVU
cnVuY2F0ZWQoKSBjb25zdDsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGF1dG9zYXZlTmFtZSgp
IGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBjb21wdXRlSGVpZ2h0TGltaXQoKSBjb25z
dCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY2VudGVyQ29udGFpbmVySWZOZWVkZWQoUmVu
ZGVyQm94KikgY29uc3QgT1ZFUlJJREU7CiAKICAgICAvLyBQb3B1cE1lbnVDbGllbnQgbWV0aG9k
cwogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQodW5zaWduZWQgbGlzdEluZGV4LCBib29s
IGZpcmVFdmVudHMgPSB0cnVlKSBPVkVSUklERTsKQEAgLTExNCw0MiArNzYsMTkgQEAgcHJpdmF0
ZToKICAgICB2aXJ0dWFsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3coKSBjb25zdCBPVkVSUklERTsK
ICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoU2Nyb2xs
YWJsZUFyZWEqLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUpIE9W
RVJSSURFOwogCi0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50KCkgY29uc3Q7Ci0K
LSAgICBIVE1MRWxlbWVudCogY29udGFpbmVyRWxlbWVudCgpIGNvbnN0OwotICAgIEhUTUxFbGVt
ZW50KiBpbm5lckJsb2NrRWxlbWVudCgpIGNvbnN0OwotICAgIEhUTUxFbGVtZW50KiBpbm5lclNw
aW5CdXR0b25FbGVtZW50KCkgY29uc3Q7Ci0gICAgSFRNTEVsZW1lbnQqIHJlc3VsdHNCdXR0b25F
bGVtZW50KCkgY29uc3Q7Ci0gICAgSFRNTEVsZW1lbnQqIGNhbmNlbEJ1dHRvbkVsZW1lbnQoKSBj
b25zdDsKLQogICAgIGJvb2wgbV9zZWFyY2hQb3B1cElzVmlzaWJsZTsKLSAgICBib29sIG1fc2hv
dWxkRHJhd0NhcHNMb2NrSW5kaWNhdG9yOwotICAgIExheW91dFVuaXQgbV9kZXNpcmVkSW5uZXJU
ZXh0SGVpZ2h0OwogICAgIFJlZlB0cjxTZWFyY2hQb3B1cE1lbnU+IG1fc2VhcmNoUG9wdXA7CiAg
ICAgVmVjdG9yPFN0cmluZz4gbV9yZWNlbnRTZWFyY2hlczsKIH07CiAKLWlubGluZSBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmUqIHRvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKFJlbmRl
ck9iamVjdCogb2JqZWN0KQoraW5saW5lIFJlbmRlclNlYXJjaEZpZWxkKiB0b1JlbmRlclNlYXJj
aEZpZWxkKFJlbmRlck9iamVjdCogb2JqZWN0KQogewogICAgIEFTU0VSVCghb2JqZWN0IHx8IG9i
amVjdC0+aXNUZXh0RmllbGQoKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZSo+KG9iamVjdCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRl
clNlYXJjaEZpZWxkKj4ob2JqZWN0KTsKIH0KIAogLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9uZSBk
b2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0Lgotdm9pZCB0b1JlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZShjb25zdCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUqKTsKLQotLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBSZW5kZXJUZXh0Q29udHJvbElubmVyQmxvY2sg
OiBwdWJsaWMgUmVuZGVyQmxvY2sgewotcHVibGljOgotICAgIFJlbmRlclRleHRDb250cm9sSW5u
ZXJCbG9jayhOb2RlKiBub2RlLCBib29sIGlzTXVsdGlMaW5lKSA6IFJlbmRlckJsb2NrKG5vZGUp
LCBtX211bHRpTGluZShpc011bHRpTGluZSkgeyB9Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCBi
b29sIGhhc0xpbmVJZkVtcHR5KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwg
VmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmKTsKLQot
ICAgIGJvb2wgbV9tdWx0aUxpbmU7Ci19Owordm9pZCB0b1JlbmRlclNlYXJjaEZpZWxkKGNvbnN0
IFJlbmRlclNlYXJjaEZpZWxkKik7CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAppbmRleCA4NDhmYzIx
MTk3YzJhN2QyNGYyNjQ4ZGY3MDIwNTI5ZjNjODgwZDNiLi4wODk4N2MzYTNmOTQxMmRhMmYyNmQ2
ZDY2NjA1Y2M1MzVlMWNjZTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcApAQCAtMzAsNyArMzAsNiBAQAog
I2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKICNpbmNsdWRl
ICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAi
SFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkxvY2Fs
aXplZFN0cmluZ3MuaCIKQEAgLTM5LDcgKzM4LDYgQEAKICNpbmNsdWRlICJSZW5kZXJMYXllci5o
IgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgi
Ci0jaW5jbHVkZSAiU2VhcmNoUG9wdXBNZW51LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNp
bmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKQEAg
LTcwLDEwICs2OCw4IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJUZXh0Q29udHJvbElubmVyQmxv
Y2s6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmCiAKIFJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKE5vZGUqIG5vZGUpCiAg
ICAgOiBSZW5kZXJUZXh0Q29udHJvbChub2RlKQotICAgICwgbV9zZWFyY2hQb3B1cElzVmlzaWJs
ZShmYWxzZSkKICAgICAsIG1fc2hvdWxkRHJhd0NhcHNMb2NrSW5kaWNhdG9yKGZhbHNlKQogICAg
ICwgbV9kZXNpcmVkSW5uZXJUZXh0SGVpZ2h0KC0xKQotICAgICwgbV9zZWFyY2hQb3B1cCgwKQog
ewogICAgIEFTU0VSVChub2RlLT5pc0hUTUxFbGVtZW50KCkpOwogICAgIEFTU0VSVChub2RlLT50
b0lucHV0RWxlbWVudCgpKTsKQEAgLTgxLDIwICs3Nyw2IEBAIFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKE5vZGUqIG5vZGUpCiAKIFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZTo6flJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZSgpCiB7
Ci0gICAgaWYgKG1fc2VhcmNoUG9wdXApIHsKLSAgICAgICAgbV9zZWFyY2hQb3B1cC0+cG9wdXBN
ZW51KCktPmRpc2Nvbm5lY3RDbGllbnQoKTsKLSAgICAgICAgbV9zZWFyY2hQb3B1cCA9IDA7Ci0g
ICAgfQotfQotCi1pbmxpbmUgSFRNTEVsZW1lbnQqIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6Y29udGFpbmVyRWxlbWVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlucHV0RWxlbWVudCgp
LT5jb250YWluZXJFbGVtZW50KCk7Ci19Ci0KLWlubGluZSBIVE1MRWxlbWVudCogUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lOjppbm5lckJsb2NrRWxlbWVudCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGlucHV0RWxlbWVudCgpLT5pbm5lckJsb2NrRWxlbWVudCgpOwogfQogCiBpbmxpbmUgSFRN
TEVsZW1lbnQqIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aW5uZXJTcGluQnV0dG9uRWxl
bWVudCgpIGNvbnN0CkBAIC0xMTgsNzIgKzEwMCw2IEBAIFJlbmRlclN0eWxlKiBSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmU6OnRleHRCYXNlU3R5bGUoKSBjb25zdAogICAgIHJldHVybiBpbm5l
ckJsb2NrID8gaW5uZXJCbG9jay0+cmVuZGVyZXIoKS0+c3R5bGUoKSA6IHN0eWxlKCk7CiB9CiAK
LXZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjphZGRTZWFyY2hSZXN1bHQoKQotewot
ICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gaW5wdXRFbGVtZW50KCk7Ci0gICAgaWYgKGlu
cHV0LT5tYXhSZXN1bHRzKCkgPD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU3RyaW5nIHZh
bHVlID0gaW5wdXQtPnZhbHVlKCk7Ci0gICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnQoKS0+c2V0dGluZ3Mo
KTsKLSAgICBpZiAoIXNldHRpbmdzIHx8IHNldHRpbmdzLT5wcml2YXRlQnJvd3NpbmdFbmFibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGludCBzaXplID0gc3RhdGljX2Nhc3Q8aW50Piht
X3JlY2VudFNlYXJjaGVzLnNpemUoKSk7Ci0gICAgZm9yIChpbnQgaSA9IHNpemUgLSAxOyBpID49
IDA7IC0taSkgewotICAgICAgICBpZiAobV9yZWNlbnRTZWFyY2hlc1tpXSA9PSB2YWx1ZSkKLSAg
ICAgICAgICAgIG1fcmVjZW50U2VhcmNoZXMucmVtb3ZlKGkpOwotICAgIH0KLQotICAgIG1fcmVj
ZW50U2VhcmNoZXMuaW5zZXJ0KDAsIHZhbHVlKTsKLSAgICB3aGlsZSAoc3RhdGljX2Nhc3Q8aW50
PihtX3JlY2VudFNlYXJjaGVzLnNpemUoKSkgPiBpbnB1dC0+bWF4UmVzdWx0cygpKQotICAgICAg
ICBtX3JlY2VudFNlYXJjaGVzLnJlbW92ZUxhc3QoKTsKLQotICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZSA9IGF1dG9zYXZlTmFtZSgpOwotICAgIGlmICghbV9zZWFyY2hQb3B1cCkKLSAgICAg
ICAgbV9zZWFyY2hQb3B1cCA9IGRvY3VtZW50KCktPnBhZ2UoKS0+Y2hyb21lKCktPmNyZWF0ZVNl
YXJjaFBvcHVwTWVudSh0aGlzKTsKLQotICAgIG1fc2VhcmNoUG9wdXAtPnNhdmVSZWNlbnRTZWFy
Y2hlcyhuYW1lLCBtX3JlY2VudFNlYXJjaGVzKTsKLX0KLQotdm9pZCBSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OnNob3dQb3B1cCgpCi17Ci0gICAgaWYgKG1fc2VhcmNoUG9wdXBJc1Zpc2li
bGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9zZWFyY2hQb3B1cCkKLSAgICAgICAg
bV9zZWFyY2hQb3B1cCA9IGRvY3VtZW50KCktPnBhZ2UoKS0+Y2hyb21lKCktPmNyZWF0ZVNlYXJj
aFBvcHVwTWVudSh0aGlzKTsKLQotICAgIGlmICghbV9zZWFyY2hQb3B1cC0+ZW5hYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX3NlYXJjaFBvcHVwSXNWaXNpYmxlID0gdHJ1ZTsKLQot
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSA9IGF1dG9zYXZlTmFtZSgpOwotICAgIG1fc2Vh
cmNoUG9wdXAtPmxvYWRSZWNlbnRTZWFyY2hlcyhuYW1lLCBtX3JlY2VudFNlYXJjaGVzKTsKLQot
ICAgIC8vIFRyaW0gdGhlIHJlY2VudCBzZWFyY2hlcyBsaXN0IGlmIHRoZSBtYXhpbXVtIHNpemUg
aGFzIGNoYW5nZWQgc2luY2Ugd2UgbGFzdCBzYXZlZC4KLSAgICBIVE1MSW5wdXRFbGVtZW50KiBp
bnB1dCA9IGlucHV0RWxlbWVudCgpOwotICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ+KG1fcmVjZW50
U2VhcmNoZXMuc2l6ZSgpKSA+IGlucHV0LT5tYXhSZXN1bHRzKCkpIHsKLSAgICAgICAgZG8gewot
ICAgICAgICAgICAgbV9yZWNlbnRTZWFyY2hlcy5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIH0gd2hp
bGUgKHN0YXRpY19jYXN0PGludD4obV9yZWNlbnRTZWFyY2hlcy5zaXplKCkpID4gaW5wdXQtPm1h
eFJlc3VsdHMoKSk7Ci0KLSAgICAgICAgbV9zZWFyY2hQb3B1cC0+c2F2ZVJlY2VudFNlYXJjaGVz
KG5hbWUsIG1fcmVjZW50U2VhcmNoZXMpOwotICAgIH0KLQotICAgIG1fc2VhcmNoUG9wdXAtPnBv
cHVwTWVudSgpLT5zaG93KHBpeGVsU25hcHBlZEludFJlY3QoYWJzb2x1dGVCb3VuZGluZ0JveFJl
Y3QoKSksIGRvY3VtZW50KCktPnZpZXcoKSwgLTEpOwotfQotCi12b2lkIFJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6aGlkZVBvcHVwKCkKLXsKLSAgICBpZiAobV9zZWFyY2hQb3B1cCkKLSAg
ICAgICAgbV9zZWFyY2hQb3B1cC0+cG9wdXBNZW51KCktPmhpZGUoKTsKLX0KLQogdm9pZCBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7CiAgICAgUmVuZGVyVGV4dENvbnRyb2w6OnBh
aW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwpAQCAtMjAwLDYgKzExNiwxMSBAQCB2b2lkIFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IExheW91dFBvaW50JgogICAgIH0KIH0KIAorTGF5b3V0VW5pdCBSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OmNvbXB1dGVIZWlnaHRMaW1pdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNv
bnRhaW5lckVsZW1lbnQoKSA/IGNvbnRlbnRIZWlnaHQoKSA6IGhlaWdodCgpOworfQorCiB2b2lk
IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5b3V0KCkKIHsKICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIHJlbW92ZSB0aGUgaGVpZ2h0LXJlbGF0ZWQgaGFja3MgaW4gbGF5b3V0KCkgYW5k
CkBAIC0yMjUsNyArMTQ2LDcgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Omxh
eW91dCgpCiAgICAgTGF5b3V0VW5pdCBkZXNpcmVkSGVpZ2h0ID0gdGV4dEJsb2NrSGVpZ2h0KCk7
CiAgICAgTGF5b3V0VW5pdCBjdXJyZW50SGVpZ2h0ID0gaW5uZXJUZXh0UmVuZGVyZXItPmhlaWdo
dCgpOwogCi0gICAgTGF5b3V0VW5pdCBoZWlnaHRMaW1pdCA9IChpbnB1dEVsZW1lbnQoKS0+aXNT
ZWFyY2hGaWVsZCgpIHx8ICFjb250YWluZXIpID8gaGVpZ2h0KCkgOiBjb250ZW50SGVpZ2h0KCk7
CisgICAgTGF5b3V0VW5pdCBoZWlnaHRMaW1pdCA9IGNvbXB1dGVIZWlnaHRMaW1pdCgpOwogICAg
IGlmIChjdXJyZW50SGVpZ2h0ID4gaGVpZ2h0TGltaXQpIHsKICAgICAgICAgaWYgKGRlc2lyZWRI
ZWlnaHQgIT0gY3VycmVudEhlaWdodCkKICAgICAgICAgICAgIHNldE5lZWRzTGF5b3V0KHRydWUs
IE1hcmtPbmx5VGhpcyk7CkBAIC0yNTgsMTIgKzE3OSw4IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjpsYXlvdXQoKQogICAgIGlmICghY29udGFpbmVyICYmIGN1cnJlbnRIZWln
aHQgIT0gY29udGVudEhlaWdodCgpKSB7CiAgICAgICAgIExheW91dFVuaXQgaGVpZ2h0RGlmZiA9
IGN1cnJlbnRIZWlnaHQgLSBjb250ZW50SGVpZ2h0KCk7CiAgICAgICAgIGlubmVyVGV4dFJlbmRl
cmVyLT5zZXRZKGlubmVyVGV4dFJlbmRlcmVyLT55KCkgLSAoaGVpZ2h0RGlmZiAvIDIgKyBsYXlv
dXRNb2QoaGVpZ2h0RGlmZiwgMikpKTsKLSAgICB9IGVsc2UgaWYgKGlucHV0RWxlbWVudCgpLT5p
c1NlYXJjaEZpZWxkKCkgJiYgY29udGFpbmVyUmVuZGVyZXIgJiYgY29udGFpbmVyUmVuZGVyZXIt
PmhlaWdodCgpID4gY29udGVudEhlaWdodCgpKSB7Ci0gICAgICAgIC8vIEEgcXVpcmsgZm9yIGZp
bmQtaW4tcGFnZSBib3ggb24gU2FmYXJpIFdpbmRvd3MuCi0gICAgICAgIC8vIGh0dHA6Ly93ZWJr
aXQub3JnL2IvNjMxNTcKLSAgICAgICAgTGF5b3V0VW5pdCBoZWlnaHREaWZmID0gY29udGFpbmVy
UmVuZGVyZXItPmhlaWdodCgpIC0gY29udGVudEhlaWdodCgpOwotICAgICAgICBjb250YWluZXJS
ZW5kZXJlci0+c2V0WShjb250YWluZXJSZW5kZXJlci0+eSgpIC0gKGhlaWdodERpZmYgLyAyICsg
bGF5b3V0TW9kKGhlaWdodERpZmYsIDIpKSk7Ci0gICAgfQorICAgIH0gZWxzZQorICAgICAgICBj
ZW50ZXJDb250YWluZXJJZk5lZWRlZChjb250YWluZXJSZW5kZXJlcik7CiAKICAgICAvLyBJZ25v
cmVzIHRoZSBwYWRkaW5ncyBmb3IgdGhlIGlubmVyIHNwaW4gYnV0dG9uLgogICAgIGlmIChSZW5k
ZXJCb3gqIGlubmVyU3BpbkJveCA9IGlubmVyU3BpbkJ1dHRvbkVsZW1lbnQoKSA/IGlubmVyU3Bp
bkJ1dHRvbkVsZW1lbnQoKS0+cmVuZGVyQm94KCkgOiAwKSB7CkBAIC00NTMsOSArMzcwLDYgQEAg
dm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnVwZGF0ZUZyb21FbGVtZW50KCkKIAog
ICAgIGlmIChjYW5jZWxCdXR0b25FbGVtZW50KCkpCiAgICAgICAgIHVwZGF0ZUNhbmNlbEJ1dHRv
blZpc2liaWxpdHkoKTsKLQotICAgIGlmIChtX3NlYXJjaFBvcHVwSXNWaXNpYmxlKQotICAgICAg
ICBtX3NlYXJjaFBvcHVwLT5wb3B1cE1lbnUoKS0+dXBkYXRlRnJvbUVsZW1lbnQoKTsKIH0KIAog
UGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjcmVh
dGVJbm5lclRleHRTdHlsZShjb25zdCBSZW5kZXJTdHlsZSogc3RhcnRTdHlsZSkgY29uc3QKQEAg
LTUyOCwxNTYgKzQ0Miw2IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjphdXRvc2F2ZU5hbWUoKSBjb25zdAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxF
bGVtZW50Kj4obm9kZSgpKS0+Z2V0QXR0cmlidXRlKGF1dG9zYXZlQXR0cik7CiB9CiAKLS8vIFBv
cHVwTWVudUNsaWVudCBtZXRob2RzCi12b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6
dmFsdWVDaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCwgYm9vbCBmaXJlRXZlbnRzKQotewotICAg
IEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KGxpc3RJbmRleCkgPCBsaXN0U2l6ZSgpKTsKLSAgICBI
VE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IGlucHV0RWxlbWVudCgpOwotICAgIGlmIChzdGF0aWNf
Y2FzdDxpbnQ+KGxpc3RJbmRleCkgPT0gKGxpc3RTaXplKCkgLSAxKSkgewotICAgICAgICBpZiAo
ZmlyZUV2ZW50cykgewotICAgICAgICAgICAgbV9yZWNlbnRTZWFyY2hlcy5jbGVhcigpOwotICAg
ICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lID0gYXV0b3NhdmVOYW1lKCk7Ci0gICAg
ICAgICAgICBpZiAoIW5hbWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFtX3Nl
YXJjaFBvcHVwKQotICAgICAgICAgICAgICAgICAgICBtX3NlYXJjaFBvcHVwID0gZG9jdW1lbnQo
KS0+cGFnZSgpLT5jaHJvbWUoKS0+Y3JlYXRlU2VhcmNoUG9wdXBNZW51KHRoaXMpOwotICAgICAg
ICAgICAgICAgIG1fc2VhcmNoUG9wdXAtPnNhdmVSZWNlbnRTZWFyY2hlcyhuYW1lLCBtX3JlY2Vu
dFNlYXJjaGVzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGlucHV0LT5zZXRWYWx1ZShpdGVtVGV4dChsaXN0SW5kZXgpKTsKLSAgICAgICAgaWYgKGZp
cmVFdmVudHMpCi0gICAgICAgICAgICBpbnB1dC0+b25TZWFyY2goKTsKLSAgICAgICAgaW5wdXQt
PnNlbGVjdCgpOwotICAgIH0KLX0KLQotU3RyaW5nIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6aXRlbVRleHQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAotewotICAgIGludCBzaXplID0g
bGlzdFNpemUoKTsKLSAgICBpZiAoc2l6ZSA9PSAxKSB7Ci0gICAgICAgIEFTU0VSVCghbGlzdElu
ZGV4KTsKLSAgICAgICAgcmV0dXJuIHNlYXJjaE1lbnVOb1JlY2VudFNlYXJjaGVzVGV4dCgpOwot
ICAgIH0KLSAgICBpZiAoIWxpc3RJbmRleCkKLSAgICAgICAgcmV0dXJuIHNlYXJjaE1lbnVSZWNl
bnRTZWFyY2hlc1RleHQoKTsKLSAgICBpZiAoaXRlbUlzU2VwYXJhdG9yKGxpc3RJbmRleCkpCi0g
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBpZiAoc3RhdGljX2Nhc3Q8aW50PihsaXN0SW5k
ZXgpID09IChzaXplIC0gMSkpCi0gICAgICAgIHJldHVybiBzZWFyY2hNZW51Q2xlYXJSZWNlbnRT
ZWFyY2hlc1RleHQoKTsKLSAgICByZXR1cm4gbV9yZWNlbnRTZWFyY2hlc1tsaXN0SW5kZXggLSAx
XTsKLX0KLQotU3RyaW5nIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aXRlbUxhYmVsKHVu
c2lnbmVkKSBjb25zdAotewotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZTo6aXRlbUljb24odW5zaWduZWQpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIFN0cmluZygpOwotfQotCi1ib29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6
aXRlbUlzRW5hYmxlZCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0Ci17Ci0gICAgIGlmICghbGlz
dEluZGV4IHx8IGl0ZW1Jc1NlcGFyYXRvcihsaXN0SW5kZXgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVBvcHVwTWVudVN0eWxlIFJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6aXRlbVN0eWxlKHVuc2lnbmVkKSBjb25zdAotewotICAgIHJldHVybiBt
ZW51U3R5bGUoKTsKLX0KLQotUG9wdXBNZW51U3R5bGUgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lOjptZW51U3R5bGUoKSBjb25zdAotewotICAgIHJldHVybiBQb3B1cE1lbnVTdHlsZShzdHls
ZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciksIHN0eWxlKCktPnZp
c2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciksIHN0eWxlKCkt
PmZvbnQoKSwgc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUsCi0gICAgICAgIHN0eWxl
KCktPmRpc3BsYXkoKSA9PSBOT05FLCBzdHlsZSgpLT50ZXh0SW5kZW50KCksIHN0eWxlKCktPmRp
cmVjdGlvbigpLCBpc092ZXJyaWRlKHN0eWxlKCktPnVuaWNvZGVCaWRpKCkpKTsKLX0KLQotaW50
IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y2xpZW50SW5zZXRMZWZ0KCkgY29uc3QKLXsK
LSAgICAvLyBJbnNldCB0aGUgbWVudSBieSB0aGUgcmFkaXVzIG9mIHRoZSBjYXAgb24gdGhlIGxl
ZnQgc28gdGhhdAotICAgIC8vIGl0IG9ubHkgcnVucyBhbG9uZyB0aGUgc3RyYWlnaHQgcGFydCBv
ZiB0aGUgYmV6ZWwuCi0gICAgcmV0dXJuIGhlaWdodCgpIC8gMjsKLX0KLQotaW50IFJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZTo6Y2xpZW50SW5zZXRSaWdodCgpIGNvbnN0Ci17Ci0gICAgLy8g
SW5zZXQgdGhlIG1lbnUgYnkgdGhlIHJhZGl1cyBvZiB0aGUgY2FwIG9uIHRoZSByaWdodCBzbyB0
aGF0Ci0gICAgLy8gaXQgb25seSBydW5zIGFsb25nIHRoZSBzdHJhaWdodCBwYXJ0IG9mIHRoZSBi
ZXplbCAodW5sZXNzIGl0IG5lZWRzCi0gICAgLy8gdG8gYmUgd2lkZXIpLgotICAgIHJldHVybiBo
ZWlnaHQoKSAvIDI7Ci19Ci0KLUxheW91dFVuaXQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
OjpjbGllbnRQYWRkaW5nTGVmdCgpIGNvbnN0Ci17Ci0gICAgTGF5b3V0VW5pdCBwYWRkaW5nID0g
cGFkZGluZ0xlZnQoKTsKLSAgICBpZiAoUmVuZGVyQm94KiBib3ggPSBpbm5lckJsb2NrRWxlbWVu
dCgpID8gaW5uZXJCbG9ja0VsZW1lbnQoKS0+cmVuZGVyQm94KCkgOiAwKQotICAgICAgICBwYWRk
aW5nICs9IGJveC0+eCgpOwotICAgIHJldHVybiBwYWRkaW5nOwotfQotCi1MYXlvdXRVbml0IFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y2xpZW50UGFkZGluZ1JpZ2h0KCkgY29uc3QKLXsK
LSAgICBMYXlvdXRVbml0IHBhZGRpbmcgPSBwYWRkaW5nUmlnaHQoKTsKLSAgICBpZiAoUmVuZGVy
Qm94KiBjb250YWluZXJCb3ggPSBjb250YWluZXJFbGVtZW50KCkgPyBjb250YWluZXJFbGVtZW50
KCktPnJlbmRlckJveCgpIDogMCkgewotICAgICAgICBpZiAoUmVuZGVyQm94KiBpbm5lckJsb2Nr
Qm94ID0gaW5uZXJCbG9ja0VsZW1lbnQoKSA/IGlubmVyQmxvY2tFbGVtZW50KCktPnJlbmRlckJv
eCgpIDogMCkKLSAgICAgICAgICAgIHBhZGRpbmcgKz0gY29udGFpbmVyQm94LT53aWR0aCgpIC0g
KGlubmVyQmxvY2tCb3gtPngoKSArIGlubmVyQmxvY2tCb3gtPndpZHRoKCkpOwotICAgIH0KLSAg
ICByZXR1cm4gcGFkZGluZzsKLX0KLQotaW50IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6
bGlzdFNpemUoKSBjb25zdAotewotICAgIC8vIElmIHRoZXJlIGFyZSBubyByZWNlbnQgc2VhcmNo
ZXMsIHRoZW4gb3VyIG1lbnUgd2lsbCBoYXZlIDEgIk5vIHJlY2VudCBzZWFyY2hlcyIgaXRlbS4K
LSAgICBpZiAoIW1fcmVjZW50U2VhcmNoZXMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gMTsKLSAg
ICAvLyBPdGhlcndpc2UsIGxlYXZlIHJvb20gaW4gdGhlIG1lbnUgZm9yIGEgaGVhZGVyLCBhIHNl
cGFyYXRvciwgYW5kIHRoZSAiQ2xlYXIgcmVjZW50IHNlYXJjaGVzIiBpdGVtLgotICAgIHJldHVy
biBtX3JlY2VudFNlYXJjaGVzLnNpemUoKSArIDM7Ci19Ci0KLWludCBSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OnNlbGVjdGVkSW5kZXgoKSBjb25zdAotewotICAgIHJldHVybiAtMTsKLX0K
LQotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnBvcHVwRGlkSGlkZSgpCi17Ci0g
ICAgbV9zZWFyY2hQb3B1cElzVmlzaWJsZSA9IGZhbHNlOwotfQotCi1ib29sIFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6aXRlbUlzU2VwYXJhdG9yKHVuc2lnbmVkIGxpc3RJbmRleCkgY29u
c3QKLXsKLSAgICAvLyBUaGUgc2VwYXJhdG9yIHdpbGwgYmUgdGhlIHNlY29uZCB0byBsYXN0IGl0
ZW0gaW4gb3VyIGxpc3QuCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obGlzdEluZGV4KSA9
PSAobGlzdFNpemUoKSAtIDIpOwotfQotCi1ib29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6aXRlbUlzTGFiZWwodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAotewotICAgIHJldHVybiBs
aXN0SW5kZXggPT0gMDsKLX0KLQotYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Oml0
ZW1Jc1NlbGVjdGVkKHVuc2lnbmVkKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
dm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNldFRleHRGcm9tSXRlbSh1bnNpZ25l
ZCBsaXN0SW5kZXgpCi17Ci0gICAgaW5wdXRFbGVtZW50KCktPnNldFZhbHVlKGl0ZW1UZXh0KGxp
c3RJbmRleCkpOwotfQotCi1Gb250U2VsZWN0b3IqIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6Zm9udFNlbGVjdG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZG9jdW1lbnQoKS0+c3R5bGVS
ZXNvbHZlcigpLT5mb250U2VsZWN0b3IoKTsKLX0KLQotSG9zdFdpbmRvdyogUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lOjpob3N0V2luZG93KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZG9jdW1l
bnQoKS0+dmlldygpLT5ob3N0V2luZG93KCk7Ci19Ci0KIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjphdXRvc2Nyb2xsKCkKIHsKICAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBpbm5l
clRleHRFbGVtZW50KCktPnJlbmRlckJveCgpLT5sYXllcigpOwpAQCAtNzQxLDE3ICs1MDUsNiBA
QCBib29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bG9naWNhbFNjcm9sbChTY3JvbGxM
b2dpY2FsRGlyZWN0aW9uIGRpcmVjdGlvbgogICAgIHJldHVybiBSZW5kZXJCbG9jazo6bG9naWNh
bFNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyLCBzdG9wTm9kZSk7CiB9
CiAKLVBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNy
ZWF0ZVNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEsIFNjcm9sbGJhck9y
aWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkK
LXsKLSAgICBSZWZQdHI8U2Nyb2xsYmFyPiB3aWRnZXQ7Ci0gICAgYm9vbCBoYXNDdXN0b21TY3Jv
bGxiYXJTdHlsZSA9IHN0eWxlKCktPmhhc1BzZXVkb1N0eWxlKFNDUk9MTEJBUik7Ci0gICAgaWYg
KGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlKQotICAgICAgICB3aWRnZXQgPSBSZW5kZXJTY3JvbGxi
YXI6OmNyZWF0ZUN1c3RvbVNjcm9sbGJhcihzY3JvbGxhYmxlQXJlYSwgb3JpZW50YXRpb24sIHRo
aXMtPm5vZGUoKSk7Ci0gICAgZWxzZQotICAgICAgICB3aWRnZXQgPSBTY3JvbGxiYXI6OmNyZWF0
ZU5hdGl2ZVNjcm9sbGJhcihzY3JvbGxhYmxlQXJlYSwgb3JpZW50YXRpb24sIGNvbnRyb2xTaXpl
KTsKLSAgICByZXR1cm4gd2lkZ2V0LnJlbGVhc2UoKTsKLX0KLQogSFRNTElucHV0RWxlbWVudCog
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppbnB1dEVsZW1lbnQoKSBjb25zdAogewogICAg
IHJldHVybiBub2RlKCktPnRvSW5wdXRFbGVtZW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgKaW5kZXggNmUyMWM4
NTZjMTBmYTlmYmE0MzZjMDZmNzQ5YzE0ZTFlMmE4MGJhNi4uNzFmYTk4MDJmMzdkY2VhOGFjNjFl
Mzc3N2FmYTJhMTgwOGQ1MWU5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaApAQCAtMjMsMTUgKzIzLDE0IEBACiAj
aWZuZGVmIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZV9oCiAjZGVmaW5lIFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZV9oCiAKLSNpbmNsdWRlICJQb3B1cE1lbnVDbGllbnQuaCIKKyNpbmNs
dWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2wuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1MSW5wdXRFbGVtZW50OwotY2xhc3Mg
U2VhcmNoUG9wdXBNZW51OwogCi1jbGFzcyBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUgOiBw
dWJsaWMgUmVuZGVyVGV4dENvbnRyb2wsIHByaXZhdGUgUG9wdXBNZW51Q2xpZW50IHsKK2NsYXNz
IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZSA6IHB1YmxpYyBSZW5kZXJUZXh0Q29udHJvbCB7
CiBwdWJsaWM6CiAgICAgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKE5vZGUqKTsKICAgICB2
aXJ0dWFsIH5SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUoKTsKQEAgLTQwLDE0ICszOSwxOCBA
QCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gY3JlYXRlSW5uZXJCbG9ja1N0
eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBzdGFydFN0eWxlKSBjb25zdDsKICAgICB2b2lkIHVwZGF0
ZUNhbmNlbEJ1dHRvblZpc2liaWxpdHkoKSBjb25zdDsKIAotICAgIHZvaWQgYWRkU2VhcmNoUmVz
dWx0KCk7Ci0gICAgdm9pZCBzdG9wU2VhcmNoRXZlbnRUaW1lcigpOworICAgIHZvaWQgY2Fwc0xv
Y2tTdGF0ZU1heUhhdmVDaGFuZ2VkKCk7CiAKLSAgICBib29sIHBvcHVwSXNWaXNpYmxlKCkgY29u
c3QgeyByZXR1cm4gbV9zZWFyY2hQb3B1cElzVmlzaWJsZTsgfQotICAgIHZvaWQgc2hvd1BvcHVw
KCk7Ci0gICAgdm9pZCBoaWRlUG9wdXAoKTsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIExheW91
dFVuaXQgY29tcHV0ZUhlaWdodExpbWl0KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGNlbnRl
ckNvbnRhaW5lcklmTmVlZGVkKFJlbmRlckJveCopIGNvbnN0IHsgfQogCi0gICAgdm9pZCBjYXBz
TG9ja1N0YXRlTWF5SGF2ZUNoYW5nZWQoKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVs
ZW1lbnQoKSBjb25zdDsKKworICAgIEhUTUxFbGVtZW50KiBjb250YWluZXJFbGVtZW50KCkgY29u
c3Q7CisgICAgSFRNTEVsZW1lbnQqIGlubmVyQmxvY2tFbGVtZW50KCkgY29uc3Q7CisKKyAgICBj
b25zdCBBdG9taWNTdHJpbmcmIGF1dG9zYXZlTmFtZSgpIGNvbnN0OwogCiBwcml2YXRlOgogICAg
IHZpcnR1YWwgYm9vbCBoYXNDb250cm9sQ2xpcCgpIGNvbnN0OwpAQCAtODMsNTIgKzg2LDI1IEBA
IHByaXZhdGU6CiAKICAgICBFVmlzaWJpbGl0eSB2aXNpYmlsaXR5Rm9yQ2FuY2VsQnV0dG9uKCkg
Y29uc3Q7CiAgICAgYm9vbCB0ZXh0U2hvdWxkQmVUcnVuY2F0ZWQoKSBjb25zdDsKLSAgICBjb25z
dCBBdG9taWNTdHJpbmcmIGF1dG9zYXZlTmFtZSgpIGNvbnN0OwotCi0gICAgLy8gUG9wdXBNZW51
Q2xpZW50IG1ldGhvZHMKLSAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKHVuc2lnbmVkIGxp
c3RJbmRleCwgYm9vbCBmaXJlRXZlbnRzID0gdHJ1ZSkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2
b2lkIHNlbGVjdGlvbkNoYW5nZWQodW5zaWduZWQsIGJvb2wpIE9WRVJSSURFIHsgfQotICAgIHZp
cnR1YWwgdm9pZCBzZWxlY3Rpb25DbGVhcmVkKCkgT1ZFUlJJREUgeyB9Ci0gICAgdmlydHVhbCBT
dHJpbmcgaXRlbVRleHQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdCBPVkVSUklERTsKLSAgICB2
aXJ0dWFsIFN0cmluZyBpdGVtTGFiZWwodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdCBPVkVSUklE
RTsKLSAgICB2aXJ0dWFsIFN0cmluZyBpdGVtSWNvbih1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0
IE9WRVJSSURFOwotICAgIHZpcnR1YWwgU3RyaW5nIGl0ZW1Ub29sVGlwKHVuc2lnbmVkKSBjb25z
dCBPVkVSUklERSB7IHJldHVybiBTdHJpbmcoKTsgfQotICAgIHZpcnR1YWwgU3RyaW5nIGl0ZW1B
Y2Nlc3NpYmlsaXR5VGV4dCh1bnNpZ25lZCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gU3RyaW5n
KCk7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXRlbUlzRW5hYmxlZCh1bnNpZ25lZCBsaXN0SW5kZXgp
IGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgUG9wdXBNZW51U3R5bGUgaXRlbVN0eWxlKHVu
c2lnbmVkIGxpc3RJbmRleCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBQb3B1cE1lbnVT
dHlsZSBtZW51U3R5bGUoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGludCBjbGllbnRJ
bnNldExlZnQoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGludCBjbGllbnRJbnNldFJp
Z2h0KCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBMYXlvdXRVbml0IGNsaWVudFBhZGRp
bmdMZWZ0KCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBMYXlvdXRVbml0IGNsaWVudFBh
ZGRpbmdSaWdodCgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgaW50IGxpc3RTaXplKCkg
Y29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBpbnQgc2VsZWN0ZWRJbmRleCgpIGNvbnN0IE9W
RVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBwb3B1cERpZEhpZGUoKSBPVkVSUklERTsKLSAgICB2
aXJ0dWFsIGJvb2wgaXRlbUlzU2VwYXJhdG9yKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QgT1ZF
UlJJREU7Ci0gICAgdmlydHVhbCBib29sIGl0ZW1Jc0xhYmVsKHVuc2lnbmVkIGxpc3RJbmRleCkg
Y29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBib29sIGl0ZW1Jc1NlbGVjdGVkKHVuc2lnbmVk
IGxpc3RJbmRleCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBib29sIHNob3VsZFBvcE92
ZXIoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCB2
YWx1ZVNob3VsZENoYW5nZU9uSG90VHJhY2soKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBmYWxz
ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0RnJvbUl0ZW0odW5zaWduZWQgbGlzdEluZGV4
KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIEZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKCkgY29u
c3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBIb3N0V2luZG93KiBob3N0V2luZG93KCkgY29uc3Qg
T1ZFUlJJREU7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xs
YmFyKFNjcm9sbGFibGVBcmVhKiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRy
b2xTaXplKSBPVkVSUklERTsKIAotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCgp
IGNvbnN0OwotCi0gICAgSFRNTEVsZW1lbnQqIGNvbnRhaW5lckVsZW1lbnQoKSBjb25zdDsKLSAg
ICBIVE1MRWxlbWVudCogaW5uZXJCbG9ja0VsZW1lbnQoKSBjb25zdDsKICAgICBIVE1MRWxlbWVu
dCogaW5uZXJTcGluQnV0dG9uRWxlbWVudCgpIGNvbnN0OwogICAgIEhUTUxFbGVtZW50KiByZXN1
bHRzQnV0dG9uRWxlbWVudCgpIGNvbnN0OwogICAgIEhUTUxFbGVtZW50KiBjYW5jZWxCdXR0b25F
bGVtZW50KCkgY29uc3Q7CiAKLSAgICBib29sIG1fc2VhcmNoUG9wdXBJc1Zpc2libGU7CiAgICAg
Ym9vbCBtX3Nob3VsZERyYXdDYXBzTG9ja0luZGljYXRvcjsKICAgICBMYXlvdXRVbml0IG1fZGVz
aXJlZElubmVyVGV4dEhlaWdodDsKLSAgICBSZWZQdHI8U2VhcmNoUG9wdXBNZW51PiBtX3NlYXJj
aFBvcHVwOwotICAgIFZlY3RvcjxTdHJpbmc+IG1fcmVjZW50U2VhcmNoZXM7CiB9OwogCitpbmxp
bmUgSFRNTEVsZW1lbnQqIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y29udGFpbmVyRWxl
bWVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlucHV0RWxlbWVudCgpLT5jb250YWluZXJFbGVt
ZW50KCk7Cit9CisKK2lubGluZSBIVE1MRWxlbWVudCogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lOjppbm5lckJsb2NrRWxlbWVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlucHV0RWxlbWVu
dCgpLT5pbm5lckJsb2NrRWxlbWVudCgpOworfQorCiBpbmxpbmUgUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lKiB0b1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShSZW5kZXJPYmplY3QqIG9i
amVjdCkKIHsKICAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzVGV4dEZpZWxkKCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcmluZ0FsbEluT25lLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJpbmdBbGxJbk9uZS5jcHAKaW5kZXgg
ZDE3YmQzMTNhNDMxOTBjOWJkZmU1Y2U4ZDMyZjhmNzE4NTQ0NGE0Zi4uMWYwYTRhMzhlNzJlMjFh
N2RjM2YwYWRjZDNjYWUzNjNjOGE1MWQ5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlcmluZ0FsbEluT25lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyaW5nQWxsSW5PbmUuY3BwCkBAIC05MSw2ICs5MSw3IEBACiAjaW5jbHVkZSAiUmVu
ZGVyU2Nyb2xsYmFyLmNwcCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXJQYXJ0LmNwcCIKICNp
bmNsdWRlICJSZW5kZXJTY3JvbGxiYXJUaGVtZS5jcHAiCisjaW5jbHVkZSAiUmVuZGVyU2VhcmNo
RmllbGQuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNsaWRlci5jcHAiCiAjaW5jbHVkZSAiUmVuZGVy
VGFibGUuY3BwIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2FwdGlvbi5jcHAiCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147741</attachid>
            <date>2012-06-14 23:15:30 -0700</date>
            <delta_ts>2012-06-15 01:09:59 -0700</delta_ts>
            <desc>Patch 6</desc>
            <filename>bug-88980-20120615151529.patch</filename>
            <type>text/plain</type>
            <size>69506</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwMzk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmM4M2MyODcwMTAzODhh
NWE3M2I5YzdlN2E2NmE2YTQ1OTQyYmNjMi4uMzZlY2M0ZWFjODg2MjEwODlmZDY5ZjQxZDA5NTBj
ZGQ3ZjU1NTVjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc5IEBACisyMDEyLTA2LTE1ICBZb3No
aWZ1bWkgSW5vdWUgIDx5b3NpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Zvcm1zXSBNb3Zl
IHNlYXJjaCBmaWVsZCByZWxhdGVkIGNvZGUgdG8gUmVuZGVyU2VhcmNoRmllbGQgZnJvbSBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTg4OTgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtb3ZlcyBzZWFyY2ggZmllbGQgcmVsYXRlZCBtZXRo
b2RzIGluIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZQorICAgICAgICB0byBuZXcgY2xhc3Mg
UmVuZGVyU2VhcmNoRmllbGQgYW5kIGNoYW5nZXMgcmVsYXRlZCBjbGFzc2VzIHRvIHVzZQorICAg
ICAgICBSZW5kZXJTZWFyY2hGaWVsZC4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgcGF0
Y2ggZG9lc24ndCBjaGFuZ2UgYmVoYXZpb3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDog
QWRkZWQgbmV3IGZpbGUgUmVuZGVyU2VhcmNoRmllbGQuY3BwCisgICAgICAgICogR05VbWFrZWZp
bGUubGlzdC5hbTogQWRkZWQgbmV3IGZpbGUgUmVuZGVyU2VhcmNoRmllbGQuY3BwIGFuZCBSZW5k
ZXJTZWFyY2hGaWVsZC5oCisgICAgICAgICogVGFyZ2V0LnByaTogZGl0dG8KKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6IGRpaXRvCisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2o6IGRpdHRvCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBk
aXR0bworICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MSW5wdXRFbGVtZW50OjphZGRTZWFyY2hSZXN1bHQpOiBDaGFuZ2VkIHRvIGNhbGwg
SW5wdXRUeXBlOjphZGRTZWFyY2hSZXN1bHQuCisgICAgICAgICogaHRtbC9JbnB1dFR5cGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjphZGRTZWFyY2hSZXN1bHQpOiBBZGRlZC4K
KyAgICAgICAgKiBodG1sL1NlYXJjaElucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
ZWFyY2hJbnB1dFR5cGU6OmFkZFNlYXJjaFJlc3VsdCk6IE1vdmVkIGZyb20gSFRNTElucHV0RWxl
bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaElucHV0VHlwZTo6Y3JlYXRlUmVuZGVyZXIp
OiBBZGRlZCB0byBjcmVhdGUgUmVuZGVyU2VhcmNoRmllbGQuCisgICAgICAgICogaHRtbC9TZWFy
Y2hGaWVsZElucHV0VHlwZS5oOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoRmllbGRJbnB1dFR5
cGUpOgorICAgICAgICAqIGh0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50OjpkZWZh
dWx0RXZlbnRIYW5kbGVyKTogVXNlIFJlbmRlclNlYXJjaEZpZWxkIGluc3RlYWQgb2YgUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lLgorICAgICAgICAqIGxvYWRlci9Gb3JtU3VibWlzc2lvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGb3JtU3VibWlzc2lvbjo6Y3JlYXRlKTogR290IHJpZCBp
c1NlYXJjaEZpZWxkKCkgZ3VhcmQgZm9yIGFkZFNlYXJjaFJlc3VsdCgpLgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
ZWFyY2hGaWVsZDo6UmVuZGVyU2VhcmNoRmllbGQpOiBSZW5hbWVkIHRvIFJlbmRlclNlYXJjaEZp
ZWxkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6On5SZW5kZXJTZWFyY2hG
aWVsZCk6IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OmFkZFNl
YXJjaFJlc3VsdCk6IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6
OnNob3dQb3B1cCk6IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6
OmhpZGVQb3B1cCk6IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6
OnVwZGF0ZUZyb21FbGVtZW50KTogTW92ZWQgc2VhcmNoIGZpZWxkIHJlbGF0ZWQgY29kZSBmcm9t
IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNl
YXJjaEZpZWxkOjp2YWx1ZUNoYW5nZWQpOiBSZW5hbWVkIHRvIFJlbmRlclNlYXJjaEZpZWxkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6Oml0ZW1UZXh0KTogZGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6aXRlbUxhYmVsKTogZGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6aXRlbUljb24pOiBkaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjppdGVtSXNFbmFibGVkKTogZGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6aXRlbVN0eWxlKTogZGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6bWVudVN0eWxlKTogZGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6Y2xpZW50SW5zZXRMZWZ0KTog
ZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6Y2xpZW50SW5zZXRS
aWdodCk6IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OmNsaWVu
dFBhZGRpbmdMZWZ0KTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVs
ZDo6Y2xpZW50UGFkZGluZ1JpZ2h0KTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
ZWFyY2hGaWVsZDo6bGlzdFNpemUpOiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNl
YXJjaEZpZWxkOjpzZWxlY3RlZEluZGV4KTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTZWFyY2hGaWVsZDo6cG9wdXBEaWRIaWRlKTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTZWFyY2hGaWVsZDo6aXRlbUlzU2VwYXJhdG9yKTogZGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6aXRlbUlzTGFiZWwpOiBkaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjppdGVtSXNTZWxlY3RlZCk6IGRpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OnNldFRleHRGcm9tSXRlbSk6IGRpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OmZvbnRTZWxlY3Rvcik6IGRpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6Omhvc3RXaW5kb3cpOiBkaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjpjcmVhdGVTY3JvbGxiYXIp
OiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjpjb21wdXRlSGVp
Z2h0TGltaXQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjpj
ZW50ZXJDb250YWluZXJJZk5lZWRlZCk6IEFkZGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJTZWFyY2hGaWVsZC5oOgorICAgICAgICAoV2ViQ29yZTo6dG9SZW5kZXJTZWFyY2hGaWVsZCk6
IEFkZGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUpOiBSZW1vdmUgc2VhcmNoIGZpZWxkIHJlbGF0ZWQgY29k
ZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6flJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZSk6IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjb21wdXRlSGVpZ2h0TGltaXQpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5b3V0KTogVXNlIG5l
dyBtZXRob2RzIGZvciByZW1vdmluZyBpc1NlYXJjaEZpZWxkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp1cGRhdGVGcm9tRWxlbWVudCk6IFJlbW92ZWQg
c2VhcmNoIGZpZWxkIHJlbGF0ZWQgY29kZS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OmNlbnRlckNvbnRhaW5lcklmTmVlZGVkKTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNvbnRhaW5lckVsZW1lbnQpOiBF
eHBvc2VkIGZvciBSZW5kZXJTZWFyY2hGaWVsZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZTo6aW5uZXJCbG9ja0VsZW1lbnQpOiBFeHBvc2VkIGZvciBSZW5k
ZXJTZWFyY2hGaWVsZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyaW5nQWxsSW5PbmUuY3Bw
OiBBZGRlZCBSZW5kZXJTZWFyY2hGaWVsZC5jcHAKKwogMjAxMi0wNi0xNCAgS2VudCBUYW11cmEg
IDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVmFsaWRhdGUgZm9ybSBzdGF0ZSBzdHJp
bmdzIGluIEZvcm1Db250cm9sbGVyOjpzZXRTdGF0ZUZvck5ld0Zvcm1FbGVtZW50cygpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0CmluZGV4IGUyNzNjMGZkNTYwMTViOTU5NjNiZmI0ODM4OWEwM2IyYzc1YmRi
YWQuLjlhZDg1YmI5NDIyNTA0ZGMzMmNkNmQxZmY4OGYzNDY4M2FlZDQ2ZmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CkBAIC0xMzg3LDYgKzEzODcsNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhci5jcHAKICAgICByZW5kZXJpbmcvUmVuZGVyU2Nyb2xs
YmFyUGFydC5jcHAKICAgICByZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyVGhlbWUuY3BwCisgICAg
cmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmNwcAogICAgIHJlbmRlcmluZy9SZW5kZXJTbGlk
ZXIuY3BwCiAgICAgcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAogICAgIHJlbmRlcmluZy9SZW5k
ZXJUYWJsZUNhcHRpb24uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA0YTQ1
YzdmMDM0MDAxMmFiMzYxZTAzYmNiYTk0MjY3NDJlYzU2MDcwLi4zN2I3ZTVhYzI5OTdlYTMxNjFl
OTRhYzg2NDYxYTZjZTY3NjViMzQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAg
LTM5MDYsNiArMzkwNiw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclBhcnQuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNjcm9sbGJhclRoZW1lLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNjcm9sbGJhclRoZW1lLmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTZWFyY2hGaWVsZC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFy
Y2hGaWVsZC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VsZWN0aW9uSW5m
by5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcCBcCiAJU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5oIFwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IDE0
ZjdlZDE4MGE3MTJiZTUwNDg4YWM4NWM2MWM2Y2U0MjZkN2QzODQuLjY5YmFhOTI5ZmQ2NzJjOTI2
MTY0OGY4YjIyMGY1N2JjZTY3ZDNmZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Rhcmdl
dC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMTMwOSw2ICsxMzA5LDcg
QEAgU09VUkNFUyArPSBcCiAgICAgcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhci5jcHAgXAogICAg
IHJlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJQYXJ0LmNwcCBcCiAgICAgcmVuZGVyaW5nL1JlbmRl
clNjcm9sbGJhclRoZW1lLmNwcCBcCisgICAgcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmNw
cCBcCiAgICAgcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAgXAogICAgIHJlbmRlcmluZy9SZW5k
ZXJUYWJsZS5jcHAgXAogICAgIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNhcHRpb24uY3BwIFwKQEAg
LTI1MTQsNiArMjUxNSw3IEBAIEhFQURFUlMgKz0gXAogICAgIHJlbmRlcmluZy9SZW5kZXJTY3Jv
bGxiYXIuaCBcCiAgICAgcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclBhcnQuaCBcCiAgICAgcmVu
ZGVyaW5nL1JlbmRlclNjcm9sbGJhclRoZW1lLmggXAorICAgIHJlbmRlcmluZy9SZW5kZXJTZWFy
Y2hGaWVsZC5oIFwKICAgICByZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmggXAogICAgIHJlbmRlcmlu
Zy9SZW5kZXJUYWJsZUNhcHRpb24uaCBcCiAgICAgcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5o
IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQppbmRleCA5Y2I2YzdkNDM2ZDNhZDQ3MmY0YTY2OTk5NDhlMmI0MDIw
MzdlNTMzLi41YmI2ZGRhNTRkYmY5NmI0N2RjMWNiYTEzOTVhMTIzYTNmNjYwYTNhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCkBAIC00OTAyLDYgKzQ5MDIsOCBAQAogICAgICAgICAgICAgJ3JlbmRlcmluZy9S
ZW5kZXJTY3JvbGxiYXJQYXJ0LmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTY3Jv
bGxiYXJUaGVtZS5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJU
aGVtZS5oJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwJywK
KyAgICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuaCcsCiAgICAgICAgICAg
ICAncmVuZGVyaW5nL1JlbmRlclNlbGVjdGlvbkluZm8uaCcsCiAgICAgICAgICAgICAncmVuZGVy
aW5nL1JlbmRlclNsaWRlci5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTbGlk
ZXIuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmlu
ZGV4IDE3YWUwZGY1MTY2NjYxZWFjM2ExYjcwYWMyYjNmN2Y4NDYwMjI3ZTUuLmQwNmRkYWFhMTQ2
MmQ4OWNjNTFmOWYzZWQ2ZDhiZWU0ODljZWFkZWMgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC00MTUwMyw2ICs0MTUwMyw2MiBAQAogCQkJCT4K
IAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcUmVu
ZGVyU2VhcmNoRmllbGQuY3BwIgorCQkJCT4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJ
TmFtZT0iRGVidWd8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+
CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJ
CTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9
IlJlbGVhc2V8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJ
CQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwv
RmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IkRl
YnVnX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJ
CQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+
CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJ
TmFtZT0iUmVsZWFzZV9DYWlyb19DRkxpdGV8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxk
PSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29s
IgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0
aW9uCisJCQkJCU5hbWU9IkRlYnVnX0FsbHxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9
InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wi
CisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRp
b24KKwkJCQkJTmFtZT0iUHJvZHVjdGlvbnxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9
InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wi
CisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxl
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcUmVuZGVyU2VhcmNoRmllbGQuaCIKKwkJ
CQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5n
XFJlbmRlclNlbGVjdGlvbkluZm8uaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZWMzNjY2ZDVh
NWM1Yzc4ODIzMTI3M2Y3YTk0OWRlOTA1ZjQ5ZmNhMi4uZGY4ZDVhODYyNWI4NzcyZGEyOGY2Y2Rl
MGMyODJkYThmMTQyZmRmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTE4OSw2ICsxMTg5LDggQEAKIAkJNDUwOTlDNDExMzcw
QTc4MDAwNThENTEzIC8qIEljb25VUkwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDUwOTlDNDAxMzcwQTc4MDAwNThENTEzIC8qIEljb25VUkwuY3Bw
ICovOyB9OwogCQk0NTBDRUJGMDE1MDczQkJFMDAyQkIxNDkgLyogTGFiZWxhYmxlRWxlbWVudC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NTBDRUJF
RTE1MDczQkJFMDAyQkIxNDkgLyogTGFiZWxhYmxlRWxlbWVudC5jcHAgKi87IH07CiAJCTQ1MENF
QkYxMTUwNzNCQkUwMDJCQjE0OSAvKiBMYWJlbGFibGVFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NTBDRUJFRjE1MDczQkJFMDAyQkIxNDkg
LyogTGFiZWxhYmxlRWxlbWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTQ1OEZFNDA5MTU4OURGMEIwMDU2MDlFNiAvKiBSZW5kZXJTZWFyY2hG
aWVsZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
NThGRTQwNzE1ODlERjBCMDA1NjA5RTYgLyogUmVuZGVyU2VhcmNoRmllbGQuY3BwICovOyB9Owor
CQk0NThGRTQwQTE1ODlERjBCMDA1NjA5RTYgLyogUmVuZGVyU2VhcmNoRmllbGQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1OEZFNDA4MTU4OURGMEIw
MDU2MDlFNiAvKiBSZW5kZXJTZWFyY2hGaWVsZC5oICovOyB9OwogCQk0NUJBQzJCMDEzNjBCQkFC
MDA1REEyNTggLyogSWNvblVSTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDVCQUMyQUYxMzYwQkJBQjAwNURBMjU4IC8qIEljb25VUkwuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NUZFQTVDRjE1NkRE
RThDMDA2NTQxMDEgLyogRGVjaW1hbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0NUZFQTVDRDE1NkRERThDMDA2NTQxMDEgLyogRGVjaW1hbC5jcHAg
Ki87IH07CiAJCTQ1RkVBNUQwMTU2RERFOEMwMDY1NDEwMSAvKiBEZWNpbWFsLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NUZFQTVDRTE1NkRERThDMDA2
NTQxMDEgLyogRGVjaW1hbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC04MjE4LDYgKzgyMjAsOCBAQAogCQk0NTA5OUM0MDEzNzBBNzgwMDA1OEQ1
MTMgLyogSWNvblVSTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJ
Y29uVVJMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDUwQ0VCRUUxNTA3M0JC
RTAwMkJCMTQ5IC8qIExhYmVsYWJsZUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gTGFiZWxhYmxlRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTQ1MENFQkVGMTUwNzNCQkUwMDJCQjE0OSAvKiBMYWJlbGFibGVFbGVtZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExhYmVsYWJsZUVsZW1lbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDU4RkU0MDcxNTg5REYwQjAwNTYwOUU2IC8qIFJl
bmRlclNlYXJjaEZpZWxkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlbmRlclNlYXJjaEZpZWxkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDU4
RkU0MDgxNTg5REYwQjAwNTYwOUU2IC8qIFJlbmRlclNlYXJjaEZpZWxkLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNlYXJjaEZpZWxkLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTQ1QkFDMkFGMTM2MEJCQUIwMDVEQTI1OCAvKiBJY29uVVJMLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEljb25VUkwuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNDVGRUE1Q0QxNTZEREU4QzAwNjU0MTAxIC8qIERlY2ltYWwuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVjaW1hbC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ1RkVBNUNFMTU2RERFOEMwMDY1NDEwMSAvKiBEZWNpbWFs
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlY2ltYWwuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxMTE2LDYgKzIxMTIwLDggQEAKIAkJCQlCQzNCRTk5MjBF
OUMxQzdDMDA4MzU1ODggLyogUmVuZGVyU2Nyb2xsYmFyUGFydC5oICovLAogCQkJCUJDM0JFOUE0
MEU5QzIzOTYwMDgzNTU4OCAvKiBSZW5kZXJTY3JvbGxiYXJUaGVtZS5jcHAgKi8sCiAJCQkJQkMz
QkU5OTgwRTlDMUU1RDAwODM1NTg4IC8qIFJlbmRlclNjcm9sbGJhclRoZW1lLmggKi8sCisJCQkJ
NDU4RkU0MDcxNTg5REYwQjAwNTYwOUU2IC8qIFJlbmRlclNlYXJjaEZpZWxkLmNwcCAqLywKKwkJ
CQk0NThGRTQwODE1ODlERjBCMDA1NjA5RTYgLyogUmVuZGVyU2VhcmNoRmllbGQuaCAqLywKIAkJ
CQkwRjExQTU0RTBGMzkyMzMxMDBDMzc4ODQgLyogUmVuZGVyU2VsZWN0aW9uSW5mby5oICovLAog
CQkJCUFCMjQ3QTZBMEFGRDYzODMwMDNGQTVGRCAvKiBSZW5kZXJTbGlkZXIuY3BwICovLAogCQkJ
CUFCMjQ3QTZCMEFGRDYzODMwMDNGQTVGRCAvKiBSZW5kZXJTbGlkZXIuaCAqLywKQEAgLTI0Mjcy
LDYgKzI0Mjc4LDcgQEAKIAkJCQlCQzNCRTk5NDBFOUMxQzdDMDA4MzU1ODggLyogUmVuZGVyU2Ny
b2xsYmFyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzNCRTk5NTBFOUMxQzdDMDA4MzU1ODggLyog
UmVuZGVyU2Nyb2xsYmFyUGFydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMzQkU5OTkwRTlDMUU1
RDAwODM1NTg4IC8qIFJlbmRlclNjcm9sbGJhclRoZW1lLmggaW4gSGVhZGVycyAqLywKKwkJCQk0
NThGRTQwQTE1ODlERjBCMDA1NjA5RTYgLyogUmVuZGVyU2VhcmNoRmllbGQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMTFBNTRGMEYzOTIzMzEwMEMzNzg4NCAvKiBSZW5kZXJTZWxlY3Rpb25JbmZv
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBQjI0N0E2RDBBRkQ2MzgzMDAzRkE1RkQgLyogUmVuZGVy
U2xpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzhDOEZBRTBERENEMzFCMDBCNTkyRjQgLyog
UmVuZGVyU3R5bGUuaCBpbiBIZWFkZXJzICovLApAQCAtMjc0NjcsNiArMjc0NzQsNyBAQAogCQkJ
CUJDM0JFOTkzMEU5QzFDN0MwMDgzNTU4OCAvKiBSZW5kZXJTY3JvbGxiYXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQkMzQkU5QUIwRTlDMjQyMDAwODM1NTg4IC8qIFJlbmRlclNjcm9sbGJhclBh
cnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMzQkU5QTUwRTlDMjM5NjAwODM1NTg4IC8qIFJl
bmRlclNjcm9sbGJhclRoZW1lLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ1OEZFNDA5MTU4OURG
MEIwMDU2MDlFNiAvKiBSZW5kZXJTZWFyY2hGaWVsZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
QjI0N0E2QzBBRkQ2MzgzMDAzRkE1RkQgLyogUmVuZGVyU2xpZGVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUJDOEM4RkFEMEREQ0QzMUIwMEI1OTJGNCAvKiBSZW5kZXJTdHlsZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjRFNTcxNzEzMTMyNzYyMDBDRjg1QUYgLyogUmVuZGVyU1ZHQWxsSW5P
bmUuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxJbnB1dEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50
LmNwcAppbmRleCBlMDAxNTAzZDE3MjgzZTA3YTE3ZDY1NmM2NjAxYTEyMmYzZmUzMjg0Li44YzE5
MThlZDUzNjQxZmY3MjA3NDExYjU5NDVmYzI0ZTI5MGQ3NTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTElucHV0RWxlbWVudC5jcHAKQEAgLTEzMTgsOSArMTMxOCw3IEBAIGJvb2wgSFRNTElu
cHV0RWxlbWVudDo6aXNSZXF1aXJlZEZvcm1Db250cm9sKCkgY29uc3QKIAogdm9pZCBIVE1MSW5w
dXRFbGVtZW50OjphZGRTZWFyY2hSZXN1bHQoKQogewotICAgIEFTU0VSVChpc1NlYXJjaEZpZWxk
KCkpOwotICAgIGlmIChyZW5kZXJlcigpKQotICAgICAgICB0b1JlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZShyZW5kZXJlcigpKS0+YWRkU2VhcmNoUmVzdWx0KCk7CisgICAgbV9pbnB1dFR5cGUt
PmFkZFNlYXJjaFJlc3VsdCgpOwogfQogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6Om9uU2VhcmNo
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcAppbmRleCBkZmM1MGUwMGJkOGFiMGQyN2FmM2M1
OWZiNDRhNTFmMTIwNjg4Nzk3Li5mNTUwYmVlOGQ2NzE2OGQ5MzdiOWYyZmYwODA4OTBhMDJhYmQ5
YzA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCkBAIC01MjMsNiArNTIzLDEwIEBAIHZv
aWQgSW5wdXRUeXBlOjphY2Nlc3NLZXlBY3Rpb24oYm9vbCkKICAgICBlbGVtZW50KCktPmZvY3Vz
KGZhbHNlKTsKIH0KIAordm9pZCBJbnB1dFR5cGU6OmFkZFNlYXJjaFJlc3VsdCgpCit7Cit9CisK
IHZvaWQgSW5wdXRUeXBlOjphdHRhY2goKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9JbnB1dFR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmgKaW5k
ZXggMzg2MDUxZmFjYjcxMGE2YjU2YmRiN2E4ZjBhNTk5N2M2MzUxYjIwMC4uNGVjMWIzMmRjOTY2
NWM5NTc1MzAzM2JlMmVhMDA0NjRmMDBlZDA1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9JbnB1dFR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5oCkBA
IC0yMjIsNiArMjIyLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNO
ZWVkZWQoKTsKICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVy
QXJlbmEqLCBSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhZGRTZWFyY2hS
ZXN1bHQoKTsKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7CiAgICAgdmlydHVhbCB2b2lkIGRl
dGFjaCgpOwogICAgIHZpcnR1YWwgdm9pZCBtaW5Pck1heEF0dHJpYnV0ZUNoYW5nZWQoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvU2VhcmNoSW5wdXRUeXBlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvU2VhcmNoSW5wdXRUeXBlLmNwcAppbmRleCA2ZjUwMGRhZjNmN2I1ZjFl
MDViZDRhMmQwYjJmOWVlNDdjM2IwNGE0Li5iNzdmMDk4YmY2Njg3ZmZiYmJmNjMyMTBkZTA4NDc4
NjkyZjZkODdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1NlYXJjaElucHV0VHlw
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9TZWFyY2hJbnB1dFR5cGUuY3BwCkBAIC0z
Myw3ICszMyw3IEBACiAKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAi
S2V5Ym9hcmRFdmVudC5oIgotI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5o
IgorI2luY2x1ZGUgIlJlbmRlclNlYXJjaEZpZWxkLmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdC5o
IgogI2luY2x1ZGUgIlRleHRDb250cm9sSW5uZXJFbGVtZW50cy5oIgogI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+CkBAIC01MSw2ICs1MSwxNyBAQCBQYXNzT3duUHRyPElucHV0VHlwZT4gU2Vh
cmNoSW5wdXRUeXBlOjpjcmVhdGUoSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkKICAgICByZXR1
cm4gYWRvcHRQdHIobmV3IFNlYXJjaElucHV0VHlwZShlbGVtZW50KSk7CiB9CiAKK3ZvaWQgU2Vh
cmNoSW5wdXRUeXBlOjphZGRTZWFyY2hSZXN1bHQoKQoreworICAgIGlmIChSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyID0gZWxlbWVudCgpLT5yZW5kZXJlcigpKQorICAgICAgICB0b1JlbmRlclNlYXJj
aEZpZWxkKHJlbmRlcmVyKS0+YWRkU2VhcmNoUmVzdWx0KCk7Cit9CisKK1JlbmRlck9iamVjdCog
U2VhcmNoSW5wdXRUeXBlOjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRl
clN0eWxlKikgY29uc3QKK3sKKyAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyU2VhcmNoRmll
bGQoZWxlbWVudCgpKTsKK30KKwogY29uc3QgQXRvbWljU3RyaW5nJiBTZWFyY2hJbnB1dFR5cGU6
OmZvcm1Db250cm9sVHlwZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIElucHV0VHlwZU5hbWVzOjpz
ZWFyY2goKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvU2VhcmNoSW5wdXRUeXBl
LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1NlYXJjaElucHV0VHlwZS5oCmluZGV4IGFiMTkxMDNh
ZmRmYWU4ZTU1NjY3YmY0Y2U0MTMyZmI4ODA1YjgyMjUuLmFjNzIyNjM5YTliZTE0ZTllNWMzZjA3
M2RmNmZjY2I1ODZlNWE1ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvU2VhcmNo
SW5wdXRUeXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9TZWFyY2hJbnB1dFR5cGUuaApA
QCAtNDgsNiArNDgsOCBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgU2VhcmNoSW5wdXRUeXBl
KEhUTUxJbnB1dEVsZW1lbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkU2VhcmNoUmVzdWx0KCkg
T1ZFUlJJREU7CisgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRl
ckFyZW5hKiwgUmVuZGVyU3R5bGUqKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGNvbnN0
IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xUeXBlKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmly
dHVhbCBib29sIHNob3VsZFJlc3BlY3RTcGVlY2hBdHRyaWJ1dGUoKSBPVkVSUklERTsKICAgICB2
aXJ0dWFsIGJvb2wgaXNTZWFyY2hGaWVsZCgpIGNvbnN0IE9WRVJSSURFOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAK
aW5kZXggMTAwZGFlYjY0N2I5ZDc3YWE0YzFiNDMxMmJjOWM1ZTVmYjE4N2FkNi4uNWQyNjg0MWMy
NDM1NzA1NWY3YjViOThiNzE4MThiMzA1N2MxYWQxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCkBAIC0zNyw3
ICszNyw3IEBACiAjaW5jbHVkZSAiSFRNTFRleHRBcmVhRWxlbWVudC5oIgogI2luY2x1ZGUgIk1v
dXNlRXZlbnQuaCIKICNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lLmgiCisjaW5jbHVkZSAiUmVuZGVyU2VhcmNoRmllbGQuaCIKICNpbmNsdWRl
ICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUg
IlNjcm9sbGJhclRoZW1lLmgiCkBAIC0xNTEsNyArMTUxLDcgQEAgdm9pZCBTZWFyY2hGaWVsZFJl
c3VsdHNCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAg
ICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgZXZl
bnQtPmlzTW91c2VFdmVudCgpICYmIHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCktPmJ1
dHRvbigpID09IExlZnRCdXR0b24pIHsKICAgICAgICAgaW5wdXQtPmZvY3VzKCk7CiAgICAgICAg
IGlucHV0LT5zZWxlY3QoKTsKLSAgICAgICAgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKiBy
ZW5kZXJlciA9IHRvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKGlucHV0LT5yZW5kZXJlcigp
KTsKKyAgICAgICAgUmVuZGVyU2VhcmNoRmllbGQqIHJlbmRlcmVyID0gdG9SZW5kZXJTZWFyY2hG
aWVsZChpbnB1dC0+cmVuZGVyZXIoKSk7CiAgICAgICAgIGlmIChyZW5kZXJlci0+cG9wdXBJc1Zp
c2libGUoKSkKICAgICAgICAgICAgIHJlbmRlcmVyLT5oaWRlUG9wdXAoKTsKICAgICAgICAgZWxz
ZSBpZiAoaW5wdXQtPm1heFJlc3VsdHMoKSA+IDApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvRm9ybVN1Ym1pc3Npb24uY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zvcm1T
dWJtaXNzaW9uLmNwcAppbmRleCBkYTAzOTg3ZWU1ZTk0NTQxNmYxNTE4NDQyNmRlMjE2ZWRkYWM1
NTk2Li4yNDdjZTQwNjhhZDVjZmFiN2Y2OWQyMTU1NzAzMTI5MDI0MzM3N2Q5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRm9ybVN1Ym1pc3Npb24uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHAKQEAgLTE5MCw4ICsxOTAsNyBAQCBQYXNz
UmVmUHRyPEZvcm1TdWJtaXNzaW9uPiBGb3JtU3VibWlzc2lvbjo6Y3JlYXRlKEhUTUxGb3JtRWxl
bWVudCogZm9ybSwgY29uc3QgQQogICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQg
PSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oY29udHJvbCk7CiAgICAgICAgICAgICBp
ZiAoaW5wdXQtPmlzVGV4dEZpZWxkKCkpIHsKICAgICAgICAgICAgICAgICBmb3JtVmFsdWVzLmFw
cGVuZChwYWlyPFN0cmluZywgU3RyaW5nPihpbnB1dC0+bmFtZSgpLnN0cmluZygpLCBpbnB1dC0+
dmFsdWUoKSkpOwotICAgICAgICAgICAgICAgIGlmIChpbnB1dC0+aXNTZWFyY2hGaWVsZCgpKQot
ICAgICAgICAgICAgICAgICAgICBpbnB1dC0+YWRkU2VhcmNoUmVzdWx0KCk7CisgICAgICAgICAg
ICAgICAgaW5wdXQtPmFkZFNlYXJjaFJlc3VsdCgpOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgaWYgKGlucHV0LT5pc1Bhc3N3b3JkRmllbGQoKSAmJiAhaW5wdXQtPnZhbHVlKCkuaXNFbXB0
eSgpKQogICAgICAgICAgICAgICAgIGNvbnRhaW5zUGFzc3dvcmREYXRhID0gdHJ1ZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwCmluZGV4IDg0OGZj
MjExOTdjMmE3ZDI0ZjI2NDhkZjcwMjA1MjlmM2M4ODBkM2IuLmVkZTU4NzgwNTE4ODgxZmZkM2U2
YTNlMjZlNjE0OWRmNGRhNGQ3ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNlYXJjaEZpZWxkLmNwcApAQCAtMjIsNyArMjIsNyBAQAogICovCiAKICNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCIKKyNpbmNs
dWRlICJSZW5kZXJTZWFyY2hGaWVsZC5oIgogCiAjaW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgi
CiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgpAQCAtNTEsMzUgKzUxLDE4IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotVmlzaWJsZVBv
c2l0aW9uIFJlbmRlclRleHRDb250cm9sSW5uZXJCbG9jazo6cG9zaXRpb25Gb3JQb2ludChjb25z
dCBMYXlvdXRQb2ludCYgcG9pbnQpCi17Ci0gICAgTGF5b3V0UG9pbnQgY29udGVudHNQb2ludChw
b2ludCk7Ci0KLSAgICAvLyBNdWx0aWxpbmUgdGV4dCBjb250cm9scyBoYXZlIHRoZSBzY3JvbGwg
b24gc2hhZG93QW5jZXN0b3JOb2RlLCBzbyB3ZSBuZWVkIHRvIHRha2UgdGhhdAotICAgIC8vIGlu
dG8gYWNjb3VudCBoZXJlLgotICAgIGlmIChtX211bHRpTGluZSkgewotICAgICAgICBSZW5kZXJU
ZXh0Q29udHJvbCogcmVuZGVyZXIgPSB0b1JlbmRlclRleHRDb250cm9sKG5vZGUoKS0+c2hhZG93
QW5jZXN0b3JOb2RlKCktPnJlbmRlcmVyKCkpOwotICAgICAgICBpZiAocmVuZGVyZXItPmhhc092
ZXJmbG93Q2xpcCgpKQotICAgICAgICAgICAgY29udGVudHNQb2ludCArPSByZW5kZXJlci0+c2Ny
b2xsZWRDb250ZW50T2Zmc2V0KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIFJlbmRlckJsb2NrOjpw
b3NpdGlvbkZvclBvaW50KGNvbnRlbnRzUG9pbnQpOwotfQotCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKLVJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6UmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lKE5vZGUqIG5vZGUpCi0gICAgOiBSZW5kZXJUZXh0Q29udHJvbChub2Rl
KQorUmVuZGVyU2VhcmNoRmllbGQ6OlJlbmRlclNlYXJjaEZpZWxkKE5vZGUqIG5vZGUpCisgICAg
OiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUobm9kZSkKICAgICAsIG1fc2VhcmNoUG9wdXBJ
c1Zpc2libGUoZmFsc2UpCi0gICAgLCBtX3Nob3VsZERyYXdDYXBzTG9ja0luZGljYXRvcihmYWxz
ZSkKLSAgICAsIG1fZGVzaXJlZElubmVyVGV4dEhlaWdodCgtMSkKICAgICAsIG1fc2VhcmNoUG9w
dXAoMCkKIHsKICAgICBBU1NFUlQobm9kZS0+aXNIVE1MRWxlbWVudCgpKTsKICAgICBBU1NFUlQo
bm9kZS0+dG9JbnB1dEVsZW1lbnQoKSk7CiB9CiAKLVJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6flJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZSgpCitSZW5kZXJTZWFyY2hGaWVsZDo6flJl
bmRlclNlYXJjaEZpZWxkKCkKIHsKICAgICBpZiAobV9zZWFyY2hQb3B1cCkgewogICAgICAgICBt
X3NlYXJjaFBvcHVwLT5wb3B1cE1lbnUoKS0+ZGlzY29ubmVjdENsaWVudCgpOwpAQCAtODcsMzgg
KzcwLDcgQEAgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp+UmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lKCkKICAgICB9CiB9CiAKLWlubGluZSBIVE1MRWxlbWVudCogUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lOjpjb250YWluZXJFbGVtZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
aW5wdXRFbGVtZW50KCktPmNvbnRhaW5lckVsZW1lbnQoKTsKLX0KLQotaW5saW5lIEhUTUxFbGVt
ZW50KiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmlubmVyQmxvY2tFbGVtZW50KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gaW5wdXRFbGVtZW50KCktPmlubmVyQmxvY2tFbGVtZW50KCk7Ci19
Ci0KLWlubGluZSBIVE1MRWxlbWVudCogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppbm5l
clNwaW5CdXR0b25FbGVtZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gaW5wdXRFbGVtZW50KCkt
PmlubmVyU3BpbkJ1dHRvbkVsZW1lbnQoKTsKLX0KLQotaW5saW5lIEhUTUxFbGVtZW50KiBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnJlc3VsdHNCdXR0b25FbGVtZW50KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gaW5wdXRFbGVtZW50KCktPnJlc3VsdHNCdXR0b25FbGVtZW50KCk7Ci19Ci0K
LWlubGluZSBIVE1MRWxlbWVudCogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjYW5jZWxC
dXR0b25FbGVtZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gaW5wdXRFbGVtZW50KCktPmNhbmNl
bEJ1dHRvbkVsZW1lbnQoKTsKLX0KLQotUmVuZGVyU3R5bGUqIFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6dGV4dEJhc2VTdHlsZSgpIGNvbnN0Ci17Ci0gICAgSFRNTEVsZW1lbnQqIGlubmVy
QmxvY2sgPSBpbm5lckJsb2NrRWxlbWVudCgpOwotICAgIHJldHVybiBpbm5lckJsb2NrID8gaW5u
ZXJCbG9jay0+cmVuZGVyZXIoKS0+c3R5bGUoKSA6IHN0eWxlKCk7Ci19Ci0KLXZvaWQgUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lOjphZGRTZWFyY2hSZXN1bHQoKQordm9pZCBSZW5kZXJTZWFy
Y2hGaWVsZDo6YWRkU2VhcmNoUmVzdWx0KCkKIHsKICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1
dCA9IGlucHV0RWxlbWVudCgpOwogICAgIGlmIChpbnB1dC0+bWF4UmVzdWx0cygpIDw9IDApCkBA
IC0xNDksNyArMTAxLDcgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmFkZFNl
YXJjaFJlc3VsdCgpCiAgICAgbV9zZWFyY2hQb3B1cC0+c2F2ZVJlY2VudFNlYXJjaGVzKG5hbWUs
IG1fcmVjZW50U2VhcmNoZXMpOwogfQogCi12b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6c2hvd1BvcHVwKCkKK3ZvaWQgUmVuZGVyU2VhcmNoRmllbGQ6OnNob3dQb3B1cCgpCiB7CiAg
ICAgaWYgKG1fc2VhcmNoUG9wdXBJc1Zpc2libGUpCiAgICAgICAgIHJldHVybjsKQEAgLTE3OCwz
NTggKzEzMCwyMiBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2hvd1BvcHVw
KCkKICAgICBtX3NlYXJjaFBvcHVwLT5wb3B1cE1lbnUoKS0+c2hvdyhwaXhlbFNuYXBwZWRJbnRS
ZWN0KGFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkpLCBkb2N1bWVudCgpLT52aWV3KCksIC0xKTsK
IH0KIAotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmhpZGVQb3B1cCgpCit2b2lk
IFJlbmRlclNlYXJjaEZpZWxkOjpoaWRlUG9wdXAoKQogewogICAgIGlmIChtX3NlYXJjaFBvcHVw
KQogICAgICAgICBtX3NlYXJjaFBvcHVwLT5wb3B1cE1lbnUoKS0+aGlkZSgpOwogfQogCi12b2lk
IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKLXsKLSAgICBSZW5kZXJUZXh0Q29udHJv
bDo6cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7Ci0KLSAgICBpZiAocGFpbnRJbmZvLnBo
YXNlID09IFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQgJiYgbV9zaG91bGREcmF3Q2Fwc0xvY2tJ
bmRpY2F0b3IpIHsKLSAgICAgICAgTGF5b3V0UmVjdCBjb250ZW50c1JlY3QgPSBjb250ZW50Qm94
UmVjdCgpOwotCi0gICAgICAgIC8vIENlbnRlciB2ZXJ0aWNhbGx5IGxpa2UgdGhlIHRleHQuCi0g
ICAgICAgIGNvbnRlbnRzUmVjdC5zZXRZKChoZWlnaHQoKSAtIGNvbnRlbnRzUmVjdC5oZWlnaHQo
KSkgLyAyKTsKLQotICAgICAgICAvLyBDb252ZXJ0IHRoZSByZWN0IGludG8gdGhlIGNvb3JkcyB1
c2VkIGZvciBwYWludGluZyB0aGUgY29udGVudAotICAgICAgICBjb250ZW50c1JlY3QubW92ZUJ5
KHBhaW50T2Zmc2V0ICsgbG9jYXRpb24oKSk7Ci0gICAgICAgIHRoZW1lKCktPnBhaW50Q2Fwc0xv
Y2tJbmRpY2F0b3IodGhpcywgcGFpbnRJbmZvLCBwaXhlbFNuYXBwZWRJbnRSZWN0KGNvbnRlbnRz
UmVjdCkpOwotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Omxh
eW91dCgpCit2b2lkIFJlbmRlclNlYXJjaEZpZWxkOjp1cGRhdGVGcm9tRWxlbWVudCgpCiB7Ci0g
ICAgLy8gRklYTUU6IFdlIHNob3VsZCByZW1vdmUgdGhlIGhlaWdodC1yZWxhdGVkIGhhY2tzIGlu
IGxheW91dCgpIGFuZAotICAgIC8vIHN0eWxlRGlkQ2hhbmdlKCkuIFdlIG5lZWQgdGhlbSBiZWNh
dXNlCi0gICAgLy8gLSBDZW50ZXIgdGhlIGlubmVyIGVsZW1lbnRzIHZlcnRpY2FsbHkgaWYgdGhl
IGlucHV0IGhlaWdodCBpcyB0YWxsZXIgdGhhbgotICAgIC8vICAgdGhlIGludHJpbnNpYyBoZWln
aHQgb2YgdGhlIGlubmVyIGVsZW1lbnRzLgotICAgIC8vIC0gU2hyaW5rIHRoZSBpbm5lciBlbG1l
bnQgaGVpZ2h0cyBpZiB0aGUgaW5wdXQgaGVpZ2h0IGlzIHNhbWxsZXIgdGhhbiB0aGUKLSAgICAv
LyAgIGludHJpbnNpYyBoZWlnaHRzIG9mIHRoZSBpbm5lciBlbGVtZW50cy4KLQotICAgIC8vIFdl
IGRvbid0IGhvbm9yIHBhZGRpbmdzIGFuZCBib3JkZXJzIGZvciB0ZXh0ZmllbGRzIHdpdGhvdXQg
ZGVjb3JhdGlvbnMKLSAgICAvLyBhbmQgdHlwZT1zZWFyY2ggaWYgdGhlIHRleHQgaGVpZ2h0IGlz
IHRhbGxlciB0aGFuIHRoZSBjb250ZW50SGVpZ2h0KCkKLSAgICAvLyBiZWNhdXNlIG9mIGNvbXBh
YmlsaXR5LgotCi0gICAgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKGZhbHNlKTsKLQotICAgIFJl
bmRlckJveCogaW5uZXJUZXh0UmVuZGVyZXIgPSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRlckJv
eCgpOwotICAgIEFTU0VSVChpbm5lclRleHRSZW5kZXJlcik7Ci0gICAgUmVuZGVyQm94KiBpbm5l
ckJsb2NrUmVuZGVyZXIgPSBpbm5lckJsb2NrRWxlbWVudCgpID8gaW5uZXJCbG9ja0VsZW1lbnQo
KS0+cmVuZGVyQm94KCkgOiAwOwotICAgIEhUTUxFbGVtZW50KiBjb250YWluZXIgPSBjb250YWlu
ZXJFbGVtZW50KCk7Ci0gICAgUmVuZGVyQm94KiBjb250YWluZXJSZW5kZXJlciA9IGNvbnRhaW5l
ciA/IGNvbnRhaW5lci0+cmVuZGVyQm94KCkgOiAwOwotCi0gICAgLy8gU2V0IHRoZSB0ZXh0IGJs
b2NrIGhlaWdodAotICAgIExheW91dFVuaXQgZGVzaXJlZEhlaWdodCA9IHRleHRCbG9ja0hlaWdo
dCgpOwotICAgIExheW91dFVuaXQgY3VycmVudEhlaWdodCA9IGlubmVyVGV4dFJlbmRlcmVyLT5o
ZWlnaHQoKTsKLQotICAgIExheW91dFVuaXQgaGVpZ2h0TGltaXQgPSAoaW5wdXRFbGVtZW50KCkt
PmlzU2VhcmNoRmllbGQoKSB8fCAhY29udGFpbmVyKSA/IGhlaWdodCgpIDogY29udGVudEhlaWdo
dCgpOwotICAgIGlmIChjdXJyZW50SGVpZ2h0ID4gaGVpZ2h0TGltaXQpIHsKLSAgICAgICAgaWYg
KGRlc2lyZWRIZWlnaHQgIT0gY3VycmVudEhlaWdodCkKLSAgICAgICAgICAgIHNldE5lZWRzTGF5
b3V0KHRydWUsIE1hcmtPbmx5VGhpcyk7Ci0KLSAgICAgICAgaW5uZXJUZXh0UmVuZGVyZXItPnN0
eWxlKCktPnNldEhlaWdodChMZW5ndGgoZGVzaXJlZEhlaWdodCwgRml4ZWQpKTsKLSAgICAgICAg
bV9kZXNpcmVkSW5uZXJUZXh0SGVpZ2h0ID0gZGVzaXJlZEhlaWdodDsKLSAgICAgICAgaWYgKGlu
bmVyQmxvY2tSZW5kZXJlcikKLSAgICAgICAgICAgIGlubmVyQmxvY2tSZW5kZXJlci0+c3R5bGUo
KS0+c2V0SGVpZ2h0KExlbmd0aChkZXNpcmVkSGVpZ2h0LCBGaXhlZCkpOwotICAgIH0KLSAgICAv
LyBUaGUgY29udGFpbmVyIG1pZ2h0IGJlIHRhbGxlciBiZWNhdXNlIG9mIGRlY29yYXRpb24gZWxl
bWVudHMuCi0gICAgaWYgKGNvbnRhaW5lclJlbmRlcmVyKSB7Ci0gICAgICAgIGNvbnRhaW5lclJl
bmRlcmVyLT5sYXlvdXRJZk5lZWRlZCgpOwotICAgICAgICBMYXlvdXRVbml0IGNvbnRhaW5lckhl
aWdodCA9IGNvbnRhaW5lclJlbmRlcmVyLT5oZWlnaHQoKTsKLSAgICAgICAgaWYgKGNvbnRhaW5l
ckhlaWdodCA+IGhlaWdodExpbWl0KSB7Ci0gICAgICAgICAgICBjb250YWluZXJSZW5kZXJlci0+
c3R5bGUoKS0+c2V0SGVpZ2h0KExlbmd0aChoZWlnaHRMaW1pdCwgRml4ZWQpKTsKLSAgICAgICAg
ICAgIHNldE5lZWRzTGF5b3V0KHRydWUsIE1hcmtPbmx5VGhpcyk7Ci0gICAgICAgIH0gZWxzZSBp
ZiAoY29udGFpbmVyUmVuZGVyZXItPmhlaWdodCgpIDwgY29udGVudEhlaWdodCgpKSB7Ci0gICAg
ICAgICAgICBjb250YWluZXJSZW5kZXJlci0+c3R5bGUoKS0+c2V0SGVpZ2h0KExlbmd0aChjb250
ZW50SGVpZ2h0KCksIEZpeGVkKSk7Ci0gICAgICAgICAgICBzZXROZWVkc0xheW91dCh0cnVlLCBN
YXJrT25seVRoaXMpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNvbnRhaW5lclJlbmRl
cmVyLT5zdHlsZSgpLT5zZXRIZWlnaHQoTGVuZ3RoKGNvbnRhaW5lckhlaWdodCwgRml4ZWQpKTsK
LSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBuZWVkIGFub3RoZXIgbGF5b3V0IHBhc3MsIHdlIGhhdmUg
Y2hhbmdlZCBvbmUgb2YgY2hpbGRyZW4ncyBoZWlnaHQgc28gd2UgbmVlZCB0byByZWxheW91dCB0
aGVtLgotICAgIGlmIChuZWVkc0xheW91dCgpKQotICAgICAgICBSZW5kZXJCbG9jazo6bGF5b3V0
QmxvY2sodHJ1ZSk7Ci0KLSAgICAvLyBDZW50ZXIgdGhlIGNoaWxkIGJsb2NrIHZlcnRpY2FsbHkK
LSAgICBjdXJyZW50SGVpZ2h0ID0gaW5uZXJUZXh0UmVuZGVyZXItPmhlaWdodCgpOwotICAgIGlm
ICghY29udGFpbmVyICYmIGN1cnJlbnRIZWlnaHQgIT0gY29udGVudEhlaWdodCgpKSB7Ci0gICAg
ICAgIExheW91dFVuaXQgaGVpZ2h0RGlmZiA9IGN1cnJlbnRIZWlnaHQgLSBjb250ZW50SGVpZ2h0
KCk7Ci0gICAgICAgIGlubmVyVGV4dFJlbmRlcmVyLT5zZXRZKGlubmVyVGV4dFJlbmRlcmVyLT55
KCkgLSAoaGVpZ2h0RGlmZiAvIDIgKyBsYXlvdXRNb2QoaGVpZ2h0RGlmZiwgMikpKTsKLSAgICB9
IGVsc2UgaWYgKGlucHV0RWxlbWVudCgpLT5pc1NlYXJjaEZpZWxkKCkgJiYgY29udGFpbmVyUmVu
ZGVyZXIgJiYgY29udGFpbmVyUmVuZGVyZXItPmhlaWdodCgpID4gY29udGVudEhlaWdodCgpKSB7
Ci0gICAgICAgIC8vIEEgcXVpcmsgZm9yIGZpbmQtaW4tcGFnZSBib3ggb24gU2FmYXJpIFdpbmRv
d3MuCi0gICAgICAgIC8vIGh0dHA6Ly93ZWJraXQub3JnL2IvNjMxNTcKLSAgICAgICAgTGF5b3V0
VW5pdCBoZWlnaHREaWZmID0gY29udGFpbmVyUmVuZGVyZXItPmhlaWdodCgpIC0gY29udGVudEhl
aWdodCgpOwotICAgICAgICBjb250YWluZXJSZW5kZXJlci0+c2V0WShjb250YWluZXJSZW5kZXJl
ci0+eSgpIC0gKGhlaWdodERpZmYgLyAyICsgbGF5b3V0TW9kKGhlaWdodERpZmYsIDIpKSk7Ci0g
ICAgfQotCi0gICAgLy8gSWdub3JlcyB0aGUgcGFkZGluZ3MgZm9yIHRoZSBpbm5lciBzcGluIGJ1
dHRvbi4KLSAgICBpZiAoUmVuZGVyQm94KiBpbm5lclNwaW5Cb3ggPSBpbm5lclNwaW5CdXR0b25F
bGVtZW50KCkgPyBpbm5lclNwaW5CdXR0b25FbGVtZW50KCktPnJlbmRlckJveCgpIDogMCkgewot
ICAgICAgICBSZW5kZXJCb3gqIHBhcmVudEJveCA9IGlubmVyU3BpbkJveC0+cGFyZW50Qm94KCk7
Ci0gICAgICAgIGlmIChjb250YWluZXJSZW5kZXJlciAmJiAhY29udGFpbmVyUmVuZGVyZXItPnN0
eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKLSAgICAgICAgICAgIGlubmVyU3BpbkJv
eC0+c2V0TG9jYXRpb24oTGF5b3V0UG9pbnQoLXBhZGRpbmdMZWZ0KCksIC1wYWRkaW5nVG9wKCkp
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgaW5uZXJTcGluQm94LT5zZXRMb2NhdGlvbihM
YXlvdXRQb2ludChwYXJlbnRCb3gtPndpZHRoKCkgLSBpbm5lclNwaW5Cb3gtPndpZHRoKCkgKyBw
YWRkaW5nUmlnaHQoKSwgLXBhZGRpbmdUb3AoKSkpOwotICAgICAgICBpbm5lclNwaW5Cb3gtPnNl
dEhlaWdodChoZWlnaHQoKSAtIGJvcmRlclRvcCgpIC0gYm9yZGVyQm90dG9tKCkpOwotICAgIH0K
LQotICAgIEhUTUxFbGVtZW50KiBwbGFjZWhvbGRlckVsZW1lbnQgPSBpbnB1dEVsZW1lbnQoKS0+
cGxhY2Vob2xkZXJFbGVtZW50KCk7Ci0gICAgaWYgKFJlbmRlckJveCogcGxhY2Vob2xkZXJCb3gg
PSBwbGFjZWhvbGRlckVsZW1lbnQgPyBwbGFjZWhvbGRlckVsZW1lbnQtPnJlbmRlckJveCgpIDog
MCkgewotICAgICAgICBwbGFjZWhvbGRlckJveC0+c3R5bGUoKS0+c2V0V2lkdGgoTGVuZ3RoKGlu
bmVyVGV4dFJlbmRlcmVyLT53aWR0aCgpIC0gcGxhY2Vob2xkZXJCb3gtPmJvcmRlckFuZFBhZGRp
bmdXaWR0aCgpLCBGaXhlZCkpOwotICAgICAgICBwbGFjZWhvbGRlckJveC0+c3R5bGUoKS0+c2V0
SGVpZ2h0KExlbmd0aChpbm5lclRleHRSZW5kZXJlci0+aGVpZ2h0KCkgLSBwbGFjZWhvbGRlckJv
eC0+Ym9yZGVyQW5kUGFkZGluZ0hlaWdodCgpLCBGaXhlZCkpOwotICAgICAgICBib29sIHBsYWNl
aG9sZGVyQm94SGFkTGF5b3V0ID0gcGxhY2Vob2xkZXJCb3gtPmV2ZXJIYWRMYXlvdXQoKTsKLSAg
ICAgICAgcGxhY2Vob2xkZXJCb3gtPmxheW91dElmTmVlZGVkKCk7Ci0gICAgICAgIExheW91dFBv
aW50IHRleHRPZmZzZXQgPSBpbm5lclRleHRSZW5kZXJlci0+bG9jYXRpb24oKTsKLSAgICAgICAg
aWYgKGlubmVyQmxvY2tFbGVtZW50KCkgJiYgaW5uZXJCbG9ja0VsZW1lbnQoKS0+cmVuZGVyQm94
KCkpCi0gICAgICAgICAgICB0ZXh0T2Zmc2V0ICs9IHRvTGF5b3V0U2l6ZShpbm5lckJsb2NrRWxl
bWVudCgpLT5yZW5kZXJCb3goKS0+bG9jYXRpb24oKSk7Ci0gICAgICAgIGlmIChjb250YWluZXJS
ZW5kZXJlcikKLSAgICAgICAgICAgIHRleHRPZmZzZXQgKz0gdG9MYXlvdXRTaXplKGNvbnRhaW5l
clJlbmRlcmVyLT5sb2NhdGlvbigpKTsKLSAgICAgICAgcGxhY2Vob2xkZXJCb3gtPnNldExvY2F0
aW9uKHRleHRPZmZzZXQpOwotCi0gICAgICAgIGlmICghcGxhY2Vob2xkZXJCb3hIYWRMYXlvdXQg
JiYgcGxhY2Vob2xkZXJCb3gtPmNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpKSB7Ci0gICAg
ICAgICAgICAvLyBUaGlzIGFzc3VtZXMgYSBzaGFkb3cgdHJlZSB3aXRob3V0IGZsb2F0cy4gSWYg
ZmxvYXRzIGFyZSBhZGRlZCwgdGhlCi0gICAgICAgICAgICAvLyBsb2dpYyBzaG91bGQgYmUgc2hh
cmVkIHdpdGggUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGQuCi0gICAgICAgICAgICBwbGFj
ZWhvbGRlckJveC0+cmVwYWludCgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1ib29sIFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
IHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50
SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVz
dEFjdGlvbiBoaXRUZXN0QWN0aW9uKQotewotICAgIGlmICghUmVuZGVyVGV4dENvbnRyb2w6Om5v
ZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRP
ZmZzZXQsIGhpdFRlc3RBY3Rpb24pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBT
YXkgdGhhdCB3ZSBoaXQgdGhlIGlubmVyIHRleHQgZWxlbWVudCBpZgotICAgIC8vICAtIHdlIGhp
dCBhIG5vZGUgaW5zaWRlIHRoZSBpbm5lciB0ZXh0IGVsZW1lbnQsCi0gICAgLy8gIC0gd2UgaGl0
IHRoZSA8aW5wdXQ+IGVsZW1lbnQgKGUuZy4gd2UncmUgb3ZlciB0aGUgYm9yZGVyIG9yIHBhZGRp
bmcpLCBvcgotICAgIC8vICAtIHdlIGhpdCByZWdpb25zIG5vdCBpbiBhbnkgZGVjb3JhdGlvbiBi
dXR0b25zLgotICAgIEhUTUxFbGVtZW50KiBjb250YWluZXIgPSBjb250YWluZXJFbGVtZW50KCk7
Ci0gICAgaWYgKHJlc3VsdC5pbm5lck5vZGUoKS0+aXNEZXNjZW5kYW50T2YoaW5uZXJUZXh0RWxl
bWVudCgpKSB8fCByZXN1bHQuaW5uZXJOb2RlKCkgPT0gbm9kZSgpIHx8IChjb250YWluZXIgJiYg
Y29udGFpbmVyID09IHJlc3VsdC5pbm5lck5vZGUoKSkpIHsKLSAgICAgICAgTGF5b3V0UG9pbnQg
cG9pbnRJblBhcmVudCA9IHBvaW50SW5Db250YWluZXI7Ci0gICAgICAgIGlmIChjb250YWluZXIg
JiYgaW5uZXJCbG9ja0VsZW1lbnQoKSkgewotICAgICAgICAgICAgaWYgKGlubmVyQmxvY2tFbGVt
ZW50KCktPnJlbmRlckJveCgpKQotICAgICAgICAgICAgICAgIHBvaW50SW5QYXJlbnQgLT0gdG9M
YXlvdXRTaXplKGlubmVyQmxvY2tFbGVtZW50KCktPnJlbmRlckJveCgpLT5sb2NhdGlvbigpKTsK
LSAgICAgICAgICAgIGlmIChjb250YWluZXItPnJlbmRlckJveCgpKQotICAgICAgICAgICAgICAg
IHBvaW50SW5QYXJlbnQgLT0gdG9MYXlvdXRTaXplKGNvbnRhaW5lci0+cmVuZGVyQm94KCktPmxv
Y2F0aW9uKCkpOwotICAgICAgICB9Ci0gICAgICAgIGhpdElubmVyVGV4dEVsZW1lbnQocmVzdWx0
LCBwb2ludEluUGFyZW50LCBhY2N1bXVsYXRlZE9mZnNldCk7Ci0gICAgfQotICAgIHJldHVybiB0
cnVlOwotfQotCi12b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c3R5bGVEaWRDaGFu
Z2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKLXsK
LSAgICBtX2Rlc2lyZWRJbm5lclRleHRIZWlnaHQgPSAtMTsKLSAgICBSZW5kZXJUZXh0Q29udHJv
bDo6c3R5bGVEaWRDaGFuZ2UoZGlmZiwgb2xkU3R5bGUpOwotCi0gICAgLy8gV2UgbWF5IGhhdmUg
c2V0IHRoZSB3aWR0aCBhbmQgdGhlIGhlaWdodCBpbiB0aGUgb2xkIHN0eWxlIGluIGxheW91dCgp
LgotICAgIC8vIFJlc2V0IHRoZW0gbm93IHRvIGF2b2lkIGdldHRpbmcgYSBzcHVyaW91cyBsYXlv
dXQgaGludC4KLSAgICBIVE1MRWxlbWVudCogaW5uZXJCbG9jayA9IGlubmVyQmxvY2tFbGVtZW50
KCk7Ci0gICAgaWYgKFJlbmRlck9iamVjdCogaW5uZXJCbG9ja1JlbmRlcmVyID0gaW5uZXJCbG9j
ayA/IGlubmVyQmxvY2stPnJlbmRlcmVyKCkgOiAwKSB7Ci0gICAgICAgIGlubmVyQmxvY2tSZW5k
ZXJlci0+c3R5bGUoKS0+c2V0SGVpZ2h0KExlbmd0aCgpKTsKLSAgICAgICAgaW5uZXJCbG9ja1Jl
bmRlcmVyLT5zdHlsZSgpLT5zZXRXaWR0aChMZW5ndGgoKSk7Ci0gICAgfQotICAgIEhUTUxFbGVt
ZW50KiBjb250YWluZXIgPSBjb250YWluZXJFbGVtZW50KCk7Ci0gICAgaWYgKFJlbmRlck9iamVj
dCogY29udGFpbmVyUmVuZGVyZXIgPSBjb250YWluZXIgPyBjb250YWluZXItPnJlbmRlcmVyKCkg
OiAwKSB7Ci0gICAgICAgIGNvbnRhaW5lclJlbmRlcmVyLT5zdHlsZSgpLT5zZXRIZWlnaHQoTGVu
Z3RoKCkpOwotICAgICAgICBjb250YWluZXJSZW5kZXJlci0+c3R5bGUoKS0+c2V0V2lkdGgoTGVu
Z3RoKCkpOwotICAgIH0KLSAgICBpZiAoSFRNTEVsZW1lbnQqIHBsYWNlaG9sZGVyID0gaW5wdXRF
bGVtZW50KCktPnBsYWNlaG9sZGVyRWxlbWVudCgpKQotICAgICAgICBwbGFjZWhvbGRlci0+c2V0
SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRleHRPdmVyZmxvdywgdGV4dFNob3VsZEJl
VHJ1bmNhdGVkKCkgPyBDU1NWYWx1ZUVsbGlwc2lzIDogQ1NTVmFsdWVDbGlwKTsKLSAgICBzZXRI
YXNPdmVyZmxvd0NsaXAoZmFsc2UpOwotfQotCi12b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZTo6Y2Fwc0xvY2tTdGF0ZU1heUhhdmVDaGFuZ2VkKCkKLXsKLSAgICBpZiAoIW5vZGUoKSB8
fCAhZG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gT25seSBkcmF3IHRoZSBj
YXBzIGxvY2sgaW5kaWNhdG9yIGlmIHRoZXNlIHRoaW5ncyBhcmUgdHJ1ZToKLSAgICAvLyAxKSBU
aGUgZmllbGQgaXMgYSBwYXNzd29yZCBmaWVsZAotICAgIC8vIDIpIFRoZSBmcmFtZSBpcyBhY3Rp
dmUKLSAgICAvLyAzKSBUaGUgZWxlbWVudCBpcyBmb2N1c2VkCi0gICAgLy8gNCkgVGhlIGNhcHMg
bG9jayBpcyBvbgotICAgIGJvb2wgc2hvdWxkRHJhd0NhcHNMb2NrSW5kaWNhdG9yID0gZmFsc2U7
Ci0KLSAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkKLSAgICAgICAg
c2hvdWxkRHJhd0NhcHNMb2NrSW5kaWNhdG9yID0gaW5wdXRFbGVtZW50KCktPmlzUGFzc3dvcmRG
aWVsZCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGZyYW1lLT5z
ZWxlY3Rpb24oKS0+aXNGb2N1c2VkQW5kQWN0aXZlKCkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJiYgZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSA9PSBub2RlKCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgUGxhdGZvcm1LZXlib2FyZEV2
ZW50OjpjdXJyZW50Q2Fwc0xvY2tTdGF0ZSgpOwotCi0gICAgaWYgKHNob3VsZERyYXdDYXBzTG9j
a0luZGljYXRvciAhPSBtX3Nob3VsZERyYXdDYXBzTG9ja0luZGljYXRvcikgewotICAgICAgICBt
X3Nob3VsZERyYXdDYXBzTG9ja0luZGljYXRvciA9IHNob3VsZERyYXdDYXBzTG9ja0luZGljYXRv
cjsKLSAgICAgICAgcmVwYWludCgpOwotICAgIH0KLX0KLQotYm9vbCBSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6Omhhc0NvbnRyb2xDbGlwKCkgY29uc3QKLXsKLSAgICAvLyBBcHBseSBjb250
cm9sIGNsaXAgZm9yIHRleHQgZmllbGRzIHdpdGggZGVjb3JhdGlvbnMuCi0gICAgcmV0dXJuICEh
Y29udGFpbmVyRWxlbWVudCgpOwotfQotCi1MYXlvdXRSZWN0IFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6Y29udHJvbENsaXBSZWN0KGNvbnN0IExheW91dFBvaW50JiBhZGRpdGlvbmFsT2Zm
c2V0KSBjb25zdAotewotICAgIEFTU0VSVChoYXNDb250cm9sQ2xpcCgpKTsKLSAgICBMYXlvdXRS
ZWN0IGNsaXBSZWN0ID0gdW5pb25SZWN0KGNvbnRlbnRCb3hSZWN0KCksIGNvbnRhaW5lckVsZW1l
bnQoKS0+cmVuZGVyQm94KCktPmZyYW1lUmVjdCgpKTsKLSAgICBjbGlwUmVjdC5tb3ZlQnkoYWRk
aXRpb25hbE9mZnNldCk7Ci0gICAgcmV0dXJuIGNsaXBSZWN0OwotfQotCi1mbG9hdCBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OmdldEF2Z0NoYXJXaWR0aChBdG9taWNTdHJpbmcgZmFtaWx5
KQotewotICAgIC8vIFNpbmNlIEx1Y2lkYSBHcmFuZGUgaXMgdGhlIGRlZmF1bHQgZm9udCwgd2Ug
d2FudCB0aGlzIHRvIG1hdGNoIHRoZSB3aWR0aAotICAgIC8vIG9mIE1TIFNoZWxsIERsZywgdGhl
IGRlZmF1bHQgZm9udCBmb3IgdGV4dGFyZWFzIGluIEZpcmVmb3gsIFNhZmFyaSBXaW4gYW5kCi0g
ICAgLy8gSUUgZm9yIHNvbWUgZW5jb2RpbmdzIChpbiBJRSwgdGhlIGRlZmF1bHQgZm9udCBpcyBl
bmNvZGluZyBzcGVjaWZpYykuCi0gICAgLy8gOTAxIGlzIHRoZSBhdmdDaGFyV2lkdGggdmFsdWUg
aW4gdGhlIE9TLzIgdGFibGUgZm9yIE1TIFNoZWxsIERsZy4KLSAgICBpZiAoZmFtaWx5ID09IEF0
b21pY1N0cmluZygiTHVjaWRhIEdyYW5kZSIpKQotICAgICAgICByZXR1cm4gc2NhbGVFbVRvVW5p
dHMoOTAxKTsKLQotICAgIHJldHVybiBSZW5kZXJUZXh0Q29udHJvbDo6Z2V0QXZnQ2hhcldpZHRo
KGZhbWlseSk7Ci19Ci0KLUxheW91dFVuaXQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpw
cmVmZXJyZWRDb250ZW50V2lkdGgoZmxvYXQgY2hhcldpZHRoKSBjb25zdAotewotICAgIGludCBm
YWN0b3I7Ci0gICAgYm9vbCBpbmNsdWRlc0RlY29yYXRpb24gPSBpbnB1dEVsZW1lbnQoKS0+c2l6
ZVNob3VsZEluY2x1ZGVEZWNvcmF0aW9uKGZhY3Rvcik7Ci0gICAgaWYgKGZhY3RvciA8PSAwKQot
ICAgICAgICBmYWN0b3IgPSAyMDsKLQotICAgIExheW91dFVuaXQgcmVzdWx0ID0gc3RhdGljX2Nh
c3Q8TGF5b3V0VW5pdD4oY2VpbGVkTGF5b3V0VW5pdChjaGFyV2lkdGggKiBmYWN0b3IpKTsKLQot
ICAgIGZsb2F0IG1heENoYXJXaWR0aCA9IDAuZjsKLSAgICBBdG9taWNTdHJpbmcgZmFtaWx5ID0g
c3R5bGUoKS0+Zm9udCgpLmZhbWlseSgpLmZhbWlseSgpOwotICAgIC8vIFNpbmNlIEx1Y2lkYSBH
cmFuZGUgaXMgdGhlIGRlZmF1bHQgZm9udCwgd2Ugd2FudCB0aGlzIHRvIG1hdGNoIHRoZSB3aWR0
aAotICAgIC8vIG9mIE1TIFNoZWxsIERsZywgdGhlIGRlZmF1bHQgZm9udCBmb3IgdGV4dGFyZWFz
IGluIEZpcmVmb3gsIFNhZmFyaSBXaW4gYW5kCi0gICAgLy8gSUUgZm9yIHNvbWUgZW5jb2Rpbmdz
IChpbiBJRSwgdGhlIGRlZmF1bHQgZm9udCBpcyBlbmNvZGluZyBzcGVjaWZpYykuCi0gICAgLy8g
NDAyNyBpcyB0aGUgKHhNYXggLSB4TWluKSB2YWx1ZSBpbiB0aGUgImhlYWQiIGZvbnQgdGFibGUg
Zm9yIE1TIFNoZWxsIERsZy4KLSAgICBpZiAoZmFtaWx5ID09IEF0b21pY1N0cmluZygiTHVjaWRh
IEdyYW5kZSIpKQotICAgICAgICBtYXhDaGFyV2lkdGggPSBzY2FsZUVtVG9Vbml0cyg0MDI3KTsK
LSAgICBlbHNlIGlmIChoYXNWYWxpZEF2Z0NoYXJXaWR0aChmYW1pbHkpKQotICAgICAgICBtYXhD
aGFyV2lkdGggPSByb3VuZGYoc3R5bGUoKS0+Zm9udCgpLnByaW1hcnlGb250KCktPm1heENoYXJX
aWR0aCgpKTsKLQotICAgIC8vIEZvciB0ZXh0IGlucHV0cywgSUUgYWRkcyBzb21lIGV4dHJhIHdp
ZHRoLgotICAgIGlmIChtYXhDaGFyV2lkdGggPiAwLmYpCi0gICAgICAgIHJlc3VsdCArPSBtYXhD
aGFyV2lkdGggLSBjaGFyV2lkdGg7Ci0KLSAgICBpZiAoaW5jbHVkZXNEZWNvcmF0aW9uKSB7Ci0g
ICAgICAgIEhUTUxFbGVtZW50KiBzcGluQnV0dG9uID0gaW5uZXJTcGluQnV0dG9uRWxlbWVudCgp
OwotICAgICAgICBpZiAoUmVuZGVyQm94KiBzcGluUmVuZGVyZXIgPSBzcGluQnV0dG9uID8gc3Bp
bkJ1dHRvbi0+cmVuZGVyQm94KCkgOiAwKSB7Ci0gICAgICAgICAgICByZXN1bHQgKz0gc3BpblJl
bmRlcmVyLT5ib3JkZXJMZWZ0KCkgKyBzcGluUmVuZGVyZXItPmJvcmRlclJpZ2h0KCkgKwotICAg
ICAgICAgICAgICAgICAgc3BpblJlbmRlcmVyLT5wYWRkaW5nTGVmdCgpICsgc3BpblJlbmRlcmVy
LT5wYWRkaW5nUmlnaHQoKTsKLSAgICAgICAgICAgIC8vIFNpbmNlIHRoZSB3aWR0aCBvZiBzcGlu
UmVuZGVyZXIgaXMgbm90IGNhbGN1bGF0ZWQgeWV0LCBzcGluUmVuZGVyZXItPndpZHRoKCkgcmV0
dXJucyAwLgotICAgICAgICAgICAgLy8gU28gY29tcHV0ZWRTdHlsZSgpLT53aWR0aCgpIGlzIHVz
ZWQgaW5zdGVhZC4KLSAgICAgICAgICAgIHJlc3VsdCArPSBzcGluQnV0dG9uLT5jb21wdXRlZFN0
eWxlKCktPndpZHRoKCkudmFsdWUoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLUxheW91dFVuaXQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjb21w
dXRlQ29udHJvbEhlaWdodChMYXlvdXRVbml0IGxpbmVIZWlnaHQsIExheW91dFVuaXQgbm9uQ29u
dGVudEhlaWdodCkgY29uc3QKLXsKLSAgICBIVE1MRWxlbWVudCogcmVzdWx0c0J1dHRvbiA9IHJl
c3VsdHNCdXR0b25FbGVtZW50KCk7Ci0gICAgaWYgKFJlbmRlckJveCogcmVzdWx0c1JlbmRlcmVy
ID0gcmVzdWx0c0J1dHRvbiA/IHJlc3VsdHNCdXR0b24tPnJlbmRlckJveCgpIDogMCkgewotICAg
ICAgICByZXN1bHRzUmVuZGVyZXItPmNvbXB1dGVMb2dpY2FsSGVpZ2h0KCk7Ci0gICAgICAgIG5v
bkNvbnRlbnRIZWlnaHQgPSBtYXgobm9uQ29udGVudEhlaWdodCwgcmVzdWx0c1JlbmRlcmVyLT5i
b3JkZXJBbmRQYWRkaW5nSGVpZ2h0KCkgKyByZXN1bHRzUmVuZGVyZXItPm1hcmdpbkhlaWdodCgp
KTsKLSAgICAgICAgbGluZUhlaWdodCA9IG1heChsaW5lSGVpZ2h0LCByZXN1bHRzUmVuZGVyZXIt
PmhlaWdodCgpKTsKLSAgICB9Ci0gICAgSFRNTEVsZW1lbnQqIGNhbmNlbEJ1dHRvbiA9IGNhbmNl
bEJ1dHRvbkVsZW1lbnQoKTsKLSAgICBpZiAoUmVuZGVyQm94KiBjYW5jZWxSZW5kZXJlciA9IGNh
bmNlbEJ1dHRvbiA/IGNhbmNlbEJ1dHRvbi0+cmVuZGVyQm94KCkgOiAwKSB7Ci0gICAgICAgIGNh
bmNlbFJlbmRlcmVyLT5jb21wdXRlTG9naWNhbEhlaWdodCgpOwotICAgICAgICBub25Db250ZW50
SGVpZ2h0ID0gbWF4KG5vbkNvbnRlbnRIZWlnaHQsIGNhbmNlbFJlbmRlcmVyLT5ib3JkZXJBbmRQ
YWRkaW5nSGVpZ2h0KCkgKyBjYW5jZWxSZW5kZXJlci0+bWFyZ2luSGVpZ2h0KCkpOwotICAgICAg
ICBsaW5lSGVpZ2h0ID0gbWF4KGxpbmVIZWlnaHQsIGNhbmNlbFJlbmRlcmVyLT5oZWlnaHQoKSk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIGxpbmVIZWlnaHQgKyBub25Db250ZW50SGVpZ2h0OwotfQot
Ci12b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6dXBkYXRlRnJvbUVsZW1lbnQoKQot
ewotICAgIFJlbmRlclRleHRDb250cm9sOjp1cGRhdGVGcm9tRWxlbWVudCgpOwotCi0gICAgaWYg
KGNhbmNlbEJ1dHRvbkVsZW1lbnQoKSkKLSAgICAgICAgdXBkYXRlQ2FuY2VsQnV0dG9uVmlzaWJp
bGl0eSgpOworICAgIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6dXBkYXRlRnJvbUVsZW1l
bnQoKTsKIAogICAgIGlmIChtX3NlYXJjaFBvcHVwSXNWaXNpYmxlKQogICAgICAgICBtX3NlYXJj
aFBvcHVwLT5wb3B1cE1lbnUoKS0+dXBkYXRlRnJvbUVsZW1lbnQoKTsKIH0KIAotUGFzc1JlZlB0
cjxSZW5kZXJTdHlsZT4gUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjcmVhdGVJbm5lclRl
eHRTdHlsZShjb25zdCBSZW5kZXJTdHlsZSogc3RhcnRTdHlsZSkgY29uc3QKLXsKLSAgICBSZWZQ
dHI8UmVuZGVyU3R5bGU+IHRleHRCbG9ja1N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOyAg
IAotICAgIHRleHRCbG9ja1N0eWxlLT5pbmhlcml0RnJvbShzdGFydFN0eWxlKTsKLSAgICBhZGp1
c3RJbm5lclRleHRTdHlsZShzdGFydFN0eWxlLCB0ZXh0QmxvY2tTdHlsZS5nZXQoKSk7Ci0KLSAg
ICB0ZXh0QmxvY2tTdHlsZS0+c2V0V2hpdGVTcGFjZShQUkUpOwotICAgIHRleHRCbG9ja1N0eWxl
LT5zZXRXb3JkV3JhcChOb3JtYWxXb3JkV3JhcCk7Ci0gICAgdGV4dEJsb2NrU3R5bGUtPnNldE92
ZXJmbG93WChPSElEREVOKTsKLSAgICB0ZXh0QmxvY2tTdHlsZS0+c2V0T3ZlcmZsb3dZKE9ISURE
RU4pOwotICAgIHRleHRCbG9ja1N0eWxlLT5zZXRUZXh0T3ZlcmZsb3codGV4dFNob3VsZEJlVHJ1
bmNhdGVkKCkgPyBUZXh0T3ZlcmZsb3dFbGxpcHNpcyA6IFRleHRPdmVyZmxvd0NsaXApOwotCi0g
ICAgaWYgKG1fZGVzaXJlZElubmVyVGV4dEhlaWdodCA+PSAwKQotICAgICAgICB0ZXh0QmxvY2tT
dHlsZS0+c2V0SGVpZ2h0KExlbmd0aChtX2Rlc2lyZWRJbm5lclRleHRIZWlnaHQsIEZpeGVkKSk7
Ci0gICAgLy8gRG8gbm90IGFsbG93IGxpbmUtaGVpZ2h0IHRvIGJlIHNtYWxsZXIgdGhhbiBvdXIg
ZGVmYXVsdC4KLSAgICBpZiAodGV4dEJsb2NrU3R5bGUtPmZvbnRNZXRyaWNzKCkubGluZVNwYWNp
bmcoKSA+IGxpbmVIZWlnaHQodHJ1ZSwgSG9yaXpvbnRhbExpbmUsIFBvc2l0aW9uT2ZJbnRlcmlv
ckxpbmVCb3hlcykpCi0gICAgICAgIHRleHRCbG9ja1N0eWxlLT5zZXRMaW5lSGVpZ2h0KExlbmd0
aCgtMTAwLjBmLCBQZXJjZW50KSk7Ci0KLSAgICB0ZXh0QmxvY2tTdHlsZS0+c2V0RGlzcGxheShC
TE9DSyk7Ci0KLSAgICByZXR1cm4gdGV4dEJsb2NrU3R5bGUucmVsZWFzZSgpOwotfQotCi1QYXNz
UmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZUlu
bmVyQmxvY2tTdHlsZShjb25zdCBSZW5kZXJTdHlsZSogc3RhcnRTdHlsZSkgY29uc3QKLXsKLSAg
ICBSZWZQdHI8UmVuZGVyU3R5bGU+IGlubmVyQmxvY2tTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVh
dGUoKTsKLSAgICBpbm5lckJsb2NrU3R5bGUtPmluaGVyaXRGcm9tKHN0YXJ0U3R5bGUpOwotCi0g
ICAgaW5uZXJCbG9ja1N0eWxlLT5zZXRCb3hGbGV4KDEpOwotICAgIGlubmVyQmxvY2tTdHlsZS0+
c2V0RGlzcGxheShCTE9DSyk7Ci0gICAgaW5uZXJCbG9ja1N0eWxlLT5zZXREaXJlY3Rpb24oTFRS
KTsKLQotICAgIC8vIFdlIGRvbid0IHdhbnQgdGhlIHNoYWRvdyBkb20gdG8gYmUgZWRpdGFibGUs
IHNvIHdlIHNldCB0aGlzIGJsb2NrIHRvIHJlYWQtb25seSBpbiBjYXNlIHRoZSBpbnB1dCBpdHNl
bGYgaXMgZWRpdGFibGUuCi0gICAgaW5uZXJCbG9ja1N0eWxlLT5zZXRVc2VyTW9kaWZ5KFJFQURf
T05MWSk7Ci0KLSAgICByZXR1cm4gaW5uZXJCbG9ja1N0eWxlLnJlbGVhc2UoKTsKLX0KLQotdm9p
ZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnVwZGF0ZUNhbmNlbEJ1dHRvblZpc2liaWxp
dHkoKSBjb25zdAotewotICAgIFJlbmRlck9iamVjdCogY2FuY2VsQnV0dG9uUmVuZGVyZXIgPSBj
YW5jZWxCdXR0b25FbGVtZW50KCktPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFjYW5jZWxCdXR0b25S
ZW5kZXJlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgUmVuZGVyU3R5bGUqIGN1clN0
eWxlID0gY2FuY2VsQnV0dG9uUmVuZGVyZXItPnN0eWxlKCk7Ci0gICAgRVZpc2liaWxpdHkgYnV0
dG9uVmlzaWJpbGl0eSA9IHZpc2liaWxpdHlGb3JDYW5jZWxCdXR0b24oKTsKLSAgICBpZiAoY3Vy
U3R5bGUtPnZpc2liaWxpdHkoKSA9PSBidXR0b25WaXNpYmlsaXR5KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGNhbmNlbEJ1dHRvblN0eWxlID0gUmVuZGVyU3R5
bGU6OmNsb25lKGN1clN0eWxlKTsKLSAgICBjYW5jZWxCdXR0b25TdHlsZS0+c2V0VmlzaWJpbGl0
eShidXR0b25WaXNpYmlsaXR5KTsKLSAgICBjYW5jZWxCdXR0b25SZW5kZXJlci0+c2V0U3R5bGUo
Y2FuY2VsQnV0dG9uU3R5bGUpOwotfQotCi1FVmlzaWJpbGl0eSBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6OnZpc2liaWxpdHlGb3JDYW5jZWxCdXR0b24oKSBjb25zdAotewotICAgIHJldHVy
biAoc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IEhJRERFTiB8fCBpbnB1dEVsZW1lbnQoKS0+dmFs
dWUoKS5pc0VtcHR5KCkpID8gSElEREVOIDogVklTSUJMRTsKLX0KLQotYm9vbCBSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmU6OnRleHRTaG91bGRCZVRydW5jYXRlZCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkgIT0gbm9kZSgpCi0gICAgICAgICYmIHN0
eWxlKCktPnRleHRPdmVyZmxvdygpID09IFRleHRPdmVyZmxvd0VsbGlwc2lzOwotfQotCi1jb25z
dCBBdG9taWNTdHJpbmcmIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6YXV0b3NhdmVOYW1l
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSktPmdl
dEF0dHJpYnV0ZShhdXRvc2F2ZUF0dHIpOwotfQotCiAvLyBQb3B1cE1lbnVDbGllbnQgbWV0aG9k
cwotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnZhbHVlQ2hhbmdlZCh1bnNpZ25l
ZCBsaXN0SW5kZXgsIGJvb2wgZmlyZUV2ZW50cykKK3ZvaWQgUmVuZGVyU2VhcmNoRmllbGQ6OnZh
bHVlQ2hhbmdlZCh1bnNpZ25lZCBsaXN0SW5kZXgsIGJvb2wgZmlyZUV2ZW50cykKIHsKICAgICBB
U1NFUlQoc3RhdGljX2Nhc3Q8aW50PihsaXN0SW5kZXgpIDwgbGlzdFNpemUoKSk7CiAgICAgSFRN
TElucHV0RWxlbWVudCogaW5wdXQgPSBpbnB1dEVsZW1lbnQoKTsKQEAgLTU1MSw3ICsxNjcsNyBA
QCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6dmFsdWVDaGFuZ2VkKHVuc2lnbmVk
IGxpc3RJbmRleCwgYm9vbCBmaXJlRXZlbgogICAgIH0KIH0KIAotU3RyaW5nIFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6aXRlbVRleHQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAorU3Ry
aW5nIFJlbmRlclNlYXJjaEZpZWxkOjppdGVtVGV4dCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0
CiB7CiAgICAgaW50IHNpemUgPSBsaXN0U2l6ZSgpOwogICAgIGlmIChzaXplID09IDEpIHsKQEAg
LTU2Nyw0MiArMTgzLDQyIEBAIFN0cmluZyBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Oml0
ZW1UZXh0KHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKICAgICByZXR1cm4gbV9yZWNlbnRTZWFy
Y2hlc1tsaXN0SW5kZXggLSAxXTsKIH0KIAotU3RyaW5nIFJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZTo6aXRlbUxhYmVsKHVuc2lnbmVkKSBjb25zdAorU3RyaW5nIFJlbmRlclNlYXJjaEZpZWxk
OjppdGVtTGFiZWwodW5zaWduZWQpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQog
Ci1TdHJpbmcgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppdGVtSWNvbih1bnNpZ25lZCkg
Y29uc3QKK1N0cmluZyBSZW5kZXJTZWFyY2hGaWVsZDo6aXRlbUljb24odW5zaWduZWQpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi1ib29sIFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6aXRlbUlzRW5hYmxlZCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0Citib29sIFJl
bmRlclNlYXJjaEZpZWxkOjppdGVtSXNFbmFibGVkKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QK
IHsKICAgICAgaWYgKCFsaXN0SW5kZXggfHwgaXRlbUlzU2VwYXJhdG9yKGxpc3RJbmRleCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotUG9wdXBNZW51U3R5
bGUgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppdGVtU3R5bGUodW5zaWduZWQpIGNvbnN0
CitQb3B1cE1lbnVTdHlsZSBSZW5kZXJTZWFyY2hGaWVsZDo6aXRlbVN0eWxlKHVuc2lnbmVkKSBj
b25zdAogewogICAgIHJldHVybiBtZW51U3R5bGUoKTsKIH0KIAotUG9wdXBNZW51U3R5bGUgUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjptZW51U3R5bGUoKSBjb25zdAorUG9wdXBNZW51U3R5
bGUgUmVuZGVyU2VhcmNoRmllbGQ6Om1lbnVTdHlsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFBv
cHVwTWVudVN0eWxlKHN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNv
bG9yKSwgc3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3Vu
ZENvbG9yKSwgc3R5bGUoKS0+Zm9udCgpLCBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJM
RSwKICAgICAgICAgc3R5bGUoKS0+ZGlzcGxheSgpID09IE5PTkUsIHN0eWxlKCktPnRleHRJbmRl
bnQoKSwgc3R5bGUoKS0+ZGlyZWN0aW9uKCksIGlzT3ZlcnJpZGUoc3R5bGUoKS0+dW5pY29kZUJp
ZGkoKSkpOwogfQogCi1pbnQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjbGllbnRJbnNl
dExlZnQoKSBjb25zdAoraW50IFJlbmRlclNlYXJjaEZpZWxkOjpjbGllbnRJbnNldExlZnQoKSBj
b25zdAogewogICAgIC8vIEluc2V0IHRoZSBtZW51IGJ5IHRoZSByYWRpdXMgb2YgdGhlIGNhcCBv
biB0aGUgbGVmdCBzbyB0aGF0CiAgICAgLy8gaXQgb25seSBydW5zIGFsb25nIHRoZSBzdHJhaWdo
dCBwYXJ0IG9mIHRoZSBiZXplbC4KICAgICByZXR1cm4gaGVpZ2h0KCkgLyAyOwogfQogCi1pbnQg
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjbGllbnRJbnNldFJpZ2h0KCkgY29uc3QKK2lu
dCBSZW5kZXJTZWFyY2hGaWVsZDo6Y2xpZW50SW5zZXRSaWdodCgpIGNvbnN0CiB7CiAgICAgLy8g
SW5zZXQgdGhlIG1lbnUgYnkgdGhlIHJhZGl1cyBvZiB0aGUgY2FwIG9uIHRoZSByaWdodCBzbyB0
aGF0CiAgICAgLy8gaXQgb25seSBydW5zIGFsb25nIHRoZSBzdHJhaWdodCBwYXJ0IG9mIHRoZSBi
ZXplbCAodW5sZXNzIGl0IG5lZWRzCkBAIC02MTAsNyArMjI2LDcgQEAgaW50IFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6Y2xpZW50SW5zZXRSaWdodCgpIGNvbnN0CiAgICAgcmV0dXJuIGhl
aWdodCgpIC8gMjsKIH0KIAotTGF5b3V0VW5pdCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6
OmNsaWVudFBhZGRpbmdMZWZ0KCkgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyU2VhcmNoRmllbGQ6
OmNsaWVudFBhZGRpbmdMZWZ0KCkgY29uc3QKIHsKICAgICBMYXlvdXRVbml0IHBhZGRpbmcgPSBw
YWRkaW5nTGVmdCgpOwogICAgIGlmIChSZW5kZXJCb3gqIGJveCA9IGlubmVyQmxvY2tFbGVtZW50
KCkgPyBpbm5lckJsb2NrRWxlbWVudCgpLT5yZW5kZXJCb3goKSA6IDApCkBAIC02MTgsNyArMjM0
LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNsaWVudFBhZGRp
bmdMZWZ0KCkgY29uc3QKICAgICByZXR1cm4gcGFkZGluZzsKIH0KIAotTGF5b3V0VW5pdCBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNsaWVudFBhZGRpbmdSaWdodCgpIGNvbnN0CitMYXlv
dXRVbml0IFJlbmRlclNlYXJjaEZpZWxkOjpjbGllbnRQYWRkaW5nUmlnaHQoKSBjb25zdAogewog
ICAgIExheW91dFVuaXQgcGFkZGluZyA9IHBhZGRpbmdSaWdodCgpOwogICAgIGlmIChSZW5kZXJC
b3gqIGNvbnRhaW5lckJveCA9IGNvbnRhaW5lckVsZW1lbnQoKSA/IGNvbnRhaW5lckVsZW1lbnQo
KS0+cmVuZGVyQm94KCkgOiAwKSB7CkBAIC02MjgsNyArMjQ0LDcgQEAgTGF5b3V0VW5pdCBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNsaWVudFBhZGRpbmdSaWdodCgpIGNvbnN0CiAgICAg
cmV0dXJuIHBhZGRpbmc7CiB9CiAKLWludCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Omxp
c3RTaXplKCkgY29uc3QKK2ludCBSZW5kZXJTZWFyY2hGaWVsZDo6bGlzdFNpemUoKSBjb25zdAog
ewogICAgIC8vIElmIHRoZXJlIGFyZSBubyByZWNlbnQgc2VhcmNoZXMsIHRoZW4gb3VyIG1lbnUg
d2lsbCBoYXZlIDEgIk5vIHJlY2VudCBzZWFyY2hlcyIgaXRlbS4KICAgICBpZiAoIW1fcmVjZW50
U2VhcmNoZXMuc2l6ZSgpKQpAQCAtNjM3LDExMSArMjUzLDQ5IEBAIGludCBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6Omxpc3RTaXplKCkgY29uc3QKICAgICByZXR1cm4gbV9yZWNlbnRTZWFy
Y2hlcy5zaXplKCkgKyAzOwogfQogCi1pbnQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpz
ZWxlY3RlZEluZGV4KCkgY29uc3QKK2ludCBSZW5kZXJTZWFyY2hGaWVsZDo6c2VsZWN0ZWRJbmRl
eCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIC0xOwogfQogCi12b2lkIFJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZTo6cG9wdXBEaWRIaWRlKCkKK3ZvaWQgUmVuZGVyU2VhcmNoRmllbGQ6OnBvcHVw
RGlkSGlkZSgpCiB7CiAgICAgbV9zZWFyY2hQb3B1cElzVmlzaWJsZSA9IGZhbHNlOwogfQogCi1i
b29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aXRlbUlzU2VwYXJhdG9yKHVuc2lnbmVk
IGxpc3RJbmRleCkgY29uc3QKK2Jvb2wgUmVuZGVyU2VhcmNoRmllbGQ6Oml0ZW1Jc1NlcGFyYXRv
cih1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0CiB7CiAgICAgLy8gVGhlIHNlcGFyYXRvciB3aWxs
IGJlIHRoZSBzZWNvbmQgdG8gbGFzdCBpdGVtIGluIG91ciBsaXN0LgogICAgIHJldHVybiBzdGF0
aWNfY2FzdDxpbnQ+KGxpc3RJbmRleCkgPT0gKGxpc3RTaXplKCkgLSAyKTsKIH0KIAotYm9vbCBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Oml0ZW1Jc0xhYmVsKHVuc2lnbmVkIGxpc3RJbmRl
eCkgY29uc3QKK2Jvb2wgUmVuZGVyU2VhcmNoRmllbGQ6Oml0ZW1Jc0xhYmVsKHVuc2lnbmVkIGxp
c3RJbmRleCkgY29uc3QKIHsKLSAgICByZXR1cm4gbGlzdEluZGV4ID09IDA7CisgICAgcmV0dXJu
ICFsaXN0SW5kZXg7CiB9CiAKLWJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppdGVt
SXNTZWxlY3RlZCh1bnNpZ25lZCkgY29uc3QKK2Jvb2wgUmVuZGVyU2VhcmNoRmllbGQ6Oml0ZW1J
c1NlbGVjdGVkKHVuc2lnbmVkKSBjb25zdAogewogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9p
ZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNldFRleHRGcm9tSXRlbSh1bnNpZ25lZCBs
aXN0SW5kZXgpCit2b2lkIFJlbmRlclNlYXJjaEZpZWxkOjpzZXRUZXh0RnJvbUl0ZW0odW5zaWdu
ZWQgbGlzdEluZGV4KQogewogICAgIGlucHV0RWxlbWVudCgpLT5zZXRWYWx1ZShpdGVtVGV4dChs
aXN0SW5kZXgpKTsKIH0KIAotRm9udFNlbGVjdG9yKiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmU6OmZvbnRTZWxlY3RvcigpIGNvbnN0CitGb250U2VsZWN0b3IqIFJlbmRlclNlYXJjaEZpZWxk
Ojpmb250U2VsZWN0b3IoKSBjb25zdAogewogICAgIHJldHVybiBkb2N1bWVudCgpLT5zdHlsZVJl
c29sdmVyKCktPmZvbnRTZWxlY3RvcigpOwogfQogCi1Ib3N0V2luZG93KiBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6Omhvc3RXaW5kb3coKSBjb25zdAorSG9zdFdpbmRvdyogUmVuZGVyU2Vh
cmNoRmllbGQ6Omhvc3RXaW5kb3coKSBjb25zdAogewogICAgIHJldHVybiBkb2N1bWVudCgpLT52
aWV3KCktPmhvc3RXaW5kb3coKTsKIH0KIAotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmU6OmF1dG9zY3JvbGwoKQotewotICAgIFJlbmRlckxheWVyKiBsYXllciA9IGlubmVyVGV4dEVs
ZW1lbnQoKS0+cmVuZGVyQm94KCktPmxheWVyKCk7Ci0gICAgaWYgKGxheWVyKQotICAgICAgICBs
YXllci0+YXV0b3Njcm9sbCgpOwotfQotCi1pbnQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
OjpzY3JvbGxXaWR0aCgpIGNvbnN0Ci17Ci0gICAgaWYgKGlubmVyVGV4dEVsZW1lbnQoKSkKLSAg
ICAgICAgcmV0dXJuIGlubmVyVGV4dEVsZW1lbnQoKS0+c2Nyb2xsV2lkdGgoKTsKLSAgICByZXR1
cm4gUmVuZGVyQmxvY2s6OnNjcm9sbFdpZHRoKCk7Ci19Ci0KLWludCBSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OnNjcm9sbEhlaWdodCgpIGNvbnN0Ci17Ci0gICAgaWYgKGlubmVyVGV4dEVs
ZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGlubmVyVGV4dEVsZW1lbnQoKS0+c2Nyb2xsSGVpZ2h0
KCk7Ci0gICAgcmV0dXJuIFJlbmRlckJsb2NrOjpzY3JvbGxIZWlnaHQoKTsKLX0KLQotaW50IFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2Nyb2xsTGVmdCgpIGNvbnN0Ci17Ci0gICAgaWYg
KGlubmVyVGV4dEVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGlubmVyVGV4dEVsZW1lbnQoKS0+
c2Nyb2xsTGVmdCgpOwotICAgIHJldHVybiBSZW5kZXJCbG9jazo6c2Nyb2xsTGVmdCgpOwotfQot
Ci1pbnQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzY3JvbGxUb3AoKSBjb25zdAotewot
ICAgIGlmIChpbm5lclRleHRFbGVtZW50KCkpCi0gICAgICAgIHJldHVybiBpbm5lclRleHRFbGVt
ZW50KCktPnNjcm9sbFRvcCgpOwotICAgIHJldHVybiBSZW5kZXJCbG9jazo6c2Nyb2xsVG9wKCk7
Ci19Ci0KLXZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzZXRTY3JvbGxMZWZ0KGlu
dCBuZXdMZWZ0KQotewotICAgIGlmIChpbm5lclRleHRFbGVtZW50KCkpCi0gICAgICAgIGlubmVy
VGV4dEVsZW1lbnQoKS0+c2V0U2Nyb2xsTGVmdChuZXdMZWZ0KTsKLX0KLQotdm9pZCBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNldFNjcm9sbFRvcChpbnQgbmV3VG9wKQotewotICAgIGlm
IChpbm5lclRleHRFbGVtZW50KCkpCi0gICAgICAgIGlubmVyVGV4dEVsZW1lbnQoKS0+c2V0U2Ny
b2xsVG9wKG5ld1RvcCk7Ci19Ci0KLWJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpz
Y3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVs
YXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIE5vZGUqKiBzdG9wTm9kZSkKLXsKLSAgICBSZW5kZXJM
YXllciogbGF5ZXIgPSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRlckJveCgpLT5sYXllcigpOwot
ICAgIGlmIChsYXllciAmJiBsYXllci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11
bHRpcGxpZXIpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gUmVuZGVyQmxvY2s6
OnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyLCBzdG9wTm9kZSk7Ci19
Ci0KLWJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsb2dpY2FsU2Nyb2xsKFNjcm9s
bExvZ2ljYWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0
eSwgZmxvYXQgbXVsdGlwbGllciwgTm9kZSoqIHN0b3BOb2RlKQotewotICAgIFJlbmRlckxheWVy
KiBsYXllciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVyQm94KCktPmxheWVyKCk7Ci0gICAg
aWYgKGxheWVyICYmIGxheWVyLT5zY3JvbGwobG9naWNhbFRvUGh5c2ljYWwoZGlyZWN0aW9uLCBz
dHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLT5pc0ZsaXBwZWRCbG9j
a3NXcml0aW5nTW9kZSgpKSwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICByZXR1cm4gUmVuZGVyQmxvY2s6OmxvZ2ljYWxTY3JvbGwoZGlyZWN0aW9u
LCBncmFudWxhcml0eSwgbXVsdGlwbGllciwgc3RvcE5vZGUpOwotfQogCi1QYXNzUmVmUHRyPFNj
cm9sbGJhcj4gUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjcmVhdGVTY3JvbGxiYXIoU2Ny
b2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRh
dGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUgY29udHJvbFNpemUpCitQYXNzUmVmUHRyPFNjcm9s
bGJhcj4gUmVuZGVyU2VhcmNoRmllbGQ6OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSog
c2Nyb2xsYWJsZUFyZWEsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxi
YXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkKIHsKICAgICBSZWZQdHI8U2Nyb2xsYmFyPiB3aWRn
ZXQ7CiAgICAgYm9vbCBoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSA9IHN0eWxlKCktPmhhc1BzZXVk
b1N0eWxlKFNDUk9MTEJBUik7CkBAIC03NTIsOSArMzA2LDIzIEBAIFBhc3NSZWZQdHI8U2Nyb2xs
YmFyPiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxh
YmxlQXJlCiAgICAgcmV0dXJuIHdpZGdldC5yZWxlYXNlKCk7CiB9CiAKLUhUTUxJbnB1dEVsZW1l
bnQqIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aW5wdXRFbGVtZW50KCkgY29uc3QKK0xh
eW91dFVuaXQgUmVuZGVyU2VhcmNoRmllbGQ6OmNvbXB1dGVIZWlnaHRMaW1pdCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGhlaWdodCgpOworfQorCit2b2lkIFJlbmRlclNlYXJjaEZpZWxkOjpjZW50
ZXJDb250YWluZXJJZk5lZWRlZChSZW5kZXJCb3gqIGNvbnRhaW5lclJlbmRlcmVyKSBjb25zdAog
ewotICAgIHJldHVybiBub2RlKCktPnRvSW5wdXRFbGVtZW50KCk7CisgICAgaWYgKCFjb250YWlu
ZXJSZW5kZXJlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGNvbnRhaW5lclJlbmRlcmVy
LT5oZWlnaHQoKSA8PSBjb250ZW50SGVpZ2h0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8v
IEEgcXVpcmsgZm9yIGZpbmQtaW4tcGFnZSBib3ggb24gU2FmYXJpIFdpbmRvd3MuCisgICAgLy8g
aHR0cDovL3dlYmtpdC5vcmcvYi82MzE1NworICAgIExheW91dFVuaXQgaGVpZ2h0RGlmZiA9IGNv
bnRhaW5lclJlbmRlcmVyLT5oZWlnaHQoKSAtIGNvbnRlbnRIZWlnaHQoKTsKKyAgICBjb250YWlu
ZXJSZW5kZXJlci0+c2V0WShjb250YWluZXJSZW5kZXJlci0+eSgpIC0gKGhlaWdodERpZmYgLyAy
ICsgbGF5b3V0TW9kKGhlaWdodERpZmYsIDIpKSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmgKaW5kZXggNmUyMWM4NTZjMTBmYTlmYmE0MzZj
MDZmNzQ5YzE0ZTFlMmE4MGJhNi4uMmRhNWVhZWIzY2FkMzhlOWU0YjQ5OWMwMTRmM2IyMDUwZmU4
ODU1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZp
ZWxkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmgK
QEAgLTIwLDI1ICsyMCwyMSBAQAogICoKICAqLwogCi0jaWZuZGVmIFJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZV9oCi0jZGVmaW5lIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZV9oCisjaWZu
ZGVmIFJlbmRlclNlYXJjaEZpZWxkX2gKKyNkZWZpbmUgUmVuZGVyU2VhcmNoRmllbGRfaAogCiAj
aW5jbHVkZSAiUG9wdXBNZW51Q2xpZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2wu
aCIKKyNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBIVE1MSW5wdXRFbGVtZW50OwogY2xhc3MgU2VhcmNoUG9wdXBN
ZW51OwogCi1jbGFzcyBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUgOiBwdWJsaWMgUmVuZGVy
VGV4dENvbnRyb2wsIHByaXZhdGUgUG9wdXBNZW51Q2xpZW50IHsKK2NsYXNzIFJlbmRlclNlYXJj
aEZpZWxkIDogcHVibGljIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZSwgcHJpdmF0ZSBQb3B1
cE1lbnVDbGllbnQgewogcHVibGljOgotICAgIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShO
b2RlKik7Ci0gICAgdmlydHVhbCB+UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKCk7Ci0gICAg
Ly8gRklYTUU6IE1vdmUgY3JlYXRlKlN0eWxlKCkgdG8gdGhlaXIgY2xhc3Nlcy4KLSAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IGNyZWF0ZUlubmVyVGV4dFN0eWxlKGNvbnN0IFJl
bmRlclN0eWxlKiBzdGFydFN0eWxlKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxl
PiBjcmVhdGVJbm5lckJsb2NrU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUpIGNv
bnN0OwotICAgIHZvaWQgdXBkYXRlQ2FuY2VsQnV0dG9uVmlzaWJpbGl0eSgpIGNvbnN0OworICAg
IFJlbmRlclNlYXJjaEZpZWxkKE5vZGUqKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJTZWFyY2hGaWVs
ZCgpOwogCiAgICAgdm9pZCBhZGRTZWFyY2hSZXN1bHQoKTsKICAgICB2b2lkIHN0b3BTZWFyY2hF
dmVudFRpbWVyKCk7CkBAIC00Nyw0MyArNDMsMTAgQEAgcHVibGljOgogICAgIHZvaWQgc2hvd1Bv
cHVwKCk7CiAgICAgdm9pZCBoaWRlUG9wdXAoKTsKIAotICAgIHZvaWQgY2Fwc0xvY2tTdGF0ZU1h
eUhhdmVDaGFuZ2VkKCk7Ci0KIHByaXZhdGU6Ci0gICAgdmlydHVhbCBib29sIGhhc0NvbnRyb2xD
bGlwKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBMYXlvdXRSZWN0IGNvbnRyb2xDbGlwUmVjdChjb25z
dCBMYXlvdXRQb2ludCYpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc1RleHRGaWVsZCgpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8m
LCBjb25zdCBMYXlvdXRQb2ludCYpOwotICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKLQotICAg
IHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RS
ZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0
UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKLQotICAgIHZpcnR1YWwg
dm9pZCBhdXRvc2Nyb2xsKCk7Ci0KLSAgICAvLyBTdWJjbGFzc2VkIHRvIGZvcndhcmQgdG8gb3Vy
IGlubmVyIGRpdi4KLSAgICB2aXJ0dWFsIGludCBzY3JvbGxMZWZ0KCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBpbnQgc2Nyb2xsVG9wKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgc2Nyb2xsV2lkdGgo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBzY3JvbGxIZWlnaHQoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0U2Nyb2xsTGVmdChpbnQpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxU
b3AoaW50KTsKLSAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xs
R3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIgPSAxLCBOb2RlKiogc3RvcE5vZGUgPSAwKTsK
LSAgICB2aXJ0dWFsIGJvb2wgbG9naWNhbFNjcm9sbChTY3JvbGxMb2dpY2FsRGlyZWN0aW9uLCBT
Y3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEsIE5vZGUqKiBzdG9wTm9kZSA9
IDApOwotCi0gICAgaW50IHRleHRCbG9ja1dpZHRoKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBmbG9h
dCBnZXRBdmdDaGFyV2lkdGgoQXRvbWljU3RyaW5nIGZhbWlseSk7Ci0gICAgdmlydHVhbCBMYXlv
dXRVbml0IHByZWZlcnJlZENvbnRlbnRXaWR0aChmbG9hdCBjaGFyV2lkdGgpIGNvbnN0OwotICAg
IHZpcnR1YWwgTGF5b3V0VW5pdCBjb21wdXRlQ29udHJvbEhlaWdodChMYXlvdXRVbml0IGxpbmVI
ZWlnaHQsIExheW91dFVuaXQgbm9uQ29udGVudEhlaWdodCkgY29uc3QgT1ZFUlJJREU7Ci0gICAg
Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZyb21FbGVtZW50KCk7Ci0gICAgdmlydHVhbCB2b2lk
IHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0
eWxlKTsKLQotICAgIHZpcnR1YWwgUmVuZGVyU3R5bGUqIHRleHRCYXNlU3R5bGUoKSBjb25zdDsK
LQotICAgIEVWaXNpYmlsaXR5IHZpc2liaWxpdHlGb3JDYW5jZWxCdXR0b24oKSBjb25zdDsKLSAg
ICBib29sIHRleHRTaG91bGRCZVRydW5jYXRlZCgpIGNvbnN0OwotICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgYXV0b3NhdmVOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGNlbnRlckNvbnRh
aW5lcklmTmVlZGVkKFJlbmRlckJveCopIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgTGF5
b3V0VW5pdCBjb21wdXRlSGVpZ2h0TGltaXQoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlRnJvbUVsZW1lbnQoKSBPVkVSUklERTsKIAogICAgIC8vIFBvcHVwTWVudUNs
aWVudCBtZXRob2RzCiAgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZCh1bnNpZ25lZCBsaXN0
SW5kZXgsIGJvb2wgZmlyZUV2ZW50cyA9IHRydWUpIE9WRVJSSURFOwpAQCAtMTE0LDQyICs3Nywx
OSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgSG9zdFdpbmRvdyogaG9zdFdpbmRvdygpIGNvbnN0
IE9WRVJSSURFOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTY3JvbGxiYXI+IGNyZWF0ZVNjcm9s
bGJhcihTY3JvbGxhYmxlQXJlYSosIFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250
cm9sU2l6ZSkgT1ZFUlJJREU7CiAKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQo
KSBjb25zdDsKLQotICAgIEhUTUxFbGVtZW50KiBjb250YWluZXJFbGVtZW50KCkgY29uc3Q7Ci0g
ICAgSFRNTEVsZW1lbnQqIGlubmVyQmxvY2tFbGVtZW50KCkgY29uc3Q7Ci0gICAgSFRNTEVsZW1l
bnQqIGlubmVyU3BpbkJ1dHRvbkVsZW1lbnQoKSBjb25zdDsKLSAgICBIVE1MRWxlbWVudCogcmVz
dWx0c0J1dHRvbkVsZW1lbnQoKSBjb25zdDsKLSAgICBIVE1MRWxlbWVudCogY2FuY2VsQnV0dG9u
RWxlbWVudCgpIGNvbnN0OwotCiAgICAgYm9vbCBtX3NlYXJjaFBvcHVwSXNWaXNpYmxlOwotICAg
IGJvb2wgbV9zaG91bGREcmF3Q2Fwc0xvY2tJbmRpY2F0b3I7Ci0gICAgTGF5b3V0VW5pdCBtX2Rl
c2lyZWRJbm5lclRleHRIZWlnaHQ7CiAgICAgUmVmUHRyPFNlYXJjaFBvcHVwTWVudT4gbV9zZWFy
Y2hQb3B1cDsKICAgICBWZWN0b3I8U3RyaW5nPiBtX3JlY2VudFNlYXJjaGVzOwogfTsKIAotaW5s
aW5lIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZSogdG9SZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmUoUmVuZGVyT2JqZWN0KiBvYmplY3QpCitpbmxpbmUgUmVuZGVyU2VhcmNoRmllbGQqIHRv
UmVuZGVyU2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgQVNTRVJUKCFv
YmplY3QgfHwgb2JqZWN0LT5pc1RleHRGaWVsZCgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKj4ob2JqZWN0KTsKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8UmVuZGVyU2VhcmNoRmllbGQqPihvYmplY3QpOwogfQogCiAvLyBUaGlzIHdpbGwgY2F0
Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCi12b2lkIHRvUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lKGNvbnN0IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZSopOwotCi0v
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIFJlbmRlclRleHRDb250cm9s
SW5uZXJCbG9jayA6IHB1YmxpYyBSZW5kZXJCbG9jayB7Ci1wdWJsaWM6Ci0gICAgUmVuZGVyVGV4
dENvbnRyb2xJbm5lckJsb2NrKE5vZGUqIG5vZGUsIGJvb2wgaXNNdWx0aUxpbmUpIDogUmVuZGVy
QmxvY2sobm9kZSksIG1fbXVsdGlMaW5lKGlzTXVsdGlMaW5lKSB7IH0KLQotcHJpdmF0ZToKLSAg
ICB2aXJ0dWFsIGJvb2wgaGFzTGluZUlmRW1wdHkoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0g
ICAgdmlydHVhbCBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQ
b2ludCYpOwotCi0gICAgYm9vbCBtX211bHRpTGluZTsKLX07Cit2b2lkIHRvUmVuZGVyU2VhcmNo
RmllbGQoY29uc3QgUmVuZGVyU2VhcmNoRmllbGQqKTsKIAogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCmlu
ZGV4IDg0OGZjMjExOTdjMmE3ZDI0ZjI2NDhkZjcwMjA1MjlmM2M4ODBkM2IuLjA4OTg3YzNhM2Y5
NDEyZGEyZjI2ZDZkNjY2MDVjYzUzNWUxY2NlMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCkBAIC0zMCw3
ICszMCw2IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5o
IgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5j
bHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgpAQCAtMzksNyArMzgsNiBAQAogI2luY2x1ZGUgIlJl
bmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVGhlbWUuaCIKLSNpbmNsdWRlICJTZWFyY2hQb3B1cE1lbnUuaCIKICNpbmNsdWRlICJTZXR0
aW5ncy5oIgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNv
bHZlci5oIgpAQCAtNzAsMTAgKzY4LDggQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlclRleHRDb250
cm9sSW5uZXJCbG9jazo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYKIAogUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUoTm9k
ZSogbm9kZSkKICAgICA6IFJlbmRlclRleHRDb250cm9sKG5vZGUpCi0gICAgLCBtX3NlYXJjaFBv
cHVwSXNWaXNpYmxlKGZhbHNlKQogICAgICwgbV9zaG91bGREcmF3Q2Fwc0xvY2tJbmRpY2F0b3Io
ZmFsc2UpCiAgICAgLCBtX2Rlc2lyZWRJbm5lclRleHRIZWlnaHQoLTEpCi0gICAgLCBtX3NlYXJj
aFBvcHVwKDApCiB7CiAgICAgQVNTRVJUKG5vZGUtPmlzSFRNTEVsZW1lbnQoKSk7CiAgICAgQVNT
RVJUKG5vZGUtPnRvSW5wdXRFbGVtZW50KCkpOwpAQCAtODEsMjAgKzc3LDYgQEAgUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUoTm9kZSogbm9k
ZSkKIAogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp+UmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lKCkKIHsKLSAgICBpZiAobV9zZWFyY2hQb3B1cCkgewotICAgICAgICBtX3NlYXJjaFBv
cHVwLT5wb3B1cE1lbnUoKS0+ZGlzY29ubmVjdENsaWVudCgpOwotICAgICAgICBtX3NlYXJjaFBv
cHVwID0gMDsKLSAgICB9Ci19Ci0KLWlubGluZSBIVE1MRWxlbWVudCogUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjpjb250YWluZXJFbGVtZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gaW5w
dXRFbGVtZW50KCktPmNvbnRhaW5lckVsZW1lbnQoKTsKLX0KLQotaW5saW5lIEhUTUxFbGVtZW50
KiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmlubmVyQmxvY2tFbGVtZW50KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gaW5wdXRFbGVtZW50KCktPmlubmVyQmxvY2tFbGVtZW50KCk7CiB9CiAK
IGlubGluZSBIVE1MRWxlbWVudCogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppbm5lclNw
aW5CdXR0b25FbGVtZW50KCkgY29uc3QKQEAgLTExOCw3MiArMTAwLDYgQEAgUmVuZGVyU3R5bGUq
IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6dGV4dEJhc2VTdHlsZSgpIGNvbnN0CiAgICAg
cmV0dXJuIGlubmVyQmxvY2sgPyBpbm5lckJsb2NrLT5yZW5kZXJlcigpLT5zdHlsZSgpIDogc3R5
bGUoKTsKIH0KIAotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmFkZFNlYXJjaFJl
c3VsdCgpCi17Ci0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBpbnB1dEVsZW1lbnQoKTsK
LSAgICBpZiAoaW5wdXQtPm1heFJlc3VsdHMoKSA8PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBTdHJpbmcgdmFsdWUgPSBpbnB1dC0+dmFsdWUoKTsKLSAgICBpZiAodmFsdWUuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudCgp
LT5zZXR0aW5ncygpOwotICAgIGlmICghc2V0dGluZ3MgfHwgc2V0dGluZ3MtPnByaXZhdGVCcm93
c2luZ0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaW50IHNpemUgPSBzdGF0aWNf
Y2FzdDxpbnQ+KG1fcmVjZW50U2VhcmNoZXMuc2l6ZSgpKTsKLSAgICBmb3IgKGludCBpID0gc2l6
ZSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgIGlmIChtX3JlY2VudFNlYXJjaGVzW2ldID09
IHZhbHVlKQotICAgICAgICAgICAgbV9yZWNlbnRTZWFyY2hlcy5yZW1vdmUoaSk7Ci0gICAgfQot
Ci0gICAgbV9yZWNlbnRTZWFyY2hlcy5pbnNlcnQoMCwgdmFsdWUpOwotICAgIHdoaWxlIChzdGF0
aWNfY2FzdDxpbnQ+KG1fcmVjZW50U2VhcmNoZXMuc2l6ZSgpKSA+IGlucHV0LT5tYXhSZXN1bHRz
KCkpCi0gICAgICAgIG1fcmVjZW50U2VhcmNoZXMucmVtb3ZlTGFzdCgpOwotCi0gICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBuYW1lID0gYXV0b3NhdmVOYW1lKCk7Ci0gICAgaWYgKCFtX3NlYXJjaFBv
cHVwKQotICAgICAgICBtX3NlYXJjaFBvcHVwID0gZG9jdW1lbnQoKS0+cGFnZSgpLT5jaHJvbWUo
KS0+Y3JlYXRlU2VhcmNoUG9wdXBNZW51KHRoaXMpOwotCi0gICAgbV9zZWFyY2hQb3B1cC0+c2F2
ZVJlY2VudFNlYXJjaGVzKG5hbWUsIG1fcmVjZW50U2VhcmNoZXMpOwotfQotCi12b2lkIFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZTo6c2hvd1BvcHVwKCkKLXsKLSAgICBpZiAobV9zZWFyY2hQ
b3B1cElzVmlzaWJsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3NlYXJjaFBvcHVw
KQotICAgICAgICBtX3NlYXJjaFBvcHVwID0gZG9jdW1lbnQoKS0+cGFnZSgpLT5jaHJvbWUoKS0+
Y3JlYXRlU2VhcmNoUG9wdXBNZW51KHRoaXMpOwotCi0gICAgaWYgKCFtX3NlYXJjaFBvcHVwLT5l
bmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2VhcmNoUG9wdXBJc1Zpc2libGUg
PSB0cnVlOwotCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lID0gYXV0b3NhdmVOYW1lKCk7
Ci0gICAgbV9zZWFyY2hQb3B1cC0+bG9hZFJlY2VudFNlYXJjaGVzKG5hbWUsIG1fcmVjZW50U2Vh
cmNoZXMpOwotCi0gICAgLy8gVHJpbSB0aGUgcmVjZW50IHNlYXJjaGVzIGxpc3QgaWYgdGhlIG1h
eGltdW0gc2l6ZSBoYXMgY2hhbmdlZCBzaW5jZSB3ZSBsYXN0IHNhdmVkLgotICAgIEhUTUxJbnB1
dEVsZW1lbnQqIGlucHV0ID0gaW5wdXRFbGVtZW50KCk7Ci0gICAgaWYgKHN0YXRpY19jYXN0PGlu
dD4obV9yZWNlbnRTZWFyY2hlcy5zaXplKCkpID4gaW5wdXQtPm1heFJlc3VsdHMoKSkgewotICAg
ICAgICBkbyB7Ci0gICAgICAgICAgICBtX3JlY2VudFNlYXJjaGVzLnJlbW92ZUxhc3QoKTsKLSAg
ICAgICAgfSB3aGlsZSAoc3RhdGljX2Nhc3Q8aW50PihtX3JlY2VudFNlYXJjaGVzLnNpemUoKSkg
PiBpbnB1dC0+bWF4UmVzdWx0cygpKTsKLQotICAgICAgICBtX3NlYXJjaFBvcHVwLT5zYXZlUmVj
ZW50U2VhcmNoZXMobmFtZSwgbV9yZWNlbnRTZWFyY2hlcyk7Ci0gICAgfQotCi0gICAgbV9zZWFy
Y2hQb3B1cC0+cG9wdXBNZW51KCktPnNob3cocGl4ZWxTbmFwcGVkSW50UmVjdChhYnNvbHV0ZUJv
dW5kaW5nQm94UmVjdCgpKSwgZG9jdW1lbnQoKS0+dmlldygpLCAtMSk7Ci19Ci0KLXZvaWQgUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpoaWRlUG9wdXAoKQotewotICAgIGlmIChtX3NlYXJj
aFBvcHVwKQotICAgICAgICBtX3NlYXJjaFBvcHVwLT5wb3B1cE1lbnUoKS0+aGlkZSgpOwotfQot
CiB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6cGFpbnQoUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKIHsKICAgICBSZW5kZXJUZXh0
Q29udHJvbDo6cGFpbnQocGFpbnRJbmZvLCBwYWludE9mZnNldCk7CkBAIC0yMDAsNiArMTE2LDEx
IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpwYWludChQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmCiAgICAgfQogfQogCitMYXlvdXRVbml0IFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZTo6Y29tcHV0ZUhlaWdodExpbWl0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gY29udGFpbmVyRWxlbWVudCgpID8gY29udGVudEhlaWdodCgpIDogaGVpZ2h0KCk7
Cit9CisKIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsYXlvdXQoKQogewogICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgcmVtb3ZlIHRoZSBoZWlnaHQtcmVsYXRlZCBoYWNrcyBpbiBs
YXlvdXQoKSBhbmQKQEAgLTIyNSw3ICsxNDYsNyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6bGF5b3V0KCkKICAgICBMYXlvdXRVbml0IGRlc2lyZWRIZWlnaHQgPSB0ZXh0Qmxv
Y2tIZWlnaHQoKTsKICAgICBMYXlvdXRVbml0IGN1cnJlbnRIZWlnaHQgPSBpbm5lclRleHRSZW5k
ZXJlci0+aGVpZ2h0KCk7CiAKLSAgICBMYXlvdXRVbml0IGhlaWdodExpbWl0ID0gKGlucHV0RWxl
bWVudCgpLT5pc1NlYXJjaEZpZWxkKCkgfHwgIWNvbnRhaW5lcikgPyBoZWlnaHQoKSA6IGNvbnRl
bnRIZWlnaHQoKTsKKyAgICBMYXlvdXRVbml0IGhlaWdodExpbWl0ID0gY29tcHV0ZUhlaWdodExp
bWl0KCk7CiAgICAgaWYgKGN1cnJlbnRIZWlnaHQgPiBoZWlnaHRMaW1pdCkgewogICAgICAgICBp
ZiAoZGVzaXJlZEhlaWdodCAhPSBjdXJyZW50SGVpZ2h0KQogICAgICAgICAgICAgc2V0TmVlZHNM
YXlvdXQodHJ1ZSwgTWFya09ubHlUaGlzKTsKQEAgLTI1OCwxMiArMTc5LDggQEAgdm9pZCBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmxheW91dCgpCiAgICAgaWYgKCFjb250YWluZXIgJiYg
Y3VycmVudEhlaWdodCAhPSBjb250ZW50SGVpZ2h0KCkpIHsKICAgICAgICAgTGF5b3V0VW5pdCBo
ZWlnaHREaWZmID0gY3VycmVudEhlaWdodCAtIGNvbnRlbnRIZWlnaHQoKTsKICAgICAgICAgaW5u
ZXJUZXh0UmVuZGVyZXItPnNldFkoaW5uZXJUZXh0UmVuZGVyZXItPnkoKSAtIChoZWlnaHREaWZm
IC8gMiArIGxheW91dE1vZChoZWlnaHREaWZmLCAyKSkpOwotICAgIH0gZWxzZSBpZiAoaW5wdXRF
bGVtZW50KCktPmlzU2VhcmNoRmllbGQoKSAmJiBjb250YWluZXJSZW5kZXJlciAmJiBjb250YWlu
ZXJSZW5kZXJlci0+aGVpZ2h0KCkgPiBjb250ZW50SGVpZ2h0KCkpIHsKLSAgICAgICAgLy8gQSBx
dWlyayBmb3IgZmluZC1pbi1wYWdlIGJveCBvbiBTYWZhcmkgV2luZG93cy4KLSAgICAgICAgLy8g
aHR0cDovL3dlYmtpdC5vcmcvYi82MzE1NwotICAgICAgICBMYXlvdXRVbml0IGhlaWdodERpZmYg
PSBjb250YWluZXJSZW5kZXJlci0+aGVpZ2h0KCkgLSBjb250ZW50SGVpZ2h0KCk7Ci0gICAgICAg
IGNvbnRhaW5lclJlbmRlcmVyLT5zZXRZKGNvbnRhaW5lclJlbmRlcmVyLT55KCkgLSAoaGVpZ2h0
RGlmZiAvIDIgKyBsYXlvdXRNb2QoaGVpZ2h0RGlmZiwgMikpKTsKLSAgICB9CisgICAgfSBlbHNl
CisgICAgICAgIGNlbnRlckNvbnRhaW5lcklmTmVlZGVkKGNvbnRhaW5lclJlbmRlcmVyKTsKIAog
ICAgIC8vIElnbm9yZXMgdGhlIHBhZGRpbmdzIGZvciB0aGUgaW5uZXIgc3BpbiBidXR0b24uCiAg
ICAgaWYgKFJlbmRlckJveCogaW5uZXJTcGluQm94ID0gaW5uZXJTcGluQnV0dG9uRWxlbWVudCgp
ID8gaW5uZXJTcGluQnV0dG9uRWxlbWVudCgpLT5yZW5kZXJCb3goKSA6IDApIHsKQEAgLTQ1Myw5
ICszNzAsNiBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6dXBkYXRlRnJvbUVs
ZW1lbnQoKQogCiAgICAgaWYgKGNhbmNlbEJ1dHRvbkVsZW1lbnQoKSkKICAgICAgICAgdXBkYXRl
Q2FuY2VsQnV0dG9uVmlzaWJpbGl0eSgpOwotCi0gICAgaWYgKG1fc2VhcmNoUG9wdXBJc1Zpc2li
bGUpCi0gICAgICAgIG1fc2VhcmNoUG9wdXAtPnBvcHVwTWVudSgpLT51cGRhdGVGcm9tRWxlbWVu
dCgpOwogfQogCiBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmU6OmNyZWF0ZUlubmVyVGV4dFN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBzdGFydFN0eWxl
KSBjb25zdApAQCAtNTI4LDE1NiArNDQyLDYgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OmF1dG9zYXZlTmFtZSgpIGNvbnN0CiAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKCkpLT5nZXRBdHRyaWJ1dGUoYXV0b3NhdmVBdHRyKTsK
IH0KIAotLy8gUG9wdXBNZW51Q2xpZW50IG1ldGhvZHMKLXZvaWQgUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjp2YWx1ZUNoYW5nZWQodW5zaWduZWQgbGlzdEluZGV4LCBib29sIGZpcmVFdmVu
dHMpCi17Ci0gICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4obGlzdEluZGV4KSA8IGxpc3RTaXpl
KCkpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gaW5wdXRFbGVtZW50KCk7Ci0gICAg
aWYgKHN0YXRpY19jYXN0PGludD4obGlzdEluZGV4KSA9PSAobGlzdFNpemUoKSAtIDEpKSB7Ci0g
ICAgICAgIGlmIChmaXJlRXZlbnRzKSB7Ci0gICAgICAgICAgICBtX3JlY2VudFNlYXJjaGVzLmNs
ZWFyKCk7Ci0gICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUgPSBhdXRvc2F2ZU5h
bWUoKTsKLSAgICAgICAgICAgIGlmICghbmFtZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoIW1fc2VhcmNoUG9wdXApCi0gICAgICAgICAgICAgICAgICAgIG1fc2VhcmNoUG9wdXAg
PSBkb2N1bWVudCgpLT5wYWdlKCktPmNocm9tZSgpLT5jcmVhdGVTZWFyY2hQb3B1cE1lbnUodGhp
cyk7Ci0gICAgICAgICAgICAgICAgbV9zZWFyY2hQb3B1cC0+c2F2ZVJlY2VudFNlYXJjaGVzKG5h
bWUsIG1fcmVjZW50U2VhcmNoZXMpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgaW5wdXQtPnNldFZhbHVlKGl0ZW1UZXh0KGxpc3RJbmRleCkpOwotICAg
ICAgICBpZiAoZmlyZUV2ZW50cykKLSAgICAgICAgICAgIGlucHV0LT5vblNlYXJjaCgpOwotICAg
ICAgICBpbnB1dC0+c2VsZWN0KCk7Ci0gICAgfQotfQotCi1TdHJpbmcgUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjppdGVtVGV4dCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0Ci17Ci0gICAg
aW50IHNpemUgPSBsaXN0U2l6ZSgpOwotICAgIGlmIChzaXplID09IDEpIHsKLSAgICAgICAgQVNT
RVJUKCFsaXN0SW5kZXgpOwotICAgICAgICByZXR1cm4gc2VhcmNoTWVudU5vUmVjZW50U2VhcmNo
ZXNUZXh0KCk7Ci0gICAgfQotICAgIGlmICghbGlzdEluZGV4KQotICAgICAgICByZXR1cm4gc2Vh
cmNoTWVudVJlY2VudFNlYXJjaGVzVGV4dCgpOwotICAgIGlmIChpdGVtSXNTZXBhcmF0b3IobGlz
dEluZGV4KSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIGlmIChzdGF0aWNfY2FzdDxp
bnQ+KGxpc3RJbmRleCkgPT0gKHNpemUgLSAxKSkKLSAgICAgICAgcmV0dXJuIHNlYXJjaE1lbnVD
bGVhclJlY2VudFNlYXJjaGVzVGV4dCgpOwotICAgIHJldHVybiBtX3JlY2VudFNlYXJjaGVzW2xp
c3RJbmRleCAtIDFdOwotfQotCi1TdHJpbmcgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpp
dGVtTGFiZWwodW5zaWduZWQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1T
dHJpbmcgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppdGVtSWNvbih1bnNpZ25lZCkgY29u
c3QKLXsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLWJvb2wgUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjppdGVtSXNFbmFibGVkKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKLXsKLSAg
ICAgaWYgKCFsaXN0SW5kZXggfHwgaXRlbUlzU2VwYXJhdG9yKGxpc3RJbmRleCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUG9wdXBNZW51U3R5bGUgUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppdGVtU3R5bGUodW5zaWduZWQpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1lbnVTdHlsZSgpOwotfQotCi1Qb3B1cE1lbnVTdHlsZSBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6Om1lbnVTdHlsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFBvcHVwTWVu
dVN0eWxlKHN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwg
c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9y
KSwgc3R5bGUoKS0+Zm9udCgpLCBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSwKLSAg
ICAgICAgc3R5bGUoKS0+ZGlzcGxheSgpID09IE5PTkUsIHN0eWxlKCktPnRleHRJbmRlbnQoKSwg
c3R5bGUoKS0+ZGlyZWN0aW9uKCksIGlzT3ZlcnJpZGUoc3R5bGUoKS0+dW5pY29kZUJpZGkoKSkp
OwotfQotCi1pbnQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjbGllbnRJbnNldExlZnQo
KSBjb25zdAotewotICAgIC8vIEluc2V0IHRoZSBtZW51IGJ5IHRoZSByYWRpdXMgb2YgdGhlIGNh
cCBvbiB0aGUgbGVmdCBzbyB0aGF0Ci0gICAgLy8gaXQgb25seSBydW5zIGFsb25nIHRoZSBzdHJh
aWdodCBwYXJ0IG9mIHRoZSBiZXplbC4KLSAgICByZXR1cm4gaGVpZ2h0KCkgLyAyOwotfQotCi1p
bnQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjbGllbnRJbnNldFJpZ2h0KCkgY29uc3QK
LXsKLSAgICAvLyBJbnNldCB0aGUgbWVudSBieSB0aGUgcmFkaXVzIG9mIHRoZSBjYXAgb24gdGhl
IHJpZ2h0IHNvIHRoYXQKLSAgICAvLyBpdCBvbmx5IHJ1bnMgYWxvbmcgdGhlIHN0cmFpZ2h0IHBh
cnQgb2YgdGhlIGJlemVsICh1bmxlc3MgaXQgbmVlZHMKLSAgICAvLyB0byBiZSB3aWRlcikuCi0g
ICAgcmV0dXJuIGhlaWdodCgpIC8gMjsKLX0KLQotTGF5b3V0VW5pdCBSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OmNsaWVudFBhZGRpbmdMZWZ0KCkgY29uc3QKLXsKLSAgICBMYXlvdXRVbml0
IHBhZGRpbmcgPSBwYWRkaW5nTGVmdCgpOwotICAgIGlmIChSZW5kZXJCb3gqIGJveCA9IGlubmVy
QmxvY2tFbGVtZW50KCkgPyBpbm5lckJsb2NrRWxlbWVudCgpLT5yZW5kZXJCb3goKSA6IDApCi0g
ICAgICAgIHBhZGRpbmcgKz0gYm94LT54KCk7Ci0gICAgcmV0dXJuIHBhZGRpbmc7Ci19Ci0KLUxh
eW91dFVuaXQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjbGllbnRQYWRkaW5nUmlnaHQo
KSBjb25zdAotewotICAgIExheW91dFVuaXQgcGFkZGluZyA9IHBhZGRpbmdSaWdodCgpOwotICAg
IGlmIChSZW5kZXJCb3gqIGNvbnRhaW5lckJveCA9IGNvbnRhaW5lckVsZW1lbnQoKSA/IGNvbnRh
aW5lckVsZW1lbnQoKS0+cmVuZGVyQm94KCkgOiAwKSB7Ci0gICAgICAgIGlmIChSZW5kZXJCb3gq
IGlubmVyQmxvY2tCb3ggPSBpbm5lckJsb2NrRWxlbWVudCgpID8gaW5uZXJCbG9ja0VsZW1lbnQo
KS0+cmVuZGVyQm94KCkgOiAwKQotICAgICAgICAgICAgcGFkZGluZyArPSBjb250YWluZXJCb3gt
PndpZHRoKCkgLSAoaW5uZXJCbG9ja0JveC0+eCgpICsgaW5uZXJCbG9ja0JveC0+d2lkdGgoKSk7
Ci0gICAgfQotICAgIHJldHVybiBwYWRkaW5nOwotfQotCi1pbnQgUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjpsaXN0U2l6ZSgpIGNvbnN0Ci17Ci0gICAgLy8gSWYgdGhlcmUgYXJlIG5vIHJl
Y2VudCBzZWFyY2hlcywgdGhlbiBvdXIgbWVudSB3aWxsIGhhdmUgMSAiTm8gcmVjZW50IHNlYXJj
aGVzIiBpdGVtLgotICAgIGlmICghbV9yZWNlbnRTZWFyY2hlcy5zaXplKCkpCi0gICAgICAgIHJl
dHVybiAxOwotICAgIC8vIE90aGVyd2lzZSwgbGVhdmUgcm9vbSBpbiB0aGUgbWVudSBmb3IgYSBo
ZWFkZXIsIGEgc2VwYXJhdG9yLCBhbmQgdGhlICJDbGVhciByZWNlbnQgc2VhcmNoZXMiIGl0ZW0u
Ci0gICAgcmV0dXJuIG1fcmVjZW50U2VhcmNoZXMuc2l6ZSgpICsgMzsKLX0KLQotaW50IFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZTo6c2VsZWN0ZWRJbmRleCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIC0xOwotfQotCi12b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6cG9wdXBEaWRI
aWRlKCkKLXsKLSAgICBtX3NlYXJjaFBvcHVwSXNWaXNpYmxlID0gZmFsc2U7Ci19Ci0KLWJvb2wg
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppdGVtSXNTZXBhcmF0b3IodW5zaWduZWQgbGlz
dEluZGV4KSBjb25zdAotewotICAgIC8vIFRoZSBzZXBhcmF0b3Igd2lsbCBiZSB0aGUgc2Vjb25k
IHRvIGxhc3QgaXRlbSBpbiBvdXIgbGlzdC4KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihs
aXN0SW5kZXgpID09IChsaXN0U2l6ZSgpIC0gMik7Ci19Ci0KLWJvb2wgUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjppdGVtSXNMYWJlbCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGxpc3RJbmRleCA9PSAwOwotfQotCi1ib29sIFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6aXRlbUlzU2VsZWN0ZWQodW5zaWduZWQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi12b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2V0VGV4dEZyb21J
dGVtKHVuc2lnbmVkIGxpc3RJbmRleCkKLXsKLSAgICBpbnB1dEVsZW1lbnQoKS0+c2V0VmFsdWUo
aXRlbVRleHQobGlzdEluZGV4KSk7Ci19Ci0KLUZvbnRTZWxlY3RvciogUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjpmb250U2VsZWN0b3IoKSBjb25zdAotewotICAgIHJldHVybiBkb2N1bWVu
dCgpLT5zdHlsZVJlc29sdmVyKCktPmZvbnRTZWxlY3RvcigpOwotfQotCi1Ib3N0V2luZG93KiBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Omhvc3RXaW5kb3coKSBjb25zdAotewotICAgIHJl
dHVybiBkb2N1bWVudCgpLT52aWV3KCktPmhvc3RXaW5kb3coKTsKLX0KLQogdm9pZCBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OmF1dG9zY3JvbGwoKQogewogICAgIFJlbmRlckxheWVyKiBs
YXllciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVyQm94KCktPmxheWVyKCk7CkBAIC03NDEs
MTcgKzUwNSw2IEBAIGJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsb2dpY2FsU2Ny
b2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24gZGlyZWN0aW9uCiAgICAgcmV0dXJuIFJlbmRlckJs
b2NrOjpsb2dpY2FsU2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIsIHN0
b3BOb2RlKTsKIH0KIAotUGFzc1JlZlB0cjxTY3JvbGxiYXI+IFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6Y3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSwg
U2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplIGNv
bnRyb2xTaXplKQotewotICAgIFJlZlB0cjxTY3JvbGxiYXI+IHdpZGdldDsKLSAgICBib29sIGhh
c0N1c3RvbVNjcm9sbGJhclN0eWxlID0gc3R5bGUoKS0+aGFzUHNldWRvU3R5bGUoU0NST0xMQkFS
KTsKLSAgICBpZiAoaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5bGUpCi0gICAgICAgIHdpZGdldCA9IFJl
bmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKHNjcm9sbGFibGVBcmVhLCBvcmll
bnRhdGlvbiwgdGhpcy0+bm9kZSgpKTsKLSAgICBlbHNlCi0gICAgICAgIHdpZGdldCA9IFNjcm9s
bGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKHNjcm9sbGFibGVBcmVhLCBvcmllbnRhdGlvbiwg
Y29udHJvbFNpemUpOwotICAgIHJldHVybiB3aWRnZXQucmVsZWFzZSgpOwotfQotCiBIVE1MSW5w
dXRFbGVtZW50KiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmlucHV0RWxlbWVudCgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG5vZGUoKS0+dG9JbnB1dEVsZW1lbnQoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaApp
bmRleCA2ZTIxYzg1NmMxMGZhOWZiYTQzNmMwNmY3NDljMTRlMWUyYTgwYmE2Li5hYjhiMDA1ZGIx
ZjI0Mzg3N2Q0ZTA3MGVlOWQzMmI5MjJhNDdkNmQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCkBAIC0yMywxNSAr
MjMsMTQgQEAKICNpZm5kZWYgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lX2gKICNkZWZpbmUg
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lX2gKIAotI2luY2x1ZGUgIlBvcHVwTWVudUNsaWVu
dC5oIgorI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0
Q29udHJvbC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxJbnB1dEVsZW1l
bnQ7Ci1jbGFzcyBTZWFyY2hQb3B1cE1lbnU7CiAKLWNsYXNzIFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZSA6IHB1YmxpYyBSZW5kZXJUZXh0Q29udHJvbCwgcHJpdmF0ZSBQb3B1cE1lbnVDbGll
bnQgeworY2xhc3MgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lIDogcHVibGljIFJlbmRlclRl
eHRDb250cm9sIHsKIHB1YmxpYzoKICAgICBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUoTm9k
ZSopOwogICAgIHZpcnR1YWwgflJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZSgpOwpAQCAtNDAs
MTUgKzM5LDE3IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBjcmVhdGVJ
bm5lckJsb2NrU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUpIGNvbnN0OwogICAg
IHZvaWQgdXBkYXRlQ2FuY2VsQnV0dG9uVmlzaWJpbGl0eSgpIGNvbnN0OwogCi0gICAgdm9pZCBh
ZGRTZWFyY2hSZXN1bHQoKTsKLSAgICB2b2lkIHN0b3BTZWFyY2hFdmVudFRpbWVyKCk7Ci0KLSAg
ICBib29sIHBvcHVwSXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV9zZWFyY2hQb3B1cElzVmlz
aWJsZTsgfQotICAgIHZvaWQgc2hvd1BvcHVwKCk7Ci0gICAgdm9pZCBoaWRlUG9wdXAoKTsKLQog
ICAgIHZvaWQgY2Fwc0xvY2tTdGF0ZU1heUhhdmVDaGFuZ2VkKCk7CiAKK3Byb3RlY3RlZDoKKyAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIGF1dG9zYXZlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCBjZW50ZXJDb250YWluZXJJZk5lZWRlZChSZW5kZXJCb3gqKSBjb25zdCB7IH0KKyAgICB2
aXJ0dWFsIExheW91dFVuaXQgY29tcHV0ZUhlaWdodExpbWl0KCkgY29uc3Q7CisgICAgSFRNTEVs
ZW1lbnQqIGNvbnRhaW5lckVsZW1lbnQoKSBjb25zdDsKKyAgICBIVE1MRWxlbWVudCogaW5uZXJC
bG9ja0VsZW1lbnQoKSBjb25zdDsKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRnJvbUVsZW1lbnQoKTsKKwogcHJpdmF0
ZToKICAgICB2aXJ0dWFsIGJvb2wgaGFzQ29udHJvbENsaXAoKSBjb25zdDsKICAgICB2aXJ0dWFs
IExheW91dFJlY3QgY29udHJvbENsaXBSZWN0KGNvbnN0IExheW91dFBvaW50JikgY29uc3Q7CkBA
IC03Niw1OSArNzcsMzEgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIExheW91dFVuaXQgcHJlZmVy
cmVkQ29udGVudFdpZHRoKGZsb2F0IGNoYXJXaWR0aCkgY29uc3Q7CiAgICAgdmlydHVhbCBMYXlv
dXRVbml0IGNvbXB1dGVDb250cm9sSGVpZ2h0KExheW91dFVuaXQgbGluZUhlaWdodCwgTGF5b3V0
VW5pdCBub25Db250ZW50SGVpZ2h0KSBjb25zdCBPVkVSUklERTsKICAgICAKLSAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlRnJvbUVsZW1lbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFu
Z2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwogCiAgICAg
dmlydHVhbCBSZW5kZXJTdHlsZSogdGV4dEJhc2VTdHlsZSgpIGNvbnN0OwogCiAgICAgRVZpc2li
aWxpdHkgdmlzaWJpbGl0eUZvckNhbmNlbEJ1dHRvbigpIGNvbnN0OwogICAgIGJvb2wgdGV4dFNo
b3VsZEJlVHJ1bmNhdGVkKCkgY29uc3Q7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdXRvc2F2
ZU5hbWUoKSBjb25zdDsKLQotICAgIC8vIFBvcHVwTWVudUNsaWVudCBtZXRob2RzCi0gICAgdmly
dHVhbCB2b2lkIHZhbHVlQ2hhbmdlZCh1bnNpZ25lZCBsaXN0SW5kZXgsIGJvb2wgZmlyZUV2ZW50
cyA9IHRydWUpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKHVu
c2lnbmVkLCBib29sKSBPVkVSUklERSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0aW9uQ2xl
YXJlZCgpIE9WRVJSSURFIHsgfQotICAgIHZpcnR1YWwgU3RyaW5nIGl0ZW1UZXh0KHVuc2lnbmVk
IGxpc3RJbmRleCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBTdHJpbmcgaXRlbUxhYmVs
KHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBTdHJpbmcg
aXRlbUljb24odW5zaWduZWQgbGlzdEluZGV4KSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFs
IFN0cmluZyBpdGVtVG9vbFRpcCh1bnNpZ25lZCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gU3Ry
aW5nKCk7IH0KLSAgICB2aXJ0dWFsIFN0cmluZyBpdGVtQWNjZXNzaWJpbGl0eVRleHQodW5zaWdu
ZWQpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIFN0cmluZygpOyB9Ci0gICAgdmlydHVhbCBib29s
IGl0ZW1Jc0VuYWJsZWQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdCBPVkVSUklERTsKLSAgICB2
aXJ0dWFsIFBvcHVwTWVudVN0eWxlIGl0ZW1TdHlsZSh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0
IE9WRVJSSURFOwotICAgIHZpcnR1YWwgUG9wdXBNZW51U3R5bGUgbWVudVN0eWxlKCkgY29uc3Qg
T1ZFUlJJREU7Ci0gICAgdmlydHVhbCBpbnQgY2xpZW50SW5zZXRMZWZ0KCkgY29uc3QgT1ZFUlJJ
REU7Ci0gICAgdmlydHVhbCBpbnQgY2xpZW50SW5zZXRSaWdodCgpIGNvbnN0IE9WRVJSSURFOwot
ICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBjbGllbnRQYWRkaW5nTGVmdCgpIGNvbnN0IE9WRVJSSURF
OwotICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBjbGllbnRQYWRkaW5nUmlnaHQoKSBjb25zdCBPVkVS
UklERTsKLSAgICB2aXJ0dWFsIGludCBsaXN0U2l6ZSgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZp
cnR1YWwgaW50IHNlbGVjdGVkSW5kZXgoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZv
aWQgcG9wdXBEaWRIaWRlKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBib29sIGl0ZW1Jc1NlcGFy
YXRvcih1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9v
bCBpdGVtSXNMYWJlbCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZp
cnR1YWwgYm9vbCBpdGVtSXNTZWxlY3RlZCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0IE9WRVJS
SURFOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRQb3BPdmVyKCkgY29uc3QgT1ZFUlJJREUgeyBy
ZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgdmFsdWVTaG91bGRDaGFuZ2VPbkhvdFRy
YWNrKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
c2V0VGV4dEZyb21JdGVtKHVuc2lnbmVkIGxpc3RJbmRleCkgT1ZFUlJJREU7Ci0gICAgdmlydHVh
bCBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcigpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1
YWwgSG9zdFdpbmRvdyogaG9zdFdpbmRvdygpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxTY3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSosIFNj
cm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSkgT1ZFUlJJREU7CiAKLSAg
ICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQoKSBjb25zdDsKLQotICAgIEhUTUxFbGVt
ZW50KiBjb250YWluZXJFbGVtZW50KCkgY29uc3Q7Ci0gICAgSFRNTEVsZW1lbnQqIGlubmVyQmxv
Y2tFbGVtZW50KCkgY29uc3Q7CiAgICAgSFRNTEVsZW1lbnQqIGlubmVyU3BpbkJ1dHRvbkVsZW1l
bnQoKSBjb25zdDsKICAgICBIVE1MRWxlbWVudCogcmVzdWx0c0J1dHRvbkVsZW1lbnQoKSBjb25z
dDsKICAgICBIVE1MRWxlbWVudCogY2FuY2VsQnV0dG9uRWxlbWVudCgpIGNvbnN0OwogCi0gICAg
Ym9vbCBtX3NlYXJjaFBvcHVwSXNWaXNpYmxlOwogICAgIGJvb2wgbV9zaG91bGREcmF3Q2Fwc0xv
Y2tJbmRpY2F0b3I7CiAgICAgTGF5b3V0VW5pdCBtX2Rlc2lyZWRJbm5lclRleHRIZWlnaHQ7Ci0g
ICAgUmVmUHRyPFNlYXJjaFBvcHVwTWVudT4gbV9zZWFyY2hQb3B1cDsKLSAgICBWZWN0b3I8U3Ry
aW5nPiBtX3JlY2VudFNlYXJjaGVzOwogfTsKIAoraW5saW5lIEhUTUxFbGVtZW50KiBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNvbnRhaW5lckVsZW1lbnQoKSBjb25zdAoreworICAgIHJl
dHVybiBpbnB1dEVsZW1lbnQoKS0+Y29udGFpbmVyRWxlbWVudCgpOworfQorCitpbmxpbmUgSFRN
TEVsZW1lbnQqIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aW5uZXJCbG9ja0VsZW1lbnQo
KSBjb25zdAoreworICAgIHJldHVybiBpbnB1dEVsZW1lbnQoKS0+aW5uZXJCbG9ja0VsZW1lbnQo
KTsKK30KKwogaW5saW5lIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZSogdG9SZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmUoUmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgQVNTRVJUKCFv
YmplY3QgfHwgb2JqZWN0LT5pc1RleHRGaWVsZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJpbmdBbGxJbk9uZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyaW5nQWxsSW5PbmUuY3BwCmluZGV4IGQxN2JkMzEzYTQzMTkwYzliZGZlNWNl
OGQzMmY4ZjcxODU0NDRhNGYuLjFmMGE0YTM4ZTcyZTIxYTdkYzNmMGFkY2QzY2FlMzYzYzhhNTFk
OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJpbmdBbGxJbk9u
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcmluZ0FsbEluT25lLmNw
cApAQCAtOTEsNiArOTEsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhci5jcHAiCiAjaW5j
bHVkZSAiUmVuZGVyU2Nyb2xsYmFyUGFydC5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU2Nyb2xsYmFy
VGhlbWUuY3BwIgorI2luY2x1ZGUgIlJlbmRlclNlYXJjaEZpZWxkLmNwcCIKICNpbmNsdWRlICJS
ZW5kZXJTbGlkZXIuY3BwIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlLmNwcCIKICNpbmNsdWRlICJS
ZW5kZXJUYWJsZUNhcHRpb24uY3BwIgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147771</attachid>
            <date>2012-06-15 01:10:05 -0700</date>
            <delta_ts>2012-06-17 21:39:19 -0700</delta_ts>
            <desc>Patch 7</desc>
            <filename>bug-88980-20120615171004.patch</filename>
            <type>text/plain</type>
            <size>76220</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwMzk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmM4M2MyODcwMTAzODhh
NWE3M2I5YzdlN2E2NmE2YTQ1OTQyYmNjMi4uMmQyNWI4ZGZjMjM3YjdiZjhlZDYwOTQ0ZmFiYWYz
YWMzYWUyYmQxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg4IEBACisyMDEyLTA2LTE0ICBZb3No
aWZ1bWkgSW5vdWUgIDx5b3NpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Zvcm1zXSBNb3Zl
IHNlYXJjaCBmaWVsZCByZWxhdGVkIGNvZGUgdG8gUmVuZGVyU2VhcmNoRmllbGQgZnJvbSBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTg4OTgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtb3ZlcyBzZWFyY2ggZmllbGQgcmVsYXRlZCBtZXRo
b2RzIGluIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZQorICAgICAgICB0byBuZXcgY2xhc3Mg
UmVuZGVyU2VhcmNoRmllbGQgYW5kIGNoYW5nZXMgcmVsYXRlZCBjbGFzc2VzIHRvIHVzZQorICAg
ICAgICBSZW5kZXJTZWFyY2hGaWVsZC4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgcGF0
Y2ggZG9lc24ndCBjaGFuZ2UgYmVoYXZpb3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDog
QWRkZWQgbmV3IGZpbGUgUmVuZGVyU2VhcmNoRmllbGQuY3BwCisgICAgICAgICogR05VbWFrZWZp
bGUubGlzdC5hbTogQWRkZWQgbmV3IGZpbGUgUmVuZGVyU2VhcmNoRmllbGQuY3BwIGFuZCBSZW5k
ZXJTZWFyY2hGaWVsZC5oCisgICAgICAgICogVGFyZ2V0LnByaTogZGl0dG8KKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6IGRpdHRvCisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2o6IGRpdHRvCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBk
aXR0bworICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzdWJ0cmVlSGFzQ2hhbmdlZCk6IENhbGwgUmVuZGVyU2Vh
cmNoRmllbGQ6OnVwZGF0ZUNhbmNlbEJ1dHRvblZpc2liaWxpdHkKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxJbnB1dEVsZW1lbnQ6OmFkZFNlYXJjaFJlc3VsdCk6IENoYW5nZWQgdG8gY2FsbCBJbnB1
dFR5cGU6OmFkZFNlYXJjaFJlc3VsdC4KKyAgICAgICAgKiBodG1sL0lucHV0VHlwZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OmFkZFNlYXJjaFJlc3VsdCk6IEFkZGVkLgorICAg
ICAgICAqIGh0bWwvSW5wdXRUeXBlLmg6CisgICAgICAgICogaHRtbC9TZWFyY2hJbnB1dFR5cGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoSW5wdXRUeXBlOjphZGRTZWFyY2hSZXN1bHQp
OiBNb3ZlZCBmcm9tIEhUTUxJbnB1dEVsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hJ
bnB1dFR5cGU6OmNyZWF0ZVJlbmRlcmVyKTogQWRkZWQgdG8gY3JlYXRlIFJlbmRlclNlYXJjaEZp
ZWxkLgorICAgICAgICAqIGh0bWwvU2VhcmNoSW5wdXRUeXBlLmg6CisgICAgICAgICogaHRtbC9z
aGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNl
YXJjaEZpZWxkUmVzdWx0c0J1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOiBVc2Ug
UmVuZGVyU2VhcmNoRmllbGQgaW5zdGVhZCBvZiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUu
CisgICAgICAgICogbG9hZGVyL0Zvcm1TdWJtaXNzaW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvcm1TdWJtaXNzaW9uOjpjcmVhdGUpOiBHb3QgcmlkIGlzU2VhcmNoRmllbGQoKSBndWFyZCBm
b3IgYWRkU2VhcmNoUmVzdWx0KCkuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZp
ZWxkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjpSZW5kZXJTZWFy
Y2hGaWVsZCk6IFJlbmFtZWQgdG8gUmVuZGVyU2VhcmNoRmllbGQuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTZWFyY2hGaWVsZDo6flJlbmRlclNlYXJjaEZpZWxkKTogZGl0dG8KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjpyZXN1bHRzQnV0dG9uRWxlbWVudCk6IGRpdHRv
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6Y2FuY2VsQnV0dG9uRWxlbWVu
dCk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6YWRkU2VhcmNo
UmVzdWx0KTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjpzaG93
UG9wdXApOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OmhpZGVQ
b3B1cCk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6Y29tcHV0
ZUNvbnRyb2xIZWlnaHQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZp
ZWxkOjp1cGRhdGVGcm9tRWxlbWVudCk6IE1vdmVkIHNlYXJjaCBmaWVsZCByZWxhdGVkIGNvZGUg
ZnJvbSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTZWFyY2hGaWVsZDo6dXBkYXRlQ2FuY2VsQnV0dG9uVmlzaWJpbGl0eSk6IFJlbmFtZWQgdG8g
UmVuZGVyU2VhcmNoRmllbGQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6
dmlzaWJpbGl0eUZvckNhbmNlbEJ1dHRvbik6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTZWFyY2hGaWVsZDo6YXV0b3NhdmVOYW1lKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNlYXJjaEZpZWxkOjp2YWx1ZUNoYW5nZWQpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU2VhcmNoRmllbGQ6Oml0ZW1UZXh0KTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNlYXJjaEZpZWxkOjppdGVtTGFiZWwpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU2VhcmNoRmllbGQ6Oml0ZW1JY29uKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNlYXJjaEZpZWxkOjppdGVtSXNFbmFibGVkKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNlYXJjaEZpZWxkOjppdGVtU3R5bGUpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU2VhcmNoRmllbGQ6Om1lbnVTdHlsZSk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTZWFyY2hGaWVsZDo6Y2xpZW50SW5zZXRMZWZ0KTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNlYXJjaEZpZWxkOjpjbGllbnRJbnNldFJpZ2h0KTogZGl0dG8KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjpjbGllbnRQYWRkaW5nTGVmdCk6IGRpdHRvCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6Y2xpZW50UGFkZGluZ1JpZ2h0KTogZGl0
dG8KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjpsaXN0U2l6ZSk6IGRpdHRv
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6c2VsZWN0ZWRJbmRleCk6IGRp
dHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6cG9wdXBEaWRIaWRlKTog
ZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjppdGVtSXNTZXBhcmF0
b3IpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6Oml0ZW1Jc0xh
YmVsKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjppdGVtSXNT
ZWxlY3RlZCk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6c2V0
VGV4dEZyb21JdGVtKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxk
Ojpmb250U2VsZWN0b3IpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmll
bGQ6Omhvc3RXaW5kb3cpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmll
bGQ6OmNyZWF0ZVNjcm9sbGJhcik6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFy
Y2hGaWVsZDo6Y29tcHV0ZUhlaWdodExpbWl0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTZWFyY2hGaWVsZDo6Y2VudGVyQ29udGFpbmVySWZOZWVkZWQpOiBBZGRlZC4KKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuaDoKKyAgICAgICAgKFdlYkNvcmU6OnRv
UmVuZGVyU2VhcmNoRmllbGQpOiBBZGRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKTogUmVtb3ZlIHNlYXJj
aCBmaWVsZCByZWxhdGVkIGNvZGUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6On5SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUpOiBkaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y29tcHV0ZUhlaWdodExp
bWl0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmU6OmxheW91dCk6IFVzZSBuZXcgbWV0aG9kcyBmb3IgcmVtb3ZpbmcgaXNTZWFyY2hGaWVsZC4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y29tcHV0ZUNv
bnRyb2xIZWlnaHQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZTo6dXBkYXRlRnJvbUVsZW1lbnQpOiBSZW1vdmUgc2VhcmNoIGZpZWxkIHJlbGF0
ZWQgY29kZS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
Lmg6CisgICAgICAgIChSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjZW50ZXJDb250YWluZXJJZk5lZWRl
ZCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
Ojpjb250YWluZXJFbGVtZW50KTogRXhwb3NlZCBmb3IgUmVuZGVyU2VhcmNoRmllbGQuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmlubmVyQmxvY2tFbGVt
ZW50KTogRXhwb3NlZCBmb3IgUmVuZGVyU2VhcmNoRmllbGQuCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlcmluZ0FsbEluT25lLmNwcDogQWRkZWQgUmVuZGVyU2VhcmNoRmllbGQuY3BwCisKIDIw
MTItMDYtMTQgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFZh
bGlkYXRlIGZvcm0gc3RhdGUgc3RyaW5ncyBpbiBGb3JtQ29udHJvbGxlcjo6c2V0U3RhdGVGb3JO
ZXdGb3JtRWxlbWVudHMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBlMjczYzBmZDU2MDE1Yjk1
OTYzYmZiNDgzODlhMDNiMmM3NWJkYmFkLi45YWQ4NWJiOTQyMjUwNGRjMzJjZDZkMWZmODhmMzQ2
ODNhZWQ0NmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTM4Nyw2ICsxMzg3LDcgQEAgU0VU
KFdlYkNvcmVfU09VUkNFUwogICAgIHJlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXIuY3BwCiAgICAg
cmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclBhcnQuY3BwCiAgICAgcmVuZGVyaW5nL1JlbmRlclNj
cm9sbGJhclRoZW1lLmNwcAorICAgIHJlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAKICAg
ICByZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcAogICAgIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5j
cHAKICAgICByZW5kZXJpbmcvUmVuZGVyVGFibGVDYXB0aW9uLmNwcApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0KaW5kZXggNGE0NWM3ZjAzNDAwMTJhYjM2MWUwM2JjYmE5NDI2NzQyZWM1NjA3
MC4uMzdiN2U1YWMyOTk3ZWEzMTYxZTk0YWM4NjQ2MWE2Y2U2NzY1YjM0MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCkBAIC0zOTA2LDYgKzM5MDYsOCBAQCB3ZWJjb3JlX3NvdXJjZXMg
Kz0gXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJQYXJ0LmggXAog
CVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJUaGVtZS5jcHAgXAogCVNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJUaGVtZS5oIFwKKwlTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwIFwKKwlTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNlbGVjdGlvbkluZm8uaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNsaWRlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIu
aCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNv
cmUvVGFyZ2V0LnByaQppbmRleCAxNGY3ZWQxODBhNzEyYmU1MDQ4OGFjODVjNjFjNmNlNDI2ZDdk
Mzg0Li42OWJhYTkyOWZkNjcyYzkyNjE2NDhmOGIyMjBmNTdiY2U2N2QzZmQxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5w
cmkKQEAgLTEzMDksNiArMTMwOSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHJlbmRlcmluZy9SZW5k
ZXJTY3JvbGxiYXIuY3BwIFwKICAgICByZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyUGFydC5jcHAg
XAogICAgIHJlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJUaGVtZS5jcHAgXAorICAgIHJlbmRlcmlu
Zy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAgXAogICAgIHJlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3Bw
IFwKICAgICByZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwIFwKICAgICByZW5kZXJpbmcvUmVuZGVy
VGFibGVDYXB0aW9uLmNwcCBcCkBAIC0yNTE0LDYgKzI1MTUsNyBAQCBIRUFERVJTICs9IFwKICAg
ICByZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmggXAogICAgIHJlbmRlcmluZy9SZW5kZXJTY3Jv
bGxiYXJQYXJ0LmggXAogICAgIHJlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJUaGVtZS5oIFwKKyAg
ICByZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuaCBcCiAgICAgcmVuZGVyaW5nL1JlbmRlclNs
aWRlci5oIFwKICAgICByZW5kZXJpbmcvUmVuZGVyVGFibGVDYXB0aW9uLmggXAogICAgIHJlbmRl
cmluZy9SZW5kZXJUYWJsZUNlbGwuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggOWNiNmM3ZDQzNmQz
YWQ0NzJmNGE2Njk5OTQ4ZTJiNDAyMDM3ZTUzMy4uNWJiNmRkYTU0ZGJmOTZiNDdkYzFjYmExMzk1
YTEyM2EzZjY2MGEzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNDkwMiw2ICs0OTAyLDggQEAKICAg
ICAgICAgICAgICdyZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyUGFydC5oJywKICAgICAgICAgICAg
ICdyZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyVGhlbWUuY3BwJywKICAgICAgICAgICAgICdyZW5k
ZXJpbmcvUmVuZGVyU2Nyb2xsYmFyVGhlbWUuaCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL1Jl
bmRlclNlYXJjaEZpZWxkLmNwcCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNlYXJj
aEZpZWxkLmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTZWxlY3Rpb25JbmZvLmgn
LAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwJywKICAgICAgICAgICAg
ICdyZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagppbmRleCAxN2FlMGRmNTE2NjY2MWVhYzNhMWI3MGFjMmIzZjdm
ODQ2MDIyN2U1Li5kMDZkZGFhYTE0NjJkODljYzUxZjlmM2VkNmQ4YmVlNDg5Y2VhZGVjIDEwMDc1
NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtNDE1MDMs
NiArNDE1MDMsNjIgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZl
UGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRlclNlYXJjaEZpZWxkLmNwcCIKKwkJCQk+CisJCQkJPEZp
bGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZy
b21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBp
bGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29u
ZmlndXJhdGlvbgorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21C
dWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVy
VG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmln
dXJhdGlvbgorCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIiCisJCQkJCUV4Y2x1
ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NM
Q29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZp
bGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgor
CQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJ
TmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9u
PgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJEZWJ1Z19BbGx8V2luMzIiCisJ
CQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlO
YW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+
CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IlByb2R1Y3Rpb258V2luMzIiCisJ
CQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlO
YW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+
CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJl
bmRlclNlYXJjaEZpZWxkLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xSZW5kZXJTZWxlY3Rpb25JbmZvLmgiCiAJCQkJPgogCQkJ
PC9GaWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCmluZGV4IGVjMzY2NmQ1YTVjNWM3ODgyMzEyNzNmN2E5NDlkZTkwNWY0OWZjYTIuLmRm
OGQ1YTg2MjViODc3MmRhMjhmNmNkZTBjMjgyZGE4ZjE0MmZkZmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTExODksNiArMTE4
OSw4IEBACiAJCTQ1MDk5QzQxMTM3MEE3ODAwMDU4RDUxMyAvKiBJY29uVVJMLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1MDk5QzQwMTM3MEE3ODAw
MDU4RDUxMyAvKiBJY29uVVJMLmNwcCAqLzsgfTsKIAkJNDUwQ0VCRjAxNTA3M0JCRTAwMkJCMTQ5
IC8qIExhYmVsYWJsZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDUwQ0VCRUUxNTA3M0JCRTAwMkJCMTQ5IC8qIExhYmVsYWJsZUVsZW1l
bnQuY3BwICovOyB9OwogCQk0NTBDRUJGMTE1MDczQkJFMDAyQkIxNDkgLyogTGFiZWxhYmxlRWxl
bWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDUw
Q0VCRUYxNTA3M0JCRTAwMkJCMTQ5IC8qIExhYmVsYWJsZUVsZW1lbnQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0NThGRTQwOTE1ODlERjBCMDA1
NjA5RTYgLyogUmVuZGVyU2VhcmNoRmllbGQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDU4RkU0MDcxNTg5REYwQjAwNTYwOUU2IC8qIFJlbmRlclNl
YXJjaEZpZWxkLmNwcCAqLzsgfTsKKwkJNDU4RkU0MEExNTg5REYwQjAwNTYwOUU2IC8qIFJlbmRl
clNlYXJjaEZpZWxkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0NThGRTQwODE1ODlERjBCMDA1NjA5RTYgLyogUmVuZGVyU2VhcmNoRmllbGQuaCAqLzsg
fTsKIAkJNDVCQUMyQjAxMzYwQkJBQjAwNURBMjU4IC8qIEljb25VUkwuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1QkFDMkFGMTM2MEJCQUIwMDVEQTI1
OCAvKiBJY29uVVJMLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNDVGRUE1Q0YxNTZEREU4QzAwNjU0MTAxIC8qIERlY2ltYWwuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDVGRUE1Q0QxNTZEREU4QzAw
NjU0MTAxIC8qIERlY2ltYWwuY3BwICovOyB9OwogCQk0NUZFQTVEMDE1NkRERThDMDA2NTQxMDEg
LyogRGVjaW1hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDVGRUE1Q0UxNTZEREU4QzAwNjU0MTAxIC8qIERlY2ltYWwuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtODIxOCw2ICs4MjIwLDggQEAKIAkJ
NDUwOTlDNDAxMzcwQTc4MDAwNThENTEzIC8qIEljb25VUkwuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSWNvblVSTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTQ1MENFQkVFMTUwNzNCQkUwMDJCQjE0OSAvKiBMYWJlbGFibGVFbGVtZW50LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExhYmVsYWJsZUVsZW1lbnQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NTBDRUJFRjE1MDczQkJFMDAyQkIxNDkg
LyogTGFiZWxhYmxlRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBM
YWJlbGFibGVFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ1OEZFNDA3
MTU4OURGMEIwMDU2MDlFNiAvKiBSZW5kZXJTZWFyY2hGaWVsZC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTZWFyY2hGaWVsZC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTQ1OEZFNDA4MTU4OURGMEIwMDU2MDlFNiAvKiBSZW5kZXJTZWFy
Y2hGaWVsZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTZWFyY2hG
aWVsZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NUJBQzJBRjEzNjBCQkFCMDA1
REEyNTggLyogSWNvblVSTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJY29u
VVJMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ1RkVBNUNEMTU2RERFOEMwMDY1
NDEwMSAvKiBEZWNpbWFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IERlY2ltYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NUZFQTVDRTE1NkRE
RThDMDA2NTQxMDEgLyogRGVjaW1hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBEZWNpbWFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTExNiw2ICsyMTEy
MCw4IEBACiAJCQkJQkMzQkU5OTIwRTlDMUM3QzAwODM1NTg4IC8qIFJlbmRlclNjcm9sbGJhclBh
cnQuaCAqLywKIAkJCQlCQzNCRTlBNDBFOUMyMzk2MDA4MzU1ODggLyogUmVuZGVyU2Nyb2xsYmFy
VGhlbWUuY3BwICovLAogCQkJCUJDM0JFOTk4MEU5QzFFNUQwMDgzNTU4OCAvKiBSZW5kZXJTY3Jv
bGxiYXJUaGVtZS5oICovLAorCQkJCTQ1OEZFNDA3MTU4OURGMEIwMDU2MDlFNiAvKiBSZW5kZXJT
ZWFyY2hGaWVsZC5jcHAgKi8sCisJCQkJNDU4RkU0MDgxNTg5REYwQjAwNTYwOUU2IC8qIFJlbmRl
clNlYXJjaEZpZWxkLmggKi8sCiAJCQkJMEYxMUE1NEUwRjM5MjMzMTAwQzM3ODg0IC8qIFJlbmRl
clNlbGVjdGlvbkluZm8uaCAqLywKIAkJCQlBQjI0N0E2QTBBRkQ2MzgzMDAzRkE1RkQgLyogUmVu
ZGVyU2xpZGVyLmNwcCAqLywKIAkJCQlBQjI0N0E2QjBBRkQ2MzgzMDAzRkE1RkQgLyogUmVuZGVy
U2xpZGVyLmggKi8sCkBAIC0yNDI3Miw2ICsyNDI3OCw3IEBACiAJCQkJQkMzQkU5OTQwRTlDMUM3
QzAwODM1NTg4IC8qIFJlbmRlclNjcm9sbGJhci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMzQkU5
OTUwRTlDMUM3QzAwODM1NTg4IC8qIFJlbmRlclNjcm9sbGJhclBhcnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDM0JFOTk5MEU5QzFFNUQwMDgzNTU4OCAvKiBSZW5kZXJTY3JvbGxiYXJUaGVtZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNDU4RkU0MEExNTg5REYwQjAwNTYwOUU2IC8qIFJlbmRlclNl
YXJjaEZpZWxkLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjExQTU0RjBGMzkyMzMxMDBDMzc4ODQg
LyogUmVuZGVyU2VsZWN0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUIyNDdBNkQwQUZE
NjM4MzAwM0ZBNUZEIC8qIFJlbmRlclNsaWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM4QzhG
QUUwRERDRDMxQjAwQjU5MkY0IC8qIFJlbmRlclN0eWxlLmggaW4gSGVhZGVycyAqLywKQEAgLTI3
NDY3LDYgKzI3NDc0LDcgQEAKIAkJCQlCQzNCRTk5MzBFOUMxQzdDMDA4MzU1ODggLyogUmVuZGVy
U2Nyb2xsYmFyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDM0JFOUFCMEU5QzI0MjAwMDgzNTU4
OCAvKiBSZW5kZXJTY3JvbGxiYXJQYXJ0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDM0JFOUE1
MEU5QzIzOTYwMDgzNTU4OCAvKiBSZW5kZXJTY3JvbGxiYXJUaGVtZS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk0NThGRTQwOTE1ODlERjBCMDA1NjA5RTYgLyogUmVuZGVyU2VhcmNoRmllbGQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQUIyNDdBNkMwQUZENjM4MzAwM0ZBNUZEIC8qIFJlbmRlclNs
aWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzhDOEZBRDBERENEMzFCMDBCNTkyRjQgLyog
UmVuZGVyU3R5bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0RTU3MTcxMzEzMjc2MjAwQ0Y4
NUFGIC8qIFJlbmRlclNWR0FsbEluT25lLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKaW5kZXggZTAwMTUwM2QxNzI4M2UwN2ExN2Q2NTZj
NjYwMWExMjJmM2ZlMzI4NC4uYjIzNzRiMDY5NzMyNzA0ZTU0ZmQ5YTc2ZWZmYjZkOGEwNzA5NWQy
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCkBAIC00NTcsNyAr
NDU3LDYgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzdWJ0cmVlSGFzQ2hhbmdlZCgpCiB7CiAg
ICAgQVNTRVJUKGlzVGV4dEZpZWxkKCkpOwogICAgIEFTU0VSVChyZW5kZXJlcigpKTsKLSAgICBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUqIHJlbmRlclRleHRDb250cm9sID0gdG9SZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmUocmVuZGVyZXIoKSk7CiAKICAgICBib29sIHdhc0NoYW5nZWQg
PSB3YXNDaGFuZ2VkU2luY2VMYXN0Rm9ybUNvbnRyb2xDaGFuZ2VFdmVudCgpOwogICAgIHNldENo
YW5nZWRTaW5jZUxhc3RGb3JtQ29udHJvbENoYW5nZUV2ZW50KHRydWUpOwpAQCAtNDczLDEyICs0
NzIsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnN1YnRyZWVIYXNDaGFuZ2VkKCkKICAgICAv
LyBSZWNhbGMgZm9yIDppbnZhbGlkIGFuZCBoYXNVbmFjY2VwdGFibGVWYWx1ZSgpIGNoYW5nZS4K
ICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAKLSAgICBpZiAoY2FuY2VsQnV0dG9uRWxlbWVu
dCgpKQotICAgICAgICByZW5kZXJUZXh0Q29udHJvbC0+dXBkYXRlQ2FuY2VsQnV0dG9uVmlzaWJp
bGl0eSgpOwotCi0gICAgLy8gSWYgdGhlIGluY3JlbWVudGFsIGF0dHJpYnV0ZSBpcyBzZXQsIHRo
ZW4gZGlzcGF0Y2ggdGhlIHNlYXJjaCBldmVudAotICAgIGlmIChzZWFyY2hFdmVudHNTaG91bGRC
ZURpc3BhdGNoZWQoKSAmJiBpc1NlYXJjaEZpZWxkKCkgJiYgbV9pbnB1dFR5cGUpCi0gICAgICAg
IHN0YXRpY19jYXN0PFNlYXJjaElucHV0VHlwZSo+KG1faW5wdXRUeXBlLmdldCgpKS0+c3RhcnRT
ZWFyY2hFdmVudFRpbWVyKCk7CisgICAgbV9pbnB1dFR5cGUtPnN1YnRyZWVIYXNDaGFuZ2VkKCk7
CiAKICAgICBpZiAoIXdhc0NoYW5nZWQgJiYgZm9jdXNlZCgpKSB7CiAgICAgICAgIGlmIChGcmFt
ZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKQpAQCAtOTcyLDExICs5NjYsNiBAQCB2b2lk
IEhUTUxJbnB1dEVsZW1lbnQ6OnNldFBsYWNlaG9sZGVyKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAg
ICAgc2V0QXR0cmlidXRlKHBsYWNlaG9sZGVyQXR0ciwgdmFsdWUpOwogfQogCi1ib29sIEhUTUxJ
bnB1dEVsZW1lbnQ6OnNlYXJjaEV2ZW50c1Nob3VsZEJlRGlzcGF0Y2hlZCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGhhc0F0dHJpYnV0ZShpbmNyZW1lbnRhbEF0dHIpOwotfQotCiB2b2lkIEhUTUxJ
bnB1dEVsZW1lbnQ6OnNldFZhbHVlRnJvbVJlbmRlcmVyKGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7
CiAgICAgLy8gRmlsZSB1cGxvYWQgY29udHJvbHMgd2lsbCBuZXZlciB1c2UgdGhpcy4KQEAgLTEz
MTgsOSArMTMwNyw3IEBAIGJvb2wgSFRNTElucHV0RWxlbWVudDo6aXNSZXF1aXJlZEZvcm1Db250
cm9sKCkgY29uc3QKIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjphZGRTZWFyY2hSZXN1bHQoKQog
ewotICAgIEFTU0VSVChpc1NlYXJjaEZpZWxkKCkpOwotICAgIGlmIChyZW5kZXJlcigpKQotICAg
ICAgICB0b1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShyZW5kZXJlcigpKS0+YWRkU2VhcmNo
UmVzdWx0KCk7CisgICAgbV9pbnB1dFR5cGUtPmFkZFNlYXJjaFJlc3VsdCgpOwogfQogCiB2b2lk
IEhUTUxJbnB1dEVsZW1lbnQ6Om9uU2VhcmNoKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTElucHV0RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRF
bGVtZW50LmgKaW5kZXggMDVkNTA4NDkzNDcxOWI3NTYwZTVjZWMwODhkZTNiZjA4MjA1N2Q2Yy4u
OTgxNDlkNDUzMGFmNWEwZGNmNmFhZmFkZTdlNzY5ODBhMDY5MDFiNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKQEAgLTIyNiw3ICsyMjYsNiBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIGFkZFNlYXJjaFJlc3VsdCgpOwogICAgIHZvaWQgb25TZWFyY2goKTsKLSAgICBib29s
IHNlYXJjaEV2ZW50c1Nob3VsZEJlRGlzcGF0Y2hlZCgpIGNvbnN0OwogCiAjaWYgRU5BQkxFKERB
VEFMSVNUKQogICAgIEhUTUxFbGVtZW50KiBsaXN0KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0
VHlwZS5jcHAKaW5kZXggZGZjNTBlMDBiZDhhYjBkMjdhZjNjNTlmYjQ0YTUxZjEyMDY4ODc5Ny4u
ZGFlMDNmM2NjMjZkMWFhMjAzZjFiZTZkNWU3NDVjOWExZDRlOGRhNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SW5wdXRUeXBlLmNwcApAQCAtNTIzLDYgKzUyMywxMCBAQCB2b2lkIElucHV0VHlwZTo6YWNjZXNz
S2V5QWN0aW9uKGJvb2wpCiAgICAgZWxlbWVudCgpLT5mb2N1cyhmYWxzZSk7CiB9CiAKK3ZvaWQg
SW5wdXRUeXBlOjphZGRTZWFyY2hSZXN1bHQoKQoreworfQorCiB2b2lkIElucHV0VHlwZTo6YXR0
YWNoKCkKIHsKIH0KQEAgLTg1Miw2ICs4NTYsMTAgQEAgdm9pZCBJbnB1dFR5cGU6OnJlYWRvbmx5
QXR0cmlidXRlQ2hhbmdlZCgpCiB7CiB9CiAKK3ZvaWQgSW5wdXRUeXBlOjpzdWJ0cmVlSGFzQ2hh
bmdlZCgpCit7Cit9CisKIFN0cmluZyBJbnB1dFR5cGU6OmRlZmF1bHRUb29sVGlwKCkgY29uc3QK
IHsKICAgICByZXR1cm4gU3RyaW5nKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0lucHV0VHlwZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuaAppbmRleCAzODYw
NTFmYWNiNzEwYTZiNTZiZGI3YThmMGE1OTk3YzYzNTFiMjAwLi5iNjhkOTdmNWQ2NDUzNTViNzEw
NWM5ZjQ4MTY2ODI3M2Y0OGE0M2Y3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0lu
cHV0VHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmgKQEAgLTIwMCw3
ICsyMDAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUJsdXJFdmVudCgpOwog
ICAgIHZpcnR1YWwgdm9pZCBhY2Nlc3NLZXlBY3Rpb24oYm9vbCBzZW5kTW91c2VFdmVudHMpOwog
ICAgIHZpcnR1YWwgYm9vbCBjYW5CZVN1Y2Nlc3NmdWxTdWJtaXRCdXR0b24oKTsKLQorICAgIHZp
cnR1YWwgdm9pZCBzdWJ0cmVlSGFzQ2hhbmdlZCgpOwogCiAgICAgLy8gU2hhZG93IHRyZWUgaGFu
ZGxpbmcKIApAQCAtMjIyLDYgKzIyMiw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBy
ZW5kZXJlcklzTmVlZGVkKCk7CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRl
cmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQg
YWRkU2VhcmNoUmVzdWx0KCk7CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwogICAgIHZpcnR1
YWwgdm9pZCBkZXRhY2goKTsKICAgICB2aXJ0dWFsIHZvaWQgbWluT3JNYXhBdHRyaWJ1dGVDaGFu
Z2VkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1NlYXJjaElucHV0VHlwZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1NlYXJjaElucHV0VHlwZS5jcHAKaW5kZXggNmY1MDBk
YWYzZjdiNWYxZTA1YmQ0YTJkMGIyZjllZTQ3YzNiMDRhNC4uOTU4ODc4Y2VkMjcwNDk4MTcyN2Nh
NTAxY2E3NDkyYTc5YTNhMTgwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9TZWFy
Y2hJbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvU2VhcmNoSW5wdXRUeXBl
LmNwcApAQCAtMzIsMTQgKzMyLDE3IEBACiAjaW5jbHVkZSAiU2VhcmNoSW5wdXRUeXBlLmgiCiAK
ICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAj
aW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgotI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZS5oIgorI2luY2x1ZGUgIlJlbmRlclNlYXJjaEZpZWxkLmgiCiAjaW5jbHVkZSAiU2hh
ZG93Um9vdC5oIgogI2luY2x1ZGUgIlRleHRDb250cm9sSW5uZXJFbGVtZW50cy5oIgogI2luY2x1
ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAordXNpbmcgbmFt
ZXNwYWNlIEhUTUxOYW1lczsKKwogaW5saW5lIFNlYXJjaElucHV0VHlwZTo6U2VhcmNoSW5wdXRU
eXBlKEhUTUxJbnB1dEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgOiBCYXNlVGV4dElucHV0VHlwZShl
bGVtZW50KQogICAgICwgbV9zZWFyY2hFdmVudFRpbWVyKHRoaXMsICZTZWFyY2hJbnB1dFR5cGU6
OnNlYXJjaEV2ZW50VGltZXJGaXJlZCkKQEAgLTUxLDYgKzU0LDE3IEBAIFBhc3NPd25QdHI8SW5w
dXRUeXBlPiBTZWFyY2hJbnB1dFR5cGU6OmNyZWF0ZShIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50
KQogICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2VhcmNoSW5wdXRUeXBlKGVsZW1lbnQpKTsKIH0K
IAordm9pZCBTZWFyY2hJbnB1dFR5cGU6OmFkZFNlYXJjaFJlc3VsdCgpCit7CisgICAgaWYgKFJl
bmRlck9iamVjdCogcmVuZGVyZXIgPSBlbGVtZW50KCktPnJlbmRlcmVyKCkpCisgICAgICAgIHRv
UmVuZGVyU2VhcmNoRmllbGQocmVuZGVyZXIpLT5hZGRTZWFyY2hSZXN1bHQoKTsKK30KKworUmVu
ZGVyT2JqZWN0KiBTZWFyY2hJbnB1dFR5cGU6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBh
cmVuYSwgUmVuZGVyU3R5bGUqKSBjb25zdAoreworICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5k
ZXJTZWFyY2hGaWVsZChlbGVtZW50KCkpOworfQorCiBjb25zdCBBdG9taWNTdHJpbmcmIFNlYXJj
aElucHV0VHlwZTo6Zm9ybUNvbnRyb2xUeXBlKCkgY29uc3QKIHsKICAgICByZXR1cm4gSW5wdXRU
eXBlTmFtZXM6OnNlYXJjaCgpOwpAQCAtMTUxLDUgKzE2NSwxOSBAQCB2b2lkIFNlYXJjaElucHV0
VHlwZTo6c2VhcmNoRXZlbnRUaW1lckZpcmVkKFRpbWVyPFNlYXJjaElucHV0VHlwZT4qKQogICAg
IGVsZW1lbnQoKS0+b25TZWFyY2goKTsKIH0KIAorYm9vbCBTZWFyY2hJbnB1dFR5cGU6OnNlYXJj
aEV2ZW50c1Nob3VsZEJlRGlzcGF0Y2hlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGVsZW1lbnQo
KS0+aGFzQXR0cmlidXRlKGluY3JlbWVudGFsQXR0cik7Cit9CisKK3ZvaWQgU2VhcmNoSW5wdXRU
eXBlOjpzdWJ0cmVlSGFzQ2hhbmdlZCgpCit7CisgICAgaWYgKG1fY2FuY2VsQnV0dG9uLmdldCgp
KQorICAgICAgICB0b1JlbmRlclNlYXJjaEZpZWxkKGVsZW1lbnQoKS0+cmVuZGVyZXIoKSktPnVw
ZGF0ZUNhbmNlbEJ1dHRvblZpc2liaWxpdHkoKTsKKworICAgIC8vIElmIHRoZSBpbmNyZW1lbnRh
bCBhdHRyaWJ1dGUgaXMgc2V0LCB0aGVuIGRpc3BhdGNoIHRoZSBzZWFyY2ggZXZlbnQKKyAgICBp
ZiAoc2VhcmNoRXZlbnRzU2hvdWxkQmVEaXNwYXRjaGVkKCkpCisgICAgICAgIHN0YXJ0U2VhcmNo
RXZlbnRUaW1lcigpOworfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL1NlYXJjaElucHV0VHlwZS5oIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9TZWFyY2hJbnB1dFR5cGUuaAppbmRleCBhYjE5MTAzYWZkZmFlOGU1NTY2N2JmNGNlNDEzMmZi
ODgwNWI4MjI1Li5lY2UzNWEyNTlmMDgxZTA3YjQwZDQ3Y2E3N2MyODgxNjI1NWJmNTVkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1NlYXJjaElucHV0VHlwZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvU2VhcmNoSW5wdXRUeXBlLmgKQEAgLTQzLDExICs0MywxMiBAQCBjbGFz
cyBTZWFyY2hJbnB1dFR5cGUgOiBwdWJsaWMgQmFzZVRleHRJbnB1dFR5cGUgewogcHVibGljOgog
ICAgIHN0YXRpYyBQYXNzT3duUHRyPElucHV0VHlwZT4gY3JlYXRlKEhUTUxJbnB1dEVsZW1lbnQq
KTsKIAotICAgIHZvaWQgc3RhcnRTZWFyY2hFdmVudFRpbWVyKCk7CiAgICAgdm9pZCBzdG9wU2Vh
cmNoRXZlbnRUaW1lcigpOwogCiBwcml2YXRlOgogICAgIFNlYXJjaElucHV0VHlwZShIVE1MSW5w
dXRFbGVtZW50Kik7CisgICAgdmlydHVhbCB2b2lkIGFkZFNlYXJjaFJlc3VsdCgpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSos
IFJlbmRlclN0eWxlKikgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNT
dHJpbmcmIGZvcm1Db250cm9sVHlwZSgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9v
bCBzaG91bGRSZXNwZWN0U3BlZWNoQXR0cmlidXRlKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBi
b29sIGlzU2VhcmNoRmllbGQoKSBjb25zdCBPVkVSUklERTsKQEAgLTU3LDggKzU4LDExIEBAIHBy
aXZhdGU6CiAgICAgdmlydHVhbCBIVE1MRWxlbWVudCogcmVzdWx0c0J1dHRvbkVsZW1lbnQoKSBj
b25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIEhUTUxFbGVtZW50KiBjYW5jZWxCdXR0b25FbGVt
ZW50KCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUtleWRvd25FdmVu
dChLZXlib2FyZEV2ZW50KikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHN1YnRyZWVIYXND
aGFuZ2VkKCk7CiAKICAgICB2b2lkIHNlYXJjaEV2ZW50VGltZXJGaXJlZChUaW1lcjxTZWFyY2hJ
bnB1dFR5cGU+Kik7CisgICAgYm9vbCBzZWFyY2hFdmVudHNTaG91bGRCZURpc3BhdGNoZWQoKSBj
b25zdDsKKyAgICB2b2lkIHN0YXJ0U2VhcmNoRXZlbnRUaW1lcigpOwogCiAgICAgUmVmUHRyPEhU
TUxFbGVtZW50PiBtX3Jlc3VsdHNCdXR0b247CiAgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBtX2Nh
bmNlbEJ1dHRvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRD
b250cm9sSW5uZXJFbGVtZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0
Q29udHJvbElubmVyRWxlbWVudHMuY3BwCmluZGV4IDEwMGRhZWI2NDdiOWQ3N2FhNGMxYjQzMTJi
YzljNWU1ZmIxODdhZDYuLjVkMjY4NDFjMjQzNTcwNTVmN2I1Yjk4YjcxODE4YjMwNTdjMWFkMTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJF
bGVtZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJ
bm5lckVsZW1lbnRzLmNwcApAQCAtMzcsNyArMzcsNyBAQAogI2luY2x1ZGUgIkhUTUxUZXh0QXJl
YUVsZW1lbnQuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgot
I2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oIgorI2luY2x1ZGUgIlJlbmRl
clNlYXJjaEZpZWxkLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNjcmlw
dENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgpAQCAtMTUxLDcgKzE1
MSw3IEBAIHZvaWQgU2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50
SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLm1vdXNlZG93bkV2ZW50ICYmIGV2ZW50LT5pc01vdXNlRXZlbnQoKSAmJiBzdGF0aWNfY2Fz
dDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CiAgICAgICAg
IGlucHV0LT5mb2N1cygpOwogICAgICAgICBpbnB1dC0+c2VsZWN0KCk7Ci0gICAgICAgIFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZSogcmVuZGVyZXIgPSB0b1JlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZShpbnB1dC0+cmVuZGVyZXIoKSk7CisgICAgICAgIFJlbmRlclNlYXJjaEZpZWxkKiBy
ZW5kZXJlciA9IHRvUmVuZGVyU2VhcmNoRmllbGQoaW5wdXQtPnJlbmRlcmVyKCkpOwogICAgICAg
ICBpZiAocmVuZGVyZXItPnBvcHVwSXNWaXNpYmxlKCkpCiAgICAgICAgICAgICByZW5kZXJlci0+
aGlkZVBvcHVwKCk7CiAgICAgICAgIGVsc2UgaWYgKGlucHV0LT5tYXhSZXN1bHRzKCkgPiAwKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zvcm1TdWJtaXNzaW9uLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHAKaW5kZXggZGEwMzk4N2VlNWU5
NDU0MTZmMTUxODQ0MjZkZTIxNmVkZGFjNTU5Ni4uMjQ3Y2U0MDY4YWQ1Y2ZhYjdmNjlkMjE1NTcw
MzEyOTAyNDMzNzdkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zvcm1TdWJt
aXNzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRm9ybVN1Ym1pc3Npb24uY3Bw
CkBAIC0xOTAsOCArMTkwLDcgQEAgUGFzc1JlZlB0cjxGb3JtU3VibWlzc2lvbj4gRm9ybVN1Ym1p
c3Npb246OmNyZWF0ZShIVE1MRm9ybUVsZW1lbnQqIGZvcm0sIGNvbnN0IEEKICAgICAgICAgICAg
IEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+
KGNvbnRyb2wpOwogICAgICAgICAgICAgaWYgKGlucHV0LT5pc1RleHRGaWVsZCgpKSB7CiAgICAg
ICAgICAgICAgICAgZm9ybVZhbHVlcy5hcHBlbmQocGFpcjxTdHJpbmcsIFN0cmluZz4oaW5wdXQt
Pm5hbWUoKS5zdHJpbmcoKSwgaW5wdXQtPnZhbHVlKCkpKTsKLSAgICAgICAgICAgICAgICBpZiAo
aW5wdXQtPmlzU2VhcmNoRmllbGQoKSkKLSAgICAgICAgICAgICAgICAgICAgaW5wdXQtPmFkZFNl
YXJjaFJlc3VsdCgpOworICAgICAgICAgICAgICAgIGlucHV0LT5hZGRTZWFyY2hSZXN1bHQoKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChpbnB1dC0+aXNQYXNzd29yZEZpZWxkKCkg
JiYgIWlucHV0LT52YWx1ZSgpLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBjb250YWluc1Bh
c3N3b3JkRGF0YSA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU2VhcmNoRmllbGQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNl
YXJjaEZpZWxkLmNwcAppbmRleCA4NDhmYzIxMTk3YzJhN2QyNGYyNjQ4ZGY3MDIwNTI5ZjNjODgw
ZDNiLi4yNzA0Y2RjMDM4ZmRlMjhlZDJjOTQzZjlmM2YzNDcyMzZhZDRkYzUzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAKQEAgLTIyLDcgKzIy
LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lLmgiCisjaW5jbHVkZSAiUmVuZGVyU2VhcmNoRmllbGQuaCIKIAogI2lu
Y2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIK
QEAgLTUxLDM1ICs1MSwxOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFj
ZSBIVE1MTmFtZXM7CiAKLVZpc2libGVQb3NpdGlvbiBSZW5kZXJUZXh0Q29udHJvbElubmVyQmxv
Y2s6OnBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KQotewotICAgIExh
eW91dFBvaW50IGNvbnRlbnRzUG9pbnQocG9pbnQpOwotCi0gICAgLy8gTXVsdGlsaW5lIHRleHQg
Y29udHJvbHMgaGF2ZSB0aGUgc2Nyb2xsIG9uIHNoYWRvd0FuY2VzdG9yTm9kZSwgc28gd2UgbmVl
ZCB0byB0YWtlIHRoYXQKLSAgICAvLyBpbnRvIGFjY291bnQgaGVyZS4KLSAgICBpZiAobV9tdWx0
aUxpbmUpIHsKLSAgICAgICAgUmVuZGVyVGV4dENvbnRyb2wqIHJlbmRlcmVyID0gdG9SZW5kZXJU
ZXh0Q29udHJvbChub2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpLT5yZW5kZXJlcigpKTsKLSAg
ICAgICAgaWYgKHJlbmRlcmVyLT5oYXNPdmVyZmxvd0NsaXAoKSkKLSAgICAgICAgICAgIGNvbnRl
bnRzUG9pbnQgKz0gcmVuZGVyZXItPnNjcm9sbGVkQ29udGVudE9mZnNldCgpOwotICAgIH0KLQot
ICAgIHJldHVybiBSZW5kZXJCbG9jazo6cG9zaXRpb25Gb3JQb2ludChjb250ZW50c1BvaW50KTsK
LX0KLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1SZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShOb2RlKiBub2RlKQotICAg
IDogUmVuZGVyVGV4dENvbnRyb2wobm9kZSkKK1JlbmRlclNlYXJjaEZpZWxkOjpSZW5kZXJTZWFy
Y2hGaWVsZChOb2RlKiBub2RlKQorICAgIDogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKG5v
ZGUpCiAgICAgLCBtX3NlYXJjaFBvcHVwSXNWaXNpYmxlKGZhbHNlKQotICAgICwgbV9zaG91bGRE
cmF3Q2Fwc0xvY2tJbmRpY2F0b3IoZmFsc2UpCi0gICAgLCBtX2Rlc2lyZWRJbm5lclRleHRIZWln
aHQoLTEpCiAgICAgLCBtX3NlYXJjaFBvcHVwKDApCiB7CiAgICAgQVNTRVJUKG5vZGUtPmlzSFRN
TEVsZW1lbnQoKSk7CiAgICAgQVNTRVJUKG5vZGUtPnRvSW5wdXRFbGVtZW50KCkpOworICAgIEFT
U0VSVChub2RlLT50b0lucHV0RWxlbWVudCgpLT5pc1NlYXJjaEZpZWxkKCkpOwogfQogCi1SZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6On5SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUoKQor
UmVuZGVyU2VhcmNoRmllbGQ6On5SZW5kZXJTZWFyY2hGaWVsZCgpCiB7CiAgICAgaWYgKG1fc2Vh
cmNoUG9wdXApIHsKICAgICAgICAgbV9zZWFyY2hQb3B1cC0+cG9wdXBNZW51KCktPmRpc2Nvbm5l
Y3RDbGllbnQoKTsKQEAgLTg3LDM4ICs3MSwxNyBAQCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmU6On5SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUoKQogICAgIH0KIH0KIAotaW5saW5lIEhU
TUxFbGVtZW50KiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNvbnRhaW5lckVsZW1lbnQo
KSBjb25zdAotewotICAgIHJldHVybiBpbnB1dEVsZW1lbnQoKS0+Y29udGFpbmVyRWxlbWVudCgp
OwotfQotCi1pbmxpbmUgSFRNTEVsZW1lbnQqIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6
aW5uZXJCbG9ja0VsZW1lbnQoKSBjb25zdAotewotICAgIHJldHVybiBpbnB1dEVsZW1lbnQoKS0+
aW5uZXJCbG9ja0VsZW1lbnQoKTsKLX0KLQotaW5saW5lIEhUTUxFbGVtZW50KiBSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmU6OmlubmVyU3BpbkJ1dHRvbkVsZW1lbnQoKSBjb25zdAotewotICAg
IHJldHVybiBpbnB1dEVsZW1lbnQoKS0+aW5uZXJTcGluQnV0dG9uRWxlbWVudCgpOwotfQotCi1p
bmxpbmUgSFRNTEVsZW1lbnQqIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6cmVzdWx0c0J1
dHRvbkVsZW1lbnQoKSBjb25zdAoraW5saW5lIEhUTUxFbGVtZW50KiBSZW5kZXJTZWFyY2hGaWVs
ZDo6cmVzdWx0c0J1dHRvbkVsZW1lbnQoKSBjb25zdAogewogICAgIHJldHVybiBpbnB1dEVsZW1l
bnQoKS0+cmVzdWx0c0J1dHRvbkVsZW1lbnQoKTsKIH0KIAotaW5saW5lIEhUTUxFbGVtZW50KiBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNhbmNlbEJ1dHRvbkVsZW1lbnQoKSBjb25zdAor
aW5saW5lIEhUTUxFbGVtZW50KiBSZW5kZXJTZWFyY2hGaWVsZDo6Y2FuY2VsQnV0dG9uRWxlbWVu
dCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGlucHV0RWxlbWVudCgpLT5jYW5jZWxCdXR0b25FbGVt
ZW50KCk7CiB9CiAKLVJlbmRlclN0eWxlKiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnRl
eHRCYXNlU3R5bGUoKSBjb25zdAotewotICAgIEhUTUxFbGVtZW50KiBpbm5lckJsb2NrID0gaW5u
ZXJCbG9ja0VsZW1lbnQoKTsKLSAgICByZXR1cm4gaW5uZXJCbG9jayA/IGlubmVyQmxvY2stPnJl
bmRlcmVyKCktPnN0eWxlKCkgOiBzdHlsZSgpOwotfQotCi12b2lkIFJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZTo6YWRkU2VhcmNoUmVzdWx0KCkKK3ZvaWQgUmVuZGVyU2VhcmNoRmllbGQ6OmFk
ZFNlYXJjaFJlc3VsdCgpCiB7CiAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBpbnB1dEVs
ZW1lbnQoKTsKICAgICBpZiAoaW5wdXQtPm1heFJlc3VsdHMoKSA8PSAwKQpAQCAtMTQ5LDcgKzEx
Miw3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjphZGRTZWFyY2hSZXN1bHQo
KQogICAgIG1fc2VhcmNoUG9wdXAtPnNhdmVSZWNlbnRTZWFyY2hlcyhuYW1lLCBtX3JlY2VudFNl
YXJjaGVzKTsKIH0KIAotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNob3dQb3B1
cCgpCit2b2lkIFJlbmRlclNlYXJjaEZpZWxkOjpzaG93UG9wdXAoKQogewogICAgIGlmIChtX3Nl
YXJjaFBvcHVwSXNWaXNpYmxlKQogICAgICAgICByZXR1cm47CkBAIC0xNzgsMjU4ICsxNDEsMTMg
QEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNob3dQb3B1cCgpCiAgICAgbV9z
ZWFyY2hQb3B1cC0+cG9wdXBNZW51KCktPnNob3cocGl4ZWxTbmFwcGVkSW50UmVjdChhYnNvbHV0
ZUJvdW5kaW5nQm94UmVjdCgpKSwgZG9jdW1lbnQoKS0+dmlldygpLCAtMSk7CiB9CiAKLXZvaWQg
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpoaWRlUG9wdXAoKQordm9pZCBSZW5kZXJTZWFy
Y2hGaWVsZDo6aGlkZVBvcHVwKCkKIHsKICAgICBpZiAobV9zZWFyY2hQb3B1cCkKICAgICAgICAg
bV9zZWFyY2hQb3B1cC0+cG9wdXBNZW51KCktPmhpZGUoKTsKIH0KIAotdm9pZCBSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmU6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlv
dXRQb2ludCYgcGFpbnRPZmZzZXQpCi17Ci0gICAgUmVuZGVyVGV4dENvbnRyb2w6OnBhaW50KHBh
aW50SW5mbywgcGFpbnRPZmZzZXQpOwotCi0gICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWlu
dFBoYXNlQmxvY2tCYWNrZ3JvdW5kICYmIG1fc2hvdWxkRHJhd0NhcHNMb2NrSW5kaWNhdG9yKSB7
Ci0gICAgICAgIExheW91dFJlY3QgY29udGVudHNSZWN0ID0gY29udGVudEJveFJlY3QoKTsKLQot
ICAgICAgICAvLyBDZW50ZXIgdmVydGljYWxseSBsaWtlIHRoZSB0ZXh0LgotICAgICAgICBjb250
ZW50c1JlY3Quc2V0WSgoaGVpZ2h0KCkgLSBjb250ZW50c1JlY3QuaGVpZ2h0KCkpIC8gMik7Ci0K
LSAgICAgICAgLy8gQ29udmVydCB0aGUgcmVjdCBpbnRvIHRoZSBjb29yZHMgdXNlZCBmb3IgcGFp
bnRpbmcgdGhlIGNvbnRlbnQKLSAgICAgICAgY29udGVudHNSZWN0Lm1vdmVCeShwYWludE9mZnNl
dCArIGxvY2F0aW9uKCkpOwotICAgICAgICB0aGVtZSgpLT5wYWludENhcHNMb2NrSW5kaWNhdG9y
KHRoaXMsIHBhaW50SW5mbywgcGl4ZWxTbmFwcGVkSW50UmVjdChjb250ZW50c1JlY3QpKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsYXlvdXQoKQotewot
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVtb3ZlIHRoZSBoZWlnaHQtcmVsYXRlZCBoYWNrcyBp
biBsYXlvdXQoKSBhbmQKLSAgICAvLyBzdHlsZURpZENoYW5nZSgpLiBXZSBuZWVkIHRoZW0gYmVj
YXVzZQotICAgIC8vIC0gQ2VudGVyIHRoZSBpbm5lciBlbGVtZW50cyB2ZXJ0aWNhbGx5IGlmIHRo
ZSBpbnB1dCBoZWlnaHQgaXMgdGFsbGVyIHRoYW4KLSAgICAvLyAgIHRoZSBpbnRyaW5zaWMgaGVp
Z2h0IG9mIHRoZSBpbm5lciBlbGVtZW50cy4KLSAgICAvLyAtIFNocmluayB0aGUgaW5uZXIgZWxt
ZW50IGhlaWdodHMgaWYgdGhlIGlucHV0IGhlaWdodCBpcyBzYW1sbGVyIHRoYW4gdGhlCi0gICAg
Ly8gICBpbnRyaW5zaWMgaGVpZ2h0cyBvZiB0aGUgaW5uZXIgZWxlbWVudHMuCi0KLSAgICAvLyBX
ZSBkb24ndCBob25vciBwYWRkaW5ncyBhbmQgYm9yZGVycyBmb3IgdGV4dGZpZWxkcyB3aXRob3V0
IGRlY29yYXRpb25zCi0gICAgLy8gYW5kIHR5cGU9c2VhcmNoIGlmIHRoZSB0ZXh0IGhlaWdodCBp
cyB0YWxsZXIgdGhhbiB0aGUgY29udGVudEhlaWdodCgpCi0gICAgLy8gYmVjYXVzZSBvZiBjb21w
YWJpbGl0eS4KLQotICAgIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhmYWxzZSk7Ci0KLSAgICBS
ZW5kZXJCb3gqIGlubmVyVGV4dFJlbmRlcmVyID0gaW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJC
b3goKTsKLSAgICBBU1NFUlQoaW5uZXJUZXh0UmVuZGVyZXIpOwotICAgIFJlbmRlckJveCogaW5u
ZXJCbG9ja1JlbmRlcmVyID0gaW5uZXJCbG9ja0VsZW1lbnQoKSA/IGlubmVyQmxvY2tFbGVtZW50
KCktPnJlbmRlckJveCgpIDogMDsKLSAgICBIVE1MRWxlbWVudCogY29udGFpbmVyID0gY29udGFp
bmVyRWxlbWVudCgpOwotICAgIFJlbmRlckJveCogY29udGFpbmVyUmVuZGVyZXIgPSBjb250YWlu
ZXIgPyBjb250YWluZXItPnJlbmRlckJveCgpIDogMDsKLQotICAgIC8vIFNldCB0aGUgdGV4dCBi
bG9jayBoZWlnaHQKLSAgICBMYXlvdXRVbml0IGRlc2lyZWRIZWlnaHQgPSB0ZXh0QmxvY2tIZWln
aHQoKTsKLSAgICBMYXlvdXRVbml0IGN1cnJlbnRIZWlnaHQgPSBpbm5lclRleHRSZW5kZXJlci0+
aGVpZ2h0KCk7Ci0KLSAgICBMYXlvdXRVbml0IGhlaWdodExpbWl0ID0gKGlucHV0RWxlbWVudCgp
LT5pc1NlYXJjaEZpZWxkKCkgfHwgIWNvbnRhaW5lcikgPyBoZWlnaHQoKSA6IGNvbnRlbnRIZWln
aHQoKTsKLSAgICBpZiAoY3VycmVudEhlaWdodCA+IGhlaWdodExpbWl0KSB7Ci0gICAgICAgIGlm
IChkZXNpcmVkSGVpZ2h0ICE9IGN1cnJlbnRIZWlnaHQpCi0gICAgICAgICAgICBzZXROZWVkc0xh
eW91dCh0cnVlLCBNYXJrT25seVRoaXMpOwotCi0gICAgICAgIGlubmVyVGV4dFJlbmRlcmVyLT5z
dHlsZSgpLT5zZXRIZWlnaHQoTGVuZ3RoKGRlc2lyZWRIZWlnaHQsIEZpeGVkKSk7Ci0gICAgICAg
IG1fZGVzaXJlZElubmVyVGV4dEhlaWdodCA9IGRlc2lyZWRIZWlnaHQ7Ci0gICAgICAgIGlmIChp
bm5lckJsb2NrUmVuZGVyZXIpCi0gICAgICAgICAgICBpbm5lckJsb2NrUmVuZGVyZXItPnN0eWxl
KCktPnNldEhlaWdodChMZW5ndGgoZGVzaXJlZEhlaWdodCwgRml4ZWQpKTsKLSAgICB9Ci0gICAg
Ly8gVGhlIGNvbnRhaW5lciBtaWdodCBiZSB0YWxsZXIgYmVjYXVzZSBvZiBkZWNvcmF0aW9uIGVs
ZW1lbnRzLgotICAgIGlmIChjb250YWluZXJSZW5kZXJlcikgewotICAgICAgICBjb250YWluZXJS
ZW5kZXJlci0+bGF5b3V0SWZOZWVkZWQoKTsKLSAgICAgICAgTGF5b3V0VW5pdCBjb250YWluZXJI
ZWlnaHQgPSBjb250YWluZXJSZW5kZXJlci0+aGVpZ2h0KCk7Ci0gICAgICAgIGlmIChjb250YWlu
ZXJIZWlnaHQgPiBoZWlnaHRMaW1pdCkgewotICAgICAgICAgICAgY29udGFpbmVyUmVuZGVyZXIt
PnN0eWxlKCktPnNldEhlaWdodChMZW5ndGgoaGVpZ2h0TGltaXQsIEZpeGVkKSk7Ci0gICAgICAg
ICAgICBzZXROZWVkc0xheW91dCh0cnVlLCBNYXJrT25seVRoaXMpOwotICAgICAgICB9IGVsc2Ug
aWYgKGNvbnRhaW5lclJlbmRlcmVyLT5oZWlnaHQoKSA8IGNvbnRlbnRIZWlnaHQoKSkgewotICAg
ICAgICAgICAgY29udGFpbmVyUmVuZGVyZXItPnN0eWxlKCktPnNldEhlaWdodChMZW5ndGgoY29u
dGVudEhlaWdodCgpLCBGaXhlZCkpOwotICAgICAgICAgICAgc2V0TmVlZHNMYXlvdXQodHJ1ZSwg
TWFya09ubHlUaGlzKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjb250YWluZXJSZW5k
ZXJlci0+c3R5bGUoKS0+c2V0SGVpZ2h0KExlbmd0aChjb250YWluZXJIZWlnaHQsIEZpeGVkKSk7
Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgbmVlZCBhbm90aGVyIGxheW91dCBwYXNzLCB3ZSBoYXZl
IGNoYW5nZWQgb25lIG9mIGNoaWxkcmVuJ3MgaGVpZ2h0IHNvIHdlIG5lZWQgdG8gcmVsYXlvdXQg
dGhlbS4KLSAgICBpZiAobmVlZHNMYXlvdXQoKSkKLSAgICAgICAgUmVuZGVyQmxvY2s6OmxheW91
dEJsb2NrKHRydWUpOwotCi0gICAgLy8gQ2VudGVyIHRoZSBjaGlsZCBibG9jayB2ZXJ0aWNhbGx5
Ci0gICAgY3VycmVudEhlaWdodCA9IGlubmVyVGV4dFJlbmRlcmVyLT5oZWlnaHQoKTsKLSAgICBp
ZiAoIWNvbnRhaW5lciAmJiBjdXJyZW50SGVpZ2h0ICE9IGNvbnRlbnRIZWlnaHQoKSkgewotICAg
ICAgICBMYXlvdXRVbml0IGhlaWdodERpZmYgPSBjdXJyZW50SGVpZ2h0IC0gY29udGVudEhlaWdo
dCgpOwotICAgICAgICBpbm5lclRleHRSZW5kZXJlci0+c2V0WShpbm5lclRleHRSZW5kZXJlci0+
eSgpIC0gKGhlaWdodERpZmYgLyAyICsgbGF5b3V0TW9kKGhlaWdodERpZmYsIDIpKSk7Ci0gICAg
fSBlbHNlIGlmIChpbnB1dEVsZW1lbnQoKS0+aXNTZWFyY2hGaWVsZCgpICYmIGNvbnRhaW5lclJl
bmRlcmVyICYmIGNvbnRhaW5lclJlbmRlcmVyLT5oZWlnaHQoKSA+IGNvbnRlbnRIZWlnaHQoKSkg
ewotICAgICAgICAvLyBBIHF1aXJrIGZvciBmaW5kLWluLXBhZ2UgYm94IG9uIFNhZmFyaSBXaW5k
b3dzLgotICAgICAgICAvLyBodHRwOi8vd2Via2l0Lm9yZy9iLzYzMTU3Ci0gICAgICAgIExheW91
dFVuaXQgaGVpZ2h0RGlmZiA9IGNvbnRhaW5lclJlbmRlcmVyLT5oZWlnaHQoKSAtIGNvbnRlbnRI
ZWlnaHQoKTsKLSAgICAgICAgY29udGFpbmVyUmVuZGVyZXItPnNldFkoY29udGFpbmVyUmVuZGVy
ZXItPnkoKSAtIChoZWlnaHREaWZmIC8gMiArIGxheW91dE1vZChoZWlnaHREaWZmLCAyKSkpOwot
ICAgIH0KLQotICAgIC8vIElnbm9yZXMgdGhlIHBhZGRpbmdzIGZvciB0aGUgaW5uZXIgc3BpbiBi
dXR0b24uCi0gICAgaWYgKFJlbmRlckJveCogaW5uZXJTcGluQm94ID0gaW5uZXJTcGluQnV0dG9u
RWxlbWVudCgpID8gaW5uZXJTcGluQnV0dG9uRWxlbWVudCgpLT5yZW5kZXJCb3goKSA6IDApIHsK
LSAgICAgICAgUmVuZGVyQm94KiBwYXJlbnRCb3ggPSBpbm5lclNwaW5Cb3gtPnBhcmVudEJveCgp
OwotICAgICAgICBpZiAoY29udGFpbmVyUmVuZGVyZXIgJiYgIWNvbnRhaW5lclJlbmRlcmVyLT5z
dHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0gICAgICAgICAgICBpbm5lclNwaW5C
b3gtPnNldExvY2F0aW9uKExheW91dFBvaW50KC1wYWRkaW5nTGVmdCgpLCAtcGFkZGluZ1RvcCgp
KSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGlubmVyU3BpbkJveC0+c2V0TG9jYXRpb24o
TGF5b3V0UG9pbnQocGFyZW50Qm94LT53aWR0aCgpIC0gaW5uZXJTcGluQm94LT53aWR0aCgpICsg
cGFkZGluZ1JpZ2h0KCksIC1wYWRkaW5nVG9wKCkpKTsKLSAgICAgICAgaW5uZXJTcGluQm94LT5z
ZXRIZWlnaHQoaGVpZ2h0KCkgLSBib3JkZXJUb3AoKSAtIGJvcmRlckJvdHRvbSgpKTsKLSAgICB9
Ci0KLSAgICBIVE1MRWxlbWVudCogcGxhY2Vob2xkZXJFbGVtZW50ID0gaW5wdXRFbGVtZW50KCkt
PnBsYWNlaG9sZGVyRWxlbWVudCgpOwotICAgIGlmIChSZW5kZXJCb3gqIHBsYWNlaG9sZGVyQm94
ID0gcGxhY2Vob2xkZXJFbGVtZW50ID8gcGxhY2Vob2xkZXJFbGVtZW50LT5yZW5kZXJCb3goKSA6
IDApIHsKLSAgICAgICAgcGxhY2Vob2xkZXJCb3gtPnN0eWxlKCktPnNldFdpZHRoKExlbmd0aChp
bm5lclRleHRSZW5kZXJlci0+d2lkdGgoKSAtIHBsYWNlaG9sZGVyQm94LT5ib3JkZXJBbmRQYWRk
aW5nV2lkdGgoKSwgRml4ZWQpKTsKLSAgICAgICAgcGxhY2Vob2xkZXJCb3gtPnN0eWxlKCktPnNl
dEhlaWdodChMZW5ndGgoaW5uZXJUZXh0UmVuZGVyZXItPmhlaWdodCgpIC0gcGxhY2Vob2xkZXJC
b3gtPmJvcmRlckFuZFBhZGRpbmdIZWlnaHQoKSwgRml4ZWQpKTsKLSAgICAgICAgYm9vbCBwbGFj
ZWhvbGRlckJveEhhZExheW91dCA9IHBsYWNlaG9sZGVyQm94LT5ldmVySGFkTGF5b3V0KCk7Ci0g
ICAgICAgIHBsYWNlaG9sZGVyQm94LT5sYXlvdXRJZk5lZWRlZCgpOwotICAgICAgICBMYXlvdXRQ
b2ludCB0ZXh0T2Zmc2V0ID0gaW5uZXJUZXh0UmVuZGVyZXItPmxvY2F0aW9uKCk7Ci0gICAgICAg
IGlmIChpbm5lckJsb2NrRWxlbWVudCgpICYmIGlubmVyQmxvY2tFbGVtZW50KCktPnJlbmRlckJv
eCgpKQotICAgICAgICAgICAgdGV4dE9mZnNldCArPSB0b0xheW91dFNpemUoaW5uZXJCbG9ja0Vs
ZW1lbnQoKS0+cmVuZGVyQm94KCktPmxvY2F0aW9uKCkpOwotICAgICAgICBpZiAoY29udGFpbmVy
UmVuZGVyZXIpCi0gICAgICAgICAgICB0ZXh0T2Zmc2V0ICs9IHRvTGF5b3V0U2l6ZShjb250YWlu
ZXJSZW5kZXJlci0+bG9jYXRpb24oKSk7Ci0gICAgICAgIHBsYWNlaG9sZGVyQm94LT5zZXRMb2Nh
dGlvbih0ZXh0T2Zmc2V0KTsKLQotICAgICAgICBpZiAoIXBsYWNlaG9sZGVyQm94SGFkTGF5b3V0
ICYmIHBsYWNlaG9sZGVyQm94LT5jaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSkgewotICAg
ICAgICAgICAgLy8gVGhpcyBhc3N1bWVzIGEgc2hhZG93IHRyZWUgd2l0aG91dCBmbG9hdHMuIElm
IGZsb2F0cyBhcmUgYWRkZWQsIHRoZQotICAgICAgICAgICAgLy8gbG9naWMgc2hvdWxkIGJlIHNo
YXJlZCB3aXRoIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9ja0NoaWxkLgotICAgICAgICAgICAgcGxh
Y2Vob2xkZXJCb3gtPnJlcGFpbnQoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotYm9vbCBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBvaW50JiBwb2lu
dEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRl
c3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKLXsKLSAgICBpZiAoIVJlbmRlclRleHRDb250cm9sOjpu
b2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHBvaW50SW5Db250YWluZXIsIGFjY3VtdWxhdGVk
T2Zmc2V0LCBoaXRUZXN0QWN0aW9uKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8g
U2F5IHRoYXQgd2UgaGl0IHRoZSBpbm5lciB0ZXh0IGVsZW1lbnQgaWYKLSAgICAvLyAgLSB3ZSBo
aXQgYSBub2RlIGluc2lkZSB0aGUgaW5uZXIgdGV4dCBlbGVtZW50LAotICAgIC8vICAtIHdlIGhp
dCB0aGUgPGlucHV0PiBlbGVtZW50IChlLmcuIHdlJ3JlIG92ZXIgdGhlIGJvcmRlciBvciBwYWRk
aW5nKSwgb3IKLSAgICAvLyAgLSB3ZSBoaXQgcmVnaW9ucyBub3QgaW4gYW55IGRlY29yYXRpb24g
YnV0dG9ucy4KLSAgICBIVE1MRWxlbWVudCogY29udGFpbmVyID0gY29udGFpbmVyRWxlbWVudCgp
OwotICAgIGlmIChyZXN1bHQuaW5uZXJOb2RlKCktPmlzRGVzY2VuZGFudE9mKGlubmVyVGV4dEVs
ZW1lbnQoKSkgfHwgcmVzdWx0LmlubmVyTm9kZSgpID09IG5vZGUoKSB8fCAoY29udGFpbmVyICYm
IGNvbnRhaW5lciA9PSByZXN1bHQuaW5uZXJOb2RlKCkpKSB7Ci0gICAgICAgIExheW91dFBvaW50
IHBvaW50SW5QYXJlbnQgPSBwb2ludEluQ29udGFpbmVyOwotICAgICAgICBpZiAoY29udGFpbmVy
ICYmIGlubmVyQmxvY2tFbGVtZW50KCkpIHsKLSAgICAgICAgICAgIGlmIChpbm5lckJsb2NrRWxl
bWVudCgpLT5yZW5kZXJCb3goKSkKLSAgICAgICAgICAgICAgICBwb2ludEluUGFyZW50IC09IHRv
TGF5b3V0U2l6ZShpbm5lckJsb2NrRWxlbWVudCgpLT5yZW5kZXJCb3goKS0+bG9jYXRpb24oKSk7
Ci0gICAgICAgICAgICBpZiAoY29udGFpbmVyLT5yZW5kZXJCb3goKSkKLSAgICAgICAgICAgICAg
ICBwb2ludEluUGFyZW50IC09IHRvTGF5b3V0U2l6ZShjb250YWluZXItPnJlbmRlckJveCgpLT5s
b2NhdGlvbigpKTsKLSAgICAgICAgfQotICAgICAgICBoaXRJbm5lclRleHRFbGVtZW50KHJlc3Vs
dCwgcG9pbnRJblBhcmVudCwgYWNjdW11bGF0ZWRPZmZzZXQpOwotICAgIH0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnN0eWxlRGlkQ2hh
bmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCi17
Ci0gICAgbV9kZXNpcmVkSW5uZXJUZXh0SGVpZ2h0ID0gLTE7Ci0gICAgUmVuZGVyVGV4dENvbnRy
b2w6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKLQotICAgIC8vIFdlIG1heSBoYXZl
IHNldCB0aGUgd2lkdGggYW5kIHRoZSBoZWlnaHQgaW4gdGhlIG9sZCBzdHlsZSBpbiBsYXlvdXQo
KS4KLSAgICAvLyBSZXNldCB0aGVtIG5vdyB0byBhdm9pZCBnZXR0aW5nIGEgc3B1cmlvdXMgbGF5
b3V0IGhpbnQuCi0gICAgSFRNTEVsZW1lbnQqIGlubmVyQmxvY2sgPSBpbm5lckJsb2NrRWxlbWVu
dCgpOwotICAgIGlmIChSZW5kZXJPYmplY3QqIGlubmVyQmxvY2tSZW5kZXJlciA9IGlubmVyQmxv
Y2sgPyBpbm5lckJsb2NrLT5yZW5kZXJlcigpIDogMCkgewotICAgICAgICBpbm5lckJsb2NrUmVu
ZGVyZXItPnN0eWxlKCktPnNldEhlaWdodChMZW5ndGgoKSk7Ci0gICAgICAgIGlubmVyQmxvY2tS
ZW5kZXJlci0+c3R5bGUoKS0+c2V0V2lkdGgoTGVuZ3RoKCkpOwotICAgIH0KLSAgICBIVE1MRWxl
bWVudCogY29udGFpbmVyID0gY29udGFpbmVyRWxlbWVudCgpOwotICAgIGlmIChSZW5kZXJPYmpl
Y3QqIGNvbnRhaW5lclJlbmRlcmVyID0gY29udGFpbmVyID8gY29udGFpbmVyLT5yZW5kZXJlcigp
IDogMCkgewotICAgICAgICBjb250YWluZXJSZW5kZXJlci0+c3R5bGUoKS0+c2V0SGVpZ2h0KExl
bmd0aCgpKTsKLSAgICAgICAgY29udGFpbmVyUmVuZGVyZXItPnN0eWxlKCktPnNldFdpZHRoKExl
bmd0aCgpKTsKLSAgICB9Ci0gICAgaWYgKEhUTUxFbGVtZW50KiBwbGFjZWhvbGRlciA9IGlucHV0
RWxlbWVudCgpLT5wbGFjZWhvbGRlckVsZW1lbnQoKSkKLSAgICAgICAgcGxhY2Vob2xkZXItPnNl
dElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUZXh0T3ZlcmZsb3csIHRleHRTaG91bGRC
ZVRydW5jYXRlZCgpID8gQ1NTVmFsdWVFbGxpcHNpcyA6IENTU1ZhbHVlQ2xpcCk7Ci0gICAgc2V0
SGFzT3ZlcmZsb3dDbGlwKGZhbHNlKTsKLX0KLQotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmU6OmNhcHNMb2NrU3RhdGVNYXlIYXZlQ2hhbmdlZCgpCi17Ci0gICAgaWYgKCFub2RlKCkg
fHwgIWRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE9ubHkgZHJhdyB0aGUg
Y2FwcyBsb2NrIGluZGljYXRvciBpZiB0aGVzZSB0aGluZ3MgYXJlIHRydWU6Ci0gICAgLy8gMSkg
VGhlIGZpZWxkIGlzIGEgcGFzc3dvcmQgZmllbGQKLSAgICAvLyAyKSBUaGUgZnJhbWUgaXMgYWN0
aXZlCi0gICAgLy8gMykgVGhlIGVsZW1lbnQgaXMgZm9jdXNlZAotICAgIC8vIDQpIFRoZSBjYXBz
IGxvY2sgaXMgb24KLSAgICBib29sIHNob3VsZERyYXdDYXBzTG9ja0luZGljYXRvciA9IGZhbHNl
OwotCi0gICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpCi0gICAgICAg
IHNob3VsZERyYXdDYXBzTG9ja0luZGljYXRvciA9IGlucHV0RWxlbWVudCgpLT5pc1Bhc3N3b3Jk
RmllbGQoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBmcmFtZS0+
c2VsZWN0aW9uKCktPmlzRm9jdXNlZEFuZEFjdGl2ZSgpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICYmIGRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkgPT0gbm9kZSgpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIFBsYXRmb3JtS2V5Ym9hcmRF
dmVudDo6Y3VycmVudENhcHNMb2NrU3RhdGUoKTsKLQotICAgIGlmIChzaG91bGREcmF3Q2Fwc0xv
Y2tJbmRpY2F0b3IgIT0gbV9zaG91bGREcmF3Q2Fwc0xvY2tJbmRpY2F0b3IpIHsKLSAgICAgICAg
bV9zaG91bGREcmF3Q2Fwc0xvY2tJbmRpY2F0b3IgPSBzaG91bGREcmF3Q2Fwc0xvY2tJbmRpY2F0
b3I7Ci0gICAgICAgIHJlcGFpbnQoKTsKLSAgICB9Ci19Ci0KLWJvb2wgUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjpoYXNDb250cm9sQ2xpcCgpIGNvbnN0Ci17Ci0gICAgLy8gQXBwbHkgY29u
dHJvbCBjbGlwIGZvciB0ZXh0IGZpZWxkcyB3aXRoIGRlY29yYXRpb25zLgotICAgIHJldHVybiAh
IWNvbnRhaW5lckVsZW1lbnQoKTsKLX0KLQotTGF5b3V0UmVjdCBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6OmNvbnRyb2xDbGlwUmVjdChjb25zdCBMYXlvdXRQb2ludCYgYWRkaXRpb25hbE9m
ZnNldCkgY29uc3QKLXsKLSAgICBBU1NFUlQoaGFzQ29udHJvbENsaXAoKSk7Ci0gICAgTGF5b3V0
UmVjdCBjbGlwUmVjdCA9IHVuaW9uUmVjdChjb250ZW50Qm94UmVjdCgpLCBjb250YWluZXJFbGVt
ZW50KCktPnJlbmRlckJveCgpLT5mcmFtZVJlY3QoKSk7Ci0gICAgY2xpcFJlY3QubW92ZUJ5KGFk
ZGl0aW9uYWxPZmZzZXQpOwotICAgIHJldHVybiBjbGlwUmVjdDsKLX0KLQotZmxvYXQgUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lOjpnZXRBdmdDaGFyV2lkdGgoQXRvbWljU3RyaW5nIGZhbWls
eSkKLXsKLSAgICAvLyBTaW5jZSBMdWNpZGEgR3JhbmRlIGlzIHRoZSBkZWZhdWx0IGZvbnQsIHdl
IHdhbnQgdGhpcyB0byBtYXRjaCB0aGUgd2lkdGgKLSAgICAvLyBvZiBNUyBTaGVsbCBEbGcsIHRo
ZSBkZWZhdWx0IGZvbnQgZm9yIHRleHRhcmVhcyBpbiBGaXJlZm94LCBTYWZhcmkgV2luIGFuZAot
ICAgIC8vIElFIGZvciBzb21lIGVuY29kaW5ncyAoaW4gSUUsIHRoZSBkZWZhdWx0IGZvbnQgaXMg
ZW5jb2Rpbmcgc3BlY2lmaWMpLgotICAgIC8vIDkwMSBpcyB0aGUgYXZnQ2hhcldpZHRoIHZhbHVl
IGluIHRoZSBPUy8yIHRhYmxlIGZvciBNUyBTaGVsbCBEbGcuCi0gICAgaWYgKGZhbWlseSA9PSBB
dG9taWNTdHJpbmcoIkx1Y2lkYSBHcmFuZGUiKSkKLSAgICAgICAgcmV0dXJuIHNjYWxlRW1Ub1Vu
aXRzKDkwMSk7Ci0KLSAgICByZXR1cm4gUmVuZGVyVGV4dENvbnRyb2w6OmdldEF2Z0NoYXJXaWR0
aChmYW1pbHkpOwotfQotCi1MYXlvdXRVbml0IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6
cHJlZmVycmVkQ29udGVudFdpZHRoKGZsb2F0IGNoYXJXaWR0aCkgY29uc3QKLXsKLSAgICBpbnQg
ZmFjdG9yOwotICAgIGJvb2wgaW5jbHVkZXNEZWNvcmF0aW9uID0gaW5wdXRFbGVtZW50KCktPnNp
emVTaG91bGRJbmNsdWRlRGVjb3JhdGlvbihmYWN0b3IpOwotICAgIGlmIChmYWN0b3IgPD0gMCkK
LSAgICAgICAgZmFjdG9yID0gMjA7Ci0KLSAgICBMYXlvdXRVbml0IHJlc3VsdCA9IHN0YXRpY19j
YXN0PExheW91dFVuaXQ+KGNlaWxlZExheW91dFVuaXQoY2hhcldpZHRoICogZmFjdG9yKSk7Ci0K
LSAgICBmbG9hdCBtYXhDaGFyV2lkdGggPSAwLmY7Ci0gICAgQXRvbWljU3RyaW5nIGZhbWlseSA9
IHN0eWxlKCktPmZvbnQoKS5mYW1pbHkoKS5mYW1pbHkoKTsKLSAgICAvLyBTaW5jZSBMdWNpZGEg
R3JhbmRlIGlzIHRoZSBkZWZhdWx0IGZvbnQsIHdlIHdhbnQgdGhpcyB0byBtYXRjaCB0aGUgd2lk
dGgKLSAgICAvLyBvZiBNUyBTaGVsbCBEbGcsIHRoZSBkZWZhdWx0IGZvbnQgZm9yIHRleHRhcmVh
cyBpbiBGaXJlZm94LCBTYWZhcmkgV2luIGFuZAotICAgIC8vIElFIGZvciBzb21lIGVuY29kaW5n
cyAoaW4gSUUsIHRoZSBkZWZhdWx0IGZvbnQgaXMgZW5jb2Rpbmcgc3BlY2lmaWMpLgotICAgIC8v
IDQwMjcgaXMgdGhlICh4TWF4IC0geE1pbikgdmFsdWUgaW4gdGhlICJoZWFkIiBmb250IHRhYmxl
IGZvciBNUyBTaGVsbCBEbGcuCi0gICAgaWYgKGZhbWlseSA9PSBBdG9taWNTdHJpbmcoIkx1Y2lk
YSBHcmFuZGUiKSkKLSAgICAgICAgbWF4Q2hhcldpZHRoID0gc2NhbGVFbVRvVW5pdHMoNDAyNyk7
Ci0gICAgZWxzZSBpZiAoaGFzVmFsaWRBdmdDaGFyV2lkdGgoZmFtaWx5KSkKLSAgICAgICAgbWF4
Q2hhcldpZHRoID0gcm91bmRmKHN0eWxlKCktPmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5tYXhDaGFy
V2lkdGgoKSk7Ci0KLSAgICAvLyBGb3IgdGV4dCBpbnB1dHMsIElFIGFkZHMgc29tZSBleHRyYSB3
aWR0aC4KLSAgICBpZiAobWF4Q2hhcldpZHRoID4gMC5mKQotICAgICAgICByZXN1bHQgKz0gbWF4
Q2hhcldpZHRoIC0gY2hhcldpZHRoOwotCi0gICAgaWYgKGluY2x1ZGVzRGVjb3JhdGlvbikgewot
ICAgICAgICBIVE1MRWxlbWVudCogc3BpbkJ1dHRvbiA9IGlubmVyU3BpbkJ1dHRvbkVsZW1lbnQo
KTsKLSAgICAgICAgaWYgKFJlbmRlckJveCogc3BpblJlbmRlcmVyID0gc3BpbkJ1dHRvbiA/IHNw
aW5CdXR0b24tPnJlbmRlckJveCgpIDogMCkgewotICAgICAgICAgICAgcmVzdWx0ICs9IHNwaW5S
ZW5kZXJlci0+Ym9yZGVyTGVmdCgpICsgc3BpblJlbmRlcmVyLT5ib3JkZXJSaWdodCgpICsKLSAg
ICAgICAgICAgICAgICAgIHNwaW5SZW5kZXJlci0+cGFkZGluZ0xlZnQoKSArIHNwaW5SZW5kZXJl
ci0+cGFkZGluZ1JpZ2h0KCk7Ci0gICAgICAgICAgICAvLyBTaW5jZSB0aGUgd2lkdGggb2Ygc3Bp
blJlbmRlcmVyIGlzIG5vdCBjYWxjdWxhdGVkIHlldCwgc3BpblJlbmRlcmVyLT53aWR0aCgpIHJl
dHVybnMgMC4KLSAgICAgICAgICAgIC8vIFNvIGNvbXB1dGVkU3R5bGUoKS0+d2lkdGgoKSBpcyB1
c2VkIGluc3RlYWQuCi0gICAgICAgICAgICByZXN1bHQgKz0gc3BpbkJ1dHRvbi0+Y29tcHV0ZWRT
dHlsZSgpLT53aWR0aCgpLnZhbHVlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi1MYXlvdXRVbml0IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y29t
cHV0ZUNvbnRyb2xIZWlnaHQoTGF5b3V0VW5pdCBsaW5lSGVpZ2h0LCBMYXlvdXRVbml0IG5vbkNv
bnRlbnRIZWlnaHQpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlclNlYXJjaEZpZWxkOjpjb21wdXRl
Q29udHJvbEhlaWdodChMYXlvdXRVbml0IGxpbmVIZWlnaHQsIExheW91dFVuaXQgbm9uQ29udGVu
dEhlaWdodCkgY29uc3QKIHsKICAgICBIVE1MRWxlbWVudCogcmVzdWx0c0J1dHRvbiA9IHJlc3Vs
dHNCdXR0b25FbGVtZW50KCk7CiAgICAgaWYgKFJlbmRlckJveCogcmVzdWx0c1JlbmRlcmVyID0g
cmVzdWx0c0J1dHRvbiA/IHJlc3VsdHNCdXR0b24tPnJlbmRlckJveCgpIDogMCkgewpAQCAtNDQ3
LDkgKzE2NSw5IEBAIExheW91dFVuaXQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjb21w
dXRlQ29udHJvbEhlaWdodChMYXlvdXRVbml0IGxpbmVIZWlnCiAgICAgcmV0dXJuIGxpbmVIZWln
aHQgKyBub25Db250ZW50SGVpZ2h0OwogfQogCi12b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZTo6dXBkYXRlRnJvbUVsZW1lbnQoKQordm9pZCBSZW5kZXJTZWFyY2hGaWVsZDo6dXBkYXRl
RnJvbUVsZW1lbnQoKQogewotICAgIFJlbmRlclRleHRDb250cm9sOjp1cGRhdGVGcm9tRWxlbWVu
dCgpOworICAgIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6dXBkYXRlRnJvbUVsZW1lbnQo
KTsKIAogICAgIGlmIChjYW5jZWxCdXR0b25FbGVtZW50KCkpCiAgICAgICAgIHVwZGF0ZUNhbmNl
bEJ1dHRvblZpc2liaWxpdHkoKTsKQEAgLTQ1OCw0NSArMTc2LDcgQEAgdm9pZCBSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmU6OnVwZGF0ZUZyb21FbGVtZW50KCkKICAgICAgICAgbV9zZWFyY2hQ
b3B1cC0+cG9wdXBNZW51KCktPnVwZGF0ZUZyb21FbGVtZW50KCk7CiB9CiAKLVBhc3NSZWZQdHI8
UmVuZGVyU3R5bGU+IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y3JlYXRlSW5uZXJUZXh0
U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUpIGNvbnN0Ci17Ci0gICAgUmVmUHRy
PFJlbmRlclN0eWxlPiB0ZXh0QmxvY2tTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsgICAK
LSAgICB0ZXh0QmxvY2tTdHlsZS0+aW5oZXJpdEZyb20oc3RhcnRTdHlsZSk7Ci0gICAgYWRqdXN0
SW5uZXJUZXh0U3R5bGUoc3RhcnRTdHlsZSwgdGV4dEJsb2NrU3R5bGUuZ2V0KCkpOwotCi0gICAg
dGV4dEJsb2NrU3R5bGUtPnNldFdoaXRlU3BhY2UoUFJFKTsKLSAgICB0ZXh0QmxvY2tTdHlsZS0+
c2V0V29yZFdyYXAoTm9ybWFsV29yZFdyYXApOwotICAgIHRleHRCbG9ja1N0eWxlLT5zZXRPdmVy
Zmxvd1goT0hJRERFTik7Ci0gICAgdGV4dEJsb2NrU3R5bGUtPnNldE92ZXJmbG93WShPSElEREVO
KTsKLSAgICB0ZXh0QmxvY2tTdHlsZS0+c2V0VGV4dE92ZXJmbG93KHRleHRTaG91bGRCZVRydW5j
YXRlZCgpID8gVGV4dE92ZXJmbG93RWxsaXBzaXMgOiBUZXh0T3ZlcmZsb3dDbGlwKTsKLQotICAg
IGlmIChtX2Rlc2lyZWRJbm5lclRleHRIZWlnaHQgPj0gMCkKLSAgICAgICAgdGV4dEJsb2NrU3R5
bGUtPnNldEhlaWdodChMZW5ndGgobV9kZXNpcmVkSW5uZXJUZXh0SGVpZ2h0LCBGaXhlZCkpOwot
ICAgIC8vIERvIG5vdCBhbGxvdyBsaW5lLWhlaWdodCB0byBiZSBzbWFsbGVyIHRoYW4gb3VyIGRl
ZmF1bHQuCi0gICAgaWYgKHRleHRCbG9ja1N0eWxlLT5mb250TWV0cmljcygpLmxpbmVTcGFjaW5n
KCkgPiBsaW5lSGVpZ2h0KHRydWUsIEhvcml6b250YWxMaW5lLCBQb3NpdGlvbk9mSW50ZXJpb3JM
aW5lQm94ZXMpKQotICAgICAgICB0ZXh0QmxvY2tTdHlsZS0+c2V0TGluZUhlaWdodChMZW5ndGgo
LTEwMC4wZiwgUGVyY2VudCkpOwotCi0gICAgdGV4dEJsb2NrU3R5bGUtPnNldERpc3BsYXkoQkxP
Q0spOwotCi0gICAgcmV0dXJuIHRleHRCbG9ja1N0eWxlLnJlbGVhc2UoKTsKLX0KLQotUGFzc1Jl
ZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjcmVhdGVJbm5l
ckJsb2NrU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUpIGNvbnN0Ci17Ci0gICAg
UmVmUHRyPFJlbmRlclN0eWxlPiBpbm5lckJsb2NrU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRl
KCk7Ci0gICAgaW5uZXJCbG9ja1N0eWxlLT5pbmhlcml0RnJvbShzdGFydFN0eWxlKTsKLQotICAg
IGlubmVyQmxvY2tTdHlsZS0+c2V0Qm94RmxleCgxKTsKLSAgICBpbm5lckJsb2NrU3R5bGUtPnNl
dERpc3BsYXkoQkxPQ0spOwotICAgIGlubmVyQmxvY2tTdHlsZS0+c2V0RGlyZWN0aW9uKExUUik7
Ci0KLSAgICAvLyBXZSBkb24ndCB3YW50IHRoZSBzaGFkb3cgZG9tIHRvIGJlIGVkaXRhYmxlLCBz
byB3ZSBzZXQgdGhpcyBibG9jayB0byByZWFkLW9ubHkgaW4gY2FzZSB0aGUgaW5wdXQgaXRzZWxm
IGlzIGVkaXRhYmxlLgotICAgIGlubmVyQmxvY2tTdHlsZS0+c2V0VXNlck1vZGlmeShSRUFEX09O
TFkpOwotCi0gICAgcmV0dXJuIGlubmVyQmxvY2tTdHlsZS5yZWxlYXNlKCk7Ci19Ci0KLXZvaWQg
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp1cGRhdGVDYW5jZWxCdXR0b25WaXNpYmlsaXR5
KCkgY29uc3QKK3ZvaWQgUmVuZGVyU2VhcmNoRmllbGQ6OnVwZGF0ZUNhbmNlbEJ1dHRvblZpc2li
aWxpdHkoKSBjb25zdAogewogICAgIFJlbmRlck9iamVjdCogY2FuY2VsQnV0dG9uUmVuZGVyZXIg
PSBjYW5jZWxCdXR0b25FbGVtZW50KCktPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFjYW5jZWxCdXR0
b25SZW5kZXJlcikKQEAgLTUxMiwyNCArMTkyLDE4IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjp1cGRhdGVDYW5jZWxCdXR0b25WaXNpYmlsaXR5KCkgY29uc3QKICAgICBjYW5j
ZWxCdXR0b25SZW5kZXJlci0+c2V0U3R5bGUoY2FuY2VsQnV0dG9uU3R5bGUpOwogfQogCi1FVmlz
aWJpbGl0eSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnZpc2liaWxpdHlGb3JDYW5jZWxC
dXR0b24oKSBjb25zdAorRVZpc2liaWxpdHkgUmVuZGVyU2VhcmNoRmllbGQ6OnZpc2liaWxpdHlG
b3JDYW5jZWxCdXR0b24oKSBjb25zdAogewogICAgIHJldHVybiAoc3R5bGUoKS0+dmlzaWJpbGl0
eSgpID09IEhJRERFTiB8fCBpbnB1dEVsZW1lbnQoKS0+dmFsdWUoKS5pc0VtcHR5KCkpID8gSElE
REVOIDogVklTSUJMRTsKIH0KIAotYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnRl
eHRTaG91bGRCZVRydW5jYXRlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRvY3VtZW50KCktPmZv
Y3VzZWROb2RlKCkgIT0gbm9kZSgpCi0gICAgICAgICYmIHN0eWxlKCktPnRleHRPdmVyZmxvdygp
ID09IFRleHRPdmVyZmxvd0VsbGlwc2lzOwotfQotCi1jb25zdCBBdG9taWNTdHJpbmcmIFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZTo6YXV0b3NhdmVOYW1lKCkgY29uc3QKK2NvbnN0IEF0b21p
Y1N0cmluZyYgUmVuZGVyU2VhcmNoRmllbGQ6OmF1dG9zYXZlTmFtZSgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKCkpLT5nZXRBdHRyaWJ1dGUoYXV0b3Nh
dmVBdHRyKTsKIH0KIAogLy8gUG9wdXBNZW51Q2xpZW50IG1ldGhvZHMKLXZvaWQgUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lOjp2YWx1ZUNoYW5nZWQodW5zaWduZWQgbGlzdEluZGV4LCBib29s
IGZpcmVFdmVudHMpCit2b2lkIFJlbmRlclNlYXJjaEZpZWxkOjp2YWx1ZUNoYW5nZWQodW5zaWdu
ZWQgbGlzdEluZGV4LCBib29sIGZpcmVFdmVudHMpCiB7CiAgICAgQVNTRVJUKHN0YXRpY19jYXN0
PGludD4obGlzdEluZGV4KSA8IGxpc3RTaXplKCkpOwogICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlu
cHV0ID0gaW5wdXRFbGVtZW50KCk7CkBAIC01NTEsNyArMjI1LDcgQEAgdm9pZCBSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmU6OnZhbHVlQ2hhbmdlZCh1bnNpZ25lZCBsaXN0SW5kZXgsIGJvb2wg
ZmlyZUV2ZW4KICAgICB9CiB9CiAKLVN0cmluZyBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6
Oml0ZW1UZXh0KHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKK1N0cmluZyBSZW5kZXJTZWFyY2hG
aWVsZDo6aXRlbVRleHQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAogewogICAgIGludCBzaXpl
ID0gbGlzdFNpemUoKTsKICAgICBpZiAoc2l6ZSA9PSAxKSB7CkBAIC01NjcsNDIgKzI0MSw0MiBA
QCBTdHJpbmcgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppdGVtVGV4dCh1bnNpZ25lZCBs
aXN0SW5kZXgpIGNvbnN0CiAgICAgcmV0dXJuIG1fcmVjZW50U2VhcmNoZXNbbGlzdEluZGV4IC0g
MV07CiB9CiAKLVN0cmluZyBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Oml0ZW1MYWJlbCh1
bnNpZ25lZCkgY29uc3QKK1N0cmluZyBSZW5kZXJTZWFyY2hGaWVsZDo6aXRlbUxhYmVsKHVuc2ln
bmVkKSBjb25zdAogewogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotU3RyaW5nIFJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZTo6aXRlbUljb24odW5zaWduZWQpIGNvbnN0CitTdHJpbmcgUmVu
ZGVyU2VhcmNoRmllbGQ6Oml0ZW1JY29uKHVuc2lnbmVkKSBjb25zdAogewogICAgIHJldHVybiBT
dHJpbmcoKTsKIH0KIAotYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Oml0ZW1Jc0Vu
YWJsZWQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAorYm9vbCBSZW5kZXJTZWFyY2hGaWVsZDo6
aXRlbUlzRW5hYmxlZCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0CiB7CiAgICAgIGlmICghbGlz
dEluZGV4IHx8IGl0ZW1Jc1NlcGFyYXRvcihsaXN0SW5kZXgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVBvcHVwTWVudVN0eWxlIFJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6aXRlbVN0eWxlKHVuc2lnbmVkKSBjb25zdAorUG9wdXBNZW51U3R5bGUg
UmVuZGVyU2VhcmNoRmllbGQ6Oml0ZW1TdHlsZSh1bnNpZ25lZCkgY29uc3QKIHsKICAgICByZXR1
cm4gbWVudVN0eWxlKCk7CiB9CiAKLVBvcHVwTWVudVN0eWxlIFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6bWVudVN0eWxlKCkgY29uc3QKK1BvcHVwTWVudVN0eWxlIFJlbmRlclNlYXJjaEZp
ZWxkOjptZW51U3R5bGUoKSBjb25zdAogewogICAgIHJldHVybiBQb3B1cE1lbnVTdHlsZShzdHls
ZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciksIHN0eWxlKCktPnZp
c2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciksIHN0eWxlKCkt
PmZvbnQoKSwgc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUsCiAgICAgICAgIHN0eWxl
KCktPmRpc3BsYXkoKSA9PSBOT05FLCBzdHlsZSgpLT50ZXh0SW5kZW50KCksIHN0eWxlKCktPmRp
cmVjdGlvbigpLCBpc092ZXJyaWRlKHN0eWxlKCktPnVuaWNvZGVCaWRpKCkpKTsKIH0KIAotaW50
IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y2xpZW50SW5zZXRMZWZ0KCkgY29uc3QKK2lu
dCBSZW5kZXJTZWFyY2hGaWVsZDo6Y2xpZW50SW5zZXRMZWZ0KCkgY29uc3QKIHsKICAgICAvLyBJ
bnNldCB0aGUgbWVudSBieSB0aGUgcmFkaXVzIG9mIHRoZSBjYXAgb24gdGhlIGxlZnQgc28gdGhh
dAogICAgIC8vIGl0IG9ubHkgcnVucyBhbG9uZyB0aGUgc3RyYWlnaHQgcGFydCBvZiB0aGUgYmV6
ZWwuCiAgICAgcmV0dXJuIGhlaWdodCgpIC8gMjsKIH0KIAotaW50IFJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZTo6Y2xpZW50SW5zZXRSaWdodCgpIGNvbnN0CitpbnQgUmVuZGVyU2VhcmNoRmll
bGQ6OmNsaWVudEluc2V0UmlnaHQoKSBjb25zdAogewogICAgIC8vIEluc2V0IHRoZSBtZW51IGJ5
IHRoZSByYWRpdXMgb2YgdGhlIGNhcCBvbiB0aGUgcmlnaHQgc28gdGhhdAogICAgIC8vIGl0IG9u
bHkgcnVucyBhbG9uZyB0aGUgc3RyYWlnaHQgcGFydCBvZiB0aGUgYmV6ZWwgKHVubGVzcyBpdCBu
ZWVkcwpAQCAtNjEwLDcgKzI4NCw3IEBAIGludCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6
OmNsaWVudEluc2V0UmlnaHQoKSBjb25zdAogICAgIHJldHVybiBoZWlnaHQoKSAvIDI7CiB9CiAK
LUxheW91dFVuaXQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjbGllbnRQYWRkaW5nTGVm
dCgpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlclNlYXJjaEZpZWxkOjpjbGllbnRQYWRkaW5nTGVm
dCgpIGNvbnN0CiB7CiAgICAgTGF5b3V0VW5pdCBwYWRkaW5nID0gcGFkZGluZ0xlZnQoKTsKICAg
ICBpZiAoUmVuZGVyQm94KiBib3ggPSBpbm5lckJsb2NrRWxlbWVudCgpID8gaW5uZXJCbG9ja0Vs
ZW1lbnQoKS0+cmVuZGVyQm94KCkgOiAwKQpAQCAtNjE4LDcgKzI5Miw3IEBAIExheW91dFVuaXQg
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjbGllbnRQYWRkaW5nTGVmdCgpIGNvbnN0CiAg
ICAgcmV0dXJuIHBhZGRpbmc7CiB9CiAKLUxheW91dFVuaXQgUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjpjbGllbnRQYWRkaW5nUmlnaHQoKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJTZWFy
Y2hGaWVsZDo6Y2xpZW50UGFkZGluZ1JpZ2h0KCkgY29uc3QKIHsKICAgICBMYXlvdXRVbml0IHBh
ZGRpbmcgPSBwYWRkaW5nUmlnaHQoKTsKICAgICBpZiAoUmVuZGVyQm94KiBjb250YWluZXJCb3gg
PSBjb250YWluZXJFbGVtZW50KCkgPyBjb250YWluZXJFbGVtZW50KCktPnJlbmRlckJveCgpIDog
MCkgewpAQCAtNjI4LDcgKzMwMiw3IEBAIExheW91dFVuaXQgUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjpjbGllbnRQYWRkaW5nUmlnaHQoKSBjb25zdAogICAgIHJldHVybiBwYWRkaW5nOwog
fQogCi1pbnQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsaXN0U2l6ZSgpIGNvbnN0Citp
bnQgUmVuZGVyU2VhcmNoRmllbGQ6Omxpc3RTaXplKCkgY29uc3QKIHsKICAgICAvLyBJZiB0aGVy
ZSBhcmUgbm8gcmVjZW50IHNlYXJjaGVzLCB0aGVuIG91ciBtZW51IHdpbGwgaGF2ZSAxICJObyBy
ZWNlbnQgc2VhcmNoZXMiIGl0ZW0uCiAgICAgaWYgKCFtX3JlY2VudFNlYXJjaGVzLnNpemUoKSkK
QEAgLTYzNywxMTEgKzMxMSw0OCBAQCBpbnQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjps
aXN0U2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fcmVjZW50U2VhcmNoZXMuc2l6ZSgpICsgMzsK
IH0KIAotaW50IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2VsZWN0ZWRJbmRleCgpIGNv
bnN0CitpbnQgUmVuZGVyU2VhcmNoRmllbGQ6OnNlbGVjdGVkSW5kZXgoKSBjb25zdAogewogICAg
IHJldHVybiAtMTsKIH0KIAotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnBvcHVw
RGlkSGlkZSgpCit2b2lkIFJlbmRlclNlYXJjaEZpZWxkOjpwb3B1cERpZEhpZGUoKQogewogICAg
IG1fc2VhcmNoUG9wdXBJc1Zpc2libGUgPSBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6Oml0ZW1Jc1NlcGFyYXRvcih1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0
Citib29sIFJlbmRlclNlYXJjaEZpZWxkOjppdGVtSXNTZXBhcmF0b3IodW5zaWduZWQgbGlzdElu
ZGV4KSBjb25zdAogewogICAgIC8vIFRoZSBzZXBhcmF0b3Igd2lsbCBiZSB0aGUgc2Vjb25kIHRv
IGxhc3QgaXRlbSBpbiBvdXIgbGlzdC4KICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihsaXN0
SW5kZXgpID09IChsaXN0U2l6ZSgpIC0gMik7CiB9CiAKLWJvb2wgUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjppdGVtSXNMYWJlbCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0Citib29sIFJl
bmRlclNlYXJjaEZpZWxkOjppdGVtSXNMYWJlbCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIGxpc3RJbmRleCA9PSAwOworICAgIHJldHVybiAhbGlzdEluZGV4OwogfQog
Ci1ib29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aXRlbUlzU2VsZWN0ZWQodW5zaWdu
ZWQpIGNvbnN0Citib29sIFJlbmRlclNlYXJjaEZpZWxkOjppdGVtSXNTZWxlY3RlZCh1bnNpZ25l
ZCkgY29uc3QKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjpzZXRUZXh0RnJvbUl0ZW0odW5zaWduZWQgbGlzdEluZGV4KQordm9pZCBS
ZW5kZXJTZWFyY2hGaWVsZDo6c2V0VGV4dEZyb21JdGVtKHVuc2lnbmVkIGxpc3RJbmRleCkKIHsK
ICAgICBpbnB1dEVsZW1lbnQoKS0+c2V0VmFsdWUoaXRlbVRleHQobGlzdEluZGV4KSk7CiB9CiAK
LUZvbnRTZWxlY3RvciogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpmb250U2VsZWN0b3Io
KSBjb25zdAorRm9udFNlbGVjdG9yKiBSZW5kZXJTZWFyY2hGaWVsZDo6Zm9udFNlbGVjdG9yKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gZG9jdW1lbnQoKS0+c3R5bGVSZXNvbHZlcigpLT5mb250U2Vs
ZWN0b3IoKTsKIH0KIAotSG9zdFdpbmRvdyogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpo
b3N0V2luZG93KCkgY29uc3QKK0hvc3RXaW5kb3cqIFJlbmRlclNlYXJjaEZpZWxkOjpob3N0V2lu
ZG93KCkgY29uc3QKIHsKICAgICByZXR1cm4gZG9jdW1lbnQoKS0+dmlldygpLT5ob3N0V2luZG93
KCk7CiB9CiAKLXZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjphdXRvc2Nyb2xsKCkK
LXsKLSAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRlckJv
eCgpLT5sYXllcigpOwotICAgIGlmIChsYXllcikKLSAgICAgICAgbGF5ZXItPmF1dG9zY3JvbGwo
KTsKLX0KLQotaW50IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2Nyb2xsV2lkdGgoKSBj
b25zdAotewotICAgIGlmIChpbm5lclRleHRFbGVtZW50KCkpCi0gICAgICAgIHJldHVybiBpbm5l
clRleHRFbGVtZW50KCktPnNjcm9sbFdpZHRoKCk7Ci0gICAgcmV0dXJuIFJlbmRlckJsb2NrOjpz
Y3JvbGxXaWR0aCgpOwotfQotCi1pbnQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzY3Jv
bGxIZWlnaHQoKSBjb25zdAotewotICAgIGlmIChpbm5lclRleHRFbGVtZW50KCkpCi0gICAgICAg
IHJldHVybiBpbm5lclRleHRFbGVtZW50KCktPnNjcm9sbEhlaWdodCgpOwotICAgIHJldHVybiBS
ZW5kZXJCbG9jazo6c2Nyb2xsSGVpZ2h0KCk7Ci19Ci0KLWludCBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6OnNjcm9sbExlZnQoKSBjb25zdAotewotICAgIGlmIChpbm5lclRleHRFbGVtZW50
KCkpCi0gICAgICAgIHJldHVybiBpbm5lclRleHRFbGVtZW50KCktPnNjcm9sbExlZnQoKTsKLSAg
ICByZXR1cm4gUmVuZGVyQmxvY2s6OnNjcm9sbExlZnQoKTsKLX0KLQotaW50IFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6c2Nyb2xsVG9wKCkgY29uc3QKLXsKLSAgICBpZiAoaW5uZXJUZXh0
RWxlbWVudCgpKQotICAgICAgICByZXR1cm4gaW5uZXJUZXh0RWxlbWVudCgpLT5zY3JvbGxUb3Ao
KTsKLSAgICByZXR1cm4gUmVuZGVyQmxvY2s6OnNjcm9sbFRvcCgpOwotfQotCi12b2lkIFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZTo6c2V0U2Nyb2xsTGVmdChpbnQgbmV3TGVmdCkKLXsKLSAg
ICBpZiAoaW5uZXJUZXh0RWxlbWVudCgpKQotICAgICAgICBpbm5lclRleHRFbGVtZW50KCktPnNl
dFNjcm9sbExlZnQobmV3TGVmdCk7Ci19Ci0KLXZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lOjpzZXRTY3JvbGxUb3AoaW50IG5ld1RvcCkKLXsKLSAgICBpZiAoaW5uZXJUZXh0RWxlbWVu
dCgpKQotICAgICAgICBpbm5lclRleHRFbGVtZW50KCktPnNldFNjcm9sbFRvcChuZXdUb3ApOwot
fQotCi1ib29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2Nyb2xsKFNjcm9sbERpcmVj
dGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0
aXBsaWVyLCBOb2RlKiogc3RvcE5vZGUpCi17Ci0gICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gaW5u
ZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJCb3goKS0+bGF5ZXIoKTsKLSAgICBpZiAobGF5ZXIgJiYg
bGF5ZXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIFJlbmRlckJsb2NrOjpzY3JvbGwoZGlyZWN0aW9u
LCBncmFudWxhcml0eSwgbXVsdGlwbGllciwgc3RvcE5vZGUpOwotfQotCi1ib29sIFJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZTo6bG9naWNhbFNjcm9sbChTY3JvbGxMb2dpY2FsRGlyZWN0aW9u
IGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxp
ZXIsIE5vZGUqKiBzdG9wTm9kZSkKLXsKLSAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBpbm5lclRl
eHRFbGVtZW50KCktPnJlbmRlckJveCgpLT5sYXllcigpOwotICAgIGlmIChsYXllciAmJiBsYXll
ci0+c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2FsKGRpcmVjdGlvbiwgc3R5bGUoKS0+aXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSks
IGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0
dXJuIFJlbmRlckJsb2NrOjpsb2dpY2FsU2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11
bHRpcGxpZXIsIHN0b3BOb2RlKTsKLX0KLQotUGFzc1JlZlB0cjxTY3JvbGxiYXI+IFJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZTo6Y3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhKiBzY3Jv
bGxhYmxlQXJlYSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbGJhckNv
bnRyb2xTaXplIGNvbnRyb2xTaXplKQorUGFzc1JlZlB0cjxTY3JvbGxiYXI+IFJlbmRlclNlYXJj
aEZpZWxkOjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhLCBT
Y3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUgY29u
dHJvbFNpemUpCiB7CiAgICAgUmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0OwogICAgIGJvb2wgaGFz
Q3VzdG9tU2Nyb2xsYmFyU3R5bGUgPSBzdHlsZSgpLT5oYXNQc2V1ZG9TdHlsZShTQ1JPTExCQVIp
OwpAQCAtNzUyLDkgKzM2MywyMyBAQCBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lOjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZQogICAgIHJldHVy
biB3aWRnZXQucmVsZWFzZSgpOwogfQogCi1IVE1MSW5wdXRFbGVtZW50KiBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OmlucHV0RWxlbWVudCgpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlclNl
YXJjaEZpZWxkOjpjb21wdXRlSGVpZ2h0TGltaXQoKSBjb25zdAoreworICAgIHJldHVybiBoZWln
aHQoKTsKK30KKwordm9pZCBSZW5kZXJTZWFyY2hGaWVsZDo6Y2VudGVyQ29udGFpbmVySWZOZWVk
ZWQoUmVuZGVyQm94KiBjb250YWluZXJSZW5kZXJlcikgY29uc3QKIHsKLSAgICByZXR1cm4gbm9k
ZSgpLT50b0lucHV0RWxlbWVudCgpOworICAgIGlmICghY29udGFpbmVyUmVuZGVyZXIpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChjb250YWluZXJSZW5kZXJlci0+aGVpZ2h0KCkgPD0gY29u
dGVudEhlaWdodCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBBIHF1aXJrIGZvciBmaW5k
LWluLXBhZ2UgYm94IG9uIFNhZmFyaSBXaW5kb3dzLgorICAgIC8vIGh0dHA6Ly93ZWJraXQub3Jn
L2IvNjMxNTcKKyAgICBMYXlvdXRVbml0IGhlaWdodERpZmYgPSBjb250YWluZXJSZW5kZXJlci0+
aGVpZ2h0KCkgLSBjb250ZW50SGVpZ2h0KCk7CisgICAgY29udGFpbmVyUmVuZGVyZXItPnNldFko
Y29udGFpbmVyUmVuZGVyZXItPnkoKSAtIChoZWlnaHREaWZmIC8gMiArIGxheW91dE1vZChoZWln
aHREaWZmLCAyKSkpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU2VhcmNoRmllbGQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
ZWFyY2hGaWVsZC5oCmluZGV4IDZlMjFjODU2YzEwZmE5ZmJhNDM2YzA2Zjc0OWMxNGUxZTJhODBi
YTYuLjk2NzMzNWQzNDU1NjM5M2E1NDMzMGVkNDhlMzYzNTY3ZGZhMmRjODggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5oCkBAIC0yMCwyNCArMjAsMjIg
QEAKICAqCiAgKi8KIAotI2lmbmRlZiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmVfaAotI2Rl
ZmluZSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmVfaAorI2lmbmRlZiBSZW5kZXJTZWFyY2hG
aWVsZF9oCisjZGVmaW5lIFJlbmRlclNlYXJjaEZpZWxkX2gKIAogI2luY2x1ZGUgIlBvcHVwTWVu
dUNsaWVudC5oIgotI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCisjaW5jbHVkZSAiUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgSFRNTElucHV0RWxlbWVudDsKIGNsYXNzIFNlYXJjaFBvcHVwTWVudTsKIAotY2xhc3MgUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lIDogcHVibGljIFJlbmRlclRleHRDb250cm9sLCBwcml2
YXRlIFBvcHVwTWVudUNsaWVudCB7CitjbGFzcyBSZW5kZXJTZWFyY2hGaWVsZCA6IHB1YmxpYyBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUsIHByaXZhdGUgUG9wdXBNZW51Q2xpZW50IHsKIHB1
YmxpYzoKLSAgICBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUoTm9kZSopOwotICAgIHZpcnR1
YWwgflJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZSgpOwotICAgIC8vIEZJWE1FOiBNb3ZlIGNy
ZWF0ZSpTdHlsZSgpIHRvIHRoZWlyIGNsYXNzZXMuCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFJl
bmRlclN0eWxlPiBjcmVhdGVJbm5lclRleHRTdHlsZShjb25zdCBSZW5kZXJTdHlsZSogc3RhcnRT
dHlsZSkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gY3JlYXRlSW5uZXJCbG9j
a1N0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBzdGFydFN0eWxlKSBjb25zdDsKKyAgICBSZW5kZXJT
ZWFyY2hGaWVsZChOb2RlKik7CisgICAgdmlydHVhbCB+UmVuZGVyU2VhcmNoRmllbGQoKTsKKwog
ICAgIHZvaWQgdXBkYXRlQ2FuY2VsQnV0dG9uVmlzaWJpbGl0eSgpIGNvbnN0OwogCiAgICAgdm9p
ZCBhZGRTZWFyY2hSZXN1bHQoKTsKQEAgLTQ3LDQyICs0NSwxMiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzaG93UG9wdXAoKTsKICAgICB2b2lkIGhpZGVQb3B1cCgpOwogCi0gICAgdm9pZCBjYXBzTG9j
a1N0YXRlTWF5SGF2ZUNoYW5nZWQoKTsKLQogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGJvb2wgaGFz
Q29udHJvbENsaXAoKSBjb25zdDsKLSAgICB2aXJ0dWFsIExheW91dFJlY3QgY29udHJvbENsaXBS
ZWN0KGNvbnN0IExheW91dFBvaW50JikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzVGV4dEZp
ZWxkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBh
aW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jik7Ci0gICAgdmlydHVhbCB2b2lkIGxheW91dCgp
OwotCi0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25z
dCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwotCi0gICAg
dmlydHVhbCB2b2lkIGF1dG9zY3JvbGwoKTsKLQotICAgIC8vIFN1YmNsYXNzZWQgdG8gZm9yd2Fy
ZCB0byBvdXIgaW5uZXIgZGl2LgotICAgIHZpcnR1YWwgaW50IHNjcm9sbExlZnQoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIGludCBzY3JvbGxUb3AoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBzY3Jv
bGxXaWR0aCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHNjcm9sbEhlaWdodCgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxMZWZ0KGludCk7Ci0gICAgdmlydHVhbCB2b2lkIHNl
dFNjcm9sbFRvcChpbnQpOwotICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9u
LCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEsIE5vZGUqKiBzdG9wTm9k
ZSA9IDApOwotICAgIHZpcnR1YWwgYm9vbCBsb2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2ljYWxEaXJl
Y3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMSwgTm9kZSoqIHN0
b3BOb2RlID0gMCk7Ci0KLSAgICBpbnQgdGV4dEJsb2NrV2lkdGgoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIGZsb2F0IGdldEF2Z0NoYXJXaWR0aChBdG9taWNTdHJpbmcgZmFtaWx5KTsKLSAgICB2aXJ0
dWFsIExheW91dFVuaXQgcHJlZmVycmVkQ29udGVudFdpZHRoKGZsb2F0IGNoYXJXaWR0aCkgY29u
c3Q7CisgICAgdmlydHVhbCB2b2lkIGNlbnRlckNvbnRhaW5lcklmTmVlZGVkKFJlbmRlckJveCop
IGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBjb21wdXRlQ29udHJvbEhl
aWdodChMYXlvdXRVbml0IGxpbmVIZWlnaHQsIExheW91dFVuaXQgbm9uQ29udGVudEhlaWdodCkg
Y29uc3QgT1ZFUlJJREU7Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZyb21FbGVtZW50
KCk7Ci0gICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29u
c3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKLQotICAgIHZpcnR1YWwgUmVuZGVyU3R5bGUqIHRl
eHRCYXNlU3R5bGUoKSBjb25zdDsKLQorICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBjb21wdXRlSGVp
Z2h0TGltaXQoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRnJvbUVs
ZW1lbnQoKSBPVkVSUklERTsKICAgICBFVmlzaWJpbGl0eSB2aXNpYmlsaXR5Rm9yQ2FuY2VsQnV0
dG9uKCkgY29uc3Q7Ci0gICAgYm9vbCB0ZXh0U2hvdWxkQmVUcnVuY2F0ZWQoKSBjb25zdDsKICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIGF1dG9zYXZlTmFtZSgpIGNvbnN0OwogCiAgICAgLy8gUG9w
dXBNZW51Q2xpZW50IG1ldGhvZHMKQEAgLTExNCw0MiArODIsMjIgQEAgcHJpdmF0ZToKICAgICB2
aXJ0dWFsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3coKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEq
LCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUpIE9WRVJSSURFOwog
Ci0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50KCkgY29uc3Q7Ci0KLSAgICBIVE1M
RWxlbWVudCogY29udGFpbmVyRWxlbWVudCgpIGNvbnN0OwotICAgIEhUTUxFbGVtZW50KiBpbm5l
ckJsb2NrRWxlbWVudCgpIGNvbnN0OwotICAgIEhUTUxFbGVtZW50KiBpbm5lclNwaW5CdXR0b25F
bGVtZW50KCkgY29uc3Q7CiAgICAgSFRNTEVsZW1lbnQqIHJlc3VsdHNCdXR0b25FbGVtZW50KCkg
Y29uc3Q7CiAgICAgSFRNTEVsZW1lbnQqIGNhbmNlbEJ1dHRvbkVsZW1lbnQoKSBjb25zdDsKIAog
ICAgIGJvb2wgbV9zZWFyY2hQb3B1cElzVmlzaWJsZTsKLSAgICBib29sIG1fc2hvdWxkRHJhd0Nh
cHNMb2NrSW5kaWNhdG9yOwotICAgIExheW91dFVuaXQgbV9kZXNpcmVkSW5uZXJUZXh0SGVpZ2h0
OwogICAgIFJlZlB0cjxTZWFyY2hQb3B1cE1lbnU+IG1fc2VhcmNoUG9wdXA7CiAgICAgVmVjdG9y
PFN0cmluZz4gbV9yZWNlbnRTZWFyY2hlczsKIH07CiAKLWlubGluZSBSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmUqIHRvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKFJlbmRlck9iamVjdCog
b2JqZWN0KQoraW5saW5lIFJlbmRlclNlYXJjaEZpZWxkKiB0b1JlbmRlclNlYXJjaEZpZWxkKFJl
bmRlck9iamVjdCogb2JqZWN0KQogewogICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNU
ZXh0RmllbGQoKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZSo+KG9iamVjdCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclNlYXJjaEZp
ZWxkKj4ob2JqZWN0KTsKIH0KIAogLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9uZSBkb2luZyBhbiB1
bm5lY2Vzc2FyeSBjYXN0Lgotdm9pZCB0b1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShjb25z
dCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUqKTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi1jbGFzcyBSZW5kZXJUZXh0Q29udHJvbElubmVyQmxvY2sgOiBwdWJsaWMg
UmVuZGVyQmxvY2sgewotcHVibGljOgotICAgIFJlbmRlclRleHRDb250cm9sSW5uZXJCbG9jayhO
b2RlKiBub2RlLCBib29sIGlzTXVsdGlMaW5lKSA6IFJlbmRlckJsb2NrKG5vZGUpLCBtX211bHRp
TGluZShpc011bHRpTGluZSkgeyB9Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCBib29sIGhhc0xp
bmVJZkVtcHR5KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgVmlzaWJsZVBv
c2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmKTsKLQotICAgIGJvb2wg
bV9tdWx0aUxpbmU7Ci19Owordm9pZCB0b1JlbmRlclNlYXJjaEZpZWxkKGNvbnN0IFJlbmRlclNl
YXJjaEZpZWxkKik7CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAppbmRleCA4NDhmYzIxMTk3YzJhN2Qy
NGYyNjQ4ZGY3MDIwNTI5ZjNjODgwZDNiLi4zMWYxZjI4MzdkYmE0YWQ2OTVhYjg5MDAxNTc5ZjM3
N2YwM2NlNThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUg
IkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJGcmFtZVZp
ZXcuaCIKLSNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmlu
Z3MuaCIKQEAgLTM5LDcgKzM4LDYgQEAKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1
ZGUgIlJlbmRlclNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCi0jaW5jbHVk
ZSAiU2VhcmNoUG9wdXBNZW51LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJT
aW1wbGVGb250RGF0YS5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKQEAgLTcwLDEwICs2
OCw4IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJUZXh0Q29udHJvbElubmVyQmxvY2s6OnBvc2l0
aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmCiAKIFJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKE5vZGUqIG5vZGUpCiAgICAgOiBSZW5k
ZXJUZXh0Q29udHJvbChub2RlKQotICAgICwgbV9zZWFyY2hQb3B1cElzVmlzaWJsZShmYWxzZSkK
ICAgICAsIG1fc2hvdWxkRHJhd0NhcHNMb2NrSW5kaWNhdG9yKGZhbHNlKQogICAgICwgbV9kZXNp
cmVkSW5uZXJUZXh0SGVpZ2h0KC0xKQotICAgICwgbV9zZWFyY2hQb3B1cCgwKQogewogICAgIEFT
U0VSVChub2RlLT5pc0hUTUxFbGVtZW50KCkpOwogICAgIEFTU0VSVChub2RlLT50b0lucHV0RWxl
bWVudCgpKTsKQEAgLTgxLDIwICs3Nyw2IEBAIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKE5vZGUqIG5vZGUpCiAKIFJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6flJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZSgpCiB7Ci0gICAgaWYg
KG1fc2VhcmNoUG9wdXApIHsKLSAgICAgICAgbV9zZWFyY2hQb3B1cC0+cG9wdXBNZW51KCktPmRp
c2Nvbm5lY3RDbGllbnQoKTsKLSAgICAgICAgbV9zZWFyY2hQb3B1cCA9IDA7Ci0gICAgfQotfQot
Ci1pbmxpbmUgSFRNTEVsZW1lbnQqIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y29udGFp
bmVyRWxlbWVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlucHV0RWxlbWVudCgpLT5jb250YWlu
ZXJFbGVtZW50KCk7Ci19Ci0KLWlubGluZSBIVE1MRWxlbWVudCogUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjppbm5lckJsb2NrRWxlbWVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlucHV0
RWxlbWVudCgpLT5pbm5lckJsb2NrRWxlbWVudCgpOwogfQogCiBpbmxpbmUgSFRNTEVsZW1lbnQq
IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aW5uZXJTcGluQnV0dG9uRWxlbWVudCgpIGNv
bnN0CkBAIC0xMDIsODggKzg0LDEyIEBAIGlubGluZSBIVE1MRWxlbWVudCogUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lOjppbm5lclNwaW5CdXR0b25FbGVtZW50KCkgY29uc3QKICAgICByZXR1
cm4gaW5wdXRFbGVtZW50KCktPmlubmVyU3BpbkJ1dHRvbkVsZW1lbnQoKTsKIH0KIAotaW5saW5l
IEhUTUxFbGVtZW50KiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnJlc3VsdHNCdXR0b25F
bGVtZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gaW5wdXRFbGVtZW50KCktPnJlc3VsdHNCdXR0
b25FbGVtZW50KCk7Ci19Ci0KLWlubGluZSBIVE1MRWxlbWVudCogUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjpjYW5jZWxCdXR0b25FbGVtZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gaW5w
dXRFbGVtZW50KCktPmNhbmNlbEJ1dHRvbkVsZW1lbnQoKTsKLX0KLQogUmVuZGVyU3R5bGUqIFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6dGV4dEJhc2VTdHlsZSgpIGNvbnN0CiB7CiAgICAg
SFRNTEVsZW1lbnQqIGlubmVyQmxvY2sgPSBpbm5lckJsb2NrRWxlbWVudCgpOwogICAgIHJldHVy
biBpbm5lckJsb2NrID8gaW5uZXJCbG9jay0+cmVuZGVyZXIoKS0+c3R5bGUoKSA6IHN0eWxlKCk7
CiB9CiAKLXZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjphZGRTZWFyY2hSZXN1bHQo
KQotewotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gaW5wdXRFbGVtZW50KCk7Ci0gICAg
aWYgKGlucHV0LT5tYXhSZXN1bHRzKCkgPD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU3Ry
aW5nIHZhbHVlID0gaW5wdXQtPnZhbHVlKCk7Ci0gICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnQoKS0+c2V0
dGluZ3MoKTsKLSAgICBpZiAoIXNldHRpbmdzIHx8IHNldHRpbmdzLT5wcml2YXRlQnJvd3NpbmdF
bmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGludCBzaXplID0gc3RhdGljX2Nhc3Q8
aW50PihtX3JlY2VudFNlYXJjaGVzLnNpemUoKSk7Ci0gICAgZm9yIChpbnQgaSA9IHNpemUgLSAx
OyBpID49IDA7IC0taSkgewotICAgICAgICBpZiAobV9yZWNlbnRTZWFyY2hlc1tpXSA9PSB2YWx1
ZSkKLSAgICAgICAgICAgIG1fcmVjZW50U2VhcmNoZXMucmVtb3ZlKGkpOwotICAgIH0KLQotICAg
IG1fcmVjZW50U2VhcmNoZXMuaW5zZXJ0KDAsIHZhbHVlKTsKLSAgICB3aGlsZSAoc3RhdGljX2Nh
c3Q8aW50PihtX3JlY2VudFNlYXJjaGVzLnNpemUoKSkgPiBpbnB1dC0+bWF4UmVzdWx0cygpKQot
ICAgICAgICBtX3JlY2VudFNlYXJjaGVzLnJlbW92ZUxhc3QoKTsKLQotICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgbmFtZSA9IGF1dG9zYXZlTmFtZSgpOwotICAgIGlmICghbV9zZWFyY2hQb3B1cCkK
LSAgICAgICAgbV9zZWFyY2hQb3B1cCA9IGRvY3VtZW50KCktPnBhZ2UoKS0+Y2hyb21lKCktPmNy
ZWF0ZVNlYXJjaFBvcHVwTWVudSh0aGlzKTsKLQotICAgIG1fc2VhcmNoUG9wdXAtPnNhdmVSZWNl
bnRTZWFyY2hlcyhuYW1lLCBtX3JlY2VudFNlYXJjaGVzKTsKLX0KLQotdm9pZCBSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmU6OnNob3dQb3B1cCgpCi17Ci0gICAgaWYgKG1fc2VhcmNoUG9wdXBJ
c1Zpc2libGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9zZWFyY2hQb3B1cCkKLSAg
ICAgICAgbV9zZWFyY2hQb3B1cCA9IGRvY3VtZW50KCktPnBhZ2UoKS0+Y2hyb21lKCktPmNyZWF0
ZVNlYXJjaFBvcHVwTWVudSh0aGlzKTsKLQotICAgIGlmICghbV9zZWFyY2hQb3B1cC0+ZW5hYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3NlYXJjaFBvcHVwSXNWaXNpYmxlID0gdHJ1
ZTsKLQotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSA9IGF1dG9zYXZlTmFtZSgpOwotICAg
IG1fc2VhcmNoUG9wdXAtPmxvYWRSZWNlbnRTZWFyY2hlcyhuYW1lLCBtX3JlY2VudFNlYXJjaGVz
KTsKLQotICAgIC8vIFRyaW0gdGhlIHJlY2VudCBzZWFyY2hlcyBsaXN0IGlmIHRoZSBtYXhpbXVt
IHNpemUgaGFzIGNoYW5nZWQgc2luY2Ugd2UgbGFzdCBzYXZlZC4KLSAgICBIVE1MSW5wdXRFbGVt
ZW50KiBpbnB1dCA9IGlucHV0RWxlbWVudCgpOwotICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ+KG1f
cmVjZW50U2VhcmNoZXMuc2l6ZSgpKSA+IGlucHV0LT5tYXhSZXN1bHRzKCkpIHsKLSAgICAgICAg
ZG8gewotICAgICAgICAgICAgbV9yZWNlbnRTZWFyY2hlcy5yZW1vdmVMYXN0KCk7Ci0gICAgICAg
IH0gd2hpbGUgKHN0YXRpY19jYXN0PGludD4obV9yZWNlbnRTZWFyY2hlcy5zaXplKCkpID4gaW5w
dXQtPm1heFJlc3VsdHMoKSk7Ci0KLSAgICAgICAgbV9zZWFyY2hQb3B1cC0+c2F2ZVJlY2VudFNl
YXJjaGVzKG5hbWUsIG1fcmVjZW50U2VhcmNoZXMpOwotICAgIH0KLQotICAgIG1fc2VhcmNoUG9w
dXAtPnBvcHVwTWVudSgpLT5zaG93KHBpeGVsU25hcHBlZEludFJlY3QoYWJzb2x1dGVCb3VuZGlu
Z0JveFJlY3QoKSksIGRvY3VtZW50KCktPnZpZXcoKSwgLTEpOwotfQotCi12b2lkIFJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZTo6aGlkZVBvcHVwKCkKLXsKLSAgICBpZiAobV9zZWFyY2hQb3B1
cCkKLSAgICAgICAgbV9zZWFyY2hQb3B1cC0+cG9wdXBNZW51KCktPmhpZGUoKTsKLX0KLQogdm9p
ZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7CiAgICAgUmVuZGVyVGV4dENvbnRy
b2w6OnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOwpAQCAtMjAwLDYgKzEwNiwxMSBAQCB2
b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IExheW91dFBvaW50JgogICAgIH0KIH0KIAorTGF5b3V0VW5pdCBSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmU6OmNvbXB1dGVIZWlnaHRMaW1pdCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGNvbnRhaW5lckVsZW1lbnQoKSA/IGNvbnRlbnRIZWlnaHQoKSA6IGhlaWdodCgpOworfQor
CiB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5b3V0KCkKIHsKICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIHJlbW92ZSB0aGUgaGVpZ2h0LXJlbGF0ZWQgaGFja3MgaW4gbGF5b3V0
KCkgYW5kCkBAIC0yMjUsNyArMTM2LDcgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmU6OmxheW91dCgpCiAgICAgTGF5b3V0VW5pdCBkZXNpcmVkSGVpZ2h0ID0gdGV4dEJsb2NrSGVp
Z2h0KCk7CiAgICAgTGF5b3V0VW5pdCBjdXJyZW50SGVpZ2h0ID0gaW5uZXJUZXh0UmVuZGVyZXIt
PmhlaWdodCgpOwogCi0gICAgTGF5b3V0VW5pdCBoZWlnaHRMaW1pdCA9IChpbnB1dEVsZW1lbnQo
KS0+aXNTZWFyY2hGaWVsZCgpIHx8ICFjb250YWluZXIpID8gaGVpZ2h0KCkgOiBjb250ZW50SGVp
Z2h0KCk7CisgICAgTGF5b3V0VW5pdCBoZWlnaHRMaW1pdCA9IGNvbXB1dGVIZWlnaHRMaW1pdCgp
OwogICAgIGlmIChjdXJyZW50SGVpZ2h0ID4gaGVpZ2h0TGltaXQpIHsKICAgICAgICAgaWYgKGRl
c2lyZWRIZWlnaHQgIT0gY3VycmVudEhlaWdodCkKICAgICAgICAgICAgIHNldE5lZWRzTGF5b3V0
KHRydWUsIE1hcmtPbmx5VGhpcyk7CkBAIC0yNTgsMTIgKzE2OSw4IEBAIHZvaWQgUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lOjpsYXlvdXQoKQogICAgIGlmICghY29udGFpbmVyICYmIGN1cnJl
bnRIZWlnaHQgIT0gY29udGVudEhlaWdodCgpKSB7CiAgICAgICAgIExheW91dFVuaXQgaGVpZ2h0
RGlmZiA9IGN1cnJlbnRIZWlnaHQgLSBjb250ZW50SGVpZ2h0KCk7CiAgICAgICAgIGlubmVyVGV4
dFJlbmRlcmVyLT5zZXRZKGlubmVyVGV4dFJlbmRlcmVyLT55KCkgLSAoaGVpZ2h0RGlmZiAvIDIg
KyBsYXlvdXRNb2QoaGVpZ2h0RGlmZiwgMikpKTsKLSAgICB9IGVsc2UgaWYgKGlucHV0RWxlbWVu
dCgpLT5pc1NlYXJjaEZpZWxkKCkgJiYgY29udGFpbmVyUmVuZGVyZXIgJiYgY29udGFpbmVyUmVu
ZGVyZXItPmhlaWdodCgpID4gY29udGVudEhlaWdodCgpKSB7Ci0gICAgICAgIC8vIEEgcXVpcmsg
Zm9yIGZpbmQtaW4tcGFnZSBib3ggb24gU2FmYXJpIFdpbmRvd3MuCi0gICAgICAgIC8vIGh0dHA6
Ly93ZWJraXQub3JnL2IvNjMxNTcKLSAgICAgICAgTGF5b3V0VW5pdCBoZWlnaHREaWZmID0gY29u
dGFpbmVyUmVuZGVyZXItPmhlaWdodCgpIC0gY29udGVudEhlaWdodCgpOwotICAgICAgICBjb250
YWluZXJSZW5kZXJlci0+c2V0WShjb250YWluZXJSZW5kZXJlci0+eSgpIC0gKGhlaWdodERpZmYg
LyAyICsgbGF5b3V0TW9kKGhlaWdodERpZmYsIDIpKSk7Ci0gICAgfQorICAgIH0gZWxzZQorICAg
ICAgICBjZW50ZXJDb250YWluZXJJZk5lZWRlZChjb250YWluZXJSZW5kZXJlcik7CiAKICAgICAv
LyBJZ25vcmVzIHRoZSBwYWRkaW5ncyBmb3IgdGhlIGlubmVyIHNwaW4gYnV0dG9uLgogICAgIGlm
IChSZW5kZXJCb3gqIGlubmVyU3BpbkJveCA9IGlubmVyU3BpbkJ1dHRvbkVsZW1lbnQoKSA/IGlu
bmVyU3BpbkJ1dHRvbkVsZW1lbnQoKS0+cmVuZGVyQm94KCkgOiAwKSB7CkBAIC00MzEsMzEgKzMz
OCwxMiBAQCBMYXlvdXRVbml0IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6cHJlZmVycmVk
Q29udGVudFdpZHRoKGZsb2F0IGNoYXJXaWR0aCkgYwogCiBMYXlvdXRVbml0IFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6Y29tcHV0ZUNvbnRyb2xIZWlnaHQoTGF5b3V0VW5pdCBsaW5lSGVp
Z2h0LCBMYXlvdXRVbml0IG5vbkNvbnRlbnRIZWlnaHQpIGNvbnN0CiB7Ci0gICAgSFRNTEVsZW1l
bnQqIHJlc3VsdHNCdXR0b24gPSByZXN1bHRzQnV0dG9uRWxlbWVudCgpOwotICAgIGlmIChSZW5k
ZXJCb3gqIHJlc3VsdHNSZW5kZXJlciA9IHJlc3VsdHNCdXR0b24gPyByZXN1bHRzQnV0dG9uLT5y
ZW5kZXJCb3goKSA6IDApIHsKLSAgICAgICAgcmVzdWx0c1JlbmRlcmVyLT5jb21wdXRlTG9naWNh
bEhlaWdodCgpOwotICAgICAgICBub25Db250ZW50SGVpZ2h0ID0gbWF4KG5vbkNvbnRlbnRIZWln
aHQsIHJlc3VsdHNSZW5kZXJlci0+Ym9yZGVyQW5kUGFkZGluZ0hlaWdodCgpICsgcmVzdWx0c1Jl
bmRlcmVyLT5tYXJnaW5IZWlnaHQoKSk7Ci0gICAgICAgIGxpbmVIZWlnaHQgPSBtYXgobGluZUhl
aWdodCwgcmVzdWx0c1JlbmRlcmVyLT5oZWlnaHQoKSk7Ci0gICAgfQotICAgIEhUTUxFbGVtZW50
KiBjYW5jZWxCdXR0b24gPSBjYW5jZWxCdXR0b25FbGVtZW50KCk7Ci0gICAgaWYgKFJlbmRlckJv
eCogY2FuY2VsUmVuZGVyZXIgPSBjYW5jZWxCdXR0b24gPyBjYW5jZWxCdXR0b24tPnJlbmRlckJv
eCgpIDogMCkgewotICAgICAgICBjYW5jZWxSZW5kZXJlci0+Y29tcHV0ZUxvZ2ljYWxIZWlnaHQo
KTsKLSAgICAgICAgbm9uQ29udGVudEhlaWdodCA9IG1heChub25Db250ZW50SGVpZ2h0LCBjYW5j
ZWxSZW5kZXJlci0+Ym9yZGVyQW5kUGFkZGluZ0hlaWdodCgpICsgY2FuY2VsUmVuZGVyZXItPm1h
cmdpbkhlaWdodCgpKTsKLSAgICAgICAgbGluZUhlaWdodCA9IG1heChsaW5lSGVpZ2h0LCBjYW5j
ZWxSZW5kZXJlci0+aGVpZ2h0KCkpOwotICAgIH0KLQogICAgIHJldHVybiBsaW5lSGVpZ2h0ICsg
bm9uQ29udGVudEhlaWdodDsKIH0KIAogdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6
OnVwZGF0ZUZyb21FbGVtZW50KCkKIHsKICAgICBSZW5kZXJUZXh0Q29udHJvbDo6dXBkYXRlRnJv
bUVsZW1lbnQoKTsKLQotICAgIGlmIChjYW5jZWxCdXR0b25FbGVtZW50KCkpCi0gICAgICAgIHVw
ZGF0ZUNhbmNlbEJ1dHRvblZpc2liaWxpdHkoKTsKLQotICAgIGlmIChtX3NlYXJjaFBvcHVwSXNW
aXNpYmxlKQotICAgICAgICBtX3NlYXJjaFBvcHVwLT5wb3B1cE1lbnUoKS0+dXBkYXRlRnJvbUVs
ZW1lbnQoKTsKIH0KIAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjpjcmVhdGVJbm5lclRleHRTdHlsZShjb25zdCBSZW5kZXJTdHlsZSogc3RhcnRT
dHlsZSkgY29uc3QKQEAgLTQ5NiwxODggKzM4NCwxMiBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxl
PiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZUlubmVyQmxvY2tTdHlsZShjb25z
dAogICAgIHJldHVybiBpbm5lckJsb2NrU3R5bGUucmVsZWFzZSgpOwogfQogCi12b2lkIFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZTo6dXBkYXRlQ2FuY2VsQnV0dG9uVmlzaWJpbGl0eSgpIGNv
bnN0Ci17Ci0gICAgUmVuZGVyT2JqZWN0KiBjYW5jZWxCdXR0b25SZW5kZXJlciA9IGNhbmNlbEJ1
dHRvbkVsZW1lbnQoKS0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIWNhbmNlbEJ1dHRvblJlbmRlcmVy
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBSZW5kZXJTdHlsZSogY3VyU3R5bGUgPSBj
YW5jZWxCdXR0b25SZW5kZXJlci0+c3R5bGUoKTsKLSAgICBFVmlzaWJpbGl0eSBidXR0b25WaXNp
YmlsaXR5ID0gdmlzaWJpbGl0eUZvckNhbmNlbEJ1dHRvbigpOwotICAgIGlmIChjdXJTdHlsZS0+
dmlzaWJpbGl0eSgpID09IGJ1dHRvblZpc2liaWxpdHkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IFJlZlB0cjxSZW5kZXJTdHlsZT4gY2FuY2VsQnV0dG9uU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xv
bmUoY3VyU3R5bGUpOwotICAgIGNhbmNlbEJ1dHRvblN0eWxlLT5zZXRWaXNpYmlsaXR5KGJ1dHRv
blZpc2liaWxpdHkpOwotICAgIGNhbmNlbEJ1dHRvblJlbmRlcmVyLT5zZXRTdHlsZShjYW5jZWxC
dXR0b25TdHlsZSk7Ci19Ci0KLUVWaXNpYmlsaXR5IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6dmlzaWJpbGl0eUZvckNhbmNlbEJ1dHRvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIChzdHls
ZSgpLT52aXNpYmlsaXR5KCkgPT0gSElEREVOIHx8IGlucHV0RWxlbWVudCgpLT52YWx1ZSgpLmlz
RW1wdHkoKSkgPyBISURERU4gOiBWSVNJQkxFOwotfQotCiBib29sIFJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZTo6dGV4dFNob3VsZEJlVHJ1bmNhdGVkKCkgY29uc3QKIHsKICAgICByZXR1cm4g
ZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKSAhPSBub2RlKCkKICAgICAgICAgJiYgc3R5bGUoKS0+
dGV4dE92ZXJmbG93KCkgPT0gVGV4dE92ZXJmbG93RWxsaXBzaXM7CiB9CiAKLWNvbnN0IEF0b21p
Y1N0cmluZyYgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjphdXRvc2F2ZU5hbWUoKSBjb25z
dAotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKS0+Z2V0QXR0cmli
dXRlKGF1dG9zYXZlQXR0cik7Ci19Ci0KLS8vIFBvcHVwTWVudUNsaWVudCBtZXRob2RzCi12b2lk
IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6dmFsdWVDaGFuZ2VkKHVuc2lnbmVkIGxpc3RJ
bmRleCwgYm9vbCBmaXJlRXZlbnRzKQotewotICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KGxp
c3RJbmRleCkgPCBsaXN0U2l6ZSgpKTsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IGlu
cHV0RWxlbWVudCgpOwotICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ+KGxpc3RJbmRleCkgPT0gKGxp
c3RTaXplKCkgLSAxKSkgewotICAgICAgICBpZiAoZmlyZUV2ZW50cykgewotICAgICAgICAgICAg
bV9yZWNlbnRTZWFyY2hlcy5jbGVhcigpOwotICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lID0gYXV0b3NhdmVOYW1lKCk7Ci0gICAgICAgICAgICBpZiAoIW5hbWUuaXNFbXB0eSgp
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFtX3NlYXJjaFBvcHVwKQotICAgICAgICAgICAgICAg
ICAgICBtX3NlYXJjaFBvcHVwID0gZG9jdW1lbnQoKS0+cGFnZSgpLT5jaHJvbWUoKS0+Y3JlYXRl
U2VhcmNoUG9wdXBNZW51KHRoaXMpOwotICAgICAgICAgICAgICAgIG1fc2VhcmNoUG9wdXAtPnNh
dmVSZWNlbnRTZWFyY2hlcyhuYW1lLCBtX3JlY2VudFNlYXJjaGVzKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlucHV0LT5zZXRWYWx1ZShpdGVtVGV4
dChsaXN0SW5kZXgpKTsKLSAgICAgICAgaWYgKGZpcmVFdmVudHMpCi0gICAgICAgICAgICBpbnB1
dC0+b25TZWFyY2goKTsKLSAgICAgICAgaW5wdXQtPnNlbGVjdCgpOwotICAgIH0KLX0KLQotU3Ry
aW5nIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aXRlbVRleHQodW5zaWduZWQgbGlzdElu
ZGV4KSBjb25zdAotewotICAgIGludCBzaXplID0gbGlzdFNpemUoKTsKLSAgICBpZiAoc2l6ZSA9
PSAxKSB7Ci0gICAgICAgIEFTU0VSVCghbGlzdEluZGV4KTsKLSAgICAgICAgcmV0dXJuIHNlYXJj
aE1lbnVOb1JlY2VudFNlYXJjaGVzVGV4dCgpOwotICAgIH0KLSAgICBpZiAoIWxpc3RJbmRleCkK
LSAgICAgICAgcmV0dXJuIHNlYXJjaE1lbnVSZWNlbnRTZWFyY2hlc1RleHQoKTsKLSAgICBpZiAo
aXRlbUlzU2VwYXJhdG9yKGxpc3RJbmRleCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAg
ICBpZiAoc3RhdGljX2Nhc3Q8aW50PihsaXN0SW5kZXgpID09IChzaXplIC0gMSkpCi0gICAgICAg
IHJldHVybiBzZWFyY2hNZW51Q2xlYXJSZWNlbnRTZWFyY2hlc1RleHQoKTsKLSAgICByZXR1cm4g
bV9yZWNlbnRTZWFyY2hlc1tsaXN0SW5kZXggLSAxXTsKLX0KLQotU3RyaW5nIFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6aXRlbUxhYmVsKHVuc2lnbmVkKSBjb25zdAotewotICAgIHJldHVy
biBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aXRl
bUljb24odW5zaWduZWQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi1ib29s
IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aXRlbUlzRW5hYmxlZCh1bnNpZ25lZCBsaXN0
SW5kZXgpIGNvbnN0Ci17Ci0gICAgIGlmICghbGlzdEluZGV4IHx8IGl0ZW1Jc1NlcGFyYXRvcihs
aXN0SW5kZXgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LVBvcHVwTWVudVN0eWxlIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aXRlbVN0eWxlKHVu
c2lnbmVkKSBjb25zdAotewotICAgIHJldHVybiBtZW51U3R5bGUoKTsKLX0KLQotUG9wdXBNZW51
U3R5bGUgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjptZW51U3R5bGUoKSBjb25zdAotewot
ICAgIHJldHVybiBQb3B1cE1lbnVTdHlsZShzdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3Io
Q1NTUHJvcGVydHlDb2xvciksIHN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9w
ZXJ0eUJhY2tncm91bmRDb2xvciksIHN0eWxlKCktPmZvbnQoKSwgc3R5bGUoKS0+dmlzaWJpbGl0
eSgpID09IFZJU0lCTEUsCi0gICAgICAgIHN0eWxlKCktPmRpc3BsYXkoKSA9PSBOT05FLCBzdHls
ZSgpLT50ZXh0SW5kZW50KCksIHN0eWxlKCktPmRpcmVjdGlvbigpLCBpc092ZXJyaWRlKHN0eWxl
KCktPnVuaWNvZGVCaWRpKCkpKTsKLX0KLQotaW50IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6Y2xpZW50SW5zZXRMZWZ0KCkgY29uc3QKLXsKLSAgICAvLyBJbnNldCB0aGUgbWVudSBieSB0
aGUgcmFkaXVzIG9mIHRoZSBjYXAgb24gdGhlIGxlZnQgc28gdGhhdAotICAgIC8vIGl0IG9ubHkg
cnVucyBhbG9uZyB0aGUgc3RyYWlnaHQgcGFydCBvZiB0aGUgYmV6ZWwuCi0gICAgcmV0dXJuIGhl
aWdodCgpIC8gMjsKLX0KLQotaW50IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y2xpZW50
SW5zZXRSaWdodCgpIGNvbnN0Ci17Ci0gICAgLy8gSW5zZXQgdGhlIG1lbnUgYnkgdGhlIHJhZGl1
cyBvZiB0aGUgY2FwIG9uIHRoZSByaWdodCBzbyB0aGF0Ci0gICAgLy8gaXQgb25seSBydW5zIGFs
b25nIHRoZSBzdHJhaWdodCBwYXJ0IG9mIHRoZSBiZXplbCAodW5sZXNzIGl0IG5lZWRzCi0gICAg
Ly8gdG8gYmUgd2lkZXIpLgotICAgIHJldHVybiBoZWlnaHQoKSAvIDI7Ci19Ci0KLUxheW91dFVu
aXQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjbGllbnRQYWRkaW5nTGVmdCgpIGNvbnN0
Ci17Ci0gICAgTGF5b3V0VW5pdCBwYWRkaW5nID0gcGFkZGluZ0xlZnQoKTsKLSAgICBpZiAoUmVu
ZGVyQm94KiBib3ggPSBpbm5lckJsb2NrRWxlbWVudCgpID8gaW5uZXJCbG9ja0VsZW1lbnQoKS0+
cmVuZGVyQm94KCkgOiAwKQotICAgICAgICBwYWRkaW5nICs9IGJveC0+eCgpOwotICAgIHJldHVy
biBwYWRkaW5nOwotfQotCi1MYXlvdXRVbml0IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6
Y2xpZW50UGFkZGluZ1JpZ2h0KCkgY29uc3QKLXsKLSAgICBMYXlvdXRVbml0IHBhZGRpbmcgPSBw
YWRkaW5nUmlnaHQoKTsKLSAgICBpZiAoUmVuZGVyQm94KiBjb250YWluZXJCb3ggPSBjb250YWlu
ZXJFbGVtZW50KCkgPyBjb250YWluZXJFbGVtZW50KCktPnJlbmRlckJveCgpIDogMCkgewotICAg
ICAgICBpZiAoUmVuZGVyQm94KiBpbm5lckJsb2NrQm94ID0gaW5uZXJCbG9ja0VsZW1lbnQoKSA/
IGlubmVyQmxvY2tFbGVtZW50KCktPnJlbmRlckJveCgpIDogMCkKLSAgICAgICAgICAgIHBhZGRp
bmcgKz0gY29udGFpbmVyQm94LT53aWR0aCgpIC0gKGlubmVyQmxvY2tCb3gtPngoKSArIGlubmVy
QmxvY2tCb3gtPndpZHRoKCkpOwotICAgIH0KLSAgICByZXR1cm4gcGFkZGluZzsKLX0KLQotaW50
IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGlzdFNpemUoKSBjb25zdAotewotICAgIC8v
IElmIHRoZXJlIGFyZSBubyByZWNlbnQgc2VhcmNoZXMsIHRoZW4gb3VyIG1lbnUgd2lsbCBoYXZl
IDEgIk5vIHJlY2VudCBzZWFyY2hlcyIgaXRlbS4KLSAgICBpZiAoIW1fcmVjZW50U2VhcmNoZXMu
c2l6ZSgpKQotICAgICAgICByZXR1cm4gMTsKLSAgICAvLyBPdGhlcndpc2UsIGxlYXZlIHJvb20g
aW4gdGhlIG1lbnUgZm9yIGEgaGVhZGVyLCBhIHNlcGFyYXRvciwgYW5kIHRoZSAiQ2xlYXIgcmVj
ZW50IHNlYXJjaGVzIiBpdGVtLgotICAgIHJldHVybiBtX3JlY2VudFNlYXJjaGVzLnNpemUoKSAr
IDM7Ci19Ci0KLWludCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNlbGVjdGVkSW5kZXgo
KSBjb25zdAotewotICAgIHJldHVybiAtMTsKLX0KLQotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6OnBvcHVwRGlkSGlkZSgpCi17Ci0gICAgbV9zZWFyY2hQb3B1cElzVmlzaWJsZSA9
IGZhbHNlOwotfQotCi1ib29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aXRlbUlzU2Vw
YXJhdG9yKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKLXsKLSAgICAvLyBUaGUgc2VwYXJhdG9y
IHdpbGwgYmUgdGhlIHNlY29uZCB0byBsYXN0IGl0ZW0gaW4gb3VyIGxpc3QuCi0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PGludD4obGlzdEluZGV4KSA9PSAobGlzdFNpemUoKSAtIDIpOwotfQotCi1i
b29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aXRlbUlzTGFiZWwodW5zaWduZWQgbGlz
dEluZGV4KSBjb25zdAotewotICAgIHJldHVybiBsaXN0SW5kZXggPT0gMDsKLX0KLQotYm9vbCBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Oml0ZW1Jc1NlbGVjdGVkKHVuc2lnbmVkKSBjb25z
dAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmU6OnNldFRleHRGcm9tSXRlbSh1bnNpZ25lZCBsaXN0SW5kZXgpCi17Ci0gICAgaW5wdXRF
bGVtZW50KCktPnNldFZhbHVlKGl0ZW1UZXh0KGxpc3RJbmRleCkpOwotfQotCi1Gb250U2VsZWN0
b3IqIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Zm9udFNlbGVjdG9yKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gZG9jdW1lbnQoKS0+c3R5bGVSZXNvbHZlcigpLT5mb250U2VsZWN0b3IoKTsK
LX0KLQotSG9zdFdpbmRvdyogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpob3N0V2luZG93
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZG9jdW1lbnQoKS0+dmlldygpLT5ob3N0V2luZG93KCk7
Ci19Ci0KIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjphdXRvc2Nyb2xsKCkKIHsK
ICAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBpbm5lclRleHRFbGVtZW50KCktPnJlbmRlckJveCgp
LT5sYXllcigpOwpAQCAtNzQxLDE3ICs0NTMsNiBAQCBib29sIFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6bG9naWNhbFNjcm9sbChTY3JvbGxMb2dpY2FsRGlyZWN0aW9uIGRpcmVjdGlvbgog
ICAgIHJldHVybiBSZW5kZXJCbG9jazo6bG9naWNhbFNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFy
aXR5LCBtdWx0aXBsaWVyLCBzdG9wTm9kZSk7CiB9CiAKLVBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxhYmxlQXJl
YSogc2Nyb2xsYWJsZUFyZWEsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3Jv
bGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkKLXsKLSAgICBSZWZQdHI8U2Nyb2xsYmFyPiB3
aWRnZXQ7Ci0gICAgYm9vbCBoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSA9IHN0eWxlKCktPmhhc1Bz
ZXVkb1N0eWxlKFNDUk9MTEJBUik7Ci0gICAgaWYgKGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlKQot
ICAgICAgICB3aWRnZXQgPSBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3RvbVNjcm9sbGJhcihz
Y3JvbGxhYmxlQXJlYSwgb3JpZW50YXRpb24sIHRoaXMtPm5vZGUoKSk7Ci0gICAgZWxzZQotICAg
ICAgICB3aWRnZXQgPSBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcihzY3JvbGxhYmxl
QXJlYSwgb3JpZW50YXRpb24sIGNvbnRyb2xTaXplKTsKLSAgICByZXR1cm4gd2lkZ2V0LnJlbGVh
c2UoKTsKLX0KLQogSFRNTElucHV0RWxlbWVudCogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
OjppbnB1dEVsZW1lbnQoKSBjb25zdAogewogICAgIHJldHVybiBub2RlKCktPnRvSW5wdXRFbGVt
ZW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lLmgKaW5kZXggNmUyMWM4NTZjMTBmYTlmYmE0MzZjMDZmNzQ5YzE0ZTFl
MmE4MGJhNi4uZmZjNTBhMzNkYzRhNWQ1N2Y5OWU5ZTUwMzdjYTZmZjlhMWEyZmFkMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmUuaApAQCAtMjMsMzIgKzIzLDMxIEBACiAjaWZuZGVmIFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZV9oCiAjZGVmaW5lIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZV9oCiAKLSNpbmNs
dWRlICJQb3B1cE1lbnVDbGllbnQuaCIKKyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAj
aW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2wuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBIVE1MSW5wdXRFbGVtZW50OwotY2xhc3MgU2VhcmNoUG9wdXBNZW51OwogCi1jbGFzcyBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUgOiBwdWJsaWMgUmVuZGVyVGV4dENvbnRyb2wsIHBy
aXZhdGUgUG9wdXBNZW51Q2xpZW50IHsKK2NsYXNzIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZSA6IHB1YmxpYyBSZW5kZXJUZXh0Q29udHJvbCB7CiBwdWJsaWM6CiAgICAgUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lKE5vZGUqKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmUoKTsKICAgICAvLyBGSVhNRTogTW92ZSBjcmVhdGUqU3R5bGUoKSB0byB0aGVpciBj
bGFzc2VzLgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gY3JlYXRlSW5uZXJU
ZXh0U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUpIGNvbnN0OwogICAgIFBhc3NS
ZWZQdHI8UmVuZGVyU3R5bGU+IGNyZWF0ZUlubmVyQmxvY2tTdHlsZShjb25zdCBSZW5kZXJTdHls
ZSogc3RhcnRTdHlsZSkgY29uc3Q7Ci0gICAgdm9pZCB1cGRhdGVDYW5jZWxCdXR0b25WaXNpYmls
aXR5KCkgY29uc3Q7Ci0KLSAgICB2b2lkIGFkZFNlYXJjaFJlc3VsdCgpOwotICAgIHZvaWQgc3Rv
cFNlYXJjaEV2ZW50VGltZXIoKTsKLQotICAgIGJvb2wgcG9wdXBJc1Zpc2libGUoKSBjb25zdCB7
IHJldHVybiBtX3NlYXJjaFBvcHVwSXNWaXNpYmxlOyB9Ci0gICAgdm9pZCBzaG93UG9wdXAoKTsK
LSAgICB2b2lkIGhpZGVQb3B1cCgpOwogCiAgICAgdm9pZCBjYXBzTG9ja1N0YXRlTWF5SGF2ZUNo
YW5nZWQoKTsKIAorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBjZW50ZXJDb250YWluZXJJ
Zk5lZWRlZChSZW5kZXJCb3gqKSBjb25zdCB7IH0KKyAgICB2aXJ0dWFsIExheW91dFVuaXQgY29t
cHV0ZUhlaWdodExpbWl0KCkgY29uc3Q7CisgICAgSFRNTEVsZW1lbnQqIGNvbnRhaW5lckVsZW1l
bnQoKSBjb25zdDsKKyAgICBIVE1MRWxlbWVudCogaW5uZXJCbG9ja0VsZW1lbnQoKSBjb25zdDsK
KyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlRnJvbUVsZW1lbnQoKSBPVkVSUklERTsKKwogcHJpdmF0ZToKICAgICB2aXJ0
dWFsIGJvb2wgaGFzQ29udHJvbENsaXAoKSBjb25zdDsKICAgICB2aXJ0dWFsIExheW91dFJlY3Qg
Y29udHJvbENsaXBSZWN0KGNvbnN0IExheW91dFBvaW50JikgY29uc3Q7CkBAIC03Niw1OSArNzUs
MjggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIExheW91dFVuaXQgcHJlZmVycmVkQ29udGVudFdp
ZHRoKGZsb2F0IGNoYXJXaWR0aCkgY29uc3Q7CiAgICAgdmlydHVhbCBMYXlvdXRVbml0IGNvbXB1
dGVDb250cm9sSGVpZ2h0KExheW91dFVuaXQgbGluZUhlaWdodCwgTGF5b3V0VW5pdCBub25Db250
ZW50SGVpZ2h0KSBjb25zdCBPVkVSUklERTsKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
RnJvbUVsZW1lbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZm
ZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwogCiAgICAgdmlydHVhbCBSZW5k
ZXJTdHlsZSogdGV4dEJhc2VTdHlsZSgpIGNvbnN0OwogCi0gICAgRVZpc2liaWxpdHkgdmlzaWJp
bGl0eUZvckNhbmNlbEJ1dHRvbigpIGNvbnN0OwogICAgIGJvb2wgdGV4dFNob3VsZEJlVHJ1bmNh
dGVkKCkgY29uc3Q7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdXRvc2F2ZU5hbWUoKSBjb25z
dDsKLQotICAgIC8vIFBvcHVwTWVudUNsaWVudCBtZXRob2RzCi0gICAgdmlydHVhbCB2b2lkIHZh
bHVlQ2hhbmdlZCh1bnNpZ25lZCBsaXN0SW5kZXgsIGJvb2wgZmlyZUV2ZW50cyA9IHRydWUpIE9W
RVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKHVuc2lnbmVkLCBib29s
KSBPVkVSUklERSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0aW9uQ2xlYXJlZCgpIE9WRVJS
SURFIHsgfQotICAgIHZpcnR1YWwgU3RyaW5nIGl0ZW1UZXh0KHVuc2lnbmVkIGxpc3RJbmRleCkg
Y29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBTdHJpbmcgaXRlbUxhYmVsKHVuc2lnbmVkIGxp
c3RJbmRleCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBTdHJpbmcgaXRlbUljb24odW5z
aWduZWQgbGlzdEluZGV4KSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFN0cmluZyBpdGVt
VG9vbFRpcCh1bnNpZ25lZCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gU3RyaW5nKCk7IH0KLSAg
ICB2aXJ0dWFsIFN0cmluZyBpdGVtQWNjZXNzaWJpbGl0eVRleHQodW5zaWduZWQpIGNvbnN0IE9W
RVJSSURFIHsgcmV0dXJuIFN0cmluZygpOyB9Ci0gICAgdmlydHVhbCBib29sIGl0ZW1Jc0VuYWJs
ZWQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFBvcHVw
TWVudVN0eWxlIGl0ZW1TdHlsZSh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0IE9WRVJSSURFOwot
ICAgIHZpcnR1YWwgUG9wdXBNZW51U3R5bGUgbWVudVN0eWxlKCkgY29uc3QgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCBpbnQgY2xpZW50SW5zZXRMZWZ0KCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmly
dHVhbCBpbnQgY2xpZW50SW5zZXRSaWdodCgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwg
TGF5b3V0VW5pdCBjbGllbnRQYWRkaW5nTGVmdCgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1
YWwgTGF5b3V0VW5pdCBjbGllbnRQYWRkaW5nUmlnaHQoKSBjb25zdCBPVkVSUklERTsKLSAgICB2
aXJ0dWFsIGludCBsaXN0U2l6ZSgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgaW50IHNl
bGVjdGVkSW5kZXgoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgcG9wdXBEaWRI
aWRlKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBib29sIGl0ZW1Jc1NlcGFyYXRvcih1bnNpZ25l
ZCBsaXN0SW5kZXgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCBpdGVtSXNMYWJl
bCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCBp
dGVtSXNTZWxlY3RlZCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZp
cnR1YWwgYm9vbCBzaG91bGRQb3BPdmVyKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7
IH0KLSAgICB2aXJ0dWFsIGJvb2wgdmFsdWVTaG91bGRDaGFuZ2VPbkhvdFRyYWNrKCkgY29uc3Qg
T1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dEZyb21J
dGVtKHVuc2lnbmVkIGxpc3RJbmRleCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBGb250U2VsZWN0
b3IqIGZvbnRTZWxlY3RvcigpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgSG9zdFdpbmRv
dyogaG9zdFdpbmRvdygpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxT
Y3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSosIFNjcm9sbGJhck9yaWVu
dGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSkgT1ZFUlJJREU7Ci0KLSAgICBIVE1MSW5wdXRF
bGVtZW50KiBpbnB1dEVsZW1lbnQoKSBjb25zdDsKIAotICAgIEhUTUxFbGVtZW50KiBjb250YWlu
ZXJFbGVtZW50KCkgY29uc3Q7Ci0gICAgSFRNTEVsZW1lbnQqIGlubmVyQmxvY2tFbGVtZW50KCkg
Y29uc3Q7CiAgICAgSFRNTEVsZW1lbnQqIGlubmVyU3BpbkJ1dHRvbkVsZW1lbnQoKSBjb25zdDsK
LSAgICBIVE1MRWxlbWVudCogcmVzdWx0c0J1dHRvbkVsZW1lbnQoKSBjb25zdDsKLSAgICBIVE1M
RWxlbWVudCogY2FuY2VsQnV0dG9uRWxlbWVudCgpIGNvbnN0OwogCi0gICAgYm9vbCBtX3NlYXJj
aFBvcHVwSXNWaXNpYmxlOwogICAgIGJvb2wgbV9zaG91bGREcmF3Q2Fwc0xvY2tJbmRpY2F0b3I7
CiAgICAgTGF5b3V0VW5pdCBtX2Rlc2lyZWRJbm5lclRleHRIZWlnaHQ7Ci0gICAgUmVmUHRyPFNl
YXJjaFBvcHVwTWVudT4gbV9zZWFyY2hQb3B1cDsKLSAgICBWZWN0b3I8U3RyaW5nPiBtX3JlY2Vu
dFNlYXJjaGVzOwogfTsKIAoraW5saW5lIEhUTUxFbGVtZW50KiBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6OmNvbnRhaW5lckVsZW1lbnQoKSBjb25zdAoreworICAgIHJldHVybiBpbnB1dEVs
ZW1lbnQoKS0+Y29udGFpbmVyRWxlbWVudCgpOworfQorCitpbmxpbmUgSFRNTEVsZW1lbnQqIFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aW5uZXJCbG9ja0VsZW1lbnQoKSBjb25zdAorewor
ICAgIHJldHVybiBpbnB1dEVsZW1lbnQoKS0+aW5uZXJCbG9ja0VsZW1lbnQoKTsKK30KKwogaW5s
aW5lIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZSogdG9SZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmUoUmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgQVNTRVJUKCFvYmplY3QgfHwgb2Jq
ZWN0LT5pc1RleHRGaWVsZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJpbmdBbGxJbk9uZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
aW5nQWxsSW5PbmUuY3BwCmluZGV4IGQxN2JkMzEzYTQzMTkwYzliZGZlNWNlOGQzMmY4ZjcxODU0
NDRhNGYuLjFmMGE0YTM4ZTcyZTIxYTdkYzNmMGFkY2QzY2FlMzYzYzhhNTFkOTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJpbmdBbGxJbk9uZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcmluZ0FsbEluT25lLmNwcApAQCAtOTEsNiAr
OTEsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhci5jcHAiCiAjaW5jbHVkZSAiUmVuZGVy
U2Nyb2xsYmFyUGFydC5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU2Nyb2xsYmFyVGhlbWUuY3BwIgor
I2luY2x1ZGUgIlJlbmRlclNlYXJjaEZpZWxkLmNwcCIKICNpbmNsdWRlICJSZW5kZXJTbGlkZXIu
Y3BwIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlLmNwcCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNh
cHRpb24uY3BwIgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148048</attachid>
            <date>2012-06-17 21:39:25 -0700</date>
            <delta_ts>2012-06-17 21:52:00 -0700</delta_ts>
            <desc>Patch 8</desc>
            <filename>bug-88980-20120618133924.patch</filename>
            <type>text/plain</type>
            <size>48879</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwNTY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGIwNzUyMTdlMjJmMTc1
Y2YxMzk5OWM4ZTg3MTNjOTNkYTYxYzVhYS4uYTVjOGQ0N2QxYjI3ZGJhOTRhMmE0NTJlODQ1OGEw
YWY4OGUxZmVhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3MCBAQAorMjAxMi0wNi0xOCAgWW9z
aGlmdW1pIElub3VlICA8eW9zaW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtGb3Jtc10gTW92
ZSBzZWFyY2ggZmllbGQgcmVsYXRlZCBjb2RlIHRvIFJlbmRlclNlYXJjaEZpZWxkIGZyb20gUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04ODk4MAorCisgICAgICAgIFJldmlld2VkIGJ5IEtlbnQgVGFtdXJh
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggbW92ZXMgc2VhcmNoIGZpZWxkIHJlbGF0ZWQgbWV0aG9k
cyBpbiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUKKyAgICAgICAgdG8gbmV3IGNsYXNzIFJl
bmRlclNlYXJjaEZpZWxkIGFuZCBjaGFuZ2VzIHJlbGF0ZWQgY2xhc3NlcyB0byB1c2UKKyAgICAg
ICAgUmVuZGVyU2VhcmNoRmllbGQuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBUaGlzIHBhdGNo
IGRvZXNuJ3QgY2hhbmdlIGJlaGF2aW9yLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6IEFk
ZGVkIG5ldyBmaWxlIFJlbmRlclNlYXJjaEZpZWxkLmNwcAorICAgICAgICAqIEdOVW1ha2VmaWxl
Lmxpc3QuYW06IEFkZGVkIG5ldyBmaWxlIFJlbmRlclNlYXJjaEZpZWxkLmNwcCBhbmQgUmVuZGVy
U2VhcmNoRmllbGQuaAorICAgICAgICAqIFRhcmdldC5wcmk6IGRpdHRvCisgICAgICAgICogV2Vi
Q29yZS5neXBpOiBkaXR0bworICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
OiBkaXR0bworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogZGl0
dG8KKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTElucHV0RWxlbWVudDo6c3VidHJlZUhhc0NoYW5nZWQpOiBDYWxsIFJlbmRlclNlYXJj
aEZpZWxkOjp1cGRhdGVDYW5jZWxCdXR0b25WaXNpYmlsaXR5CisgICAgICAgIChXZWJDb3JlOjpI
VE1MSW5wdXRFbGVtZW50OjphZGRTZWFyY2hSZXN1bHQpOiBDaGFuZ2VkIHRvIGNhbGwgSW5wdXRU
eXBlOjphZGRTZWFyY2hSZXN1bHQuCisgICAgICAgICogaHRtbC9JbnB1dFR5cGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW5wdXRUeXBlOjphZGRTZWFyY2hSZXN1bHQpOiBBZGRlZC4KKyAgICAg
ICAgKiBodG1sL0lucHV0VHlwZS5oOgorICAgICAgICAqIGh0bWwvU2VhcmNoSW5wdXRUeXBlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNlYXJjaElucHV0VHlwZTo6YWRkU2VhcmNoUmVzdWx0KTog
TW92ZWQgZnJvbSBIVE1MSW5wdXRFbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoSW5w
dXRUeXBlOjpjcmVhdGVSZW5kZXJlcik6IEFkZGVkIHRvIGNyZWF0ZSBSZW5kZXJTZWFyY2hGaWVs
ZC4KKyAgICAgICAgKiBodG1sL1NlYXJjaElucHV0VHlwZS5oOgorICAgICAgICAqIGh0bWwvc2hh
ZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWFy
Y2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKTogVXNlIFJl
bmRlclNlYXJjaEZpZWxkIGluc3RlYWQgb2YgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLgor
ICAgICAgICAqIGxvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
b3JtU3VibWlzc2lvbjo6Y3JlYXRlKTogR290IHJpZCBpc1NlYXJjaEZpZWxkKCkgZ3VhcmQgZm9y
IGFkZFNlYXJjaFJlc3VsdCgpLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVs
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6UmVuZGVyU2VhcmNo
RmllbGQpOiBSZW5hbWVkIHRvIFJlbmRlclNlYXJjaEZpZWxkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU2VhcmNoRmllbGQ6On5SZW5kZXJTZWFyY2hGaWVsZCk6IGRpdHRvCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6cmVzdWx0c0J1dHRvbkVsZW1lbnQpOiBkaXR0bwor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OmNhbmNlbEJ1dHRvbkVsZW1lbnQp
OiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OmFkZFNlYXJjaFJl
c3VsdCk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6c2hvd1Bv
cHVwKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjpoaWRlUG9w
dXApOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OmNvbXB1dGVD
b250cm9sSGVpZ2h0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVs
ZDo6dXBkYXRlRnJvbUVsZW1lbnQpOiBNb3ZlZCBzZWFyY2ggZmllbGQgcmVsYXRlZCBjb2RlIGZy
b20gUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U2VhcmNoRmllbGQ6OnVwZGF0ZUNhbmNlbEJ1dHRvblZpc2liaWxpdHkpOiBSZW5hbWVkIHRvIFJl
bmRlclNlYXJjaEZpZWxkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OnZp
c2liaWxpdHlGb3JDYW5jZWxCdXR0b24pOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U2VhcmNoRmllbGQ6OmF1dG9zYXZlTmFtZSk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTZWFyY2hGaWVsZDo6dmFsdWVDaGFuZ2VkKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNlYXJjaEZpZWxkOjppdGVtVGV4dCk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTZWFyY2hGaWVsZDo6aXRlbUxhYmVsKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNlYXJjaEZpZWxkOjppdGVtSWNvbik6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
ZWFyY2hGaWVsZDo6aXRlbUlzRW5hYmxlZCk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTZWFyY2hGaWVsZDo6aXRlbVN0eWxlKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNlYXJjaEZpZWxkOjptZW51U3R5bGUpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U2VhcmNoRmllbGQ6OmNsaWVudEluc2V0TGVmdCk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTZWFyY2hGaWVsZDo6Y2xpZW50SW5zZXRSaWdodCk6IGRpdHRvCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6Y2xpZW50UGFkZGluZ0xlZnQpOiBkaXR0bworICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OmNsaWVudFBhZGRpbmdSaWdodCk6IGRpdHRv
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6bGlzdFNpemUpOiBkaXR0bwor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OnNlbGVjdGVkSW5kZXgpOiBkaXR0
bworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OnBvcHVwRGlkSGlkZSk6IGRp
dHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6aXRlbUlzU2VwYXJhdG9y
KTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjppdGVtSXNMYWJl
bCk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6aXRlbUlzU2Vs
ZWN0ZWQpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OnNldFRl
eHRGcm9tSXRlbSk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6
Zm9udFNlbGVjdG9yKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxk
Ojpob3N0V2luZG93KTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxk
OjpjcmVhdGVTY3JvbGxiYXIpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNo
RmllbGQ6OmNvbXB1dGVIZWlnaHRMaW1pdCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU2VhcmNoRmllbGQ6OmNlbnRlckNvbnRhaW5lcklmTmVlZGVkKTogQWRkZWQuCisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmg6CisgICAgICAgIChXZWJDb3JlOjp0b1Jl
bmRlclNlYXJjaEZpZWxkKTogQWRkZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZSk6IFJlbW92ZSBzZWFyY2gg
ZmllbGQgcmVsYXRlZCBjb2RlLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjp+UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKTogZGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNvbXB1dGVIZWlnaHRMaW1p
dCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
OjpsYXlvdXQpOiBVc2UgbmV3IG1ldGhvZHMgZm9yIHJlbW92aW5nIGlzU2VhcmNoRmllbGQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNvbXB1dGVDb250
cm9sSGVpZ2h0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6OnVwZGF0ZUZyb21FbGVtZW50KTogUmVtb3ZlIHNlYXJjaCBmaWVsZCByZWxhdGVk
IGNvZGUuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5o
OgorICAgICAgICAoUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y2VudGVyQ29udGFpbmVySWZOZWVkZWQp
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6
Y29udGFpbmVyRWxlbWVudCk6IEV4cG9zZWQgZm9yIFJlbmRlclNlYXJjaEZpZWxkLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppbm5lckJsb2NrRWxlbWVu
dCk6IEV4cG9zZWQgZm9yIFJlbmRlclNlYXJjaEZpZWxkLgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJpbmdBbGxJbk9uZS5jcHA6IEFkZGVkIFJlbmRlclNlYXJjaEZpZWxkLmNwcAorCisyMDEy
LTA2LTE3ICBZb3NoaWZ1bWkgSW5vdWUgIDx5b3NpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
W0Zvcm1zXSBDb3B5IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS57Y3BwLGh9IHRvIFJlbmRl
clNlYXJjaEZpbGVkLntjcHAsaH0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTg5MTU1CisKKyAgICAgICAgVGhpcyBwYXRjaCBjb3BpZXMgUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lLmNwcCBhbmQgLmggaW50byBSZW5kZXJTZWFyY2hGaWVsZC5jcHAK
KyAgICAgICAgYW5kIC5oIHdpdGgganVzdCAiY3AiIGNvZGUuIE5ldyBmaWxlcyBhcmVuJ3QgY29t
cGlsZWQgdW50aWwgYnVnIDg4OTgwLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyBwYXRj
aCBkb2Vzbid0IGNoYW5nZSBiZWhhdmlvci4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJT
ZWFyY2hGaWVsZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUZXh0Q29udHJvbElubmVyQmxvY2s6OnBvc2l0aW9uRm9yUG9pbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjp+UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y29udGFpbmVyRWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmlubmVyQmxvY2tFbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aW5uZXJT
cGluQnV0dG9uRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6OnJlc3VsdHNCdXR0b25FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZTo6Y2FuY2VsQnV0dG9uRWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnRleHRCYXNlU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjphZGRTZWFyY2hSZXN1
bHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzaG93
UG9wdXApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpo
aWRlUG9wdXApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6
OmxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6
Om5vZGVBdFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZTo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjpjYXBzTG9ja1N0YXRlTWF5SGF2ZUNoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpoYXNDb250cm9sQ2xpcCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNvbnRyb2xDbGlwUmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmdldEF2
Z0NoYXJXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmU6OnByZWZlcnJlZENvbnRlbnRXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmU6OmNvbXB1dGVDb250cm9sSGVpZ2h0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6dXBkYXRlRnJvbUVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjcmVhdGVJbm5lclRl
eHRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6
OmNyZWF0ZUlubmVyQmxvY2tTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OnVwZGF0ZUNhbmNlbEJ1dHRvblZpc2liaWxpdHkpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp2aXNpYmlsaXR5Rm9yQ2FuY2Vs
QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6
dGV4dFNob3VsZEJlVHJ1bmNhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6YXV0b3NhdmVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZTo6dmFsdWVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aXRlbVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppdGVtTGFiZWwpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppdGVtSWNvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Oml0ZW1Jc0VuYWJsZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppdGVtU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjptZW51U3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjbGllbnRJbnNl
dExlZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpj
bGllbnRJbnNldFJpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6Y2xpZW50UGFkZGluZ0xlZnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lOjpjbGllbnRQYWRkaW5nUmlnaHQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsaXN0U2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNlbGVjdGVkSW5kZXgpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpwb3B1cERpZEhpZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppdGVtSXNTZXBh
cmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpp
dGVtSXNMYWJlbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmU6Oml0ZW1Jc1NlbGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZTo6c2V0VGV4dEZyb21JdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZTo6Zm9udFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aG9zdFdpbmRvdyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmF1dG9zY3JvbGwpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzY3JvbGxXaWR0aCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNjcm9sbEhlaWdodCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNjcm9sbExlZnQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzY3JvbGxU
b3ApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzZXRT
Y3JvbGxMZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6c2V0U2Nyb2xsVG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6bG9naWNhbFNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OmNyZWF0ZVNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmlucHV0RWxlbWVudCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclNlYXJjaEZpZWxkLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpwb3B1cElzVmlzaWJsZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmlzVGV4dEZpZWxkKToKKyAgICAgICAg
KFdlYkNvcmU6OnRvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKToKKyAgICAgICAgKFJlbmRl
clRleHRDb250cm9sSW5uZXJCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29u
dHJvbElubmVyQmxvY2s6OlJlbmRlclRleHRDb250cm9sSW5uZXJCbG9jayk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbElubmVyQmxvY2s6Omhhc0xpbmVJZkVtcHR5KToKKwog
MjAxMi0wNi0xNyAgWW9zaGlmdW1pIElub3VlICA8eW9zaW5AY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMjA1NjUuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cmlu
ZGV4IGUyNzNjMGZkNTYwMTViOTU5NjNiZmI0ODM4OWEwM2IyYzc1YmRiYWQuLjlhZDg1YmI5NDIy
NTA0ZGMzMmNkNmQxZmY4OGYzNDY4M2FlZDQ2ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0x
Mzg3LDYgKzEzODcsNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcmVuZGVyaW5nL1JlbmRl
clNjcm9sbGJhci5jcHAKICAgICByZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyUGFydC5jcHAKICAg
ICByZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyVGhlbWUuY3BwCisgICAgcmVuZGVyaW5nL1JlbmRl
clNlYXJjaEZpZWxkLmNwcAogICAgIHJlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwCiAgICAgcmVu
ZGVyaW5nL1JlbmRlclRhYmxlLmNwcAogICAgIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNhcHRpb24u
Y3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA0YTQ1YzdmMDM0MDAxMmFiMzYx
ZTAzYmNiYTk0MjY3NDJlYzU2MDcwLi4zN2I3ZTVhYzI5OTdlYTMxNjFlOTRhYzg2NDYxYTZjZTY3
NjViMzQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTM5MDYsNiArMzkwNiw4
IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNjcm9sbGJhclBhcnQuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNjcm9s
bGJhclRoZW1lLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJh
clRoZW1lLmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5j
cHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5oIFwKIAlT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VsZWN0aW9uSW5mby5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNsaWRlci5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Rhcmdl
dC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IDE0ZjdlZDE4MGE3MTJiZTUw
NDg4YWM4NWM2MWM2Y2U0MjZkN2QzODQuLjY5YmFhOTI5ZmQ2NzJjOTI2MTY0OGY4YjIyMGY1N2Jj
ZTY3ZDNmZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291
cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMTMwOSw2ICsxMzA5LDcgQEAgU09VUkNFUyArPSBc
CiAgICAgcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhci5jcHAgXAogICAgIHJlbmRlcmluZy9SZW5k
ZXJTY3JvbGxiYXJQYXJ0LmNwcCBcCiAgICAgcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclRoZW1l
LmNwcCBcCisgICAgcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmNwcCBcCiAgICAgcmVuZGVy
aW5nL1JlbmRlclNsaWRlci5jcHAgXAogICAgIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAgXAog
ICAgIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNhcHRpb24uY3BwIFwKQEAgLTI1MTQsNiArMjUxNSw3
IEBAIEhFQURFUlMgKz0gXAogICAgIHJlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXIuaCBcCiAgICAg
cmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclBhcnQuaCBcCiAgICAgcmVuZGVyaW5nL1JlbmRlclNj
cm9sbGJhclRoZW1lLmggXAorICAgIHJlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5oIFwKICAg
ICByZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmggXAogICAgIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNh
cHRpb24uaCBcCiAgICAgcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oIFwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQppbmRleCBmZjNhM2E4MjJmNmZiMjhkMzRkZmY5ZGQ4NjA3NGI3NTcxOGMzMTFlLi43YzJiYTdm
NTQ2YmZlMjc4ZTMyYWQ0ODkzNWZhYzc4MWQ1N2E3ZjFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC00
OTAwLDYgKzQ5MDAsOCBAQAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJQ
YXJ0LmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJUaGVtZS5jcHAn
LAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJUaGVtZS5oJywKKyAgICAg
ICAgICAgICdyZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwJywKKyAgICAgICAgICAgICdy
ZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1Jl
bmRlclNlbGVjdGlvbkluZm8uaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNsaWRl
ci5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuaCcsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDE3YWUwZGY1MTY2
NjYxZWFjM2ExYjcwYWMyYjNmN2Y4NDYwMjI3ZTUuLmQwNmRkYWFhMTQ2MmQ4OWNjNTFmOWYzZWQ2
ZDhiZWU0ODljZWFkZWMgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCkBAIC00MTUwMyw2ICs0MTUwMyw2MiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJ
CTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcUmVuZGVyU2VhcmNoRmllbGQu
Y3BwIgorCQkJCT4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iRGVidWd8V2lu
MzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJ
CQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3Vy
YXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIi
CisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJ
CQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRp
b24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IkRlYnVnX0NhaXJvX0NGTGl0
ZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRv
b2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29u
ZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iUmVsZWFzZV9D
YWlyb19DRkxpdGV8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+
CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJ
CTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9
IkRlYnVnX0FsbHxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4K
KwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0i
UHJvZHVjdGlvbnxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4K
KwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxyZW5kZXJpbmdcUmVuZGVyU2VhcmNoRmllbGQuaCIKKwkJCQk+CisJCQk8L0ZpbGU+
CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXFJlbmRlclNlbGVjdGlv
bkluZm8uaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZWMzNjY2ZDVhNWM1Yzc4ODIzMTI3M2Y3
YTk0OWRlOTA1ZjQ5ZmNhMi4uZGY4ZDVhODYyNWI4NzcyZGEyOGY2Y2RlMGMyODJkYThmMTQyZmRm
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMTE4OSw2ICsxMTg5LDggQEAKIAkJNDUwOTlDNDExMzcwQTc4MDAwNThENTEzIC8q
IEljb25VUkwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDUwOTlDNDAxMzcwQTc4MDAwNThENTEzIC8qIEljb25VUkwuY3BwICovOyB9OwogCQk0NTBD
RUJGMDE1MDczQkJFMDAyQkIxNDkgLyogTGFiZWxhYmxlRWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NTBDRUJFRTE1MDczQkJFMDAyQkIx
NDkgLyogTGFiZWxhYmxlRWxlbWVudC5jcHAgKi87IH07CiAJCTQ1MENFQkYxMTUwNzNCQkUwMDJC
QjE0OSAvKiBMYWJlbGFibGVFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0NTBDRUJFRjE1MDczQkJFMDAyQkIxNDkgLyogTGFiZWxhYmxlRWxl
bWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTQ1OEZFNDA5MTU4OURGMEIwMDU2MDlFNiAvKiBSZW5kZXJTZWFyY2hGaWVsZC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NThGRTQwNzE1ODlERjBC
MDA1NjA5RTYgLyogUmVuZGVyU2VhcmNoRmllbGQuY3BwICovOyB9OworCQk0NThGRTQwQTE1ODlE
RjBCMDA1NjA5RTYgLyogUmVuZGVyU2VhcmNoRmllbGQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1OEZFNDA4MTU4OURGMEIwMDU2MDlFNiAvKiBSZW5k
ZXJTZWFyY2hGaWVsZC5oICovOyB9OwogCQk0NUJBQzJCMDEzNjBCQkFCMDA1REEyNTggLyogSWNv
blVSTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDVC
QUMyQUYxMzYwQkJBQjAwNURBMjU4IC8qIEljb25VUkwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NUZFQTVDRjE1NkRERThDMDA2NTQxMDEgLyog
RGVjaW1hbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0NUZFQTVDRDE1NkRERThDMDA2NTQxMDEgLyogRGVjaW1hbC5jcHAgKi87IH07CiAJCTQ1RkVB
NUQwMTU2RERFOEMwMDY1NDEwMSAvKiBEZWNpbWFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NUZFQTVDRTE1NkRERThDMDA2NTQxMDEgLyogRGVjaW1h
bC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC04
MjE4LDYgKzgyMjAsOCBAQAogCQk0NTA5OUM0MDEzNzBBNzgwMDA1OEQ1MTMgLyogSWNvblVSTC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJY29uVVJMLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDUwQ0VCRUUxNTA3M0JCRTAwMkJCMTQ5IC8qIExh
YmVsYWJsZUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TGFiZWxhYmxlRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ1MENF
QkVGMTUwNzNCQkUwMDJCQjE0OSAvKiBMYWJlbGFibGVFbGVtZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IExhYmVsYWJsZUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNDU4RkU0MDcxNTg5REYwQjAwNTYwOUU2IC8qIFJlbmRlclNlYXJjaEZpZWxk
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclNlYXJjaEZp
ZWxkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDU4RkU0MDgxNTg5REYwQjAw
NTYwOUU2IC8qIFJlbmRlclNlYXJjaEZpZWxkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJlbmRlclNlYXJjaEZpZWxkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTQ1QkFDMkFGMTM2MEJCQUIwMDVEQTI1OCAvKiBJY29uVVJMLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEljb25VUkwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDVGRUE1Q0QxNTZEREU4QzAwNjU0MTAxIC8qIERlY2ltYWwuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRGVjaW1hbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTQ1RkVBNUNFMTU2RERFOEMwMDY1NDEwMSAvKiBEZWNpbWFsLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlY2ltYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTIxMTE2LDYgKzIxMTIwLDggQEAKIAkJCQlCQzNCRTk5MjBFOUMxQzdDMDA4MzU1ODgg
LyogUmVuZGVyU2Nyb2xsYmFyUGFydC5oICovLAogCQkJCUJDM0JFOUE0MEU5QzIzOTYwMDgzNTU4
OCAvKiBSZW5kZXJTY3JvbGxiYXJUaGVtZS5jcHAgKi8sCiAJCQkJQkMzQkU5OTgwRTlDMUU1RDAw
ODM1NTg4IC8qIFJlbmRlclNjcm9sbGJhclRoZW1lLmggKi8sCisJCQkJNDU4RkU0MDcxNTg5REYw
QjAwNTYwOUU2IC8qIFJlbmRlclNlYXJjaEZpZWxkLmNwcCAqLywKKwkJCQk0NThGRTQwODE1ODlE
RjBCMDA1NjA5RTYgLyogUmVuZGVyU2VhcmNoRmllbGQuaCAqLywKIAkJCQkwRjExQTU0RTBGMzky
MzMxMDBDMzc4ODQgLyogUmVuZGVyU2VsZWN0aW9uSW5mby5oICovLAogCQkJCUFCMjQ3QTZBMEFG
RDYzODMwMDNGQTVGRCAvKiBSZW5kZXJTbGlkZXIuY3BwICovLAogCQkJCUFCMjQ3QTZCMEFGRDYz
ODMwMDNGQTVGRCAvKiBSZW5kZXJTbGlkZXIuaCAqLywKQEAgLTI0MjcyLDYgKzI0Mjc4LDcgQEAK
IAkJCQlCQzNCRTk5NDBFOUMxQzdDMDA4MzU1ODggLyogUmVuZGVyU2Nyb2xsYmFyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzNCRTk5NTBFOUMxQzdDMDA4MzU1ODggLyogUmVuZGVyU2Nyb2xsYmFy
UGFydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMzQkU5OTkwRTlDMUU1RDAwODM1NTg4IC8qIFJl
bmRlclNjcm9sbGJhclRoZW1lLmggaW4gSGVhZGVycyAqLywKKwkJCQk0NThGRTQwQTE1ODlERjBC
MDA1NjA5RTYgLyogUmVuZGVyU2VhcmNoRmllbGQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTFB
NTRGMEYzOTIzMzEwMEMzNzg4NCAvKiBSZW5kZXJTZWxlY3Rpb25JbmZvLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBQjI0N0E2RDBBRkQ2MzgzMDAzRkE1RkQgLyogUmVuZGVyU2xpZGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzhDOEZBRTBERENEMzFCMDBCNTkyRjQgLyogUmVuZGVyU3R5bGUuaCBp
biBIZWFkZXJzICovLApAQCAtMjc0NjcsNiArMjc0NzQsNyBAQAogCQkJCUJDM0JFOTkzMEU5QzFD
N0MwMDgzNTU4OCAvKiBSZW5kZXJTY3JvbGxiYXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMz
QkU5QUIwRTlDMjQyMDAwODM1NTg4IC8qIFJlbmRlclNjcm9sbGJhclBhcnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQkMzQkU5QTUwRTlDMjM5NjAwODM1NTg4IC8qIFJlbmRlclNjcm9sbGJhclRo
ZW1lLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ1OEZFNDA5MTU4OURGMEIwMDU2MDlFNiAvKiBS
ZW5kZXJTZWFyY2hGaWVsZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBQjI0N0E2QzBBRkQ2Mzgz
MDAzRkE1RkQgLyogUmVuZGVyU2xpZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDOEM4RkFE
MEREQ0QzMUIwMEI1OTJGNCAvKiBSZW5kZXJTdHlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjRFNTcxNzEzMTMyNzYyMDBDRjg1QUYgLyogUmVuZGVyU1ZHQWxsSW5PbmUuY3BwIGluIFNvdXJj
ZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAppbmRleCA1YzZi
ZjE2NTk4M2MwYzgyMzE0MzJmMzZhN2ZlZDhlNWFlMWYxZTM0Li44ZDE1Y2EyOGRhYjI4NGEwZTdj
MDFiNWZlZjgyYWZjOTAxMzQ4OWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxJbnB1dEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxl
bWVudC5jcHAKQEAgLTQ1Nyw3ICs0NTcsNiBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnN1YnRy
ZWVIYXNDaGFuZ2VkKCkKIHsKICAgICBBU1NFUlQoaXNUZXh0RmllbGQoKSk7CiAgICAgQVNTRVJU
KHJlbmRlcmVyKCkpOwotICAgIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZSogcmVuZGVyVGV4
dENvbnRyb2wgPSB0b1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShyZW5kZXJlcigpKTsKIAog
ICAgIGJvb2wgd2FzQ2hhbmdlZCA9IHdhc0NoYW5nZWRTaW5jZUxhc3RGb3JtQ29udHJvbENoYW5n
ZUV2ZW50KCk7CiAgICAgc2V0Q2hhbmdlZFNpbmNlTGFzdEZvcm1Db250cm9sQ2hhbmdlRXZlbnQo
dHJ1ZSk7CkBAIC00NzMsMTIgKzQ3Miw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c3VidHJl
ZUhhc0NoYW5nZWQoKQogICAgIC8vIFJlY2FsYyBmb3IgOmludmFsaWQgYW5kIGhhc1VuYWNjZXB0
YWJsZVZhbHVlKCkgY2hhbmdlLgogICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKIAotICAgIGlm
IChjYW5jZWxCdXR0b25FbGVtZW50KCkpCi0gICAgICAgIHJlbmRlclRleHRDb250cm9sLT51cGRh
dGVDYW5jZWxCdXR0b25WaXNpYmlsaXR5KCk7Ci0KLSAgICAvLyBJZiB0aGUgaW5jcmVtZW50YWwg
YXR0cmlidXRlIGlzIHNldCwgdGhlbiBkaXNwYXRjaCB0aGUgc2VhcmNoIGV2ZW50Ci0gICAgaWYg
KHNlYXJjaEV2ZW50c1Nob3VsZEJlRGlzcGF0Y2hlZCgpICYmIGlzU2VhcmNoRmllbGQoKSAmJiBt
X2lucHV0VHlwZSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8U2VhcmNoSW5wdXRUeXBlKj4obV9pbnB1
dFR5cGUuZ2V0KCkpLT5zdGFydFNlYXJjaEV2ZW50VGltZXIoKTsKKyAgICBtX2lucHV0VHlwZS0+
c3VidHJlZUhhc0NoYW5nZWQoKTsKIAogICAgIGlmICghd2FzQ2hhbmdlZCAmJiBmb2N1c2VkKCkp
IHsKICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpCkBAIC05
NzIsMTEgKzk2Niw2IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0UGxhY2Vob2xkZXIoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKICAgICBzZXRBdHRyaWJ1dGUocGxhY2Vob2xkZXJBdHRyLCB2YWx1
ZSk7CiB9CiAKLWJvb2wgSFRNTElucHV0RWxlbWVudDo6c2VhcmNoRXZlbnRzU2hvdWxkQmVEaXNw
YXRjaGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gaGFzQXR0cmlidXRlKGluY3JlbWVudGFsQXR0
cik7Ci19Ci0KIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWVGcm9tUmVuZGVyZXIoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKIHsKICAgICAvLyBGaWxlIHVwbG9hZCBjb250cm9scyB3aWxsIG5l
dmVyIHVzZSB0aGlzLgpAQCAtMTMzMyw5ICsxMzIyLDcgQEAgYm9vbCBIVE1MSW5wdXRFbGVtZW50
Ojppc1JlcXVpcmVkRm9ybUNvbnRyb2woKSBjb25zdAogCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6
OmFkZFNlYXJjaFJlc3VsdCgpCiB7Ci0gICAgQVNTRVJUKGlzU2VhcmNoRmllbGQoKSk7Ci0gICAg
aWYgKHJlbmRlcmVyKCkpCi0gICAgICAgIHRvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKHJl
bmRlcmVyKCkpLT5hZGRTZWFyY2hSZXN1bHQoKTsKKyAgICBtX2lucHV0VHlwZS0+YWRkU2VhcmNo
UmVzdWx0KCk7CiB9CiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6b25TZWFyY2goKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAppbmRleCA5ODZkOTFlNDY2MmMzYTk4NzQxY2M4
ZTc3MGE5MWY4N2UxMDUzZjllLi5jYjUyMzFmMjdkMDllMTRiOGM1MjcyZmRkMWRiMWJjYjYzZWM0
YmU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaApAQCAtMjI3LDcgKzIy
Nyw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYWRkU2VhcmNoUmVzdWx0KCk7CiAgICAgdm9pZCBv
blNlYXJjaCgpOwotICAgIGJvb2wgc2VhcmNoRXZlbnRzU2hvdWxkQmVEaXNwYXRjaGVkKCkgY29u
c3Q7CiAKICNpZiBFTkFCTEUoREFUQUxJU1QpCiAgICAgSFRNTEVsZW1lbnQqIGxpc3QoKSBjb25z
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNwcAppbmRleCBkZmM1MGUwMGJkOGFiMGQyN2FmM2M1
OWZiNDRhNTFmMTIwNjg4Nzk3Li5kYWUwM2YzY2MyNmQxYWEyMDNmMWJlNmQ1ZTc0NWM5YTFkNGU4
ZGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCkBAIC01MjMsNiArNTIzLDEwIEBAIHZv
aWQgSW5wdXRUeXBlOjphY2Nlc3NLZXlBY3Rpb24oYm9vbCkKICAgICBlbGVtZW50KCktPmZvY3Vz
KGZhbHNlKTsKIH0KIAordm9pZCBJbnB1dFR5cGU6OmFkZFNlYXJjaFJlc3VsdCgpCit7Cit9CisK
IHZvaWQgSW5wdXRUeXBlOjphdHRhY2goKQogewogfQpAQCAtODUyLDYgKzg1NiwxMCBAQCB2b2lk
IElucHV0VHlwZTo6cmVhZG9ubHlBdHRyaWJ1dGVDaGFuZ2VkKCkKIHsKIH0KIAordm9pZCBJbnB1
dFR5cGU6OnN1YnRyZWVIYXNDaGFuZ2VkKCkKK3sKK30KKwogU3RyaW5nIElucHV0VHlwZTo6ZGVm
YXVsdFRvb2xUaXAoKSBjb25zdAogewogICAgIHJldHVybiBTdHJpbmcoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0lu
cHV0VHlwZS5oCmluZGV4IDM4NjA1MWZhY2I3MTBhNmI1NmJkYjdhOGYwYTU5OTdjNjM1MWIyMDAu
LmI2OGQ5N2Y1ZDY0NTM1NWI3MTA1YzlmNDgxNjY4MjczZjQ4YTQzZjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9J
bnB1dFR5cGUuaApAQCAtMjAwLDcgKzIwMCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
aGFuZGxlQmx1ckV2ZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIGFjY2Vzc0tleUFjdGlvbihib29s
IHNlbmRNb3VzZUV2ZW50cyk7CiAgICAgdmlydHVhbCBib29sIGNhbkJlU3VjY2Vzc2Z1bFN1Ym1p
dEJ1dHRvbigpOwotCisgICAgdmlydHVhbCB2b2lkIHN1YnRyZWVIYXNDaGFuZ2VkKCk7CiAKICAg
ICAvLyBTaGFkb3cgdHJlZSBoYW5kbGluZwogCkBAIC0yMjIsNiArMjIyLDcgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoKTsKICAgICB2aXJ0dWFsIFJlbmRl
ck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCBhZGRTZWFyY2hSZXN1bHQoKTsKICAgICB2aXJ0dWFsIHZvaWQg
YXR0YWNoKCk7CiAgICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwogICAgIHZpcnR1YWwgdm9pZCBt
aW5Pck1heEF0dHJpYnV0ZUNoYW5nZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvU2VhcmNoSW5wdXRUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvU2VhcmNoSW5wdXRU
eXBlLmNwcAppbmRleCA2ZjUwMGRhZjNmN2I1ZjFlMDViZDRhMmQwYjJmOWVlNDdjM2IwNGE0Li45
NTg4NzhjZWQyNzA0OTgxNzI3Y2E1MDFjYTc0OTJhNzlhM2ExODA4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL1NlYXJjaElucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9TZWFyY2hJbnB1dFR5cGUuY3BwCkBAIC0zMiwxNCArMzIsMTcgQEAKICNpbmNsdWRlICJT
ZWFyY2hJbnB1dFR5cGUuaCIKIAogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCi0jaW5jbHVkZSAi
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgiCisjaW5jbHVkZSAiUmVuZGVyU2VhcmNoRmll
bGQuaCIKICNpbmNsdWRlICJTaGFkb3dSb290LmgiCiAjaW5jbHVkZSAiVGV4dENvbnRyb2xJbm5l
ckVsZW1lbnRzLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCiBpbmxpbmUgU2VhcmNoSW5w
dXRUeXBlOjpTZWFyY2hJbnB1dFR5cGUoSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkKICAgICA6
IEJhc2VUZXh0SW5wdXRUeXBlKGVsZW1lbnQpCiAgICAgLCBtX3NlYXJjaEV2ZW50VGltZXIodGhp
cywgJlNlYXJjaElucHV0VHlwZTo6c2VhcmNoRXZlbnRUaW1lckZpcmVkKQpAQCAtNTEsNiArNTQs
MTcgQEAgUGFzc093blB0cjxJbnB1dFR5cGU+IFNlYXJjaElucHV0VHlwZTo6Y3JlYXRlKEhUTUxJ
bnB1dEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTZWFyY2hJbnB1
dFR5cGUoZWxlbWVudCkpOwogfQogCit2b2lkIFNlYXJjaElucHV0VHlwZTo6YWRkU2VhcmNoUmVz
dWx0KCkKK3sKKyAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGVsZW1lbnQoKS0+cmVu
ZGVyZXIoKSkKKyAgICAgICAgdG9SZW5kZXJTZWFyY2hGaWVsZChyZW5kZXJlciktPmFkZFNlYXJj
aFJlc3VsdCgpOworfQorCitSZW5kZXJPYmplY3QqIFNlYXJjaElucHV0VHlwZTo6Y3JlYXRlUmVu
ZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSopIGNvbnN0Cit7CisgICAgcmV0
dXJuIG5ldyAoYXJlbmEpIFJlbmRlclNlYXJjaEZpZWxkKGVsZW1lbnQoKSk7Cit9CisKIGNvbnN0
IEF0b21pY1N0cmluZyYgU2VhcmNoSW5wdXRUeXBlOjpmb3JtQ29udHJvbFR5cGUoKSBjb25zdAog
ewogICAgIHJldHVybiBJbnB1dFR5cGVOYW1lczo6c2VhcmNoKCk7CkBAIC0xNTEsNSArMTY1LDE5
IEBAIHZvaWQgU2VhcmNoSW5wdXRUeXBlOjpzZWFyY2hFdmVudFRpbWVyRmlyZWQoVGltZXI8U2Vh
cmNoSW5wdXRUeXBlPiopCiAgICAgZWxlbWVudCgpLT5vblNlYXJjaCgpOwogfQogCitib29sIFNl
YXJjaElucHV0VHlwZTo6c2VhcmNoRXZlbnRzU2hvdWxkQmVEaXNwYXRjaGVkKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gZWxlbWVudCgpLT5oYXNBdHRyaWJ1dGUoaW5jcmVtZW50YWxBdHRyKTsKK30K
Kwordm9pZCBTZWFyY2hJbnB1dFR5cGU6OnN1YnRyZWVIYXNDaGFuZ2VkKCkKK3sKKyAgICBpZiAo
bV9jYW5jZWxCdXR0b24uZ2V0KCkpCisgICAgICAgIHRvUmVuZGVyU2VhcmNoRmllbGQoZWxlbWVu
dCgpLT5yZW5kZXJlcigpKS0+dXBkYXRlQ2FuY2VsQnV0dG9uVmlzaWJpbGl0eSgpOworCisgICAg
Ly8gSWYgdGhlIGluY3JlbWVudGFsIGF0dHJpYnV0ZSBpcyBzZXQsIHRoZW4gZGlzcGF0Y2ggdGhl
IHNlYXJjaCBldmVudAorICAgIGlmIChzZWFyY2hFdmVudHNTaG91bGRCZURpc3BhdGNoZWQoKSkK
KyAgICAgICAgc3RhcnRTZWFyY2hFdmVudFRpbWVyKCk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvU2VhcmNoSW5wdXRUeXBlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL1NlYXJjaElucHV0VHlwZS5oCmluZGV4IGFiMTkxMDNhZmRm
YWU4ZTU1NjY3YmY0Y2U0MTMyZmI4ODA1YjgyMjUuLmVjZTM1YTI1OWYwODFlMDdiNDBkNDdjYTc3
YzI4ODE2MjU1YmY1NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvU2VhcmNoSW5w
dXRUeXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9TZWFyY2hJbnB1dFR5cGUuaApAQCAt
NDMsMTEgKzQzLDEyIEBAIGNsYXNzIFNlYXJjaElucHV0VHlwZSA6IHB1YmxpYyBCYXNlVGV4dElu
cHV0VHlwZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8SW5wdXRUeXBlPiBjcmVh
dGUoSFRNTElucHV0RWxlbWVudCopOwogCi0gICAgdm9pZCBzdGFydFNlYXJjaEV2ZW50VGltZXIo
KTsKICAgICB2b2lkIHN0b3BTZWFyY2hFdmVudFRpbWVyKCk7CiAKIHByaXZhdGU6CiAgICAgU2Vh
cmNoSW5wdXRUeXBlKEhUTUxJbnB1dEVsZW1lbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkU2Vh
cmNoUmVzdWx0KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJl
bmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKSBjb25zdCBPVkVSUklERTsKICAgICB2
aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xUeXBlKCkgY29uc3QgT1ZFUlJJ
REU7CiAgICAgdmlydHVhbCBib29sIHNob3VsZFJlc3BlY3RTcGVlY2hBdHRyaWJ1dGUoKSBPVkVS
UklERTsKICAgICB2aXJ0dWFsIGJvb2wgaXNTZWFyY2hGaWVsZCgpIGNvbnN0IE9WRVJSSURFOwpA
QCAtNTcsOCArNTgsMTEgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIEhUTUxFbGVtZW50KiByZXN1
bHRzQnV0dG9uRWxlbWVudCgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgSFRNTEVsZW1l
bnQqIGNhbmNlbEJ1dHRvbkVsZW1lbnQoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZv
aWQgaGFuZGxlS2V5ZG93bkV2ZW50KEtleWJvYXJkRXZlbnQqKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgc3VidHJlZUhhc0NoYW5nZWQoKTsKIAogICAgIHZvaWQgc2VhcmNoRXZlbnRUaW1l
ckZpcmVkKFRpbWVyPFNlYXJjaElucHV0VHlwZT4qKTsKKyAgICBib29sIHNlYXJjaEV2ZW50c1No
b3VsZEJlRGlzcGF0Y2hlZCgpIGNvbnN0OworICAgIHZvaWQgc3RhcnRTZWFyY2hFdmVudFRpbWVy
KCk7CiAKICAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IG1fcmVzdWx0c0J1dHRvbjsKICAgICBSZWZQ
dHI8SFRNTEVsZW1lbnQ+IG1fY2FuY2VsQnV0dG9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAKaW5kZXggMTAwZGFl
YjY0N2I5ZDc3YWE0YzFiNDMxMmJjOWM1ZTVmYjE4N2FkNi4uNWQyNjg0MWMyNDM1NzA1NWY3YjVi
OThiNzE4MThiMzA1N2MxYWQxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFk
b3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCkBAIC0zNyw3ICszNyw3IEBACiAj
aW5jbHVkZSAiSFRNTFRleHRBcmVhRWxlbWVudC5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIK
ICNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
LmgiCisjaW5jbHVkZSAiUmVuZGVyU2VhcmNoRmllbGQuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3
LmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRo
ZW1lLmgiCkBAIC0xNTEsNyArMTUxLDcgQEAgdm9pZCBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25F
bGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldmVudCkKICAgICBpZiAoZXZlbnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQgJiYgZXZlbnQtPmlzTW91c2VF
dmVudCgpICYmIHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCktPmJ1dHRvbigpID09IExl
ZnRCdXR0b24pIHsKICAgICAgICAgaW5wdXQtPmZvY3VzKCk7CiAgICAgICAgIGlucHV0LT5zZWxl
Y3QoKTsKLSAgICAgICAgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKiByZW5kZXJlciA9IHRv
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKGlucHV0LT5yZW5kZXJlcigpKTsKKyAgICAgICAg
UmVuZGVyU2VhcmNoRmllbGQqIHJlbmRlcmVyID0gdG9SZW5kZXJTZWFyY2hGaWVsZChpbnB1dC0+
cmVuZGVyZXIoKSk7CiAgICAgICAgIGlmIChyZW5kZXJlci0+cG9wdXBJc1Zpc2libGUoKSkKICAg
ICAgICAgICAgIHJlbmRlcmVyLT5oaWRlUG9wdXAoKTsKICAgICAgICAgZWxzZSBpZiAoaW5wdXQt
Pm1heFJlc3VsdHMoKSA+IDApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRm9y
bVN1Ym1pc3Npb24uY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zvcm1TdWJtaXNzaW9uLmNw
cAppbmRleCBkYTAzOTg3ZWU1ZTk0NTQxNmYxNTE4NDQyNmRlMjE2ZWRkYWM1NTk2Li4yNDdjZTQw
NjhhZDVjZmFiN2Y2OWQyMTU1NzAzMTI5MDI0MzM3N2Q5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvRm9ybVN1Ym1pc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9Gb3JtU3VibWlzc2lvbi5jcHAKQEAgLTE5MCw4ICsxOTAsNyBAQCBQYXNzUmVmUHRyPEZvcm1T
dWJtaXNzaW9uPiBGb3JtU3VibWlzc2lvbjo6Y3JlYXRlKEhUTUxGb3JtRWxlbWVudCogZm9ybSwg
Y29uc3QgQQogICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2Fz
dDxIVE1MSW5wdXRFbGVtZW50Kj4oY29udHJvbCk7CiAgICAgICAgICAgICBpZiAoaW5wdXQtPmlz
VGV4dEZpZWxkKCkpIHsKICAgICAgICAgICAgICAgICBmb3JtVmFsdWVzLmFwcGVuZChwYWlyPFN0
cmluZywgU3RyaW5nPihpbnB1dC0+bmFtZSgpLnN0cmluZygpLCBpbnB1dC0+dmFsdWUoKSkpOwot
ICAgICAgICAgICAgICAgIGlmIChpbnB1dC0+aXNTZWFyY2hGaWVsZCgpKQotICAgICAgICAgICAg
ICAgICAgICBpbnB1dC0+YWRkU2VhcmNoUmVzdWx0KCk7CisgICAgICAgICAgICAgICAgaW5wdXQt
PmFkZFNlYXJjaFJlc3VsdCgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGlucHV0
LT5pc1Bhc3N3b3JkRmllbGQoKSAmJiAhaW5wdXQtPnZhbHVlKCkuaXNFbXB0eSgpKQogICAgICAg
ICAgICAgICAgIGNvbnRhaW5zUGFzc3dvcmREYXRhID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKaW5k
ZXggODQ4ZmMyMTE5N2MyYTdkMjRmMjY0OGRmNzAyMDUyOWYzYzg4MGQzYi4uMzFmMWYyODM3ZGJh
NGFkNjk1YWI4OTAwMTU3OWYzNzdmMDNjZTU4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKQEAgLTMwLDcg
KzMwLDYgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgi
CiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgog
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNs
dWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCkBAIC0zOSw3ICszOCw2IEBACiAjaW5jbHVkZSAiUmVu
ZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJSZW5k
ZXJUaGVtZS5oIgotI2luY2x1ZGUgIlNlYXJjaFBvcHVwTWVudS5oIgogI2luY2x1ZGUgIlNldHRp
bmdzLmgiCiAjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRlICJTdHlsZVJlc29s
dmVyLmgiCkBAIC03MCwxMCArNjgsOCBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyVGV4dENvbnRy
b2xJbm5lckJsb2NrOjpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JgogCiBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShOb2Rl
KiBub2RlKQogICAgIDogUmVuZGVyVGV4dENvbnRyb2wobm9kZSkKLSAgICAsIG1fc2VhcmNoUG9w
dXBJc1Zpc2libGUoZmFsc2UpCiAgICAgLCBtX3Nob3VsZERyYXdDYXBzTG9ja0luZGljYXRvcihm
YWxzZSkKICAgICAsIG1fZGVzaXJlZElubmVyVGV4dEhlaWdodCgtMSkKLSAgICAsIG1fc2VhcmNo
UG9wdXAoMCkKIHsKICAgICBBU1NFUlQobm9kZS0+aXNIVE1MRWxlbWVudCgpKTsKICAgICBBU1NF
UlQobm9kZS0+dG9JbnB1dEVsZW1lbnQoKSk7CkBAIC04MSwyMCArNzcsNiBAQCBSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShOb2RlKiBub2Rl
KQogCiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6On5SZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmUoKQogewotICAgIGlmIChtX3NlYXJjaFBvcHVwKSB7Ci0gICAgICAgIG1fc2VhcmNoUG9w
dXAtPnBvcHVwTWVudSgpLT5kaXNjb25uZWN0Q2xpZW50KCk7Ci0gICAgICAgIG1fc2VhcmNoUG9w
dXAgPSAwOwotICAgIH0KLX0KLQotaW5saW5lIEhUTUxFbGVtZW50KiBSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OmNvbnRhaW5lckVsZW1lbnQoKSBjb25zdAotewotICAgIHJldHVybiBpbnB1
dEVsZW1lbnQoKS0+Y29udGFpbmVyRWxlbWVudCgpOwotfQotCi1pbmxpbmUgSFRNTEVsZW1lbnQq
IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aW5uZXJCbG9ja0VsZW1lbnQoKSBjb25zdAot
ewotICAgIHJldHVybiBpbnB1dEVsZW1lbnQoKS0+aW5uZXJCbG9ja0VsZW1lbnQoKTsKIH0KIAog
aW5saW5lIEhUTUxFbGVtZW50KiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmlubmVyU3Bp
bkJ1dHRvbkVsZW1lbnQoKSBjb25zdApAQCAtMTAyLDg4ICs4NCwxMiBAQCBpbmxpbmUgSFRNTEVs
ZW1lbnQqIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aW5uZXJTcGluQnV0dG9uRWxlbWVu
dCgpIGNvbnN0CiAgICAgcmV0dXJuIGlucHV0RWxlbWVudCgpLT5pbm5lclNwaW5CdXR0b25FbGVt
ZW50KCk7CiB9CiAKLWlubGluZSBIVE1MRWxlbWVudCogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lOjpyZXN1bHRzQnV0dG9uRWxlbWVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlucHV0RWxl
bWVudCgpLT5yZXN1bHRzQnV0dG9uRWxlbWVudCgpOwotfQotCi1pbmxpbmUgSFRNTEVsZW1lbnQq
IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y2FuY2VsQnV0dG9uRWxlbWVudCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGlucHV0RWxlbWVudCgpLT5jYW5jZWxCdXR0b25FbGVtZW50KCk7Ci19
Ci0KIFJlbmRlclN0eWxlKiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnRleHRCYXNlU3R5
bGUoKSBjb25zdAogewogICAgIEhUTUxFbGVtZW50KiBpbm5lckJsb2NrID0gaW5uZXJCbG9ja0Vs
ZW1lbnQoKTsKICAgICByZXR1cm4gaW5uZXJCbG9jayA/IGlubmVyQmxvY2stPnJlbmRlcmVyKCkt
PnN0eWxlKCkgOiBzdHlsZSgpOwogfQogCi12b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6YWRkU2VhcmNoUmVzdWx0KCkKLXsKLSAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IGlu
cHV0RWxlbWVudCgpOwotICAgIGlmIChpbnB1dC0+bWF4UmVzdWx0cygpIDw9IDApCi0gICAgICAg
IHJldHVybjsKLQotICAgIFN0cmluZyB2YWx1ZSA9IGlucHV0LT52YWx1ZSgpOwotICAgIGlmICh2
YWx1ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNldHRpbmdzKiBzZXR0aW5n
cyA9IGRvY3VtZW50KCktPnNldHRpbmdzKCk7Ci0gICAgaWYgKCFzZXR0aW5ncyB8fCBzZXR0aW5n
cy0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQg
c2l6ZSA9IHN0YXRpY19jYXN0PGludD4obV9yZWNlbnRTZWFyY2hlcy5zaXplKCkpOwotICAgIGZv
ciAoaW50IGkgPSBzaXplIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgaWYgKG1fcmVjZW50
U2VhcmNoZXNbaV0gPT0gdmFsdWUpCi0gICAgICAgICAgICBtX3JlY2VudFNlYXJjaGVzLnJlbW92
ZShpKTsKLSAgICB9Ci0KLSAgICBtX3JlY2VudFNlYXJjaGVzLmluc2VydCgwLCB2YWx1ZSk7Ci0g
ICAgd2hpbGUgKHN0YXRpY19jYXN0PGludD4obV9yZWNlbnRTZWFyY2hlcy5zaXplKCkpID4gaW5w
dXQtPm1heFJlc3VsdHMoKSkKLSAgICAgICAgbV9yZWNlbnRTZWFyY2hlcy5yZW1vdmVMYXN0KCk7
Ci0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUgPSBhdXRvc2F2ZU5hbWUoKTsKLSAgICBp
ZiAoIW1fc2VhcmNoUG9wdXApCi0gICAgICAgIG1fc2VhcmNoUG9wdXAgPSBkb2N1bWVudCgpLT5w
YWdlKCktPmNocm9tZSgpLT5jcmVhdGVTZWFyY2hQb3B1cE1lbnUodGhpcyk7Ci0KLSAgICBtX3Nl
YXJjaFBvcHVwLT5zYXZlUmVjZW50U2VhcmNoZXMobmFtZSwgbV9yZWNlbnRTZWFyY2hlcyk7Ci19
Ci0KLXZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzaG93UG9wdXAoKQotewotICAg
IGlmIChtX3NlYXJjaFBvcHVwSXNWaXNpYmxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
IW1fc2VhcmNoUG9wdXApCi0gICAgICAgIG1fc2VhcmNoUG9wdXAgPSBkb2N1bWVudCgpLT5wYWdl
KCktPmNocm9tZSgpLT5jcmVhdGVTZWFyY2hQb3B1cE1lbnUodGhpcyk7Ci0KLSAgICBpZiAoIW1f
c2VhcmNoUG9wdXAtPmVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zZWFyY2hQ
b3B1cElzVmlzaWJsZSA9IHRydWU7Ci0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUgPSBh
dXRvc2F2ZU5hbWUoKTsKLSAgICBtX3NlYXJjaFBvcHVwLT5sb2FkUmVjZW50U2VhcmNoZXMobmFt
ZSwgbV9yZWNlbnRTZWFyY2hlcyk7Ci0KLSAgICAvLyBUcmltIHRoZSByZWNlbnQgc2VhcmNoZXMg
bGlzdCBpZiB0aGUgbWF4aW11bSBzaXplIGhhcyBjaGFuZ2VkIHNpbmNlIHdlIGxhc3Qgc2F2ZWQu
Ci0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBpbnB1dEVsZW1lbnQoKTsKLSAgICBpZiAo
c3RhdGljX2Nhc3Q8aW50PihtX3JlY2VudFNlYXJjaGVzLnNpemUoKSkgPiBpbnB1dC0+bWF4UmVz
dWx0cygpKSB7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIG1fcmVjZW50U2VhcmNoZXMucmVt
b3ZlTGFzdCgpOwotICAgICAgICB9IHdoaWxlIChzdGF0aWNfY2FzdDxpbnQ+KG1fcmVjZW50U2Vh
cmNoZXMuc2l6ZSgpKSA+IGlucHV0LT5tYXhSZXN1bHRzKCkpOwotCi0gICAgICAgIG1fc2VhcmNo
UG9wdXAtPnNhdmVSZWNlbnRTZWFyY2hlcyhuYW1lLCBtX3JlY2VudFNlYXJjaGVzKTsKLSAgICB9
Ci0KLSAgICBtX3NlYXJjaFBvcHVwLT5wb3B1cE1lbnUoKS0+c2hvdyhwaXhlbFNuYXBwZWRJbnRS
ZWN0KGFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkpLCBkb2N1bWVudCgpLT52aWV3KCksIC0xKTsK
LX0KLQotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmhpZGVQb3B1cCgpCi17Ci0g
ICAgaWYgKG1fc2VhcmNoUG9wdXApCi0gICAgICAgIG1fc2VhcmNoUG9wdXAtPnBvcHVwTWVudSgp
LT5oaWRlKCk7Ci19Ci0KIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpwYWludChQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogewog
ICAgIFJlbmRlclRleHRDb250cm9sOjpwYWludChwYWludEluZm8sIHBhaW50T2Zmc2V0KTsKQEAg
LTIwMCw2ICsxMDYsMTEgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnBhaW50
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYKICAgICB9CiB9CiAKK0xh
eW91dFVuaXQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjb21wdXRlSGVpZ2h0TGltaXQo
KSBjb25zdAoreworICAgIHJldHVybiBjb250YWluZXJFbGVtZW50KCkgPyBjb250ZW50SGVpZ2h0
KCkgOiBoZWlnaHQoKTsKK30KKwogdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Omxh
eW91dCgpCiB7CiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZW1vdmUgdGhlIGhlaWdodC1yZWxh
dGVkIGhhY2tzIGluIGxheW91dCgpIGFuZApAQCAtMjI1LDcgKzEzNiw3IEBAIHZvaWQgUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsYXlvdXQoKQogICAgIExheW91dFVuaXQgZGVzaXJlZEhl
aWdodCA9IHRleHRCbG9ja0hlaWdodCgpOwogICAgIExheW91dFVuaXQgY3VycmVudEhlaWdodCA9
IGlubmVyVGV4dFJlbmRlcmVyLT5oZWlnaHQoKTsKIAotICAgIExheW91dFVuaXQgaGVpZ2h0TGlt
aXQgPSAoaW5wdXRFbGVtZW50KCktPmlzU2VhcmNoRmllbGQoKSB8fCAhY29udGFpbmVyKSA/IGhl
aWdodCgpIDogY29udGVudEhlaWdodCgpOworICAgIExheW91dFVuaXQgaGVpZ2h0TGltaXQgPSBj
b21wdXRlSGVpZ2h0TGltaXQoKTsKICAgICBpZiAoY3VycmVudEhlaWdodCA+IGhlaWdodExpbWl0
KSB7CiAgICAgICAgIGlmIChkZXNpcmVkSGVpZ2h0ICE9IGN1cnJlbnRIZWlnaHQpCiAgICAgICAg
ICAgICBzZXROZWVkc0xheW91dCh0cnVlLCBNYXJrT25seVRoaXMpOwpAQCAtMjU4LDEyICsxNjks
OCBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5b3V0KCkKICAgICBpZiAo
IWNvbnRhaW5lciAmJiBjdXJyZW50SGVpZ2h0ICE9IGNvbnRlbnRIZWlnaHQoKSkgewogICAgICAg
ICBMYXlvdXRVbml0IGhlaWdodERpZmYgPSBjdXJyZW50SGVpZ2h0IC0gY29udGVudEhlaWdodCgp
OwogICAgICAgICBpbm5lclRleHRSZW5kZXJlci0+c2V0WShpbm5lclRleHRSZW5kZXJlci0+eSgp
IC0gKGhlaWdodERpZmYgLyAyICsgbGF5b3V0TW9kKGhlaWdodERpZmYsIDIpKSk7Ci0gICAgfSBl
bHNlIGlmIChpbnB1dEVsZW1lbnQoKS0+aXNTZWFyY2hGaWVsZCgpICYmIGNvbnRhaW5lclJlbmRl
cmVyICYmIGNvbnRhaW5lclJlbmRlcmVyLT5oZWlnaHQoKSA+IGNvbnRlbnRIZWlnaHQoKSkgewot
ICAgICAgICAvLyBBIHF1aXJrIGZvciBmaW5kLWluLXBhZ2UgYm94IG9uIFNhZmFyaSBXaW5kb3dz
LgotICAgICAgICAvLyBodHRwOi8vd2Via2l0Lm9yZy9iLzYzMTU3Ci0gICAgICAgIExheW91dFVu
aXQgaGVpZ2h0RGlmZiA9IGNvbnRhaW5lclJlbmRlcmVyLT5oZWlnaHQoKSAtIGNvbnRlbnRIZWln
aHQoKTsKLSAgICAgICAgY29udGFpbmVyUmVuZGVyZXItPnNldFkoY29udGFpbmVyUmVuZGVyZXIt
PnkoKSAtIChoZWlnaHREaWZmIC8gMiArIGxheW91dE1vZChoZWlnaHREaWZmLCAyKSkpOwotICAg
IH0KKyAgICB9IGVsc2UKKyAgICAgICAgY2VudGVyQ29udGFpbmVySWZOZWVkZWQoY29udGFpbmVy
UmVuZGVyZXIpOwogCiAgICAgLy8gSWdub3JlcyB0aGUgcGFkZGluZ3MgZm9yIHRoZSBpbm5lciBz
cGluIGJ1dHRvbi4KICAgICBpZiAoUmVuZGVyQm94KiBpbm5lclNwaW5Cb3ggPSBpbm5lclNwaW5C
dXR0b25FbGVtZW50KCkgPyBpbm5lclNwaW5CdXR0b25FbGVtZW50KCktPnJlbmRlckJveCgpIDog
MCkgewpAQCAtNDMxLDMxICszMzgsMTIgQEAgTGF5b3V0VW5pdCBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6OnByZWZlcnJlZENvbnRlbnRXaWR0aChmbG9hdCBjaGFyV2lkdGgpIGMKIAogTGF5
b3V0VW5pdCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNvbXB1dGVDb250cm9sSGVpZ2h0
KExheW91dFVuaXQgbGluZUhlaWdodCwgTGF5b3V0VW5pdCBub25Db250ZW50SGVpZ2h0KSBjb25z
dAogewotICAgIEhUTUxFbGVtZW50KiByZXN1bHRzQnV0dG9uID0gcmVzdWx0c0J1dHRvbkVsZW1l
bnQoKTsKLSAgICBpZiAoUmVuZGVyQm94KiByZXN1bHRzUmVuZGVyZXIgPSByZXN1bHRzQnV0dG9u
ID8gcmVzdWx0c0J1dHRvbi0+cmVuZGVyQm94KCkgOiAwKSB7Ci0gICAgICAgIHJlc3VsdHNSZW5k
ZXJlci0+Y29tcHV0ZUxvZ2ljYWxIZWlnaHQoKTsKLSAgICAgICAgbm9uQ29udGVudEhlaWdodCA9
IG1heChub25Db250ZW50SGVpZ2h0LCByZXN1bHRzUmVuZGVyZXItPmJvcmRlckFuZFBhZGRpbmdI
ZWlnaHQoKSArIHJlc3VsdHNSZW5kZXJlci0+bWFyZ2luSGVpZ2h0KCkpOwotICAgICAgICBsaW5l
SGVpZ2h0ID0gbWF4KGxpbmVIZWlnaHQsIHJlc3VsdHNSZW5kZXJlci0+aGVpZ2h0KCkpOwotICAg
IH0KLSAgICBIVE1MRWxlbWVudCogY2FuY2VsQnV0dG9uID0gY2FuY2VsQnV0dG9uRWxlbWVudCgp
OwotICAgIGlmIChSZW5kZXJCb3gqIGNhbmNlbFJlbmRlcmVyID0gY2FuY2VsQnV0dG9uID8gY2Fu
Y2VsQnV0dG9uLT5yZW5kZXJCb3goKSA6IDApIHsKLSAgICAgICAgY2FuY2VsUmVuZGVyZXItPmNv
bXB1dGVMb2dpY2FsSGVpZ2h0KCk7Ci0gICAgICAgIG5vbkNvbnRlbnRIZWlnaHQgPSBtYXgobm9u
Q29udGVudEhlaWdodCwgY2FuY2VsUmVuZGVyZXItPmJvcmRlckFuZFBhZGRpbmdIZWlnaHQoKSAr
IGNhbmNlbFJlbmRlcmVyLT5tYXJnaW5IZWlnaHQoKSk7Ci0gICAgICAgIGxpbmVIZWlnaHQgPSBt
YXgobGluZUhlaWdodCwgY2FuY2VsUmVuZGVyZXItPmhlaWdodCgpKTsKLSAgICB9Ci0KICAgICBy
ZXR1cm4gbGluZUhlaWdodCArIG5vbkNvbnRlbnRIZWlnaHQ7CiB9CiAKIHZvaWQgUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lOjp1cGRhdGVGcm9tRWxlbWVudCgpCiB7CiAgICAgUmVuZGVyVGV4
dENvbnRyb2w6OnVwZGF0ZUZyb21FbGVtZW50KCk7Ci0KLSAgICBpZiAoY2FuY2VsQnV0dG9uRWxl
bWVudCgpKQotICAgICAgICB1cGRhdGVDYW5jZWxCdXR0b25WaXNpYmlsaXR5KCk7Ci0KLSAgICBp
ZiAobV9zZWFyY2hQb3B1cElzVmlzaWJsZSkKLSAgICAgICAgbV9zZWFyY2hQb3B1cC0+cG9wdXBN
ZW51KCktPnVwZGF0ZUZyb21FbGVtZW50KCk7CiB9CiAKIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+
IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y3JlYXRlSW5uZXJUZXh0U3R5bGUoY29uc3Qg
UmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUpIGNvbnN0CkBAIC00OTYsMTg4ICszODQsMTIgQEAgUGFz
c1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjcmVhdGVJ
bm5lckJsb2NrU3R5bGUoY29uc3QKICAgICByZXR1cm4gaW5uZXJCbG9ja1N0eWxlLnJlbGVhc2Uo
KTsKIH0KIAotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnVwZGF0ZUNhbmNlbEJ1
dHRvblZpc2liaWxpdHkoKSBjb25zdAotewotICAgIFJlbmRlck9iamVjdCogY2FuY2VsQnV0dG9u
UmVuZGVyZXIgPSBjYW5jZWxCdXR0b25FbGVtZW50KCktPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFj
YW5jZWxCdXR0b25SZW5kZXJlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgUmVuZGVy
U3R5bGUqIGN1clN0eWxlID0gY2FuY2VsQnV0dG9uUmVuZGVyZXItPnN0eWxlKCk7Ci0gICAgRVZp
c2liaWxpdHkgYnV0dG9uVmlzaWJpbGl0eSA9IHZpc2liaWxpdHlGb3JDYW5jZWxCdXR0b24oKTsK
LSAgICBpZiAoY3VyU3R5bGUtPnZpc2liaWxpdHkoKSA9PSBidXR0b25WaXNpYmlsaXR5KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGNhbmNlbEJ1dHRvblN0eWxl
ID0gUmVuZGVyU3R5bGU6OmNsb25lKGN1clN0eWxlKTsKLSAgICBjYW5jZWxCdXR0b25TdHlsZS0+
c2V0VmlzaWJpbGl0eShidXR0b25WaXNpYmlsaXR5KTsKLSAgICBjYW5jZWxCdXR0b25SZW5kZXJl
ci0+c2V0U3R5bGUoY2FuY2VsQnV0dG9uU3R5bGUpOwotfQotCi1FVmlzaWJpbGl0eSBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OnZpc2liaWxpdHlGb3JDYW5jZWxCdXR0b24oKSBjb25zdAot
ewotICAgIHJldHVybiAoc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IEhJRERFTiB8fCBpbnB1dEVs
ZW1lbnQoKS0+dmFsdWUoKS5pc0VtcHR5KCkpID8gSElEREVOIDogVklTSUJMRTsKLX0KLQogYm9v
bCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnRleHRTaG91bGRCZVRydW5jYXRlZCgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIGRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkgIT0gbm9kZSgpCiAg
ICAgICAgICYmIHN0eWxlKCktPnRleHRPdmVyZmxvdygpID09IFRleHRPdmVyZmxvd0VsbGlwc2lz
OwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6
YXV0b3NhdmVOYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudCo+
KG5vZGUoKSktPmdldEF0dHJpYnV0ZShhdXRvc2F2ZUF0dHIpOwotfQotCi0vLyBQb3B1cE1lbnVD
bGllbnQgbWV0aG9kcwotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnZhbHVlQ2hh
bmdlZCh1bnNpZ25lZCBsaXN0SW5kZXgsIGJvb2wgZmlyZUV2ZW50cykKLXsKLSAgICBBU1NFUlQo
c3RhdGljX2Nhc3Q8aW50PihsaXN0SW5kZXgpIDwgbGlzdFNpemUoKSk7Ci0gICAgSFRNTElucHV0
RWxlbWVudCogaW5wdXQgPSBpbnB1dEVsZW1lbnQoKTsKLSAgICBpZiAoc3RhdGljX2Nhc3Q8aW50
PihsaXN0SW5kZXgpID09IChsaXN0U2l6ZSgpIC0gMSkpIHsKLSAgICAgICAgaWYgKGZpcmVFdmVu
dHMpIHsKLSAgICAgICAgICAgIG1fcmVjZW50U2VhcmNoZXMuY2xlYXIoKTsKLSAgICAgICAgICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSA9IGF1dG9zYXZlTmFtZSgpOwotICAgICAgICAgICAg
aWYgKCFuYW1lLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGlmICghbV9zZWFyY2hQb3B1
cCkKLSAgICAgICAgICAgICAgICAgICAgbV9zZWFyY2hQb3B1cCA9IGRvY3VtZW50KCktPnBhZ2Uo
KS0+Y2hyb21lKCktPmNyZWF0ZVNlYXJjaFBvcHVwTWVudSh0aGlzKTsKLSAgICAgICAgICAgICAg
ICBtX3NlYXJjaFBvcHVwLT5zYXZlUmVjZW50U2VhcmNoZXMobmFtZSwgbV9yZWNlbnRTZWFyY2hl
cyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpbnB1
dC0+c2V0VmFsdWUoaXRlbVRleHQobGlzdEluZGV4KSk7Ci0gICAgICAgIGlmIChmaXJlRXZlbnRz
KQotICAgICAgICAgICAgaW5wdXQtPm9uU2VhcmNoKCk7Ci0gICAgICAgIGlucHV0LT5zZWxlY3Qo
KTsKLSAgICB9Ci19Ci0KLVN0cmluZyBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Oml0ZW1U
ZXh0KHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKLXsKLSAgICBpbnQgc2l6ZSA9IGxpc3RTaXpl
KCk7Ci0gICAgaWYgKHNpemUgPT0gMSkgewotICAgICAgICBBU1NFUlQoIWxpc3RJbmRleCk7Ci0g
ICAgICAgIHJldHVybiBzZWFyY2hNZW51Tm9SZWNlbnRTZWFyY2hlc1RleHQoKTsKLSAgICB9Ci0g
ICAgaWYgKCFsaXN0SW5kZXgpCi0gICAgICAgIHJldHVybiBzZWFyY2hNZW51UmVjZW50U2VhcmNo
ZXNUZXh0KCk7Ci0gICAgaWYgKGl0ZW1Jc1NlcGFyYXRvcihsaXN0SW5kZXgpKQotICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci0gICAgaWYgKHN0YXRpY19jYXN0PGludD4obGlzdEluZGV4KSA9PSAo
c2l6ZSAtIDEpKQotICAgICAgICByZXR1cm4gc2VhcmNoTWVudUNsZWFyUmVjZW50U2VhcmNoZXNU
ZXh0KCk7Ci0gICAgcmV0dXJuIG1fcmVjZW50U2VhcmNoZXNbbGlzdEluZGV4IC0gMV07Ci19Ci0K
LVN0cmluZyBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Oml0ZW1MYWJlbCh1bnNpZ25lZCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6Oml0ZW1JY29uKHVuc2lnbmVkKSBjb25zdAotewotICAgIHJldHVybiBT
dHJpbmcoKTsKLX0KLQotYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Oml0ZW1Jc0Vu
YWJsZWQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAotewotICAgICBpZiAoIWxpc3RJbmRleCB8
fCBpdGVtSXNTZXBhcmF0b3IobGlzdEluZGV4KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1Qb3B1cE1lbnVTdHlsZSBSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmU6Oml0ZW1TdHlsZSh1bnNpZ25lZCkgY29uc3QKLXsKLSAgICByZXR1cm4gbWVudVN0eWxl
KCk7Ci19Ci0KLVBvcHVwTWVudVN0eWxlIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bWVu
dVN0eWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gUG9wdXBNZW51U3R5bGUoc3R5bGUoKS0+dmlz
aXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBzdHlsZSgpLT52aXNpdGVkRGVw
ZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLCBzdHlsZSgpLT5mb250KCks
IHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFLAotICAgICAgICBzdHlsZSgpLT5kaXNw
bGF5KCkgPT0gTk9ORSwgc3R5bGUoKS0+dGV4dEluZGVudCgpLCBzdHlsZSgpLT5kaXJlY3Rpb24o
KSwgaXNPdmVycmlkZShzdHlsZSgpLT51bmljb2RlQmlkaSgpKSk7Ci19Ci0KLWludCBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNsaWVudEluc2V0TGVmdCgpIGNvbnN0Ci17Ci0gICAgLy8g
SW5zZXQgdGhlIG1lbnUgYnkgdGhlIHJhZGl1cyBvZiB0aGUgY2FwIG9uIHRoZSBsZWZ0IHNvIHRo
YXQKLSAgICAvLyBpdCBvbmx5IHJ1bnMgYWxvbmcgdGhlIHN0cmFpZ2h0IHBhcnQgb2YgdGhlIGJl
emVsLgotICAgIHJldHVybiBoZWlnaHQoKSAvIDI7Ci19Ci0KLWludCBSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OmNsaWVudEluc2V0UmlnaHQoKSBjb25zdAotewotICAgIC8vIEluc2V0IHRo
ZSBtZW51IGJ5IHRoZSByYWRpdXMgb2YgdGhlIGNhcCBvbiB0aGUgcmlnaHQgc28gdGhhdAotICAg
IC8vIGl0IG9ubHkgcnVucyBhbG9uZyB0aGUgc3RyYWlnaHQgcGFydCBvZiB0aGUgYmV6ZWwgKHVu
bGVzcyBpdCBuZWVkcwotICAgIC8vIHRvIGJlIHdpZGVyKS4KLSAgICByZXR1cm4gaGVpZ2h0KCkg
LyAyOwotfQotCi1MYXlvdXRVbml0IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y2xpZW50
UGFkZGluZ0xlZnQoKSBjb25zdAotewotICAgIExheW91dFVuaXQgcGFkZGluZyA9IHBhZGRpbmdM
ZWZ0KCk7Ci0gICAgaWYgKFJlbmRlckJveCogYm94ID0gaW5uZXJCbG9ja0VsZW1lbnQoKSA/IGlu
bmVyQmxvY2tFbGVtZW50KCktPnJlbmRlckJveCgpIDogMCkKLSAgICAgICAgcGFkZGluZyArPSBi
b3gtPngoKTsKLSAgICByZXR1cm4gcGFkZGluZzsKLX0KLQotTGF5b3V0VW5pdCBSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmU6OmNsaWVudFBhZGRpbmdSaWdodCgpIGNvbnN0Ci17Ci0gICAgTGF5
b3V0VW5pdCBwYWRkaW5nID0gcGFkZGluZ1JpZ2h0KCk7Ci0gICAgaWYgKFJlbmRlckJveCogY29u
dGFpbmVyQm94ID0gY29udGFpbmVyRWxlbWVudCgpID8gY29udGFpbmVyRWxlbWVudCgpLT5yZW5k
ZXJCb3goKSA6IDApIHsKLSAgICAgICAgaWYgKFJlbmRlckJveCogaW5uZXJCbG9ja0JveCA9IGlu
bmVyQmxvY2tFbGVtZW50KCkgPyBpbm5lckJsb2NrRWxlbWVudCgpLT5yZW5kZXJCb3goKSA6IDAp
Ci0gICAgICAgICAgICBwYWRkaW5nICs9IGNvbnRhaW5lckJveC0+d2lkdGgoKSAtIChpbm5lckJs
b2NrQm94LT54KCkgKyBpbm5lckJsb2NrQm94LT53aWR0aCgpKTsKLSAgICB9Ci0gICAgcmV0dXJu
IHBhZGRpbmc7Ci19Ci0KLWludCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Omxpc3RTaXpl
KCkgY29uc3QKLXsKLSAgICAvLyBJZiB0aGVyZSBhcmUgbm8gcmVjZW50IHNlYXJjaGVzLCB0aGVu
IG91ciBtZW51IHdpbGwgaGF2ZSAxICJObyByZWNlbnQgc2VhcmNoZXMiIGl0ZW0uCi0gICAgaWYg
KCFtX3JlY2VudFNlYXJjaGVzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgLy8gT3Ro
ZXJ3aXNlLCBsZWF2ZSByb29tIGluIHRoZSBtZW51IGZvciBhIGhlYWRlciwgYSBzZXBhcmF0b3Is
IGFuZCB0aGUgIkNsZWFyIHJlY2VudCBzZWFyY2hlcyIgaXRlbS4KLSAgICByZXR1cm4gbV9yZWNl
bnRTZWFyY2hlcy5zaXplKCkgKyAzOwotfQotCi1pbnQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lOjpzZWxlY3RlZEluZGV4KCkgY29uc3QKLXsKLSAgICByZXR1cm4gLTE7Ci19Ci0KLXZvaWQg
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpwb3B1cERpZEhpZGUoKQotewotICAgIG1fc2Vh
cmNoUG9wdXBJc1Zpc2libGUgPSBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6Oml0ZW1Jc1NlcGFyYXRvcih1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0Ci17Ci0g
ICAgLy8gVGhlIHNlcGFyYXRvciB3aWxsIGJlIHRoZSBzZWNvbmQgdG8gbGFzdCBpdGVtIGluIG91
ciBsaXN0LgotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGxpc3RJbmRleCkgPT0gKGxpc3RT
aXplKCkgLSAyKTsKLX0KLQotYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Oml0ZW1J
c0xhYmVsKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGlzdEluZGV4
ID09IDA7Ci19Ci0KLWJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppdGVtSXNTZWxl
Y3RlZCh1bnNpZ25lZCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzZXRUZXh0RnJvbUl0ZW0odW5zaWduZWQgbGlzdElu
ZGV4KQotewotICAgIGlucHV0RWxlbWVudCgpLT5zZXRWYWx1ZShpdGVtVGV4dChsaXN0SW5kZXgp
KTsKLX0KLQotRm9udFNlbGVjdG9yKiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmZvbnRT
ZWxlY3RvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRvY3VtZW50KCktPnN0eWxlUmVzb2x2ZXIo
KS0+Zm9udFNlbGVjdG9yKCk7Ci19Ci0KLUhvc3RXaW5kb3cqIFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6aG9zdFdpbmRvdygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRvY3VtZW50KCktPnZp
ZXcoKS0+aG9zdFdpbmRvdygpOwotfQotCiB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6YXV0b3Njcm9sbCgpCiB7CiAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gaW5uZXJUZXh0RWxl
bWVudCgpLT5yZW5kZXJCb3goKS0+bGF5ZXIoKTsKQEAgLTc0MSwxNyArNDUzLDYgQEAgYm9vbCBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmxvZ2ljYWxTY3JvbGwoU2Nyb2xsTG9naWNhbERp
cmVjdGlvbiBkaXJlY3Rpb24KICAgICByZXR1cm4gUmVuZGVyQmxvY2s6OmxvZ2ljYWxTY3JvbGwo
ZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllciwgc3RvcE5vZGUpOwogfQogCi1QYXNz
UmVmUHRyPFNjcm9sbGJhcj4gUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjcmVhdGVTY3Jv
bGxiYXIoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhLCBTY3JvbGxiYXJPcmllbnRhdGlv
biBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUgY29udHJvbFNpemUpCi17Ci0gICAg
UmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0OwotICAgIGJvb2wgaGFzQ3VzdG9tU2Nyb2xsYmFyU3R5
bGUgPSBzdHlsZSgpLT5oYXNQc2V1ZG9TdHlsZShTQ1JPTExCQVIpOwotICAgIGlmIChoYXNDdXN0
b21TY3JvbGxiYXJTdHlsZSkKLSAgICAgICAgd2lkZ2V0ID0gUmVuZGVyU2Nyb2xsYmFyOjpjcmVh
dGVDdXN0b21TY3JvbGxiYXIoc2Nyb2xsYWJsZUFyZWEsIG9yaWVudGF0aW9uLCB0aGlzLT5ub2Rl
KCkpOwotICAgIGVsc2UKLSAgICAgICAgd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVT
Y3JvbGxiYXIoc2Nyb2xsYWJsZUFyZWEsIG9yaWVudGF0aW9uLCBjb250cm9sU2l6ZSk7Ci0gICAg
cmV0dXJuIHdpZGdldC5yZWxlYXNlKCk7Ci19Ci0KIEhUTUxJbnB1dEVsZW1lbnQqIFJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZTo6aW5wdXRFbGVtZW50KCkgY29uc3QKIHsKICAgICByZXR1cm4g
bm9kZSgpLT50b0lucHV0RWxlbWVudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCmluZGV4IDZlMjFjODU2YzEwZmE5
ZmJhNDM2YzA2Zjc0OWMxNGUxZTJhODBiYTYuLmZmYzUwYTMzZGM0YTVkNTdmOTllOWU1MDM3Y2E2
ZmY5YTFhMmZhZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgKQEAgLTIzLDMyICsyMywzMSBAQAogI2lmbmRlZiBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmVfaAogI2RlZmluZSBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmVfaAogCi0jaW5jbHVkZSAiUG9wdXBNZW51Q2xpZW50LmgiCisjaW5jbHVkZSAiSFRN
TElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSFRNTElucHV0RWxlbWVudDsKLWNsYXNzIFNlYXJjaFBv
cHVwTWVudTsKIAotY2xhc3MgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lIDogcHVibGljIFJl
bmRlclRleHRDb250cm9sLCBwcml2YXRlIFBvcHVwTWVudUNsaWVudCB7CitjbGFzcyBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmUgOiBwdWJsaWMgUmVuZGVyVGV4dENvbnRyb2wgewogcHVibGlj
OgogICAgIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShOb2RlKik7CiAgICAgdmlydHVhbCB+
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKCk7CiAgICAgLy8gRklYTUU6IE1vdmUgY3JlYXRl
KlN0eWxlKCkgdG8gdGhlaXIgY2xhc3Nlcy4KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UmVuZGVy
U3R5bGU+IGNyZWF0ZUlubmVyVGV4dFN0eWxlKGNvbnN0IFJlbmRlclN0eWxlKiBzdGFydFN0eWxl
KSBjb25zdDsKICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBjcmVhdGVJbm5lckJsb2NrU3R5
bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUpIGNvbnN0OwotICAgIHZvaWQgdXBkYXRl
Q2FuY2VsQnV0dG9uVmlzaWJpbGl0eSgpIGNvbnN0OwotCi0gICAgdm9pZCBhZGRTZWFyY2hSZXN1
bHQoKTsKLSAgICB2b2lkIHN0b3BTZWFyY2hFdmVudFRpbWVyKCk7Ci0KLSAgICBib29sIHBvcHVw
SXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV9zZWFyY2hQb3B1cElzVmlzaWJsZTsgfQotICAg
IHZvaWQgc2hvd1BvcHVwKCk7Ci0gICAgdm9pZCBoaWRlUG9wdXAoKTsKIAogICAgIHZvaWQgY2Fw
c0xvY2tTdGF0ZU1heUhhdmVDaGFuZ2VkKCk7CiAKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZv
aWQgY2VudGVyQ29udGFpbmVySWZOZWVkZWQoUmVuZGVyQm94KikgY29uc3QgeyB9CisgICAgdmly
dHVhbCBMYXlvdXRVbml0IGNvbXB1dGVIZWlnaHRMaW1pdCgpIGNvbnN0OworICAgIEhUTUxFbGVt
ZW50KiBjb250YWluZXJFbGVtZW50KCkgY29uc3Q7CisgICAgSFRNTEVsZW1lbnQqIGlubmVyQmxv
Y2tFbGVtZW50KCkgY29uc3Q7CisgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50KCkg
Y29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZyb21FbGVtZW50KCkgT1ZFUlJJREU7CisK
IHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGhhc0NvbnRyb2xDbGlwKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBMYXlvdXRSZWN0IGNvbnRyb2xDbGlwUmVjdChjb25zdCBMYXlvdXRQb2ludCYpIGNv
bnN0OwpAQCAtNzYsNTkgKzc1LDI4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBMYXlvdXRVbml0
IHByZWZlcnJlZENvbnRlbnRXaWR0aChmbG9hdCBjaGFyV2lkdGgpIGNvbnN0OwogICAgIHZpcnR1
YWwgTGF5b3V0VW5pdCBjb21wdXRlQ29udHJvbEhlaWdodChMYXlvdXRVbml0IGxpbmVIZWlnaHQs
IExheW91dFVuaXQgbm9uQ29udGVudEhlaWdodCkgY29uc3QgT1ZFUlJJREU7CiAgICAgCi0gICAg
dmlydHVhbCB2b2lkIHVwZGF0ZUZyb21FbGVtZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIHN0eWxl
RGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsK
IAogICAgIHZpcnR1YWwgUmVuZGVyU3R5bGUqIHRleHRCYXNlU3R5bGUoKSBjb25zdDsKIAotICAg
IEVWaXNpYmlsaXR5IHZpc2liaWxpdHlGb3JDYW5jZWxCdXR0b24oKSBjb25zdDsKICAgICBib29s
IHRleHRTaG91bGRCZVRydW5jYXRlZCgpIGNvbnN0OwotICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
YXV0b3NhdmVOYW1lKCkgY29uc3Q7Ci0KLSAgICAvLyBQb3B1cE1lbnVDbGllbnQgbWV0aG9kcwot
ICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQodW5zaWduZWQgbGlzdEluZGV4LCBib29sIGZp
cmVFdmVudHMgPSB0cnVlKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0aW9uQ2hh
bmdlZCh1bnNpZ25lZCwgYm9vbCkgT1ZFUlJJREUgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNlbGVj
dGlvbkNsZWFyZWQoKSBPVkVSUklERSB7IH0KLSAgICB2aXJ0dWFsIFN0cmluZyBpdGVtVGV4dCh1
bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgU3RyaW5nIGl0
ZW1MYWJlbCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwg
U3RyaW5nIGl0ZW1JY29uKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QgT1ZFUlJJREU7Ci0gICAg
dmlydHVhbCBTdHJpbmcgaXRlbVRvb2xUaXAodW5zaWduZWQpIGNvbnN0IE9WRVJSSURFIHsgcmV0
dXJuIFN0cmluZygpOyB9Ci0gICAgdmlydHVhbCBTdHJpbmcgaXRlbUFjY2Vzc2liaWxpdHlUZXh0
KHVuc2lnbmVkKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBTdHJpbmcoKTsgfQotICAgIHZpcnR1
YWwgYm9vbCBpdGVtSXNFbmFibGVkKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QgT1ZFUlJJREU7
Ci0gICAgdmlydHVhbCBQb3B1cE1lbnVTdHlsZSBpdGVtU3R5bGUodW5zaWduZWQgbGlzdEluZGV4
KSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFBvcHVwTWVudVN0eWxlIG1lbnVTdHlsZSgp
IGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgaW50IGNsaWVudEluc2V0TGVmdCgpIGNvbnN0
IE9WRVJSSURFOwotICAgIHZpcnR1YWwgaW50IGNsaWVudEluc2V0UmlnaHQoKSBjb25zdCBPVkVS
UklERTsKLSAgICB2aXJ0dWFsIExheW91dFVuaXQgY2xpZW50UGFkZGluZ0xlZnQoKSBjb25zdCBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIExheW91dFVuaXQgY2xpZW50UGFkZGluZ1JpZ2h0KCkgY29u
c3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBpbnQgbGlzdFNpemUoKSBjb25zdCBPVkVSUklERTsK
LSAgICB2aXJ0dWFsIGludCBzZWxlY3RlZEluZGV4KCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmly
dHVhbCB2b2lkIHBvcHVwRGlkSGlkZSgpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCBpdGVt
SXNTZXBhcmF0b3IodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0
dWFsIGJvb2wgaXRlbUlzTGFiZWwodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdCBPVkVSUklERTsK
LSAgICB2aXJ0dWFsIGJvb2wgaXRlbUlzU2VsZWN0ZWQodW5zaWduZWQgbGlzdEluZGV4KSBjb25z
dCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUG9wT3ZlcigpIGNvbnN0IE9WRVJS
SURFIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIHZhbHVlU2hvdWxkQ2hhbmdl
T25Ib3RUcmFjaygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVh
bCB2b2lkIHNldFRleHRGcm9tSXRlbSh1bnNpZ25lZCBsaXN0SW5kZXgpIE9WRVJSSURFOwotICAg
IHZpcnR1YWwgRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IoKSBjb25zdCBPVkVSUklERTsKLSAg
ICB2aXJ0dWFsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3coKSBjb25zdCBPVkVSUklERTsKLSAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYWJsZUFy
ZWEqLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUpIE9WRVJSSURF
OwotCi0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50KCkgY29uc3Q7CiAKLSAgICBI
VE1MRWxlbWVudCogY29udGFpbmVyRWxlbWVudCgpIGNvbnN0OwotICAgIEhUTUxFbGVtZW50KiBp
bm5lckJsb2NrRWxlbWVudCgpIGNvbnN0OwogICAgIEhUTUxFbGVtZW50KiBpbm5lclNwaW5CdXR0
b25FbGVtZW50KCkgY29uc3Q7Ci0gICAgSFRNTEVsZW1lbnQqIHJlc3VsdHNCdXR0b25FbGVtZW50
KCkgY29uc3Q7Ci0gICAgSFRNTEVsZW1lbnQqIGNhbmNlbEJ1dHRvbkVsZW1lbnQoKSBjb25zdDsK
IAotICAgIGJvb2wgbV9zZWFyY2hQb3B1cElzVmlzaWJsZTsKICAgICBib29sIG1fc2hvdWxkRHJh
d0NhcHNMb2NrSW5kaWNhdG9yOwogICAgIExheW91dFVuaXQgbV9kZXNpcmVkSW5uZXJUZXh0SGVp
Z2h0OwotICAgIFJlZlB0cjxTZWFyY2hQb3B1cE1lbnU+IG1fc2VhcmNoUG9wdXA7Ci0gICAgVmVj
dG9yPFN0cmluZz4gbV9yZWNlbnRTZWFyY2hlczsKIH07CiAKK2lubGluZSBIVE1MRWxlbWVudCog
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjb250YWluZXJFbGVtZW50KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gaW5wdXRFbGVtZW50KCktPmNvbnRhaW5lckVsZW1lbnQoKTsKK30KKworaW5s
aW5lIEhUTUxFbGVtZW50KiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmlubmVyQmxvY2tF
bGVtZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaW5wdXRFbGVtZW50KCktPmlubmVyQmxvY2tF
bGVtZW50KCk7Cit9CisKIGlubGluZSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUqIHRvUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKFJlbmRlck9iamVjdCogb2JqZWN0KQogewogICAgIEFT
U0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNUZXh0RmllbGQoKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyaW5nQWxsSW5PbmUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlcmluZ0FsbEluT25lLmNwcAppbmRleCBkMTdiZDMxM2E0MzE5MGM5
YmRmZTVjZThkMzJmOGY3MTg1NDQ0YTRmLi4xZjBhNGEzOGU3MmUyMWE3ZGMzZjBhZGNkM2NhZTM2
M2M4YTUxZDkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyaW5n
QWxsSW5PbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJpbmdBbGxJ
bk9uZS5jcHAKQEAgLTkxLDYgKzkxLDcgQEAKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIuY3Bw
IgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhclBhcnQuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNj
cm9sbGJhclRoZW1lLmNwcCIKKyNpbmNsdWRlICJSZW5kZXJTZWFyY2hGaWVsZC5jcHAiCiAjaW5j
bHVkZSAiUmVuZGVyU2xpZGVyLmNwcCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZS5jcHAiCiAjaW5j
bHVkZSAiUmVuZGVyVGFibGVDYXB0aW9uLmNwcCIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148050</attachid>
            <date>2012-06-17 21:52:06 -0700</date>
            <delta_ts>2012-06-17 21:54:38 -0700</delta_ts>
            <desc>Patch 9</desc>
            <filename>bug-88980-20120618135206.patch</filename>
            <type>text/plain</type>
            <size>76428</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwNTY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWFiMTRiYTBmMzhmMThi
NTY5Y2NkZTNiZGYxZDYxMDg2MGE5NDkxMi4uZjBmNTQ0NGEyZTY3ZTdiNjhmMThiNTEzNzNmOTk5
YzFlOGE2NmQ3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkwIEBACisyMDEyLTA2LTE0ICBZb3No
aWZ1bWkgSW5vdWUgIDx5b3NpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Zvcm1zXSBNb3Zl
IHNlYXJjaCBmaWVsZCByZWxhdGVkIGNvZGUgdG8gUmVuZGVyU2VhcmNoRmllbGQgZnJvbSBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTg4OTgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtb3ZlcyBzZWFyY2ggZmllbGQgcmVsYXRlZCBtZXRo
b2RzIGluIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZQorICAgICAgICB0byBuZXcgY2xhc3Mg
UmVuZGVyU2VhcmNoRmllbGQgYW5kIGNoYW5nZXMgcmVsYXRlZCBjbGFzc2VzIHRvIHVzZQorICAg
ICAgICBSZW5kZXJTZWFyY2hGaWVsZC4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgcGF0
Y2ggZG9lc24ndCBjaGFuZ2UgYmVoYXZpb3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDog
QWRkZWQgbmV3IGZpbGUgUmVuZGVyU2VhcmNoRmllbGQuY3BwCisgICAgICAgICogR05VbWFrZWZp
bGUubGlzdC5hbTogQWRkZWQgbmV3IGZpbGUgUmVuZGVyU2VhcmNoRmllbGQuY3BwIGFuZCBSZW5k
ZXJTZWFyY2hGaWVsZC5oCisgICAgICAgICogVGFyZ2V0LnByaTogZGl0dG8KKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6IGRpdHRvCisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2o6IGRpdHRvCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBk
aXR0bworICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MSW5wdXRFbGVtZW50OjpzdWJ0cmVlSGFzQ2hhbmdlZCk6IENhbGwgUmVuZGVyU2Vh
cmNoRmllbGQ6OnVwZGF0ZUNhbmNlbEJ1dHRvblZpc2liaWxpdHkKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxJbnB1dEVsZW1lbnQ6OmFkZFNlYXJjaFJlc3VsdCk6IENoYW5nZWQgdG8gY2FsbCBJbnB1
dFR5cGU6OmFkZFNlYXJjaFJlc3VsdC4KKyAgICAgICAgKiBodG1sL0lucHV0VHlwZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OmFkZFNlYXJjaFJlc3VsdCk6IEFkZGVkLgorICAg
ICAgICAqIGh0bWwvSW5wdXRUeXBlLmg6CisgICAgICAgICogaHRtbC9TZWFyY2hJbnB1dFR5cGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoSW5wdXRUeXBlOjphZGRTZWFyY2hSZXN1bHQp
OiBNb3ZlZCBmcm9tIEhUTUxJbnB1dEVsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hJ
bnB1dFR5cGU6OmNyZWF0ZVJlbmRlcmVyKTogQWRkZWQgdG8gY3JlYXRlIFJlbmRlclNlYXJjaEZp
ZWxkLgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoSW5wdXRUeXBlOjpzZWFyY2hFdmVudHNTaG91
bGRCZURpc3BhdGNoZWQpOiBNb3ZlZCBmcm9tIEhUTUxJbnB1dEVsZW1lbnQuCisgICAgICAgIChX
ZWJDb3JlOjpTZWFyY2hJbnB1dFR5cGU6OnN1YnRyZWVIYXNDaGFuZ2VkKSBNb3ZlZCBzZWFyY2gg
cmVsYXRlZCBjb2RlIGZyb20gSFRNTElucHV0RWxlbWVudC4KKyAgICAgICAgKiBodG1sL1NlYXJj
aElucHV0VHlwZS5oOgorICAgICAgICAqIGh0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVt
ZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVt
ZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKTogVXNlIFJlbmRlclNlYXJjaEZpZWxkIGluc3RlYWQg
b2YgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLgorICAgICAgICAqIGxvYWRlci9Gb3JtU3Vi
bWlzc2lvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb3JtU3VibWlzc2lvbjo6Y3JlYXRlKTog
R290IHJpZCBpc1NlYXJjaEZpZWxkKCkgZ3VhcmQgZm9yIGFkZFNlYXJjaFJlc3VsdCgpLgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTZWFyY2hGaWVsZDo6UmVuZGVyU2VhcmNoRmllbGQpOiBSZW5hbWVkIHRvIFJlbmRl
clNlYXJjaEZpZWxkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6On5SZW5k
ZXJTZWFyY2hGaWVsZCk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVs
ZDo6cmVzdWx0c0J1dHRvbkVsZW1lbnQpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U2VhcmNoRmllbGQ6OmNhbmNlbEJ1dHRvbkVsZW1lbnQpOiBkaXR0bworICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU2VhcmNoRmllbGQ6OmFkZFNlYXJjaFJlc3VsdCk6IGRpdHRvCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6c2hvd1BvcHVwKTogZGl0dG8KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjpoaWRlUG9wdXApOiBkaXR0bworICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OmNvbXB1dGVDb250cm9sSGVpZ2h0KTogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6dXBkYXRlRnJvbUVsZW1lbnQpOiBN
b3ZlZCBzZWFyY2ggZmllbGQgcmVsYXRlZCBjb2RlIGZyb20gUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OnVwZGF0ZUNhbmNl
bEJ1dHRvblZpc2liaWxpdHkpOiBSZW5hbWVkIHRvIFJlbmRlclNlYXJjaEZpZWxkLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OnZpc2liaWxpdHlGb3JDYW5jZWxCdXR0b24p
OiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OmF1dG9zYXZlTmFt
ZSk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6dmFsdWVDaGFu
Z2VkKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjppdGVtVGV4
dCk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6aXRlbUxhYmVs
KTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjppdGVtSWNvbik6
IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6aXRlbUlzRW5hYmxl
ZCk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6aXRlbVN0eWxl
KTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjptZW51U3R5bGUp
OiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OmNsaWVudEluc2V0
TGVmdCk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6Y2xpZW50
SW5zZXRSaWdodCk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6
Y2xpZW50UGFkZGluZ0xlZnQpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNo
RmllbGQ6OmNsaWVudFBhZGRpbmdSaWdodCk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTZWFyY2hGaWVsZDo6bGlzdFNpemUpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U2VhcmNoRmllbGQ6OnNlbGVjdGVkSW5kZXgpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU2VhcmNoRmllbGQ6OnBvcHVwRGlkSGlkZSk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTZWFyY2hGaWVsZDo6aXRlbUlzU2VwYXJhdG9yKTogZGl0dG8KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNlYXJjaEZpZWxkOjppdGVtSXNMYWJlbCk6IGRpdHRvCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6aXRlbUlzU2VsZWN0ZWQpOiBkaXR0bworICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OnNldFRleHRGcm9tSXRlbSk6IGRpdHRvCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6Zm9udFNlbGVjdG9yKTogZGl0dG8KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjpob3N0V2luZG93KTogZGl0dG8KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjpjcmVhdGVTY3JvbGxiYXIpOiBkaXR0
bworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OmNvbXB1dGVIZWlnaHRMaW1p
dCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OmNlbnRlckNv
bnRhaW5lcklmTmVlZGVkKTogQWRkZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNlYXJj
aEZpZWxkLmg6CisgICAgICAgIChXZWJDb3JlOjp0b1JlbmRlclNlYXJjaEZpZWxkKTogQWRkZWQu
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OlJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZSk6IFJlbW92ZSBzZWFyY2ggZmllbGQgcmVsYXRlZCBjb2RlLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp+UmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lKTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OmNvbXB1dGVIZWlnaHRMaW1pdCk6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsYXlvdXQpOiBVc2UgbmV3IG1ldGhv
ZHMgZm9yIHJlbW92aW5nIGlzU2VhcmNoRmllbGQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNvbXB1dGVDb250cm9sSGVpZ2h0KTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnVwZGF0ZUZyb21FbGVt
ZW50KTogUmVtb3ZlIHNlYXJjaCBmaWVsZCByZWxhdGVkIGNvZGUuCisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oOgorICAgICAgICAoUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6Y2VudGVyQ29udGFpbmVySWZOZWVkZWQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y29udGFpbmVyRWxlbWVudCk6IEV4cG9z
ZWQgZm9yIFJlbmRlclNlYXJjaEZpZWxkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lOjppbm5lckJsb2NrRWxlbWVudCk6IEV4cG9zZWQgZm9yIFJlbmRlclNl
YXJjaEZpZWxkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJpbmdBbGxJbk9uZS5jcHA6IEFk
ZGVkIFJlbmRlclNlYXJjaEZpZWxkLmNwcAorCiAyMDEyLTA2LTE3ICBZb3NoaWZ1bWkgSW5vdWUg
IDx5b3NpbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Zvcm1zXSBDb3B5IFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZS57Y3BwLGh9IHRvIFJlbmRlclNlYXJjaEZpbGVkLntjcHAsaH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKaW5kZXggZTI3M2MwZmQ1NjAxNWI5NTk2M2JmYjQ4Mzg5YTAzYjJjNzVi
ZGJhZC4uOWFkODViYjk0MjI1MDRkYzMyY2Q2ZDFmZjg4ZjM0NjgzYWVkNDZmYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQKQEAgLTEzODcsNiArMTM4Nyw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAg
ICByZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmNwcAogICAgIHJlbmRlcmluZy9SZW5kZXJTY3Jv
bGxiYXJQYXJ0LmNwcAogICAgIHJlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJUaGVtZS5jcHAKKyAg
ICByZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwCiAgICAgcmVuZGVyaW5nL1JlbmRlclNs
aWRlci5jcHAKICAgICByZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCiAgICAgcmVuZGVyaW5nL1Jl
bmRlclRhYmxlQ2FwdGlvbi5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDRh
NDVjN2YwMzQwMDEyYWIzNjFlMDNiY2JhOTQyNjc0MmVjNTYwNzAuLjM3YjdlNWFjMjk5N2VhMzE2
MWU5NGFjODY0NjFhNmNlNjc2NWIzNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpA
QCAtMzkwNiw2ICszOTA2LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyUGFydC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU2Nyb2xsYmFyVGhlbWUuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU2Nyb2xsYmFyVGhlbWUuaCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNlYXJjaEZpZWxkLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNl
YXJjaEZpZWxkLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWxlY3Rpb25J
bmZvLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwIFwKIAlT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmggXApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXgg
MTRmN2VkMTgwYTcxMmJlNTA0ODhhYzg1YzYxYzZjZTQyNmQ3ZDM4NC4uNjliYWE5MjlmZDY3MmM5
MjYxNjQ4ZjhiMjIwZjU3YmNlNjdkM2ZkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFy
Z2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC0xMzA5LDYgKzEzMDks
NyBAQCBTT1VSQ0VTICs9IFwKICAgICByZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmNwcCBcCiAg
ICAgcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclBhcnQuY3BwIFwKICAgICByZW5kZXJpbmcvUmVu
ZGVyU2Nyb2xsYmFyVGhlbWUuY3BwIFwKKyAgICByZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQu
Y3BwIFwKICAgICByZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcCBcCiAgICAgcmVuZGVyaW5nL1Jl
bmRlclRhYmxlLmNwcCBcCiAgICAgcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2FwdGlvbi5jcHAgXApA
QCAtMjUxNCw2ICsyNTE1LDcgQEAgSEVBREVSUyArPSBcCiAgICAgcmVuZGVyaW5nL1JlbmRlclNj
cm9sbGJhci5oIFwKICAgICByZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyUGFydC5oIFwKICAgICBy
ZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyVGhlbWUuaCBcCisgICAgcmVuZGVyaW5nL1JlbmRlclNl
YXJjaEZpZWxkLmggXAogICAgIHJlbmRlcmluZy9SZW5kZXJTbGlkZXIuaCBcCiAgICAgcmVuZGVy
aW5nL1JlbmRlclRhYmxlQ2FwdGlvbi5oIFwKICAgICByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxs
LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGZmM2EzYTgyMmY2ZmIyOGQzNGRmZjlkZDg2MDc0Yjc1
NzE4YzMxMWUuLjdjMmJhN2Y1NDZiZmUyNzhlMzJhZDQ4OTM1ZmFjNzgxZDU3YTdmMWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKQEAgLTQ5MDAsNiArNDkwMCw4IEBACiAgICAgICAgICAgICAncmVuZGVyaW5n
L1JlbmRlclNjcm9sbGJhclBhcnQuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNj
cm9sbGJhclRoZW1lLmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNjcm9sbGJh
clRoZW1lLmgnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAn
LAorICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5oJywKICAgICAgICAg
ICAgICdyZW5kZXJpbmcvUmVuZGVyU2VsZWN0aW9uSW5mby5oJywKICAgICAgICAgICAgICdyZW5k
ZXJpbmcvUmVuZGVyU2xpZGVyLmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNs
aWRlci5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oK
aW5kZXggMTdhZTBkZjUxNjY2NjFlYWMzYTFiNzBhYzJiM2Y3Zjg0NjAyMjdlNS4uZDA2ZGRhYWEx
NDYyZDg5Y2M1MWY5ZjNlZDZkOGJlZTQ4OWNlYWRlYyAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTQxNTAzLDYgKzQxNTAzLDYyIEBACiAJCQkJ
PgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xS
ZW5kZXJTZWFyY2hGaWVsZC5jcHAiCisJCQkJPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJ
CQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJ
CT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJ
CQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFt
ZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4K
KwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0i
RGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIK
KwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJ
Lz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJ
CQlOYW1lPSJSZWxlYXNlX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVp
bGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRv
b2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3Vy
YXRpb24KKwkJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWls
ZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgorCQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWls
ZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPC9GaWxlPgorCQkJPEZp
bGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xSZW5kZXJTZWFyY2hGaWVsZC5oIgor
CQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJp
bmdcUmVuZGVyU2VsZWN0aW9uSW5mby5oIgogCQkJCT4KIAkJCTwvRmlsZT4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBlYzM2NjZk
NWE1YzVjNzg4MjMxMjczZjdhOTQ5ZGU5MDVmNDlmY2EyLi5kZjhkNWE4NjI1Yjg3NzJkYTI4ZjZj
ZGUwYzI4MmRhOGYxNDJmZGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTg5LDYgKzExODksOCBAQAogCQk0NTA5OUM0MTEz
NzBBNzgwMDA1OEQ1MTMgLyogSWNvblVSTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0NTA5OUM0MDEzNzBBNzgwMDA1OEQ1MTMgLyogSWNvblVSTC5j
cHAgKi87IH07CiAJCTQ1MENFQkYwMTUwNzNCQkUwMDJCQjE0OSAvKiBMYWJlbGFibGVFbGVtZW50
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1MENF
QkVFMTUwNzNCQkUwMDJCQjE0OSAvKiBMYWJlbGFibGVFbGVtZW50LmNwcCAqLzsgfTsKIAkJNDUw
Q0VCRjExNTA3M0JCRTAwMkJCMTQ5IC8qIExhYmVsYWJsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1MENFQkVGMTUwNzNCQkUwMDJCQjE0
OSAvKiBMYWJlbGFibGVFbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJNDU4RkU0MDkxNTg5REYwQjAwNTYwOUU2IC8qIFJlbmRlclNlYXJj
aEZpZWxkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQ1OEZFNDA3MTU4OURGMEIwMDU2MDlFNiAvKiBSZW5kZXJTZWFyY2hGaWVsZC5jcHAgKi87IH07
CisJCTQ1OEZFNDBBMTU4OURGMEIwMDU2MDlFNiAvKiBSZW5kZXJTZWFyY2hGaWVsZC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDU4RkU0MDgxNTg5REYw
QjAwNTYwOUU2IC8qIFJlbmRlclNlYXJjaEZpZWxkLmggKi87IH07CiAJCTQ1QkFDMkIwMTM2MEJC
QUIwMDVEQTI1OCAvKiBJY29uVVJMLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0NUJBQzJBRjEzNjBCQkFCMDA1REEyNTggLyogSWNvblVSTC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ1RkVBNUNGMTU2
RERFOEMwMDY1NDEwMSAvKiBEZWNpbWFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQ1RkVBNUNEMTU2RERFOEMwMDY1NDEwMSAvKiBEZWNpbWFsLmNw
cCAqLzsgfTsKIAkJNDVGRUE1RDAxNTZEREU4QzAwNjU0MTAxIC8qIERlY2ltYWwuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1RkVBNUNFMTU2RERFOEMw
MDY1NDEwMSAvKiBEZWNpbWFsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTgyMTgsNiArODIyMCw4IEBACiAJCTQ1MDk5QzQwMTM3MEE3ODAwMDU4
RDUxMyAvKiBJY29uVVJMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEljb25VUkwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NTBDRUJFRTE1MDcz
QkJFMDAyQkIxNDkgLyogTGFiZWxhYmxlRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBMYWJlbGFibGVFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDUwQ0VCRUYxNTA3M0JCRTAwMkJCMTQ5IC8qIExhYmVsYWJsZUVsZW1lbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGFiZWxhYmxlRWxlbWVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NThGRTQwNzE1ODlERjBCMDA1NjA5RTYgLyog
UmVuZGVyU2VhcmNoRmllbGQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUmVuZGVyU2VhcmNoRmllbGQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
NThGRTQwODE1ODlERjBCMDA1NjA5RTYgLyogUmVuZGVyU2VhcmNoRmllbGQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU2VhcmNoRmllbGQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNDVCQUMyQUYxMzYwQkJBQjAwNURBMjU4IC8qIEljb25VUkwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSWNvblVSTC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0NUZFQTVDRDE1NkRERThDMDA2NTQxMDEgLyogRGVjaW1hbC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZWNpbWFsLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDVGRUE1Q0UxNTZEREU4QzAwNjU0MTAxIC8qIERlY2lt
YWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVjaW1hbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjExMTYsNiArMjExMjAsOCBAQAogCQkJCUJDM0JFOTky
MEU5QzFDN0MwMDgzNTU4OCAvKiBSZW5kZXJTY3JvbGxiYXJQYXJ0LmggKi8sCiAJCQkJQkMzQkU5
QTQwRTlDMjM5NjAwODM1NTg4IC8qIFJlbmRlclNjcm9sbGJhclRoZW1lLmNwcCAqLywKIAkJCQlC
QzNCRTk5ODBFOUMxRTVEMDA4MzU1ODggLyogUmVuZGVyU2Nyb2xsYmFyVGhlbWUuaCAqLywKKwkJ
CQk0NThGRTQwNzE1ODlERjBCMDA1NjA5RTYgLyogUmVuZGVyU2VhcmNoRmllbGQuY3BwICovLAor
CQkJCTQ1OEZFNDA4MTU4OURGMEIwMDU2MDlFNiAvKiBSZW5kZXJTZWFyY2hGaWVsZC5oICovLAog
CQkJCTBGMTFBNTRFMEYzOTIzMzEwMEMzNzg4NCAvKiBSZW5kZXJTZWxlY3Rpb25JbmZvLmggKi8s
CiAJCQkJQUIyNDdBNkEwQUZENjM4MzAwM0ZBNUZEIC8qIFJlbmRlclNsaWRlci5jcHAgKi8sCiAJ
CQkJQUIyNDdBNkIwQUZENjM4MzAwM0ZBNUZEIC8qIFJlbmRlclNsaWRlci5oICovLApAQCAtMjQy
NzIsNiArMjQyNzgsNyBAQAogCQkJCUJDM0JFOTk0MEU5QzFDN0MwMDgzNTU4OCAvKiBSZW5kZXJT
Y3JvbGxiYXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDM0JFOTk1MEU5QzFDN0MwMDgzNTU4OCAv
KiBSZW5kZXJTY3JvbGxiYXJQYXJ0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzNCRTk5OTBFOUMx
RTVEMDA4MzU1ODggLyogUmVuZGVyU2Nyb2xsYmFyVGhlbWUuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTQ1OEZFNDBBMTU4OURGMEIwMDU2MDlFNiAvKiBSZW5kZXJTZWFyY2hGaWVsZC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYxMUE1NEYwRjM5MjMzMTAwQzM3ODg0IC8qIFJlbmRlclNlbGVjdGlvbklu
Zm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUFCMjQ3QTZEMEFGRDYzODMwMDNGQTVGRCAvKiBSZW5k
ZXJTbGlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOEM4RkFFMEREQ0QzMUIwMEI1OTJGNCAv
KiBSZW5kZXJTdHlsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzQ2Nyw2ICsyNzQ3NCw3IEBACiAJ
CQkJQkMzQkU5OTMwRTlDMUM3QzAwODM1NTg4IC8qIFJlbmRlclNjcm9sbGJhci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCQzNCRTlBQjBFOUMyNDIwMDA4MzU1ODggLyogUmVuZGVyU2Nyb2xsYmFy
UGFydC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzNCRTlBNTBFOUMyMzk2MDA4MzU1ODggLyog
UmVuZGVyU2Nyb2xsYmFyVGhlbWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDU4RkU0MDkxNTg5
REYwQjAwNTYwOUU2IC8qIFJlbmRlclNlYXJjaEZpZWxkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUFCMjQ3QTZDMEFGRDYzODMwMDNGQTVGRCAvKiBSZW5kZXJTbGlkZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkM4QzhGQUQwRERDRDMxQjAwQjU5MkY0IC8qIFJlbmRlclN0eWxlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGNEU1NzE3MTMxMzI3NjIwMENGODVBRiAvKiBSZW5kZXJTVkdBbGxJ
bk9uZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTElucHV0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1l
bnQuY3BwCmluZGV4IDVjNmJmMTY1OTgzYzBjODIzMTQzMmYzNmE3ZmVkOGU1YWUxZjFlMzQuLjhk
MTVjYTI4ZGFiMjg0YTBlN2MwMWI1ZmVmODJhZmM5MDEzNDg5YTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcApAQCAtNDU3LDcgKzQ1Nyw2IEBAIHZvaWQgSFRNTElu
cHV0RWxlbWVudDo6c3VidHJlZUhhc0NoYW5nZWQoKQogewogICAgIEFTU0VSVChpc1RleHRGaWVs
ZCgpKTsKICAgICBBU1NFUlQocmVuZGVyZXIoKSk7Ci0gICAgUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lKiByZW5kZXJUZXh0Q29udHJvbCA9IHRvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
KHJlbmRlcmVyKCkpOwogCiAgICAgYm9vbCB3YXNDaGFuZ2VkID0gd2FzQ2hhbmdlZFNpbmNlTGFz
dEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoKTsKICAgICBzZXRDaGFuZ2VkU2luY2VMYXN0Rm9ybUNv
bnRyb2xDaGFuZ2VFdmVudCh0cnVlKTsKQEAgLTQ3MywxMiArNDcyLDcgQEAgdm9pZCBIVE1MSW5w
dXRFbGVtZW50OjpzdWJ0cmVlSGFzQ2hhbmdlZCgpCiAgICAgLy8gUmVjYWxjIGZvciA6aW52YWxp
ZCBhbmQgaGFzVW5hY2NlcHRhYmxlVmFsdWUoKSBjaGFuZ2UuCiAgICAgc2V0TmVlZHNTdHlsZVJl
Y2FsYygpOwogCi0gICAgaWYgKGNhbmNlbEJ1dHRvbkVsZW1lbnQoKSkKLSAgICAgICAgcmVuZGVy
VGV4dENvbnRyb2wtPnVwZGF0ZUNhbmNlbEJ1dHRvblZpc2liaWxpdHkoKTsKLQotICAgIC8vIElm
IHRoZSBpbmNyZW1lbnRhbCBhdHRyaWJ1dGUgaXMgc2V0LCB0aGVuIGRpc3BhdGNoIHRoZSBzZWFy
Y2ggZXZlbnQKLSAgICBpZiAoc2VhcmNoRXZlbnRzU2hvdWxkQmVEaXNwYXRjaGVkKCkgJiYgaXNT
ZWFyY2hGaWVsZCgpICYmIG1faW5wdXRUeXBlKQotICAgICAgICBzdGF0aWNfY2FzdDxTZWFyY2hJ
bnB1dFR5cGUqPihtX2lucHV0VHlwZS5nZXQoKSktPnN0YXJ0U2VhcmNoRXZlbnRUaW1lcigpOwor
ICAgIG1faW5wdXRUeXBlLT5zdWJ0cmVlSGFzQ2hhbmdlZCgpOwogCiAgICAgaWYgKCF3YXNDaGFu
Z2VkICYmIGZvY3VzZWQoKSkgewogICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQo
KS0+ZnJhbWUoKSkKQEAgLTk3MiwxMSArOTY2LDYgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojpz
ZXRQbGFjZWhvbGRlcihjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgIHNldEF0dHJpYnV0ZShwbGFj
ZWhvbGRlckF0dHIsIHZhbHVlKTsKIH0KIAotYm9vbCBIVE1MSW5wdXRFbGVtZW50OjpzZWFyY2hF
dmVudHNTaG91bGRCZURpc3BhdGNoZWQoKSBjb25zdAotewotICAgIHJldHVybiBoYXNBdHRyaWJ1
dGUoaW5jcmVtZW50YWxBdHRyKTsKLX0KLQogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1
ZUZyb21SZW5kZXJlcihjb25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIC8vIEZpbGUgdXBsb2Fk
IGNvbnRyb2xzIHdpbGwgbmV2ZXIgdXNlIHRoaXMuCkBAIC0xMzMzLDkgKzEzMjIsNyBAQCBib29s
IEhUTUxJbnB1dEVsZW1lbnQ6OmlzUmVxdWlyZWRGb3JtQ29udHJvbCgpIGNvbnN0CiAKIHZvaWQg
SFRNTElucHV0RWxlbWVudDo6YWRkU2VhcmNoUmVzdWx0KCkKIHsKLSAgICBBU1NFUlQoaXNTZWFy
Y2hGaWVsZCgpKTsKLSAgICBpZiAocmVuZGVyZXIoKSkKLSAgICAgICAgdG9SZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUocmVuZGVyZXIoKSktPmFkZFNlYXJjaFJlc3VsdCgpOworICAgIG1faW5w
dXRUeXBlLT5hZGRTZWFyY2hSZXN1bHQoKTsKIH0KIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojpv
blNlYXJjaCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1l
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCmluZGV4IDk4NmQ5
MWU0NjYyYzNhOTg3NDFjYzhlNzcwYTkxZjg3ZTEwNTNmOWUuLmNiNTIzMWYyN2QwOWUxNGI4YzUy
NzJmZGQxZGIxYmNiNjNlYzRiZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TElucHV0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVu
dC5oCkBAIC0yMjcsNyArMjI3LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBhZGRTZWFyY2hSZXN1
bHQoKTsKICAgICB2b2lkIG9uU2VhcmNoKCk7Ci0gICAgYm9vbCBzZWFyY2hFdmVudHNTaG91bGRC
ZURpc3BhdGNoZWQoKSBjb25zdDsKIAogI2lmIEVOQUJMRShEQVRBTElTVCkKICAgICBIVE1MRWxl
bWVudCogbGlzdCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1
dFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCmluZGV4IGRmYzUw
ZTAwYmQ4YWIwZDI3YWYzYzU5ZmI0NGE1MWYxMjA2ODg3OTcuLmRhZTAzZjNjYzI2ZDFhYTIwM2Yx
YmU2ZDVlNzQ1YzlhMWQ0ZThkYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5w
dXRUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAKQEAgLTUy
Myw2ICs1MjMsMTAgQEAgdm9pZCBJbnB1dFR5cGU6OmFjY2Vzc0tleUFjdGlvbihib29sKQogICAg
IGVsZW1lbnQoKS0+Zm9jdXMoZmFsc2UpOwogfQogCit2b2lkIElucHV0VHlwZTo6YWRkU2VhcmNo
UmVzdWx0KCkKK3sKK30KKwogdm9pZCBJbnB1dFR5cGU6OmF0dGFjaCgpCiB7CiB9CkBAIC04NTIs
NiArODU2LDEwIEBAIHZvaWQgSW5wdXRUeXBlOjpyZWFkb25seUF0dHJpYnV0ZUNoYW5nZWQoKQog
ewogfQogCit2b2lkIElucHV0VHlwZTo6c3VidHJlZUhhc0NoYW5nZWQoKQoreworfQorCiBTdHJp
bmcgSW5wdXRUeXBlOjpkZWZhdWx0VG9vbFRpcCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFN0cmlu
ZygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmgKaW5kZXggMzg2MDUxZmFjYjcxMGE2YjU2YmRiN2E4
ZjBhNTk5N2M2MzUxYjIwMC4uYjY4ZDk3ZjVkNjQ1MzU1YjcxMDVjOWY0ODE2NjgyNzNmNDhhNDNm
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5oCkBAIC0yMDAsNyArMjAwLDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVCbHVyRXZlbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgYWNj
ZXNzS2V5QWN0aW9uKGJvb2wgc2VuZE1vdXNlRXZlbnRzKTsKICAgICB2aXJ0dWFsIGJvb2wgY2Fu
QmVTdWNjZXNzZnVsU3VibWl0QnV0dG9uKCk7Ci0KKyAgICB2aXJ0dWFsIHZvaWQgc3VidHJlZUhh
c0NoYW5nZWQoKTsKIAogICAgIC8vIFNoYWRvdyB0cmVlIGhhbmRsaW5nCiAKQEAgLTIyMiw2ICsy
MjIsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZCgpOwog
ICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJl
bmRlclN0eWxlKikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkZFNlYXJjaFJlc3VsdCgpOwog
ICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7CiAg
ICAgdmlydHVhbCB2b2lkIG1pbk9yTWF4QXR0cmlidXRlQ2hhbmdlZCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9TZWFyY2hJbnB1dFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9TZWFyY2hJbnB1dFR5cGUuY3BwCmluZGV4IDZmNTAwZGFmM2Y3YjVmMWUwNWJkNGEyZDBi
MmY5ZWU0N2MzYjA0YTQuLjk1ODg3OGNlZDI3MDQ5ODE3MjdjYTUwMWNhNzQ5MmE3OWEzYTE4MDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvU2VhcmNoSW5wdXRUeXBlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL1NlYXJjaElucHV0VHlwZS5jcHAKQEAgLTMyLDE0ICszMiwx
NyBAQAogI2luY2x1ZGUgIlNlYXJjaElucHV0VHlwZS5oIgogCiAjaW5jbHVkZSAiSFRNTElucHV0
RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIktleWJvYXJkRXZl
bnQuaCIKLSNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCIKKyNpbmNsdWRl
ICJSZW5kZXJTZWFyY2hGaWVsZC5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKICNpbmNsdWRl
ICJUZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisK
IGlubGluZSBTZWFyY2hJbnB1dFR5cGU6OlNlYXJjaElucHV0VHlwZShIVE1MSW5wdXRFbGVtZW50
KiBlbGVtZW50KQogICAgIDogQmFzZVRleHRJbnB1dFR5cGUoZWxlbWVudCkKICAgICAsIG1fc2Vh
cmNoRXZlbnRUaW1lcih0aGlzLCAmU2VhcmNoSW5wdXRUeXBlOjpzZWFyY2hFdmVudFRpbWVyRmly
ZWQpCkBAIC01MSw2ICs1NCwxNyBAQCBQYXNzT3duUHRyPElucHV0VHlwZT4gU2VhcmNoSW5wdXRU
eXBlOjpjcmVhdGUoSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkKICAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IFNlYXJjaElucHV0VHlwZShlbGVtZW50KSk7CiB9CiAKK3ZvaWQgU2VhcmNoSW5wdXRU
eXBlOjphZGRTZWFyY2hSZXN1bHQoKQoreworICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVy
ID0gZWxlbWVudCgpLT5yZW5kZXJlcigpKQorICAgICAgICB0b1JlbmRlclNlYXJjaEZpZWxkKHJl
bmRlcmVyKS0+YWRkU2VhcmNoUmVzdWx0KCk7Cit9CisKK1JlbmRlck9iamVjdCogU2VhcmNoSW5w
dXRUeXBlOjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKikg
Y29uc3QKK3sKKyAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyU2VhcmNoRmllbGQoZWxlbWVu
dCgpKTsKK30KKwogY29uc3QgQXRvbWljU3RyaW5nJiBTZWFyY2hJbnB1dFR5cGU6OmZvcm1Db250
cm9sVHlwZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIElucHV0VHlwZU5hbWVzOjpzZWFyY2goKTsK
QEAgLTE1MSw1ICsxNjUsMTkgQEAgdm9pZCBTZWFyY2hJbnB1dFR5cGU6OnNlYXJjaEV2ZW50VGlt
ZXJGaXJlZChUaW1lcjxTZWFyY2hJbnB1dFR5cGU+KikKICAgICBlbGVtZW50KCktPm9uU2VhcmNo
KCk7CiB9CiAKK2Jvb2wgU2VhcmNoSW5wdXRUeXBlOjpzZWFyY2hFdmVudHNTaG91bGRCZURpc3Bh
dGNoZWQoKSBjb25zdAoreworICAgIHJldHVybiBlbGVtZW50KCktPmhhc0F0dHJpYnV0ZShpbmNy
ZW1lbnRhbEF0dHIpOworfQorCit2b2lkIFNlYXJjaElucHV0VHlwZTo6c3VidHJlZUhhc0NoYW5n
ZWQoKQoreworICAgIGlmIChtX2NhbmNlbEJ1dHRvbi5nZXQoKSkKKyAgICAgICAgdG9SZW5kZXJT
ZWFyY2hGaWVsZChlbGVtZW50KCktPnJlbmRlcmVyKCkpLT51cGRhdGVDYW5jZWxCdXR0b25WaXNp
YmlsaXR5KCk7CisKKyAgICAvLyBJZiB0aGUgaW5jcmVtZW50YWwgYXR0cmlidXRlIGlzIHNldCwg
dGhlbiBkaXNwYXRjaCB0aGUgc2VhcmNoIGV2ZW50CisgICAgaWYgKHNlYXJjaEV2ZW50c1Nob3Vs
ZEJlRGlzcGF0Y2hlZCgpKQorICAgICAgICBzdGFydFNlYXJjaEV2ZW50VGltZXIoKTsKK30KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9T
ZWFyY2hJbnB1dFR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvU2VhcmNoSW5wdXRUeXBlLmgK
aW5kZXggYWIxOTEwM2FmZGZhZThlNTU2NjdiZjRjZTQxMzJmYjg4MDViODIyNS4uZWNlMzVhMjU5
ZjA4MWUwN2I0MGQ0N2NhNzdjMjg4MTYyNTViZjU1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9TZWFyY2hJbnB1dFR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1NlYXJj
aElucHV0VHlwZS5oCkBAIC00MywxMSArNDMsMTIgQEAgY2xhc3MgU2VhcmNoSW5wdXRUeXBlIDog
cHVibGljIEJhc2VUZXh0SW5wdXRUeXBlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0
cjxJbnB1dFR5cGU+IGNyZWF0ZShIVE1MSW5wdXRFbGVtZW50Kik7CiAKLSAgICB2b2lkIHN0YXJ0
U2VhcmNoRXZlbnRUaW1lcigpOwogICAgIHZvaWQgc3RvcFNlYXJjaEV2ZW50VGltZXIoKTsKIAog
cHJpdmF0ZToKICAgICBTZWFyY2hJbnB1dFR5cGUoSFRNTElucHV0RWxlbWVudCopOworICAgIHZp
cnR1YWwgdm9pZCBhZGRTZWFyY2hSZXN1bHQoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFJlbmRl
ck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopIGNvbnN0
IE9WRVJSSURFOwogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5
cGUoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmVzcGVjdFNwZWVj
aEF0dHJpYnV0ZSgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCBpc1NlYXJjaEZpZWxkKCkg
Y29uc3QgT1ZFUlJJREU7CkBAIC01Nyw4ICs1OCwxMSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwg
SFRNTEVsZW1lbnQqIHJlc3VsdHNCdXR0b25FbGVtZW50KCkgY29uc3QgT1ZFUlJJREU7CiAgICAg
dmlydHVhbCBIVE1MRWxlbWVudCogY2FuY2VsQnV0dG9uRWxlbWVudCgpIGNvbnN0IE9WRVJSSURF
OwogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVLZXlkb3duRXZlbnQoS2V5Ym9hcmRFdmVudCopIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzdWJ0cmVlSGFzQ2hhbmdlZCgpOwogCiAgICAgdm9p
ZCBzZWFyY2hFdmVudFRpbWVyRmlyZWQoVGltZXI8U2VhcmNoSW5wdXRUeXBlPiopOworICAgIGJv
b2wgc2VhcmNoRXZlbnRzU2hvdWxkQmVEaXNwYXRjaGVkKCkgY29uc3Q7CisgICAgdm9pZCBzdGFy
dFNlYXJjaEV2ZW50VGltZXIoKTsKIAogICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gbV9yZXN1bHRz
QnV0dG9uOwogICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gbV9jYW5jZWxCdXR0b247CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRz
LmNwcAppbmRleCAxMDBkYWViNjQ3YjlkNzdhYTRjMWI0MzEyYmM5YzVlNWZiMTg3YWQ2Li41ZDI2
ODQxYzI0MzU3MDU1ZjdiNWI5OGI3MTgxOGIzMDU3YzFhZDEzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAKQEAg
LTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmUuaCIKKyNpbmNsdWRlICJSZW5kZXJTZWFyY2hGaWVsZC5oIgogI2lu
Y2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5j
bHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKQEAgLTE1MSw3ICsxNTEsNyBAQCB2b2lkIFNlYXJjaEZp
ZWxkUmVzdWx0c0J1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50
KQogICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAm
JiBldmVudC0+aXNNb3VzZUV2ZW50KCkgJiYgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50
KS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgewogICAgICAgICBpbnB1dC0+Zm9jdXMoKTsKICAg
ICAgICAgaW5wdXQtPnNlbGVjdCgpOwotICAgICAgICBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmUqIHJlbmRlcmVyID0gdG9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUoaW5wdXQtPnJlbmRl
cmVyKCkpOworICAgICAgICBSZW5kZXJTZWFyY2hGaWVsZCogcmVuZGVyZXIgPSB0b1JlbmRlclNl
YXJjaEZpZWxkKGlucHV0LT5yZW5kZXJlcigpKTsKICAgICAgICAgaWYgKHJlbmRlcmVyLT5wb3B1
cElzVmlzaWJsZSgpKQogICAgICAgICAgICAgcmVuZGVyZXItPmhpZGVQb3B1cCgpOwogICAgICAg
ICBlbHNlIGlmIChpbnB1dC0+bWF4UmVzdWx0cygpID4gMCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Rm9ybVN1Ym1pc3Npb24uY3BwCmluZGV4IGRhMDM5ODdlZTVlOTQ1NDE2ZjE1MTg0NDI2ZGUyMTZl
ZGRhYzU1OTYuLjI0N2NlNDA2OGFkNWNmYWI3ZjY5ZDIxNTU3MDMxMjkwMjQzMzc3ZDkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0Zvcm1TdWJtaXNzaW9uLmNwcApAQCAtMTkwLDggKzE5MCw3IEBA
IFBhc3NSZWZQdHI8Rm9ybVN1Ym1pc3Npb24+IEZvcm1TdWJtaXNzaW9uOjpjcmVhdGUoSFRNTEZv
cm1FbGVtZW50KiBmb3JtLCBjb25zdCBBCiAgICAgICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBp
bnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihjb250cm9sKTsKICAgICAgICAg
ICAgIGlmIChpbnB1dC0+aXNUZXh0RmllbGQoKSkgewogICAgICAgICAgICAgICAgIGZvcm1WYWx1
ZXMuYXBwZW5kKHBhaXI8U3RyaW5nLCBTdHJpbmc+KGlucHV0LT5uYW1lKCkuc3RyaW5nKCksIGlu
cHV0LT52YWx1ZSgpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGlucHV0LT5pc1NlYXJjaEZpZWxk
KCkpCi0gICAgICAgICAgICAgICAgICAgIGlucHV0LT5hZGRTZWFyY2hSZXN1bHQoKTsKKyAgICAg
ICAgICAgICAgICBpbnB1dC0+YWRkU2VhcmNoUmVzdWx0KCk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBpZiAoaW5wdXQtPmlzUGFzc3dvcmRGaWVsZCgpICYmICFpbnB1dC0+dmFsdWUoKS5p
c0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgY29udGFpbnNQYXNzd29yZERhdGEgPSB0cnVlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAKaW5kZXgg
ODQ4ZmMyMTE5N2MyYTdkMjRmMjY0OGRmNzAyMDUyOWYzYzg4MGQzYi4uMjcwNGNkYzAzOGZkZTI4
ZWQyYzk0M2Y5ZjNmMzQ3MjM2YWQ0ZGM1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwCkBAIC0yMiw3ICsyMiw3IEBACiAgKi8KIAogI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oIgor
I2luY2x1ZGUgIlJlbmRlclNlYXJjaEZpZWxkLmgiCiAKICNpbmNsdWRlICJDU1NGb250U2VsZWN0
b3IuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCkBAIC01MSwzNSArNTEsMTkgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1WaXNp
YmxlUG9zaXRpb24gUmVuZGVyVGV4dENvbnRyb2xJbm5lckJsb2NrOjpwb3NpdGlvbkZvclBvaW50
KGNvbnN0IExheW91dFBvaW50JiBwb2ludCkKLXsKLSAgICBMYXlvdXRQb2ludCBjb250ZW50c1Bv
aW50KHBvaW50KTsKLQotICAgIC8vIE11bHRpbGluZSB0ZXh0IGNvbnRyb2xzIGhhdmUgdGhlIHNj
cm9sbCBvbiBzaGFkb3dBbmNlc3Rvck5vZGUsIHNvIHdlIG5lZWQgdG8gdGFrZSB0aGF0Ci0gICAg
Ly8gaW50byBhY2NvdW50IGhlcmUuCi0gICAgaWYgKG1fbXVsdGlMaW5lKSB7Ci0gICAgICAgIFJl
bmRlclRleHRDb250cm9sKiByZW5kZXJlciA9IHRvUmVuZGVyVGV4dENvbnRyb2wobm9kZSgpLT5z
aGFkb3dBbmNlc3Rvck5vZGUoKS0+cmVuZGVyZXIoKSk7Ci0gICAgICAgIGlmIChyZW5kZXJlci0+
aGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgICAgICBjb250ZW50c1BvaW50ICs9IHJlbmRlcmVy
LT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gUmVuZGVyQmxv
Y2s6OnBvc2l0aW9uRm9yUG9pbnQoY29udGVudHNQb2ludCk7Ci19Ci0KIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIAotUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmUoTm9kZSogbm9kZSkKLSAgICA6IFJlbmRlclRleHRDb250cm9s
KG5vZGUpCitSZW5kZXJTZWFyY2hGaWVsZDo6UmVuZGVyU2VhcmNoRmllbGQoTm9kZSogbm9kZSkK
KyAgICA6IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShub2RlKQogICAgICwgbV9zZWFyY2hQ
b3B1cElzVmlzaWJsZShmYWxzZSkKLSAgICAsIG1fc2hvdWxkRHJhd0NhcHNMb2NrSW5kaWNhdG9y
KGZhbHNlKQotICAgICwgbV9kZXNpcmVkSW5uZXJUZXh0SGVpZ2h0KC0xKQogICAgICwgbV9zZWFy
Y2hQb3B1cCgwKQogewogICAgIEFTU0VSVChub2RlLT5pc0hUTUxFbGVtZW50KCkpOwogICAgIEFT
U0VSVChub2RlLT50b0lucHV0RWxlbWVudCgpKTsKKyAgICBBU1NFUlQobm9kZS0+dG9JbnB1dEVs
ZW1lbnQoKS0+aXNTZWFyY2hGaWVsZCgpKTsKIH0KIAotUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lOjp+UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKCkKK1JlbmRlclNlYXJjaEZpZWxkOjp+
UmVuZGVyU2VhcmNoRmllbGQoKQogewogICAgIGlmIChtX3NlYXJjaFBvcHVwKSB7CiAgICAgICAg
IG1fc2VhcmNoUG9wdXAtPnBvcHVwTWVudSgpLT5kaXNjb25uZWN0Q2xpZW50KCk7CkBAIC04Nywz
OCArNzEsMTcgQEAgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp+UmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lKCkKICAgICB9CiB9CiAKLWlubGluZSBIVE1MRWxlbWVudCogUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lOjpjb250YWluZXJFbGVtZW50KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gaW5wdXRFbGVtZW50KCktPmNvbnRhaW5lckVsZW1lbnQoKTsKLX0KLQotaW5saW5lIEhUTUxF
bGVtZW50KiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmlubmVyQmxvY2tFbGVtZW50KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gaW5wdXRFbGVtZW50KCktPmlubmVyQmxvY2tFbGVtZW50KCk7
Ci19Ci0KLWlubGluZSBIVE1MRWxlbWVudCogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpp
bm5lclNwaW5CdXR0b25FbGVtZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gaW5wdXRFbGVtZW50
KCktPmlubmVyU3BpbkJ1dHRvbkVsZW1lbnQoKTsKLX0KLQotaW5saW5lIEhUTUxFbGVtZW50KiBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnJlc3VsdHNCdXR0b25FbGVtZW50KCkgY29uc3QK
K2lubGluZSBIVE1MRWxlbWVudCogUmVuZGVyU2VhcmNoRmllbGQ6OnJlc3VsdHNCdXR0b25FbGVt
ZW50KCkgY29uc3QKIHsKICAgICByZXR1cm4gaW5wdXRFbGVtZW50KCktPnJlc3VsdHNCdXR0b25F
bGVtZW50KCk7CiB9CiAKLWlubGluZSBIVE1MRWxlbWVudCogUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjpjYW5jZWxCdXR0b25FbGVtZW50KCkgY29uc3QKK2lubGluZSBIVE1MRWxlbWVudCog
UmVuZGVyU2VhcmNoRmllbGQ6OmNhbmNlbEJ1dHRvbkVsZW1lbnQoKSBjb25zdAogewogICAgIHJl
dHVybiBpbnB1dEVsZW1lbnQoKS0+Y2FuY2VsQnV0dG9uRWxlbWVudCgpOwogfQogCi1SZW5kZXJT
dHlsZSogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp0ZXh0QmFzZVN0eWxlKCkgY29uc3QK
LXsKLSAgICBIVE1MRWxlbWVudCogaW5uZXJCbG9jayA9IGlubmVyQmxvY2tFbGVtZW50KCk7Ci0g
ICAgcmV0dXJuIGlubmVyQmxvY2sgPyBpbm5lckJsb2NrLT5yZW5kZXJlcigpLT5zdHlsZSgpIDog
c3R5bGUoKTsKLX0KLQotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmFkZFNlYXJj
aFJlc3VsdCgpCit2b2lkIFJlbmRlclNlYXJjaEZpZWxkOjphZGRTZWFyY2hSZXN1bHQoKQogewog
ICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gaW5wdXRFbGVtZW50KCk7CiAgICAgaWYgKGlu
cHV0LT5tYXhSZXN1bHRzKCkgPD0gMCkKQEAgLTE0OSw3ICsxMTIsNyBAQCB2b2lkIFJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZTo6YWRkU2VhcmNoUmVzdWx0KCkKICAgICBtX3NlYXJjaFBvcHVw
LT5zYXZlUmVjZW50U2VhcmNoZXMobmFtZSwgbV9yZWNlbnRTZWFyY2hlcyk7CiB9CiAKLXZvaWQg
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzaG93UG9wdXAoKQordm9pZCBSZW5kZXJTZWFy
Y2hGaWVsZDo6c2hvd1BvcHVwKCkKIHsKICAgICBpZiAobV9zZWFyY2hQb3B1cElzVmlzaWJsZSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTc4LDI1OCArMTQxLDEzIEBAIHZvaWQgUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lOjpzaG93UG9wdXAoKQogICAgIG1fc2VhcmNoUG9wdXAtPnBvcHVwTWVu
dSgpLT5zaG93KHBpeGVsU25hcHBlZEludFJlY3QoYWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKSks
IGRvY3VtZW50KCktPnZpZXcoKSwgLTEpOwogfQogCi12b2lkIFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6aGlkZVBvcHVwKCkKK3ZvaWQgUmVuZGVyU2VhcmNoRmllbGQ6OmhpZGVQb3B1cCgp
CiB7CiAgICAgaWYgKG1fc2VhcmNoUG9wdXApCiAgICAgICAgIG1fc2VhcmNoUG9wdXAtPnBvcHVw
TWVudSgpLT5oaWRlKCk7CiB9CiAKLXZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpw
YWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0
KQotewotICAgIFJlbmRlclRleHRDb250cm9sOjpwYWludChwYWludEluZm8sIHBhaW50T2Zmc2V0
KTsKLQotICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUJsb2NrQmFja2dyb3Vu
ZCAmJiBtX3Nob3VsZERyYXdDYXBzTG9ja0luZGljYXRvcikgewotICAgICAgICBMYXlvdXRSZWN0
IGNvbnRlbnRzUmVjdCA9IGNvbnRlbnRCb3hSZWN0KCk7Ci0KLSAgICAgICAgLy8gQ2VudGVyIHZl
cnRpY2FsbHkgbGlrZSB0aGUgdGV4dC4KLSAgICAgICAgY29udGVudHNSZWN0LnNldFkoKGhlaWdo
dCgpIC0gY29udGVudHNSZWN0LmhlaWdodCgpKSAvIDIpOwotCi0gICAgICAgIC8vIENvbnZlcnQg
dGhlIHJlY3QgaW50byB0aGUgY29vcmRzIHVzZWQgZm9yIHBhaW50aW5nIHRoZSBjb250ZW50Ci0g
ICAgICAgIGNvbnRlbnRzUmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpKTsKLSAg
ICAgICAgdGhlbWUoKS0+cGFpbnRDYXBzTG9ja0luZGljYXRvcih0aGlzLCBwYWludEluZm8sIHBp
eGVsU25hcHBlZEludFJlY3QoY29udGVudHNSZWN0KSk7Ci0gICAgfQotfQotCi12b2lkIFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5b3V0KCkKLXsKLSAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIHJlbW92ZSB0aGUgaGVpZ2h0LXJlbGF0ZWQgaGFja3MgaW4gbGF5b3V0KCkgYW5kCi0gICAg
Ly8gc3R5bGVEaWRDaGFuZ2UoKS4gV2UgbmVlZCB0aGVtIGJlY2F1c2UKLSAgICAvLyAtIENlbnRl
ciB0aGUgaW5uZXIgZWxlbWVudHMgdmVydGljYWxseSBpZiB0aGUgaW5wdXQgaGVpZ2h0IGlzIHRh
bGxlciB0aGFuCi0gICAgLy8gICB0aGUgaW50cmluc2ljIGhlaWdodCBvZiB0aGUgaW5uZXIgZWxl
bWVudHMuCi0gICAgLy8gLSBTaHJpbmsgdGhlIGlubmVyIGVsbWVudCBoZWlnaHRzIGlmIHRoZSBp
bnB1dCBoZWlnaHQgaXMgc2FtbGxlciB0aGFuIHRoZQotICAgIC8vICAgaW50cmluc2ljIGhlaWdo
dHMgb2YgdGhlIGlubmVyIGVsZW1lbnRzLgotCi0gICAgLy8gV2UgZG9uJ3QgaG9ub3IgcGFkZGlu
Z3MgYW5kIGJvcmRlcnMgZm9yIHRleHRmaWVsZHMgd2l0aG91dCBkZWNvcmF0aW9ucwotICAgIC8v
IGFuZCB0eXBlPXNlYXJjaCBpZiB0aGUgdGV4dCBoZWlnaHQgaXMgdGFsbGVyIHRoYW4gdGhlIGNv
bnRlbnRIZWlnaHQoKQotICAgIC8vIGJlY2F1c2Ugb2YgY29tcGFiaWxpdHkuCi0KLSAgICBSZW5k
ZXJCbG9jazo6bGF5b3V0QmxvY2soZmFsc2UpOwotCi0gICAgUmVuZGVyQm94KiBpbm5lclRleHRS
ZW5kZXJlciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVyQm94KCk7Ci0gICAgQVNTRVJUKGlu
bmVyVGV4dFJlbmRlcmVyKTsKLSAgICBSZW5kZXJCb3gqIGlubmVyQmxvY2tSZW5kZXJlciA9IGlu
bmVyQmxvY2tFbGVtZW50KCkgPyBpbm5lckJsb2NrRWxlbWVudCgpLT5yZW5kZXJCb3goKSA6IDA7
Ci0gICAgSFRNTEVsZW1lbnQqIGNvbnRhaW5lciA9IGNvbnRhaW5lckVsZW1lbnQoKTsKLSAgICBS
ZW5kZXJCb3gqIGNvbnRhaW5lclJlbmRlcmVyID0gY29udGFpbmVyID8gY29udGFpbmVyLT5yZW5k
ZXJCb3goKSA6IDA7Ci0KLSAgICAvLyBTZXQgdGhlIHRleHQgYmxvY2sgaGVpZ2h0Ci0gICAgTGF5
b3V0VW5pdCBkZXNpcmVkSGVpZ2h0ID0gdGV4dEJsb2NrSGVpZ2h0KCk7Ci0gICAgTGF5b3V0VW5p
dCBjdXJyZW50SGVpZ2h0ID0gaW5uZXJUZXh0UmVuZGVyZXItPmhlaWdodCgpOwotCi0gICAgTGF5
b3V0VW5pdCBoZWlnaHRMaW1pdCA9IChpbnB1dEVsZW1lbnQoKS0+aXNTZWFyY2hGaWVsZCgpIHx8
ICFjb250YWluZXIpID8gaGVpZ2h0KCkgOiBjb250ZW50SGVpZ2h0KCk7Ci0gICAgaWYgKGN1cnJl
bnRIZWlnaHQgPiBoZWlnaHRMaW1pdCkgewotICAgICAgICBpZiAoZGVzaXJlZEhlaWdodCAhPSBj
dXJyZW50SGVpZ2h0KQotICAgICAgICAgICAgc2V0TmVlZHNMYXlvdXQodHJ1ZSwgTWFya09ubHlU
aGlzKTsKLQotICAgICAgICBpbm5lclRleHRSZW5kZXJlci0+c3R5bGUoKS0+c2V0SGVpZ2h0KExl
bmd0aChkZXNpcmVkSGVpZ2h0LCBGaXhlZCkpOwotICAgICAgICBtX2Rlc2lyZWRJbm5lclRleHRI
ZWlnaHQgPSBkZXNpcmVkSGVpZ2h0OwotICAgICAgICBpZiAoaW5uZXJCbG9ja1JlbmRlcmVyKQot
ICAgICAgICAgICAgaW5uZXJCbG9ja1JlbmRlcmVyLT5zdHlsZSgpLT5zZXRIZWlnaHQoTGVuZ3Ro
KGRlc2lyZWRIZWlnaHQsIEZpeGVkKSk7Ci0gICAgfQotICAgIC8vIFRoZSBjb250YWluZXIgbWln
aHQgYmUgdGFsbGVyIGJlY2F1c2Ugb2YgZGVjb3JhdGlvbiBlbGVtZW50cy4KLSAgICBpZiAoY29u
dGFpbmVyUmVuZGVyZXIpIHsKLSAgICAgICAgY29udGFpbmVyUmVuZGVyZXItPmxheW91dElmTmVl
ZGVkKCk7Ci0gICAgICAgIExheW91dFVuaXQgY29udGFpbmVySGVpZ2h0ID0gY29udGFpbmVyUmVu
ZGVyZXItPmhlaWdodCgpOwotICAgICAgICBpZiAoY29udGFpbmVySGVpZ2h0ID4gaGVpZ2h0TGlt
aXQpIHsKLSAgICAgICAgICAgIGNvbnRhaW5lclJlbmRlcmVyLT5zdHlsZSgpLT5zZXRIZWlnaHQo
TGVuZ3RoKGhlaWdodExpbWl0LCBGaXhlZCkpOwotICAgICAgICAgICAgc2V0TmVlZHNMYXlvdXQo
dHJ1ZSwgTWFya09ubHlUaGlzKTsKLSAgICAgICAgfSBlbHNlIGlmIChjb250YWluZXJSZW5kZXJl
ci0+aGVpZ2h0KCkgPCBjb250ZW50SGVpZ2h0KCkpIHsKLSAgICAgICAgICAgIGNvbnRhaW5lclJl
bmRlcmVyLT5zdHlsZSgpLT5zZXRIZWlnaHQoTGVuZ3RoKGNvbnRlbnRIZWlnaHQoKSwgRml4ZWQp
KTsKLSAgICAgICAgICAgIHNldE5lZWRzTGF5b3V0KHRydWUsIE1hcmtPbmx5VGhpcyk7Ci0gICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgY29udGFpbmVyUmVuZGVyZXItPnN0eWxlKCktPnNldEhl
aWdodChMZW5ndGgoY29udGFpbmVySGVpZ2h0LCBGaXhlZCkpOwotICAgIH0KLQotICAgIC8vIElm
IHdlIG5lZWQgYW5vdGhlciBsYXlvdXQgcGFzcywgd2UgaGF2ZSBjaGFuZ2VkIG9uZSBvZiBjaGls
ZHJlbidzIGhlaWdodCBzbyB3ZSBuZWVkIHRvIHJlbGF5b3V0IHRoZW0uCi0gICAgaWYgKG5lZWRz
TGF5b3V0KCkpCi0gICAgICAgIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayh0cnVlKTsKLQotICAg
IC8vIENlbnRlciB0aGUgY2hpbGQgYmxvY2sgdmVydGljYWxseQotICAgIGN1cnJlbnRIZWlnaHQg
PSBpbm5lclRleHRSZW5kZXJlci0+aGVpZ2h0KCk7Ci0gICAgaWYgKCFjb250YWluZXIgJiYgY3Vy
cmVudEhlaWdodCAhPSBjb250ZW50SGVpZ2h0KCkpIHsKLSAgICAgICAgTGF5b3V0VW5pdCBoZWln
aHREaWZmID0gY3VycmVudEhlaWdodCAtIGNvbnRlbnRIZWlnaHQoKTsKLSAgICAgICAgaW5uZXJU
ZXh0UmVuZGVyZXItPnNldFkoaW5uZXJUZXh0UmVuZGVyZXItPnkoKSAtIChoZWlnaHREaWZmIC8g
MiArIGxheW91dE1vZChoZWlnaHREaWZmLCAyKSkpOwotICAgIH0gZWxzZSBpZiAoaW5wdXRFbGVt
ZW50KCktPmlzU2VhcmNoRmllbGQoKSAmJiBjb250YWluZXJSZW5kZXJlciAmJiBjb250YWluZXJS
ZW5kZXJlci0+aGVpZ2h0KCkgPiBjb250ZW50SGVpZ2h0KCkpIHsKLSAgICAgICAgLy8gQSBxdWly
ayBmb3IgZmluZC1pbi1wYWdlIGJveCBvbiBTYWZhcmkgV2luZG93cy4KLSAgICAgICAgLy8gaHR0
cDovL3dlYmtpdC5vcmcvYi82MzE1NwotICAgICAgICBMYXlvdXRVbml0IGhlaWdodERpZmYgPSBj
b250YWluZXJSZW5kZXJlci0+aGVpZ2h0KCkgLSBjb250ZW50SGVpZ2h0KCk7Ci0gICAgICAgIGNv
bnRhaW5lclJlbmRlcmVyLT5zZXRZKGNvbnRhaW5lclJlbmRlcmVyLT55KCkgLSAoaGVpZ2h0RGlm
ZiAvIDIgKyBsYXlvdXRNb2QoaGVpZ2h0RGlmZiwgMikpKTsKLSAgICB9Ci0KLSAgICAvLyBJZ25v
cmVzIHRoZSBwYWRkaW5ncyBmb3IgdGhlIGlubmVyIHNwaW4gYnV0dG9uLgotICAgIGlmIChSZW5k
ZXJCb3gqIGlubmVyU3BpbkJveCA9IGlubmVyU3BpbkJ1dHRvbkVsZW1lbnQoKSA/IGlubmVyU3Bp
bkJ1dHRvbkVsZW1lbnQoKS0+cmVuZGVyQm94KCkgOiAwKSB7Ci0gICAgICAgIFJlbmRlckJveCog
cGFyZW50Qm94ID0gaW5uZXJTcGluQm94LT5wYXJlbnRCb3goKTsKLSAgICAgICAgaWYgKGNvbnRh
aW5lclJlbmRlcmVyICYmICFjb250YWluZXJSZW5kZXJlci0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdo
dERpcmVjdGlvbigpKQotICAgICAgICAgICAgaW5uZXJTcGluQm94LT5zZXRMb2NhdGlvbihMYXlv
dXRQb2ludCgtcGFkZGluZ0xlZnQoKSwgLXBhZGRpbmdUb3AoKSkpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBpbm5lclNwaW5Cb3gtPnNldExvY2F0aW9uKExheW91dFBvaW50KHBhcmVudEJv
eC0+d2lkdGgoKSAtIGlubmVyU3BpbkJveC0+d2lkdGgoKSArIHBhZGRpbmdSaWdodCgpLCAtcGFk
ZGluZ1RvcCgpKSk7Ci0gICAgICAgIGlubmVyU3BpbkJveC0+c2V0SGVpZ2h0KGhlaWdodCgpIC0g
Ym9yZGVyVG9wKCkgLSBib3JkZXJCb3R0b20oKSk7Ci0gICAgfQotCi0gICAgSFRNTEVsZW1lbnQq
IHBsYWNlaG9sZGVyRWxlbWVudCA9IGlucHV0RWxlbWVudCgpLT5wbGFjZWhvbGRlckVsZW1lbnQo
KTsKLSAgICBpZiAoUmVuZGVyQm94KiBwbGFjZWhvbGRlckJveCA9IHBsYWNlaG9sZGVyRWxlbWVu
dCA/IHBsYWNlaG9sZGVyRWxlbWVudC0+cmVuZGVyQm94KCkgOiAwKSB7Ci0gICAgICAgIHBsYWNl
aG9sZGVyQm94LT5zdHlsZSgpLT5zZXRXaWR0aChMZW5ndGgoaW5uZXJUZXh0UmVuZGVyZXItPndp
ZHRoKCkgLSBwbGFjZWhvbGRlckJveC0+Ym9yZGVyQW5kUGFkZGluZ1dpZHRoKCksIEZpeGVkKSk7
Ci0gICAgICAgIHBsYWNlaG9sZGVyQm94LT5zdHlsZSgpLT5zZXRIZWlnaHQoTGVuZ3RoKGlubmVy
VGV4dFJlbmRlcmVyLT5oZWlnaHQoKSAtIHBsYWNlaG9sZGVyQm94LT5ib3JkZXJBbmRQYWRkaW5n
SGVpZ2h0KCksIEZpeGVkKSk7Ci0gICAgICAgIGJvb2wgcGxhY2Vob2xkZXJCb3hIYWRMYXlvdXQg
PSBwbGFjZWhvbGRlckJveC0+ZXZlckhhZExheW91dCgpOwotICAgICAgICBwbGFjZWhvbGRlckJv
eC0+bGF5b3V0SWZOZWVkZWQoKTsKLSAgICAgICAgTGF5b3V0UG9pbnQgdGV4dE9mZnNldCA9IGlu
bmVyVGV4dFJlbmRlcmVyLT5sb2NhdGlvbigpOwotICAgICAgICBpZiAoaW5uZXJCbG9ja0VsZW1l
bnQoKSAmJiBpbm5lckJsb2NrRWxlbWVudCgpLT5yZW5kZXJCb3goKSkKLSAgICAgICAgICAgIHRl
eHRPZmZzZXQgKz0gdG9MYXlvdXRTaXplKGlubmVyQmxvY2tFbGVtZW50KCktPnJlbmRlckJveCgp
LT5sb2NhdGlvbigpKTsKLSAgICAgICAgaWYgKGNvbnRhaW5lclJlbmRlcmVyKQotICAgICAgICAg
ICAgdGV4dE9mZnNldCArPSB0b0xheW91dFNpemUoY29udGFpbmVyUmVuZGVyZXItPmxvY2F0aW9u
KCkpOwotICAgICAgICBwbGFjZWhvbGRlckJveC0+c2V0TG9jYXRpb24odGV4dE9mZnNldCk7Ci0K
LSAgICAgICAgaWYgKCFwbGFjZWhvbGRlckJveEhhZExheW91dCAmJiBwbGFjZWhvbGRlckJveC0+
Y2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgYXNz
dW1lcyBhIHNoYWRvdyB0cmVlIHdpdGhvdXQgZmxvYXRzLiBJZiBmbG9hdHMgYXJlIGFkZGVkLCB0
aGUKLSAgICAgICAgICAgIC8vIGxvZ2ljIHNob3VsZCBiZSBzaGFyZWQgd2l0aCBSZW5kZXJCbG9j
azo6bGF5b3V0QmxvY2tDaGlsZC4KLSAgICAgICAgICAgIHBsYWNlaG9sZGVyQm94LT5yZXBhaW50
KCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJl
c3VsdCYgcmVzdWx0LCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3Qg
TGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rp
b24pCi17Ci0gICAgaWYgKCFSZW5kZXJUZXh0Q29udHJvbDo6bm9kZUF0UG9pbnQocmVxdWVzdCwg
cmVzdWx0LCBwb2ludEluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldCwgaGl0VGVzdEFjdGlv
bikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFNheSB0aGF0IHdlIGhpdCB0aGUg
aW5uZXIgdGV4dCBlbGVtZW50IGlmCi0gICAgLy8gIC0gd2UgaGl0IGEgbm9kZSBpbnNpZGUgdGhl
IGlubmVyIHRleHQgZWxlbWVudCwKLSAgICAvLyAgLSB3ZSBoaXQgdGhlIDxpbnB1dD4gZWxlbWVu
dCAoZS5nLiB3ZSdyZSBvdmVyIHRoZSBib3JkZXIgb3IgcGFkZGluZyksIG9yCi0gICAgLy8gIC0g
d2UgaGl0IHJlZ2lvbnMgbm90IGluIGFueSBkZWNvcmF0aW9uIGJ1dHRvbnMuCi0gICAgSFRNTEVs
ZW1lbnQqIGNvbnRhaW5lciA9IGNvbnRhaW5lckVsZW1lbnQoKTsKLSAgICBpZiAocmVzdWx0Lmlu
bmVyTm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihpbm5lclRleHRFbGVtZW50KCkpIHx8IHJlc3VsdC5p
bm5lck5vZGUoKSA9PSBub2RlKCkgfHwgKGNvbnRhaW5lciAmJiBjb250YWluZXIgPT0gcmVzdWx0
LmlubmVyTm9kZSgpKSkgewotICAgICAgICBMYXlvdXRQb2ludCBwb2ludEluUGFyZW50ID0gcG9p
bnRJbkNvbnRhaW5lcjsKLSAgICAgICAgaWYgKGNvbnRhaW5lciAmJiBpbm5lckJsb2NrRWxlbWVu
dCgpKSB7Ci0gICAgICAgICAgICBpZiAoaW5uZXJCbG9ja0VsZW1lbnQoKS0+cmVuZGVyQm94KCkp
Ci0gICAgICAgICAgICAgICAgcG9pbnRJblBhcmVudCAtPSB0b0xheW91dFNpemUoaW5uZXJCbG9j
a0VsZW1lbnQoKS0+cmVuZGVyQm94KCktPmxvY2F0aW9uKCkpOwotICAgICAgICAgICAgaWYgKGNv
bnRhaW5lci0+cmVuZGVyQm94KCkpCi0gICAgICAgICAgICAgICAgcG9pbnRJblBhcmVudCAtPSB0
b0xheW91dFNpemUoY29udGFpbmVyLT5yZW5kZXJCb3goKS0+bG9jYXRpb24oKSk7Ci0gICAgICAg
IH0KLSAgICAgICAgaGl0SW5uZXJUZXh0RWxlbWVudChyZXN1bHQsIHBvaW50SW5QYXJlbnQsIGFj
Y3VtdWxhdGVkT2Zmc2V0KTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2Ug
ZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQotewotICAgIG1fZGVzaXJlZElubmVy
VGV4dEhlaWdodCA9IC0xOwotICAgIFJlbmRlclRleHRDb250cm9sOjpzdHlsZURpZENoYW5nZShk
aWZmLCBvbGRTdHlsZSk7Ci0KLSAgICAvLyBXZSBtYXkgaGF2ZSBzZXQgdGhlIHdpZHRoIGFuZCB0
aGUgaGVpZ2h0IGluIHRoZSBvbGQgc3R5bGUgaW4gbGF5b3V0KCkuCi0gICAgLy8gUmVzZXQgdGhl
bSBub3cgdG8gYXZvaWQgZ2V0dGluZyBhIHNwdXJpb3VzIGxheW91dCBoaW50LgotICAgIEhUTUxF
bGVtZW50KiBpbm5lckJsb2NrID0gaW5uZXJCbG9ja0VsZW1lbnQoKTsKLSAgICBpZiAoUmVuZGVy
T2JqZWN0KiBpbm5lckJsb2NrUmVuZGVyZXIgPSBpbm5lckJsb2NrID8gaW5uZXJCbG9jay0+cmVu
ZGVyZXIoKSA6IDApIHsKLSAgICAgICAgaW5uZXJCbG9ja1JlbmRlcmVyLT5zdHlsZSgpLT5zZXRI
ZWlnaHQoTGVuZ3RoKCkpOwotICAgICAgICBpbm5lckJsb2NrUmVuZGVyZXItPnN0eWxlKCktPnNl
dFdpZHRoKExlbmd0aCgpKTsKLSAgICB9Ci0gICAgSFRNTEVsZW1lbnQqIGNvbnRhaW5lciA9IGNv
bnRhaW5lckVsZW1lbnQoKTsKLSAgICBpZiAoUmVuZGVyT2JqZWN0KiBjb250YWluZXJSZW5kZXJl
ciA9IGNvbnRhaW5lciA/IGNvbnRhaW5lci0+cmVuZGVyZXIoKSA6IDApIHsKLSAgICAgICAgY29u
dGFpbmVyUmVuZGVyZXItPnN0eWxlKCktPnNldEhlaWdodChMZW5ndGgoKSk7Ci0gICAgICAgIGNv
bnRhaW5lclJlbmRlcmVyLT5zdHlsZSgpLT5zZXRXaWR0aChMZW5ndGgoKSk7Ci0gICAgfQotICAg
IGlmIChIVE1MRWxlbWVudCogcGxhY2Vob2xkZXIgPSBpbnB1dEVsZW1lbnQoKS0+cGxhY2Vob2xk
ZXJFbGVtZW50KCkpCi0gICAgICAgIHBsYWNlaG9sZGVyLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5
KENTU1Byb3BlcnR5VGV4dE92ZXJmbG93LCB0ZXh0U2hvdWxkQmVUcnVuY2F0ZWQoKSA/IENTU1Zh
bHVlRWxsaXBzaXMgOiBDU1NWYWx1ZUNsaXApOwotICAgIHNldEhhc092ZXJmbG93Q2xpcChmYWxz
ZSk7Ci19Ci0KLXZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjYXBzTG9ja1N0YXRl
TWF5SGF2ZUNoYW5nZWQoKQotewotICAgIGlmICghbm9kZSgpIHx8ICFkb2N1bWVudCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBPbmx5IGRyYXcgdGhlIGNhcHMgbG9jayBpbmRpY2F0b3Ig
aWYgdGhlc2UgdGhpbmdzIGFyZSB0cnVlOgotICAgIC8vIDEpIFRoZSBmaWVsZCBpcyBhIHBhc3N3
b3JkIGZpZWxkCi0gICAgLy8gMikgVGhlIGZyYW1lIGlzIGFjdGl2ZQotICAgIC8vIDMpIFRoZSBl
bGVtZW50IGlzIGZvY3VzZWQKLSAgICAvLyA0KSBUaGUgY2FwcyBsb2NrIGlzIG9uCi0gICAgYm9v
bCBzaG91bGREcmF3Q2Fwc0xvY2tJbmRpY2F0b3IgPSBmYWxzZTsKLQotICAgIGlmIChGcmFtZSog
ZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKQotICAgICAgICBzaG91bGREcmF3Q2Fwc0xvY2tJ
bmRpY2F0b3IgPSBpbnB1dEVsZW1lbnQoKS0+aXNQYXNzd29yZEZpZWxkKCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgZnJhbWUtPnNlbGVjdGlvbigpLT5pc0ZvY3Vz
ZWRBbmRBY3RpdmUoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBk
b2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpID09IG5vZGUoKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmJiBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OmN1cnJlbnRDYXBzTG9j
a1N0YXRlKCk7Ci0KLSAgICBpZiAoc2hvdWxkRHJhd0NhcHNMb2NrSW5kaWNhdG9yICE9IG1fc2hv
dWxkRHJhd0NhcHNMb2NrSW5kaWNhdG9yKSB7Ci0gICAgICAgIG1fc2hvdWxkRHJhd0NhcHNMb2Nr
SW5kaWNhdG9yID0gc2hvdWxkRHJhd0NhcHNMb2NrSW5kaWNhdG9yOwotICAgICAgICByZXBhaW50
KCk7Ci0gICAgfQotfQotCi1ib29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aGFzQ29u
dHJvbENsaXAoKSBjb25zdAotewotICAgIC8vIEFwcGx5IGNvbnRyb2wgY2xpcCBmb3IgdGV4dCBm
aWVsZHMgd2l0aCBkZWNvcmF0aW9ucy4KLSAgICByZXR1cm4gISFjb250YWluZXJFbGVtZW50KCk7
Ci19Ci0KLUxheW91dFJlY3QgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjb250cm9sQ2xp
cFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmIGFkZGl0aW9uYWxPZmZzZXQpIGNvbnN0Ci17Ci0gICAg
QVNTRVJUKGhhc0NvbnRyb2xDbGlwKCkpOwotICAgIExheW91dFJlY3QgY2xpcFJlY3QgPSB1bmlv
blJlY3QoY29udGVudEJveFJlY3QoKSwgY29udGFpbmVyRWxlbWVudCgpLT5yZW5kZXJCb3goKS0+
ZnJhbWVSZWN0KCkpOwotICAgIGNsaXBSZWN0Lm1vdmVCeShhZGRpdGlvbmFsT2Zmc2V0KTsKLSAg
ICByZXR1cm4gY2xpcFJlY3Q7Ci19Ci0KLWZsb2F0IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZTo6Z2V0QXZnQ2hhcldpZHRoKEF0b21pY1N0cmluZyBmYW1pbHkpCi17Ci0gICAgLy8gU2luY2Ug
THVjaWRhIEdyYW5kZSBpcyB0aGUgZGVmYXVsdCBmb250LCB3ZSB3YW50IHRoaXMgdG8gbWF0Y2gg
dGhlIHdpZHRoCi0gICAgLy8gb2YgTVMgU2hlbGwgRGxnLCB0aGUgZGVmYXVsdCBmb250IGZvciB0
ZXh0YXJlYXMgaW4gRmlyZWZveCwgU2FmYXJpIFdpbiBhbmQKLSAgICAvLyBJRSBmb3Igc29tZSBl
bmNvZGluZ3MgKGluIElFLCB0aGUgZGVmYXVsdCBmb250IGlzIGVuY29kaW5nIHNwZWNpZmljKS4K
LSAgICAvLyA5MDEgaXMgdGhlIGF2Z0NoYXJXaWR0aCB2YWx1ZSBpbiB0aGUgT1MvMiB0YWJsZSBm
b3IgTVMgU2hlbGwgRGxnLgotICAgIGlmIChmYW1pbHkgPT0gQXRvbWljU3RyaW5nKCJMdWNpZGEg
R3JhbmRlIikpCi0gICAgICAgIHJldHVybiBzY2FsZUVtVG9Vbml0cyg5MDEpOwotCi0gICAgcmV0
dXJuIFJlbmRlclRleHRDb250cm9sOjpnZXRBdmdDaGFyV2lkdGgoZmFtaWx5KTsKLX0KLQotTGF5
b3V0VW5pdCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnByZWZlcnJlZENvbnRlbnRXaWR0
aChmbG9hdCBjaGFyV2lkdGgpIGNvbnN0Ci17Ci0gICAgaW50IGZhY3RvcjsKLSAgICBib29sIGlu
Y2x1ZGVzRGVjb3JhdGlvbiA9IGlucHV0RWxlbWVudCgpLT5zaXplU2hvdWxkSW5jbHVkZURlY29y
YXRpb24oZmFjdG9yKTsKLSAgICBpZiAoZmFjdG9yIDw9IDApCi0gICAgICAgIGZhY3RvciA9IDIw
OwotCi0gICAgTGF5b3V0VW5pdCByZXN1bHQgPSBzdGF0aWNfY2FzdDxMYXlvdXRVbml0PihjZWls
ZWRMYXlvdXRVbml0KGNoYXJXaWR0aCAqIGZhY3RvcikpOwotCi0gICAgZmxvYXQgbWF4Q2hhcldp
ZHRoID0gMC5mOwotICAgIEF0b21pY1N0cmluZyBmYW1pbHkgPSBzdHlsZSgpLT5mb250KCkuZmFt
aWx5KCkuZmFtaWx5KCk7Ci0gICAgLy8gU2luY2UgTHVjaWRhIEdyYW5kZSBpcyB0aGUgZGVmYXVs
dCBmb250LCB3ZSB3YW50IHRoaXMgdG8gbWF0Y2ggdGhlIHdpZHRoCi0gICAgLy8gb2YgTVMgU2hl
bGwgRGxnLCB0aGUgZGVmYXVsdCBmb250IGZvciB0ZXh0YXJlYXMgaW4gRmlyZWZveCwgU2FmYXJp
IFdpbiBhbmQKLSAgICAvLyBJRSBmb3Igc29tZSBlbmNvZGluZ3MgKGluIElFLCB0aGUgZGVmYXVs
dCBmb250IGlzIGVuY29kaW5nIHNwZWNpZmljKS4KLSAgICAvLyA0MDI3IGlzIHRoZSAoeE1heCAt
IHhNaW4pIHZhbHVlIGluIHRoZSAiaGVhZCIgZm9udCB0YWJsZSBmb3IgTVMgU2hlbGwgRGxnLgot
ICAgIGlmIChmYW1pbHkgPT0gQXRvbWljU3RyaW5nKCJMdWNpZGEgR3JhbmRlIikpCi0gICAgICAg
IG1heENoYXJXaWR0aCA9IHNjYWxlRW1Ub1VuaXRzKDQwMjcpOwotICAgIGVsc2UgaWYgKGhhc1Zh
bGlkQXZnQ2hhcldpZHRoKGZhbWlseSkpCi0gICAgICAgIG1heENoYXJXaWR0aCA9IHJvdW5kZihz
dHlsZSgpLT5mb250KCkucHJpbWFyeUZvbnQoKS0+bWF4Q2hhcldpZHRoKCkpOwotCi0gICAgLy8g
Rm9yIHRleHQgaW5wdXRzLCBJRSBhZGRzIHNvbWUgZXh0cmEgd2lkdGguCi0gICAgaWYgKG1heENo
YXJXaWR0aCA+IDAuZikKLSAgICAgICAgcmVzdWx0ICs9IG1heENoYXJXaWR0aCAtIGNoYXJXaWR0
aDsKLQotICAgIGlmIChpbmNsdWRlc0RlY29yYXRpb24pIHsKLSAgICAgICAgSFRNTEVsZW1lbnQq
IHNwaW5CdXR0b24gPSBpbm5lclNwaW5CdXR0b25FbGVtZW50KCk7Ci0gICAgICAgIGlmIChSZW5k
ZXJCb3gqIHNwaW5SZW5kZXJlciA9IHNwaW5CdXR0b24gPyBzcGluQnV0dG9uLT5yZW5kZXJCb3go
KSA6IDApIHsKLSAgICAgICAgICAgIHJlc3VsdCArPSBzcGluUmVuZGVyZXItPmJvcmRlckxlZnQo
KSArIHNwaW5SZW5kZXJlci0+Ym9yZGVyUmlnaHQoKSArCi0gICAgICAgICAgICAgICAgICBzcGlu
UmVuZGVyZXItPnBhZGRpbmdMZWZ0KCkgKyBzcGluUmVuZGVyZXItPnBhZGRpbmdSaWdodCgpOwot
ICAgICAgICAgICAgLy8gU2luY2UgdGhlIHdpZHRoIG9mIHNwaW5SZW5kZXJlciBpcyBub3QgY2Fs
Y3VsYXRlZCB5ZXQsIHNwaW5SZW5kZXJlci0+d2lkdGgoKSByZXR1cm5zIDAuCi0gICAgICAgICAg
ICAvLyBTbyBjb21wdXRlZFN0eWxlKCktPndpZHRoKCkgaXMgdXNlZCBpbnN0ZWFkLgotICAgICAg
ICAgICAgcmVzdWx0ICs9IHNwaW5CdXR0b24tPmNvbXB1dGVkU3R5bGUoKS0+d2lkdGgoKS52YWx1
ZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotTGF5b3V0
VW5pdCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNvbXB1dGVDb250cm9sSGVpZ2h0KExh
eW91dFVuaXQgbGluZUhlaWdodCwgTGF5b3V0VW5pdCBub25Db250ZW50SGVpZ2h0KSBjb25zdAor
TGF5b3V0VW5pdCBSZW5kZXJTZWFyY2hGaWVsZDo6Y29tcHV0ZUNvbnRyb2xIZWlnaHQoTGF5b3V0
VW5pdCBsaW5lSGVpZ2h0LCBMYXlvdXRVbml0IG5vbkNvbnRlbnRIZWlnaHQpIGNvbnN0CiB7CiAg
ICAgSFRNTEVsZW1lbnQqIHJlc3VsdHNCdXR0b24gPSByZXN1bHRzQnV0dG9uRWxlbWVudCgpOwog
ICAgIGlmIChSZW5kZXJCb3gqIHJlc3VsdHNSZW5kZXJlciA9IHJlc3VsdHNCdXR0b24gPyByZXN1
bHRzQnV0dG9uLT5yZW5kZXJCb3goKSA6IDApIHsKQEAgLTQ0Nyw5ICsxNjUsOSBAQCBMYXlvdXRV
bml0IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y29tcHV0ZUNvbnRyb2xIZWlnaHQoTGF5
b3V0VW5pdCBsaW5lSGVpZwogICAgIHJldHVybiBsaW5lSGVpZ2h0ICsgbm9uQ29udGVudEhlaWdo
dDsKIH0KIAotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnVwZGF0ZUZyb21FbGVt
ZW50KCkKK3ZvaWQgUmVuZGVyU2VhcmNoRmllbGQ6OnVwZGF0ZUZyb21FbGVtZW50KCkKIHsKLSAg
ICBSZW5kZXJUZXh0Q29udHJvbDo6dXBkYXRlRnJvbUVsZW1lbnQoKTsKKyAgICBSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmU6OnVwZGF0ZUZyb21FbGVtZW50KCk7CiAKICAgICBpZiAoY2FuY2Vs
QnV0dG9uRWxlbWVudCgpKQogICAgICAgICB1cGRhdGVDYW5jZWxCdXR0b25WaXNpYmlsaXR5KCk7
CkBAIC00NTgsNDUgKzE3Niw3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp1
cGRhdGVGcm9tRWxlbWVudCgpCiAgICAgICAgIG1fc2VhcmNoUG9wdXAtPnBvcHVwTWVudSgpLT51
cGRhdGVGcm9tRWxlbWVudCgpOwogfQogCi1QYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZUlubmVyVGV4dFN0eWxlKGNvbnN0IFJlbmRlclN0
eWxlKiBzdGFydFN0eWxlKSBjb25zdAotewotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gdGV4dEJs
b2NrU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7ICAgCi0gICAgdGV4dEJsb2NrU3R5bGUt
PmluaGVyaXRGcm9tKHN0YXJ0U3R5bGUpOwotICAgIGFkanVzdElubmVyVGV4dFN0eWxlKHN0YXJ0
U3R5bGUsIHRleHRCbG9ja1N0eWxlLmdldCgpKTsKLQotICAgIHRleHRCbG9ja1N0eWxlLT5zZXRX
aGl0ZVNwYWNlKFBSRSk7Ci0gICAgdGV4dEJsb2NrU3R5bGUtPnNldFdvcmRXcmFwKE5vcm1hbFdv
cmRXcmFwKTsKLSAgICB0ZXh0QmxvY2tTdHlsZS0+c2V0T3ZlcmZsb3dYKE9ISURERU4pOwotICAg
IHRleHRCbG9ja1N0eWxlLT5zZXRPdmVyZmxvd1koT0hJRERFTik7Ci0gICAgdGV4dEJsb2NrU3R5
bGUtPnNldFRleHRPdmVyZmxvdyh0ZXh0U2hvdWxkQmVUcnVuY2F0ZWQoKSA/IFRleHRPdmVyZmxv
d0VsbGlwc2lzIDogVGV4dE92ZXJmbG93Q2xpcCk7Ci0KLSAgICBpZiAobV9kZXNpcmVkSW5uZXJU
ZXh0SGVpZ2h0ID49IDApCi0gICAgICAgIHRleHRCbG9ja1N0eWxlLT5zZXRIZWlnaHQoTGVuZ3Ro
KG1fZGVzaXJlZElubmVyVGV4dEhlaWdodCwgRml4ZWQpKTsKLSAgICAvLyBEbyBub3QgYWxsb3cg
bGluZS1oZWlnaHQgdG8gYmUgc21hbGxlciB0aGFuIG91ciBkZWZhdWx0LgotICAgIGlmICh0ZXh0
QmxvY2tTdHlsZS0+Zm9udE1ldHJpY3MoKS5saW5lU3BhY2luZygpID4gbGluZUhlaWdodCh0cnVl
LCBIb3Jpem9udGFsTGluZSwgUG9zaXRpb25PZkludGVyaW9yTGluZUJveGVzKSkKLSAgICAgICAg
dGV4dEJsb2NrU3R5bGUtPnNldExpbmVIZWlnaHQoTGVuZ3RoKC0xMDAuMGYsIFBlcmNlbnQpKTsK
LQotICAgIHRleHRCbG9ja1N0eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsKLQotICAgIHJldHVybiB0
ZXh0QmxvY2tTdHlsZS5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y3JlYXRlSW5uZXJCbG9ja1N0eWxlKGNvbnN0IFJl
bmRlclN0eWxlKiBzdGFydFN0eWxlKSBjb25zdAotewotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4g
aW5uZXJCbG9ja1N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwotICAgIGlubmVyQmxvY2tT
dHlsZS0+aW5oZXJpdEZyb20oc3RhcnRTdHlsZSk7Ci0KLSAgICBpbm5lckJsb2NrU3R5bGUtPnNl
dEJveEZsZXgoMSk7Ci0gICAgaW5uZXJCbG9ja1N0eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsKLSAg
ICBpbm5lckJsb2NrU3R5bGUtPnNldERpcmVjdGlvbihMVFIpOwotCi0gICAgLy8gV2UgZG9uJ3Qg
d2FudCB0aGUgc2hhZG93IGRvbSB0byBiZSBlZGl0YWJsZSwgc28gd2Ugc2V0IHRoaXMgYmxvY2sg
dG8gcmVhZC1vbmx5IGluIGNhc2UgdGhlIGlucHV0IGl0c2VsZiBpcyBlZGl0YWJsZS4KLSAgICBp
bm5lckJsb2NrU3R5bGUtPnNldFVzZXJNb2RpZnkoUkVBRF9PTkxZKTsKLQotICAgIHJldHVybiBp
bm5lckJsb2NrU3R5bGUucmVsZWFzZSgpOwotfQotCi12b2lkIFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6dXBkYXRlQ2FuY2VsQnV0dG9uVmlzaWJpbGl0eSgpIGNvbnN0Cit2b2lkIFJlbmRl
clNlYXJjaEZpZWxkOjp1cGRhdGVDYW5jZWxCdXR0b25WaXNpYmlsaXR5KCkgY29uc3QKIHsKICAg
ICBSZW5kZXJPYmplY3QqIGNhbmNlbEJ1dHRvblJlbmRlcmVyID0gY2FuY2VsQnV0dG9uRWxlbWVu
dCgpLT5yZW5kZXJlcigpOwogICAgIGlmICghY2FuY2VsQnV0dG9uUmVuZGVyZXIpCkBAIC01MTIs
MjQgKzE5MiwxOCBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6dXBkYXRlQ2Fu
Y2VsQnV0dG9uVmlzaWJpbGl0eSgpIGNvbnN0CiAgICAgY2FuY2VsQnV0dG9uUmVuZGVyZXItPnNl
dFN0eWxlKGNhbmNlbEJ1dHRvblN0eWxlKTsKIH0KIAotRVZpc2liaWxpdHkgUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lOjp2aXNpYmlsaXR5Rm9yQ2FuY2VsQnV0dG9uKCkgY29uc3QKK0VWaXNp
YmlsaXR5IFJlbmRlclNlYXJjaEZpZWxkOjp2aXNpYmlsaXR5Rm9yQ2FuY2VsQnV0dG9uKCkgY29u
c3QKIHsKICAgICByZXR1cm4gKHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBISURERU4gfHwgaW5w
dXRFbGVtZW50KCktPnZhbHVlKCkuaXNFbXB0eSgpKSA/IEhJRERFTiA6IFZJU0lCTEU7CiB9CiAK
LWJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp0ZXh0U2hvdWxkQmVUcnVuY2F0ZWQo
KSBjb25zdAotewotICAgIHJldHVybiBkb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpICE9IG5vZGUo
KQotICAgICAgICAmJiBzdHlsZSgpLT50ZXh0T3ZlcmZsb3coKSA9PSBUZXh0T3ZlcmZsb3dFbGxp
cHNpczsKLX0KLQotY29uc3QgQXRvbWljU3RyaW5nJiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmU6OmF1dG9zYXZlTmFtZSgpIGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIFJlbmRlclNlYXJj
aEZpZWxkOjphdXRvc2F2ZU5hbWUoKSBjb25zdAogewogICAgIHJldHVybiBzdGF0aWNfY2FzdDxF
bGVtZW50Kj4obm9kZSgpKS0+Z2V0QXR0cmlidXRlKGF1dG9zYXZlQXR0cik7CiB9CiAKIC8vIFBv
cHVwTWVudUNsaWVudCBtZXRob2RzCi12b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6
dmFsdWVDaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCwgYm9vbCBmaXJlRXZlbnRzKQordm9pZCBS
ZW5kZXJTZWFyY2hGaWVsZDo6dmFsdWVDaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCwgYm9vbCBm
aXJlRXZlbnRzKQogewogICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KGxpc3RJbmRleCkgPCBs
aXN0U2l6ZSgpKTsKICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IGlucHV0RWxlbWVudCgp
OwpAQCAtNTUxLDcgKzIyNSw3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp2
YWx1ZUNoYW5nZWQodW5zaWduZWQgbGlzdEluZGV4LCBib29sIGZpcmVFdmVuCiAgICAgfQogfQog
Ci1TdHJpbmcgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppdGVtVGV4dCh1bnNpZ25lZCBs
aXN0SW5kZXgpIGNvbnN0CitTdHJpbmcgUmVuZGVyU2VhcmNoRmllbGQ6Oml0ZW1UZXh0KHVuc2ln
bmVkIGxpc3RJbmRleCkgY29uc3QKIHsKICAgICBpbnQgc2l6ZSA9IGxpc3RTaXplKCk7CiAgICAg
aWYgKHNpemUgPT0gMSkgewpAQCAtNTY3LDQyICsyNDEsNDIgQEAgU3RyaW5nIFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6aXRlbVRleHQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAogICAg
IHJldHVybiBtX3JlY2VudFNlYXJjaGVzW2xpc3RJbmRleCAtIDFdOwogfQogCi1TdHJpbmcgUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppdGVtTGFiZWwodW5zaWduZWQpIGNvbnN0CitTdHJp
bmcgUmVuZGVyU2VhcmNoRmllbGQ6Oml0ZW1MYWJlbCh1bnNpZ25lZCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gU3RyaW5nKCk7CiB9CiAKLVN0cmluZyBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6
Oml0ZW1JY29uKHVuc2lnbmVkKSBjb25zdAorU3RyaW5nIFJlbmRlclNlYXJjaEZpZWxkOjppdGVt
SWNvbih1bnNpZ25lZCkgY29uc3QKIHsKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLWJvb2wg
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppdGVtSXNFbmFibGVkKHVuc2lnbmVkIGxpc3RJ
bmRleCkgY29uc3QKK2Jvb2wgUmVuZGVyU2VhcmNoRmllbGQ6Oml0ZW1Jc0VuYWJsZWQodW5zaWdu
ZWQgbGlzdEluZGV4KSBjb25zdAogewogICAgICBpZiAoIWxpc3RJbmRleCB8fCBpdGVtSXNTZXBh
cmF0b3IobGlzdEluZGV4KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0cnVl
OwogfQogCi1Qb3B1cE1lbnVTdHlsZSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Oml0ZW1T
dHlsZSh1bnNpZ25lZCkgY29uc3QKK1BvcHVwTWVudVN0eWxlIFJlbmRlclNlYXJjaEZpZWxkOjpp
dGVtU3R5bGUodW5zaWduZWQpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1lbnVTdHlsZSgpOwogfQog
Ci1Qb3B1cE1lbnVTdHlsZSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Om1lbnVTdHlsZSgp
IGNvbnN0CitQb3B1cE1lbnVTdHlsZSBSZW5kZXJTZWFyY2hGaWVsZDo6bWVudVN0eWxlKCkgY29u
c3QKIHsKICAgICByZXR1cm4gUG9wdXBNZW51U3R5bGUoc3R5bGUoKS0+dmlzaXRlZERlcGVuZGVu
dENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBzdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3Io
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLCBzdHlsZSgpLT5mb250KCksIHN0eWxlKCktPnZp
c2liaWxpdHkoKSA9PSBWSVNJQkxFLAogICAgICAgICBzdHlsZSgpLT5kaXNwbGF5KCkgPT0gTk9O
RSwgc3R5bGUoKS0+dGV4dEluZGVudCgpLCBzdHlsZSgpLT5kaXJlY3Rpb24oKSwgaXNPdmVycmlk
ZShzdHlsZSgpLT51bmljb2RlQmlkaSgpKSk7CiB9CiAKLWludCBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6OmNsaWVudEluc2V0TGVmdCgpIGNvbnN0CitpbnQgUmVuZGVyU2VhcmNoRmllbGQ6
OmNsaWVudEluc2V0TGVmdCgpIGNvbnN0CiB7CiAgICAgLy8gSW5zZXQgdGhlIG1lbnUgYnkgdGhl
IHJhZGl1cyBvZiB0aGUgY2FwIG9uIHRoZSBsZWZ0IHNvIHRoYXQKICAgICAvLyBpdCBvbmx5IHJ1
bnMgYWxvbmcgdGhlIHN0cmFpZ2h0IHBhcnQgb2YgdGhlIGJlemVsLgogICAgIHJldHVybiBoZWln
aHQoKSAvIDI7CiB9CiAKLWludCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNsaWVudElu
c2V0UmlnaHQoKSBjb25zdAoraW50IFJlbmRlclNlYXJjaEZpZWxkOjpjbGllbnRJbnNldFJpZ2h0
KCkgY29uc3QKIHsKICAgICAvLyBJbnNldCB0aGUgbWVudSBieSB0aGUgcmFkaXVzIG9mIHRoZSBj
YXAgb24gdGhlIHJpZ2h0IHNvIHRoYXQKICAgICAvLyBpdCBvbmx5IHJ1bnMgYWxvbmcgdGhlIHN0
cmFpZ2h0IHBhcnQgb2YgdGhlIGJlemVsICh1bmxlc3MgaXQgbmVlZHMKQEAgLTYxMCw3ICsyODQs
NyBAQCBpbnQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjbGllbnRJbnNldFJpZ2h0KCkg
Y29uc3QKICAgICByZXR1cm4gaGVpZ2h0KCkgLyAyOwogfQogCi1MYXlvdXRVbml0IFJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZTo6Y2xpZW50UGFkZGluZ0xlZnQoKSBjb25zdAorTGF5b3V0VW5p
dCBSZW5kZXJTZWFyY2hGaWVsZDo6Y2xpZW50UGFkZGluZ0xlZnQoKSBjb25zdAogewogICAgIExh
eW91dFVuaXQgcGFkZGluZyA9IHBhZGRpbmdMZWZ0KCk7CiAgICAgaWYgKFJlbmRlckJveCogYm94
ID0gaW5uZXJCbG9ja0VsZW1lbnQoKSA/IGlubmVyQmxvY2tFbGVtZW50KCktPnJlbmRlckJveCgp
IDogMCkKQEAgLTYxOCw3ICsyOTIsNyBAQCBMYXlvdXRVbml0IFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6Y2xpZW50UGFkZGluZ0xlZnQoKSBjb25zdAogICAgIHJldHVybiBwYWRkaW5nOwog
fQogCi1MYXlvdXRVbml0IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y2xpZW50UGFkZGlu
Z1JpZ2h0KCkgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyU2VhcmNoRmllbGQ6OmNsaWVudFBhZGRp
bmdSaWdodCgpIGNvbnN0CiB7CiAgICAgTGF5b3V0VW5pdCBwYWRkaW5nID0gcGFkZGluZ1JpZ2h0
KCk7CiAgICAgaWYgKFJlbmRlckJveCogY29udGFpbmVyQm94ID0gY29udGFpbmVyRWxlbWVudCgp
ID8gY29udGFpbmVyRWxlbWVudCgpLT5yZW5kZXJCb3goKSA6IDApIHsKQEAgLTYyOCw3ICszMDIs
NyBAQCBMYXlvdXRVbml0IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y2xpZW50UGFkZGlu
Z1JpZ2h0KCkgY29uc3QKICAgICByZXR1cm4gcGFkZGluZzsKIH0KIAotaW50IFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6bGlzdFNpemUoKSBjb25zdAoraW50IFJlbmRlclNlYXJjaEZpZWxk
OjpsaXN0U2l6ZSgpIGNvbnN0CiB7CiAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIHJlY2VudCBzZWFy
Y2hlcywgdGhlbiBvdXIgbWVudSB3aWxsIGhhdmUgMSAiTm8gcmVjZW50IHNlYXJjaGVzIiBpdGVt
LgogICAgIGlmICghbV9yZWNlbnRTZWFyY2hlcy5zaXplKCkpCkBAIC02MzcsMTExICszMTEsNDgg
QEAgaW50IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGlzdFNpemUoKSBjb25zdAogICAg
IHJldHVybiBtX3JlY2VudFNlYXJjaGVzLnNpemUoKSArIDM7CiB9CiAKLWludCBSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmU6OnNlbGVjdGVkSW5kZXgoKSBjb25zdAoraW50IFJlbmRlclNlYXJj
aEZpZWxkOjpzZWxlY3RlZEluZGV4KCkgY29uc3QKIHsKICAgICByZXR1cm4gLTE7CiB9CiAKLXZv
aWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpwb3B1cERpZEhpZGUoKQordm9pZCBSZW5k
ZXJTZWFyY2hGaWVsZDo6cG9wdXBEaWRIaWRlKCkKIHsKICAgICBtX3NlYXJjaFBvcHVwSXNWaXNp
YmxlID0gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppdGVt
SXNTZXBhcmF0b3IodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAorYm9vbCBSZW5kZXJTZWFyY2hG
aWVsZDo6aXRlbUlzU2VwYXJhdG9yKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKIHsKICAgICAv
LyBUaGUgc2VwYXJhdG9yIHdpbGwgYmUgdGhlIHNlY29uZCB0byBsYXN0IGl0ZW0gaW4gb3VyIGxp
c3QuCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obGlzdEluZGV4KSA9PSAobGlzdFNpemUo
KSAtIDIpOwogfQogCi1ib29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aXRlbUlzTGFi
ZWwodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAorYm9vbCBSZW5kZXJTZWFyY2hGaWVsZDo6aXRl
bUlzTGFiZWwodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAogewotICAgIHJldHVybiBsaXN0SW5k
ZXggPT0gMDsKKyAgICByZXR1cm4gIWxpc3RJbmRleDsKIH0KIAotYm9vbCBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6Oml0ZW1Jc1NlbGVjdGVkKHVuc2lnbmVkKSBjb25zdAorYm9vbCBSZW5k
ZXJTZWFyY2hGaWVsZDo6aXRlbUlzU2VsZWN0ZWQodW5zaWduZWQpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2V0VGV4
dEZyb21JdGVtKHVuc2lnbmVkIGxpc3RJbmRleCkKK3ZvaWQgUmVuZGVyU2VhcmNoRmllbGQ6OnNl
dFRleHRGcm9tSXRlbSh1bnNpZ25lZCBsaXN0SW5kZXgpCiB7CiAgICAgaW5wdXRFbGVtZW50KCkt
PnNldFZhbHVlKGl0ZW1UZXh0KGxpc3RJbmRleCkpOwogfQogCi1Gb250U2VsZWN0b3IqIFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZTo6Zm9udFNlbGVjdG9yKCkgY29uc3QKK0ZvbnRTZWxlY3Rv
ciogUmVuZGVyU2VhcmNoRmllbGQ6OmZvbnRTZWxlY3RvcigpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IGRvY3VtZW50KCktPnN0eWxlUmVzb2x2ZXIoKS0+Zm9udFNlbGVjdG9yKCk7CiB9CiAKLUhvc3RX
aW5kb3cqIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aG9zdFdpbmRvdygpIGNvbnN0CitI
b3N0V2luZG93KiBSZW5kZXJTZWFyY2hGaWVsZDo6aG9zdFdpbmRvdygpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIGRvY3VtZW50KCktPnZpZXcoKS0+aG9zdFdpbmRvdygpOwogfQogCi12b2lkIFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZTo6YXV0b3Njcm9sbCgpCi17Ci0gICAgUmVuZGVyTGF5ZXIq
IGxheWVyID0gaW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJCb3goKS0+bGF5ZXIoKTsKLSAgICBp
ZiAobGF5ZXIpCi0gICAgICAgIGxheWVyLT5hdXRvc2Nyb2xsKCk7Ci19Ci0KLWludCBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNjcm9sbFdpZHRoKCkgY29uc3QKLXsKLSAgICBpZiAoaW5u
ZXJUZXh0RWxlbWVudCgpKQotICAgICAgICByZXR1cm4gaW5uZXJUZXh0RWxlbWVudCgpLT5zY3Jv
bGxXaWR0aCgpOwotICAgIHJldHVybiBSZW5kZXJCbG9jazo6c2Nyb2xsV2lkdGgoKTsKLX0KLQot
aW50IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QKLXsK
LSAgICBpZiAoaW5uZXJUZXh0RWxlbWVudCgpKQotICAgICAgICByZXR1cm4gaW5uZXJUZXh0RWxl
bWVudCgpLT5zY3JvbGxIZWlnaHQoKTsKLSAgICByZXR1cm4gUmVuZGVyQmxvY2s6OnNjcm9sbEhl
aWdodCgpOwotfQotCi1pbnQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzY3JvbGxMZWZ0
KCkgY29uc3QKLXsKLSAgICBpZiAoaW5uZXJUZXh0RWxlbWVudCgpKQotICAgICAgICByZXR1cm4g
aW5uZXJUZXh0RWxlbWVudCgpLT5zY3JvbGxMZWZ0KCk7Ci0gICAgcmV0dXJuIFJlbmRlckJsb2Nr
OjpzY3JvbGxMZWZ0KCk7Ci19Ci0KLWludCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNj
cm9sbFRvcCgpIGNvbnN0Ci17Ci0gICAgaWYgKGlubmVyVGV4dEVsZW1lbnQoKSkKLSAgICAgICAg
cmV0dXJuIGlubmVyVGV4dEVsZW1lbnQoKS0+c2Nyb2xsVG9wKCk7Ci0gICAgcmV0dXJuIFJlbmRl
ckJsb2NrOjpzY3JvbGxUb3AoKTsKLX0KLQotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmU6OnNldFNjcm9sbExlZnQoaW50IG5ld0xlZnQpCi17Ci0gICAgaWYgKGlubmVyVGV4dEVsZW1l
bnQoKSkKLSAgICAgICAgaW5uZXJUZXh0RWxlbWVudCgpLT5zZXRTY3JvbGxMZWZ0KG5ld0xlZnQp
OwotfQotCi12b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2V0U2Nyb2xsVG9wKGlu
dCBuZXdUb3ApCi17Ci0gICAgaWYgKGlubmVyVGV4dEVsZW1lbnQoKSkKLSAgICAgICAgaW5uZXJU
ZXh0RWxlbWVudCgpLT5zZXRTY3JvbGxUb3AobmV3VG9wKTsKLX0KLQotYm9vbCBSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmU6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3Jv
bGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwgTm9kZSoqIHN0b3BO
b2RlKQotewotICAgIFJlbmRlckxheWVyKiBsYXllciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVu
ZGVyQm94KCktPmxheWVyKCk7Ci0gICAgaWYgKGxheWVyICYmIGxheWVyLT5zY3JvbGwoZGlyZWN0
aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IHJldHVybiBSZW5kZXJCbG9jazo6c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRp
cGxpZXIsIHN0b3BOb2RlKTsKLX0KLQotYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6
OmxvZ2ljYWxTY3JvbGwoU2Nyb2xsTG9naWNhbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdy
YW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyLCBOb2RlKiogc3RvcE5vZGUp
Ci17Ci0gICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gaW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJC
b3goKS0+bGF5ZXIoKTsKLSAgICBpZiAobGF5ZXIgJiYgbGF5ZXItPnNjcm9sbChsb2dpY2FsVG9Q
aHlzaWNhbChkaXJlY3Rpb24sIHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0
eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpLCBncmFudWxhcml0eSwgbXVsdGlw
bGllcikpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBSZW5kZXJCbG9jazo6bG9n
aWNhbFNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyLCBzdG9wTm9kZSk7
Ci19Ci0KLVBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6
OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEsIFNjcm9sbGJh
ck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6
ZSkKK1Bhc3NSZWZQdHI8U2Nyb2xsYmFyPiBSZW5kZXJTZWFyY2hGaWVsZDo6Y3JlYXRlU2Nyb2xs
YmFyKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSwgU2Nyb2xsYmFyT3JpZW50YXRpb24g
b3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplIGNvbnRyb2xTaXplKQogewogICAgIFJl
ZlB0cjxTY3JvbGxiYXI+IHdpZGdldDsKICAgICBib29sIGhhc0N1c3RvbVNjcm9sbGJhclN0eWxl
ID0gc3R5bGUoKS0+aGFzUHNldWRvU3R5bGUoU0NST0xMQkFSKTsKQEAgLTc1Miw5ICszNjMsMjMg
QEAgUGFzc1JlZlB0cjxTY3JvbGxiYXI+IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y3Jl
YXRlU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmUKICAgICByZXR1cm4gd2lkZ2V0LnJlbGVhc2UoKTsK
IH0KIAotSFRNTElucHV0RWxlbWVudCogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppbnB1
dEVsZW1lbnQoKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJTZWFyY2hGaWVsZDo6Y29tcHV0ZUhl
aWdodExpbWl0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGVpZ2h0KCk7Cit9CisKK3ZvaWQgUmVu
ZGVyU2VhcmNoRmllbGQ6OmNlbnRlckNvbnRhaW5lcklmTmVlZGVkKFJlbmRlckJveCogY29udGFp
bmVyUmVuZGVyZXIpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG5vZGUoKS0+dG9JbnB1dEVsZW1lbnQo
KTsKKyAgICBpZiAoIWNvbnRhaW5lclJlbmRlcmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAoY29udGFpbmVyUmVuZGVyZXItPmhlaWdodCgpIDw9IGNvbnRlbnRIZWlnaHQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gQSBxdWlyayBmb3IgZmluZC1pbi1wYWdlIGJveCBvbiBTYWZh
cmkgV2luZG93cy4KKyAgICAvLyBodHRwOi8vd2Via2l0Lm9yZy9iLzYzMTU3CisgICAgTGF5b3V0
VW5pdCBoZWlnaHREaWZmID0gY29udGFpbmVyUmVuZGVyZXItPmhlaWdodCgpIC0gY29udGVudEhl
aWdodCgpOworICAgIGNvbnRhaW5lclJlbmRlcmVyLT5zZXRZKGNvbnRhaW5lclJlbmRlcmVyLT55
KCkgLSAoaGVpZ2h0RGlmZiAvIDIgKyBsYXlvdXRNb2QoaGVpZ2h0RGlmZiwgMikpKTsKIH0KIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxk
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuaAppbmRleCA2
ZTIxYzg1NmMxMGZhOWZiYTQzNmMwNmY3NDljMTRlMWUyYTgwYmE2Li45NjczMzVkMzQ1NTYzOTNh
NTQzMzBlZDQ4ZTM2MzU2N2RmYTJkYzg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU2VhcmNoRmllbGQuaApAQCAtMjAsMjQgKzIwLDIyIEBACiAgKgogICovCiAKLSNpZm5k
ZWYgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lX2gKLSNkZWZpbmUgUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lX2gKKyNpZm5kZWYgUmVuZGVyU2VhcmNoRmllbGRfaAorI2RlZmluZSBSZW5k
ZXJTZWFyY2hGaWVsZF9oCiAKICNpbmNsdWRlICJQb3B1cE1lbnVDbGllbnQuaCIKLSNpbmNsdWRl
ICJSZW5kZXJUZXh0Q29udHJvbC5oIgorI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxJbnB1dEVsZW1lbnQ7
CiBjbGFzcyBTZWFyY2hQb3B1cE1lbnU7CiAKLWNsYXNzIFJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZSA6IHB1YmxpYyBSZW5kZXJUZXh0Q29udHJvbCwgcHJpdmF0ZSBQb3B1cE1lbnVDbGllbnQg
eworY2xhc3MgUmVuZGVyU2VhcmNoRmllbGQgOiBwdWJsaWMgUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lLCBwcml2YXRlIFBvcHVwTWVudUNsaWVudCB7CiBwdWJsaWM6Ci0gICAgUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lKE5vZGUqKTsKLSAgICB2aXJ0dWFsIH5SZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmUoKTsKLSAgICAvLyBGSVhNRTogTW92ZSBjcmVhdGUqU3R5bGUoKSB0byB0aGVp
ciBjbGFzc2VzLgotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gY3JlYXRlSW5u
ZXJUZXh0U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUpIGNvbnN0OwotICAgIFBh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+IGNyZWF0ZUlubmVyQmxvY2tTdHlsZShjb25zdCBSZW5kZXJT
dHlsZSogc3RhcnRTdHlsZSkgY29uc3Q7CisgICAgUmVuZGVyU2VhcmNoRmllbGQoTm9kZSopOwor
ICAgIHZpcnR1YWwgflJlbmRlclNlYXJjaEZpZWxkKCk7CisKICAgICB2b2lkIHVwZGF0ZUNhbmNl
bEJ1dHRvblZpc2liaWxpdHkoKSBjb25zdDsKIAogICAgIHZvaWQgYWRkU2VhcmNoUmVzdWx0KCk7
CkBAIC00Nyw0MiArNDUsMTIgQEAgcHVibGljOgogICAgIHZvaWQgc2hvd1BvcHVwKCk7CiAgICAg
dm9pZCBoaWRlUG9wdXAoKTsKIAotICAgIHZvaWQgY2Fwc0xvY2tTdGF0ZU1heUhhdmVDaGFuZ2Vk
KCk7Ci0KIHByaXZhdGU6Ci0gICAgdmlydHVhbCBib29sIGhhc0NvbnRyb2xDbGlwKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBMYXlvdXRSZWN0IGNvbnRyb2xDbGlwUmVjdChjb25zdCBMYXlvdXRQb2lu
dCYpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc1RleHRGaWVsZCgpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlv
dXRQb2ludCYpOwotICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKLQotICAgIHZpcnR1YWwgYm9v
bCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25z
dCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3Vt
dWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhdXRvc2Ny
b2xsKCk7Ci0KLSAgICAvLyBTdWJjbGFzc2VkIHRvIGZvcndhcmQgdG8gb3VyIGlubmVyIGRpdi4K
LSAgICB2aXJ0dWFsIGludCBzY3JvbGxMZWZ0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgc2Ny
b2xsVG9wKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgc2Nyb2xsV2lkdGgoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIGludCBzY3JvbGxIZWlnaHQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0
U2Nyb2xsTGVmdChpbnQpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxUb3AoaW50KTsKLSAg
ICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHks
IGZsb2F0IG11bHRpcGxpZXIgPSAxLCBOb2RlKiogc3RvcE5vZGUgPSAwKTsKLSAgICB2aXJ0dWFs
IGJvb2wgbG9naWNhbFNjcm9sbChTY3JvbGxMb2dpY2FsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxh
cml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEsIE5vZGUqKiBzdG9wTm9kZSA9IDApOwotCi0gICAg
aW50IHRleHRCbG9ja1dpZHRoKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBmbG9hdCBnZXRBdmdDaGFy
V2lkdGgoQXRvbWljU3RyaW5nIGZhbWlseSk7Ci0gICAgdmlydHVhbCBMYXlvdXRVbml0IHByZWZl
cnJlZENvbnRlbnRXaWR0aChmbG9hdCBjaGFyV2lkdGgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9p
ZCBjZW50ZXJDb250YWluZXJJZk5lZWRlZChSZW5kZXJCb3gqKSBjb25zdCBPVkVSUklERTsKICAg
ICB2aXJ0dWFsIExheW91dFVuaXQgY29tcHV0ZUNvbnRyb2xIZWlnaHQoTGF5b3V0VW5pdCBsaW5l
SGVpZ2h0LCBMYXlvdXRVbml0IG5vbkNvbnRlbnRIZWlnaHQpIGNvbnN0IE9WRVJSSURFOwotICAg
IAotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpOwotICAgIHZpcnR1YWwgdm9p
ZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRT
dHlsZSk7Ci0KLSAgICB2aXJ0dWFsIFJlbmRlclN0eWxlKiB0ZXh0QmFzZVN0eWxlKCkgY29uc3Q7
Ci0KKyAgICB2aXJ0dWFsIExheW91dFVuaXQgY29tcHV0ZUhlaWdodExpbWl0KCkgY29uc3QgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZyb21FbGVtZW50KCkgT1ZFUlJJREU7CiAg
ICAgRVZpc2liaWxpdHkgdmlzaWJpbGl0eUZvckNhbmNlbEJ1dHRvbigpIGNvbnN0OwotICAgIGJv
b2wgdGV4dFNob3VsZEJlVHJ1bmNhdGVkKCkgY29uc3Q7CiAgICAgY29uc3QgQXRvbWljU3RyaW5n
JiBhdXRvc2F2ZU5hbWUoKSBjb25zdDsKIAogICAgIC8vIFBvcHVwTWVudUNsaWVudCBtZXRob2Rz
CkBAIC0xMTQsNDIgKzgyLDIyIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBIb3N0V2luZG93KiBo
b3N0V2luZG93KCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNjcm9s
bGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhKiwgU2Nyb2xsYmFyT3JpZW50YXRp
b24sIFNjcm9sbGJhckNvbnRyb2xTaXplKSBPVkVSUklERTsKIAotICAgIEhUTUxJbnB1dEVsZW1l
bnQqIGlucHV0RWxlbWVudCgpIGNvbnN0OwotCi0gICAgSFRNTEVsZW1lbnQqIGNvbnRhaW5lckVs
ZW1lbnQoKSBjb25zdDsKLSAgICBIVE1MRWxlbWVudCogaW5uZXJCbG9ja0VsZW1lbnQoKSBjb25z
dDsKLSAgICBIVE1MRWxlbWVudCogaW5uZXJTcGluQnV0dG9uRWxlbWVudCgpIGNvbnN0OwogICAg
IEhUTUxFbGVtZW50KiByZXN1bHRzQnV0dG9uRWxlbWVudCgpIGNvbnN0OwogICAgIEhUTUxFbGVt
ZW50KiBjYW5jZWxCdXR0b25FbGVtZW50KCkgY29uc3Q7CiAKICAgICBib29sIG1fc2VhcmNoUG9w
dXBJc1Zpc2libGU7Ci0gICAgYm9vbCBtX3Nob3VsZERyYXdDYXBzTG9ja0luZGljYXRvcjsKLSAg
ICBMYXlvdXRVbml0IG1fZGVzaXJlZElubmVyVGV4dEhlaWdodDsKICAgICBSZWZQdHI8U2VhcmNo
UG9wdXBNZW51PiBtX3NlYXJjaFBvcHVwOwogICAgIFZlY3RvcjxTdHJpbmc+IG1fcmVjZW50U2Vh
cmNoZXM7CiB9OwogCi1pbmxpbmUgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKiB0b1JlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZShSZW5kZXJPYmplY3QqIG9iamVjdCkKK2lubGluZSBSZW5k
ZXJTZWFyY2hGaWVsZCogdG9SZW5kZXJTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqIG9iamVjdCkK
IHsKICAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzVGV4dEZpZWxkKCkpOwotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUqPihvYmplY3QpOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJTZWFyY2hGaWVsZCo+KG9iamVjdCk7CiB9CiAK
IC8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KLXZv
aWQgdG9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUoY29uc3QgUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lKik7Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3Mg
UmVuZGVyVGV4dENvbnRyb2xJbm5lckJsb2NrIDogcHVibGljIFJlbmRlckJsb2NrIHsKLXB1Ymxp
YzoKLSAgICBSZW5kZXJUZXh0Q29udHJvbElubmVyQmxvY2soTm9kZSogbm9kZSwgYm9vbCBpc011
bHRpTGluZSkgOiBSZW5kZXJCbG9jayhub2RlKSwgbV9tdWx0aUxpbmUoaXNNdWx0aUxpbmUpIHsg
fQotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgYm9vbCBoYXNMaW5lSWZFbXB0eSgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBv
aW50KGNvbnN0IExheW91dFBvaW50Jik7Ci0KLSAgICBib29sIG1fbXVsdGlMaW5lOwotfTsKK3Zv
aWQgdG9SZW5kZXJTZWFyY2hGaWVsZChjb25zdCBSZW5kZXJTZWFyY2hGaWVsZCopOwogCiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZS5jcHAKaW5kZXggODQ4ZmMyMTE5N2MyYTdkMjRmMjY0OGRmNzAyMDUyOWYzYzg4
MGQzYi4uMzFmMWYyODM3ZGJhNGFkNjk1YWI4OTAwMTU3OWYzNzdmMDNjZTU4YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZS5jcHAKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUg
IkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiSFRN
TElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhpdFRl
c3RSZXN1bHQuaCIKICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCkBAIC0zOSw3ICszOCw2
IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIu
aCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgotI2luY2x1ZGUgIlNlYXJjaFBvcHVwTWVudS5o
IgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNp
bmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCkBAIC03MCwxMCArNjgsOCBAQCBWaXNpYmxlUG9zaXRp
b24gUmVuZGVyVGV4dENvbnRyb2xJbm5lckJsb2NrOjpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExh
eW91dFBvaW50JgogCiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OlJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZShOb2RlKiBub2RlKQogICAgIDogUmVuZGVyVGV4dENvbnRyb2wobm9kZSkK
LSAgICAsIG1fc2VhcmNoUG9wdXBJc1Zpc2libGUoZmFsc2UpCiAgICAgLCBtX3Nob3VsZERyYXdD
YXBzTG9ja0luZGljYXRvcihmYWxzZSkKICAgICAsIG1fZGVzaXJlZElubmVyVGV4dEhlaWdodCgt
MSkKLSAgICAsIG1fc2VhcmNoUG9wdXAoMCkKIHsKICAgICBBU1NFUlQobm9kZS0+aXNIVE1MRWxl
bWVudCgpKTsKICAgICBBU1NFUlQobm9kZS0+dG9JbnB1dEVsZW1lbnQoKSk7CkBAIC04MSwyMCAr
NzcsNiBAQCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OlJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZShOb2RlKiBub2RlKQogCiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6On5SZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUoKQogewotICAgIGlmIChtX3NlYXJjaFBvcHVwKSB7Ci0g
ICAgICAgIG1fc2VhcmNoUG9wdXAtPnBvcHVwTWVudSgpLT5kaXNjb25uZWN0Q2xpZW50KCk7Ci0g
ICAgICAgIG1fc2VhcmNoUG9wdXAgPSAwOwotICAgIH0KLX0KLQotaW5saW5lIEhUTUxFbGVtZW50
KiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNvbnRhaW5lckVsZW1lbnQoKSBjb25zdAot
ewotICAgIHJldHVybiBpbnB1dEVsZW1lbnQoKS0+Y29udGFpbmVyRWxlbWVudCgpOwotfQotCi1p
bmxpbmUgSFRNTEVsZW1lbnQqIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aW5uZXJCbG9j
a0VsZW1lbnQoKSBjb25zdAotewotICAgIHJldHVybiBpbnB1dEVsZW1lbnQoKS0+aW5uZXJCbG9j
a0VsZW1lbnQoKTsKIH0KIAogaW5saW5lIEhUTUxFbGVtZW50KiBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6OmlubmVyU3BpbkJ1dHRvbkVsZW1lbnQoKSBjb25zdApAQCAtMTAyLDg4ICs4NCwx
MiBAQCBpbmxpbmUgSFRNTEVsZW1lbnQqIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aW5u
ZXJTcGluQnV0dG9uRWxlbWVudCgpIGNvbnN0CiAgICAgcmV0dXJuIGlucHV0RWxlbWVudCgpLT5p
bm5lclNwaW5CdXR0b25FbGVtZW50KCk7CiB9CiAKLWlubGluZSBIVE1MRWxlbWVudCogUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lOjpyZXN1bHRzQnV0dG9uRWxlbWVudCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGlucHV0RWxlbWVudCgpLT5yZXN1bHRzQnV0dG9uRWxlbWVudCgpOwotfQotCi1p
bmxpbmUgSFRNTEVsZW1lbnQqIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y2FuY2VsQnV0
dG9uRWxlbWVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlucHV0RWxlbWVudCgpLT5jYW5jZWxC
dXR0b25FbGVtZW50KCk7Ci19Ci0KIFJlbmRlclN0eWxlKiBSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmU6OnRleHRCYXNlU3R5bGUoKSBjb25zdAogewogICAgIEhUTUxFbGVtZW50KiBpbm5lckJs
b2NrID0gaW5uZXJCbG9ja0VsZW1lbnQoKTsKICAgICByZXR1cm4gaW5uZXJCbG9jayA/IGlubmVy
QmxvY2stPnJlbmRlcmVyKCktPnN0eWxlKCkgOiBzdHlsZSgpOwogfQogCi12b2lkIFJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZTo6YWRkU2VhcmNoUmVzdWx0KCkKLXsKLSAgICBIVE1MSW5wdXRF
bGVtZW50KiBpbnB1dCA9IGlucHV0RWxlbWVudCgpOwotICAgIGlmIChpbnB1dC0+bWF4UmVzdWx0
cygpIDw9IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIFN0cmluZyB2YWx1ZSA9IGlucHV0LT52
YWx1ZSgpOwotICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50KCktPnNldHRpbmdzKCk7Ci0gICAgaWYgKCFz
ZXR0aW5ncyB8fCBzZXR0aW5ncy0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpbnQgc2l6ZSA9IHN0YXRpY19jYXN0PGludD4obV9yZWNlbnRTZWFyY2hl
cy5zaXplKCkpOwotICAgIGZvciAoaW50IGkgPSBzaXplIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAg
ICAgICAgaWYgKG1fcmVjZW50U2VhcmNoZXNbaV0gPT0gdmFsdWUpCi0gICAgICAgICAgICBtX3Jl
Y2VudFNlYXJjaGVzLnJlbW92ZShpKTsKLSAgICB9Ci0KLSAgICBtX3JlY2VudFNlYXJjaGVzLmlu
c2VydCgwLCB2YWx1ZSk7Ci0gICAgd2hpbGUgKHN0YXRpY19jYXN0PGludD4obV9yZWNlbnRTZWFy
Y2hlcy5zaXplKCkpID4gaW5wdXQtPm1heFJlc3VsdHMoKSkKLSAgICAgICAgbV9yZWNlbnRTZWFy
Y2hlcy5yZW1vdmVMYXN0KCk7Ci0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUgPSBhdXRv
c2F2ZU5hbWUoKTsKLSAgICBpZiAoIW1fc2VhcmNoUG9wdXApCi0gICAgICAgIG1fc2VhcmNoUG9w
dXAgPSBkb2N1bWVudCgpLT5wYWdlKCktPmNocm9tZSgpLT5jcmVhdGVTZWFyY2hQb3B1cE1lbnUo
dGhpcyk7Ci0KLSAgICBtX3NlYXJjaFBvcHVwLT5zYXZlUmVjZW50U2VhcmNoZXMobmFtZSwgbV9y
ZWNlbnRTZWFyY2hlcyk7Ci19Ci0KLXZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpz
aG93UG9wdXAoKQotewotICAgIGlmIChtX3NlYXJjaFBvcHVwSXNWaXNpYmxlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAoIW1fc2VhcmNoUG9wdXApCi0gICAgICAgIG1fc2VhcmNoUG9wdXAg
PSBkb2N1bWVudCgpLT5wYWdlKCktPmNocm9tZSgpLT5jcmVhdGVTZWFyY2hQb3B1cE1lbnUodGhp
cyk7Ci0KLSAgICBpZiAoIW1fc2VhcmNoUG9wdXAtPmVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbV9zZWFyY2hQb3B1cElzVmlzaWJsZSA9IHRydWU7Ci0KLSAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIG5hbWUgPSBhdXRvc2F2ZU5hbWUoKTsKLSAgICBtX3NlYXJjaFBvcHVwLT5sb2Fk
UmVjZW50U2VhcmNoZXMobmFtZSwgbV9yZWNlbnRTZWFyY2hlcyk7Ci0KLSAgICAvLyBUcmltIHRo
ZSByZWNlbnQgc2VhcmNoZXMgbGlzdCBpZiB0aGUgbWF4aW11bSBzaXplIGhhcyBjaGFuZ2VkIHNp
bmNlIHdlIGxhc3Qgc2F2ZWQuCi0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBpbnB1dEVs
ZW1lbnQoKTsKLSAgICBpZiAoc3RhdGljX2Nhc3Q8aW50PihtX3JlY2VudFNlYXJjaGVzLnNpemUo
KSkgPiBpbnB1dC0+bWF4UmVzdWx0cygpKSB7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIG1f
cmVjZW50U2VhcmNoZXMucmVtb3ZlTGFzdCgpOwotICAgICAgICB9IHdoaWxlIChzdGF0aWNfY2Fz
dDxpbnQ+KG1fcmVjZW50U2VhcmNoZXMuc2l6ZSgpKSA+IGlucHV0LT5tYXhSZXN1bHRzKCkpOwot
Ci0gICAgICAgIG1fc2VhcmNoUG9wdXAtPnNhdmVSZWNlbnRTZWFyY2hlcyhuYW1lLCBtX3JlY2Vu
dFNlYXJjaGVzKTsKLSAgICB9Ci0KLSAgICBtX3NlYXJjaFBvcHVwLT5wb3B1cE1lbnUoKS0+c2hv
dyhwaXhlbFNuYXBwZWRJbnRSZWN0KGFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkpLCBkb2N1bWVu
dCgpLT52aWV3KCksIC0xKTsKLX0KLQotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6
OmhpZGVQb3B1cCgpCi17Ci0gICAgaWYgKG1fc2VhcmNoUG9wdXApCi0gICAgICAgIG1fc2VhcmNo
UG9wdXAtPnBvcHVwTWVudSgpLT5oaWRlKCk7Ci19Ci0KIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQm
IHBhaW50T2Zmc2V0KQogewogICAgIFJlbmRlclRleHRDb250cm9sOjpwYWludChwYWludEluZm8s
IHBhaW50T2Zmc2V0KTsKQEAgLTIwMCw2ICsxMDYsMTEgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2lu
dCYKICAgICB9CiB9CiAKK0xheW91dFVuaXQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpj
b21wdXRlSGVpZ2h0TGltaXQoKSBjb25zdAoreworICAgIHJldHVybiBjb250YWluZXJFbGVtZW50
KCkgPyBjb250ZW50SGVpZ2h0KCkgOiBoZWlnaHQoKTsKK30KKwogdm9pZCBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OmxheW91dCgpCiB7CiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZW1v
dmUgdGhlIGhlaWdodC1yZWxhdGVkIGhhY2tzIGluIGxheW91dCgpIGFuZApAQCAtMjI1LDcgKzEz
Niw3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsYXlvdXQoKQogICAgIExh
eW91dFVuaXQgZGVzaXJlZEhlaWdodCA9IHRleHRCbG9ja0hlaWdodCgpOwogICAgIExheW91dFVu
aXQgY3VycmVudEhlaWdodCA9IGlubmVyVGV4dFJlbmRlcmVyLT5oZWlnaHQoKTsKIAotICAgIExh
eW91dFVuaXQgaGVpZ2h0TGltaXQgPSAoaW5wdXRFbGVtZW50KCktPmlzU2VhcmNoRmllbGQoKSB8
fCAhY29udGFpbmVyKSA/IGhlaWdodCgpIDogY29udGVudEhlaWdodCgpOworICAgIExheW91dFVu
aXQgaGVpZ2h0TGltaXQgPSBjb21wdXRlSGVpZ2h0TGltaXQoKTsKICAgICBpZiAoY3VycmVudEhl
aWdodCA+IGhlaWdodExpbWl0KSB7CiAgICAgICAgIGlmIChkZXNpcmVkSGVpZ2h0ICE9IGN1cnJl
bnRIZWlnaHQpCiAgICAgICAgICAgICBzZXROZWVkc0xheW91dCh0cnVlLCBNYXJrT25seVRoaXMp
OwpAQCAtMjU4LDEyICsxNjksOCBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6
bGF5b3V0KCkKICAgICBpZiAoIWNvbnRhaW5lciAmJiBjdXJyZW50SGVpZ2h0ICE9IGNvbnRlbnRI
ZWlnaHQoKSkgewogICAgICAgICBMYXlvdXRVbml0IGhlaWdodERpZmYgPSBjdXJyZW50SGVpZ2h0
IC0gY29udGVudEhlaWdodCgpOwogICAgICAgICBpbm5lclRleHRSZW5kZXJlci0+c2V0WShpbm5l
clRleHRSZW5kZXJlci0+eSgpIC0gKGhlaWdodERpZmYgLyAyICsgbGF5b3V0TW9kKGhlaWdodERp
ZmYsIDIpKSk7Ci0gICAgfSBlbHNlIGlmIChpbnB1dEVsZW1lbnQoKS0+aXNTZWFyY2hGaWVsZCgp
ICYmIGNvbnRhaW5lclJlbmRlcmVyICYmIGNvbnRhaW5lclJlbmRlcmVyLT5oZWlnaHQoKSA+IGNv
bnRlbnRIZWlnaHQoKSkgewotICAgICAgICAvLyBBIHF1aXJrIGZvciBmaW5kLWluLXBhZ2UgYm94
IG9uIFNhZmFyaSBXaW5kb3dzLgotICAgICAgICAvLyBodHRwOi8vd2Via2l0Lm9yZy9iLzYzMTU3
Ci0gICAgICAgIExheW91dFVuaXQgaGVpZ2h0RGlmZiA9IGNvbnRhaW5lclJlbmRlcmVyLT5oZWln
aHQoKSAtIGNvbnRlbnRIZWlnaHQoKTsKLSAgICAgICAgY29udGFpbmVyUmVuZGVyZXItPnNldFko
Y29udGFpbmVyUmVuZGVyZXItPnkoKSAtIChoZWlnaHREaWZmIC8gMiArIGxheW91dE1vZChoZWln
aHREaWZmLCAyKSkpOwotICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgY2VudGVyQ29udGFpbmVy
SWZOZWVkZWQoY29udGFpbmVyUmVuZGVyZXIpOwogCiAgICAgLy8gSWdub3JlcyB0aGUgcGFkZGlu
Z3MgZm9yIHRoZSBpbm5lciBzcGluIGJ1dHRvbi4KICAgICBpZiAoUmVuZGVyQm94KiBpbm5lclNw
aW5Cb3ggPSBpbm5lclNwaW5CdXR0b25FbGVtZW50KCkgPyBpbm5lclNwaW5CdXR0b25FbGVtZW50
KCktPnJlbmRlckJveCgpIDogMCkgewpAQCAtNDMxLDMxICszMzgsMTIgQEAgTGF5b3V0VW5pdCBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnByZWZlcnJlZENvbnRlbnRXaWR0aChmbG9hdCBj
aGFyV2lkdGgpIGMKIAogTGF5b3V0VW5pdCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNv
bXB1dGVDb250cm9sSGVpZ2h0KExheW91dFVuaXQgbGluZUhlaWdodCwgTGF5b3V0VW5pdCBub25D
b250ZW50SGVpZ2h0KSBjb25zdAogewotICAgIEhUTUxFbGVtZW50KiByZXN1bHRzQnV0dG9uID0g
cmVzdWx0c0J1dHRvbkVsZW1lbnQoKTsKLSAgICBpZiAoUmVuZGVyQm94KiByZXN1bHRzUmVuZGVy
ZXIgPSByZXN1bHRzQnV0dG9uID8gcmVzdWx0c0J1dHRvbi0+cmVuZGVyQm94KCkgOiAwKSB7Ci0g
ICAgICAgIHJlc3VsdHNSZW5kZXJlci0+Y29tcHV0ZUxvZ2ljYWxIZWlnaHQoKTsKLSAgICAgICAg
bm9uQ29udGVudEhlaWdodCA9IG1heChub25Db250ZW50SGVpZ2h0LCByZXN1bHRzUmVuZGVyZXIt
PmJvcmRlckFuZFBhZGRpbmdIZWlnaHQoKSArIHJlc3VsdHNSZW5kZXJlci0+bWFyZ2luSGVpZ2h0
KCkpOwotICAgICAgICBsaW5lSGVpZ2h0ID0gbWF4KGxpbmVIZWlnaHQsIHJlc3VsdHNSZW5kZXJl
ci0+aGVpZ2h0KCkpOwotICAgIH0KLSAgICBIVE1MRWxlbWVudCogY2FuY2VsQnV0dG9uID0gY2Fu
Y2VsQnV0dG9uRWxlbWVudCgpOwotICAgIGlmIChSZW5kZXJCb3gqIGNhbmNlbFJlbmRlcmVyID0g
Y2FuY2VsQnV0dG9uID8gY2FuY2VsQnV0dG9uLT5yZW5kZXJCb3goKSA6IDApIHsKLSAgICAgICAg
Y2FuY2VsUmVuZGVyZXItPmNvbXB1dGVMb2dpY2FsSGVpZ2h0KCk7Ci0gICAgICAgIG5vbkNvbnRl
bnRIZWlnaHQgPSBtYXgobm9uQ29udGVudEhlaWdodCwgY2FuY2VsUmVuZGVyZXItPmJvcmRlckFu
ZFBhZGRpbmdIZWlnaHQoKSArIGNhbmNlbFJlbmRlcmVyLT5tYXJnaW5IZWlnaHQoKSk7Ci0gICAg
ICAgIGxpbmVIZWlnaHQgPSBtYXgobGluZUhlaWdodCwgY2FuY2VsUmVuZGVyZXItPmhlaWdodCgp
KTsKLSAgICB9Ci0KICAgICByZXR1cm4gbGluZUhlaWdodCArIG5vbkNvbnRlbnRIZWlnaHQ7CiB9
CiAKIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp1cGRhdGVGcm9tRWxlbWVudCgp
CiB7CiAgICAgUmVuZGVyVGV4dENvbnRyb2w6OnVwZGF0ZUZyb21FbGVtZW50KCk7Ci0KLSAgICBp
ZiAoY2FuY2VsQnV0dG9uRWxlbWVudCgpKQotICAgICAgICB1cGRhdGVDYW5jZWxCdXR0b25WaXNp
YmlsaXR5KCk7Ci0KLSAgICBpZiAobV9zZWFyY2hQb3B1cElzVmlzaWJsZSkKLSAgICAgICAgbV9z
ZWFyY2hQb3B1cC0+cG9wdXBNZW51KCktPnVwZGF0ZUZyb21FbGVtZW50KCk7CiB9CiAKIFBhc3NS
ZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y3JlYXRlSW5u
ZXJUZXh0U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUpIGNvbnN0CkBAIC00OTYs
MTg4ICszODQsMTIgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lOjpjcmVhdGVJbm5lckJsb2NrU3R5bGUoY29uc3QKICAgICByZXR1cm4gaW5uZXJC
bG9ja1N0eWxlLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmU6OnVwZGF0ZUNhbmNlbEJ1dHRvblZpc2liaWxpdHkoKSBjb25zdAotewotICAgIFJlbmRlck9i
amVjdCogY2FuY2VsQnV0dG9uUmVuZGVyZXIgPSBjYW5jZWxCdXR0b25FbGVtZW50KCktPnJlbmRl
cmVyKCk7Ci0gICAgaWYgKCFjYW5jZWxCdXR0b25SZW5kZXJlcikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgY29uc3QgUmVuZGVyU3R5bGUqIGN1clN0eWxlID0gY2FuY2VsQnV0dG9uUmVuZGVyZXIt
PnN0eWxlKCk7Ci0gICAgRVZpc2liaWxpdHkgYnV0dG9uVmlzaWJpbGl0eSA9IHZpc2liaWxpdHlG
b3JDYW5jZWxCdXR0b24oKTsKLSAgICBpZiAoY3VyU3R5bGUtPnZpc2liaWxpdHkoKSA9PSBidXR0
b25WaXNpYmlsaXR5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+
IGNhbmNlbEJ1dHRvblN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lKGN1clN0eWxlKTsKLSAgICBj
YW5jZWxCdXR0b25TdHlsZS0+c2V0VmlzaWJpbGl0eShidXR0b25WaXNpYmlsaXR5KTsKLSAgICBj
YW5jZWxCdXR0b25SZW5kZXJlci0+c2V0U3R5bGUoY2FuY2VsQnV0dG9uU3R5bGUpOwotfQotCi1F
VmlzaWJpbGl0eSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnZpc2liaWxpdHlGb3JDYW5j
ZWxCdXR0b24oKSBjb25zdAotewotICAgIHJldHVybiAoc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09
IEhJRERFTiB8fCBpbnB1dEVsZW1lbnQoKS0+dmFsdWUoKS5pc0VtcHR5KCkpID8gSElEREVOIDog
VklTSUJMRTsKLX0KLQogYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnRleHRTaG91
bGRCZVRydW5jYXRlZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGRvY3VtZW50KCktPmZvY3VzZWRO
b2RlKCkgIT0gbm9kZSgpCiAgICAgICAgICYmIHN0eWxlKCktPnRleHRPdmVyZmxvdygpID09IFRl
eHRPdmVyZmxvd0VsbGlwc2lzOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6YXV0b3NhdmVOYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSktPmdldEF0dHJpYnV0ZShhdXRvc2F2ZUF0dHIpOwot
fQotCi0vLyBQb3B1cE1lbnVDbGllbnQgbWV0aG9kcwotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6OnZhbHVlQ2hhbmdlZCh1bnNpZ25lZCBsaXN0SW5kZXgsIGJvb2wgZmlyZUV2ZW50
cykKLXsKLSAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihsaXN0SW5kZXgpIDwgbGlzdFNpemUo
KSk7Ci0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBpbnB1dEVsZW1lbnQoKTsKLSAgICBp
ZiAoc3RhdGljX2Nhc3Q8aW50PihsaXN0SW5kZXgpID09IChsaXN0U2l6ZSgpIC0gMSkpIHsKLSAg
ICAgICAgaWYgKGZpcmVFdmVudHMpIHsKLSAgICAgICAgICAgIG1fcmVjZW50U2VhcmNoZXMuY2xl
YXIoKTsKLSAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSA9IGF1dG9zYXZlTmFt
ZSgpOwotICAgICAgICAgICAgaWYgKCFuYW1lLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAg
IGlmICghbV9zZWFyY2hQb3B1cCkKLSAgICAgICAgICAgICAgICAgICAgbV9zZWFyY2hQb3B1cCA9
IGRvY3VtZW50KCktPnBhZ2UoKS0+Y2hyb21lKCktPmNyZWF0ZVNlYXJjaFBvcHVwTWVudSh0aGlz
KTsKLSAgICAgICAgICAgICAgICBtX3NlYXJjaFBvcHVwLT5zYXZlUmVjZW50U2VhcmNoZXMobmFt
ZSwgbV9yZWNlbnRTZWFyY2hlcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVs
c2UgewotICAgICAgICBpbnB1dC0+c2V0VmFsdWUoaXRlbVRleHQobGlzdEluZGV4KSk7Ci0gICAg
ICAgIGlmIChmaXJlRXZlbnRzKQotICAgICAgICAgICAgaW5wdXQtPm9uU2VhcmNoKCk7Ci0gICAg
ICAgIGlucHV0LT5zZWxlY3QoKTsKLSAgICB9Ci19Ci0KLVN0cmluZyBSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6Oml0ZW1UZXh0KHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKLXsKLSAgICBp
bnQgc2l6ZSA9IGxpc3RTaXplKCk7Ci0gICAgaWYgKHNpemUgPT0gMSkgewotICAgICAgICBBU1NF
UlQoIWxpc3RJbmRleCk7Ci0gICAgICAgIHJldHVybiBzZWFyY2hNZW51Tm9SZWNlbnRTZWFyY2hl
c1RleHQoKTsKLSAgICB9Ci0gICAgaWYgKCFsaXN0SW5kZXgpCi0gICAgICAgIHJldHVybiBzZWFy
Y2hNZW51UmVjZW50U2VhcmNoZXNUZXh0KCk7Ci0gICAgaWYgKGl0ZW1Jc1NlcGFyYXRvcihsaXN0
SW5kZXgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgaWYgKHN0YXRpY19jYXN0PGlu
dD4obGlzdEluZGV4KSA9PSAoc2l6ZSAtIDEpKQotICAgICAgICByZXR1cm4gc2VhcmNoTWVudUNs
ZWFyUmVjZW50U2VhcmNoZXNUZXh0KCk7Ci0gICAgcmV0dXJuIG1fcmVjZW50U2VhcmNoZXNbbGlz
dEluZGV4IC0gMV07Ci19Ci0KLVN0cmluZyBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Oml0
ZW1MYWJlbCh1bnNpZ25lZCkgY29uc3QKLXsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0
cmluZyBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Oml0ZW1JY29uKHVuc2lnbmVkKSBjb25z
dAotewotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6Oml0ZW1Jc0VuYWJsZWQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAotewotICAg
ICBpZiAoIWxpc3RJbmRleCB8fCBpdGVtSXNTZXBhcmF0b3IobGlzdEluZGV4KSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1Qb3B1cE1lbnVTdHlsZSBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Oml0ZW1TdHlsZSh1bnNpZ25lZCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbWVudVN0eWxlKCk7Ci19Ci0KLVBvcHVwTWVudVN0eWxlIFJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6bWVudVN0eWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gUG9wdXBNZW51
U3R5bGUoc3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBz
dHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3Ip
LCBzdHlsZSgpLT5mb250KCksIHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFLAotICAg
ICAgICBzdHlsZSgpLT5kaXNwbGF5KCkgPT0gTk9ORSwgc3R5bGUoKS0+dGV4dEluZGVudCgpLCBz
dHlsZSgpLT5kaXJlY3Rpb24oKSwgaXNPdmVycmlkZShzdHlsZSgpLT51bmljb2RlQmlkaSgpKSk7
Ci19Ci0KLWludCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNsaWVudEluc2V0TGVmdCgp
IGNvbnN0Ci17Ci0gICAgLy8gSW5zZXQgdGhlIG1lbnUgYnkgdGhlIHJhZGl1cyBvZiB0aGUgY2Fw
IG9uIHRoZSBsZWZ0IHNvIHRoYXQKLSAgICAvLyBpdCBvbmx5IHJ1bnMgYWxvbmcgdGhlIHN0cmFp
Z2h0IHBhcnQgb2YgdGhlIGJlemVsLgotICAgIHJldHVybiBoZWlnaHQoKSAvIDI7Ci19Ci0KLWlu
dCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNsaWVudEluc2V0UmlnaHQoKSBjb25zdAot
ewotICAgIC8vIEluc2V0IHRoZSBtZW51IGJ5IHRoZSByYWRpdXMgb2YgdGhlIGNhcCBvbiB0aGUg
cmlnaHQgc28gdGhhdAotICAgIC8vIGl0IG9ubHkgcnVucyBhbG9uZyB0aGUgc3RyYWlnaHQgcGFy
dCBvZiB0aGUgYmV6ZWwgKHVubGVzcyBpdCBuZWVkcwotICAgIC8vIHRvIGJlIHdpZGVyKS4KLSAg
ICByZXR1cm4gaGVpZ2h0KCkgLyAyOwotfQotCi1MYXlvdXRVbml0IFJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZTo6Y2xpZW50UGFkZGluZ0xlZnQoKSBjb25zdAotewotICAgIExheW91dFVuaXQg
cGFkZGluZyA9IHBhZGRpbmdMZWZ0KCk7Ci0gICAgaWYgKFJlbmRlckJveCogYm94ID0gaW5uZXJC
bG9ja0VsZW1lbnQoKSA/IGlubmVyQmxvY2tFbGVtZW50KCktPnJlbmRlckJveCgpIDogMCkKLSAg
ICAgICAgcGFkZGluZyArPSBib3gtPngoKTsKLSAgICByZXR1cm4gcGFkZGluZzsKLX0KLQotTGF5
b3V0VW5pdCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNsaWVudFBhZGRpbmdSaWdodCgp
IGNvbnN0Ci17Ci0gICAgTGF5b3V0VW5pdCBwYWRkaW5nID0gcGFkZGluZ1JpZ2h0KCk7Ci0gICAg
aWYgKFJlbmRlckJveCogY29udGFpbmVyQm94ID0gY29udGFpbmVyRWxlbWVudCgpID8gY29udGFp
bmVyRWxlbWVudCgpLT5yZW5kZXJCb3goKSA6IDApIHsKLSAgICAgICAgaWYgKFJlbmRlckJveCog
aW5uZXJCbG9ja0JveCA9IGlubmVyQmxvY2tFbGVtZW50KCkgPyBpbm5lckJsb2NrRWxlbWVudCgp
LT5yZW5kZXJCb3goKSA6IDApCi0gICAgICAgICAgICBwYWRkaW5nICs9IGNvbnRhaW5lckJveC0+
d2lkdGgoKSAtIChpbm5lckJsb2NrQm94LT54KCkgKyBpbm5lckJsb2NrQm94LT53aWR0aCgpKTsK
LSAgICB9Ci0gICAgcmV0dXJuIHBhZGRpbmc7Ci19Ci0KLWludCBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6Omxpc3RTaXplKCkgY29uc3QKLXsKLSAgICAvLyBJZiB0aGVyZSBhcmUgbm8gcmVj
ZW50IHNlYXJjaGVzLCB0aGVuIG91ciBtZW51IHdpbGwgaGF2ZSAxICJObyByZWNlbnQgc2VhcmNo
ZXMiIGl0ZW0uCi0gICAgaWYgKCFtX3JlY2VudFNlYXJjaGVzLnNpemUoKSkKLSAgICAgICAgcmV0
dXJuIDE7Ci0gICAgLy8gT3RoZXJ3aXNlLCBsZWF2ZSByb29tIGluIHRoZSBtZW51IGZvciBhIGhl
YWRlciwgYSBzZXBhcmF0b3IsIGFuZCB0aGUgIkNsZWFyIHJlY2VudCBzZWFyY2hlcyIgaXRlbS4K
LSAgICByZXR1cm4gbV9yZWNlbnRTZWFyY2hlcy5zaXplKCkgKyAzOwotfQotCi1pbnQgUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzZWxlY3RlZEluZGV4KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gLTE7Ci19Ci0KLXZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpwb3B1cERpZEhp
ZGUoKQotewotICAgIG1fc2VhcmNoUG9wdXBJc1Zpc2libGUgPSBmYWxzZTsKLX0KLQotYm9vbCBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Oml0ZW1Jc1NlcGFyYXRvcih1bnNpZ25lZCBsaXN0
SW5kZXgpIGNvbnN0Ci17Ci0gICAgLy8gVGhlIHNlcGFyYXRvciB3aWxsIGJlIHRoZSBzZWNvbmQg
dG8gbGFzdCBpdGVtIGluIG91ciBsaXN0LgotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGxp
c3RJbmRleCkgPT0gKGxpc3RTaXplKCkgLSAyKTsKLX0KLQotYm9vbCBSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6Oml0ZW1Jc0xhYmVsKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbGlzdEluZGV4ID09IDA7Ci19Ci0KLWJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjppdGVtSXNTZWxlY3RlZCh1bnNpZ25lZCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLXZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzZXRUZXh0RnJvbUl0
ZW0odW5zaWduZWQgbGlzdEluZGV4KQotewotICAgIGlucHV0RWxlbWVudCgpLT5zZXRWYWx1ZShp
dGVtVGV4dChsaXN0SW5kZXgpKTsKLX0KLQotRm9udFNlbGVjdG9yKiBSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OmZvbnRTZWxlY3RvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRvY3VtZW50
KCktPnN0eWxlUmVzb2x2ZXIoKS0+Zm9udFNlbGVjdG9yKCk7Ci19Ci0KLUhvc3RXaW5kb3cqIFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aG9zdFdpbmRvdygpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGRvY3VtZW50KCktPnZpZXcoKS0+aG9zdFdpbmRvdygpOwotfQotCiB2b2lkIFJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZTo6YXV0b3Njcm9sbCgpCiB7CiAgICAgUmVuZGVyTGF5ZXIqIGxh
eWVyID0gaW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJCb3goKS0+bGF5ZXIoKTsKQEAgLTc0MSwx
NyArNDUzLDYgQEAgYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmxvZ2ljYWxTY3Jv
bGwoU2Nyb2xsTG9naWNhbERpcmVjdGlvbiBkaXJlY3Rpb24KICAgICByZXR1cm4gUmVuZGVyQmxv
Y2s6OmxvZ2ljYWxTY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllciwgc3Rv
cE5vZGUpOwogfQogCi1QYXNzUmVmUHRyPFNjcm9sbGJhcj4gUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhLCBT
Y3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUgY29u
dHJvbFNpemUpCi17Ci0gICAgUmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0OwotICAgIGJvb2wgaGFz
Q3VzdG9tU2Nyb2xsYmFyU3R5bGUgPSBzdHlsZSgpLT5oYXNQc2V1ZG9TdHlsZShTQ1JPTExCQVIp
OwotICAgIGlmIChoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSkKLSAgICAgICAgd2lkZ2V0ID0gUmVu
ZGVyU2Nyb2xsYmFyOjpjcmVhdGVDdXN0b21TY3JvbGxiYXIoc2Nyb2xsYWJsZUFyZWEsIG9yaWVu
dGF0aW9uLCB0aGlzLT5ub2RlKCkpOwotICAgIGVsc2UKLSAgICAgICAgd2lkZ2V0ID0gU2Nyb2xs
YmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIoc2Nyb2xsYWJsZUFyZWEsIG9yaWVudGF0aW9uLCBj
b250cm9sU2l6ZSk7Ci0gICAgcmV0dXJuIHdpZGdldC5yZWxlYXNlKCk7Ci19Ci0KIEhUTUxJbnB1
dEVsZW1lbnQqIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aW5wdXRFbGVtZW50KCkgY29u
c3QKIHsKICAgICByZXR1cm4gbm9kZSgpLT50b0lucHV0RWxlbWVudCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCmlu
ZGV4IDZlMjFjODU2YzEwZmE5ZmJhNDM2YzA2Zjc0OWMxNGUxZTJhODBiYTYuLmZmYzUwYTMzZGM0
YTVkNTdmOTllOWU1MDM3Y2E2ZmY5YTFhMmZhZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgKQEAgLTIzLDMyICsy
MywzMSBAQAogI2lmbmRlZiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmVfaAogI2RlZmluZSBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmVfaAogCi0jaW5jbHVkZSAiUG9wdXBNZW51Q2xpZW50
LmgiCisjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRD
b250cm9sLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSFRNTElucHV0RWxlbWVu
dDsKLWNsYXNzIFNlYXJjaFBvcHVwTWVudTsKIAotY2xhc3MgUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lIDogcHVibGljIFJlbmRlclRleHRDb250cm9sLCBwcml2YXRlIFBvcHVwTWVudUNsaWVu
dCB7CitjbGFzcyBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUgOiBwdWJsaWMgUmVuZGVyVGV4
dENvbnRyb2wgewogcHVibGljOgogICAgIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShOb2Rl
Kik7CiAgICAgdmlydHVhbCB+UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKCk7CiAgICAgLy8g
RklYTUU6IE1vdmUgY3JlYXRlKlN0eWxlKCkgdG8gdGhlaXIgY2xhc3Nlcy4KICAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IGNyZWF0ZUlubmVyVGV4dFN0eWxlKGNvbnN0IFJlbmRl
clN0eWxlKiBzdGFydFN0eWxlKSBjb25zdDsKICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBj
cmVhdGVJbm5lckJsb2NrU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUpIGNvbnN0
OwotICAgIHZvaWQgdXBkYXRlQ2FuY2VsQnV0dG9uVmlzaWJpbGl0eSgpIGNvbnN0OwotCi0gICAg
dm9pZCBhZGRTZWFyY2hSZXN1bHQoKTsKLSAgICB2b2lkIHN0b3BTZWFyY2hFdmVudFRpbWVyKCk7
Ci0KLSAgICBib29sIHBvcHVwSXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV9zZWFyY2hQb3B1
cElzVmlzaWJsZTsgfQotICAgIHZvaWQgc2hvd1BvcHVwKCk7Ci0gICAgdm9pZCBoaWRlUG9wdXAo
KTsKIAogICAgIHZvaWQgY2Fwc0xvY2tTdGF0ZU1heUhhdmVDaGFuZ2VkKCk7CiAKK3Byb3RlY3Rl
ZDoKKyAgICB2aXJ0dWFsIHZvaWQgY2VudGVyQ29udGFpbmVySWZOZWVkZWQoUmVuZGVyQm94Kikg
Y29uc3QgeyB9CisgICAgdmlydHVhbCBMYXlvdXRVbml0IGNvbXB1dGVIZWlnaHRMaW1pdCgpIGNv
bnN0OworICAgIEhUTUxFbGVtZW50KiBjb250YWluZXJFbGVtZW50KCkgY29uc3Q7CisgICAgSFRN
TEVsZW1lbnQqIGlubmVyQmxvY2tFbGVtZW50KCkgY29uc3Q7CisgICAgSFRNTElucHV0RWxlbWVu
dCogaW5wdXRFbGVtZW50KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZyb21FbGVt
ZW50KCkgT1ZFUlJJREU7CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGhhc0NvbnRyb2xD
bGlwKCkgY29uc3Q7CiAgICAgdmlydHVhbCBMYXlvdXRSZWN0IGNvbnRyb2xDbGlwUmVjdChjb25z
dCBMYXlvdXRQb2ludCYpIGNvbnN0OwpAQCAtNzYsNTkgKzc1LDI4IEBAIHByaXZhdGU6CiAgICAg
dmlydHVhbCBMYXlvdXRVbml0IHByZWZlcnJlZENvbnRlbnRXaWR0aChmbG9hdCBjaGFyV2lkdGgp
IGNvbnN0OwogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBjb21wdXRlQ29udHJvbEhlaWdodChMYXlv
dXRVbml0IGxpbmVIZWlnaHQsIExheW91dFVuaXQgbm9uQ29udGVudEhlaWdodCkgY29uc3QgT1ZF
UlJJREU7CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZyb21FbGVtZW50KCk7CiAgICAg
dmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVy
U3R5bGUqIG9sZFN0eWxlKTsKIAogICAgIHZpcnR1YWwgUmVuZGVyU3R5bGUqIHRleHRCYXNlU3R5
bGUoKSBjb25zdDsKIAotICAgIEVWaXNpYmlsaXR5IHZpc2liaWxpdHlGb3JDYW5jZWxCdXR0b24o
KSBjb25zdDsKICAgICBib29sIHRleHRTaG91bGRCZVRydW5jYXRlZCgpIGNvbnN0OwotICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgYXV0b3NhdmVOYW1lKCkgY29uc3Q7Ci0KLSAgICAvLyBQb3B1cE1l
bnVDbGllbnQgbWV0aG9kcwotICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQodW5zaWduZWQg
bGlzdEluZGV4LCBib29sIGZpcmVFdmVudHMgPSB0cnVlKSBPVkVSUklERTsKLSAgICB2aXJ0dWFs
IHZvaWQgc2VsZWN0aW9uQ2hhbmdlZCh1bnNpZ25lZCwgYm9vbCkgT1ZFUlJJREUgeyB9Ci0gICAg
dmlydHVhbCB2b2lkIHNlbGVjdGlvbkNsZWFyZWQoKSBPVkVSUklERSB7IH0KLSAgICB2aXJ0dWFs
IFN0cmluZyBpdGVtVGV4dCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0IE9WRVJSSURFOwotICAg
IHZpcnR1YWwgU3RyaW5nIGl0ZW1MYWJlbCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0IE9WRVJS
SURFOwotICAgIHZpcnR1YWwgU3RyaW5nIGl0ZW1JY29uKHVuc2lnbmVkIGxpc3RJbmRleCkgY29u
c3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBTdHJpbmcgaXRlbVRvb2xUaXAodW5zaWduZWQpIGNv
bnN0IE9WRVJSSURFIHsgcmV0dXJuIFN0cmluZygpOyB9Ci0gICAgdmlydHVhbCBTdHJpbmcgaXRl
bUFjY2Vzc2liaWxpdHlUZXh0KHVuc2lnbmVkKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBTdHJp
bmcoKTsgfQotICAgIHZpcnR1YWwgYm9vbCBpdGVtSXNFbmFibGVkKHVuc2lnbmVkIGxpc3RJbmRl
eCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBQb3B1cE1lbnVTdHlsZSBpdGVtU3R5bGUo
dW5zaWduZWQgbGlzdEluZGV4KSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFBvcHVwTWVu
dVN0eWxlIG1lbnVTdHlsZSgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgaW50IGNsaWVu
dEluc2V0TGVmdCgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgaW50IGNsaWVudEluc2V0
UmlnaHQoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIExheW91dFVuaXQgY2xpZW50UGFk
ZGluZ0xlZnQoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIExheW91dFVuaXQgY2xpZW50
UGFkZGluZ1JpZ2h0KCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBpbnQgbGlzdFNpemUo
KSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGludCBzZWxlY3RlZEluZGV4KCkgY29uc3Qg
T1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHBvcHVwRGlkSGlkZSgpIE9WRVJSSURFOwotICAg
IHZpcnR1YWwgYm9vbCBpdGVtSXNTZXBhcmF0b3IodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdCBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgaXRlbUlzTGFiZWwodW5zaWduZWQgbGlzdEluZGV4
KSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgaXRlbUlzU2VsZWN0ZWQodW5zaWdu
ZWQgbGlzdEluZGV4KSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUG9w
T3ZlcigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29s
IHZhbHVlU2hvdWxkQ2hhbmdlT25Ib3RUcmFjaygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGZh
bHNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFRleHRGcm9tSXRlbSh1bnNpZ25lZCBsaXN0SW5k
ZXgpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IoKSBj
b25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3coKSBjb25z
dCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBjcmVhdGVTY3Jv
bGxiYXIoU2Nyb2xsYWJsZUFyZWEqLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29u
dHJvbFNpemUpIE9WRVJSSURFOwotCi0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50
KCkgY29uc3Q7CiAKLSAgICBIVE1MRWxlbWVudCogY29udGFpbmVyRWxlbWVudCgpIGNvbnN0Owot
ICAgIEhUTUxFbGVtZW50KiBpbm5lckJsb2NrRWxlbWVudCgpIGNvbnN0OwogICAgIEhUTUxFbGVt
ZW50KiBpbm5lclNwaW5CdXR0b25FbGVtZW50KCkgY29uc3Q7Ci0gICAgSFRNTEVsZW1lbnQqIHJl
c3VsdHNCdXR0b25FbGVtZW50KCkgY29uc3Q7Ci0gICAgSFRNTEVsZW1lbnQqIGNhbmNlbEJ1dHRv
bkVsZW1lbnQoKSBjb25zdDsKIAotICAgIGJvb2wgbV9zZWFyY2hQb3B1cElzVmlzaWJsZTsKICAg
ICBib29sIG1fc2hvdWxkRHJhd0NhcHNMb2NrSW5kaWNhdG9yOwogICAgIExheW91dFVuaXQgbV9k
ZXNpcmVkSW5uZXJUZXh0SGVpZ2h0OwotICAgIFJlZlB0cjxTZWFyY2hQb3B1cE1lbnU+IG1fc2Vh
cmNoUG9wdXA7Ci0gICAgVmVjdG9yPFN0cmluZz4gbV9yZWNlbnRTZWFyY2hlczsKIH07CiAKK2lu
bGluZSBIVE1MRWxlbWVudCogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjb250YWluZXJF
bGVtZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaW5wdXRFbGVtZW50KCktPmNvbnRhaW5lckVs
ZW1lbnQoKTsKK30KKworaW5saW5lIEhUTUxFbGVtZW50KiBSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmU6OmlubmVyQmxvY2tFbGVtZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaW5wdXRFbGVt
ZW50KCktPmlubmVyQmxvY2tFbGVtZW50KCk7Cit9CisKIGlubGluZSBSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmUqIHRvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKFJlbmRlck9iamVjdCog
b2JqZWN0KQogewogICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNUZXh0RmllbGQoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyaW5nQWxsSW5PbmUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcmluZ0FsbEluT25lLmNwcAppbmRl
eCBkMTdiZDMxM2E0MzE5MGM5YmRmZTVjZThkMzJmOGY3MTg1NDQ0YTRmLi4xZjBhNGEzOGU3MmUy
MWE3ZGMzZjBhZGNkM2NhZTM2M2M4YTUxZDkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyaW5nQWxsSW5PbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJpbmdBbGxJbk9uZS5jcHAKQEAgLTkxLDYgKzkxLDcgQEAKICNpbmNsdWRlICJS
ZW5kZXJTY3JvbGxiYXIuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhclBhcnQuY3BwIgog
I2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhclRoZW1lLmNwcCIKKyNpbmNsdWRlICJSZW5kZXJTZWFy
Y2hGaWVsZC5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU2xpZGVyLmNwcCIKICNpbmNsdWRlICJSZW5k
ZXJUYWJsZS5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDYXB0aW9uLmNwcCIK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148051</attachid>
            <date>2012-06-17 21:54:45 -0700</date>
            <delta_ts>2012-06-17 21:57:14 -0700</delta_ts>
            <desc>Patch 10</desc>
            <filename>bug-88980-20120618135444.patch</filename>
            <type>text/plain</type>
            <size>76425</size>
            <attacher>yosin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwNTY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWFiMTRiYTBmMzhmMThi
NTY5Y2NkZTNiZGYxZDYxMDg2MGE5NDkxMi4uZTAyZTA5MTgxMWZhYjIyZGQxNzRjOGQ5MWIwZGU1
MjhiOTNmODdlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkwIEBACisyMDEyLTA2LTE0ICBZb3No
aWZ1bWkgSW5vdWUgIDx5b3NpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW0Zvcm1zXSBNb3Zl
IHNlYXJjaCBmaWVsZCByZWxhdGVkIGNvZGUgdG8gUmVuZGVyU2VhcmNoRmllbGQgZnJvbSBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTg4OTgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgS2VudCBUYW11cmEu
CisKKyAgICAgICAgVGhpcyBwYXRjaCBtb3ZlcyBzZWFyY2ggZmllbGQgcmVsYXRlZCBtZXRob2Rz
IGluIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZQorICAgICAgICB0byBuZXcgY2xhc3MgUmVu
ZGVyU2VhcmNoRmllbGQgYW5kIGNoYW5nZXMgcmVsYXRlZCBjbGFzc2VzIHRvIHVzZQorICAgICAg
ICBSZW5kZXJTZWFyY2hGaWVsZC4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgcGF0Y2gg
ZG9lc24ndCBjaGFuZ2UgYmVoYXZpb3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDogQWRk
ZWQgbmV3IGZpbGUgUmVuZGVyU2VhcmNoRmllbGQuY3BwCisgICAgICAgICogR05VbWFrZWZpbGUu
bGlzdC5hbTogQWRkZWQgbmV3IGZpbGUgUmVuZGVyU2VhcmNoRmllbGQuY3BwIGFuZCBSZW5kZXJT
ZWFyY2hGaWVsZC5oCisgICAgICAgICogVGFyZ2V0LnByaTogZGl0dG8KKyAgICAgICAgKiBXZWJD
b3JlLmd5cGk6IGRpdHRvCisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6
IGRpdHRvCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBkaXR0
bworICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MSW5wdXRFbGVtZW50OjpzdWJ0cmVlSGFzQ2hhbmdlZCk6IENhbGwgUmVuZGVyU2VhcmNo
RmllbGQ6OnVwZGF0ZUNhbmNlbEJ1dHRvblZpc2liaWxpdHkKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxJbnB1dEVsZW1lbnQ6OmFkZFNlYXJjaFJlc3VsdCk6IENoYW5nZWQgdG8gY2FsbCBJbnB1dFR5
cGU6OmFkZFNlYXJjaFJlc3VsdC4KKyAgICAgICAgKiBodG1sL0lucHV0VHlwZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnB1dFR5cGU6OmFkZFNlYXJjaFJlc3VsdCk6IEFkZGVkLgorICAgICAg
ICAqIGh0bWwvSW5wdXRUeXBlLmg6CisgICAgICAgICogaHRtbC9TZWFyY2hJbnB1dFR5cGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoSW5wdXRUeXBlOjphZGRTZWFyY2hSZXN1bHQpOiBN
b3ZlZCBmcm9tIEhUTUxJbnB1dEVsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hJbnB1
dFR5cGU6OmNyZWF0ZVJlbmRlcmVyKTogQWRkZWQgdG8gY3JlYXRlIFJlbmRlclNlYXJjaEZpZWxk
LgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoSW5wdXRUeXBlOjpzZWFyY2hFdmVudHNTaG91bGRC
ZURpc3BhdGNoZWQpOiBNb3ZlZCBmcm9tIEhUTUxJbnB1dEVsZW1lbnQuCisgICAgICAgIChXZWJD
b3JlOjpTZWFyY2hJbnB1dFR5cGU6OnN1YnRyZWVIYXNDaGFuZ2VkKSBNb3ZlZCBzZWFyY2ggcmVs
YXRlZCBjb2RlIGZyb20gSFRNTElucHV0RWxlbWVudC4KKyAgICAgICAgKiBodG1sL1NlYXJjaElu
cHV0VHlwZS5oOgorICAgICAgICAqIGh0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50
cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50
OjpkZWZhdWx0RXZlbnRIYW5kbGVyKTogVXNlIFJlbmRlclNlYXJjaEZpZWxkIGluc3RlYWQgb2Yg
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLgorICAgICAgICAqIGxvYWRlci9Gb3JtU3VibWlz
c2lvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb3JtU3VibWlzc2lvbjo6Y3JlYXRlKTogR290
IHJpZCBpc1NlYXJjaEZpZWxkKCkgZ3VhcmQgZm9yIGFkZFNlYXJjaFJlc3VsdCgpLgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTZWFyY2hGaWVsZDo6UmVuZGVyU2VhcmNoRmllbGQpOiBSZW5hbWVkIHRvIFJlbmRlclNl
YXJjaEZpZWxkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6On5SZW5kZXJT
ZWFyY2hGaWVsZCk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6
cmVzdWx0c0J1dHRvbkVsZW1lbnQpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2Vh
cmNoRmllbGQ6OmNhbmNlbEJ1dHRvbkVsZW1lbnQpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU2VhcmNoRmllbGQ6OmFkZFNlYXJjaFJlc3VsdCk6IGRpdHRvCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6c2hvd1BvcHVwKTogZGl0dG8KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNlYXJjaEZpZWxkOjpoaWRlUG9wdXApOiBkaXR0bworICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU2VhcmNoRmllbGQ6OmNvbXB1dGVDb250cm9sSGVpZ2h0KTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6dXBkYXRlRnJvbUVsZW1lbnQpOiBNb3Zl
ZCBzZWFyY2ggZmllbGQgcmVsYXRlZCBjb2RlIGZyb20gUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OnVwZGF0ZUNhbmNlbEJ1
dHRvblZpc2liaWxpdHkpOiBSZW5hbWVkIHRvIFJlbmRlclNlYXJjaEZpZWxkLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OnZpc2liaWxpdHlGb3JDYW5jZWxCdXR0b24pOiBk
aXR0bworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OmF1dG9zYXZlTmFtZSk6
IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6dmFsdWVDaGFuZ2Vk
KTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjppdGVtVGV4dCk6
IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6aXRlbUxhYmVsKTog
ZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjppdGVtSWNvbik6IGRp
dHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6aXRlbUlzRW5hYmxlZCk6
IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6aXRlbVN0eWxlKTog
ZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjptZW51U3R5bGUpOiBk
aXR0bworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OmNsaWVudEluc2V0TGVm
dCk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6Y2xpZW50SW5z
ZXRSaWdodCk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6Y2xp
ZW50UGFkZGluZ0xlZnQpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmll
bGQ6OmNsaWVudFBhZGRpbmdSaWdodCk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
ZWFyY2hGaWVsZDo6bGlzdFNpemUpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2Vh
cmNoRmllbGQ6OnNlbGVjdGVkSW5kZXgpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U2VhcmNoRmllbGQ6OnBvcHVwRGlkSGlkZSk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTZWFyY2hGaWVsZDo6aXRlbUlzU2VwYXJhdG9yKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclNlYXJjaEZpZWxkOjppdGVtSXNMYWJlbCk6IGRpdHRvCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTZWFyY2hGaWVsZDo6aXRlbUlzU2VsZWN0ZWQpOiBkaXR0bworICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OnNldFRleHRGcm9tSXRlbSk6IGRpdHRvCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTZWFyY2hGaWVsZDo6Zm9udFNlbGVjdG9yKTogZGl0dG8KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjpob3N0V2luZG93KTogZGl0dG8KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjpjcmVhdGVTY3JvbGxiYXIpOiBkaXR0bwor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OmNvbXB1dGVIZWlnaHRMaW1pdCk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OmNlbnRlckNvbnRh
aW5lcklmTmVlZGVkKTogQWRkZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZp
ZWxkLmg6CisgICAgICAgIChXZWJDb3JlOjp0b1JlbmRlclNlYXJjaEZpZWxkKTogQWRkZWQuCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OlJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZSk6IFJlbW92ZSBzZWFyY2ggZmllbGQgcmVsYXRlZCBjb2RlLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp+UmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lKTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OmNvbXB1dGVIZWlnaHRMaW1pdCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsYXlvdXQpOiBVc2UgbmV3IG1ldGhvZHMg
Zm9yIHJlbW92aW5nIGlzU2VhcmNoRmllbGQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmU6OmNvbXB1dGVDb250cm9sSGVpZ2h0KTogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnVwZGF0ZUZyb21FbGVtZW50
KTogUmVtb3ZlIHNlYXJjaCBmaWVsZCByZWxhdGVkIGNvZGUuCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oOgorICAgICAgICAoUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZTo6Y2VudGVyQ29udGFpbmVySWZOZWVkZWQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y29udGFpbmVyRWxlbWVudCk6IEV4cG9zZWQg
Zm9yIFJlbmRlclNlYXJjaEZpZWxkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjppbm5lckJsb2NrRWxlbWVudCk6IEV4cG9zZWQgZm9yIFJlbmRlclNlYXJj
aEZpZWxkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJpbmdBbGxJbk9uZS5jcHA6IEFkZGVk
IFJlbmRlclNlYXJjaEZpZWxkLmNwcAorCiAyMDEyLTA2LTE3ICBZb3NoaWZ1bWkgSW5vdWUgIDx5
b3NpbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Zvcm1zXSBDb3B5IFJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZS57Y3BwLGh9IHRvIFJlbmRlclNlYXJjaEZpbGVkLntjcHAsaH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQKaW5kZXggZTI3M2MwZmQ1NjAxNWI5NTk2M2JmYjQ4Mzg5YTAzYjJjNzViZGJh
ZC4uOWFkODViYjk0MjI1MDRkYzMyY2Q2ZDFmZjg4ZjM0NjgzYWVkNDZmYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQKQEAgLTEzODcsNiArMTM4Nyw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBy
ZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmNwcAogICAgIHJlbmRlcmluZy9SZW5kZXJTY3JvbGxi
YXJQYXJ0LmNwcAogICAgIHJlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJUaGVtZS5jcHAKKyAgICBy
ZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwCiAgICAgcmVuZGVyaW5nL1JlbmRlclNsaWRl
ci5jcHAKICAgICByZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCiAgICAgcmVuZGVyaW5nL1JlbmRl
clRhYmxlQ2FwdGlvbi5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDRhNDVj
N2YwMzQwMDEyYWIzNjFlMDNiY2JhOTQyNjc0MmVjNTYwNzAuLjM3YjdlNWFjMjk5N2VhMzE2MWU5
NGFjODY0NjFhNmNlNjc2NWIzNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAt
MzkwNiw2ICszOTA2LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyUGFydC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU2Nyb2xsYmFyVGhlbWUuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU2Nyb2xsYmFyVGhlbWUuaCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNlYXJjaEZpZWxkLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJj
aEZpZWxkLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWxlY3Rpb25JbmZv
LmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmggXApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggMTRm
N2VkMTgwYTcxMmJlNTA0ODhhYzg1YzYxYzZjZTQyNmQ3ZDM4NC4uNjliYWE5MjlmZDY3MmM5MjYx
NjQ4ZjhiMjIwZjU3YmNlNjdkM2ZkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0
LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC0xMzA5LDYgKzEzMDksNyBA
QCBTT1VSQ0VTICs9IFwKICAgICByZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmNwcCBcCiAgICAg
cmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclBhcnQuY3BwIFwKICAgICByZW5kZXJpbmcvUmVuZGVy
U2Nyb2xsYmFyVGhlbWUuY3BwIFwKKyAgICByZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3Bw
IFwKICAgICByZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcCBcCiAgICAgcmVuZGVyaW5nL1JlbmRl
clRhYmxlLmNwcCBcCiAgICAgcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2FwdGlvbi5jcHAgXApAQCAt
MjUxNCw2ICsyNTE1LDcgQEAgSEVBREVSUyArPSBcCiAgICAgcmVuZGVyaW5nL1JlbmRlclNjcm9s
bGJhci5oIFwKICAgICByZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyUGFydC5oIFwKICAgICByZW5k
ZXJpbmcvUmVuZGVyU2Nyb2xsYmFyVGhlbWUuaCBcCisgICAgcmVuZGVyaW5nL1JlbmRlclNlYXJj
aEZpZWxkLmggXAogICAgIHJlbmRlcmluZy9SZW5kZXJTbGlkZXIuaCBcCiAgICAgcmVuZGVyaW5n
L1JlbmRlclRhYmxlQ2FwdGlvbi5oIFwKICAgICByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmgg
XApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCmluZGV4IGZmM2EzYTgyMmY2ZmIyOGQzNGRmZjlkZDg2MDc0Yjc1NzE4
YzMxMWUuLjdjMmJhN2Y1NDZiZmUyNzhlMzJhZDQ4OTM1ZmFjNzgxZDU3YTdmMWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKQEAgLTQ5MDAsNiArNDkwMCw4IEBACiAgICAgICAgICAgICAncmVuZGVyaW5nL1Jl
bmRlclNjcm9sbGJhclBhcnQuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNjcm9s
bGJhclRoZW1lLmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclRo
ZW1lLmgnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAnLAor
ICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5oJywKICAgICAgICAgICAg
ICdyZW5kZXJpbmcvUmVuZGVyU2VsZWN0aW9uSW5mby5oJywKICAgICAgICAgICAgICdyZW5kZXJp
bmcvUmVuZGVyU2xpZGVyLmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclNsaWRl
ci5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5k
ZXggMTdhZTBkZjUxNjY2NjFlYWMzYTFiNzBhYzJiM2Y3Zjg0NjAyMjdlNS4uZDA2ZGRhYWExNDYy
ZDg5Y2M1MWY5ZjNlZDZkOGJlZTQ4OWNlYWRlYyAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTQxNTAzLDYgKzQxNTAzLDYyIEBACiAJCQkJPgog
CQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xSZW5k
ZXJTZWFyY2hGaWVsZC5jcHAiCisJCQkJPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlO
YW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4K
KwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0i
UmVsZWFzZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJ
CQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9G
aWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iRGVi
dWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJ
CQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4K
KwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlO
YW1lPSJSZWxlYXNlX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9
InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wi
CisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRp
b24KKwkJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0i
dHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIK
KwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlv
bgorCQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0i
dHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIK
KwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPC9GaWxlPgorCQkJPEZpbGUK
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xSZW5kZXJTZWFyY2hGaWVsZC5oIgorCQkJ
CT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdc
UmVuZGVyU2VsZWN0aW9uSW5mby5oIgogCQkJCT4KIAkJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBlYzM2NjZkNWE1
YzVjNzg4MjMxMjczZjdhOTQ5ZGU5MDVmNDlmY2EyLi5kZjhkNWE4NjI1Yjg3NzJkYTI4ZjZjZGUw
YzI4MmRhOGYxNDJmZGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMTg5LDYgKzExODksOCBAQAogCQk0NTA5OUM0MTEzNzBB
NzgwMDA1OEQ1MTMgLyogSWNvblVSTC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0NTA5OUM0MDEzNzBBNzgwMDA1OEQ1MTMgLyogSWNvblVSTC5jcHAg
Ki87IH07CiAJCTQ1MENFQkYwMTUwNzNCQkUwMDJCQjE0OSAvKiBMYWJlbGFibGVFbGVtZW50LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1MENFQkVF
MTUwNzNCQkUwMDJCQjE0OSAvKiBMYWJlbGFibGVFbGVtZW50LmNwcCAqLzsgfTsKIAkJNDUwQ0VC
RjExNTA3M0JCRTAwMkJCMTQ5IC8qIExhYmVsYWJsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1MENFQkVGMTUwNzNCQkUwMDJCQjE0OSAv
KiBMYWJlbGFibGVFbGVtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJNDU4RkU0MDkxNTg5REYwQjAwNTYwOUU2IC8qIFJlbmRlclNlYXJjaEZp
ZWxkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1
OEZFNDA3MTU4OURGMEIwMDU2MDlFNiAvKiBSZW5kZXJTZWFyY2hGaWVsZC5jcHAgKi87IH07CisJ
CTQ1OEZFNDBBMTU4OURGMEIwMDU2MDlFNiAvKiBSZW5kZXJTZWFyY2hGaWVsZC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDU4RkU0MDgxNTg5REYwQjAw
NTYwOUU2IC8qIFJlbmRlclNlYXJjaEZpZWxkLmggKi87IH07CiAJCTQ1QkFDMkIwMTM2MEJCQUIw
MDVEQTI1OCAvKiBJY29uVVJMLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0NUJBQzJBRjEzNjBCQkFCMDA1REEyNTggLyogSWNvblVSTC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ1RkVBNUNGMTU2RERF
OEMwMDY1NDEwMSAvKiBEZWNpbWFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQ1RkVBNUNEMTU2RERFOEMwMDY1NDEwMSAvKiBEZWNpbWFsLmNwcCAq
LzsgfTsKIAkJNDVGRUE1RDAxNTZEREU4QzAwNjU0MTAxIC8qIERlY2ltYWwuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ1RkVBNUNFMTU2RERFOEMwMDY1
NDEwMSAvKiBEZWNpbWFsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTgyMTgsNiArODIyMCw4IEBACiAJCTQ1MDk5QzQwMTM3MEE3ODAwMDU4RDUx
MyAvKiBJY29uVVJMLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElj
b25VUkwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NTBDRUJFRTE1MDczQkJF
MDAyQkIxNDkgLyogTGFiZWxhYmxlRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBMYWJlbGFibGVFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNDUwQ0VCRUYxNTA3M0JCRTAwMkJCMTQ5IC8qIExhYmVsYWJsZUVsZW1lbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGFiZWxhYmxlRWxlbWVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NThGRTQwNzE1ODlERjBCMDA1NjA5RTYgLyogUmVu
ZGVyU2VhcmNoRmllbGQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UmVuZGVyU2VhcmNoRmllbGQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0NThG
RTQwODE1ODlERjBCMDA1NjA5RTYgLyogUmVuZGVyU2VhcmNoRmllbGQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU2VhcmNoRmllbGQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNDVCQUMyQUYxMzYwQkJBQjAwNURBMjU4IC8qIEljb25VUkwuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSWNvblVSTC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0NUZFQTVDRDE1NkRERThDMDA2NTQxMDEgLyogRGVjaW1hbC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZWNpbWFsLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDVGRUE1Q0UxNTZEREU4QzAwNjU0MTAxIC8qIERlY2ltYWwu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVjaW1hbC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjExMTYsNiArMjExMjAsOCBAQAogCQkJCUJDM0JFOTkyMEU5
QzFDN0MwMDgzNTU4OCAvKiBSZW5kZXJTY3JvbGxiYXJQYXJ0LmggKi8sCiAJCQkJQkMzQkU5QTQw
RTlDMjM5NjAwODM1NTg4IC8qIFJlbmRlclNjcm9sbGJhclRoZW1lLmNwcCAqLywKIAkJCQlCQzNC
RTk5ODBFOUMxRTVEMDA4MzU1ODggLyogUmVuZGVyU2Nyb2xsYmFyVGhlbWUuaCAqLywKKwkJCQk0
NThGRTQwNzE1ODlERjBCMDA1NjA5RTYgLyogUmVuZGVyU2VhcmNoRmllbGQuY3BwICovLAorCQkJ
CTQ1OEZFNDA4MTU4OURGMEIwMDU2MDlFNiAvKiBSZW5kZXJTZWFyY2hGaWVsZC5oICovLAogCQkJ
CTBGMTFBNTRFMEYzOTIzMzEwMEMzNzg4NCAvKiBSZW5kZXJTZWxlY3Rpb25JbmZvLmggKi8sCiAJ
CQkJQUIyNDdBNkEwQUZENjM4MzAwM0ZBNUZEIC8qIFJlbmRlclNsaWRlci5jcHAgKi8sCiAJCQkJ
QUIyNDdBNkIwQUZENjM4MzAwM0ZBNUZEIC8qIFJlbmRlclNsaWRlci5oICovLApAQCAtMjQyNzIs
NiArMjQyNzgsNyBAQAogCQkJCUJDM0JFOTk0MEU5QzFDN0MwMDgzNTU4OCAvKiBSZW5kZXJTY3Jv
bGxiYXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDM0JFOTk1MEU5QzFDN0MwMDgzNTU4OCAvKiBS
ZW5kZXJTY3JvbGxiYXJQYXJ0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzNCRTk5OTBFOUMxRTVE
MDA4MzU1ODggLyogUmVuZGVyU2Nyb2xsYmFyVGhlbWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ1
OEZFNDBBMTU4OURGMEIwMDU2MDlFNiAvKiBSZW5kZXJTZWFyY2hGaWVsZC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYxMUE1NEYwRjM5MjMzMTAwQzM3ODg0IC8qIFJlbmRlclNlbGVjdGlvbkluZm8u
aCBpbiBIZWFkZXJzICovLAogCQkJCUFCMjQ3QTZEMEFGRDYzODMwMDNGQTVGRCAvKiBSZW5kZXJT
bGlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOEM4RkFFMEREQ0QzMUIwMEI1OTJGNCAvKiBS
ZW5kZXJTdHlsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzQ2Nyw2ICsyNzQ3NCw3IEBACiAJCQkJ
QkMzQkU5OTMwRTlDMUM3QzAwODM1NTg4IC8qIFJlbmRlclNjcm9sbGJhci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQzNCRTlBQjBFOUMyNDIwMDA4MzU1ODggLyogUmVuZGVyU2Nyb2xsYmFyUGFy
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzNCRTlBNTBFOUMyMzk2MDA4MzU1ODggLyogUmVu
ZGVyU2Nyb2xsYmFyVGhlbWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDU4RkU0MDkxNTg5REYw
QjAwNTYwOUU2IC8qIFJlbmRlclNlYXJjaEZpZWxkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUFC
MjQ3QTZDMEFGRDYzODMwMDNGQTVGRCAvKiBSZW5kZXJTbGlkZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkM4QzhGQUQwRERDRDMxQjAwQjU5MkY0IC8qIFJlbmRlclN0eWxlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGNEU1NzE3MTMxMzI3NjIwMENGODVBRiAvKiBSZW5kZXJTVkdBbGxJbk9u
ZS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TElucHV0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQu
Y3BwCmluZGV4IDVjNmJmMTY1OTgzYzBjODIzMTQzMmYzNmE3ZmVkOGU1YWUxZjFlMzQuLjhkMTVj
YTI4ZGFiMjg0YTBlN2MwMWI1ZmVmODJhZmM5MDEzNDg5YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MSW5wdXRFbGVtZW50LmNwcApAQCAtNDU3LDcgKzQ1Nyw2IEBAIHZvaWQgSFRNTElucHV0
RWxlbWVudDo6c3VidHJlZUhhc0NoYW5nZWQoKQogewogICAgIEFTU0VSVChpc1RleHRGaWVsZCgp
KTsKICAgICBBU1NFUlQocmVuZGVyZXIoKSk7Ci0gICAgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lKiByZW5kZXJUZXh0Q29udHJvbCA9IHRvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKHJl
bmRlcmVyKCkpOwogCiAgICAgYm9vbCB3YXNDaGFuZ2VkID0gd2FzQ2hhbmdlZFNpbmNlTGFzdEZv
cm1Db250cm9sQ2hhbmdlRXZlbnQoKTsKICAgICBzZXRDaGFuZ2VkU2luY2VMYXN0Rm9ybUNvbnRy
b2xDaGFuZ2VFdmVudCh0cnVlKTsKQEAgLTQ3MywxMiArNDcyLDcgQEAgdm9pZCBIVE1MSW5wdXRF
bGVtZW50OjpzdWJ0cmVlSGFzQ2hhbmdlZCgpCiAgICAgLy8gUmVjYWxjIGZvciA6aW52YWxpZCBh
bmQgaGFzVW5hY2NlcHRhYmxlVmFsdWUoKSBjaGFuZ2UuCiAgICAgc2V0TmVlZHNTdHlsZVJlY2Fs
YygpOwogCi0gICAgaWYgKGNhbmNlbEJ1dHRvbkVsZW1lbnQoKSkKLSAgICAgICAgcmVuZGVyVGV4
dENvbnRyb2wtPnVwZGF0ZUNhbmNlbEJ1dHRvblZpc2liaWxpdHkoKTsKLQotICAgIC8vIElmIHRo
ZSBpbmNyZW1lbnRhbCBhdHRyaWJ1dGUgaXMgc2V0LCB0aGVuIGRpc3BhdGNoIHRoZSBzZWFyY2gg
ZXZlbnQKLSAgICBpZiAoc2VhcmNoRXZlbnRzU2hvdWxkQmVEaXNwYXRjaGVkKCkgJiYgaXNTZWFy
Y2hGaWVsZCgpICYmIG1faW5wdXRUeXBlKQotICAgICAgICBzdGF0aWNfY2FzdDxTZWFyY2hJbnB1
dFR5cGUqPihtX2lucHV0VHlwZS5nZXQoKSktPnN0YXJ0U2VhcmNoRXZlbnRUaW1lcigpOworICAg
IG1faW5wdXRUeXBlLT5zdWJ0cmVlSGFzQ2hhbmdlZCgpOwogCiAgICAgaWYgKCF3YXNDaGFuZ2Vk
ICYmIGZvY3VzZWQoKSkgewogICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+
ZnJhbWUoKSkKQEAgLTk3MiwxMSArOTY2LDYgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRQ
bGFjZWhvbGRlcihjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgIHNldEF0dHJpYnV0ZShwbGFjZWhv
bGRlckF0dHIsIHZhbHVlKTsKIH0KIAotYm9vbCBIVE1MSW5wdXRFbGVtZW50OjpzZWFyY2hFdmVu
dHNTaG91bGRCZURpc3BhdGNoZWQoKSBjb25zdAotewotICAgIHJldHVybiBoYXNBdHRyaWJ1dGUo
aW5jcmVtZW50YWxBdHRyKTsKLX0KLQogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1ZUZy
b21SZW5kZXJlcihjb25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIC8vIEZpbGUgdXBsb2FkIGNv
bnRyb2xzIHdpbGwgbmV2ZXIgdXNlIHRoaXMuCkBAIC0xMzMzLDkgKzEzMjIsNyBAQCBib29sIEhU
TUxJbnB1dEVsZW1lbnQ6OmlzUmVxdWlyZWRGb3JtQ29udHJvbCgpIGNvbnN0CiAKIHZvaWQgSFRN
TElucHV0RWxlbWVudDo6YWRkU2VhcmNoUmVzdWx0KCkKIHsKLSAgICBBU1NFUlQoaXNTZWFyY2hG
aWVsZCgpKTsKLSAgICBpZiAocmVuZGVyZXIoKSkKLSAgICAgICAgdG9SZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmUocmVuZGVyZXIoKSktPmFkZFNlYXJjaFJlc3VsdCgpOworICAgIG1faW5wdXRU
eXBlLT5hZGRTZWFyY2hSZXN1bHQoKTsKIH0KIAogdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpvblNl
YXJjaCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCmluZGV4IDk4NmQ5MWU0
NjYyYzNhOTg3NDFjYzhlNzcwYTkxZjg3ZTEwNTNmOWUuLmNiNTIzMWYyN2QwOWUxNGI4YzUyNzJm
ZGQxZGIxYmNiNjNlYzRiZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElu
cHV0RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5o
CkBAIC0yMjcsNyArMjI3LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBhZGRTZWFyY2hSZXN1bHQo
KTsKICAgICB2b2lkIG9uU2VhcmNoKCk7Ci0gICAgYm9vbCBzZWFyY2hFdmVudHNTaG91bGRCZURp
c3BhdGNoZWQoKSBjb25zdDsKIAogI2lmIEVOQUJMRShEQVRBTElTVCkKICAgICBIVE1MRWxlbWVu
dCogbGlzdCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5
cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCmluZGV4IGRmYzUwZTAw
YmQ4YWIwZDI3YWYzYzU5ZmI0NGE1MWYxMjA2ODg3OTcuLmRhZTAzZjNjYzI2ZDFhYTIwM2YxYmU2
ZDVlNzQ1YzlhMWQ0ZThkYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRU
eXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAKQEAgLTUyMyw2
ICs1MjMsMTAgQEAgdm9pZCBJbnB1dFR5cGU6OmFjY2Vzc0tleUFjdGlvbihib29sKQogICAgIGVs
ZW1lbnQoKS0+Zm9jdXMoZmFsc2UpOwogfQogCit2b2lkIElucHV0VHlwZTo6YWRkU2VhcmNoUmVz
dWx0KCkKK3sKK30KKwogdm9pZCBJbnB1dFR5cGU6OmF0dGFjaCgpCiB7CiB9CkBAIC04NTIsNiAr
ODU2LDEwIEBAIHZvaWQgSW5wdXRUeXBlOjpyZWFkb25seUF0dHJpYnV0ZUNoYW5nZWQoKQogewog
fQogCit2b2lkIElucHV0VHlwZTo6c3VidHJlZUhhc0NoYW5nZWQoKQoreworfQorCiBTdHJpbmcg
SW5wdXRUeXBlOjpkZWZhdWx0VG9vbFRpcCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFN0cmluZygp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuaCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmgKaW5kZXggMzg2MDUxZmFjYjcxMGE2YjU2YmRiN2E4ZjBh
NTk5N2M2MzUxYjIwMC4uYjY4ZDk3ZjVkNjQ1MzU1YjcxMDVjOWY0ODE2NjgyNzNmNDhhNDNmNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0lucHV0VHlwZS5oCkBAIC0yMDAsNyArMjAwLDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBoYW5kbGVCbHVyRXZlbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgYWNjZXNz
S2V5QWN0aW9uKGJvb2wgc2VuZE1vdXNlRXZlbnRzKTsKICAgICB2aXJ0dWFsIGJvb2wgY2FuQmVT
dWNjZXNzZnVsU3VibWl0QnV0dG9uKCk7Ci0KKyAgICB2aXJ0dWFsIHZvaWQgc3VidHJlZUhhc0No
YW5nZWQoKTsKIAogICAgIC8vIFNoYWRvdyB0cmVlIGhhbmRsaW5nCiAKQEAgLTIyMiw2ICsyMjIs
NyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZCgpOwogICAg
IHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRl
clN0eWxlKikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGFkZFNlYXJjaFJlc3VsdCgpOwogICAg
IHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7CiAgICAg
dmlydHVhbCB2b2lkIG1pbk9yTWF4QXR0cmlidXRlQ2hhbmdlZCgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9TZWFyY2hJbnB1dFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9TZWFyY2hJbnB1dFR5cGUuY3BwCmluZGV4IDZmNTAwZGFmM2Y3YjVmMWUwNWJkNGEyZDBiMmY5
ZWU0N2MzYjA0YTQuLjk1ODg3OGNlZDI3MDQ5ODE3MjdjYTUwMWNhNzQ5MmE3OWEzYTE4MDggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvU2VhcmNoSW5wdXRUeXBlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL1NlYXJjaElucHV0VHlwZS5jcHAKQEAgLTMyLDE0ICszMiwxNyBA
QAogI2luY2x1ZGUgIlNlYXJjaElucHV0VHlwZS5oIgogCiAjaW5jbHVkZSAiSFRNTElucHV0RWxl
bWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQu
aCIKLSNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaCIKKyNpbmNsdWRlICJS
ZW5kZXJTZWFyY2hGaWVsZC5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKICNpbmNsdWRlICJU
ZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKIGlu
bGluZSBTZWFyY2hJbnB1dFR5cGU6OlNlYXJjaElucHV0VHlwZShIVE1MSW5wdXRFbGVtZW50KiBl
bGVtZW50KQogICAgIDogQmFzZVRleHRJbnB1dFR5cGUoZWxlbWVudCkKICAgICAsIG1fc2VhcmNo
RXZlbnRUaW1lcih0aGlzLCAmU2VhcmNoSW5wdXRUeXBlOjpzZWFyY2hFdmVudFRpbWVyRmlyZWQp
CkBAIC01MSw2ICs1NCwxNyBAQCBQYXNzT3duUHRyPElucHV0VHlwZT4gU2VhcmNoSW5wdXRUeXBl
OjpjcmVhdGUoSFRNTElucHV0RWxlbWVudCogZWxlbWVudCkKICAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IFNlYXJjaElucHV0VHlwZShlbGVtZW50KSk7CiB9CiAKK3ZvaWQgU2VhcmNoSW5wdXRUeXBl
OjphZGRTZWFyY2hSZXN1bHQoKQoreworICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0g
ZWxlbWVudCgpLT5yZW5kZXJlcigpKQorICAgICAgICB0b1JlbmRlclNlYXJjaEZpZWxkKHJlbmRl
cmVyKS0+YWRkU2VhcmNoUmVzdWx0KCk7Cit9CisKK1JlbmRlck9iamVjdCogU2VhcmNoSW5wdXRU
eXBlOjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKikgY29u
c3QKK3sKKyAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyU2VhcmNoRmllbGQoZWxlbWVudCgp
KTsKK30KKwogY29uc3QgQXRvbWljU3RyaW5nJiBTZWFyY2hJbnB1dFR5cGU6OmZvcm1Db250cm9s
VHlwZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIElucHV0VHlwZU5hbWVzOjpzZWFyY2goKTsKQEAg
LTE1MSw1ICsxNjUsMTkgQEAgdm9pZCBTZWFyY2hJbnB1dFR5cGU6OnNlYXJjaEV2ZW50VGltZXJG
aXJlZChUaW1lcjxTZWFyY2hJbnB1dFR5cGU+KikKICAgICBlbGVtZW50KCktPm9uU2VhcmNoKCk7
CiB9CiAKK2Jvb2wgU2VhcmNoSW5wdXRUeXBlOjpzZWFyY2hFdmVudHNTaG91bGRCZURpc3BhdGNo
ZWQoKSBjb25zdAoreworICAgIHJldHVybiBlbGVtZW50KCktPmhhc0F0dHJpYnV0ZShpbmNyZW1l
bnRhbEF0dHIpOworfQorCit2b2lkIFNlYXJjaElucHV0VHlwZTo6c3VidHJlZUhhc0NoYW5nZWQo
KQoreworICAgIGlmIChtX2NhbmNlbEJ1dHRvbi5nZXQoKSkKKyAgICAgICAgdG9SZW5kZXJTZWFy
Y2hGaWVsZChlbGVtZW50KCktPnJlbmRlcmVyKCkpLT51cGRhdGVDYW5jZWxCdXR0b25WaXNpYmls
aXR5KCk7CisKKyAgICAvLyBJZiB0aGUgaW5jcmVtZW50YWwgYXR0cmlidXRlIGlzIHNldCwgdGhl
biBkaXNwYXRjaCB0aGUgc2VhcmNoIGV2ZW50CisgICAgaWYgKHNlYXJjaEV2ZW50c1Nob3VsZEJl
RGlzcGF0Y2hlZCgpKQorICAgICAgICBzdGFydFNlYXJjaEV2ZW50VGltZXIoKTsKK30KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9TZWFy
Y2hJbnB1dFR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvU2VhcmNoSW5wdXRUeXBlLmgKaW5k
ZXggYWIxOTEwM2FmZGZhZThlNTU2NjdiZjRjZTQxMzJmYjg4MDViODIyNS4uZWNlMzVhMjU5ZjA4
MWUwN2I0MGQ0N2NhNzdjMjg4MTYyNTViZjU1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9TZWFyY2hJbnB1dFR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1NlYXJjaElu
cHV0VHlwZS5oCkBAIC00MywxMSArNDMsMTIgQEAgY2xhc3MgU2VhcmNoSW5wdXRUeXBlIDogcHVi
bGljIEJhc2VUZXh0SW5wdXRUeXBlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxJ
bnB1dFR5cGU+IGNyZWF0ZShIVE1MSW5wdXRFbGVtZW50Kik7CiAKLSAgICB2b2lkIHN0YXJ0U2Vh
cmNoRXZlbnRUaW1lcigpOwogICAgIHZvaWQgc3RvcFNlYXJjaEV2ZW50VGltZXIoKTsKIAogcHJp
dmF0ZToKICAgICBTZWFyY2hJbnB1dFR5cGUoSFRNTElucHV0RWxlbWVudCopOworICAgIHZpcnR1
YWwgdm9pZCBhZGRTZWFyY2hSZXN1bHQoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFJlbmRlck9i
amVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopIGNvbnN0IE9W
RVJSSURFOwogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JtQ29udHJvbFR5cGUo
KSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUmVzcGVjdFNwZWVjaEF0
dHJpYnV0ZSgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCBpc1NlYXJjaEZpZWxkKCkgY29u
c3QgT1ZFUlJJREU7CkBAIC01Nyw4ICs1OCwxMSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgSFRN
TEVsZW1lbnQqIHJlc3VsdHNCdXR0b25FbGVtZW50KCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmly
dHVhbCBIVE1MRWxlbWVudCogY2FuY2VsQnV0dG9uRWxlbWVudCgpIGNvbnN0IE9WRVJSSURFOwog
ICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVLZXlkb3duRXZlbnQoS2V5Ym9hcmRFdmVudCopIE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCBzdWJ0cmVlSGFzQ2hhbmdlZCgpOwogCiAgICAgdm9pZCBz
ZWFyY2hFdmVudFRpbWVyRmlyZWQoVGltZXI8U2VhcmNoSW5wdXRUeXBlPiopOworICAgIGJvb2wg
c2VhcmNoRXZlbnRzU2hvdWxkQmVEaXNwYXRjaGVkKCkgY29uc3Q7CisgICAgdm9pZCBzdGFydFNl
YXJjaEV2ZW50VGltZXIoKTsKIAogICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gbV9yZXN1bHRzQnV0
dG9uOwogICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gbV9jYW5jZWxCdXR0b247CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNw
cAppbmRleCAxMDBkYWViNjQ3YjlkNzdhYTRjMWI0MzEyYmM5YzVlNWZiMTg3YWQ2Li41ZDI2ODQx
YzI0MzU3MDU1ZjdiNWI5OGI3MTgxOGIzMDU3YzFhZDEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAKQEAgLTM3
LDcgKzM3LDcgQEAKICNpbmNsdWRlICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCiAjaW5jbHVkZSAi
TW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuaCIKKyNpbmNsdWRlICJSZW5kZXJTZWFyY2hGaWVsZC5oIgogI2luY2x1
ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVk
ZSAiU2Nyb2xsYmFyVGhlbWUuaCIKQEAgLTE1MSw3ICsxNTEsNyBAQCB2b2lkIFNlYXJjaEZpZWxk
UmVzdWx0c0J1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2ZW50KQog
ICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBl
dmVudC0+aXNNb3VzZUV2ZW50KCkgJiYgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KS0+
YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgewogICAgICAgICBpbnB1dC0+Zm9jdXMoKTsKICAgICAg
ICAgaW5wdXQtPnNlbGVjdCgpOwotICAgICAgICBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUq
IHJlbmRlcmVyID0gdG9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUoaW5wdXQtPnJlbmRlcmVy
KCkpOworICAgICAgICBSZW5kZXJTZWFyY2hGaWVsZCogcmVuZGVyZXIgPSB0b1JlbmRlclNlYXJj
aEZpZWxkKGlucHV0LT5yZW5kZXJlcigpKTsKICAgICAgICAgaWYgKHJlbmRlcmVyLT5wb3B1cElz
VmlzaWJsZSgpKQogICAgICAgICAgICAgcmVuZGVyZXItPmhpZGVQb3B1cCgpOwogICAgICAgICBl
bHNlIGlmIChpbnB1dC0+bWF4UmVzdWx0cygpID4gMCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRm9y
bVN1Ym1pc3Npb24uY3BwCmluZGV4IGRhMDM5ODdlZTVlOTQ1NDE2ZjE1MTg0NDI2ZGUyMTZlZGRh
YzU1OTYuLjI0N2NlNDA2OGFkNWNmYWI3ZjY5ZDIxNTU3MDMxMjkwMjQzMzc3ZDkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0Zvcm1TdWJtaXNzaW9uLmNwcApAQCAtMTkwLDggKzE5MCw3IEBAIFBh
c3NSZWZQdHI8Rm9ybVN1Ym1pc3Npb24+IEZvcm1TdWJtaXNzaW9uOjpjcmVhdGUoSFRNTEZvcm1F
bGVtZW50KiBmb3JtLCBjb25zdCBBCiAgICAgICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1
dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihjb250cm9sKTsKICAgICAgICAgICAg
IGlmIChpbnB1dC0+aXNUZXh0RmllbGQoKSkgewogICAgICAgICAgICAgICAgIGZvcm1WYWx1ZXMu
YXBwZW5kKHBhaXI8U3RyaW5nLCBTdHJpbmc+KGlucHV0LT5uYW1lKCkuc3RyaW5nKCksIGlucHV0
LT52YWx1ZSgpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGlucHV0LT5pc1NlYXJjaEZpZWxkKCkp
Ci0gICAgICAgICAgICAgICAgICAgIGlucHV0LT5hZGRTZWFyY2hSZXN1bHQoKTsKKyAgICAgICAg
ICAgICAgICBpbnB1dC0+YWRkU2VhcmNoUmVzdWx0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBpZiAoaW5wdXQtPmlzUGFzc3dvcmRGaWVsZCgpICYmICFpbnB1dC0+dmFsdWUoKS5pc0Vt
cHR5KCkpCiAgICAgICAgICAgICAgICAgY29udGFpbnNQYXNzd29yZERhdGEgPSB0cnVlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAKaW5kZXggODQ4
ZmMyMTE5N2MyYTdkMjRmMjY0OGRmNzAyMDUyOWYzYzg4MGQzYi4uMjcwNGNkYzAzOGZkZTI4ZWQy
Yzk0M2Y5ZjNmMzQ3MjM2YWQ0ZGM1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNlYXJjaEZpZWxkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU2VhcmNoRmllbGQuY3BwCkBAIC0yMiw3ICsyMiw3IEBACiAgKi8KIAogI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oIgorI2lu
Y2x1ZGUgIlJlbmRlclNlYXJjaEZpZWxkLmgiCiAKICNpbmNsdWRlICJDU1NGb250U2VsZWN0b3Iu
aCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCkBAIC01MSwzNSArNTEsMTkgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1WaXNpYmxl
UG9zaXRpb24gUmVuZGVyVGV4dENvbnRyb2xJbm5lckJsb2NrOjpwb3NpdGlvbkZvclBvaW50KGNv
bnN0IExheW91dFBvaW50JiBwb2ludCkKLXsKLSAgICBMYXlvdXRQb2ludCBjb250ZW50c1BvaW50
KHBvaW50KTsKLQotICAgIC8vIE11bHRpbGluZSB0ZXh0IGNvbnRyb2xzIGhhdmUgdGhlIHNjcm9s
bCBvbiBzaGFkb3dBbmNlc3Rvck5vZGUsIHNvIHdlIG5lZWQgdG8gdGFrZSB0aGF0Ci0gICAgLy8g
aW50byBhY2NvdW50IGhlcmUuCi0gICAgaWYgKG1fbXVsdGlMaW5lKSB7Ci0gICAgICAgIFJlbmRl
clRleHRDb250cm9sKiByZW5kZXJlciA9IHRvUmVuZGVyVGV4dENvbnRyb2wobm9kZSgpLT5zaGFk
b3dBbmNlc3Rvck5vZGUoKS0+cmVuZGVyZXIoKSk7Ci0gICAgICAgIGlmIChyZW5kZXJlci0+aGFz
T3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgICAgICBjb250ZW50c1BvaW50ICs9IHJlbmRlcmVyLT5z
Y3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gUmVuZGVyQmxvY2s6
OnBvc2l0aW9uRm9yUG9pbnQoY29udGVudHNQb2ludCk7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KIAotUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmUoTm9kZSogbm9kZSkKLSAgICA6IFJlbmRlclRleHRDb250cm9sKG5v
ZGUpCitSZW5kZXJTZWFyY2hGaWVsZDo6UmVuZGVyU2VhcmNoRmllbGQoTm9kZSogbm9kZSkKKyAg
ICA6IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShub2RlKQogICAgICwgbV9zZWFyY2hQb3B1
cElzVmlzaWJsZShmYWxzZSkKLSAgICAsIG1fc2hvdWxkRHJhd0NhcHNMb2NrSW5kaWNhdG9yKGZh
bHNlKQotICAgICwgbV9kZXNpcmVkSW5uZXJUZXh0SGVpZ2h0KC0xKQogICAgICwgbV9zZWFyY2hQ
b3B1cCgwKQogewogICAgIEFTU0VSVChub2RlLT5pc0hUTUxFbGVtZW50KCkpOwogICAgIEFTU0VS
VChub2RlLT50b0lucHV0RWxlbWVudCgpKTsKKyAgICBBU1NFUlQobm9kZS0+dG9JbnB1dEVsZW1l
bnQoKS0+aXNTZWFyY2hGaWVsZCgpKTsKIH0KIAotUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
Ojp+UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKCkKK1JlbmRlclNlYXJjaEZpZWxkOjp+UmVu
ZGVyU2VhcmNoRmllbGQoKQogewogICAgIGlmIChtX3NlYXJjaFBvcHVwKSB7CiAgICAgICAgIG1f
c2VhcmNoUG9wdXAtPnBvcHVwTWVudSgpLT5kaXNjb25uZWN0Q2xpZW50KCk7CkBAIC04NywzOCAr
NzEsMTcgQEAgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp+UmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lKCkKICAgICB9CiB9CiAKLWlubGluZSBIVE1MRWxlbWVudCogUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lOjpjb250YWluZXJFbGVtZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
aW5wdXRFbGVtZW50KCktPmNvbnRhaW5lckVsZW1lbnQoKTsKLX0KLQotaW5saW5lIEhUTUxFbGVt
ZW50KiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmlubmVyQmxvY2tFbGVtZW50KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gaW5wdXRFbGVtZW50KCktPmlubmVyQmxvY2tFbGVtZW50KCk7Ci19
Ci0KLWlubGluZSBIVE1MRWxlbWVudCogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppbm5l
clNwaW5CdXR0b25FbGVtZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gaW5wdXRFbGVtZW50KCkt
PmlubmVyU3BpbkJ1dHRvbkVsZW1lbnQoKTsKLX0KLQotaW5saW5lIEhUTUxFbGVtZW50KiBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnJlc3VsdHNCdXR0b25FbGVtZW50KCkgY29uc3QKK2lu
bGluZSBIVE1MRWxlbWVudCogUmVuZGVyU2VhcmNoRmllbGQ6OnJlc3VsdHNCdXR0b25FbGVtZW50
KCkgY29uc3QKIHsKICAgICByZXR1cm4gaW5wdXRFbGVtZW50KCktPnJlc3VsdHNCdXR0b25FbGVt
ZW50KCk7CiB9CiAKLWlubGluZSBIVE1MRWxlbWVudCogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lOjpjYW5jZWxCdXR0b25FbGVtZW50KCkgY29uc3QKK2lubGluZSBIVE1MRWxlbWVudCogUmVu
ZGVyU2VhcmNoRmllbGQ6OmNhbmNlbEJ1dHRvbkVsZW1lbnQoKSBjb25zdAogewogICAgIHJldHVy
biBpbnB1dEVsZW1lbnQoKS0+Y2FuY2VsQnV0dG9uRWxlbWVudCgpOwogfQogCi1SZW5kZXJTdHls
ZSogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp0ZXh0QmFzZVN0eWxlKCkgY29uc3QKLXsK
LSAgICBIVE1MRWxlbWVudCogaW5uZXJCbG9jayA9IGlubmVyQmxvY2tFbGVtZW50KCk7Ci0gICAg
cmV0dXJuIGlubmVyQmxvY2sgPyBpbm5lckJsb2NrLT5yZW5kZXJlcigpLT5zdHlsZSgpIDogc3R5
bGUoKTsKLX0KLQotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmFkZFNlYXJjaFJl
c3VsdCgpCit2b2lkIFJlbmRlclNlYXJjaEZpZWxkOjphZGRTZWFyY2hSZXN1bHQoKQogewogICAg
IEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gaW5wdXRFbGVtZW50KCk7CiAgICAgaWYgKGlucHV0
LT5tYXhSZXN1bHRzKCkgPD0gMCkKQEAgLTE0OSw3ICsxMTIsNyBAQCB2b2lkIFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6YWRkU2VhcmNoUmVzdWx0KCkKICAgICBtX3NlYXJjaFBvcHVwLT5z
YXZlUmVjZW50U2VhcmNoZXMobmFtZSwgbV9yZWNlbnRTZWFyY2hlcyk7CiB9CiAKLXZvaWQgUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzaG93UG9wdXAoKQordm9pZCBSZW5kZXJTZWFyY2hG
aWVsZDo6c2hvd1BvcHVwKCkKIHsKICAgICBpZiAobV9zZWFyY2hQb3B1cElzVmlzaWJsZSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTc4LDI1OCArMTQxLDEzIEBAIHZvaWQgUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjpzaG93UG9wdXAoKQogICAgIG1fc2VhcmNoUG9wdXAtPnBvcHVwTWVudSgp
LT5zaG93KHBpeGVsU25hcHBlZEludFJlY3QoYWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKSksIGRv
Y3VtZW50KCktPnZpZXcoKSwgLTEpOwogfQogCi12b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZTo6aGlkZVBvcHVwKCkKK3ZvaWQgUmVuZGVyU2VhcmNoRmllbGQ6OmhpZGVQb3B1cCgpCiB7
CiAgICAgaWYgKG1fc2VhcmNoUG9wdXApCiAgICAgICAgIG1fc2VhcmNoUG9wdXAtPnBvcHVwTWVu
dSgpLT5oaWRlKCk7CiB9CiAKLXZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpwYWlu
dChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQot
ewotICAgIFJlbmRlclRleHRDb250cm9sOjpwYWludChwYWludEluZm8sIHBhaW50T2Zmc2V0KTsK
LQotICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZCAm
JiBtX3Nob3VsZERyYXdDYXBzTG9ja0luZGljYXRvcikgewotICAgICAgICBMYXlvdXRSZWN0IGNv
bnRlbnRzUmVjdCA9IGNvbnRlbnRCb3hSZWN0KCk7Ci0KLSAgICAgICAgLy8gQ2VudGVyIHZlcnRp
Y2FsbHkgbGlrZSB0aGUgdGV4dC4KLSAgICAgICAgY29udGVudHNSZWN0LnNldFkoKGhlaWdodCgp
IC0gY29udGVudHNSZWN0LmhlaWdodCgpKSAvIDIpOwotCi0gICAgICAgIC8vIENvbnZlcnQgdGhl
IHJlY3QgaW50byB0aGUgY29vcmRzIHVzZWQgZm9yIHBhaW50aW5nIHRoZSBjb250ZW50Ci0gICAg
ICAgIGNvbnRlbnRzUmVjdC5tb3ZlQnkocGFpbnRPZmZzZXQgKyBsb2NhdGlvbigpKTsKLSAgICAg
ICAgdGhlbWUoKS0+cGFpbnRDYXBzTG9ja0luZGljYXRvcih0aGlzLCBwYWludEluZm8sIHBpeGVs
U25hcHBlZEludFJlY3QoY29udGVudHNSZWN0KSk7Ci0gICAgfQotfQotCi12b2lkIFJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZTo6bGF5b3V0KCkKLXsKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IHJlbW92ZSB0aGUgaGVpZ2h0LXJlbGF0ZWQgaGFja3MgaW4gbGF5b3V0KCkgYW5kCi0gICAgLy8g
c3R5bGVEaWRDaGFuZ2UoKS4gV2UgbmVlZCB0aGVtIGJlY2F1c2UKLSAgICAvLyAtIENlbnRlciB0
aGUgaW5uZXIgZWxlbWVudHMgdmVydGljYWxseSBpZiB0aGUgaW5wdXQgaGVpZ2h0IGlzIHRhbGxl
ciB0aGFuCi0gICAgLy8gICB0aGUgaW50cmluc2ljIGhlaWdodCBvZiB0aGUgaW5uZXIgZWxlbWVu
dHMuCi0gICAgLy8gLSBTaHJpbmsgdGhlIGlubmVyIGVsbWVudCBoZWlnaHRzIGlmIHRoZSBpbnB1
dCBoZWlnaHQgaXMgc2FtbGxlciB0aGFuIHRoZQotICAgIC8vICAgaW50cmluc2ljIGhlaWdodHMg
b2YgdGhlIGlubmVyIGVsZW1lbnRzLgotCi0gICAgLy8gV2UgZG9uJ3QgaG9ub3IgcGFkZGluZ3Mg
YW5kIGJvcmRlcnMgZm9yIHRleHRmaWVsZHMgd2l0aG91dCBkZWNvcmF0aW9ucwotICAgIC8vIGFu
ZCB0eXBlPXNlYXJjaCBpZiB0aGUgdGV4dCBoZWlnaHQgaXMgdGFsbGVyIHRoYW4gdGhlIGNvbnRl
bnRIZWlnaHQoKQotICAgIC8vIGJlY2F1c2Ugb2YgY29tcGFiaWxpdHkuCi0KLSAgICBSZW5kZXJC
bG9jazo6bGF5b3V0QmxvY2soZmFsc2UpOwotCi0gICAgUmVuZGVyQm94KiBpbm5lclRleHRSZW5k
ZXJlciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVyQm94KCk7Ci0gICAgQVNTRVJUKGlubmVy
VGV4dFJlbmRlcmVyKTsKLSAgICBSZW5kZXJCb3gqIGlubmVyQmxvY2tSZW5kZXJlciA9IGlubmVy
QmxvY2tFbGVtZW50KCkgPyBpbm5lckJsb2NrRWxlbWVudCgpLT5yZW5kZXJCb3goKSA6IDA7Ci0g
ICAgSFRNTEVsZW1lbnQqIGNvbnRhaW5lciA9IGNvbnRhaW5lckVsZW1lbnQoKTsKLSAgICBSZW5k
ZXJCb3gqIGNvbnRhaW5lclJlbmRlcmVyID0gY29udGFpbmVyID8gY29udGFpbmVyLT5yZW5kZXJC
b3goKSA6IDA7Ci0KLSAgICAvLyBTZXQgdGhlIHRleHQgYmxvY2sgaGVpZ2h0Ci0gICAgTGF5b3V0
VW5pdCBkZXNpcmVkSGVpZ2h0ID0gdGV4dEJsb2NrSGVpZ2h0KCk7Ci0gICAgTGF5b3V0VW5pdCBj
dXJyZW50SGVpZ2h0ID0gaW5uZXJUZXh0UmVuZGVyZXItPmhlaWdodCgpOwotCi0gICAgTGF5b3V0
VW5pdCBoZWlnaHRMaW1pdCA9IChpbnB1dEVsZW1lbnQoKS0+aXNTZWFyY2hGaWVsZCgpIHx8ICFj
b250YWluZXIpID8gaGVpZ2h0KCkgOiBjb250ZW50SGVpZ2h0KCk7Ci0gICAgaWYgKGN1cnJlbnRI
ZWlnaHQgPiBoZWlnaHRMaW1pdCkgewotICAgICAgICBpZiAoZGVzaXJlZEhlaWdodCAhPSBjdXJy
ZW50SGVpZ2h0KQotICAgICAgICAgICAgc2V0TmVlZHNMYXlvdXQodHJ1ZSwgTWFya09ubHlUaGlz
KTsKLQotICAgICAgICBpbm5lclRleHRSZW5kZXJlci0+c3R5bGUoKS0+c2V0SGVpZ2h0KExlbmd0
aChkZXNpcmVkSGVpZ2h0LCBGaXhlZCkpOwotICAgICAgICBtX2Rlc2lyZWRJbm5lclRleHRIZWln
aHQgPSBkZXNpcmVkSGVpZ2h0OwotICAgICAgICBpZiAoaW5uZXJCbG9ja1JlbmRlcmVyKQotICAg
ICAgICAgICAgaW5uZXJCbG9ja1JlbmRlcmVyLT5zdHlsZSgpLT5zZXRIZWlnaHQoTGVuZ3RoKGRl
c2lyZWRIZWlnaHQsIEZpeGVkKSk7Ci0gICAgfQotICAgIC8vIFRoZSBjb250YWluZXIgbWlnaHQg
YmUgdGFsbGVyIGJlY2F1c2Ugb2YgZGVjb3JhdGlvbiBlbGVtZW50cy4KLSAgICBpZiAoY29udGFp
bmVyUmVuZGVyZXIpIHsKLSAgICAgICAgY29udGFpbmVyUmVuZGVyZXItPmxheW91dElmTmVlZGVk
KCk7Ci0gICAgICAgIExheW91dFVuaXQgY29udGFpbmVySGVpZ2h0ID0gY29udGFpbmVyUmVuZGVy
ZXItPmhlaWdodCgpOwotICAgICAgICBpZiAoY29udGFpbmVySGVpZ2h0ID4gaGVpZ2h0TGltaXQp
IHsKLSAgICAgICAgICAgIGNvbnRhaW5lclJlbmRlcmVyLT5zdHlsZSgpLT5zZXRIZWlnaHQoTGVu
Z3RoKGhlaWdodExpbWl0LCBGaXhlZCkpOwotICAgICAgICAgICAgc2V0TmVlZHNMYXlvdXQodHJ1
ZSwgTWFya09ubHlUaGlzKTsKLSAgICAgICAgfSBlbHNlIGlmIChjb250YWluZXJSZW5kZXJlci0+
aGVpZ2h0KCkgPCBjb250ZW50SGVpZ2h0KCkpIHsKLSAgICAgICAgICAgIGNvbnRhaW5lclJlbmRl
cmVyLT5zdHlsZSgpLT5zZXRIZWlnaHQoTGVuZ3RoKGNvbnRlbnRIZWlnaHQoKSwgRml4ZWQpKTsK
LSAgICAgICAgICAgIHNldE5lZWRzTGF5b3V0KHRydWUsIE1hcmtPbmx5VGhpcyk7Ci0gICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgY29udGFpbmVyUmVuZGVyZXItPnN0eWxlKCktPnNldEhlaWdo
dChMZW5ndGgoY29udGFpbmVySGVpZ2h0LCBGaXhlZCkpOwotICAgIH0KLQotICAgIC8vIElmIHdl
IG5lZWQgYW5vdGhlciBsYXlvdXQgcGFzcywgd2UgaGF2ZSBjaGFuZ2VkIG9uZSBvZiBjaGlsZHJl
bidzIGhlaWdodCBzbyB3ZSBuZWVkIHRvIHJlbGF5b3V0IHRoZW0uCi0gICAgaWYgKG5lZWRzTGF5
b3V0KCkpCi0gICAgICAgIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayh0cnVlKTsKLQotICAgIC8v
IENlbnRlciB0aGUgY2hpbGQgYmxvY2sgdmVydGljYWxseQotICAgIGN1cnJlbnRIZWlnaHQgPSBp
bm5lclRleHRSZW5kZXJlci0+aGVpZ2h0KCk7Ci0gICAgaWYgKCFjb250YWluZXIgJiYgY3VycmVu
dEhlaWdodCAhPSBjb250ZW50SGVpZ2h0KCkpIHsKLSAgICAgICAgTGF5b3V0VW5pdCBoZWlnaHRE
aWZmID0gY3VycmVudEhlaWdodCAtIGNvbnRlbnRIZWlnaHQoKTsKLSAgICAgICAgaW5uZXJUZXh0
UmVuZGVyZXItPnNldFkoaW5uZXJUZXh0UmVuZGVyZXItPnkoKSAtIChoZWlnaHREaWZmIC8gMiAr
IGxheW91dE1vZChoZWlnaHREaWZmLCAyKSkpOwotICAgIH0gZWxzZSBpZiAoaW5wdXRFbGVtZW50
KCktPmlzU2VhcmNoRmllbGQoKSAmJiBjb250YWluZXJSZW5kZXJlciAmJiBjb250YWluZXJSZW5k
ZXJlci0+aGVpZ2h0KCkgPiBjb250ZW50SGVpZ2h0KCkpIHsKLSAgICAgICAgLy8gQSBxdWlyayBm
b3IgZmluZC1pbi1wYWdlIGJveCBvbiBTYWZhcmkgV2luZG93cy4KLSAgICAgICAgLy8gaHR0cDov
L3dlYmtpdC5vcmcvYi82MzE1NwotICAgICAgICBMYXlvdXRVbml0IGhlaWdodERpZmYgPSBjb250
YWluZXJSZW5kZXJlci0+aGVpZ2h0KCkgLSBjb250ZW50SGVpZ2h0KCk7Ci0gICAgICAgIGNvbnRh
aW5lclJlbmRlcmVyLT5zZXRZKGNvbnRhaW5lclJlbmRlcmVyLT55KCkgLSAoaGVpZ2h0RGlmZiAv
IDIgKyBsYXlvdXRNb2QoaGVpZ2h0RGlmZiwgMikpKTsKLSAgICB9Ci0KLSAgICAvLyBJZ25vcmVz
IHRoZSBwYWRkaW5ncyBmb3IgdGhlIGlubmVyIHNwaW4gYnV0dG9uLgotICAgIGlmIChSZW5kZXJC
b3gqIGlubmVyU3BpbkJveCA9IGlubmVyU3BpbkJ1dHRvbkVsZW1lbnQoKSA/IGlubmVyU3BpbkJ1
dHRvbkVsZW1lbnQoKS0+cmVuZGVyQm94KCkgOiAwKSB7Ci0gICAgICAgIFJlbmRlckJveCogcGFy
ZW50Qm94ID0gaW5uZXJTcGluQm94LT5wYXJlbnRCb3goKTsKLSAgICAgICAgaWYgKGNvbnRhaW5l
clJlbmRlcmVyICYmICFjb250YWluZXJSZW5kZXJlci0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpKQotICAgICAgICAgICAgaW5uZXJTcGluQm94LT5zZXRMb2NhdGlvbihMYXlvdXRQ
b2ludCgtcGFkZGluZ0xlZnQoKSwgLXBhZGRpbmdUb3AoKSkpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBpbm5lclNwaW5Cb3gtPnNldExvY2F0aW9uKExheW91dFBvaW50KHBhcmVudEJveC0+
d2lkdGgoKSAtIGlubmVyU3BpbkJveC0+d2lkdGgoKSArIHBhZGRpbmdSaWdodCgpLCAtcGFkZGlu
Z1RvcCgpKSk7Ci0gICAgICAgIGlubmVyU3BpbkJveC0+c2V0SGVpZ2h0KGhlaWdodCgpIC0gYm9y
ZGVyVG9wKCkgLSBib3JkZXJCb3R0b20oKSk7Ci0gICAgfQotCi0gICAgSFRNTEVsZW1lbnQqIHBs
YWNlaG9sZGVyRWxlbWVudCA9IGlucHV0RWxlbWVudCgpLT5wbGFjZWhvbGRlckVsZW1lbnQoKTsK
LSAgICBpZiAoUmVuZGVyQm94KiBwbGFjZWhvbGRlckJveCA9IHBsYWNlaG9sZGVyRWxlbWVudCA/
IHBsYWNlaG9sZGVyRWxlbWVudC0+cmVuZGVyQm94KCkgOiAwKSB7Ci0gICAgICAgIHBsYWNlaG9s
ZGVyQm94LT5zdHlsZSgpLT5zZXRXaWR0aChMZW5ndGgoaW5uZXJUZXh0UmVuZGVyZXItPndpZHRo
KCkgLSBwbGFjZWhvbGRlckJveC0+Ym9yZGVyQW5kUGFkZGluZ1dpZHRoKCksIEZpeGVkKSk7Ci0g
ICAgICAgIHBsYWNlaG9sZGVyQm94LT5zdHlsZSgpLT5zZXRIZWlnaHQoTGVuZ3RoKGlubmVyVGV4
dFJlbmRlcmVyLT5oZWlnaHQoKSAtIHBsYWNlaG9sZGVyQm94LT5ib3JkZXJBbmRQYWRkaW5nSGVp
Z2h0KCksIEZpeGVkKSk7Ci0gICAgICAgIGJvb2wgcGxhY2Vob2xkZXJCb3hIYWRMYXlvdXQgPSBw
bGFjZWhvbGRlckJveC0+ZXZlckhhZExheW91dCgpOwotICAgICAgICBwbGFjZWhvbGRlckJveC0+
bGF5b3V0SWZOZWVkZWQoKTsKLSAgICAgICAgTGF5b3V0UG9pbnQgdGV4dE9mZnNldCA9IGlubmVy
VGV4dFJlbmRlcmVyLT5sb2NhdGlvbigpOwotICAgICAgICBpZiAoaW5uZXJCbG9ja0VsZW1lbnQo
KSAmJiBpbm5lckJsb2NrRWxlbWVudCgpLT5yZW5kZXJCb3goKSkKLSAgICAgICAgICAgIHRleHRP
ZmZzZXQgKz0gdG9MYXlvdXRTaXplKGlubmVyQmxvY2tFbGVtZW50KCktPnJlbmRlckJveCgpLT5s
b2NhdGlvbigpKTsKLSAgICAgICAgaWYgKGNvbnRhaW5lclJlbmRlcmVyKQotICAgICAgICAgICAg
dGV4dE9mZnNldCArPSB0b0xheW91dFNpemUoY29udGFpbmVyUmVuZGVyZXItPmxvY2F0aW9uKCkp
OwotICAgICAgICBwbGFjZWhvbGRlckJveC0+c2V0TG9jYXRpb24odGV4dE9mZnNldCk7Ci0KLSAg
ICAgICAgaWYgKCFwbGFjZWhvbGRlckJveEhhZExheW91dCAmJiBwbGFjZWhvbGRlckJveC0+Y2hl
Y2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCkpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgYXNzdW1l
cyBhIHNoYWRvdyB0cmVlIHdpdGhvdXQgZmxvYXRzLiBJZiBmbG9hdHMgYXJlIGFkZGVkLCB0aGUK
LSAgICAgICAgICAgIC8vIGxvZ2ljIHNob3VsZCBiZSBzaGFyZWQgd2l0aCBSZW5kZXJCbG9jazo6
bGF5b3V0QmxvY2tDaGlsZC4KLSAgICAgICAgICAgIHBsYWNlaG9sZGVyQm94LT5yZXBhaW50KCk7
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3Vs
dCYgcmVzdWx0LCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5
b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24p
Ci17Ci0gICAgaWYgKCFSZW5kZXJUZXh0Q29udHJvbDo6bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVz
dWx0LCBwb2ludEluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldCwgaGl0VGVzdEFjdGlvbikp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFNheSB0aGF0IHdlIGhpdCB0aGUgaW5u
ZXIgdGV4dCBlbGVtZW50IGlmCi0gICAgLy8gIC0gd2UgaGl0IGEgbm9kZSBpbnNpZGUgdGhlIGlu
bmVyIHRleHQgZWxlbWVudCwKLSAgICAvLyAgLSB3ZSBoaXQgdGhlIDxpbnB1dD4gZWxlbWVudCAo
ZS5nLiB3ZSdyZSBvdmVyIHRoZSBib3JkZXIgb3IgcGFkZGluZyksIG9yCi0gICAgLy8gIC0gd2Ug
aGl0IHJlZ2lvbnMgbm90IGluIGFueSBkZWNvcmF0aW9uIGJ1dHRvbnMuCi0gICAgSFRNTEVsZW1l
bnQqIGNvbnRhaW5lciA9IGNvbnRhaW5lckVsZW1lbnQoKTsKLSAgICBpZiAocmVzdWx0LmlubmVy
Tm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihpbm5lclRleHRFbGVtZW50KCkpIHx8IHJlc3VsdC5pbm5l
ck5vZGUoKSA9PSBub2RlKCkgfHwgKGNvbnRhaW5lciAmJiBjb250YWluZXIgPT0gcmVzdWx0Lmlu
bmVyTm9kZSgpKSkgewotICAgICAgICBMYXlvdXRQb2ludCBwb2ludEluUGFyZW50ID0gcG9pbnRJ
bkNvbnRhaW5lcjsKLSAgICAgICAgaWYgKGNvbnRhaW5lciAmJiBpbm5lckJsb2NrRWxlbWVudCgp
KSB7Ci0gICAgICAgICAgICBpZiAoaW5uZXJCbG9ja0VsZW1lbnQoKS0+cmVuZGVyQm94KCkpCi0g
ICAgICAgICAgICAgICAgcG9pbnRJblBhcmVudCAtPSB0b0xheW91dFNpemUoaW5uZXJCbG9ja0Vs
ZW1lbnQoKS0+cmVuZGVyQm94KCktPmxvY2F0aW9uKCkpOwotICAgICAgICAgICAgaWYgKGNvbnRh
aW5lci0+cmVuZGVyQm94KCkpCi0gICAgICAgICAgICAgICAgcG9pbnRJblBhcmVudCAtPSB0b0xh
eW91dFNpemUoY29udGFpbmVyLT5yZW5kZXJCb3goKS0+bG9jYXRpb24oKSk7Ci0gICAgICAgIH0K
LSAgICAgICAgaGl0SW5uZXJUZXh0RWxlbWVudChyZXN1bHQsIHBvaW50SW5QYXJlbnQsIGFjY3Vt
dWxhdGVkT2Zmc2V0KTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlm
ZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQotewotICAgIG1fZGVzaXJlZElubmVyVGV4
dEhlaWdodCA9IC0xOwotICAgIFJlbmRlclRleHRDb250cm9sOjpzdHlsZURpZENoYW5nZShkaWZm
LCBvbGRTdHlsZSk7Ci0KLSAgICAvLyBXZSBtYXkgaGF2ZSBzZXQgdGhlIHdpZHRoIGFuZCB0aGUg
aGVpZ2h0IGluIHRoZSBvbGQgc3R5bGUgaW4gbGF5b3V0KCkuCi0gICAgLy8gUmVzZXQgdGhlbSBu
b3cgdG8gYXZvaWQgZ2V0dGluZyBhIHNwdXJpb3VzIGxheW91dCBoaW50LgotICAgIEhUTUxFbGVt
ZW50KiBpbm5lckJsb2NrID0gaW5uZXJCbG9ja0VsZW1lbnQoKTsKLSAgICBpZiAoUmVuZGVyT2Jq
ZWN0KiBpbm5lckJsb2NrUmVuZGVyZXIgPSBpbm5lckJsb2NrID8gaW5uZXJCbG9jay0+cmVuZGVy
ZXIoKSA6IDApIHsKLSAgICAgICAgaW5uZXJCbG9ja1JlbmRlcmVyLT5zdHlsZSgpLT5zZXRIZWln
aHQoTGVuZ3RoKCkpOwotICAgICAgICBpbm5lckJsb2NrUmVuZGVyZXItPnN0eWxlKCktPnNldFdp
ZHRoKExlbmd0aCgpKTsKLSAgICB9Ci0gICAgSFRNTEVsZW1lbnQqIGNvbnRhaW5lciA9IGNvbnRh
aW5lckVsZW1lbnQoKTsKLSAgICBpZiAoUmVuZGVyT2JqZWN0KiBjb250YWluZXJSZW5kZXJlciA9
IGNvbnRhaW5lciA/IGNvbnRhaW5lci0+cmVuZGVyZXIoKSA6IDApIHsKLSAgICAgICAgY29udGFp
bmVyUmVuZGVyZXItPnN0eWxlKCktPnNldEhlaWdodChMZW5ndGgoKSk7Ci0gICAgICAgIGNvbnRh
aW5lclJlbmRlcmVyLT5zdHlsZSgpLT5zZXRXaWR0aChMZW5ndGgoKSk7Ci0gICAgfQotICAgIGlm
IChIVE1MRWxlbWVudCogcGxhY2Vob2xkZXIgPSBpbnB1dEVsZW1lbnQoKS0+cGxhY2Vob2xkZXJF
bGVtZW50KCkpCi0gICAgICAgIHBsYWNlaG9sZGVyLT5zZXRJbmxpbmVTdHlsZVByb3BlcnR5KENT
U1Byb3BlcnR5VGV4dE92ZXJmbG93LCB0ZXh0U2hvdWxkQmVUcnVuY2F0ZWQoKSA/IENTU1ZhbHVl
RWxsaXBzaXMgOiBDU1NWYWx1ZUNsaXApOwotICAgIHNldEhhc092ZXJmbG93Q2xpcChmYWxzZSk7
Ci19Ci0KLXZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjYXBzTG9ja1N0YXRlTWF5
SGF2ZUNoYW5nZWQoKQotewotICAgIGlmICghbm9kZSgpIHx8ICFkb2N1bWVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBPbmx5IGRyYXcgdGhlIGNhcHMgbG9jayBpbmRpY2F0b3IgaWYg
dGhlc2UgdGhpbmdzIGFyZSB0cnVlOgotICAgIC8vIDEpIFRoZSBmaWVsZCBpcyBhIHBhc3N3b3Jk
IGZpZWxkCi0gICAgLy8gMikgVGhlIGZyYW1lIGlzIGFjdGl2ZQotICAgIC8vIDMpIFRoZSBlbGVt
ZW50IGlzIGZvY3VzZWQKLSAgICAvLyA0KSBUaGUgY2FwcyBsb2NrIGlzIG9uCi0gICAgYm9vbCBz
aG91bGREcmF3Q2Fwc0xvY2tJbmRpY2F0b3IgPSBmYWxzZTsKLQotICAgIGlmIChGcmFtZSogZnJh
bWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKQotICAgICAgICBzaG91bGREcmF3Q2Fwc0xvY2tJbmRp
Y2F0b3IgPSBpbnB1dEVsZW1lbnQoKS0+aXNQYXNzd29yZEZpZWxkKCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJiYgZnJhbWUtPnNlbGVjdGlvbigpLT5pc0ZvY3VzZWRB
bmRBY3RpdmUoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBkb2N1
bWVudCgpLT5mb2N1c2VkTm9kZSgpID09IG5vZGUoKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmJiBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OmN1cnJlbnRDYXBzTG9ja1N0
YXRlKCk7Ci0KLSAgICBpZiAoc2hvdWxkRHJhd0NhcHNMb2NrSW5kaWNhdG9yICE9IG1fc2hvdWxk
RHJhd0NhcHNMb2NrSW5kaWNhdG9yKSB7Ci0gICAgICAgIG1fc2hvdWxkRHJhd0NhcHNMb2NrSW5k
aWNhdG9yID0gc2hvdWxkRHJhd0NhcHNMb2NrSW5kaWNhdG9yOwotICAgICAgICByZXBhaW50KCk7
Ci0gICAgfQotfQotCi1ib29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aGFzQ29udHJv
bENsaXAoKSBjb25zdAotewotICAgIC8vIEFwcGx5IGNvbnRyb2wgY2xpcCBmb3IgdGV4dCBmaWVs
ZHMgd2l0aCBkZWNvcmF0aW9ucy4KLSAgICByZXR1cm4gISFjb250YWluZXJFbGVtZW50KCk7Ci19
Ci0KLUxheW91dFJlY3QgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjb250cm9sQ2xpcFJl
Y3QoY29uc3QgTGF5b3V0UG9pbnQmIGFkZGl0aW9uYWxPZmZzZXQpIGNvbnN0Ci17Ci0gICAgQVNT
RVJUKGhhc0NvbnRyb2xDbGlwKCkpOwotICAgIExheW91dFJlY3QgY2xpcFJlY3QgPSB1bmlvblJl
Y3QoY29udGVudEJveFJlY3QoKSwgY29udGFpbmVyRWxlbWVudCgpLT5yZW5kZXJCb3goKS0+ZnJh
bWVSZWN0KCkpOwotICAgIGNsaXBSZWN0Lm1vdmVCeShhZGRpdGlvbmFsT2Zmc2V0KTsKLSAgICBy
ZXR1cm4gY2xpcFJlY3Q7Ci19Ci0KLWZsb2F0IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6
Z2V0QXZnQ2hhcldpZHRoKEF0b21pY1N0cmluZyBmYW1pbHkpCi17Ci0gICAgLy8gU2luY2UgTHVj
aWRhIEdyYW5kZSBpcyB0aGUgZGVmYXVsdCBmb250LCB3ZSB3YW50IHRoaXMgdG8gbWF0Y2ggdGhl
IHdpZHRoCi0gICAgLy8gb2YgTVMgU2hlbGwgRGxnLCB0aGUgZGVmYXVsdCBmb250IGZvciB0ZXh0
YXJlYXMgaW4gRmlyZWZveCwgU2FmYXJpIFdpbiBhbmQKLSAgICAvLyBJRSBmb3Igc29tZSBlbmNv
ZGluZ3MgKGluIElFLCB0aGUgZGVmYXVsdCBmb250IGlzIGVuY29kaW5nIHNwZWNpZmljKS4KLSAg
ICAvLyA5MDEgaXMgdGhlIGF2Z0NoYXJXaWR0aCB2YWx1ZSBpbiB0aGUgT1MvMiB0YWJsZSBmb3Ig
TVMgU2hlbGwgRGxnLgotICAgIGlmIChmYW1pbHkgPT0gQXRvbWljU3RyaW5nKCJMdWNpZGEgR3Jh
bmRlIikpCi0gICAgICAgIHJldHVybiBzY2FsZUVtVG9Vbml0cyg5MDEpOwotCi0gICAgcmV0dXJu
IFJlbmRlclRleHRDb250cm9sOjpnZXRBdmdDaGFyV2lkdGgoZmFtaWx5KTsKLX0KLQotTGF5b3V0
VW5pdCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnByZWZlcnJlZENvbnRlbnRXaWR0aChm
bG9hdCBjaGFyV2lkdGgpIGNvbnN0Ci17Ci0gICAgaW50IGZhY3RvcjsKLSAgICBib29sIGluY2x1
ZGVzRGVjb3JhdGlvbiA9IGlucHV0RWxlbWVudCgpLT5zaXplU2hvdWxkSW5jbHVkZURlY29yYXRp
b24oZmFjdG9yKTsKLSAgICBpZiAoZmFjdG9yIDw9IDApCi0gICAgICAgIGZhY3RvciA9IDIwOwot
Ci0gICAgTGF5b3V0VW5pdCByZXN1bHQgPSBzdGF0aWNfY2FzdDxMYXlvdXRVbml0PihjZWlsZWRM
YXlvdXRVbml0KGNoYXJXaWR0aCAqIGZhY3RvcikpOwotCi0gICAgZmxvYXQgbWF4Q2hhcldpZHRo
ID0gMC5mOwotICAgIEF0b21pY1N0cmluZyBmYW1pbHkgPSBzdHlsZSgpLT5mb250KCkuZmFtaWx5
KCkuZmFtaWx5KCk7Ci0gICAgLy8gU2luY2UgTHVjaWRhIEdyYW5kZSBpcyB0aGUgZGVmYXVsdCBm
b250LCB3ZSB3YW50IHRoaXMgdG8gbWF0Y2ggdGhlIHdpZHRoCi0gICAgLy8gb2YgTVMgU2hlbGwg
RGxnLCB0aGUgZGVmYXVsdCBmb250IGZvciB0ZXh0YXJlYXMgaW4gRmlyZWZveCwgU2FmYXJpIFdp
biBhbmQKLSAgICAvLyBJRSBmb3Igc29tZSBlbmNvZGluZ3MgKGluIElFLCB0aGUgZGVmYXVsdCBm
b250IGlzIGVuY29kaW5nIHNwZWNpZmljKS4KLSAgICAvLyA0MDI3IGlzIHRoZSAoeE1heCAtIHhN
aW4pIHZhbHVlIGluIHRoZSAiaGVhZCIgZm9udCB0YWJsZSBmb3IgTVMgU2hlbGwgRGxnLgotICAg
IGlmIChmYW1pbHkgPT0gQXRvbWljU3RyaW5nKCJMdWNpZGEgR3JhbmRlIikpCi0gICAgICAgIG1h
eENoYXJXaWR0aCA9IHNjYWxlRW1Ub1VuaXRzKDQwMjcpOwotICAgIGVsc2UgaWYgKGhhc1ZhbGlk
QXZnQ2hhcldpZHRoKGZhbWlseSkpCi0gICAgICAgIG1heENoYXJXaWR0aCA9IHJvdW5kZihzdHls
ZSgpLT5mb250KCkucHJpbWFyeUZvbnQoKS0+bWF4Q2hhcldpZHRoKCkpOwotCi0gICAgLy8gRm9y
IHRleHQgaW5wdXRzLCBJRSBhZGRzIHNvbWUgZXh0cmEgd2lkdGguCi0gICAgaWYgKG1heENoYXJX
aWR0aCA+IDAuZikKLSAgICAgICAgcmVzdWx0ICs9IG1heENoYXJXaWR0aCAtIGNoYXJXaWR0aDsK
LQotICAgIGlmIChpbmNsdWRlc0RlY29yYXRpb24pIHsKLSAgICAgICAgSFRNTEVsZW1lbnQqIHNw
aW5CdXR0b24gPSBpbm5lclNwaW5CdXR0b25FbGVtZW50KCk7Ci0gICAgICAgIGlmIChSZW5kZXJC
b3gqIHNwaW5SZW5kZXJlciA9IHNwaW5CdXR0b24gPyBzcGluQnV0dG9uLT5yZW5kZXJCb3goKSA6
IDApIHsKLSAgICAgICAgICAgIHJlc3VsdCArPSBzcGluUmVuZGVyZXItPmJvcmRlckxlZnQoKSAr
IHNwaW5SZW5kZXJlci0+Ym9yZGVyUmlnaHQoKSArCi0gICAgICAgICAgICAgICAgICBzcGluUmVu
ZGVyZXItPnBhZGRpbmdMZWZ0KCkgKyBzcGluUmVuZGVyZXItPnBhZGRpbmdSaWdodCgpOwotICAg
ICAgICAgICAgLy8gU2luY2UgdGhlIHdpZHRoIG9mIHNwaW5SZW5kZXJlciBpcyBub3QgY2FsY3Vs
YXRlZCB5ZXQsIHNwaW5SZW5kZXJlci0+d2lkdGgoKSByZXR1cm5zIDAuCi0gICAgICAgICAgICAv
LyBTbyBjb21wdXRlZFN0eWxlKCktPndpZHRoKCkgaXMgdXNlZCBpbnN0ZWFkLgotICAgICAgICAg
ICAgcmVzdWx0ICs9IHNwaW5CdXR0b24tPmNvbXB1dGVkU3R5bGUoKS0+d2lkdGgoKS52YWx1ZSgp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotTGF5b3V0VW5p
dCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNvbXB1dGVDb250cm9sSGVpZ2h0KExheW91
dFVuaXQgbGluZUhlaWdodCwgTGF5b3V0VW5pdCBub25Db250ZW50SGVpZ2h0KSBjb25zdAorTGF5
b3V0VW5pdCBSZW5kZXJTZWFyY2hGaWVsZDo6Y29tcHV0ZUNvbnRyb2xIZWlnaHQoTGF5b3V0VW5p
dCBsaW5lSGVpZ2h0LCBMYXlvdXRVbml0IG5vbkNvbnRlbnRIZWlnaHQpIGNvbnN0CiB7CiAgICAg
SFRNTEVsZW1lbnQqIHJlc3VsdHNCdXR0b24gPSByZXN1bHRzQnV0dG9uRWxlbWVudCgpOwogICAg
IGlmIChSZW5kZXJCb3gqIHJlc3VsdHNSZW5kZXJlciA9IHJlc3VsdHNCdXR0b24gPyByZXN1bHRz
QnV0dG9uLT5yZW5kZXJCb3goKSA6IDApIHsKQEAgLTQ0Nyw5ICsxNjUsOSBAQCBMYXlvdXRVbml0
IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y29tcHV0ZUNvbnRyb2xIZWlnaHQoTGF5b3V0
VW5pdCBsaW5lSGVpZwogICAgIHJldHVybiBsaW5lSGVpZ2h0ICsgbm9uQ29udGVudEhlaWdodDsK
IH0KIAotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnVwZGF0ZUZyb21FbGVtZW50
KCkKK3ZvaWQgUmVuZGVyU2VhcmNoRmllbGQ6OnVwZGF0ZUZyb21FbGVtZW50KCkKIHsKLSAgICBS
ZW5kZXJUZXh0Q29udHJvbDo6dXBkYXRlRnJvbUVsZW1lbnQoKTsKKyAgICBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OnVwZGF0ZUZyb21FbGVtZW50KCk7CiAKICAgICBpZiAoY2FuY2VsQnV0
dG9uRWxlbWVudCgpKQogICAgICAgICB1cGRhdGVDYW5jZWxCdXR0b25WaXNpYmlsaXR5KCk7CkBA
IC00NTgsNDUgKzE3Niw3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp1cGRh
dGVGcm9tRWxlbWVudCgpCiAgICAgICAgIG1fc2VhcmNoUG9wdXAtPnBvcHVwTWVudSgpLT51cGRh
dGVGcm9tRWxlbWVudCgpOwogfQogCi1QYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZUlubmVyVGV4dFN0eWxlKGNvbnN0IFJlbmRlclN0eWxl
KiBzdGFydFN0eWxlKSBjb25zdAotewotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gdGV4dEJsb2Nr
U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7ICAgCi0gICAgdGV4dEJsb2NrU3R5bGUtPmlu
aGVyaXRGcm9tKHN0YXJ0U3R5bGUpOwotICAgIGFkanVzdElubmVyVGV4dFN0eWxlKHN0YXJ0U3R5
bGUsIHRleHRCbG9ja1N0eWxlLmdldCgpKTsKLQotICAgIHRleHRCbG9ja1N0eWxlLT5zZXRXaGl0
ZVNwYWNlKFBSRSk7Ci0gICAgdGV4dEJsb2NrU3R5bGUtPnNldFdvcmRXcmFwKE5vcm1hbFdvcmRX
cmFwKTsKLSAgICB0ZXh0QmxvY2tTdHlsZS0+c2V0T3ZlcmZsb3dYKE9ISURERU4pOwotICAgIHRl
eHRCbG9ja1N0eWxlLT5zZXRPdmVyZmxvd1koT0hJRERFTik7Ci0gICAgdGV4dEJsb2NrU3R5bGUt
PnNldFRleHRPdmVyZmxvdyh0ZXh0U2hvdWxkQmVUcnVuY2F0ZWQoKSA/IFRleHRPdmVyZmxvd0Vs
bGlwc2lzIDogVGV4dE92ZXJmbG93Q2xpcCk7Ci0KLSAgICBpZiAobV9kZXNpcmVkSW5uZXJUZXh0
SGVpZ2h0ID49IDApCi0gICAgICAgIHRleHRCbG9ja1N0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKG1f
ZGVzaXJlZElubmVyVGV4dEhlaWdodCwgRml4ZWQpKTsKLSAgICAvLyBEbyBub3QgYWxsb3cgbGlu
ZS1oZWlnaHQgdG8gYmUgc21hbGxlciB0aGFuIG91ciBkZWZhdWx0LgotICAgIGlmICh0ZXh0Qmxv
Y2tTdHlsZS0+Zm9udE1ldHJpY3MoKS5saW5lU3BhY2luZygpID4gbGluZUhlaWdodCh0cnVlLCBI
b3Jpem9udGFsTGluZSwgUG9zaXRpb25PZkludGVyaW9yTGluZUJveGVzKSkKLSAgICAgICAgdGV4
dEJsb2NrU3R5bGUtPnNldExpbmVIZWlnaHQoTGVuZ3RoKC0xMDAuMGYsIFBlcmNlbnQpKTsKLQot
ICAgIHRleHRCbG9ja1N0eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsKLQotICAgIHJldHVybiB0ZXh0
QmxvY2tTdHlsZS5yZWxlYXNlKCk7Ci19Ci0KLVBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZTo6Y3JlYXRlSW5uZXJCbG9ja1N0eWxlKGNvbnN0IFJlbmRl
clN0eWxlKiBzdGFydFN0eWxlKSBjb25zdAotewotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gaW5u
ZXJCbG9ja1N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwotICAgIGlubmVyQmxvY2tTdHls
ZS0+aW5oZXJpdEZyb20oc3RhcnRTdHlsZSk7Ci0KLSAgICBpbm5lckJsb2NrU3R5bGUtPnNldEJv
eEZsZXgoMSk7Ci0gICAgaW5uZXJCbG9ja1N0eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsKLSAgICBp
bm5lckJsb2NrU3R5bGUtPnNldERpcmVjdGlvbihMVFIpOwotCi0gICAgLy8gV2UgZG9uJ3Qgd2Fu
dCB0aGUgc2hhZG93IGRvbSB0byBiZSBlZGl0YWJsZSwgc28gd2Ugc2V0IHRoaXMgYmxvY2sgdG8g
cmVhZC1vbmx5IGluIGNhc2UgdGhlIGlucHV0IGl0c2VsZiBpcyBlZGl0YWJsZS4KLSAgICBpbm5l
ckJsb2NrU3R5bGUtPnNldFVzZXJNb2RpZnkoUkVBRF9PTkxZKTsKLQotICAgIHJldHVybiBpbm5l
ckJsb2NrU3R5bGUucmVsZWFzZSgpOwotfQotCi12b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZTo6dXBkYXRlQ2FuY2VsQnV0dG9uVmlzaWJpbGl0eSgpIGNvbnN0Cit2b2lkIFJlbmRlclNl
YXJjaEZpZWxkOjp1cGRhdGVDYW5jZWxCdXR0b25WaXNpYmlsaXR5KCkgY29uc3QKIHsKICAgICBS
ZW5kZXJPYmplY3QqIGNhbmNlbEJ1dHRvblJlbmRlcmVyID0gY2FuY2VsQnV0dG9uRWxlbWVudCgp
LT5yZW5kZXJlcigpOwogICAgIGlmICghY2FuY2VsQnV0dG9uUmVuZGVyZXIpCkBAIC01MTIsMjQg
KzE5MiwxOCBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6dXBkYXRlQ2FuY2Vs
QnV0dG9uVmlzaWJpbGl0eSgpIGNvbnN0CiAgICAgY2FuY2VsQnV0dG9uUmVuZGVyZXItPnNldFN0
eWxlKGNhbmNlbEJ1dHRvblN0eWxlKTsKIH0KIAotRVZpc2liaWxpdHkgUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjp2aXNpYmlsaXR5Rm9yQ2FuY2VsQnV0dG9uKCkgY29uc3QKK0VWaXNpYmls
aXR5IFJlbmRlclNlYXJjaEZpZWxkOjp2aXNpYmlsaXR5Rm9yQ2FuY2VsQnV0dG9uKCkgY29uc3QK
IHsKICAgICByZXR1cm4gKHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBISURERU4gfHwgaW5wdXRF
bGVtZW50KCktPnZhbHVlKCkuaXNFbXB0eSgpKSA/IEhJRERFTiA6IFZJU0lCTEU7CiB9CiAKLWJv
b2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp0ZXh0U2hvdWxkQmVUcnVuY2F0ZWQoKSBj
b25zdAotewotICAgIHJldHVybiBkb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgpICE9IG5vZGUoKQot
ICAgICAgICAmJiBzdHlsZSgpLT50ZXh0T3ZlcmZsb3coKSA9PSBUZXh0T3ZlcmZsb3dFbGxpcHNp
czsKLX0KLQotY29uc3QgQXRvbWljU3RyaW5nJiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6
OmF1dG9zYXZlTmFtZSgpIGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIFJlbmRlclNlYXJjaEZp
ZWxkOjphdXRvc2F2ZU5hbWUoKSBjb25zdAogewogICAgIHJldHVybiBzdGF0aWNfY2FzdDxFbGVt
ZW50Kj4obm9kZSgpKS0+Z2V0QXR0cmlidXRlKGF1dG9zYXZlQXR0cik7CiB9CiAKIC8vIFBvcHVw
TWVudUNsaWVudCBtZXRob2RzCi12b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6dmFs
dWVDaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCwgYm9vbCBmaXJlRXZlbnRzKQordm9pZCBSZW5k
ZXJTZWFyY2hGaWVsZDo6dmFsdWVDaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCwgYm9vbCBmaXJl
RXZlbnRzKQogewogICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KGxpc3RJbmRleCkgPCBsaXN0
U2l6ZSgpKTsKICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9IGlucHV0RWxlbWVudCgpOwpA
QCAtNTUxLDcgKzIyNSw3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp2YWx1
ZUNoYW5nZWQodW5zaWduZWQgbGlzdEluZGV4LCBib29sIGZpcmVFdmVuCiAgICAgfQogfQogCi1T
dHJpbmcgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppdGVtVGV4dCh1bnNpZ25lZCBsaXN0
SW5kZXgpIGNvbnN0CitTdHJpbmcgUmVuZGVyU2VhcmNoRmllbGQ6Oml0ZW1UZXh0KHVuc2lnbmVk
IGxpc3RJbmRleCkgY29uc3QKIHsKICAgICBpbnQgc2l6ZSA9IGxpc3RTaXplKCk7CiAgICAgaWYg
KHNpemUgPT0gMSkgewpAQCAtNTY3LDQyICsyNDEsNDIgQEAgU3RyaW5nIFJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6aXRlbVRleHQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAogICAgIHJl
dHVybiBtX3JlY2VudFNlYXJjaGVzW2xpc3RJbmRleCAtIDFdOwogfQogCi1TdHJpbmcgUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lOjppdGVtTGFiZWwodW5zaWduZWQpIGNvbnN0CitTdHJpbmcg
UmVuZGVyU2VhcmNoRmllbGQ6Oml0ZW1MYWJlbCh1bnNpZ25lZCkgY29uc3QKIHsKICAgICByZXR1
cm4gU3RyaW5nKCk7CiB9CiAKLVN0cmluZyBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Oml0
ZW1JY29uKHVuc2lnbmVkKSBjb25zdAorU3RyaW5nIFJlbmRlclNlYXJjaEZpZWxkOjppdGVtSWNv
bih1bnNpZ25lZCkgY29uc3QKIHsKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLWJvb2wgUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppdGVtSXNFbmFibGVkKHVuc2lnbmVkIGxpc3RJbmRl
eCkgY29uc3QKK2Jvb2wgUmVuZGVyU2VhcmNoRmllbGQ6Oml0ZW1Jc0VuYWJsZWQodW5zaWduZWQg
bGlzdEluZGV4KSBjb25zdAogewogICAgICBpZiAoIWxpc3RJbmRleCB8fCBpdGVtSXNTZXBhcmF0
b3IobGlzdEluZGV4KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0cnVlOwog
fQogCi1Qb3B1cE1lbnVTdHlsZSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Oml0ZW1TdHls
ZSh1bnNpZ25lZCkgY29uc3QKK1BvcHVwTWVudVN0eWxlIFJlbmRlclNlYXJjaEZpZWxkOjppdGVt
U3R5bGUodW5zaWduZWQpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1lbnVTdHlsZSgpOwogfQogCi1Q
b3B1cE1lbnVTdHlsZSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Om1lbnVTdHlsZSgpIGNv
bnN0CitQb3B1cE1lbnVTdHlsZSBSZW5kZXJTZWFyY2hGaWVsZDo6bWVudVN0eWxlKCkgY29uc3QK
IHsKICAgICByZXR1cm4gUG9wdXBNZW51U3R5bGUoc3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENv
bG9yKENTU1Byb3BlcnR5Q29sb3IpLCBzdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLCBzdHlsZSgpLT5mb250KCksIHN0eWxlKCktPnZpc2li
aWxpdHkoKSA9PSBWSVNJQkxFLAogICAgICAgICBzdHlsZSgpLT5kaXNwbGF5KCkgPT0gTk9ORSwg
c3R5bGUoKS0+dGV4dEluZGVudCgpLCBzdHlsZSgpLT5kaXJlY3Rpb24oKSwgaXNPdmVycmlkZShz
dHlsZSgpLT51bmljb2RlQmlkaSgpKSk7CiB9CiAKLWludCBSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmU6OmNsaWVudEluc2V0TGVmdCgpIGNvbnN0CitpbnQgUmVuZGVyU2VhcmNoRmllbGQ6OmNs
aWVudEluc2V0TGVmdCgpIGNvbnN0CiB7CiAgICAgLy8gSW5zZXQgdGhlIG1lbnUgYnkgdGhlIHJh
ZGl1cyBvZiB0aGUgY2FwIG9uIHRoZSBsZWZ0IHNvIHRoYXQKICAgICAvLyBpdCBvbmx5IHJ1bnMg
YWxvbmcgdGhlIHN0cmFpZ2h0IHBhcnQgb2YgdGhlIGJlemVsLgogICAgIHJldHVybiBoZWlnaHQo
KSAvIDI7CiB9CiAKLWludCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNsaWVudEluc2V0
UmlnaHQoKSBjb25zdAoraW50IFJlbmRlclNlYXJjaEZpZWxkOjpjbGllbnRJbnNldFJpZ2h0KCkg
Y29uc3QKIHsKICAgICAvLyBJbnNldCB0aGUgbWVudSBieSB0aGUgcmFkaXVzIG9mIHRoZSBjYXAg
b24gdGhlIHJpZ2h0IHNvIHRoYXQKICAgICAvLyBpdCBvbmx5IHJ1bnMgYWxvbmcgdGhlIHN0cmFp
Z2h0IHBhcnQgb2YgdGhlIGJlemVsICh1bmxlc3MgaXQgbmVlZHMKQEAgLTYxMCw3ICsyODQsNyBA
QCBpbnQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjbGllbnRJbnNldFJpZ2h0KCkgY29u
c3QKICAgICByZXR1cm4gaGVpZ2h0KCkgLyAyOwogfQogCi1MYXlvdXRVbml0IFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6Y2xpZW50UGFkZGluZ0xlZnQoKSBjb25zdAorTGF5b3V0VW5pdCBS
ZW5kZXJTZWFyY2hGaWVsZDo6Y2xpZW50UGFkZGluZ0xlZnQoKSBjb25zdAogewogICAgIExheW91
dFVuaXQgcGFkZGluZyA9IHBhZGRpbmdMZWZ0KCk7CiAgICAgaWYgKFJlbmRlckJveCogYm94ID0g
aW5uZXJCbG9ja0VsZW1lbnQoKSA/IGlubmVyQmxvY2tFbGVtZW50KCktPnJlbmRlckJveCgpIDog
MCkKQEAgLTYxOCw3ICsyOTIsNyBAQCBMYXlvdXRVbml0IFJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZTo6Y2xpZW50UGFkZGluZ0xlZnQoKSBjb25zdAogICAgIHJldHVybiBwYWRkaW5nOwogfQog
Ci1MYXlvdXRVbml0IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y2xpZW50UGFkZGluZ1Jp
Z2h0KCkgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyU2VhcmNoRmllbGQ6OmNsaWVudFBhZGRpbmdS
aWdodCgpIGNvbnN0CiB7CiAgICAgTGF5b3V0VW5pdCBwYWRkaW5nID0gcGFkZGluZ1JpZ2h0KCk7
CiAgICAgaWYgKFJlbmRlckJveCogY29udGFpbmVyQm94ID0gY29udGFpbmVyRWxlbWVudCgpID8g
Y29udGFpbmVyRWxlbWVudCgpLT5yZW5kZXJCb3goKSA6IDApIHsKQEAgLTYyOCw3ICszMDIsNyBA
QCBMYXlvdXRVbml0IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y2xpZW50UGFkZGluZ1Jp
Z2h0KCkgY29uc3QKICAgICByZXR1cm4gcGFkZGluZzsKIH0KIAotaW50IFJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6bGlzdFNpemUoKSBjb25zdAoraW50IFJlbmRlclNlYXJjaEZpZWxkOjps
aXN0U2l6ZSgpIGNvbnN0CiB7CiAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIHJlY2VudCBzZWFyY2hl
cywgdGhlbiBvdXIgbWVudSB3aWxsIGhhdmUgMSAiTm8gcmVjZW50IHNlYXJjaGVzIiBpdGVtLgog
ICAgIGlmICghbV9yZWNlbnRTZWFyY2hlcy5zaXplKCkpCkBAIC02MzcsMTExICszMTEsNDggQEAg
aW50IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGlzdFNpemUoKSBjb25zdAogICAgIHJl
dHVybiBtX3JlY2VudFNlYXJjaGVzLnNpemUoKSArIDM7CiB9CiAKLWludCBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OnNlbGVjdGVkSW5kZXgoKSBjb25zdAoraW50IFJlbmRlclNlYXJjaEZp
ZWxkOjpzZWxlY3RlZEluZGV4KCkgY29uc3QKIHsKICAgICByZXR1cm4gLTE7CiB9CiAKLXZvaWQg
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpwb3B1cERpZEhpZGUoKQordm9pZCBSZW5kZXJT
ZWFyY2hGaWVsZDo6cG9wdXBEaWRIaWRlKCkKIHsKICAgICBtX3NlYXJjaFBvcHVwSXNWaXNpYmxl
ID0gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppdGVtSXNT
ZXBhcmF0b3IodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAorYm9vbCBSZW5kZXJTZWFyY2hGaWVs
ZDo6aXRlbUlzU2VwYXJhdG9yKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKIHsKICAgICAvLyBU
aGUgc2VwYXJhdG9yIHdpbGwgYmUgdGhlIHNlY29uZCB0byBsYXN0IGl0ZW0gaW4gb3VyIGxpc3Qu
CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obGlzdEluZGV4KSA9PSAobGlzdFNpemUoKSAt
IDIpOwogfQogCi1ib29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aXRlbUlzTGFiZWwo
dW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAorYm9vbCBSZW5kZXJTZWFyY2hGaWVsZDo6aXRlbUlz
TGFiZWwodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAogewotICAgIHJldHVybiBsaXN0SW5kZXgg
PT0gMDsKKyAgICByZXR1cm4gIWxpc3RJbmRleDsKIH0KIAotYm9vbCBSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6Oml0ZW1Jc1NlbGVjdGVkKHVuc2lnbmVkKSBjb25zdAorYm9vbCBSZW5kZXJT
ZWFyY2hGaWVsZDo6aXRlbUlzU2VsZWN0ZWQodW5zaWduZWQpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2V0VGV4dEZy
b21JdGVtKHVuc2lnbmVkIGxpc3RJbmRleCkKK3ZvaWQgUmVuZGVyU2VhcmNoRmllbGQ6OnNldFRl
eHRGcm9tSXRlbSh1bnNpZ25lZCBsaXN0SW5kZXgpCiB7CiAgICAgaW5wdXRFbGVtZW50KCktPnNl
dFZhbHVlKGl0ZW1UZXh0KGxpc3RJbmRleCkpOwogfQogCi1Gb250U2VsZWN0b3IqIFJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZTo6Zm9udFNlbGVjdG9yKCkgY29uc3QKK0ZvbnRTZWxlY3Rvciog
UmVuZGVyU2VhcmNoRmllbGQ6OmZvbnRTZWxlY3RvcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGRv
Y3VtZW50KCktPnN0eWxlUmVzb2x2ZXIoKS0+Zm9udFNlbGVjdG9yKCk7CiB9CiAKLUhvc3RXaW5k
b3cqIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aG9zdFdpbmRvdygpIGNvbnN0CitIb3N0
V2luZG93KiBSZW5kZXJTZWFyY2hGaWVsZDo6aG9zdFdpbmRvdygpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIGRvY3VtZW50KCktPnZpZXcoKS0+aG9zdFdpbmRvdygpOwogfQogCi12b2lkIFJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZTo6YXV0b3Njcm9sbCgpCi17Ci0gICAgUmVuZGVyTGF5ZXIqIGxh
eWVyID0gaW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJCb3goKS0+bGF5ZXIoKTsKLSAgICBpZiAo
bGF5ZXIpCi0gICAgICAgIGxheWVyLT5hdXRvc2Nyb2xsKCk7Ci19Ci0KLWludCBSZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmU6OnNjcm9sbFdpZHRoKCkgY29uc3QKLXsKLSAgICBpZiAoaW5uZXJU
ZXh0RWxlbWVudCgpKQotICAgICAgICByZXR1cm4gaW5uZXJUZXh0RWxlbWVudCgpLT5zY3JvbGxX
aWR0aCgpOwotICAgIHJldHVybiBSZW5kZXJCbG9jazo6c2Nyb2xsV2lkdGgoKTsKLX0KLQotaW50
IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QKLXsKLSAg
ICBpZiAoaW5uZXJUZXh0RWxlbWVudCgpKQotICAgICAgICByZXR1cm4gaW5uZXJUZXh0RWxlbWVu
dCgpLT5zY3JvbGxIZWlnaHQoKTsKLSAgICByZXR1cm4gUmVuZGVyQmxvY2s6OnNjcm9sbEhlaWdo
dCgpOwotfQotCi1pbnQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzY3JvbGxMZWZ0KCkg
Y29uc3QKLXsKLSAgICBpZiAoaW5uZXJUZXh0RWxlbWVudCgpKQotICAgICAgICByZXR1cm4gaW5u
ZXJUZXh0RWxlbWVudCgpLT5zY3JvbGxMZWZ0KCk7Ci0gICAgcmV0dXJuIFJlbmRlckJsb2NrOjpz
Y3JvbGxMZWZ0KCk7Ci19Ci0KLWludCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnNjcm9s
bFRvcCgpIGNvbnN0Ci17Ci0gICAgaWYgKGlubmVyVGV4dEVsZW1lbnQoKSkKLSAgICAgICAgcmV0
dXJuIGlubmVyVGV4dEVsZW1lbnQoKS0+c2Nyb2xsVG9wKCk7Ci0gICAgcmV0dXJuIFJlbmRlckJs
b2NrOjpzY3JvbGxUb3AoKTsKLX0KLQotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6
OnNldFNjcm9sbExlZnQoaW50IG5ld0xlZnQpCi17Ci0gICAgaWYgKGlubmVyVGV4dEVsZW1lbnQo
KSkKLSAgICAgICAgaW5uZXJUZXh0RWxlbWVudCgpLT5zZXRTY3JvbGxMZWZ0KG5ld0xlZnQpOwot
fQotCi12b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6c2V0U2Nyb2xsVG9wKGludCBu
ZXdUb3ApCi17Ci0gICAgaWYgKGlubmVyVGV4dEVsZW1lbnQoKSkKLSAgICAgICAgaW5uZXJUZXh0
RWxlbWVudCgpLT5zZXRTY3JvbGxUb3AobmV3VG9wKTsKLX0KLQotYm9vbCBSZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmU6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxH
cmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwgTm9kZSoqIHN0b3BOb2Rl
KQotewotICAgIFJlbmRlckxheWVyKiBsYXllciA9IGlubmVyVGV4dEVsZW1lbnQoKS0+cmVuZGVy
Qm94KCktPmxheWVyKCk7Ci0gICAgaWYgKGxheWVyICYmIGxheWVyLT5zY3JvbGwoZGlyZWN0aW9u
LCBncmFudWxhcml0eSwgbXVsdGlwbGllcikpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJl
dHVybiBSZW5kZXJCbG9jazo6c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxp
ZXIsIHN0b3BOb2RlKTsKLX0KLQotYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Omxv
Z2ljYWxTY3JvbGwoU2Nyb2xsTG9naWNhbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51
bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyLCBOb2RlKiogc3RvcE5vZGUpCi17
Ci0gICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gaW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJCb3go
KS0+bGF5ZXIoKTsKLSAgICBpZiAobGF5ZXIgJiYgbGF5ZXItPnNjcm9sbChsb2dpY2FsVG9QaHlz
aWNhbChkaXJlY3Rpb24sIHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxl
KCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpLCBncmFudWxhcml0eSwgbXVsdGlwbGll
cikpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVybiBSZW5kZXJCbG9jazo6bG9naWNh
bFNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyLCBzdG9wTm9kZSk7Ci19
Ci0KLVBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNy
ZWF0ZVNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEsIFNjcm9sbGJhck9y
aWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkK
K1Bhc3NSZWZQdHI8U2Nyb2xsYmFyPiBSZW5kZXJTZWFyY2hGaWVsZDo6Y3JlYXRlU2Nyb2xsYmFy
KFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplIGNvbnRyb2xTaXplKQogewogICAgIFJlZlB0
cjxTY3JvbGxiYXI+IHdpZGdldDsKICAgICBib29sIGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlID0g
c3R5bGUoKS0+aGFzUHNldWRvU3R5bGUoU0NST0xMQkFSKTsKQEAgLTc1Miw5ICszNjMsMjMgQEAg
UGFzc1JlZlB0cjxTY3JvbGxiYXI+IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y3JlYXRl
U2Nyb2xsYmFyKFNjcm9sbGFibGVBcmUKICAgICByZXR1cm4gd2lkZ2V0LnJlbGVhc2UoKTsKIH0K
IAotSFRNTElucHV0RWxlbWVudCogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjppbnB1dEVs
ZW1lbnQoKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJTZWFyY2hGaWVsZDo6Y29tcHV0ZUhlaWdo
dExpbWl0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGVpZ2h0KCk7Cit9CisKK3ZvaWQgUmVuZGVy
U2VhcmNoRmllbGQ6OmNlbnRlckNvbnRhaW5lcklmTmVlZGVkKFJlbmRlckJveCogY29udGFpbmVy
UmVuZGVyZXIpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG5vZGUoKS0+dG9JbnB1dEVsZW1lbnQoKTsK
KyAgICBpZiAoIWNvbnRhaW5lclJlbmRlcmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
Y29udGFpbmVyUmVuZGVyZXItPmhlaWdodCgpIDw9IGNvbnRlbnRIZWlnaHQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgLy8gQSBxdWlyayBmb3IgZmluZC1pbi1wYWdlIGJveCBvbiBTYWZhcmkg
V2luZG93cy4KKyAgICAvLyBodHRwOi8vd2Via2l0Lm9yZy9iLzYzMTU3CisgICAgTGF5b3V0VW5p
dCBoZWlnaHREaWZmID0gY29udGFpbmVyUmVuZGVyZXItPmhlaWdodCgpIC0gY29udGVudEhlaWdo
dCgpOworICAgIGNvbnRhaW5lclJlbmRlcmVyLT5zZXRZKGNvbnRhaW5lclJlbmRlcmVyLT55KCkg
LSAoaGVpZ2h0RGlmZiAvIDIgKyBsYXlvdXRNb2QoaGVpZ2h0RGlmZiwgMikpKTsKIH0KIAogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuaAppbmRleCA2ZTIx
Yzg1NmMxMGZhOWZiYTQzNmMwNmY3NDljMTRlMWUyYTgwYmE2Li45NjczMzVkMzQ1NTYzOTNhNTQz
MzBlZDQ4ZTM2MzU2N2RmYTJkYzg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU2VhcmNoRmllbGQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU2VhcmNoRmllbGQuaApAQCAtMjAsMjQgKzIwLDIyIEBACiAgKgogICovCiAKLSNpZm5kZWYg
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lX2gKLSNkZWZpbmUgUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lX2gKKyNpZm5kZWYgUmVuZGVyU2VhcmNoRmllbGRfaAorI2RlZmluZSBSZW5kZXJT
ZWFyY2hGaWVsZF9oCiAKICNpbmNsdWRlICJQb3B1cE1lbnVDbGllbnQuaCIKLSNpbmNsdWRlICJS
ZW5kZXJUZXh0Q29udHJvbC5oIgorI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxJbnB1dEVsZW1lbnQ7CiBj
bGFzcyBTZWFyY2hQb3B1cE1lbnU7CiAKLWNsYXNzIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZSA6IHB1YmxpYyBSZW5kZXJUZXh0Q29udHJvbCwgcHJpdmF0ZSBQb3B1cE1lbnVDbGllbnQgewor
Y2xhc3MgUmVuZGVyU2VhcmNoRmllbGQgOiBwdWJsaWMgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lLCBwcml2YXRlIFBvcHVwTWVudUNsaWVudCB7CiBwdWJsaWM6Ci0gICAgUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lKE5vZGUqKTsKLSAgICB2aXJ0dWFsIH5SZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmUoKTsKLSAgICAvLyBGSVhNRTogTW92ZSBjcmVhdGUqU3R5bGUoKSB0byB0aGVpciBj
bGFzc2VzLgotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gY3JlYXRlSW5uZXJU
ZXh0U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUpIGNvbnN0OwotICAgIFBhc3NS
ZWZQdHI8UmVuZGVyU3R5bGU+IGNyZWF0ZUlubmVyQmxvY2tTdHlsZShjb25zdCBSZW5kZXJTdHls
ZSogc3RhcnRTdHlsZSkgY29uc3Q7CisgICAgUmVuZGVyU2VhcmNoRmllbGQoTm9kZSopOworICAg
IHZpcnR1YWwgflJlbmRlclNlYXJjaEZpZWxkKCk7CisKICAgICB2b2lkIHVwZGF0ZUNhbmNlbEJ1
dHRvblZpc2liaWxpdHkoKSBjb25zdDsKIAogICAgIHZvaWQgYWRkU2VhcmNoUmVzdWx0KCk7CkBA
IC00Nyw0MiArNDUsMTIgQEAgcHVibGljOgogICAgIHZvaWQgc2hvd1BvcHVwKCk7CiAgICAgdm9p
ZCBoaWRlUG9wdXAoKTsKIAotICAgIHZvaWQgY2Fwc0xvY2tTdGF0ZU1heUhhdmVDaGFuZ2VkKCk7
Ci0KIHByaXZhdGU6Ci0gICAgdmlydHVhbCBib29sIGhhc0NvbnRyb2xDbGlwKCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBMYXlvdXRSZWN0IGNvbnRyb2xDbGlwUmVjdChjb25zdCBMYXlvdXRQb2ludCYp
IGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc1RleHRGaWVsZCgpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQ
b2ludCYpOwotICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKLQotICAgIHZpcnR1YWwgYm9vbCBu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBM
YXlvdXRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxh
dGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhdXRvc2Nyb2xs
KCk7Ci0KLSAgICAvLyBTdWJjbGFzc2VkIHRvIGZvcndhcmQgdG8gb3VyIGlubmVyIGRpdi4KLSAg
ICB2aXJ0dWFsIGludCBzY3JvbGxMZWZ0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgc2Nyb2xs
VG9wKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgc2Nyb2xsV2lkdGgoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIGludCBzY3JvbGxIZWlnaHQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2Ny
b2xsTGVmdChpbnQpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxUb3AoaW50KTsKLSAgICB2
aXJ0dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZs
b2F0IG11bHRpcGxpZXIgPSAxLCBOb2RlKiogc3RvcE5vZGUgPSAwKTsKLSAgICB2aXJ0dWFsIGJv
b2wgbG9naWNhbFNjcm9sbChTY3JvbGxMb2dpY2FsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0
eSwgZmxvYXQgbXVsdGlwbGllciA9IDEsIE5vZGUqKiBzdG9wTm9kZSA9IDApOwotCi0gICAgaW50
IHRleHRCbG9ja1dpZHRoKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBmbG9hdCBnZXRBdmdDaGFyV2lk
dGgoQXRvbWljU3RyaW5nIGZhbWlseSk7Ci0gICAgdmlydHVhbCBMYXlvdXRVbml0IHByZWZlcnJl
ZENvbnRlbnRXaWR0aChmbG9hdCBjaGFyV2lkdGgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBj
ZW50ZXJDb250YWluZXJJZk5lZWRlZChSZW5kZXJCb3gqKSBjb25zdCBPVkVSUklERTsKICAgICB2
aXJ0dWFsIExheW91dFVuaXQgY29tcHV0ZUNvbnRyb2xIZWlnaHQoTGF5b3V0VW5pdCBsaW5lSGVp
Z2h0LCBMYXlvdXRVbml0IG5vbkNvbnRlbnRIZWlnaHQpIGNvbnN0IE9WRVJSSURFOwotICAgIAot
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpOwotICAgIHZpcnR1YWwgdm9pZCBz
dHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHls
ZSk7Ci0KLSAgICB2aXJ0dWFsIFJlbmRlclN0eWxlKiB0ZXh0QmFzZVN0eWxlKCkgY29uc3Q7Ci0K
KyAgICB2aXJ0dWFsIExheW91dFVuaXQgY29tcHV0ZUhlaWdodExpbWl0KCkgY29uc3QgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZyb21FbGVtZW50KCkgT1ZFUlJJREU7CiAgICAg
RVZpc2liaWxpdHkgdmlzaWJpbGl0eUZvckNhbmNlbEJ1dHRvbigpIGNvbnN0OwotICAgIGJvb2wg
dGV4dFNob3VsZEJlVHJ1bmNhdGVkKCkgY29uc3Q7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBh
dXRvc2F2ZU5hbWUoKSBjb25zdDsKIAogICAgIC8vIFBvcHVwTWVudUNsaWVudCBtZXRob2RzCkBA
IC0xMTQsNDIgKzgyLDIyIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBIb3N0V2luZG93KiBob3N0
V2luZG93KCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNjcm9sbGJh
cj4gY3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhKiwgU2Nyb2xsYmFyT3JpZW50YXRpb24s
IFNjcm9sbGJhckNvbnRyb2xTaXplKSBPVkVSUklERTsKIAotICAgIEhUTUxJbnB1dEVsZW1lbnQq
IGlucHV0RWxlbWVudCgpIGNvbnN0OwotCi0gICAgSFRNTEVsZW1lbnQqIGNvbnRhaW5lckVsZW1l
bnQoKSBjb25zdDsKLSAgICBIVE1MRWxlbWVudCogaW5uZXJCbG9ja0VsZW1lbnQoKSBjb25zdDsK
LSAgICBIVE1MRWxlbWVudCogaW5uZXJTcGluQnV0dG9uRWxlbWVudCgpIGNvbnN0OwogICAgIEhU
TUxFbGVtZW50KiByZXN1bHRzQnV0dG9uRWxlbWVudCgpIGNvbnN0OwogICAgIEhUTUxFbGVtZW50
KiBjYW5jZWxCdXR0b25FbGVtZW50KCkgY29uc3Q7CiAKICAgICBib29sIG1fc2VhcmNoUG9wdXBJ
c1Zpc2libGU7Ci0gICAgYm9vbCBtX3Nob3VsZERyYXdDYXBzTG9ja0luZGljYXRvcjsKLSAgICBM
YXlvdXRVbml0IG1fZGVzaXJlZElubmVyVGV4dEhlaWdodDsKICAgICBSZWZQdHI8U2VhcmNoUG9w
dXBNZW51PiBtX3NlYXJjaFBvcHVwOwogICAgIFZlY3RvcjxTdHJpbmc+IG1fcmVjZW50U2VhcmNo
ZXM7CiB9OwogCi1pbmxpbmUgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKiB0b1JlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZShSZW5kZXJPYmplY3QqIG9iamVjdCkKK2lubGluZSBSZW5kZXJT
ZWFyY2hGaWVsZCogdG9SZW5kZXJTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqIG9iamVjdCkKIHsK
ICAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzVGV4dEZpZWxkKCkpOwotICAgIHJldHVy
biBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUqPihvYmplY3QpOworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJTZWFyY2hGaWVsZCo+KG9iamVjdCk7CiB9CiAKIC8v
IFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KLXZvaWQg
dG9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUoY29uc3QgUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lKik7Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgUmVu
ZGVyVGV4dENvbnRyb2xJbm5lckJsb2NrIDogcHVibGljIFJlbmRlckJsb2NrIHsKLXB1YmxpYzoK
LSAgICBSZW5kZXJUZXh0Q29udHJvbElubmVyQmxvY2soTm9kZSogbm9kZSwgYm9vbCBpc011bHRp
TGluZSkgOiBSZW5kZXJCbG9jayhub2RlKSwgbV9tdWx0aUxpbmUoaXNNdWx0aUxpbmUpIHsgfQot
Ci1wcml2YXRlOgotICAgIHZpcnR1YWwgYm9vbCBoYXNMaW5lSWZFbXB0eSgpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50
KGNvbnN0IExheW91dFBvaW50Jik7Ci0KLSAgICBib29sIG1fbXVsdGlMaW5lOwotfTsKK3ZvaWQg
dG9SZW5kZXJTZWFyY2hGaWVsZChjb25zdCBSZW5kZXJTZWFyY2hGaWVsZCopOwogCiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZS5jcHAKaW5kZXggODQ4ZmMyMTE5N2MyYTdkMjRmMjY0OGRmNzAyMDUyOWYzYzg4MGQz
Yi4uMzFmMWYyODM3ZGJhNGFkNjk1YWI4OTAwMTU3OWYzNzdmMDNjZTU4YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGlu
ZS5jcHAKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZy
YW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiSFRNTElu
cHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhpdFRlc3RS
ZXN1bHQuaCIKICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCkBAIC0zOSw3ICszOCw2IEBA
CiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTY3JvbGxiYXIuaCIK
ICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgotI2luY2x1ZGUgIlNlYXJjaFBvcHVwTWVudS5oIgog
I2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNs
dWRlICJTdHlsZVJlc29sdmVyLmgiCkBAIC03MCwxMCArNjgsOCBAQCBWaXNpYmxlUG9zaXRpb24g
UmVuZGVyVGV4dENvbnRyb2xJbm5lckJsb2NrOjpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91
dFBvaW50JgogCiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OlJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZShOb2RlKiBub2RlKQogICAgIDogUmVuZGVyVGV4dENvbnRyb2wobm9kZSkKLSAg
ICAsIG1fc2VhcmNoUG9wdXBJc1Zpc2libGUoZmFsc2UpCiAgICAgLCBtX3Nob3VsZERyYXdDYXBz
TG9ja0luZGljYXRvcihmYWxzZSkKICAgICAsIG1fZGVzaXJlZElubmVyVGV4dEhlaWdodCgtMSkK
LSAgICAsIG1fc2VhcmNoUG9wdXAoMCkKIHsKICAgICBBU1NFUlQobm9kZS0+aXNIVE1MRWxlbWVu
dCgpKTsKICAgICBBU1NFUlQobm9kZS0+dG9JbnB1dEVsZW1lbnQoKSk7CkBAIC04MSwyMCArNzcs
NiBAQCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZShOb2RlKiBub2RlKQogCiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6On5SZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmUoKQogewotICAgIGlmIChtX3NlYXJjaFBvcHVwKSB7Ci0gICAg
ICAgIG1fc2VhcmNoUG9wdXAtPnBvcHVwTWVudSgpLT5kaXNjb25uZWN0Q2xpZW50KCk7Ci0gICAg
ICAgIG1fc2VhcmNoUG9wdXAgPSAwOwotICAgIH0KLX0KLQotaW5saW5lIEhUTUxFbGVtZW50KiBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNvbnRhaW5lckVsZW1lbnQoKSBjb25zdAotewot
ICAgIHJldHVybiBpbnB1dEVsZW1lbnQoKS0+Y29udGFpbmVyRWxlbWVudCgpOwotfQotCi1pbmxp
bmUgSFRNTEVsZW1lbnQqIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aW5uZXJCbG9ja0Vs
ZW1lbnQoKSBjb25zdAotewotICAgIHJldHVybiBpbnB1dEVsZW1lbnQoKS0+aW5uZXJCbG9ja0Vs
ZW1lbnQoKTsKIH0KIAogaW5saW5lIEhUTUxFbGVtZW50KiBSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmU6OmlubmVyU3BpbkJ1dHRvbkVsZW1lbnQoKSBjb25zdApAQCAtMTAyLDg4ICs4NCwxMiBA
QCBpbmxpbmUgSFRNTEVsZW1lbnQqIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aW5uZXJT
cGluQnV0dG9uRWxlbWVudCgpIGNvbnN0CiAgICAgcmV0dXJuIGlucHV0RWxlbWVudCgpLT5pbm5l
clNwaW5CdXR0b25FbGVtZW50KCk7CiB9CiAKLWlubGluZSBIVE1MRWxlbWVudCogUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lOjpyZXN1bHRzQnV0dG9uRWxlbWVudCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGlucHV0RWxlbWVudCgpLT5yZXN1bHRzQnV0dG9uRWxlbWVudCgpOwotfQotCi1pbmxp
bmUgSFRNTEVsZW1lbnQqIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y2FuY2VsQnV0dG9u
RWxlbWVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlucHV0RWxlbWVudCgpLT5jYW5jZWxCdXR0
b25FbGVtZW50KCk7Ci19Ci0KIFJlbmRlclN0eWxlKiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmU6OnRleHRCYXNlU3R5bGUoKSBjb25zdAogewogICAgIEhUTUxFbGVtZW50KiBpbm5lckJsb2Nr
ID0gaW5uZXJCbG9ja0VsZW1lbnQoKTsKICAgICByZXR1cm4gaW5uZXJCbG9jayA/IGlubmVyQmxv
Y2stPnJlbmRlcmVyKCktPnN0eWxlKCkgOiBzdHlsZSgpOwogfQogCi12b2lkIFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6YWRkU2VhcmNoUmVzdWx0KCkKLXsKLSAgICBIVE1MSW5wdXRFbGVt
ZW50KiBpbnB1dCA9IGlucHV0RWxlbWVudCgpOwotICAgIGlmIChpbnB1dC0+bWF4UmVzdWx0cygp
IDw9IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIFN0cmluZyB2YWx1ZSA9IGlucHV0LT52YWx1
ZSgpOwotICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNl
dHRpbmdzKiBzZXR0aW5ncyA9IGRvY3VtZW50KCktPnNldHRpbmdzKCk7Ci0gICAgaWYgKCFzZXR0
aW5ncyB8fCBzZXR0aW5ncy0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpbnQgc2l6ZSA9IHN0YXRpY19jYXN0PGludD4obV9yZWNlbnRTZWFyY2hlcy5z
aXplKCkpOwotICAgIGZvciAoaW50IGkgPSBzaXplIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAg
ICAgaWYgKG1fcmVjZW50U2VhcmNoZXNbaV0gPT0gdmFsdWUpCi0gICAgICAgICAgICBtX3JlY2Vu
dFNlYXJjaGVzLnJlbW92ZShpKTsKLSAgICB9Ci0KLSAgICBtX3JlY2VudFNlYXJjaGVzLmluc2Vy
dCgwLCB2YWx1ZSk7Ci0gICAgd2hpbGUgKHN0YXRpY19jYXN0PGludD4obV9yZWNlbnRTZWFyY2hl
cy5zaXplKCkpID4gaW5wdXQtPm1heFJlc3VsdHMoKSkKLSAgICAgICAgbV9yZWNlbnRTZWFyY2hl
cy5yZW1vdmVMYXN0KCk7Ci0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUgPSBhdXRvc2F2
ZU5hbWUoKTsKLSAgICBpZiAoIW1fc2VhcmNoUG9wdXApCi0gICAgICAgIG1fc2VhcmNoUG9wdXAg
PSBkb2N1bWVudCgpLT5wYWdlKCktPmNocm9tZSgpLT5jcmVhdGVTZWFyY2hQb3B1cE1lbnUodGhp
cyk7Ci0KLSAgICBtX3NlYXJjaFBvcHVwLT5zYXZlUmVjZW50U2VhcmNoZXMobmFtZSwgbV9yZWNl
bnRTZWFyY2hlcyk7Ci19Ci0KLXZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzaG93
UG9wdXAoKQotewotICAgIGlmIChtX3NlYXJjaFBvcHVwSXNWaXNpYmxlKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoIW1fc2VhcmNoUG9wdXApCi0gICAgICAgIG1fc2VhcmNoUG9wdXAgPSBk
b2N1bWVudCgpLT5wYWdlKCktPmNocm9tZSgpLT5jcmVhdGVTZWFyY2hQb3B1cE1lbnUodGhpcyk7
Ci0KLSAgICBpZiAoIW1fc2VhcmNoUG9wdXAtPmVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9zZWFyY2hQb3B1cElzVmlzaWJsZSA9IHRydWU7Ci0KLSAgICBjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWUgPSBhdXRvc2F2ZU5hbWUoKTsKLSAgICBtX3NlYXJjaFBvcHVwLT5sb2FkUmVj
ZW50U2VhcmNoZXMobmFtZSwgbV9yZWNlbnRTZWFyY2hlcyk7Ci0KLSAgICAvLyBUcmltIHRoZSBy
ZWNlbnQgc2VhcmNoZXMgbGlzdCBpZiB0aGUgbWF4aW11bSBzaXplIGhhcyBjaGFuZ2VkIHNpbmNl
IHdlIGxhc3Qgc2F2ZWQuCi0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBpbnB1dEVsZW1l
bnQoKTsKLSAgICBpZiAoc3RhdGljX2Nhc3Q8aW50PihtX3JlY2VudFNlYXJjaGVzLnNpemUoKSkg
PiBpbnB1dC0+bWF4UmVzdWx0cygpKSB7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIG1fcmVj
ZW50U2VhcmNoZXMucmVtb3ZlTGFzdCgpOwotICAgICAgICB9IHdoaWxlIChzdGF0aWNfY2FzdDxp
bnQ+KG1fcmVjZW50U2VhcmNoZXMuc2l6ZSgpKSA+IGlucHV0LT5tYXhSZXN1bHRzKCkpOwotCi0g
ICAgICAgIG1fc2VhcmNoUG9wdXAtPnNhdmVSZWNlbnRTZWFyY2hlcyhuYW1lLCBtX3JlY2VudFNl
YXJjaGVzKTsKLSAgICB9Ci0KLSAgICBtX3NlYXJjaFBvcHVwLT5wb3B1cE1lbnUoKS0+c2hvdyhw
aXhlbFNuYXBwZWRJbnRSZWN0KGFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkpLCBkb2N1bWVudCgp
LT52aWV3KCksIC0xKTsKLX0KLQotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Omhp
ZGVQb3B1cCgpCi17Ci0gICAgaWYgKG1fc2VhcmNoUG9wdXApCi0gICAgICAgIG1fc2VhcmNoUG9w
dXAtPnBvcHVwTWVudSgpLT5oaWRlKCk7Ci19Ci0KIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBh
aW50T2Zmc2V0KQogewogICAgIFJlbmRlclRleHRDb250cm9sOjpwYWludChwYWludEluZm8sIHBh
aW50T2Zmc2V0KTsKQEAgLTIwMCw2ICsxMDYsMTEgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYK
ICAgICB9CiB9CiAKK0xheW91dFVuaXQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjb21w
dXRlSGVpZ2h0TGltaXQoKSBjb25zdAoreworICAgIHJldHVybiBjb250YWluZXJFbGVtZW50KCkg
PyBjb250ZW50SGVpZ2h0KCkgOiBoZWlnaHQoKTsKK30KKwogdm9pZCBSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OmxheW91dCgpCiB7CiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZW1vdmUg
dGhlIGhlaWdodC1yZWxhdGVkIGhhY2tzIGluIGxheW91dCgpIGFuZApAQCAtMjI1LDcgKzEzNiw3
IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsYXlvdXQoKQogICAgIExheW91
dFVuaXQgZGVzaXJlZEhlaWdodCA9IHRleHRCbG9ja0hlaWdodCgpOwogICAgIExheW91dFVuaXQg
Y3VycmVudEhlaWdodCA9IGlubmVyVGV4dFJlbmRlcmVyLT5oZWlnaHQoKTsKIAotICAgIExheW91
dFVuaXQgaGVpZ2h0TGltaXQgPSAoaW5wdXRFbGVtZW50KCktPmlzU2VhcmNoRmllbGQoKSB8fCAh
Y29udGFpbmVyKSA/IGhlaWdodCgpIDogY29udGVudEhlaWdodCgpOworICAgIExheW91dFVuaXQg
aGVpZ2h0TGltaXQgPSBjb21wdXRlSGVpZ2h0TGltaXQoKTsKICAgICBpZiAoY3VycmVudEhlaWdo
dCA+IGhlaWdodExpbWl0KSB7CiAgICAgICAgIGlmIChkZXNpcmVkSGVpZ2h0ICE9IGN1cnJlbnRI
ZWlnaHQpCiAgICAgICAgICAgICBzZXROZWVkc0xheW91dCh0cnVlLCBNYXJrT25seVRoaXMpOwpA
QCAtMjU4LDEyICsxNjksOCBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5
b3V0KCkKICAgICBpZiAoIWNvbnRhaW5lciAmJiBjdXJyZW50SGVpZ2h0ICE9IGNvbnRlbnRIZWln
aHQoKSkgewogICAgICAgICBMYXlvdXRVbml0IGhlaWdodERpZmYgPSBjdXJyZW50SGVpZ2h0IC0g
Y29udGVudEhlaWdodCgpOwogICAgICAgICBpbm5lclRleHRSZW5kZXJlci0+c2V0WShpbm5lclRl
eHRSZW5kZXJlci0+eSgpIC0gKGhlaWdodERpZmYgLyAyICsgbGF5b3V0TW9kKGhlaWdodERpZmYs
IDIpKSk7Ci0gICAgfSBlbHNlIGlmIChpbnB1dEVsZW1lbnQoKS0+aXNTZWFyY2hGaWVsZCgpICYm
IGNvbnRhaW5lclJlbmRlcmVyICYmIGNvbnRhaW5lclJlbmRlcmVyLT5oZWlnaHQoKSA+IGNvbnRl
bnRIZWlnaHQoKSkgewotICAgICAgICAvLyBBIHF1aXJrIGZvciBmaW5kLWluLXBhZ2UgYm94IG9u
IFNhZmFyaSBXaW5kb3dzLgotICAgICAgICAvLyBodHRwOi8vd2Via2l0Lm9yZy9iLzYzMTU3Ci0g
ICAgICAgIExheW91dFVuaXQgaGVpZ2h0RGlmZiA9IGNvbnRhaW5lclJlbmRlcmVyLT5oZWlnaHQo
KSAtIGNvbnRlbnRIZWlnaHQoKTsKLSAgICAgICAgY29udGFpbmVyUmVuZGVyZXItPnNldFkoY29u
dGFpbmVyUmVuZGVyZXItPnkoKSAtIChoZWlnaHREaWZmIC8gMiArIGxheW91dE1vZChoZWlnaHRE
aWZmLCAyKSkpOwotICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgY2VudGVyQ29udGFpbmVySWZO
ZWVkZWQoY29udGFpbmVyUmVuZGVyZXIpOwogCiAgICAgLy8gSWdub3JlcyB0aGUgcGFkZGluZ3Mg
Zm9yIHRoZSBpbm5lciBzcGluIGJ1dHRvbi4KICAgICBpZiAoUmVuZGVyQm94KiBpbm5lclNwaW5C
b3ggPSBpbm5lclNwaW5CdXR0b25FbGVtZW50KCkgPyBpbm5lclNwaW5CdXR0b25FbGVtZW50KCkt
PnJlbmRlckJveCgpIDogMCkgewpAQCAtNDMxLDMxICszMzgsMTIgQEAgTGF5b3V0VW5pdCBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnByZWZlcnJlZENvbnRlbnRXaWR0aChmbG9hdCBjaGFy
V2lkdGgpIGMKIAogTGF5b3V0VW5pdCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNvbXB1
dGVDb250cm9sSGVpZ2h0KExheW91dFVuaXQgbGluZUhlaWdodCwgTGF5b3V0VW5pdCBub25Db250
ZW50SGVpZ2h0KSBjb25zdAogewotICAgIEhUTUxFbGVtZW50KiByZXN1bHRzQnV0dG9uID0gcmVz
dWx0c0J1dHRvbkVsZW1lbnQoKTsKLSAgICBpZiAoUmVuZGVyQm94KiByZXN1bHRzUmVuZGVyZXIg
PSByZXN1bHRzQnV0dG9uID8gcmVzdWx0c0J1dHRvbi0+cmVuZGVyQm94KCkgOiAwKSB7Ci0gICAg
ICAgIHJlc3VsdHNSZW5kZXJlci0+Y29tcHV0ZUxvZ2ljYWxIZWlnaHQoKTsKLSAgICAgICAgbm9u
Q29udGVudEhlaWdodCA9IG1heChub25Db250ZW50SGVpZ2h0LCByZXN1bHRzUmVuZGVyZXItPmJv
cmRlckFuZFBhZGRpbmdIZWlnaHQoKSArIHJlc3VsdHNSZW5kZXJlci0+bWFyZ2luSGVpZ2h0KCkp
OwotICAgICAgICBsaW5lSGVpZ2h0ID0gbWF4KGxpbmVIZWlnaHQsIHJlc3VsdHNSZW5kZXJlci0+
aGVpZ2h0KCkpOwotICAgIH0KLSAgICBIVE1MRWxlbWVudCogY2FuY2VsQnV0dG9uID0gY2FuY2Vs
QnV0dG9uRWxlbWVudCgpOwotICAgIGlmIChSZW5kZXJCb3gqIGNhbmNlbFJlbmRlcmVyID0gY2Fu
Y2VsQnV0dG9uID8gY2FuY2VsQnV0dG9uLT5yZW5kZXJCb3goKSA6IDApIHsKLSAgICAgICAgY2Fu
Y2VsUmVuZGVyZXItPmNvbXB1dGVMb2dpY2FsSGVpZ2h0KCk7Ci0gICAgICAgIG5vbkNvbnRlbnRI
ZWlnaHQgPSBtYXgobm9uQ29udGVudEhlaWdodCwgY2FuY2VsUmVuZGVyZXItPmJvcmRlckFuZFBh
ZGRpbmdIZWlnaHQoKSArIGNhbmNlbFJlbmRlcmVyLT5tYXJnaW5IZWlnaHQoKSk7Ci0gICAgICAg
IGxpbmVIZWlnaHQgPSBtYXgobGluZUhlaWdodCwgY2FuY2VsUmVuZGVyZXItPmhlaWdodCgpKTsK
LSAgICB9Ci0KICAgICByZXR1cm4gbGluZUhlaWdodCArIG5vbkNvbnRlbnRIZWlnaHQ7CiB9CiAK
IHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp1cGRhdGVGcm9tRWxlbWVudCgpCiB7
CiAgICAgUmVuZGVyVGV4dENvbnRyb2w6OnVwZGF0ZUZyb21FbGVtZW50KCk7Ci0KLSAgICBpZiAo
Y2FuY2VsQnV0dG9uRWxlbWVudCgpKQotICAgICAgICB1cGRhdGVDYW5jZWxCdXR0b25WaXNpYmls
aXR5KCk7Ci0KLSAgICBpZiAobV9zZWFyY2hQb3B1cElzVmlzaWJsZSkKLSAgICAgICAgbV9zZWFy
Y2hQb3B1cC0+cG9wdXBNZW51KCktPnVwZGF0ZUZyb21FbGVtZW50KCk7CiB9CiAKIFBhc3NSZWZQ
dHI8UmVuZGVyU3R5bGU+IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y3JlYXRlSW5uZXJU
ZXh0U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUpIGNvbnN0CkBAIC00OTYsMTg4
ICszODQsMTIgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjpjcmVhdGVJbm5lckJsb2NrU3R5bGUoY29uc3QKICAgICByZXR1cm4gaW5uZXJCbG9j
a1N0eWxlLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6
OnVwZGF0ZUNhbmNlbEJ1dHRvblZpc2liaWxpdHkoKSBjb25zdAotewotICAgIFJlbmRlck9iamVj
dCogY2FuY2VsQnV0dG9uUmVuZGVyZXIgPSBjYW5jZWxCdXR0b25FbGVtZW50KCktPnJlbmRlcmVy
KCk7Ci0gICAgaWYgKCFjYW5jZWxCdXR0b25SZW5kZXJlcikKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgY29uc3QgUmVuZGVyU3R5bGUqIGN1clN0eWxlID0gY2FuY2VsQnV0dG9uUmVuZGVyZXItPnN0
eWxlKCk7Ci0gICAgRVZpc2liaWxpdHkgYnV0dG9uVmlzaWJpbGl0eSA9IHZpc2liaWxpdHlGb3JD
YW5jZWxCdXR0b24oKTsKLSAgICBpZiAoY3VyU3R5bGUtPnZpc2liaWxpdHkoKSA9PSBidXR0b25W
aXNpYmlsaXR5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGNh
bmNlbEJ1dHRvblN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lKGN1clN0eWxlKTsKLSAgICBjYW5j
ZWxCdXR0b25TdHlsZS0+c2V0VmlzaWJpbGl0eShidXR0b25WaXNpYmlsaXR5KTsKLSAgICBjYW5j
ZWxCdXR0b25SZW5kZXJlci0+c2V0U3R5bGUoY2FuY2VsQnV0dG9uU3R5bGUpOwotfQotCi1FVmlz
aWJpbGl0eSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnZpc2liaWxpdHlGb3JDYW5jZWxC
dXR0b24oKSBjb25zdAotewotICAgIHJldHVybiAoc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IEhJ
RERFTiB8fCBpbnB1dEVsZW1lbnQoKS0+dmFsdWUoKS5pc0VtcHR5KCkpID8gSElEREVOIDogVklT
SUJMRTsKLX0KLQogYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnRleHRTaG91bGRC
ZVRydW5jYXRlZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGRvY3VtZW50KCktPmZvY3VzZWROb2Rl
KCkgIT0gbm9kZSgpCiAgICAgICAgICYmIHN0eWxlKCktPnRleHRPdmVyZmxvdygpID09IFRleHRP
dmVyZmxvd0VsbGlwc2lzOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIFJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6YXV0b3NhdmVOYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSktPmdldEF0dHJpYnV0ZShhdXRvc2F2ZUF0dHIpOwotfQot
Ci0vLyBQb3B1cE1lbnVDbGllbnQgbWV0aG9kcwotdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmU6OnZhbHVlQ2hhbmdlZCh1bnNpZ25lZCBsaXN0SW5kZXgsIGJvb2wgZmlyZUV2ZW50cykK
LXsKLSAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihsaXN0SW5kZXgpIDwgbGlzdFNpemUoKSk7
Ci0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBpbnB1dEVsZW1lbnQoKTsKLSAgICBpZiAo
c3RhdGljX2Nhc3Q8aW50PihsaXN0SW5kZXgpID09IChsaXN0U2l6ZSgpIC0gMSkpIHsKLSAgICAg
ICAgaWYgKGZpcmVFdmVudHMpIHsKLSAgICAgICAgICAgIG1fcmVjZW50U2VhcmNoZXMuY2xlYXIo
KTsKLSAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSA9IGF1dG9zYXZlTmFtZSgp
OwotICAgICAgICAgICAgaWYgKCFuYW1lLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGlm
ICghbV9zZWFyY2hQb3B1cCkKLSAgICAgICAgICAgICAgICAgICAgbV9zZWFyY2hQb3B1cCA9IGRv
Y3VtZW50KCktPnBhZ2UoKS0+Y2hyb21lKCktPmNyZWF0ZVNlYXJjaFBvcHVwTWVudSh0aGlzKTsK
LSAgICAgICAgICAgICAgICBtX3NlYXJjaFBvcHVwLT5zYXZlUmVjZW50U2VhcmNoZXMobmFtZSwg
bV9yZWNlbnRTZWFyY2hlcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ug
ewotICAgICAgICBpbnB1dC0+c2V0VmFsdWUoaXRlbVRleHQobGlzdEluZGV4KSk7Ci0gICAgICAg
IGlmIChmaXJlRXZlbnRzKQotICAgICAgICAgICAgaW5wdXQtPm9uU2VhcmNoKCk7Ci0gICAgICAg
IGlucHV0LT5zZWxlY3QoKTsKLSAgICB9Ci19Ci0KLVN0cmluZyBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6Oml0ZW1UZXh0KHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKLXsKLSAgICBpbnQg
c2l6ZSA9IGxpc3RTaXplKCk7Ci0gICAgaWYgKHNpemUgPT0gMSkgewotICAgICAgICBBU1NFUlQo
IWxpc3RJbmRleCk7Ci0gICAgICAgIHJldHVybiBzZWFyY2hNZW51Tm9SZWNlbnRTZWFyY2hlc1Rl
eHQoKTsKLSAgICB9Ci0gICAgaWYgKCFsaXN0SW5kZXgpCi0gICAgICAgIHJldHVybiBzZWFyY2hN
ZW51UmVjZW50U2VhcmNoZXNUZXh0KCk7Ci0gICAgaWYgKGl0ZW1Jc1NlcGFyYXRvcihsaXN0SW5k
ZXgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgaWYgKHN0YXRpY19jYXN0PGludD4o
bGlzdEluZGV4KSA9PSAoc2l6ZSAtIDEpKQotICAgICAgICByZXR1cm4gc2VhcmNoTWVudUNsZWFy
UmVjZW50U2VhcmNoZXNUZXh0KCk7Ci0gICAgcmV0dXJuIG1fcmVjZW50U2VhcmNoZXNbbGlzdElu
ZGV4IC0gMV07Ci19Ci0KLVN0cmluZyBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Oml0ZW1M
YWJlbCh1bnNpZ25lZCkgY29uc3QKLXsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmlu
ZyBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Oml0ZW1JY29uKHVuc2lnbmVkKSBjb25zdAot
ewotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmU6Oml0ZW1Jc0VuYWJsZWQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAotewotICAgICBp
ZiAoIWxpc3RJbmRleCB8fCBpdGVtSXNTZXBhcmF0b3IobGlzdEluZGV4KSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1Qb3B1cE1lbnVTdHlsZSBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6Oml0ZW1TdHlsZSh1bnNpZ25lZCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbWVudVN0eWxlKCk7Ci19Ci0KLVBvcHVwTWVudVN0eWxlIFJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZTo6bWVudVN0eWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gUG9wdXBNZW51U3R5
bGUoc3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBzdHls
ZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpLCBz
dHlsZSgpLT5mb250KCksIHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFLAotICAgICAg
ICBzdHlsZSgpLT5kaXNwbGF5KCkgPT0gTk9ORSwgc3R5bGUoKS0+dGV4dEluZGVudCgpLCBzdHls
ZSgpLT5kaXJlY3Rpb24oKSwgaXNPdmVycmlkZShzdHlsZSgpLT51bmljb2RlQmlkaSgpKSk7Ci19
Ci0KLWludCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNsaWVudEluc2V0TGVmdCgpIGNv
bnN0Ci17Ci0gICAgLy8gSW5zZXQgdGhlIG1lbnUgYnkgdGhlIHJhZGl1cyBvZiB0aGUgY2FwIG9u
IHRoZSBsZWZ0IHNvIHRoYXQKLSAgICAvLyBpdCBvbmx5IHJ1bnMgYWxvbmcgdGhlIHN0cmFpZ2h0
IHBhcnQgb2YgdGhlIGJlemVsLgotICAgIHJldHVybiBoZWlnaHQoKSAvIDI7Ci19Ci0KLWludCBS
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNsaWVudEluc2V0UmlnaHQoKSBjb25zdAotewot
ICAgIC8vIEluc2V0IHRoZSBtZW51IGJ5IHRoZSByYWRpdXMgb2YgdGhlIGNhcCBvbiB0aGUgcmln
aHQgc28gdGhhdAotICAgIC8vIGl0IG9ubHkgcnVucyBhbG9uZyB0aGUgc3RyYWlnaHQgcGFydCBv
ZiB0aGUgYmV6ZWwgKHVubGVzcyBpdCBuZWVkcwotICAgIC8vIHRvIGJlIHdpZGVyKS4KLSAgICBy
ZXR1cm4gaGVpZ2h0KCkgLyAyOwotfQotCi1MYXlvdXRVbml0IFJlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZTo6Y2xpZW50UGFkZGluZ0xlZnQoKSBjb25zdAotewotICAgIExheW91dFVuaXQgcGFk
ZGluZyA9IHBhZGRpbmdMZWZ0KCk7Ci0gICAgaWYgKFJlbmRlckJveCogYm94ID0gaW5uZXJCbG9j
a0VsZW1lbnQoKSA/IGlubmVyQmxvY2tFbGVtZW50KCktPnJlbmRlckJveCgpIDogMCkKLSAgICAg
ICAgcGFkZGluZyArPSBib3gtPngoKTsKLSAgICByZXR1cm4gcGFkZGluZzsKLX0KLQotTGF5b3V0
VW5pdCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNsaWVudFBhZGRpbmdSaWdodCgpIGNv
bnN0Ci17Ci0gICAgTGF5b3V0VW5pdCBwYWRkaW5nID0gcGFkZGluZ1JpZ2h0KCk7Ci0gICAgaWYg
KFJlbmRlckJveCogY29udGFpbmVyQm94ID0gY29udGFpbmVyRWxlbWVudCgpID8gY29udGFpbmVy
RWxlbWVudCgpLT5yZW5kZXJCb3goKSA6IDApIHsKLSAgICAgICAgaWYgKFJlbmRlckJveCogaW5u
ZXJCbG9ja0JveCA9IGlubmVyQmxvY2tFbGVtZW50KCkgPyBpbm5lckJsb2NrRWxlbWVudCgpLT5y
ZW5kZXJCb3goKSA6IDApCi0gICAgICAgICAgICBwYWRkaW5nICs9IGNvbnRhaW5lckJveC0+d2lk
dGgoKSAtIChpbm5lckJsb2NrQm94LT54KCkgKyBpbm5lckJsb2NrQm94LT53aWR0aCgpKTsKLSAg
ICB9Ci0gICAgcmV0dXJuIHBhZGRpbmc7Ci19Ci0KLWludCBSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmU6Omxpc3RTaXplKCkgY29uc3QKLXsKLSAgICAvLyBJZiB0aGVyZSBhcmUgbm8gcmVjZW50
IHNlYXJjaGVzLCB0aGVuIG91ciBtZW51IHdpbGwgaGF2ZSAxICJObyByZWNlbnQgc2VhcmNoZXMi
IGl0ZW0uCi0gICAgaWYgKCFtX3JlY2VudFNlYXJjaGVzLnNpemUoKSkKLSAgICAgICAgcmV0dXJu
IDE7Ci0gICAgLy8gT3RoZXJ3aXNlLCBsZWF2ZSByb29tIGluIHRoZSBtZW51IGZvciBhIGhlYWRl
ciwgYSBzZXBhcmF0b3IsIGFuZCB0aGUgIkNsZWFyIHJlY2VudCBzZWFyY2hlcyIgaXRlbS4KLSAg
ICByZXR1cm4gbV9yZWNlbnRTZWFyY2hlcy5zaXplKCkgKyAzOwotfQotCi1pbnQgUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lOjpzZWxlY3RlZEluZGV4KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
LTE7Ci19Ci0KLXZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpwb3B1cERpZEhpZGUo
KQotewotICAgIG1fc2VhcmNoUG9wdXBJc1Zpc2libGUgPSBmYWxzZTsKLX0KLQotYm9vbCBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6Oml0ZW1Jc1NlcGFyYXRvcih1bnNpZ25lZCBsaXN0SW5k
ZXgpIGNvbnN0Ci17Ci0gICAgLy8gVGhlIHNlcGFyYXRvciB3aWxsIGJlIHRoZSBzZWNvbmQgdG8g
bGFzdCBpdGVtIGluIG91ciBsaXN0LgotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGxpc3RJ
bmRleCkgPT0gKGxpc3RTaXplKCkgLSAyKTsKLX0KLQotYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6Oml0ZW1Jc0xhYmVsKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbGlzdEluZGV4ID09IDA7Ci19Ci0KLWJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lOjppdGVtSXNTZWxlY3RlZCh1bnNpZ25lZCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLXZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpzZXRUZXh0RnJvbUl0ZW0o
dW5zaWduZWQgbGlzdEluZGV4KQotewotICAgIGlucHV0RWxlbWVudCgpLT5zZXRWYWx1ZShpdGVt
VGV4dChsaXN0SW5kZXgpKTsKLX0KLQotRm9udFNlbGVjdG9yKiBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmU6OmZvbnRTZWxlY3RvcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRvY3VtZW50KCkt
PnN0eWxlUmVzb2x2ZXIoKS0+Zm9udFNlbGVjdG9yKCk7Ci19Ci0KLUhvc3RXaW5kb3cqIFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZTo6aG9zdFdpbmRvdygpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGRvY3VtZW50KCktPnZpZXcoKS0+aG9zdFdpbmRvdygpOwotfQotCiB2b2lkIFJlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZTo6YXV0b3Njcm9sbCgpCiB7CiAgICAgUmVuZGVyTGF5ZXIqIGxheWVy
ID0gaW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJCb3goKS0+bGF5ZXIoKTsKQEAgLTc0MSwxNyAr
NDUzLDYgQEAgYm9vbCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmxvZ2ljYWxTY3JvbGwo
U2Nyb2xsTG9naWNhbERpcmVjdGlvbiBkaXJlY3Rpb24KICAgICByZXR1cm4gUmVuZGVyQmxvY2s6
OmxvZ2ljYWxTY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllciwgc3RvcE5v
ZGUpOwogfQogCi1QYXNzUmVmUHRyPFNjcm9sbGJhcj4gUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lOjpjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhLCBTY3Jv
bGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUgY29udHJv
bFNpemUpCi17Ci0gICAgUmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0OwotICAgIGJvb2wgaGFzQ3Vz
dG9tU2Nyb2xsYmFyU3R5bGUgPSBzdHlsZSgpLT5oYXNQc2V1ZG9TdHlsZShTQ1JPTExCQVIpOwot
ICAgIGlmIChoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSkKLSAgICAgICAgd2lkZ2V0ID0gUmVuZGVy
U2Nyb2xsYmFyOjpjcmVhdGVDdXN0b21TY3JvbGxiYXIoc2Nyb2xsYWJsZUFyZWEsIG9yaWVudGF0
aW9uLCB0aGlzLT5ub2RlKCkpOwotICAgIGVsc2UKLSAgICAgICAgd2lkZ2V0ID0gU2Nyb2xsYmFy
OjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIoc2Nyb2xsYWJsZUFyZWEsIG9yaWVudGF0aW9uLCBjb250
cm9sU2l6ZSk7Ci0gICAgcmV0dXJuIHdpZGdldC5yZWxlYXNlKCk7Ci19Ci0KIEhUTUxJbnB1dEVs
ZW1lbnQqIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6aW5wdXRFbGVtZW50KCkgY29uc3QK
IHsKICAgICByZXR1cm4gbm9kZSgpLT50b0lucHV0RWxlbWVudCgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCmluZGV4
IDZlMjFjODU2YzEwZmE5ZmJhNDM2YzA2Zjc0OWMxNGUxZTJhODBiYTYuLmZmYzUwYTMzZGM0YTVk
NTdmOTllOWU1MDM3Y2E2ZmY5YTFhMmZhZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgKQEAgLTIzLDMyICsyMywz
MSBAQAogI2lmbmRlZiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmVfaAogI2RlZmluZSBSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmVfaAogCi0jaW5jbHVkZSAiUG9wdXBNZW51Q2xpZW50Lmgi
CisjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250
cm9sLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSFRNTElucHV0RWxlbWVudDsK
LWNsYXNzIFNlYXJjaFBvcHVwTWVudTsKIAotY2xhc3MgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lIDogcHVibGljIFJlbmRlclRleHRDb250cm9sLCBwcml2YXRlIFBvcHVwTWVudUNsaWVudCB7
CitjbGFzcyBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUgOiBwdWJsaWMgUmVuZGVyVGV4dENv
bnRyb2wgewogcHVibGljOgogICAgIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShOb2RlKik7
CiAgICAgdmlydHVhbCB+UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKCk7CiAgICAgLy8gRklY
TUU6IE1vdmUgY3JlYXRlKlN0eWxlKCkgdG8gdGhlaXIgY2xhc3Nlcy4KICAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+IGNyZWF0ZUlubmVyVGV4dFN0eWxlKGNvbnN0IFJlbmRlclN0
eWxlKiBzdGFydFN0eWxlKSBjb25zdDsKICAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBjcmVh
dGVJbm5lckJsb2NrU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUqIHN0YXJ0U3R5bGUpIGNvbnN0Owot
ICAgIHZvaWQgdXBkYXRlQ2FuY2VsQnV0dG9uVmlzaWJpbGl0eSgpIGNvbnN0OwotCi0gICAgdm9p
ZCBhZGRTZWFyY2hSZXN1bHQoKTsKLSAgICB2b2lkIHN0b3BTZWFyY2hFdmVudFRpbWVyKCk7Ci0K
LSAgICBib29sIHBvcHVwSXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV9zZWFyY2hQb3B1cElz
VmlzaWJsZTsgfQotICAgIHZvaWQgc2hvd1BvcHVwKCk7Ci0gICAgdm9pZCBoaWRlUG9wdXAoKTsK
IAogICAgIHZvaWQgY2Fwc0xvY2tTdGF0ZU1heUhhdmVDaGFuZ2VkKCk7CiAKK3Byb3RlY3RlZDoK
KyAgICB2aXJ0dWFsIHZvaWQgY2VudGVyQ29udGFpbmVySWZOZWVkZWQoUmVuZGVyQm94KikgY29u
c3QgeyB9CisgICAgdmlydHVhbCBMYXlvdXRVbml0IGNvbXB1dGVIZWlnaHRMaW1pdCgpIGNvbnN0
OworICAgIEhUTUxFbGVtZW50KiBjb250YWluZXJFbGVtZW50KCkgY29uc3Q7CisgICAgSFRNTEVs
ZW1lbnQqIGlubmVyQmxvY2tFbGVtZW50KCkgY29uc3Q7CisgICAgSFRNTElucHV0RWxlbWVudCog
aW5wdXRFbGVtZW50KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZyb21FbGVtZW50
KCkgT1ZFUlJJREU7CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGhhc0NvbnRyb2xDbGlw
KCkgY29uc3Q7CiAgICAgdmlydHVhbCBMYXlvdXRSZWN0IGNvbnRyb2xDbGlwUmVjdChjb25zdCBM
YXlvdXRQb2ludCYpIGNvbnN0OwpAQCAtNzYsNTkgKzc1LDI4IEBAIHByaXZhdGU6CiAgICAgdmly
dHVhbCBMYXlvdXRVbml0IHByZWZlcnJlZENvbnRlbnRXaWR0aChmbG9hdCBjaGFyV2lkdGgpIGNv
bnN0OwogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBjb21wdXRlQ29udHJvbEhlaWdodChMYXlvdXRV
bml0IGxpbmVIZWlnaHQsIExheW91dFVuaXQgbm9uQ29udGVudEhlaWdodCkgY29uc3QgT1ZFUlJJ
REU7CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZyb21FbGVtZW50KCk7CiAgICAgdmly
dHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5
bGUqIG9sZFN0eWxlKTsKIAogICAgIHZpcnR1YWwgUmVuZGVyU3R5bGUqIHRleHRCYXNlU3R5bGUo
KSBjb25zdDsKIAotICAgIEVWaXNpYmlsaXR5IHZpc2liaWxpdHlGb3JDYW5jZWxCdXR0b24oKSBj
b25zdDsKICAgICBib29sIHRleHRTaG91bGRCZVRydW5jYXRlZCgpIGNvbnN0OwotICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgYXV0b3NhdmVOYW1lKCkgY29uc3Q7Ci0KLSAgICAvLyBQb3B1cE1lbnVD
bGllbnQgbWV0aG9kcwotICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQodW5zaWduZWQgbGlz
dEluZGV4LCBib29sIGZpcmVFdmVudHMgPSB0cnVlKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZv
aWQgc2VsZWN0aW9uQ2hhbmdlZCh1bnNpZ25lZCwgYm9vbCkgT1ZFUlJJREUgeyB9Ci0gICAgdmly
dHVhbCB2b2lkIHNlbGVjdGlvbkNsZWFyZWQoKSBPVkVSUklERSB7IH0KLSAgICB2aXJ0dWFsIFN0
cmluZyBpdGVtVGV4dCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZp
cnR1YWwgU3RyaW5nIGl0ZW1MYWJlbCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0IE9WRVJSSURF
OwotICAgIHZpcnR1YWwgU3RyaW5nIGl0ZW1JY29uKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3Qg
T1ZFUlJJREU7Ci0gICAgdmlydHVhbCBTdHJpbmcgaXRlbVRvb2xUaXAodW5zaWduZWQpIGNvbnN0
IE9WRVJSSURFIHsgcmV0dXJuIFN0cmluZygpOyB9Ci0gICAgdmlydHVhbCBTdHJpbmcgaXRlbUFj
Y2Vzc2liaWxpdHlUZXh0KHVuc2lnbmVkKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBTdHJpbmco
KTsgfQotICAgIHZpcnR1YWwgYm9vbCBpdGVtSXNFbmFibGVkKHVuc2lnbmVkIGxpc3RJbmRleCkg
Y29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBQb3B1cE1lbnVTdHlsZSBpdGVtU3R5bGUodW5z
aWduZWQgbGlzdEluZGV4KSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFBvcHVwTWVudVN0
eWxlIG1lbnVTdHlsZSgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgaW50IGNsaWVudElu
c2V0TGVmdCgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgaW50IGNsaWVudEluc2V0Umln
aHQoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIExheW91dFVuaXQgY2xpZW50UGFkZGlu
Z0xlZnQoKSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIExheW91dFVuaXQgY2xpZW50UGFk
ZGluZ1JpZ2h0KCkgY29uc3QgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBpbnQgbGlzdFNpemUoKSBj
b25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGludCBzZWxlY3RlZEluZGV4KCkgY29uc3QgT1ZF
UlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHBvcHVwRGlkSGlkZSgpIE9WRVJSSURFOwotICAgIHZp
cnR1YWwgYm9vbCBpdGVtSXNTZXBhcmF0b3IodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdCBPVkVS
UklERTsKLSAgICB2aXJ0dWFsIGJvb2wgaXRlbUlzTGFiZWwodW5zaWduZWQgbGlzdEluZGV4KSBj
b25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgaXRlbUlzU2VsZWN0ZWQodW5zaWduZWQg
bGlzdEluZGV4KSBjb25zdCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUG9wT3Zl
cigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIHZh
bHVlU2hvdWxkQ2hhbmdlT25Ib3RUcmFjaygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGZhbHNl
OyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFRleHRGcm9tSXRlbSh1bnNpZ25lZCBsaXN0SW5kZXgp
IE9WRVJSSURFOwotICAgIHZpcnR1YWwgRm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IoKSBjb25z
dCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3coKSBjb25zdCBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxi
YXIoU2Nyb2xsYWJsZUFyZWEqLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJv
bFNpemUpIE9WRVJSSURFOwotCi0gICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50KCkg
Y29uc3Q7CiAKLSAgICBIVE1MRWxlbWVudCogY29udGFpbmVyRWxlbWVudCgpIGNvbnN0OwotICAg
IEhUTUxFbGVtZW50KiBpbm5lckJsb2NrRWxlbWVudCgpIGNvbnN0OwogICAgIEhUTUxFbGVtZW50
KiBpbm5lclNwaW5CdXR0b25FbGVtZW50KCkgY29uc3Q7Ci0gICAgSFRNTEVsZW1lbnQqIHJlc3Vs
dHNCdXR0b25FbGVtZW50KCkgY29uc3Q7Ci0gICAgSFRNTEVsZW1lbnQqIGNhbmNlbEJ1dHRvbkVs
ZW1lbnQoKSBjb25zdDsKIAotICAgIGJvb2wgbV9zZWFyY2hQb3B1cElzVmlzaWJsZTsKICAgICBi
b29sIG1fc2hvdWxkRHJhd0NhcHNMb2NrSW5kaWNhdG9yOwogICAgIExheW91dFVuaXQgbV9kZXNp
cmVkSW5uZXJUZXh0SGVpZ2h0OwotICAgIFJlZlB0cjxTZWFyY2hQb3B1cE1lbnU+IG1fc2VhcmNo
UG9wdXA7Ci0gICAgVmVjdG9yPFN0cmluZz4gbV9yZWNlbnRTZWFyY2hlczsKIH07CiAKK2lubGlu
ZSBIVE1MRWxlbWVudCogUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjb250YWluZXJFbGVt
ZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaW5wdXRFbGVtZW50KCktPmNvbnRhaW5lckVsZW1l
bnQoKTsKK30KKworaW5saW5lIEhUTUxFbGVtZW50KiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmU6OmlubmVyQmxvY2tFbGVtZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaW5wdXRFbGVtZW50
KCktPmlubmVyQmxvY2tFbGVtZW50KCk7Cit9CisKIGlubGluZSBSZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmUqIHRvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKFJlbmRlck9iamVjdCogb2Jq
ZWN0KQogewogICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNUZXh0RmllbGQoKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyaW5nQWxsSW5PbmUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcmluZ0FsbEluT25lLmNwcAppbmRleCBk
MTdiZDMxM2E0MzE5MGM5YmRmZTVjZThkMzJmOGY3MTg1NDQ0YTRmLi4xZjBhNGEzOGU3MmUyMWE3
ZGMzZjBhZGNkM2NhZTM2M2M4YTUxZDkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyaW5nQWxsSW5PbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJpbmdBbGxJbk9uZS5jcHAKQEAgLTkxLDYgKzkxLDcgQEAKICNpbmNsdWRlICJSZW5k
ZXJTY3JvbGxiYXIuY3BwIgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhclBhcnQuY3BwIgogI2lu
Y2x1ZGUgIlJlbmRlclNjcm9sbGJhclRoZW1lLmNwcCIKKyNpbmNsdWRlICJSZW5kZXJTZWFyY2hG
aWVsZC5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyU2xpZGVyLmNwcCIKICNpbmNsdWRlICJSZW5kZXJU
YWJsZS5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDYXB0aW9uLmNwcCIK
</data>

          </attachment>
      

    </bug>

</bugzilla>