<?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>111766</bug_id>
          
          <creation_ts>2013-03-07 12:43:40 -0800</creation_ts>
          <short_desc>[CSS Exclusions] Refactor the ExclusionPolygon class to enable storing multiple boundaries</short_desc>
          <delta_ts>2013-03-18 10:09:08 -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>CSS</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>
          
          <blocked>111080</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hans Muller">giles_joplin</reporter>
          <assigned_to name="Hans Muller">giles_joplin</assigned_to>
          <cc>eric</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>850386</commentid>
    <comment_count>0</comment_count>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2013-03-07 12:43:40 -0800</bug_when>
    <thetext>To support the shape-margin and shape-padding CSS properties, the ExclusionPolygon class will need to lazily compute a padded (inset) version of its polygonal boundary, and one that&apos;s expanded by the margin.

A FloatPolygon class should be factored out of the ExclusionPolygon class so that its internal state can be defined with FloatPolygon valued fields for each of the padded/margin/original boundaries.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>850401</commentid>
    <comment_count>1</comment_count>
      <attachid>192072</attachid>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2013-03-07 12:59:33 -0800</bug_when>
    <thetext>Created attachment 192072
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>850604</commentid>
    <comment_count>2</comment_count>
      <attachid>192072</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2013-03-07 16:27:31 -0800</bug_when>
    <thetext>Comment on attachment 192072
Patch

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

&gt; Source/WebCore/rendering/ExclusionPolygon.cpp:77
&gt; +FloatPolygon::FloatPolygon(PassOwnPtr&lt;Vector&lt;FloatPoint&gt; &gt; vertices, WindRule fillRule)

New classes usually get new files. I would like to have this in a separate file as well. Is it generic enough to move it to WebCore/platform? If not, what would make it generic?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>850626</commentid>
    <comment_count>3</comment_count>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2013-03-07 16:45:47 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 192072 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=192072&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/ExclusionPolygon.cpp:77
&gt; &gt; +FloatPolygon::FloatPolygon(PassOwnPtr&lt;Vector&lt;FloatPoint&gt; &gt; vertices, WindRule fillRule)
&gt; 
&gt; New classes usually get new files. I would like to have this in a separate file as well. Is it generic enough to move it to WebCore/platform? If not, what would make it generic?

To make this class generic, I&apos;d need to remove the following two methods, since they&apos;re rather specific to Exclusion processing:

    void computeXIntersections(float y, bool isMinY, Vector&lt;ExclusionInterval&gt;&amp;) const;
    void computeOverlappingEdgeXProjections(float minY, float maxY, Vector&lt;ExclusionInterval&gt;&amp;) const;

To move FloatPolygon to its own pair of files, I&apos;d also move/include VertexPair and FloatPolygonEdge. 

And perhaps VertexPair should be called FloatVertexPair.  I&apos;d call it FloatPointPair, but it exists to provide access to a pair of points called &quot;vertices&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851418</commentid>
    <comment_count>4</comment_count>
      <attachid>192268</attachid>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2013-03-08 12:17:46 -0800</bug_when>
    <thetext>Created attachment 192268
Patch

Refactored platform/graphics/FloatPolygon class out of rendering/ExclusionPolygon per Dirk&apos;s feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851431</commentid>
    <comment_count>5</comment_count>
      <attachid>192268</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-03-08 12:29:40 -0800</bug_when>
    <thetext>Comment on attachment 192268
Patch

Attachment 192268 did not pass qt-ews (qt):
Output: http://webkit-commit-queue.appspot.com/results/17113152</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851445</commentid>
    <comment_count>6</comment_count>
      <attachid>192275</attachid>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2013-03-08 12:45:29 -0800</bug_when>
    <thetext>Created attachment 192275
Patch

Updated Qt Target.pri build file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851479</commentid>
    <comment_count>7</comment_count>
      <attachid>192275</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2013-03-08 13:46:53 -0800</bug_when>
    <thetext>Comment on attachment 192275
Patch

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

I would like to wait for the bots before giving it my final review.

&gt; Source/WebCore/ChangeLog:1295
&gt;          (WebCore::FormData::appendKeyValuePairItems):
&gt;  
&gt; +2013-03-07  Hans Muller  &lt;hmuller@adobe.com&gt;
&gt; +
&gt; +        [CSS Exclusions] Refactor the ExclusionPolygon class to enable storing multiple boundaries
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=111766
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Refactored the ExclusionPolygon class to enable adding support for shape-margin and shape-padding.
&gt; +        Extracted a new FloatPolygon class which is now used by ExclusionPolygon to represent the shape&apos;s
&gt; +        boundary. It will be used to add m_paddedPolygon and m_marginPolygon members to ExclusionPolygon

Merge problem here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>851514</commentid>
    <comment_count>8</comment_count>
      <attachid>192284</attachid>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2013-03-08 14:37:58 -0800</bug_when>
    <thetext>Created attachment 192284
Patch

Removed duplicate ChangeLog entry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852379</commentid>
    <comment_count>9</comment_count>
      <attachid>192480</attachid>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2013-03-11 09:00:18 -0700</bug_when>
    <thetext>Created attachment 192480
Patch

Resync&apos;d with latest build file changes.  Hopefully that will make the recalcitrant EWS bots happier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852588</commentid>
    <comment_count>10</comment_count>
      <attachid>192480</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2013-03-11 12:39:09 -0700</bug_when>
    <thetext>Comment on attachment 192480
Patch

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

I am sorry. It took me a bit longer to review it. The patch looks great to me. Just some snippets before landing.

&gt; Source/WebCore/rendering/ExclusionPolygon.cpp:138
&gt; +    for (unsigned i = 0; i &lt; edges.size(); ++i)

I would keep the braces here, since the content of the for loop is more than a line.

&gt; Source/WebCore/rendering/ExclusionPolygon.h:40
&gt;  #include &quot;FloatPoint.h&quot;
&gt; +#include &quot;FloatPolygon.h&quot;
&gt;  #include &quot;FloatRect.h&quot;
&gt; -#include &quot;PODIntervalTree.h&quot;
&gt;  #include &quot;WindRule.h&quot;
&gt; -#include &lt;wtf/MathExtras.h&gt;
&gt;  #include &lt;wtf/OwnPtr.h&gt;
&gt;  #include &lt;wtf/PassOwnPtr.h&gt;

Can&apos;t your remove FloatPoint, FloatRect, WindRule, OwnPtr etc. dependencies here? Should be included in FloatPolygon already.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852673</commentid>
    <comment_count>11</comment_count>
      <attachid>192546</attachid>
    <who name="Hans Muller">giles_joplin</who>
    <bug_when>2013-03-11 13:42:50 -0700</bug_when>
    <thetext>Created attachment 192546
Patch

Made the suggested changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852776</commentid>
    <comment_count>12</comment_count>
      <attachid>192546</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-11 15:14:31 -0700</bug_when>
    <thetext>Comment on attachment 192546
Patch

Clearing flags on attachment: 192546

Committed r145411: &lt;http://trac.webkit.org/changeset/145411&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852777</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-11 15:14:37 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192072</attachid>
            <date>2013-03-07 12:59:33 -0800</date>
            <delta_ts>2013-03-08 12:17:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>tmp.patch</filename>
            <type>text/plain</type>
            <size>26445</size>
            <attacher name="Hans Muller">giles_joplin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiMGY0ZTA2Li4yMDdkYjEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDUg
QEAKKzIwMTMtMDMtMDcgIEhhbnMgTXVsbGVyICA8aG11bGxlckBhZG9iZS5jb20+CisKKyAgICAg
ICAgW0NTUyBFeGNsdXNpb25zXSBSZWZhY3RvciB0aGUgRXhjbHVzaW9uUG9seWdvbiBjbGFzcyB0
byBlbmFibGUgc3RvcmluZyBtdWx0aXBsZSBib3VuZGFyaWVzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTE3NjYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvcmVkIHRoZSBFeGNsdXNpb25Qb2x5
Z29uIGNsYXNzIHRvIGVuYWJsZSBhZGRpbmcgc3VwcG9ydCBmb3Igc2hhcGUtbWFyZ2luIGFuZCBz
aGFwZS1wYWRkaW5nLgorICAgICAgICBFeHRyYWN0ZWQgYSBuZXcgRmxvYXRQb2x5Z29uIGNsYXNz
IHdoaWNoIGlzIG5vdyB1c2VkIGJ5IEV4Y2x1c2lvblBvbHlnb24gdG8gcmVwcmVzZW50IHRoZSBz
aGFwZSdzCisgICAgICAgIGJvdW5kYXJ5LiBJdCB3aWxsIGJlIHVzZWQgdG8gYWRkIG1fcGFkZGVk
UG9seWdvbiBhbmQgbV9tYXJnaW5Qb2x5Z29uIG1lbWJlcnMgdG8gRXhjbHVzaW9uUG9seWdvbgor
ICAgICAgICBpbiBhIHN1YnNlcXVlbnQgcGF0Y2guCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBU
aGlzIGlzIHN0cmljdGx5IGEgcmVmYWN0b3Jpbmcgb2YgdGhlIGV4aXN0aW5nIGNvZGUuCisKKyAg
ICAgICAgKiByZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHA6CisgICAgICAgIChFZGdlSW50
ZXJzZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UG9seWdvbjo6RmxvYXRQb2x5Z29u
KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UG9seWdvbjo6ZmluZE5leHRFZGdlVmVydGV4SW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2x5Z29uOjpvdmVybGFwcGluZ0VkZ2VzKToK
KyAgICAgICAgKFdlYkNvcmU6OmxlZnRTaWRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UG9s
eWdvbjo6Y29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZVhJbnRlcnNlY3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6Z2V0VmVydGV4SW50ZXJzZWN0aW9uVmVydGljZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6RmxvYXRQb2x5Z29uOjpjb21wdXRlWEludGVyc2VjdGlvbnMpOgorICAg
ICAgICAoV2ViQ29yZTo6RmxvYXRQb2x5Z29uOjpjb21wdXRlT3ZlcmxhcHBpbmdFZGdlWFByb2pl
Y3Rpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb246OmdldEV4Y2x1ZGVk
SW50ZXJ2YWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lvblBvbHlnb246OmdldEluY2x1
ZGVkSW50ZXJ2YWxzKToKKyAgICAgICAgKFdlYkNvcmU6OmZpcnN0Rml0UmVjdEluUG9seWdvbik6
CisgICAgICAgIChXZWJDb3JlOjpFeGNsdXNpb25Qb2x5Z29uOjpmaXJzdEluY2x1ZGVkSW50ZXJ2
YWxMb2dpY2FsVG9wKToKKyAgICAgICAgKiByZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5oOgor
ICAgICAgICAoRmxvYXRQb2x5Z29uKTogLSBFeHRyYWN0ZWQgZnJvbSBFeGNsdXNpb25Qb2x5Z29u
CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFBvbHlnb246OmVkZ2VBdCk6CisgICAgICAgIChXZWJD
b3JlOjpGbG9hdFBvbHlnb246OmJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0
UG9seWdvbjo6aXNFbXB0eSk6CisgICAgICAgIChGbG9hdFBvbHlnb25FZGdlKTogLSBXYXMgRXhj
bHVzaW9uUG9seWdvbkVkZ2UuCisgICAgICAgIChXZWJDb3JlOjpGbG9hdFBvbHlnb25FZGdlOjpw
cmV2aW91c0VkZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2x5Z29uRWRnZTo6bmV4dEVk
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2x5Z29uRWRnZTo6cG9seWdvbik6CisgICAg
ICAgIChXZWJDb3JlOjpPZmZzZXRQb2x5Z29uRWRnZTo6T2Zmc2V0UG9seWdvbkVkZ2UpOgorICAg
ICAgICAoRXhjbHVzaW9uUG9seWdvbik6IC0gTm93IGp1c3QgaGFzIHRoZSBFeGNsdXNpb25TaGFw
ZSBtZXRob2Qgb3ZlcnJpZGVzIGFuZCBvbmUgcHJpdmF0IGVGbG9hdFBvbHlnb24gbWVtYmVyLgor
ICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbjo6RXhjbHVzaW9uUG9seWdvbik6CisK
IDIwMTMtMDMtMDcgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KIAogICAg
ICAgICBBWDogQ2FuJ3QgYWN0aXZhdGUgbGlua3Mgd2l0aCBWb2ljZU92ZXIgaW4gU2FmYXJpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHAKaW5kZXggMTA2
MGMyMC4uOTFiOWEwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1
c2lvblBvbHlnb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25Q
b2x5Z29uLmNwcApAQCAtNDIsNyArNDIsNyBAQCBlbnVtIEVkZ2VJbnRlcnNlY3Rpb25UeXBlIHsK
IH07CiAKIHN0cnVjdCBFZGdlSW50ZXJzZWN0aW9uIHsKLSAgICBjb25zdCBFeGNsdXNpb25Qb2x5
Z29uRWRnZSogZWRnZTsKKyAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdlKiBlZGdlOwogICAgIEZs
b2F0UG9pbnQgcG9pbnQ7CiAgICAgRWRnZUludGVyc2VjdGlvblR5cGUgdHlwZTsKIH07CkBAIC03
NCwyNyArNzQsOCBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIG5leHRWZXJ0ZXhJbmRleCh1bnNp
Z25lZCB2ZXJ0ZXhJbmRleCwgdW5zaWduZWQgblZlcnRpY2VzLAogICAgIHJldHVybiAoKGNsb2Nr
d2lzZSkgPyB2ZXJ0ZXhJbmRleCArIDEgOiB2ZXJ0ZXhJbmRleCAtIDEgKyBuVmVydGljZXMpICUg
blZlcnRpY2VzOwogfQogCi11bnNpZ25lZCBFeGNsdXNpb25Qb2x5Z29uOjpmaW5kTmV4dEVkZ2VW
ZXJ0ZXhJbmRleCh1bnNpZ25lZCB2ZXJ0ZXhJbmRleDEsIGJvb2wgY2xvY2t3aXNlKSBjb25zdAot
ewotICAgIHVuc2lnbmVkIG5WZXJ0aWNlcyA9IG51bWJlck9mVmVydGljZXMoKTsKLSAgICB1bnNp
Z25lZCB2ZXJ0ZXhJbmRleDIgPSBuZXh0VmVydGV4SW5kZXgodmVydGV4SW5kZXgxLCBuVmVydGlj
ZXMsIGNsb2Nrd2lzZSk7Ci0KLSAgICB3aGlsZSAodmVydGV4SW5kZXgyICYmIGFyZUNvaW5jaWRl
bnRQb2ludHModmVydGV4QXQodmVydGV4SW5kZXgxKSwgdmVydGV4QXQodmVydGV4SW5kZXgyKSkp
Ci0gICAgICAgIHZlcnRleEluZGV4MiA9IG5leHRWZXJ0ZXhJbmRleCh2ZXJ0ZXhJbmRleDIsIG5W
ZXJ0aWNlcywgY2xvY2t3aXNlKTsKLQotICAgIHdoaWxlICh2ZXJ0ZXhJbmRleDIpIHsKLSAgICAg
ICAgdW5zaWduZWQgdmVydGV4SW5kZXgzID0gbmV4dFZlcnRleEluZGV4KHZlcnRleEluZGV4Miwg
blZlcnRpY2VzLCBjbG9ja3dpc2UpOwotICAgICAgICBpZiAoIWFyZUNvbGxpbmVhclBvaW50cyh2
ZXJ0ZXhBdCh2ZXJ0ZXhJbmRleDEpLCB2ZXJ0ZXhBdCh2ZXJ0ZXhJbmRleDIpLCB2ZXJ0ZXhBdCh2
ZXJ0ZXhJbmRleDMpKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB2ZXJ0ZXhJbmRleDIg
PSB2ZXJ0ZXhJbmRleDM7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZlcnRleEluZGV4MjsKLX0KLQot
RXhjbHVzaW9uUG9seWdvbjo6RXhjbHVzaW9uUG9seWdvbihQYXNzT3duUHRyPFZlY3RvcjxGbG9h
dFBvaW50PiA+IHZlcnRpY2VzLCBXaW5kUnVsZSBmaWxsUnVsZSkKLSAgICA6IEV4Y2x1c2lvblNo
YXBlKCkKLSAgICAsIG1fdmVydGljZXModmVydGljZXMpCitGbG9hdFBvbHlnb246OkZsb2F0UG9s
eWdvbihQYXNzT3duUHRyPFZlY3RvcjxGbG9hdFBvaW50PiA+IHZlcnRpY2VzLCBXaW5kUnVsZSBm
aWxsUnVsZSkKKyAgICA6IG1fdmVydGljZXModmVydGljZXMpCiAgICAgLCBtX2ZpbGxSdWxlKGZp
bGxSdWxlKQogewogICAgIHVuc2lnbmVkIG5WZXJ0aWNlcyA9IG51bWJlck9mVmVydGljZXMoKTsK
QEAgLTEzMSw4ICsxMTIsOCBAQCBFeGNsdXNpb25Qb2x5Z29uOjpFeGNsdXNpb25Qb2x5Z29uKFBh
c3NPd25QdHI8VmVjdG9yPEZsb2F0UG9pbnQ+ID4gdmVydGljZXMsIFdpbgogICAgIH0gd2hpbGUg
KHZlcnRleEluZGV4MSk7CiAKICAgICBpZiAoZWRnZUluZGV4ID4gMykgewotICAgICAgICBjb25z
dCBFeGNsdXNpb25Qb2x5Z29uRWRnZSYgZmlyc3RFZGdlID0gbV9lZGdlc1swXTsKLSAgICAgICAg
Y29uc3QgRXhjbHVzaW9uUG9seWdvbkVkZ2UmIGxhc3RFZGdlID0gbV9lZGdlc1tlZGdlSW5kZXgg
LSAxXTsKKyAgICAgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgZmlyc3RFZGdlID0gbV9lZGdl
c1swXTsKKyAgICAgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgbGFzdEVkZ2UgPSBtX2VkZ2Vz
W2VkZ2VJbmRleCAtIDFdOwogICAgICAgICBpZiAoYXJlQ29sbGluZWFyUG9pbnRzKGxhc3RFZGdl
LnZlcnRleDEoKSwgbGFzdEVkZ2UudmVydGV4MigpLCBmaXJzdEVkZ2UudmVydGV4MigpKSkgewog
ICAgICAgICAgICAgbV9lZGdlc1swXS5tX3ZlcnRleEluZGV4MSA9IGxhc3RFZGdlLm1fdmVydGV4
SW5kZXgxOwogICAgICAgICAgICAgZWRnZUluZGV4LS07CkBAIC0xNDYsMTQgKzEyNyw3NCBAQCBF
eGNsdXNpb25Qb2x5Z29uOjpFeGNsdXNpb25Qb2x5Z29uKFBhc3NPd25QdHI8VmVjdG9yPEZsb2F0
UG9pbnQ+ID4gdmVydGljZXMsIFdpbgogICAgICAgICByZXR1cm47CiAKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9lZGdlcy5zaXplKCk7ICsraSkgewotICAgICAgICBFeGNsdXNpb25Q
b2x5Z29uRWRnZSogZWRnZSA9ICZtX2VkZ2VzW2ldOworICAgICAgICBGbG9hdFBvbHlnb25FZGdl
KiBlZGdlID0gJm1fZWRnZXNbaV07CiAgICAgICAgIG1fZWRnZVRyZWUuYWRkKEVkZ2VJbnRlcnZh
bChlZGdlLT5taW5ZKCksIGVkZ2UtPm1heFkoKSwgZWRnZSkpOwogICAgIH0KIH0KIAotc3RhdGlj
IGJvb2wgY29tcHV0ZVhJbnRlcnNlY3Rpb24oY29uc3QgRXhjbHVzaW9uUG9seWdvbkVkZ2UqIGVk
Z2VQb2ludGVyLCBmbG9hdCB5LCBFZGdlSW50ZXJzZWN0aW9uJiByZXN1bHQpCit1bnNpZ25lZCBG
bG9hdFBvbHlnb246OmZpbmROZXh0RWRnZVZlcnRleEluZGV4KHVuc2lnbmVkIHZlcnRleEluZGV4
MSwgYm9vbCBjbG9ja3dpc2UpIGNvbnN0CiB7Ci0gICAgY29uc3QgRXhjbHVzaW9uUG9seWdvbkVk
Z2UmIGVkZ2UgPSAqZWRnZVBvaW50ZXI7CisgICAgdW5zaWduZWQgblZlcnRpY2VzID0gbnVtYmVy
T2ZWZXJ0aWNlcygpOworICAgIHVuc2lnbmVkIHZlcnRleEluZGV4MiA9IG5leHRWZXJ0ZXhJbmRl
eCh2ZXJ0ZXhJbmRleDEsIG5WZXJ0aWNlcywgY2xvY2t3aXNlKTsKKworICAgIHdoaWxlICh2ZXJ0
ZXhJbmRleDIgJiYgYXJlQ29pbmNpZGVudFBvaW50cyh2ZXJ0ZXhBdCh2ZXJ0ZXhJbmRleDEpLCB2
ZXJ0ZXhBdCh2ZXJ0ZXhJbmRleDIpKSkKKyAgICAgICAgdmVydGV4SW5kZXgyID0gbmV4dFZlcnRl
eEluZGV4KHZlcnRleEluZGV4MiwgblZlcnRpY2VzLCBjbG9ja3dpc2UpOworCisgICAgd2hpbGUg
KHZlcnRleEluZGV4MikgeworICAgICAgICB1bnNpZ25lZCB2ZXJ0ZXhJbmRleDMgPSBuZXh0VmVy
dGV4SW5kZXgodmVydGV4SW5kZXgyLCBuVmVydGljZXMsIGNsb2Nrd2lzZSk7CisgICAgICAgIGlm
ICghYXJlQ29sbGluZWFyUG9pbnRzKHZlcnRleEF0KHZlcnRleEluZGV4MSksIHZlcnRleEF0KHZl
cnRleEluZGV4MiksIHZlcnRleEF0KHZlcnRleEluZGV4MykpKQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIHZlcnRleEluZGV4MiA9IHZlcnRleEluZGV4MzsKKyAgICB9CisKKyAgICByZXR1
cm4gdmVydGV4SW5kZXgyOworfQorCitib29sIEZsb2F0UG9seWdvbjo6b3ZlcmxhcHBpbmdFZGdl
cyhmbG9hdCBtaW5ZLCBmbG9hdCBtYXhZLCBWZWN0b3I8Y29uc3QgRmxvYXRQb2x5Z29uRWRnZSo+
JiByZXN1bHQpIGNvbnN0Cit7CisgICAgVmVjdG9yPEZsb2F0UG9seWdvbjo6RWRnZUludGVydmFs
PiBvdmVybGFwcGluZ0VkZ2VJbnRlcnZhbHM7CisgICAgbV9lZGdlVHJlZS5hbGxPdmVybGFwcyhG
bG9hdFBvbHlnb246OkVkZ2VJbnRlcnZhbChtaW5ZLCBtYXhZLCAwKSwgb3ZlcmxhcHBpbmdFZGdl
SW50ZXJ2YWxzKTsKKyAgICB1bnNpZ25lZCBvdmVybGFwcGluZ0VkZ2VJbnRlcnZhbHNTaXplID0g
b3ZlcmxhcHBpbmdFZGdlSW50ZXJ2YWxzLnNpemUoKTsKKyAgICByZXN1bHQucmVzaXplKG92ZXJs
YXBwaW5nRWRnZUludGVydmFsc1NpemUpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBv
dmVybGFwcGluZ0VkZ2VJbnRlcnZhbHNTaXplOyArK2kpIHsKKyAgICAgICAgY29uc3QgRmxvYXRQ
b2x5Z29uRWRnZSogZWRnZSA9IHN0YXRpY19jYXN0PGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UqPihv
dmVybGFwcGluZ0VkZ2VJbnRlcnZhbHNbaV0uZGF0YSgpKTsKKyAgICAgICAgQVNTRVJUKGVkZ2Up
OworICAgICAgICByZXN1bHRbaV0gPSBlZGdlOworICAgIH0KKyAgICByZXR1cm4gb3ZlcmxhcHBp
bmdFZGdlSW50ZXJ2YWxzU2l6ZSA+IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgZmxvYXQgbGVmdFNp
ZGUoY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MSwgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4Miwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit7CisgICAgcmV0dXJuICgocG9pbnQueCgpIC0gdmVy
dGV4MS54KCkpICogKHZlcnRleDIueSgpIC0gdmVydGV4MS55KCkpKSAtICgodmVydGV4Mi54KCkg
LSB2ZXJ0ZXgxLngoKSkgKiAocG9pbnQueSgpIC0gdmVydGV4MS55KCkpKTsKK30KKworYm9vbCBG
bG9hdFBvbHlnb246OmNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAorewor
ICAgIGlmICghbV9ib3VuZGluZ0JveC5jb250YWlucyhwb2ludCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGludCB3aW5kaW5nTnVtYmVyID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbnVtYmVyT2ZFZGdlcygpOyArK2kpIHsKKyAgICAgICAgY29uc3QgRmxvYXRQb2lu
dCYgdmVydGV4MSA9IGVkZ2VBdChpKS52ZXJ0ZXgxKCk7CisgICAgICAgIGNvbnN0IEZsb2F0UG9p
bnQmIHZlcnRleDIgPSBlZGdlQXQoaSkudmVydGV4MigpOworICAgICAgICBpZiAoaXNQb2ludE9u
TGluZVNlZ21lbnQodmVydGV4MSwgdmVydGV4MiwgcG9pbnQpKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIGlmICh2ZXJ0ZXgyLnkoKSA8IHBvaW50LnkoKSkgeworICAgICAgICAg
ICAgaWYgKCh2ZXJ0ZXgxLnkoKSA+IHBvaW50LnkoKSkgJiYgKGxlZnRTaWRlKHZlcnRleDEsIHZl
cnRleDIsIHBvaW50KSA+IDApKQorICAgICAgICAgICAgICAgICsrd2luZGluZ051bWJlcjsKKyAg
ICAgICAgfSBlbHNlIGlmICh2ZXJ0ZXgyLnkoKSA+IHBvaW50LnkoKSkgeworICAgICAgICAgICAg
aWYgKCh2ZXJ0ZXgxLnkoKSA8PSBwb2ludC55KCkpICYmIChsZWZ0U2lkZSh2ZXJ0ZXgxLCB2ZXJ0
ZXgyLCBwb2ludCkgPCAwKSkKKyAgICAgICAgICAgICAgICAtLXdpbmRpbmdOdW1iZXI7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gd2luZGluZ051bWJlcjsKK30KKworc3RhdGljIGJv
b2wgY29tcHV0ZVhJbnRlcnNlY3Rpb24oY29uc3QgRmxvYXRQb2x5Z29uRWRnZSogZWRnZVBvaW50
ZXIsIGZsb2F0IHksIEVkZ2VJbnRlcnNlY3Rpb24mIHJlc3VsdCkKK3sKKyAgICBjb25zdCBGbG9h
dFBvbHlnb25FZGdlJiBlZGdlID0gKmVkZ2VQb2ludGVyOwogCiAgICAgaWYgKGVkZ2UubWluWSgp
ID4geSB8fCBlZGdlLm1heFkoKSA8IHkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE5Miw4
ICsyMzMsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZ2V0VmVydGV4SW50ZXJzZWN0aW9uVmVydGlj
ZXMoY29uc3QgRWRnZUludGVyc2VjdGlvbiYgaW50ZXJzZQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBBU1NFUlQoaW50ZXJzZWN0aW9uLmVkZ2UgJiYgaW50ZXJzZWN0aW9uLmVkZ2UtPnBv
bHlnb24oKSk7Ci0gICAgY29uc3QgRXhjbHVzaW9uUG9seWdvbiYgcG9seWdvbiA9ICooaW50ZXJz
ZWN0aW9uLmVkZ2UtPnBvbHlnb24oKSk7Ci0gICAgY29uc3QgRXhjbHVzaW9uUG9seWdvbkVkZ2Um
IHRoaXNFZGdlID0gKihpbnRlcnNlY3Rpb24uZWRnZSk7CisgICAgY29uc3QgRmxvYXRQb2x5Z29u
JiBwb2x5Z29uID0gKihpbnRlcnNlY3Rpb24uZWRnZS0+cG9seWdvbigpKTsKKyAgICBjb25zdCBG
bG9hdFBvbHlnb25FZGdlJiB0aGlzRWRnZSA9ICooaW50ZXJzZWN0aW9uLmVkZ2UpOwogCiAgICAg
aWYgKChpbnRlcnNlY3Rpb24udHlwZSA9PSBWZXJ0ZXhNaW5ZICYmICh0aGlzRWRnZS52ZXJ0ZXgx
KCkueSgpIDwgdGhpc0VkZ2UudmVydGV4MigpLnkoKSkpCiAgICAgICAgIHx8IChpbnRlcnNlY3Rp
b24udHlwZSA9PSBWZXJ0ZXhNYXhZICYmICh0aGlzRWRnZS52ZXJ0ZXgxKCkueSgpID4gdGhpc0Vk
Z2UudmVydGV4MigpLnkoKSkpKSB7CkBAIC0yMjYsMTggKzI2NywxOCBAQCBzdGF0aWMgYm9vbCBj
b21wYXJlRWRnZUludGVyc2VjdGlvblgoY29uc3QgRWRnZUludGVyc2VjdGlvbiYgaW50ZXJzZWN0
aW9uMSwgY29ucwogICAgIHJldHVybiAoeDEgPT0geDIpID8gaW50ZXJzZWN0aW9uMS50eXBlIDwg
aW50ZXJzZWN0aW9uMi50eXBlIDogeDEgPCB4MjsKIH0KIAotdm9pZCBFeGNsdXNpb25Qb2x5Z29u
Ojpjb21wdXRlWEludGVyc2VjdGlvbnMoZmxvYXQgeSwgYm9vbCBpc01pblksIFZlY3RvcjxFeGNs
dXNpb25JbnRlcnZhbD4mIHJlc3VsdCkgY29uc3QKK3ZvaWQgRmxvYXRQb2x5Z29uOjpjb21wdXRl
WEludGVyc2VjdGlvbnMoZmxvYXQgeSwgYm9vbCBpc01pblksIFZlY3RvcjxFeGNsdXNpb25JbnRl
cnZhbD4mIHJlc3VsdCkgY29uc3QKIHsKLSAgICBWZWN0b3I8RXhjbHVzaW9uUG9seWdvbjo6RWRn
ZUludGVydmFsPiBvdmVybGFwcGluZ0VkZ2VzOwotICAgIG1fZWRnZVRyZWUuYWxsT3ZlcmxhcHMo
RXhjbHVzaW9uUG9seWdvbjo6RWRnZUludGVydmFsKHksIHksIDApLCBvdmVybGFwcGluZ0VkZ2Vz
KTsKKyAgICBWZWN0b3I8Y29uc3QgRmxvYXRQb2x5Z29uRWRnZSo+IGVkZ2VzOworICAgIGlmICgh
b3ZlcmxhcHBpbmdFZGdlcyh5LCB5LCBlZGdlcykpCisgICAgICAgIHJldHVybjsKIAogICAgIFZl
Y3RvcjxFZGdlSW50ZXJzZWN0aW9uPiBpbnRlcnNlY3Rpb25zOwogICAgIEVkZ2VJbnRlcnNlY3Rp
b24gaW50ZXJzZWN0aW9uOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvdmVybGFwcGlu
Z0VkZ2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEV4Y2x1c2lvblBvbHlnb25FZGdlKiBlZGdl
ID0gc3RhdGljX2Nhc3Q8RXhjbHVzaW9uUG9seWdvbkVkZ2UqPihvdmVybGFwcGluZ0VkZ2VzW2ld
LmRhdGEoKSk7Ci0gICAgICAgIGlmIChjb21wdXRlWEludGVyc2VjdGlvbihlZGdlLCB5LCBpbnRl
cnNlY3Rpb24pICYmIGludGVyc2VjdGlvbi50eXBlICE9IFZlcnRleFlCb3RoKQorICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBlZGdlcy5zaXplKCk7ICsraSkKKyAgICAgICAgaWYgKGNvbXB1
dGVYSW50ZXJzZWN0aW9uKGVkZ2VzW2ldLCB5LCBpbnRlcnNlY3Rpb24pICYmIGludGVyc2VjdGlv
bi50eXBlICE9IFZlcnRleFlCb3RoKQogICAgICAgICAgICAgaW50ZXJzZWN0aW9ucy5hcHBlbmQo
aW50ZXJzZWN0aW9uKTsKLSAgICB9CisKICAgICBpZiAoaW50ZXJzZWN0aW9ucy5zaXplKCkgPCAy
KQogICAgICAgICByZXR1cm47CiAKQEAgLTI2Myw3ICszMDQsNyBAQCB2b2lkIEV4Y2x1c2lvblBv
bHlnb246OmNvbXB1dGVYSW50ZXJzZWN0aW9ucyhmbG9hdCB5LCBib29sIGlzTWluWSwgVmVjdG9y
PEV4Y2x1cwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgY29uc3QgRXhjbHVz
aW9uUG9seWdvbkVkZ2UmIHRoaXNFZGdlID0gKnRoaXNJbnRlcnNlY3Rpb24uZWRnZTsKKyAgICAg
ICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgdGhpc0VkZ2UgPSAqdGhpc0ludGVyc2VjdGlvbi5l
ZGdlOwogICAgICAgICBib29sIGV2ZW5PZGRDcm9zc2luZyA9ICF3aW5kQ291bnQ7CiAKICAgICAg
ICAgaWYgKGZpbGxSdWxlKCkgPT0gUlVMRV9FVkVOT0REKSB7CkBAIC0yOTUsMTUgKzMzNiwxNSBA
QCB2b2lkIEV4Y2x1c2lvblBvbHlnb246OmNvbXB1dGVYSW50ZXJzZWN0aW9ucyhmbG9hdCB5LCBi
b29sIGlzTWluWSwgVmVjdG9yPEV4Y2x1cwogICAgIH0KIH0KIAotLy8gUmV0dXJuIHRoZSBYIHBy
b2plY3Rpb25zIG9mIHRoZSBlZGdlcyB0aGF0IG92ZXJsYXAgeTEseTIuCi12b2lkIEV4Y2x1c2lv
blBvbHlnb246OmNvbXB1dGVFZGdlSW50ZXJzZWN0aW9ucyhmbG9hdCB5MSwgZmxvYXQgeTIsIFZl
Y3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mIHJlc3VsdCkgY29uc3QKK3ZvaWQgRmxvYXRQb2x5Z29u
Ojpjb21wdXRlT3ZlcmxhcHBpbmdFZGdlWFByb2plY3Rpb25zKGZsb2F0IHkxLCBmbG9hdCB5Miwg
VmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYgcmVzdWx0KSBjb25zdAogewotICAgIFZlY3RvcjxF
eGNsdXNpb25Qb2x5Z29uOjpFZGdlSW50ZXJ2YWw+IG92ZXJsYXBwaW5nRWRnZXM7Ci0gICAgbV9l
ZGdlVHJlZS5hbGxPdmVybGFwcyhFeGNsdXNpb25Qb2x5Z29uOjpFZGdlSW50ZXJ2YWwoeTEsIHky
LCAwKSwgb3ZlcmxhcHBpbmdFZGdlcyk7CisgICAgVmVjdG9yPGNvbnN0IEZsb2F0UG9seWdvbkVk
Z2UqPiBlZGdlczsKKyAgICBpZiAoIW92ZXJsYXBwaW5nRWRnZXMoeTEsIHkyLCBlZGdlcykpCisg
ICAgICAgIHJldHVybjsKIAogICAgIEVkZ2VJbnRlcnNlY3Rpb24gaW50ZXJzZWN0aW9uOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvdmVybGFwcGluZ0VkZ2VzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIGNvbnN0IEV4Y2x1c2lvblBvbHlnb25FZGdlICplZGdlID0gc3RhdGljX2Nhc3Q8
RXhjbHVzaW9uUG9seWdvbkVkZ2UqPihvdmVybGFwcGluZ0VkZ2VzW2ldLmRhdGEoKSk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVkZ2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNv
bnN0IEZsb2F0UG9seWdvbkVkZ2UgKmVkZ2UgPSBlZGdlc1tpXTsKICAgICAgICAgZmxvYXQgeDE7
CiAgICAgICAgIGZsb2F0IHgyOwogCkBAIC0zMzgsMTQgKzM3OSwxNCBAQCB2b2lkIEV4Y2x1c2lv
blBvbHlnb246OmdldEV4Y2x1ZGVkSW50ZXJ2YWxzKGZsb2F0IGxvZ2ljYWxUb3AsIGZsb2F0IGxv
Z2ljYWxIZWlnaAogICAgIGZsb2F0IHkyID0geTEgKyBsb2dpY2FsSGVpZ2h0OwogCiAgICAgVmVj
dG9yPEV4Y2x1c2lvbkludGVydmFsPiB5MVhJbnRlcnZhbHMsIHkyWEludGVydmFsczsKLSAgICBj
b21wdXRlWEludGVyc2VjdGlvbnMoeTEsIHRydWUsIHkxWEludGVydmFscyk7Ci0gICAgY29tcHV0
ZVhJbnRlcnNlY3Rpb25zKHkyLCBmYWxzZSwgeTJYSW50ZXJ2YWxzKTsKKyAgICBtX3BvbHlnb24u
Y29tcHV0ZVhJbnRlcnNlY3Rpb25zKHkxLCB0cnVlLCB5MVhJbnRlcnZhbHMpOworICAgIG1fcG9s
eWdvbi5jb21wdXRlWEludGVyc2VjdGlvbnMoeTIsIGZhbHNlLCB5MlhJbnRlcnZhbHMpOwogCiAg
ICAgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiBtZXJnZWRJbnRlcnZhbHM7CiAgICAgbWVyZ2VF
eGNsdXNpb25JbnRlcnZhbHMoeTFYSW50ZXJ2YWxzLCB5MlhJbnRlcnZhbHMsIG1lcmdlZEludGVy
dmFscyk7CiAKICAgICBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+IGVkZ2VJbnRlcnZhbHM7Ci0g
ICAgY29tcHV0ZUVkZ2VJbnRlcnNlY3Rpb25zKHkxLCB5MiwgZWRnZUludGVydmFscyk7CisgICAg
bV9wb2x5Z29uLmNvbXB1dGVPdmVybGFwcGluZ0VkZ2VYUHJvamVjdGlvbnMoeTEsIHkyLCBlZGdl
SW50ZXJ2YWxzKTsKIAogICAgIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4gZXhjbHVkZWRJbnRl
cnZhbHM7CiAgICAgbWVyZ2VFeGNsdXNpb25JbnRlcnZhbHMobWVyZ2VkSW50ZXJ2YWxzLCBlZGdl
SW50ZXJ2YWxzLCBleGNsdWRlZEludGVydmFscyk7CkBAIC0zNjUsMTQgKzQwNiwxNCBAQCB2b2lk
IEV4Y2x1c2lvblBvbHlnb246OmdldEluY2x1ZGVkSW50ZXJ2YWxzKGZsb2F0IGxvZ2ljYWxUb3As
IGZsb2F0IGxvZ2ljYWxIZWlnaAogICAgIGZsb2F0IHkyID0geTEgKyBsb2dpY2FsSGVpZ2h0Owog
CiAgICAgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiB5MVhJbnRlcnZhbHMsIHkyWEludGVydmFs
czsKLSAgICBjb21wdXRlWEludGVyc2VjdGlvbnMoeTEsIHRydWUsIHkxWEludGVydmFscyk7Ci0g
ICAgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKHkyLCBmYWxzZSwgeTJYSW50ZXJ2YWxzKTsKKyAgICBt
X3BvbHlnb24uY29tcHV0ZVhJbnRlcnNlY3Rpb25zKHkxLCB0cnVlLCB5MVhJbnRlcnZhbHMpOwor
ICAgIG1fcG9seWdvbi5jb21wdXRlWEludGVyc2VjdGlvbnMoeTIsIGZhbHNlLCB5MlhJbnRlcnZh
bHMpOwogCiAgICAgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiBjb21tb25JbnRlcnZhbHM7CiAg
ICAgaW50ZXJzZWN0RXhjbHVzaW9uSW50ZXJ2YWxzKHkxWEludGVydmFscywgeTJYSW50ZXJ2YWxz
LCBjb21tb25JbnRlcnZhbHMpOwogCiAgICAgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiBlZGdl
SW50ZXJ2YWxzOwotICAgIGNvbXB1dGVFZGdlSW50ZXJzZWN0aW9ucyh5MSwgeTIsIGVkZ2VJbnRl
cnZhbHMpOworICAgIG1fcG9seWdvbi5jb21wdXRlT3ZlcmxhcHBpbmdFZGdlWFByb2plY3Rpb25z
KHkxLCB5MiwgZWRnZUludGVydmFscyk7CiAKICAgICBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+
IGluY2x1ZGVkSW50ZXJ2YWxzOwogICAgIHN1YnRyYWN0RXhjbHVzaW9uSW50ZXJ2YWxzKGNvbW1v
bkludGVydmFscywgZWRnZUludGVydmFscywgaW5jbHVkZWRJbnRlcnZhbHMpOwpAQCAtMzgzLDM0
ICs0MjQsNiBAQCB2b2lkIEV4Y2x1c2lvblBvbHlnb246OmdldEluY2x1ZGVkSW50ZXJ2YWxzKGZs
b2F0IGxvZ2ljYWxUb3AsIGZsb2F0IGxvZ2ljYWxIZWlnaAogICAgIH0KIH0KIAotc3RhdGljIGlu
bGluZSBmbG9hdCBsZWZ0U2lkZShjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgxLCBjb25zdCBGbG9h
dFBvaW50JiB2ZXJ0ZXgyLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKLXsKLSAgICByZXR1cm4g
KChwb2ludC54KCkgLSB2ZXJ0ZXgxLngoKSkgKiAodmVydGV4Mi55KCkgLSB2ZXJ0ZXgxLnkoKSkp
IC0gKCh2ZXJ0ZXgyLngoKSAtIHZlcnRleDEueCgpKSAqIChwb2ludC55KCkgLSB2ZXJ0ZXgxLnko
KSkpOwotfQotCi1ib29sIEV4Y2x1c2lvblBvbHlnb246OmNvbnRhaW5zKGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50KSBjb25zdAotewotICAgIGlmICghbV9ib3VuZGluZ0JveC5jb250YWlucyhwb2lu
dCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGludCB3aW5kaW5nTnVtYmVyID0gMDsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZFZGdlcygpOyArK2kpIHsKLSAg
ICAgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MSA9IGVkZ2VBdChpKS52ZXJ0ZXgxKCk7Ci0g
ICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDIgPSBlZGdlQXQoaSkudmVydGV4MigpOwot
ICAgICAgICBpZiAoaXNQb2ludE9uTGluZVNlZ21lbnQodmVydGV4MSwgdmVydGV4MiwgcG9pbnQp
KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICh2ZXJ0ZXgyLnkoKSA8IHBv
aW50LnkoKSkgewotICAgICAgICAgICAgaWYgKCh2ZXJ0ZXgxLnkoKSA+IHBvaW50LnkoKSkgJiYg
KGxlZnRTaWRlKHZlcnRleDEsIHZlcnRleDIsIHBvaW50KSA+IDApKQotICAgICAgICAgICAgICAg
ICsrd2luZGluZ051bWJlcjsKLSAgICAgICAgfSBlbHNlIGlmICh2ZXJ0ZXgyLnkoKSA+IHBvaW50
LnkoKSkgewotICAgICAgICAgICAgaWYgKCh2ZXJ0ZXgxLnkoKSA8PSBwb2ludC55KCkpICYmIChs
ZWZ0U2lkZSh2ZXJ0ZXgxLCB2ZXJ0ZXgyLCBwb2ludCkgPCAwKSkKLSAgICAgICAgICAgICAgICAt
LXdpbmRpbmdOdW1iZXI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gd2luZGluZ051
bWJlcjsKLX0KLQogYm9vbCBWZXJ0ZXhQYWlyOjpvdmVybGFwc1JlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0KSBjb25zdAogewogICAgIGJvb2wgYm91bmRzT3ZlcmxhcCA9IChtaW5YKCkgPCByZWN0
Lm1heFgoKSkgJiYgKG1heFgoKSA+IHJlY3QueCgpKSAmJiAobWluWSgpIDwgcmVjdC5tYXhZKCkp
ICYmIChtYXhZKCkgPiByZWN0LnkoKSk7CkBAIC00NjgsMTMgKzQ4MSwxNCBAQCBib29sIFZlcnRl
eFBhaXI6OmludGVyc2VjdGlvbihjb25zdCBWZXJ0ZXhQYWlyJiBvdGhlciwgRmxvYXRQb2ludCYg
cG9pbnQpIGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgRXhjbHVzaW9uUG9seWdv
bjo6Zmlyc3RGaXRSZWN0SW5Qb2x5Z29uKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgdW5zaWduZWQg
b2Zmc2V0RWRnZUluZGV4MSwgdW5zaWduZWQgb2Zmc2V0RWRnZUluZGV4MikgY29uc3QKK3N0YXRp
YyBpbmxpbmUgYm9vbCBmaXJzdEZpdFJlY3RJblBvbHlnb24oY29uc3QgRmxvYXRQb2x5Z29uJiBw
b2x5Z29uLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIHVuc2lnbmVkIG9mZnNldEVkZ2VJbmRleDEs
IHVuc2lnbmVkIG9mZnNldEVkZ2VJbmRleDIpCiB7Ci0gICAgVmVjdG9yPEV4Y2x1c2lvblBvbHln
b246OkVkZ2VJbnRlcnZhbD4gb3ZlcmxhcHBpbmdFZGdlczsKLSAgICBtX2VkZ2VUcmVlLmFsbE92
ZXJsYXBzKEV4Y2x1c2lvblBvbHlnb246OkVkZ2VJbnRlcnZhbChyZWN0LnkoKSwgcmVjdC5tYXhZ
KCksIDApLCBvdmVybGFwcGluZ0VkZ2VzKTsKKyAgICBWZWN0b3I8Y29uc3QgRmxvYXRQb2x5Z29u
RWRnZSo+IGVkZ2VzOworICAgIGlmICghcG9seWdvbi5vdmVybGFwcGluZ0VkZ2VzKHJlY3QueSgp
LCByZWN0Lm1heFkoKSwgZWRnZXMpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBvdmVybGFwcGluZ0VkZ2VzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIGNvbnN0IEV4Y2x1c2lvblBvbHlnb25FZGdlKiBlZGdlID0gc3RhdGljX2Nhc3Q8RXhjbHVz
aW9uUG9seWdvbkVkZ2UqPihvdmVybGFwcGluZ0VkZ2VzW2ldLmRhdGEoKSk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGVkZ2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IEZs
b2F0UG9seWdvbkVkZ2UqIGVkZ2UgPSBlZGdlc1tpXTsKICAgICAgICAgaWYgKGVkZ2UtPmVkZ2VJ
bmRleCgpICE9IG9mZnNldEVkZ2VJbmRleDEgJiYgZWRnZS0+ZWRnZUluZGV4KCkgIT0gb2Zmc2V0
RWRnZUluZGV4MiAmJiBlZGdlLT5vdmVybGFwc1JlY3QocmVjdCkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQpAQCAtNDkzLDI0ICs1MDcsMjUgQEAgc3RhdGljIGlubGluZSBib29s
IGFib3ZlT3JUb1RoZUxlZnQoY29uc3QgRmxvYXRSZWN0JiByMSwgY29uc3QgRmxvYXRSZWN0JiBy
MikKIAogYm9vbCBFeGNsdXNpb25Qb2x5Z29uOjpmaXJzdEluY2x1ZGVkSW50ZXJ2YWxMb2dpY2Fs
VG9wKGZsb2F0IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwgY29uc3QgRmxvYXRTaXplJiBtaW5Mb2dp
Y2FsSW50ZXJ2YWxTaXplLCBmbG9hdCYgcmVzdWx0KSBjb25zdAogewotICAgIGlmIChtaW5Mb2dp
Y2FsSW50ZXJ2YWxTaXplLndpZHRoKCkgPiBtX2JvdW5kaW5nQm94LndpZHRoKCkpCisgICAgY29u
c3QgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gbV9wb2x5Z29uLmJvdW5kaW5nQm94KCk7CisgICAg
aWYgKG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUud2lkdGgoKSA+IGJvdW5kaW5nQm94LndpZHRoKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGZsb2F0IG1pblkgPSBzdGQ6Om1heChtX2Jv
dW5kaW5nQm94LnkoKSwgbWluTG9naWNhbEludGVydmFsVG9wKTsKKyAgICBmbG9hdCBtaW5ZID0g
c3RkOjptYXgoYm91bmRpbmdCb3gueSgpLCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3ApOwogICAgIGZs
b2F0IG1heFkgPSBtaW5ZICsgbWluTG9naWNhbEludGVydmFsU2l6ZS5oZWlnaHQoKTsKIAotICAg
IGlmIChtYXhZID4gbV9ib3VuZGluZ0JveC5tYXhZKCkpCisgICAgaWYgKG1heFkgPiBib3VuZGlu
Z0JveC5tYXhZKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFZlY3RvcjxFeGNsdXNp
b25Qb2x5Z29uOjpFZGdlSW50ZXJ2YWw+IG92ZXJsYXBwaW5nRWRnZXM7Ci0gICAgbV9lZGdlVHJl
ZS5hbGxPdmVybGFwcyhFeGNsdXNpb25Qb2x5Z29uOjpFZGdlSW50ZXJ2YWwobWluTG9naWNhbElu
dGVydmFsVG9wLCBtX2JvdW5kaW5nQm94Lm1heFkoKSwgMCksIG92ZXJsYXBwaW5nRWRnZXMpOwor
ICAgIFZlY3Rvcjxjb25zdCBGbG9hdFBvbHlnb25FZGdlKj4gZWRnZXM7CisgICAgbV9wb2x5Z29u
Lm92ZXJsYXBwaW5nRWRnZXMobWluTG9naWNhbEludGVydmFsVG9wLCBib3VuZGluZ0JveC5tYXhZ
KCksIGVkZ2VzKTsKIAogICAgIGZsb2F0IGR4ID0gbWluTG9naWNhbEludGVydmFsU2l6ZS53aWR0
aCgpIC8gMjsKICAgICBmbG9hdCBkeSA9IG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUuaGVpZ2h0KCkg
LyAyOwogICAgIFZlY3RvcjxPZmZzZXRQb2x5Z29uRWRnZT4gb2Zmc2V0RWRnZXM7CiAKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb3ZlcmxhcHBpbmdFZGdlcy5zaXplKCk7ICsraSkgewot
ICAgICAgICBjb25zdCBFeGNsdXNpb25Qb2x5Z29uRWRnZSYgZWRnZSA9ICpzdGF0aWNfY2FzdDxF
eGNsdXNpb25Qb2x5Z29uRWRnZSo+KG92ZXJsYXBwaW5nRWRnZXNbaV0uZGF0YSgpKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWRnZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29u
c3QgRmxvYXRQb2x5Z29uRWRnZSYgZWRnZSA9ICooZWRnZXNbaV0pOwogICAgICAgICBjb25zdCBG
bG9hdFBvaW50JiB2ZXJ0ZXgwID0gZWRnZS5wcmV2aW91c0VkZ2UoKS52ZXJ0ZXgxKCk7CiAgICAg
ICAgIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDEgPSBlZGdlLnZlcnRleDEoKTsKICAgICAgICAg
Y29uc3QgRmxvYXRQb2ludCYgdmVydGV4MiA9IGVkZ2UudmVydGV4MigpOwpAQCAtNTQwLDcgKzU1
NSw3IEBAIGJvb2wgRXhjbHVzaW9uUG9seWdvbjo6Zmlyc3RJbmNsdWRlZEludGVydmFsTG9naWNh
bFRvcChmbG9hdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUCiAgICAgICAgICAgICAgICAgb2Zmc2V0RWRn
ZXMuYXBwZW5kKG9mZnNldEVkZ2VCdWZmZXJbal0pOwogICAgIH0KIAotICAgIG9mZnNldEVkZ2Vz
LmFwcGVuZChPZmZzZXRQb2x5Z29uRWRnZSgqdGhpcywgbWluTG9naWNhbEludGVydmFsVG9wLCBG
bG9hdFNpemUoMCwgZHkpKSk7CisgICAgb2Zmc2V0RWRnZXMuYXBwZW5kKE9mZnNldFBvbHlnb25F
ZGdlKG1fcG9seWdvbiwgbWluTG9naWNhbEludGVydmFsVG9wLCBGbG9hdFNpemUoMCwgZHkpKSk7
CiAKICAgICBGbG9hdFBvaW50IG9mZnNldEVkZ2VzSW50ZXJzZWN0aW9uOwogICAgIEZsb2F0UmVj
dCBmaXJzdEZpdFJlY3Q7CkBAIC01NTMsOCArNTY4LDggQEAgYm9vbCBFeGNsdXNpb25Qb2x5Z29u
OjpmaXJzdEluY2x1ZGVkSW50ZXJ2YWxMb2dpY2FsVG9wKGZsb2F0IG1pbkxvZ2ljYWxJbnRlcnZh
bFQKICAgICAgICAgICAgICAgICBGbG9hdFJlY3QgcG90ZW50aWFsRmlyc3RGaXRSZWN0KHBvdGVu
dGlhbEZpcnN0Rml0TG9jYXRpb24sIG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUpOwogICAgICAgICAg
ICAgICAgIGlmICgocG90ZW50aWFsRmlyc3RGaXRMb2NhdGlvbi55KCkgPj0gbWluTG9naWNhbElu
dGVydmFsVG9wKQogICAgICAgICAgICAgICAgICAgICAmJiAoIWZpcnN0Rml0Rm91bmQgfHwgYWJv
dmVPclRvVGhlTGVmdChwb3RlbnRpYWxGaXJzdEZpdFJlY3QsIGZpcnN0Rml0UmVjdCkpCi0gICAg
ICAgICAgICAgICAgICAgICYmIGNvbnRhaW5zKG9mZnNldEVkZ2VzSW50ZXJzZWN0aW9uKQotICAg
ICAgICAgICAgICAgICAgICAmJiBmaXJzdEZpdFJlY3RJblBvbHlnb24ocG90ZW50aWFsRmlyc3RG
aXRSZWN0LCBvZmZzZXRFZGdlc1tpXS5lZGdlSW5kZXgoKSwgb2Zmc2V0RWRnZXNbal0uZWRnZUlu
ZGV4KCkpKSB7CisgICAgICAgICAgICAgICAgICAgICYmIG1fcG9seWdvbi5jb250YWlucyhvZmZz
ZXRFZGdlc0ludGVyc2VjdGlvbikKKyAgICAgICAgICAgICAgICAgICAgJiYgZmlyc3RGaXRSZWN0
SW5Qb2x5Z29uKG1fcG9seWdvbiwgcG90ZW50aWFsRmlyc3RGaXRSZWN0LCBvZmZzZXRFZGdlc1tp
XS5lZGdlSW5kZXgoKSwgb2Zmc2V0RWRnZXNbal0uZWRnZUluZGV4KCkpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGZpcnN0Rml0Rm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBmaXJz
dEZpdFJlY3QgPSBwb3RlbnRpYWxGaXJzdEZpdFJlY3Q7CiAgICAgICAgICAgICAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmgKaW5kZXggNjJlMTk3MS4u
ZjQ2N2M2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblBv
bHlnb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5o
CkBAIC00Myw0OCArNDMsNDUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBFeGNs
dXNpb25Qb2x5Z29uRWRnZTsKK2NsYXNzIEZsb2F0UG9seWdvbkVkZ2U7CiAKIC8vIFRoaXMgY2xh
c3MgaXMgdXNlZCBieSBQT0RJbnRlcnZhbFRyZWUgZm9yIGRlYnVnZ2luZy4KICNpZm5kZWYgTkRF
QlVHCiB0ZW1wbGF0ZSA8Y2xhc3M+IHN0cnVjdCBWYWx1ZVRvU3RyaW5nOwogI2VuZGlmCiAKLWNs
YXNzIEV4Y2x1c2lvblBvbHlnb24gOiBwdWJsaWMgRXhjbHVzaW9uU2hhcGUgewotICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEV4Y2x1c2lvblBvbHlnb24pOworY2xhc3MgRmxvYXRQb2x5Z29uIHsK
IHB1YmxpYzoKLSAgICBFeGNsdXNpb25Qb2x5Z29uKFBhc3NPd25QdHI8VmVjdG9yPEZsb2F0UG9p
bnQ+ID4gdmVydGljZXMsIFdpbmRSdWxlIGZpbGxSdWxlKTsKKyAgICBGbG9hdFBvbHlnb24oUGFz
c093blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiB2ZXJ0aWNlcywgV2luZFJ1bGUgZmlsbFJ1bGUp
OwogCiAgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4QXQodW5zaWduZWQgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuICgqbV92ZXJ0aWNlcylbaW5kZXhdOyB9CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZW
ZXJ0aWNlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGljZXMtPnNpemUoKTsgfQorCiAgICAgV2lu
ZFJ1bGUgZmlsbFJ1bGUoKSBjb25zdCB7IHJldHVybiBtX2ZpbGxSdWxlOyB9CiAKLSAgICBjb25z
dCBFeGNsdXNpb25Qb2x5Z29uRWRnZSYgZWRnZUF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX2VkZ2VzW2luZGV4XTsgfQorICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIGVkZ2VB
dCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9lZGdlc1tpbmRleF07IH0KICAgICB1
bnNpZ25lZCBudW1iZXJPZkVkZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9lZGdlcy5zaXplKCk7IH0K
IAorICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRpbmdC
b3g7IH0KKyAgICBib29sIG92ZXJsYXBwaW5nRWRnZXMoZmxvYXQgbWluWSwgZmxvYXQgbWF4WSwg
VmVjdG9yPGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UqPiYgcmVzdWx0KSBjb25zdDsKICAgICBib29s
IGNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKyAgICBib29sIGlzRW1wdHkoKSBj
b25zdCB7IHJldHVybiBtX2VtcHR5OyB9CiAKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzaGFwZUxv
Z2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fYm91bmRpbmdCb3g7
IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1f
ZW1wdHk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0RXhjbHVkZWRJbnRlcnZhbHMoZmxvYXQgbG9n
aWNhbFRvcCwgZmxvYXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExpc3QmKSBjb25zdCBPVkVSUklE
RTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0SW5jbHVkZWRJbnRlcnZhbHMoZmxvYXQgbG9naWNhbFRv
cCwgZmxvYXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExpc3QmKSBjb25zdCBPVkVSUklERTsKLSAg
ICB2aXJ0dWFsIGJvb2wgZmlyc3RJbmNsdWRlZEludGVydmFsTG9naWNhbFRvcChmbG9hdCBtaW5M
b2dpY2FsSW50ZXJ2YWxUb3AsIGNvbnN0IEZsb2F0U2l6ZSYgbWluTG9naWNhbEludGVydmFsU2l6
ZSwgZmxvYXQmKSBjb25zdCBPVkVSUklERTsKLQotcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBmaW5k
TmV4dEVkZ2VWZXJ0ZXhJbmRleCh1bnNpZ25lZCB2ZXJ0ZXhJbmRleCwgYm9vbCBjbG9ja3dpc2Up
IGNvbnN0OwogICAgIHZvaWQgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKGZsb2F0IHksIGJvb2wgaXNN
aW5ZLCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JikgY29uc3Q7Ci0gICAgdm9pZCBjb21wdXRl
RWRnZUludGVyc2VjdGlvbnMoZmxvYXQgbWluWSwgZmxvYXQgbWF4WSwgVmVjdG9yPEV4Y2x1c2lv
bkludGVydmFsPiYpIGNvbnN0OwotICAgIHVuc2lnbmVkIGZpbmROZXh0RWRnZVZlcnRleEluZGV4
KHVuc2lnbmVkIHZlcnRleEluZGV4MSwgYm9vbCBjbG9ja3dpc2UpIGNvbnN0OwotICAgIGJvb2wg
Zmlyc3RGaXRSZWN0SW5Qb2x5Z29uKGNvbnN0IEZsb2F0UmVjdCYsIHVuc2lnbmVkIG9mZnNldEVk
Z2VJbmRleDEsIHVuc2lnbmVkIG9mZnNldEVkZ2VJbmRleCkgY29uc3Q7CisgICAgdm9pZCBjb21w
dXRlT3ZlcmxhcHBpbmdFZGdlWFByb2plY3Rpb25zKGZsb2F0IG1pblksIGZsb2F0IG1heFksIFZl
Y3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mKSBjb25zdDsKIAotICAgIHR5cGVkZWYgUE9ESW50ZXJ2
YWw8ZmxvYXQsIEV4Y2x1c2lvblBvbHlnb25FZGdlKj4gRWRnZUludGVydmFsOwotICAgIHR5cGVk
ZWYgUE9ESW50ZXJ2YWxUcmVlPGZsb2F0LCBFeGNsdXNpb25Qb2x5Z29uRWRnZSo+IEVkZ2VJbnRl
cnZhbFRyZWU7Citwcml2YXRlOgorICAgIHR5cGVkZWYgUE9ESW50ZXJ2YWw8ZmxvYXQsIEZsb2F0
UG9seWdvbkVkZ2UqPiBFZGdlSW50ZXJ2YWw7CisgICAgdHlwZWRlZiBQT0RJbnRlcnZhbFRyZWU8
ZmxvYXQsIEZsb2F0UG9seWdvbkVkZ2UqPiBFZGdlSW50ZXJ2YWxUcmVlOwogCiAgICAgT3duUHRy
PFZlY3RvcjxGbG9hdFBvaW50PiA+IG1fdmVydGljZXM7CiAgICAgV2luZFJ1bGUgbV9maWxsUnVs
ZTsKICAgICBGbG9hdFJlY3QgbV9ib3VuZGluZ0JveDsKLSAgICBWZWN0b3I8RXhjbHVzaW9uUG9s
eWdvbkVkZ2U+IG1fZWRnZXM7Ci0gICAgRWRnZUludGVydmFsVHJlZSBtX2VkZ2VUcmVlOwogICAg
IGJvb2wgbV9lbXB0eTsKKyAgICBWZWN0b3I8RmxvYXRQb2x5Z29uRWRnZT4gbV9lZGdlczsKKyAg
ICBFZGdlSW50ZXJ2YWxUcmVlIG1fZWRnZVRyZWU7IC8vIEVhY2ggRWRnZUludGVydmFsVHJlZSBu
b2RlIHN0b3JlcyBtaW5ZLCBtYXhZLCBhbmQgYSAoIlVzZXJEYXRhIikgcG9pbnRlciB0byBhIEZs
b2F0UG9seWdvbkVkZ2UuCisKIH07CiAKIGNsYXNzIFZlcnRleFBhaXIgewpAQCAtMTAzLDExICsx
MDAsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpbnRlcnNlY3Rpb24oY29uc3QgVmVydGV4UGFpciYs
IEZsb2F0UG9pbnQmKSBjb25zdDsKIH07CiAKLS8vIEVkZ2VJbnRlcnZhbFRyZWUgbm9kZXMgc3Rv
cmUgbWluWSwgbWF4WSwgYW5kIGEgKCJVc2VyRGF0YSIpIHBvaW50ZXIgdG8gYW4gRXhjbHVzaW9u
UG9seWdvbkVkZ2UuIEVkZ2UgdmVydGV4Ci0vLyBpbmRleDEgaXMgbGVzcyB0aGFuIGluZGV4Miwg
ZXhjZXB0IHRoZSBsYXN0IGVkZ2UsIHdoZXJlIGluZGV4MiBpcyAwLiBXaGVuIGEgcG9seWdvbiBl
ZGdlIGlzIGRlZmluZWQgYnkgMwotLy8gb3IgbW9yZSBjb2xpbmVhciB2ZXJ0aWNlcywgaW5kZXgy
IGNhbiBiZSB0aGUgdGhlIGluZGV4IG9mIHRoZSBsYXN0IGNvbGluZWFyIHZlcnRleC4KLWNsYXNz
IEV4Y2x1c2lvblBvbHlnb25FZGdlIDogcHVibGljIFZlcnRleFBhaXIgewotICAgIGZyaWVuZCBj
bGFzcyBFeGNsdXNpb25Qb2x5Z29uOworY2xhc3MgRmxvYXRQb2x5Z29uRWRnZSA6IHB1YmxpYyBW
ZXJ0ZXhQYWlyIHsKKyAgICBmcmllbmQgY2xhc3MgRmxvYXRQb2x5Z29uOwogcHVibGljOgogICAg
IHZpcnR1YWwgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MSgpIGNvbnN0IE9WRVJSSURFCiAgICAg
ewpAQCAtMTIxLDQ0ICsxMTUsNDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9wb2x5Z29u
LT52ZXJ0ZXhBdChtX3ZlcnRleEluZGV4Mik7CiAgICAgfQogCi0gICAgY29uc3QgRXhjbHVzaW9u
UG9seWdvbkVkZ2UmIHByZXZpb3VzRWRnZSgpIGNvbnN0CisgICAgY29uc3QgRmxvYXRQb2x5Z29u
RWRnZSYgcHJldmlvdXNFZGdlKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3BvbHln
b24gJiYgbV9wb2x5Z29uLT5udW1iZXJPZkVkZ2VzKCkgPiAxKTsKICAgICAgICAgcmV0dXJuIG1f
cG9seWdvbi0+ZWRnZUF0KChtX2VkZ2VJbmRleCArIG1fcG9seWdvbi0+bnVtYmVyT2ZFZGdlcygp
IC0gMSkgJSBtX3BvbHlnb24tPm51bWJlck9mRWRnZXMoKSk7CiAgICAgfQogCi0gICAgY29uc3Qg
RXhjbHVzaW9uUG9seWdvbkVkZ2UmIG5leHRFZGdlKCkgY29uc3QKKyAgICBjb25zdCBGbG9hdFBv
bHlnb25FZGdlJiBuZXh0RWRnZSgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV9wb2x5
Z29uICYmIG1fcG9seWdvbi0+bnVtYmVyT2ZFZGdlcygpID4gMSk7CiAgICAgICAgIHJldHVybiBt
X3BvbHlnb24tPmVkZ2VBdCgobV9lZGdlSW5kZXggKyAxKSAlIG1fcG9seWdvbi0+bnVtYmVyT2ZF
ZGdlcygpKTsKICAgICB9CiAKLSAgICBjb25zdCBFeGNsdXNpb25Qb2x5Z29uKiBwb2x5Z29uKCkg
Y29uc3QgeyByZXR1cm4gbV9wb2x5Z29uOyB9CisgICAgY29uc3QgRmxvYXRQb2x5Z29uKiBwb2x5
Z29uKCkgY29uc3QgeyByZXR1cm4gbV9wb2x5Z29uOyB9CiAgICAgdW5zaWduZWQgdmVydGV4SW5k
ZXgxKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0ZXhJbmRleDE7IH0KICAgICB1bnNpZ25lZCB2ZXJ0
ZXhJbmRleDIoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRleEluZGV4MjsgfQogICAgIHVuc2lnbmVk
IGVkZ2VJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fZWRnZUluZGV4OyB9CiAKIHByaXZhdGU6Ci0g
ICAgY29uc3QgRXhjbHVzaW9uUG9seWdvbiogbV9wb2x5Z29uOworICAgIC8vIEVkZ2UgdmVydGV4
IGluZGV4MSBpcyBsZXNzIHRoYW4gaW5kZXgyLCBleGNlcHQgdGhlIGxhc3QgZWRnZSwgd2hlcmUg
aW5kZXgyIGlzIDAuIFdoZW4gYSBwb2x5Z29uIGVkZ2UKKyAgICAvLyBpcyBkZWZpbmVkIGJ5IDMg
b3IgbW9yZSBjb2xpbmVhciB2ZXJ0aWNlcywgaW5kZXgyIGNhbiBiZSB0aGUgdGhlIGluZGV4IG9m
IHRoZSBsYXN0IGNvbGluZWFyIHZlcnRleC4KICAgICB1bnNpZ25lZCBtX3ZlcnRleEluZGV4MTsK
ICAgICB1bnNpZ25lZCBtX3ZlcnRleEluZGV4MjsKICAgICB1bnNpZ25lZCBtX2VkZ2VJbmRleDsK
KyAgICBjb25zdCBGbG9hdFBvbHlnb24qIG1fcG9seWdvbjsKIH07CiAKLS8vIFRoZXNlIHN0cnVj
dHVyZXMgYXJlIHVzZWQgYnkgUE9ESW50ZXJ2YWxUcmVlIGZvciBkZWJ1Z2dpbmcuMQorLy8gVGhl
c2Ugc3RydWN0dXJlcyBhcmUgdXNlZCBieSBQT0RJbnRlcnZhbFRyZWUgZm9yIGRlYnVnZ2luZy4K
ICNpZm5kZWYgTkRFQlVHCiB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmFsdWVUb1N0cmluZzxmbG9hdD4g
ewogICAgIHN0YXRpYyBTdHJpbmcgc3RyaW5nKGNvbnN0IGZsb2F0IHZhbHVlKSB7IHJldHVybiBT
dHJpbmc6Om51bWJlcih2YWx1ZSk7IH0KIH07CiAKLXRlbXBsYXRlPD4gc3RydWN0IFZhbHVlVG9T
dHJpbmc8RXhjbHVzaW9uUG9seWdvbkVkZ2UqPiB7Ci0gICAgc3RhdGljIFN0cmluZyBzdHJpbmco
Y29uc3QgRXhjbHVzaW9uUG9seWdvbkVkZ2UqIGVkZ2UpIHsgcmV0dXJuIFN0cmluZzo6Zm9ybWF0
KCIlcCAoJWYsJWYgJWYsJWYpIiwgZWRnZSwgZWRnZS0+dmVydGV4MSgpLngoKSwgZWRnZS0+dmVy
dGV4MSgpLnkoKSwgZWRnZS0+dmVydGV4MigpLngoKSwgZWRnZS0+dmVydGV4MigpLnkoKSk7IH0K
K3RlbXBsYXRlPD4gc3RydWN0IFZhbHVlVG9TdHJpbmc8RmxvYXRQb2x5Z29uRWRnZSo+IHsKKyAg
ICBzdGF0aWMgU3RyaW5nIHN0cmluZyhjb25zdCBGbG9hdFBvbHlnb25FZGdlKiBlZGdlKSB7IHJl
dHVybiBTdHJpbmc6OmZvcm1hdCgiJXAgKCVmLCVmICVmLCVmKSIsIGVkZ2UsIGVkZ2UtPnZlcnRl
eDEoKS54KCksIGVkZ2UtPnZlcnRleDEoKS55KCksIGVkZ2UtPnZlcnRleDIoKS54KCksIGVkZ2Ut
PnZlcnRleDIoKS55KCkpOyB9CiB9OwogI2VuZGlmCiAKIGNsYXNzIE9mZnNldFBvbHlnb25FZGdl
IDogcHVibGljIFZlcnRleFBhaXIgewogcHVibGljOgotICAgIE9mZnNldFBvbHlnb25FZGdlKGNv
bnN0IEV4Y2x1c2lvblBvbHlnb25FZGdlJiBlZGdlLCBjb25zdCBGbG9hdFNpemUmIG9mZnNldCkK
KyAgICBPZmZzZXRQb2x5Z29uRWRnZShjb25zdCBGbG9hdFBvbHlnb25FZGdlJiBlZGdlLCBjb25z
dCBGbG9hdFNpemUmIG9mZnNldCkKICAgICAgICAgOiBtX3ZlcnRleDEoZWRnZS52ZXJ0ZXgxKCkg
KyBvZmZzZXQpCiAgICAgICAgICwgbV92ZXJ0ZXgyKGVkZ2UudmVydGV4MigpICsgb2Zmc2V0KQog
ICAgICAgICAsIG1fZWRnZUluZGV4KGVkZ2UuZWRnZUluZGV4KCkpCkBAIC0xNzIsOSArMTY4LDkg
QEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBPZmZzZXRQb2x5Z29uRWRnZShjb25zdCBF
eGNsdXNpb25Qb2x5Z29uJiBwb2x5Z29uLCBmbG9hdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIGNv
bnN0IEZsb2F0U2l6ZSYgb2Zmc2V0KQotICAgICAgICA6IG1fdmVydGV4MShGbG9hdFBvaW50KHBv
bHlnb24uc2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKS54KCksIG1pbkxvZ2ljYWxJbnRlcnZhbFRv
cCkgKyBvZmZzZXQpCi0gICAgICAgICwgbV92ZXJ0ZXgyKEZsb2F0UG9pbnQocG9seWdvbi5zaGFw
ZUxvZ2ljYWxCb3VuZGluZ0JveCgpLm1heFgoKSwgbWluTG9naWNhbEludGVydmFsVG9wKSArIG9m
ZnNldCkKKyAgICBPZmZzZXRQb2x5Z29uRWRnZShjb25zdCBGbG9hdFBvbHlnb24mIHBvbHlnb24s
IGZsb2F0IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQpCisg
ICAgICAgIDogbV92ZXJ0ZXgxKEZsb2F0UG9pbnQocG9seWdvbi5ib3VuZGluZ0JveCgpLngoKSwg
bWluTG9naWNhbEludGVydmFsVG9wKSArIG9mZnNldCkKKyAgICAgICAgLCBtX3ZlcnRleDIoRmxv
YXRQb2ludChwb2x5Z29uLmJvdW5kaW5nQm94KCkubWF4WCgpLCBtaW5Mb2dpY2FsSW50ZXJ2YWxU
b3ApICsgb2Zmc2V0KQogICAgICAgICAsIG1fZWRnZUluZGV4KC0xKQogICAgIHsKICAgICB9CkBA
IC0xODksNiArMTg1LDI1IEBAIHByaXZhdGU6CiAgICAgaW50IG1fZWRnZUluZGV4OwogfTsKIAor
Y2xhc3MgRXhjbHVzaW9uUG9seWdvbiA6IHB1YmxpYyBFeGNsdXNpb25TaGFwZSB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoRXhjbHVzaW9uUG9seWdvbik7CitwdWJsaWM6CisgICAgRXhjbHVz
aW9uUG9seWdvbihQYXNzT3duUHRyPFZlY3RvcjxGbG9hdFBvaW50PiA+IHZlcnRpY2VzLCBXaW5k
UnVsZSBmaWxsUnVsZSkKKyAgICAgICAgOiBFeGNsdXNpb25TaGFwZSgpCisgICAgICAgICwgbV9w
b2x5Z29uKHZlcnRpY2VzLCBmaWxsUnVsZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCBG
bG9hdFJlY3Qgc2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCBPVkVSUklERSB7IHJldHVy
biBtX3BvbHlnb24uYm91bmRpbmdCb3goKTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0VtcHR5KCkg
Y29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9wb2x5Z29uLmlzRW1wdHkoKTsgfQorICAgIHZpcnR1
YWwgdm9pZCBnZXRFeGNsdWRlZEludGVydmFscyhmbG9hdCBsb2dpY2FsVG9wLCBmbG9hdCBsb2dp
Y2FsSGVpZ2h0LCBTZWdtZW50TGlzdCYpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCBnZXRJbmNsdWRlZEludGVydmFscyhmbG9hdCBsb2dpY2FsVG9wLCBmbG9hdCBsb2dpY2FsSGVp
Z2h0LCBTZWdtZW50TGlzdCYpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBmaXJz
dEluY2x1ZGVkSW50ZXJ2YWxMb2dpY2FsVG9wKGZsb2F0IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwg
Y29uc3QgRmxvYXRTaXplJiBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplLCBmbG9hdCYpIGNvbnN0IE9W
RVJSSURFOworCitwcml2YXRlOgorICAgIEZsb2F0UG9seWdvbiBtX3BvbHlnb247Cit9OworCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFeGNsdXNpb25Qb2x5Z29uX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192268</attachid>
            <date>2013-03-08 12:17:46 -0800</date>
            <delta_ts>2013-03-08 12:45:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>tmp.patch</filename>
            <type>text/plain</type>
            <size>52490</size>
            <attacher name="Hans Muller">giles_joplin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZGU1OGEyYS4uNGIxZmViMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTE5MjAsNiArMTkyMCw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFBvaW50LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQz
RC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvbHlnb24uY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVj
dC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
Y2Y0YjVjZi4uNjJlNWMzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDczIEBACisyMDEzLTAzLTA4
ICBIYW5zIE11bGxlciAgPGhtdWxsZXJAYWRvYmUuY29tPgorCisgICAgICAgIFtDU1MgRXhjbHVz
aW9uc10gUmVmYWN0b3IgdGhlIEV4Y2x1c2lvblBvbHlnb24gY2xhc3MgdG8gZW5hYmxlIHN0b3Jp
bmcgbXVsdGlwbGUgYm91bmRhcmllcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTExNzY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgUmVmYWN0b3JlZCB0aGUgRXhjbHVzaW9uUG9seWdvbiBjbGFzcyB0byBl
bmFibGUgYWRkaW5nIHN1cHBvcnQgZm9yIHNoYXBlLW1hcmdpbiBhbmQgc2hhcGUtcGFkZGluZy4K
KyAgICAgICAgRXh0cmFjdGVkIGEgbmV3IEZsb2F0UG9seWdvbiBjbGFzcyB3aGljaCBpcyBub3cg
dXNlZCBieSBFeGNsdXNpb25Qb2x5Z29uIHRvIHJlcHJlc2VudCB0aGUgc2hhcGUncworICAgICAg
ICBib3VuZGFyeS4gSXQgd2lsbCBiZSB1c2VkIHRvIGFkZCBtX3BhZGRlZFBvbHlnb24gYW5kIG1f
bWFyZ2luUG9seWdvbiBtZW1iZXJzIHRvIEV4Y2x1c2lvblBvbHlnb24KKyAgICAgICAgaW4gYSBz
dWJzZXF1ZW50IHBhdGNoLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyBpcyBzdHJpY3Rs
eSBhIHJlZmFjdG9yaW5nIG9mIHRoZSBleGlzdGluZyBjb2RlLgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJD
b3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UG9seWdvbi5jcHA6IEZhY3RvcmVkIG91dCBvZiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHAuCisgICAgICAgIChXZWJDb3JlOjpk
ZXRlcm1pbmFudCk6CisgICAgICAgIChXZWJDb3JlOjphcmVDb2xsaW5lYXJQb2ludHMpOgorICAg
ICAgICAoV2ViQ29yZTo6YXJlQ29pbmNpZGVudFBvaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpp
c1BvaW50T25MaW5lU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpuZXh0VmVydGV4SW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2x5Z29uOjpGbG9hdFBvbHlnb24pOgorICAgICAg
ICAoV2ViQ29yZTo6RmxvYXRQb2x5Z29uOjpmaW5kTmV4dEVkZ2VWZXJ0ZXhJbmRleCk6CisgICAg
ICAgIChXZWJDb3JlOjpGbG9hdFBvbHlnb246Om92ZXJsYXBwaW5nRWRnZXMpOgorICAgICAgICAo
V2ViQ29yZTo6bGVmdFNpZGUpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2x5Z29uOjpjb250
YWlucyk6CisgICAgICAgIChXZWJDb3JlOjpWZXJ0ZXhQYWlyOjpvdmVybGFwc1JlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6VmVydGV4UGFpcjo6aW50ZXJzZWN0aW9uKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFBvbHlnb24uaDogRmFjdG9yZWQgb3V0IG9mIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmguCisgICAgICAgIChGbG9hdFBvbHlnb24p
OgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2x5Z29uOjp2ZXJ0ZXhBdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGbG9hdFBvbHlnb246Om51bWJlck9mVmVydGljZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6RmxvYXRQb2x5Z29uOjpmaWxsUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFBvbHln
b246OmVkZ2VBdCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFBvbHlnb246Om51bWJlck9mRWRn
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2x5Z29uOjpib3VuZGluZ0JveCk6CisgICAg
ICAgIChXZWJDb3JlOjpGbG9hdFBvbHlnb246OmlzRW1wdHkpOgorICAgICAgICAoVmVydGV4UGFp
cik6CisgICAgICAgIChXZWJDb3JlOjpWZXJ0ZXhQYWlyOjp+VmVydGV4UGFpcik6CisgICAgICAg
IChXZWJDb3JlOjpWZXJ0ZXhQYWlyOjptaW5YKToKKyAgICAgICAgKFdlYkNvcmU6OlZlcnRleFBh
aXI6Om1pblkpOgorICAgICAgICAoV2ViQ29yZTo6VmVydGV4UGFpcjo6bWF4WCk6CisgICAgICAg
IChXZWJDb3JlOjpWZXJ0ZXhQYWlyOjptYXhZKToKKyAgICAgICAgKEZsb2F0UG9seWdvbkVkZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2x5Z29uRWRnZTo6cHJldmlvdXNFZGdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZsb2F0UG9seWdvbkVkZ2U6Om5leHRFZGdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZsb2F0UG9seWdvbkVkZ2U6OnBvbHlnb24pOgorICAgICAgICAoV2ViQ29yZTo6Rmxv
YXRQb2x5Z29uRWRnZTo6dmVydGV4SW5kZXgxKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UG9s
eWdvbkVkZ2U6OnZlcnRleEluZGV4Mik6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFBvbHlnb25F
ZGdlOjplZGdlSW5kZXgpOgorICAgICAgICAqIHJlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNw
cDogTm93IGRlcGVuZHMgb24gRmxvYXRQb2x5Z29uLgorICAgICAgICAoRWRnZUludGVyc2VjdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpsZWZ0U2lkZSk6CisgICAgICAgIChXZWJDb3JlOjpjb21w
dXRlWEludGVyc2VjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpnZXRWZXJ0ZXhJbnRlcnNlY3Rp
b25WZXJ0aWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlWEludGVyc2VjdGlvbnMpOgor
ICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZU92ZXJsYXBwaW5nRWRnZVhQcm9qZWN0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpFeGNsdXNpb25Qb2x5Z29uOjpnZXRFeGNsdWRlZEludGVydmFscyk6
CisgICAgICAgIChXZWJDb3JlOjpFeGNsdXNpb25Qb2x5Z29uOjpnZXRJbmNsdWRlZEludGVydmFs
cyk6CisgICAgICAgIChXZWJDb3JlOjpmaXJzdEZpdFJlY3RJblBvbHlnb24pOgorICAgICAgICAo
V2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbjo6Zmlyc3RJbmNsdWRlZEludGVydmFsTG9naWNhbFRv
cCk6CisgICAgICAgICogcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uaDogTm93IGRlcGVuZHMg
b24gRmxvYXRQb2x5Z29uLgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2V0UG9seWdvbkVkZ2U6Ok9m
ZnNldFBvbHlnb25FZGdlKToKKyAgICAgICAgKEV4Y2x1c2lvblBvbHlnb24pOgorICAgICAgICAo
V2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbjo6RXhjbHVzaW9uUG9seWdvbik6CisKIDIwMTMtMDMt
MDcgIEVtaWwgQSBFa2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtzdWItcGl4
ZWxdIFJvdW5kaW5nIGVycm9yIGluIHRhYmxlIGNlbGwgaGVpZ2h0IGNhbGN1bGF0aW9uIGNhdXNl
cyB1bm5lY2Vzc2FyeSBzY3JvbGxiYXIKQEAgLTEyMTMsNiArMTI4Myw0OCBAQAogICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwOgogICAgICAgICAoV2ViQ29yZTo6Rm9ybURh
dGE6OmFwcGVuZEtleVZhbHVlUGFpckl0ZW1zKToKIAorMjAxMy0wMy0wNyAgSGFucyBNdWxsZXIg
IDxobXVsbGVyQGFkb2JlLmNvbT4KKworICAgICAgICBbQ1NTIEV4Y2x1c2lvbnNdIFJlZmFjdG9y
IHRoZSBFeGNsdXNpb25Qb2x5Z29uIGNsYXNzIHRvIGVuYWJsZSBzdG9yaW5nIG11bHRpcGxlIGJv
dW5kYXJpZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTExMTc2NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFJlZmFjdG9yZWQgdGhlIEV4Y2x1c2lvblBvbHlnb24gY2xhc3MgdG8gZW5hYmxlIGFkZGluZyBz
dXBwb3J0IGZvciBzaGFwZS1tYXJnaW4gYW5kIHNoYXBlLXBhZGRpbmcuCisgICAgICAgIEV4dHJh
Y3RlZCBhIG5ldyBGbG9hdFBvbHlnb24gY2xhc3Mgd2hpY2ggaXMgbm93IHVzZWQgYnkgRXhjbHVz
aW9uUG9seWdvbiB0byByZXByZXNlbnQgdGhlIHNoYXBlJ3MKKyAgICAgICAgYm91bmRhcnkuIEl0
IHdpbGwgYmUgdXNlZCB0byBhZGQgbV9wYWRkZWRQb2x5Z29uIGFuZCBtX21hcmdpblBvbHlnb24g
bWVtYmVycyB0byBFeGNsdXNpb25Qb2x5Z29uCisgICAgICAgIGluIGEgc3Vic2VxdWVudCBwYXRj
aC4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgaXMgc3RyaWN0bHkgYSByZWZhY3Rvcmlu
ZyBvZiB0aGUgZXhpc3RpbmcgY29kZS4KKworICAgICAgICAqIHJlbmRlcmluZy9FeGNsdXNpb25Q
b2x5Z29uLmNwcDoKKyAgICAgICAgKEVkZ2VJbnRlcnNlY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RmxvYXRQb2x5Z29uOjpGbG9hdFBvbHlnb24pOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQ
b2x5Z29uOjpmaW5kTmV4dEVkZ2VWZXJ0ZXhJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9h
dFBvbHlnb246Om92ZXJsYXBwaW5nRWRnZXMpOgorICAgICAgICAoV2ViQ29yZTo6bGVmdFNpZGUp
OgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2x5Z29uOjpjb250YWlucyk6CisgICAgICAgIChX
ZWJDb3JlOjpjb21wdXRlWEludGVyc2VjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpnZXRWZXJ0
ZXhJbnRlcnNlY3Rpb25WZXJ0aWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFBvbHlnb246
OmNvbXB1dGVYSW50ZXJzZWN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFBvbHlnb246
OmNvbXB1dGVPdmVybGFwcGluZ0VkZ2VYUHJvamVjdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
RXhjbHVzaW9uUG9seWdvbjo6Z2V0RXhjbHVkZWRJbnRlcnZhbHMpOgorICAgICAgICAoV2ViQ29y
ZTo6RXhjbHVzaW9uUG9seWdvbjo6Z2V0SW5jbHVkZWRJbnRlcnZhbHMpOgorICAgICAgICAoV2Vi
Q29yZTo6Zmlyc3RGaXRSZWN0SW5Qb2x5Z29uKToKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lv
blBvbHlnb246OmZpcnN0SW5jbHVkZWRJbnRlcnZhbExvZ2ljYWxUb3ApOgorICAgICAgICAqIHJl
bmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmg6CisgICAgICAgIChGbG9hdFBvbHlnb24pOiAtIEV4
dHJhY3RlZCBmcm9tIEV4Y2x1c2lvblBvbHlnb24KKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UG9s
eWdvbjo6ZWRnZUF0KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UG9seWdvbjo6Ym91bmRpbmdC
b3gpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2x5Z29uOjppc0VtcHR5KToKKyAgICAgICAg
KEZsb2F0UG9seWdvbkVkZ2UpOiAtIFdhcyBFeGNsdXNpb25Qb2x5Z29uRWRnZS4KKyAgICAgICAg
KFdlYkNvcmU6OkZsb2F0UG9seWdvbkVkZ2U6OnByZXZpb3VzRWRnZSk6CisgICAgICAgIChXZWJD
b3JlOjpGbG9hdFBvbHlnb25FZGdlOjpuZXh0RWRnZSk6CisgICAgICAgIChXZWJDb3JlOjpGbG9h
dFBvbHlnb25FZGdlOjpwb2x5Z29uKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNldFBvbHlnb25F
ZGdlOjpPZmZzZXRQb2x5Z29uRWRnZSk6CisgICAgICAgIChFeGNsdXNpb25Qb2x5Z29uKTogLSBO
b3cganVzdCBoYXMgdGhlIEV4Y2x1c2lvblNoYXBlIG1ldGhvZCBvdmVycmlkZXMgYW5kIG9uZSBw
cml2YXQgZUZsb2F0UG9seWdvbiBtZW1iZXIuCisgICAgICAgIChXZWJDb3JlOjpFeGNsdXNpb25Q
b2x5Z29uOjpFeGNsdXNpb25Qb2x5Z29uKToKKwogMjAxMy0wMy0wNyAgQ2hyaXMgRmxlaXphY2gg
IDxjZmxlaXphY2hAYXBwbGUuY29tPgogCiAgICAgICAgIEFYOiBDYW4ndCBhY3RpdmF0ZSBsaW5r
cyB3aXRoIFZvaWNlT3ZlciBpbiBTYWZhcmkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmlu
ZGV4IDlmNDU2ZmQuLjM0OWQ1MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAt
NTU5MSw2ICs1NTkxLDggQEAgd2ViY29yZV9wbGF0Zm9ybV9zb3VyY2VzICs9IFwKIAlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuaCBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRQb2x5Z29uLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRQb2x5Z29uLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0UXVhZC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
UXVhZC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3Bw
IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQppbmRleCBmY2MxZGJlLi5mZWRhMTdhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CkBAIC00ODEzLDYgKzQ4MTMsNyBAQAogICAgICAgICBdLAogICAgICAgICAnd2ViY29yZV9wbGF0
Zm9ybV9nZW9tZXRyeV9maWxlcyc6IFsKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFBvaW50LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2x5
Z29uLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNELmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcCcsCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IGVkZDAwMTUuLmZlODlmYjUg
MTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC0y
OTc5OCw2ICsyOTc5OCwxNCBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCisJCQkJ
CVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRmxvYXRQb2x5Z29uLmNwcCIKKwkJ
CQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRm
b3JtXGdyYXBoaWNzXEZsb2F0UG9seWdvbi5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxG
aWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRmxvYXRRdWFkLmNw
cCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA5Njc5ZjYyLi4zODRmNjIyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xOTIz
LDYgKzE5MjMsOCBAQAogCQk2RUJGMEU3NjEyQTk4Njg4MDBEQjE3MEEgLyogSlNFWFREcmF3QnVm
ZmVycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
RUJGMEU3NDEyQTk4Njg4MDBEQjE3MEEgLyogSlNFWFREcmF3QnVmZmVycy5jcHAgKi87IH07CiAJ
CTZFQkYwRTc3MTJBOTg2ODgwMERCMTcwOSAvKiBKU09FU1RleHR1cmVGbG9hdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVCRjBFNzUxMkE5ODY4ODAw
REIxNzA5IC8qIEpTT0VTVGV4dHVyZUZsb2F0LmggKi87IH07CiAJCTZFQkYwRTc3MTJBOTg2ODgw
MERCMTcwQSAvKiBKU0VYVERyYXdCdWZmZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA2RUJGMEU3NTEyQTk4Njg4MDBEQjE3MEEgLyogSlNFWFREcmF3
QnVmZmVycy5oICovOyB9OworCQk2RUM0ODBBMTE2RUE2MzhBMDBBNDhEQ0IgLyogRmxvYXRQb2x5
Z29uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZF
QzQ4MDlGMTZFQTYzOEEwMEE0OERDQiAvKiBGbG9hdFBvbHlnb24uY3BwICovOyB9OworCQk2RUM0
ODBBMjE2RUE2MzhBMDBBNDhEQ0IgLyogRmxvYXRQb2x5Z29uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUM0ODBBMDE2RUE2MzhBMDBBNDhEQ0IgLyog
RmxvYXRQb2x5Z29uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNkVEODc4QzQxNDc0OTNGNDAwNEMzNTk3IC8qIFJlbmRlclRhYmxlQ2FwdGlvbi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUQ4NzhD
MjE0NzQ5M0Y0MDA0QzM1OTcgLyogUmVuZGVyVGFibGVDYXB0aW9uLmNwcCAqLzsgfTsKIAkJNkVE
ODc4QzUxNDc0OTNGNDAwNEMzNTk3IC8qIFJlbmRlclRhYmxlQ2FwdGlvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVEODc4QzMxNDc0OTNGNDAwNEMz
NTk3IC8qIFJlbmRlclRhYmxlQ2FwdGlvbi5oICovOyB9OwogCQk2RUU4QTc3MjEwRjgwM0YzMDA1
QTRBMjQgLyogSlNXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFRThBNzcwMTBGODAzRjMwMDVBNEEyNCAvKiBK
U1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuY3BwICovOyB9OwpAQCAtOTQwOCw2ICs5NDEwLDggQEAK
IAkJNkVCRjBFNzQxMkE5ODY4ODAwREIxNzBBIC8qIEpTRVhURHJhd0J1ZmZlcnMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNFWFREcmF3QnVmZmVycy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFQkYwRTc1MTJBOTg2ODgwMERCMTcwOSAvKiBK
U09FU1RleHR1cmVGbG9hdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU09F
U1RleHR1cmVGbG9hdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RUJGMEU3NTEy
QTk4Njg4MDBEQjE3MEEgLyogSlNFWFREcmF3QnVmZmVycy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU0VYVERyYXdCdWZmZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTZFQzQ4MDlGMTZFQTYzOEEwMEE0OERDQiAvKiBGbG9hdFBvbHlnb24uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmxvYXRQb2x5Z29uLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkVDNDgwQTAxNkVBNjM4QTAwQTQ4RENCIC8qIEZsb2F0
UG9seWdvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGbG9hdFBvbHlnb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkVEODc4QzIxNDc0OTNGNDAwNEMzNTk3
IC8qIFJlbmRlclRhYmxlQ2FwdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBSZW5kZXJUYWJsZUNhcHRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk2RUQ4NzhDMzE0NzQ5M0Y0MDA0QzM1OTcgLyogUmVuZGVyVGFibGVDYXB0aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclRhYmxlQ2FwdGlvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RUU4QTc3MDEwRjgwM0YzMDA1QTRBMjQgLyogSlNX
ZWJHTENvbnRleHRBdHRyaWJ1dGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTV2ViR0xDb250ZXh0QXR0cmlidXRlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0yMDY5MSw2ICsyMDY5NSw4IEBACiAJCQkJNkU2N0QyQTgxMjgwRThCRDAwODc1
OEY3IC8qIEV4dGVuc2lvbnMzRC5oICovLAogCQkJCUIyNzUzNTNBMEIwNTM4MTQwMDJDRTY0RiAv
KiBGbG9hdFBvaW50LmNwcCAqLywKIAkJCQlCMjc1MzUzQjBCMDUzODE0MDAyQ0U2NEYgLyogRmxv
YXRQb2ludC5oICovLAorCQkJCTZFQzQ4MDlGMTZFQTYzOEEwMEE0OERDQiAvKiBGbG9hdFBvbHln
b24uY3BwICovLAorCQkJCTZFQzQ4MEEwMTZFQTYzOEEwMEE0OERDQiAvKiBGbG9hdFBvbHlnb24u
aCAqLywKIAkJCQlCMkUyN0M5RDBCMEYyQjA5MDBGMTdDN0IgLyogRmxvYXRQb2ludDNELmNwcCAq
LywKIAkJCQlCMkUyN0M5RTBCMEYyQjA5MDBGMTdDN0IgLyogRmxvYXRQb2ludDNELmggKi8sCiAJ
CQkJMEZENzIzODEwRUM4QkQ5MzAwQ0E1REQ3IC8qIEZsb2F0UXVhZC5jcHAgKi8sCkBAIC0yMzI2
NCw2ICsyMzI3MCw3IEBACiAJCQlpc2EgPSBQQlhIZWFkZXJzQnVpbGRQaGFzZTsKIAkJCWJ1aWxk
QWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQk2RUM0ODBBMjE2RUE2
MzhBMDBBNDhEQ0IgLyogRmxvYXRQb2x5Z29uLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTExNUZB
QjE2Nzk4OENEMDAyNDkxMzQgLyogQWJzdHJhY3REYXRhYmFzZVNlcnZlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRkU5RTg5RkMxNkUyREMwNTAwQTkwOEY4IC8qIE9yaWdpbkxvY2suaCBpbiBIZWFk
ZXJzICovLAogCQkJCUZFNEFBREVFMTZEMkMzNzQwMDAyNkZGQyAvKiBBYnN0cmFjdFNRTFN0YXRl
bWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTg5NSw2ICsyOTkwMiw3IEBACiAJCQkJN0U2NkUy
MzMxNkQ2RUI2QzAwRjdFN0ZGIC8qIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0VBMzBGNjkxNkRGRkU3NTAwMjU3RDBCIC8qIEpTV2ViR0xDb21wcmVz
c2VkVGV4dHVyZUFUQy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRDgyODdGNjE2RTRBMDM4MDA4
NkJEMDAgLyogSGl0VGVzdExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTZFQzQ4MEEx
MTZFQTYzOEEwMEE0OERDQiAvKiBGbG9hdFBvbHlnb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkp
OwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvbHlnb24uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2x5Z29uLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTA2ODQwCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2x5Z29uLmNwcApAQCAt
MCwwICsxLDIzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIElu
Y29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RQorICogQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGbG9h
dFBvbHlnb24uaCIKKworI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworc3RhdGljIGlubGluZSBmbG9hdCBkZXRlcm1pbmFudChjb25zdCBGbG9hdFNp
emUmIGEsIGNvbnN0IEZsb2F0U2l6ZSYgYikKK3sKKyAgICByZXR1cm4gYS53aWR0aCgpICogYi5o
ZWlnaHQoKSAtIGEuaGVpZ2h0KCkgKiBiLndpZHRoKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9v
bCBhcmVDb2xsaW5lYXJQb2ludHMoY29uc3QgRmxvYXRQb2ludCYgcDAsIGNvbnN0IEZsb2F0UG9p
bnQmIHAxLCBjb25zdCBGbG9hdFBvaW50JiBwMikKK3sKKyAgICByZXR1cm4gIWRldGVybWluYW50
KHAxIC0gcDAsIHAyIC0gcDApOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgYXJlQ29pbmNpZGVu
dFBvaW50cyhjb25zdCBGbG9hdFBvaW50JiBwMCwgY29uc3QgRmxvYXRQb2ludCYgcDEpCit7Cisg
ICAgcmV0dXJuIHAwLngoKSA9PSBwMS54KCkgJiYgcDAueSgpID09IHAxLnkoKTsKK30KKworc3Rh
dGljIGlubGluZSBib29sIGlzUG9pbnRPbkxpbmVTZWdtZW50KGNvbnN0IEZsb2F0UG9pbnQmIHZl
cnRleDEsIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDIsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
KQoreworICAgIHJldHVybiBwb2ludC54KCkgPj0gc3RkOjptaW4odmVydGV4MS54KCksIHZlcnRl
eDIueCgpKQorICAgICAgICAmJiBwb2ludC54KCkgPD0gc3RkOjptYXgodmVydGV4MS54KCksIHZl
cnRleDIueCgpKQorICAgICAgICAmJiBhcmVDb2xsaW5lYXJQb2ludHModmVydGV4MSwgdmVydGV4
MiwgcG9pbnQpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIG5leHRWZXJ0ZXhJbmRleCh1
bnNpZ25lZCB2ZXJ0ZXhJbmRleCwgdW5zaWduZWQgblZlcnRpY2VzLCBib29sIGNsb2Nrd2lzZSkK
K3sKKyAgICByZXR1cm4gKChjbG9ja3dpc2UpID8gdmVydGV4SW5kZXggKyAxIDogdmVydGV4SW5k
ZXggLSAxICsgblZlcnRpY2VzKSAlIG5WZXJ0aWNlczsKK30KKworc3RhdGljIHVuc2lnbmVkIGZp
bmROZXh0RWRnZVZlcnRleEluZGV4KGNvbnN0IEZsb2F0UG9seWdvbiYgcG9seWdvbiwgdW5zaWdu
ZWQgdmVydGV4SW5kZXgxLCBib29sIGNsb2Nrd2lzZSkKK3sKKyAgICB1bnNpZ25lZCBuVmVydGlj
ZXMgPSBwb2x5Z29uLm51bWJlck9mVmVydGljZXMoKTsKKyAgICB1bnNpZ25lZCB2ZXJ0ZXhJbmRl
eDIgPSBuZXh0VmVydGV4SW5kZXgodmVydGV4SW5kZXgxLCBuVmVydGljZXMsIGNsb2Nrd2lzZSk7
CisKKyAgICB3aGlsZSAodmVydGV4SW5kZXgyICYmIGFyZUNvaW5jaWRlbnRQb2ludHMocG9seWdv
bi52ZXJ0ZXhBdCh2ZXJ0ZXhJbmRleDEpLCBwb2x5Z29uLnZlcnRleEF0KHZlcnRleEluZGV4Mikp
KQorICAgICAgICB2ZXJ0ZXhJbmRleDIgPSBuZXh0VmVydGV4SW5kZXgodmVydGV4SW5kZXgyLCBu
VmVydGljZXMsIGNsb2Nrd2lzZSk7CisKKyAgICB3aGlsZSAodmVydGV4SW5kZXgyKSB7CisgICAg
ICAgIHVuc2lnbmVkIHZlcnRleEluZGV4MyA9IG5leHRWZXJ0ZXhJbmRleCh2ZXJ0ZXhJbmRleDIs
IG5WZXJ0aWNlcywgY2xvY2t3aXNlKTsKKyAgICAgICAgaWYgKCFhcmVDb2xsaW5lYXJQb2ludHMo
cG9seWdvbi52ZXJ0ZXhBdCh2ZXJ0ZXhJbmRleDEpLCBwb2x5Z29uLnZlcnRleEF0KHZlcnRleElu
ZGV4MiksIHBvbHlnb24udmVydGV4QXQodmVydGV4SW5kZXgzKSkpCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgdmVydGV4SW5kZXgyID0gdmVydGV4SW5kZXgzOworICAgIH0KKworICAgIHJl
dHVybiB2ZXJ0ZXhJbmRleDI7Cit9CisKK0Zsb2F0UG9seWdvbjo6RmxvYXRQb2x5Z29uKFBhc3NP
d25QdHI8VmVjdG9yPEZsb2F0UG9pbnQ+ID4gdmVydGljZXMsIFdpbmRSdWxlIGZpbGxSdWxlKQor
ICAgIDogbV92ZXJ0aWNlcyh2ZXJ0aWNlcykKKyAgICAsIG1fZmlsbFJ1bGUoZmlsbFJ1bGUpCit7
CisgICAgdW5zaWduZWQgblZlcnRpY2VzID0gbnVtYmVyT2ZWZXJ0aWNlcygpOworICAgIG1fZWRn
ZXMucmVzaXplKG5WZXJ0aWNlcyk7CisgICAgbV9lbXB0eSA9IG5WZXJ0aWNlcyA8IDM7CisKKyAg
ICBpZiAoblZlcnRpY2VzKQorICAgICAgICBtX2JvdW5kaW5nQm94LnNldExvY2F0aW9uKHZlcnRl
eEF0KDApKTsKKworICAgIGlmIChtX2VtcHR5KQorICAgICAgICByZXR1cm47CisKKyAgICB1bnNp
Z25lZCBtaW5WZXJ0ZXhJbmRleCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IG5W
ZXJ0aWNlczsgKytpKSB7CisgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleCA9IHZlcnRl
eEF0KGkpOworICAgICAgICBpZiAodmVydGV4LnkoKSA8IHZlcnRleEF0KG1pblZlcnRleEluZGV4
KS55KCkgfHwgKHZlcnRleC55KCkgPT0gdmVydGV4QXQobWluVmVydGV4SW5kZXgpLnkoKSAmJiB2
ZXJ0ZXgueCgpIDwgdmVydGV4QXQobWluVmVydGV4SW5kZXgpLngoKSkpCisgICAgICAgICAgICBt
aW5WZXJ0ZXhJbmRleCA9IGk7CisgICAgfQorICAgIEZsb2F0UG9pbnQgbmV4dFZlcnRleCA9IHZl
cnRleEF0KChtaW5WZXJ0ZXhJbmRleCArIDEpICUgblZlcnRpY2VzKTsKKyAgICBGbG9hdFBvaW50
IHByZXZWZXJ0ZXggPSB2ZXJ0ZXhBdCgobWluVmVydGV4SW5kZXggKyBuVmVydGljZXMgLSAxKSAl
IG5WZXJ0aWNlcyk7CisgICAgYm9vbCBjbG9ja3dpc2UgPSBkZXRlcm1pbmFudCh2ZXJ0ZXhBdCht
aW5WZXJ0ZXhJbmRleCkgLSBwcmV2VmVydGV4LCBuZXh0VmVydGV4IC0gcHJldlZlcnRleCkgPiAw
OworCisgICAgdW5zaWduZWQgZWRnZUluZGV4ID0gMDsKKyAgICB1bnNpZ25lZCB2ZXJ0ZXhJbmRl
eDEgPSAwOworICAgIGRvIHsKKyAgICAgICAgbV9ib3VuZGluZ0JveC5leHRlbmQodmVydGV4QXQo
dmVydGV4SW5kZXgxKSk7CisgICAgICAgIHVuc2lnbmVkIHZlcnRleEluZGV4MiA9IGZpbmROZXh0
RWRnZVZlcnRleEluZGV4KCp0aGlzLCB2ZXJ0ZXhJbmRleDEsIGNsb2Nrd2lzZSk7CisgICAgICAg
IG1fZWRnZXNbZWRnZUluZGV4XS5tX3BvbHlnb24gPSB0aGlzOworICAgICAgICBtX2VkZ2VzW2Vk
Z2VJbmRleF0ubV92ZXJ0ZXhJbmRleDEgPSB2ZXJ0ZXhJbmRleDE7CisgICAgICAgIG1fZWRnZXNb
ZWRnZUluZGV4XS5tX3ZlcnRleEluZGV4MiA9IHZlcnRleEluZGV4MjsKKyAgICAgICAgbV9lZGdl
c1tlZGdlSW5kZXhdLm1fZWRnZUluZGV4ID0gZWRnZUluZGV4OworICAgICAgICArK2VkZ2VJbmRl
eDsKKyAgICAgICAgdmVydGV4SW5kZXgxID0gdmVydGV4SW5kZXgyOworICAgIH0gd2hpbGUgKHZl
cnRleEluZGV4MSk7CisKKyAgICBpZiAoZWRnZUluZGV4ID4gMykgeworICAgICAgICBjb25zdCBG
bG9hdFBvbHlnb25FZGdlJiBmaXJzdEVkZ2UgPSBtX2VkZ2VzWzBdOworICAgICAgICBjb25zdCBG
bG9hdFBvbHlnb25FZGdlJiBsYXN0RWRnZSA9IG1fZWRnZXNbZWRnZUluZGV4IC0gMV07CisgICAg
ICAgIGlmIChhcmVDb2xsaW5lYXJQb2ludHMobGFzdEVkZ2UudmVydGV4MSgpLCBsYXN0RWRnZS52
ZXJ0ZXgyKCksIGZpcnN0RWRnZS52ZXJ0ZXgyKCkpKSB7CisgICAgICAgICAgICBtX2VkZ2VzWzBd
Lm1fdmVydGV4SW5kZXgxID0gbGFzdEVkZ2UubV92ZXJ0ZXhJbmRleDE7CisgICAgICAgICAgICBl
ZGdlSW5kZXgtLTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1fZWRnZXMucmVzaXplKGVkZ2VJ
bmRleCk7CisgICAgbV9lbXB0eSA9IG1fZWRnZXMuc2l6ZSgpIDwgMzsKKworICAgIGlmIChtX2Vt
cHR5KQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9l
ZGdlcy5zaXplKCk7ICsraSkgeworICAgICAgICBGbG9hdFBvbHlnb25FZGdlKiBlZGdlID0gJm1f
ZWRnZXNbaV07CisgICAgICAgIG1fZWRnZVRyZWUuYWRkKEVkZ2VJbnRlcnZhbChlZGdlLT5taW5Z
KCksIGVkZ2UtPm1heFkoKSwgZWRnZSkpOworICAgIH0KK30KKworYm9vbCBGbG9hdFBvbHlnb246
Om92ZXJsYXBwaW5nRWRnZXMoZmxvYXQgbWluWSwgZmxvYXQgbWF4WSwgVmVjdG9yPGNvbnN0IEZs
b2F0UG9seWdvbkVkZ2UqPiYgcmVzdWx0KSBjb25zdAoreworICAgIFZlY3RvcjxGbG9hdFBvbHln
b246OkVkZ2VJbnRlcnZhbD4gb3ZlcmxhcHBpbmdFZGdlSW50ZXJ2YWxzOworICAgIG1fZWRnZVRy
ZWUuYWxsT3ZlcmxhcHMoRmxvYXRQb2x5Z29uOjpFZGdlSW50ZXJ2YWwobWluWSwgbWF4WSwgMCks
IG92ZXJsYXBwaW5nRWRnZUludGVydmFscyk7CisgICAgdW5zaWduZWQgb3ZlcmxhcHBpbmdFZGdl
SW50ZXJ2YWxzU2l6ZSA9IG92ZXJsYXBwaW5nRWRnZUludGVydmFscy5zaXplKCk7CisgICAgcmVz
dWx0LnJlc2l6ZShvdmVybGFwcGluZ0VkZ2VJbnRlcnZhbHNTaXplKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgb3ZlcmxhcHBpbmdFZGdlSW50ZXJ2YWxzU2l6ZTsgKytpKSB7CisgICAg
ICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UqIGVkZ2UgPSBzdGF0aWNfY2FzdDxjb25zdCBGbG9h
dFBvbHlnb25FZGdlKj4ob3ZlcmxhcHBpbmdFZGdlSW50ZXJ2YWxzW2ldLmRhdGEoKSk7CisgICAg
ICAgIEFTU0VSVChlZGdlKTsKKyAgICAgICAgcmVzdWx0W2ldID0gZWRnZTsKKyAgICB9CisgICAg
cmV0dXJuIG92ZXJsYXBwaW5nRWRnZUludGVydmFsc1NpemUgPiAwOworfQorCitzdGF0aWMgaW5s
aW5lIGZsb2F0IGxlZnRTaWRlKGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDEsIGNvbnN0IEZsb2F0
UG9pbnQmIHZlcnRleDIsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQoreworICAgIHJldHVybiAo
KHBvaW50LngoKSAtIHZlcnRleDEueCgpKSAqICh2ZXJ0ZXgyLnkoKSAtIHZlcnRleDEueSgpKSkg
LSAoKHZlcnRleDIueCgpIC0gdmVydGV4MS54KCkpICogKHBvaW50LnkoKSAtIHZlcnRleDEueSgp
KSk7Cit9CisKK2Jvb2wgRmxvYXRQb2x5Z29uOjpjb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBw
b2ludCkgY29uc3QKK3sKKyAgICBpZiAoIW1fYm91bmRpbmdCb3guY29udGFpbnMocG9pbnQpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpbnQgd2luZGluZ051bWJlciA9IDA7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mRWRnZXMoKTsgKytpKSB7CisgICAgICAg
IGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDEgPSBlZGdlQXQoaSkudmVydGV4MSgpOworICAgICAg
ICBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgyID0gZWRnZUF0KGkpLnZlcnRleDIoKTsKKyAgICAg
ICAgaWYgKGlzUG9pbnRPbkxpbmVTZWdtZW50KHZlcnRleDEsIHZlcnRleDIsIHBvaW50KSkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAodmVydGV4Mi55KCkgPCBwb2ludC55
KCkpIHsKKyAgICAgICAgICAgIGlmICgodmVydGV4MS55KCkgPiBwb2ludC55KCkpICYmIChsZWZ0
U2lkZSh2ZXJ0ZXgxLCB2ZXJ0ZXgyLCBwb2ludCkgPiAwKSkKKyAgICAgICAgICAgICAgICArK3dp
bmRpbmdOdW1iZXI7CisgICAgICAgIH0gZWxzZSBpZiAodmVydGV4Mi55KCkgPiBwb2ludC55KCkp
IHsKKyAgICAgICAgICAgIGlmICgodmVydGV4MS55KCkgPD0gcG9pbnQueSgpKSAmJiAobGVmdFNp
ZGUodmVydGV4MSwgdmVydGV4MiwgcG9pbnQpIDwgMCkpCisgICAgICAgICAgICAgICAgLS13aW5k
aW5nTnVtYmVyOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHdpbmRpbmdOdW1iZXI7
Cit9CisKK2Jvb2wgVmVydGV4UGFpcjo6b3ZlcmxhcHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkgY29uc3QKK3sKKyAgICBib29sIGJvdW5kc092ZXJsYXAgPSAobWluWCgpIDwgcmVjdC5tYXhY
KCkpICYmIChtYXhYKCkgPiByZWN0LngoKSkgJiYgKG1pblkoKSA8IHJlY3QubWF4WSgpKSAmJiAo
bWF4WSgpID4gcmVjdC55KCkpOworICAgIGlmICghYm91bmRzT3ZlcmxhcCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgZmxvYXQgbGVmdFNpZGVWYWx1ZXNbNF0gPSB7CisgICAgICAgIGxl
ZnRTaWRlKHZlcnRleDEoKSwgdmVydGV4MigpLCByZWN0Lm1pblhNaW5ZQ29ybmVyKCkpLAorICAg
ICAgICBsZWZ0U2lkZSh2ZXJ0ZXgxKCksIHZlcnRleDIoKSwgcmVjdC5tYXhYTWluWUNvcm5lcigp
KSwKKyAgICAgICAgbGVmdFNpZGUodmVydGV4MSgpLCB2ZXJ0ZXgyKCksIHJlY3QubWluWE1heFlD
b3JuZXIoKSksCisgICAgICAgIGxlZnRTaWRlKHZlcnRleDEoKSwgdmVydGV4MigpLCByZWN0Lm1h
eFhNYXhZQ29ybmVyKCkpCisgICAgfTsKKworICAgIGludCBjdXJyZW50TGVmdFNpZGVTaWduID0g
MDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgNDsgKytpKSB7CisgICAgICAgIGlmICgh
bGVmdFNpZGVWYWx1ZXNbaV0pCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaW50IGxl
ZnRTaWRlU2lnbiA9IGxlZnRTaWRlVmFsdWVzW2ldID4gMCA/IDEgOiAtMTsKKyAgICAgICAgaWYg
KCFjdXJyZW50TGVmdFNpZGVTaWduKQorICAgICAgICAgICAgY3VycmVudExlZnRTaWRlU2lnbiA9
IGxlZnRTaWRlU2lnbjsKKyAgICAgICAgZWxzZSBpZiAoY3VycmVudExlZnRTaWRlU2lnbiAhPSBs
ZWZ0U2lkZVNpZ24pCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK2Jvb2wgVmVydGV4UGFpcjo6aW50ZXJzZWN0aW9uKGNvbnN0IFZlcnRl
eFBhaXImIG90aGVyLCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICAvLyBTZWU6IGh0
dHA6Ly9wYXVsYm91cmtlLm5ldC9nZW9tZXRyeS9wb2ludGxpbmVwbGFuZS8sICJJbnRlcnNlY3Rp
b24gcG9pbnQgb2YgdHdvIGxpbmVzIGluIDIgZGltZW5zaW9ucyIKKworICAgIGNvbnN0IEZsb2F0
U2l6ZSYgdGhpc0RlbHRhID0gdmVydGV4MigpIC0gdmVydGV4MSgpOworICAgIGNvbnN0IEZsb2F0
U2l6ZSYgb3RoZXJEZWx0YSA9IG90aGVyLnZlcnRleDIoKSAtIG90aGVyLnZlcnRleDEoKTsKKyAg
ICBmbG9hdCBkZW5vbWluYXRvciA9IGRldGVybWluYW50KHRoaXNEZWx0YSwgb3RoZXJEZWx0YSk7
CisgICAgaWYgKCFkZW5vbWluYXRvcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8g
VGhlIHR3byBsaW5lIHNlZ21lbnRzOiAidGhpcyIgdmVydGV4MSx2ZXJ0ZXgyIGFuZCAib3RoZXIi
IHZlcnRleDEsdmVydGV4MiwgaGF2ZSBiZWVuIGRlZmluZWQKKyAgICAvLyBpbiBwYXJhbWV0cmlj
IGZvcm0uIEVhY2ggcG9pbnQgb24gdGhlIGxpbmUgc2VnbWVudCBpczogdmVydGV4MSArIHUgKiAo
dmVydGV4MiAtIHZlcnRleDEpLAorICAgIC8vIHdoZW4gMCA8PSB1IDw9IDEuIFdlJ3JlIGNvbXB1
dGluZyB0aGUgdmFsdWVzIG9mIHUgZm9yIGVhY2ggbGluZSBhdCB0aGVpciBpbnRlcnNlY3Rpb24g
cG9pbnQuCisKKyAgICBjb25zdCBGbG9hdFNpemUmIHZlcnRleDFEZWx0YSA9IHZlcnRleDEoKSAt
IG90aGVyLnZlcnRleDEoKTsKKyAgICBmbG9hdCB1VGhpc0xpbmUgPSBkZXRlcm1pbmFudChvdGhl
ckRlbHRhLCB2ZXJ0ZXgxRGVsdGEpIC8gZGVub21pbmF0b3I7CisgICAgZmxvYXQgdU90aGVyTGlu
ZSA9IGRldGVybWluYW50KHRoaXNEZWx0YSwgdmVydGV4MURlbHRhKSAvIGRlbm9taW5hdG9yOwor
CisgICAgaWYgKHVUaGlzTGluZSA8IDAgfHwgdU90aGVyTGluZSA8IDAgfHwgdVRoaXNMaW5lID4g
MSB8fCB1T3RoZXJMaW5lID4gMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcG9pbnQg
PSB2ZXJ0ZXgxKCkgKyB1VGhpc0xpbmUgKiB0aGlzRGVsdGE7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9seWdvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRQb2x5Z29uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uOGRlZmUxNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0UG9seWdvbi5oCkBAIC0wLDAgKzEsMTUwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAq
ICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWlt
ZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
CisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBG
bG9hdFBvbHlnb25faAorI2RlZmluZSBGbG9hdFBvbHlnb25faAorCisjaW5jbHVkZSAiRmxvYXRQ
b2ludC5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIlBPREludGVydmFsVHJl
ZS5oIgorI2luY2x1ZGUgIldpbmRSdWxlLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZsb2F0UG9seWdvbkVkZ2U7CisKKy8vIFRoaXMgY2xh
c3MgaXMgdXNlZCBieSBQT0RJbnRlcnZhbFRyZWUgZm9yIGRlYnVnZ2luZy4KKyNpZm5kZWYgTkRF
QlVHCit0ZW1wbGF0ZSA8Y2xhc3M+IHN0cnVjdCBWYWx1ZVRvU3RyaW5nOworI2VuZGlmCisKK2Ns
YXNzIEZsb2F0UG9seWdvbiB7CitwdWJsaWM6CisgICAgRmxvYXRQb2x5Z29uKFBhc3NPd25QdHI8
VmVjdG9yPEZsb2F0UG9pbnQ+ID4gdmVydGljZXMsIFdpbmRSdWxlIGZpbGxSdWxlKTsKKworICAg
IGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleEF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVy
biAoKm1fdmVydGljZXMpW2luZGV4XTsgfQorICAgIHVuc2lnbmVkIG51bWJlck9mVmVydGljZXMo
KSBjb25zdCB7IHJldHVybiBtX3ZlcnRpY2VzLT5zaXplKCk7IH0KKworICAgIFdpbmRSdWxlIGZp
bGxSdWxlKCkgY29uc3QgeyByZXR1cm4gbV9maWxsUnVsZTsgfQorCisgICAgY29uc3QgRmxvYXRQ
b2x5Z29uRWRnZSYgZWRnZUF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2VkZ2Vz
W2luZGV4XTsgfQorICAgIHVuc2lnbmVkIG51bWJlck9mRWRnZXMoKSBjb25zdCB7IHJldHVybiBt
X2VkZ2VzLnNpemUoKTsgfQorCisgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94KCkgY29uc3QgeyBy
ZXR1cm4gbV9ib3VuZGluZ0JveDsgfQorICAgIGJvb2wgb3ZlcmxhcHBpbmdFZGdlcyhmbG9hdCBt
aW5ZLCBmbG9hdCBtYXhZLCBWZWN0b3I8Y29uc3QgRmxvYXRQb2x5Z29uRWRnZSo+JiByZXN1bHQp
IGNvbnN0OworICAgIGJvb2wgY29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OworICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZW1wdHk7IH0KKworcHJpdmF0ZToKKyAg
ICB0eXBlZGVmIFBPREludGVydmFsPGZsb2F0LCBGbG9hdFBvbHlnb25FZGdlKj4gRWRnZUludGVy
dmFsOworICAgIHR5cGVkZWYgUE9ESW50ZXJ2YWxUcmVlPGZsb2F0LCBGbG9hdFBvbHlnb25FZGdl
Kj4gRWRnZUludGVydmFsVHJlZTsKKworICAgIE93blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiBt
X3ZlcnRpY2VzOworICAgIFdpbmRSdWxlIG1fZmlsbFJ1bGU7CisgICAgRmxvYXRSZWN0IG1fYm91
bmRpbmdCb3g7CisgICAgYm9vbCBtX2VtcHR5OworICAgIFZlY3RvcjxGbG9hdFBvbHlnb25FZGdl
PiBtX2VkZ2VzOworICAgIEVkZ2VJbnRlcnZhbFRyZWUgbV9lZGdlVHJlZTsgLy8gRWFjaCBFZGdl
SW50ZXJ2YWxUcmVlIG5vZGUgc3RvcmVzIG1pblksIG1heFksIGFuZCBhICgiVXNlckRhdGEiKSBw
b2ludGVyIHRvIGEgRmxvYXRQb2x5Z29uRWRnZS4KKworfTsKKworY2xhc3MgVmVydGV4UGFpciB7
CitwdWJsaWM6CisgICAgdmlydHVhbCB+VmVydGV4UGFpcigpIHsgfQorCisgICAgdmlydHVhbCBj
b25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgxKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgY29uc3Qg
RmxvYXRQb2ludCYgdmVydGV4MigpIGNvbnN0ID0gMDsKKworICAgIGZsb2F0IG1pblgoKSBjb25z
dCB7IHJldHVybiBzdGQ6Om1pbih2ZXJ0ZXgxKCkueCgpLCB2ZXJ0ZXgyKCkueCgpKTsgfQorICAg
IGZsb2F0IG1pblkoKSBjb25zdCB7IHJldHVybiBzdGQ6Om1pbih2ZXJ0ZXgxKCkueSgpLCB2ZXJ0
ZXgyKCkueSgpKTsgfQorICAgIGZsb2F0IG1heFgoKSBjb25zdCB7IHJldHVybiBzdGQ6Om1heCh2
ZXJ0ZXgxKCkueCgpLCB2ZXJ0ZXgyKCkueCgpKTsgfQorICAgIGZsb2F0IG1heFkoKSBjb25zdCB7
IHJldHVybiBzdGQ6Om1heCh2ZXJ0ZXgxKCkueSgpLCB2ZXJ0ZXgyKCkueSgpKTsgfQorCisgICAg
Ym9vbCBvdmVybGFwc1JlY3QoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CisgICAgYm9vbCBpbnRl
cnNlY3Rpb24oY29uc3QgVmVydGV4UGFpciYsIEZsb2F0UG9pbnQmKSBjb25zdDsKK307CisKK2Ns
YXNzIEZsb2F0UG9seWdvbkVkZ2UgOiBwdWJsaWMgVmVydGV4UGFpciB7CisgICAgZnJpZW5kIGNs
YXNzIEZsb2F0UG9seWdvbjsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGNvbnN0IEZsb2F0UG9pbnQm
IHZlcnRleDEoKSBjb25zdCBPVkVSUklERQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fcG9seWdv
bik7CisgICAgICAgIHJldHVybiBtX3BvbHlnb24tPnZlcnRleEF0KG1fdmVydGV4SW5kZXgxKTsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDIoKSBjb25zdCBP
VkVSUklERQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fcG9seWdvbik7CisgICAgICAgIHJldHVy
biBtX3BvbHlnb24tPnZlcnRleEF0KG1fdmVydGV4SW5kZXgyKTsKKyAgICB9CisKKyAgICBjb25z
dCBGbG9hdFBvbHlnb25FZGdlJiBwcmV2aW91c0VkZ2UoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKG1fcG9seWdvbiAmJiBtX3BvbHlnb24tPm51bWJlck9mRWRnZXMoKSA+IDEpOworICAg
ICAgICByZXR1cm4gbV9wb2x5Z29uLT5lZGdlQXQoKG1fZWRnZUluZGV4ICsgbV9wb2x5Z29uLT5u
dW1iZXJPZkVkZ2VzKCkgLSAxKSAlIG1fcG9seWdvbi0+bnVtYmVyT2ZFZGdlcygpKTsKKyAgICB9
CisKKyAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdlJiBuZXh0RWRnZSgpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQobV9wb2x5Z29uICYmIG1fcG9seWdvbi0+bnVtYmVyT2ZFZGdlcygpID4g
MSk7CisgICAgICAgIHJldHVybiBtX3BvbHlnb24tPmVkZ2VBdCgobV9lZGdlSW5kZXggKyAxKSAl
IG1fcG9seWdvbi0+bnVtYmVyT2ZFZGdlcygpKTsKKyAgICB9CisKKyAgICBjb25zdCBGbG9hdFBv
bHlnb24qIHBvbHlnb24oKSBjb25zdCB7IHJldHVybiBtX3BvbHlnb247IH0KKyAgICB1bnNpZ25l
ZCB2ZXJ0ZXhJbmRleDEoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRleEluZGV4MTsgfQorICAgIHVu
c2lnbmVkIHZlcnRleEluZGV4MigpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGV4SW5kZXgyOyB9Cisg
ICAgdW5zaWduZWQgZWRnZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9lZGdlSW5kZXg7IH0KKwor
cHJpdmF0ZToKKyAgICAvLyBFZGdlIHZlcnRleCBpbmRleDEgaXMgbGVzcyB0aGFuIGluZGV4Miwg
ZXhjZXB0IHRoZSBsYXN0IGVkZ2UsIHdoZXJlIGluZGV4MiBpcyAwLiBXaGVuIGEgcG9seWdvbiBl
ZGdlCisgICAgLy8gaXMgZGVmaW5lZCBieSAzIG9yIG1vcmUgY29saW5lYXIgdmVydGljZXMsIGlu
ZGV4MiBjYW4gYmUgdGhlIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBjb2xpbmVhciB2ZXJ0ZXguCisg
ICAgdW5zaWduZWQgbV92ZXJ0ZXhJbmRleDE7CisgICAgdW5zaWduZWQgbV92ZXJ0ZXhJbmRleDI7
CisgICAgdW5zaWduZWQgbV9lZGdlSW5kZXg7CisgICAgY29uc3QgRmxvYXRQb2x5Z29uKiBtX3Bv
bHlnb247Cit9OworCisvLyBUaGVzZSBzdHJ1Y3R1cmVzIGFyZSB1c2VkIGJ5IFBPREludGVydmFs
VHJlZSBmb3IgZGVidWdnaW5nLgorI2lmbmRlZiBOREVCVUcKK3RlbXBsYXRlIDw+IHN0cnVjdCBW
YWx1ZVRvU3RyaW5nPGZsb2F0PiB7CisgICAgc3RhdGljIFN0cmluZyBzdHJpbmcoY29uc3QgZmxv
YXQgdmFsdWUpIHsgcmV0dXJuIFN0cmluZzo6bnVtYmVyKHZhbHVlKTsgfQorfTsKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgVmFsdWVUb1N0cmluZzxGbG9hdFBvbHlnb25FZGdlKj4geworICAgIHN0YXRp
YyBTdHJpbmcgc3RyaW5nKGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UqIGVkZ2UpIHsgcmV0dXJuIFN0
cmluZzo6Zm9ybWF0KCIlcCAoJWYsJWYgJWYsJWYpIiwgZWRnZSwgZWRnZS0+dmVydGV4MSgpLngo
KSwgZWRnZS0+dmVydGV4MSgpLnkoKSwgZWRnZS0+dmVydGV4MigpLngoKSwgZWRnZS0+dmVydGV4
MigpLnkoKSk7IH0KK307CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRmxvYXRQb2x5Z29uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9FeGNsdXNpb25Qb2x5Z29uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNp
b25Qb2x5Z29uLmNwcAppbmRleCAxMDYwYzIwLi41ZjU5ZGMwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uY3BwCkBAIC00MiwxMTggKzQyLDE5IEBAIGVu
dW0gRWRnZUludGVyc2VjdGlvblR5cGUgewogfTsKIAogc3RydWN0IEVkZ2VJbnRlcnNlY3Rpb24g
ewotICAgIGNvbnN0IEV4Y2x1c2lvblBvbHlnb25FZGdlKiBlZGdlOworICAgIGNvbnN0IEZsb2F0
UG9seWdvbkVkZ2UqIGVkZ2U7CiAgICAgRmxvYXRQb2ludCBwb2ludDsKICAgICBFZGdlSW50ZXJz
ZWN0aW9uVHlwZSB0eXBlOwogfTsKIAotc3RhdGljIGlubGluZSBmbG9hdCBkZXRlcm1pbmFudChj
b25zdCBGbG9hdFNpemUmIGEsIGNvbnN0IEZsb2F0U2l6ZSYgYikKLXsKLSAgICByZXR1cm4gYS53
aWR0aCgpICogYi5oZWlnaHQoKSAtIGEuaGVpZ2h0KCkgKiBiLndpZHRoKCk7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgYm9vbCBhcmVDb2xsaW5lYXJQb2ludHMoY29uc3QgRmxvYXRQb2ludCYgcDAsIGNv
bnN0IEZsb2F0UG9pbnQmIHAxLCBjb25zdCBGbG9hdFBvaW50JiBwMikKLXsKLSAgICByZXR1cm4g
IWRldGVybWluYW50KHAxIC0gcDAsIHAyIC0gcDApOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wg
YXJlQ29pbmNpZGVudFBvaW50cyhjb25zdCBGbG9hdFBvaW50JiBwMCwgY29uc3QgRmxvYXRQb2lu
dCYgcDEpCi17Ci0gICAgcmV0dXJuIHAwLngoKSA9PSBwMS54KCkgJiYgcDAueSgpID09IHAxLnko
KTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGlzUG9pbnRPbkxpbmVTZWdtZW50KGNvbnN0IEZs
b2F0UG9pbnQmIHZlcnRleDEsIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDIsIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50KQotewotICAgIHJldHVybiBwb2ludC54KCkgPj0gc3RkOjptaW4odmVydGV4
MS54KCksIHZlcnRleDIueCgpKQotICAgICAgICAmJiBwb2ludC54KCkgPD0gc3RkOjptYXgodmVy
dGV4MS54KCksIHZlcnRleDIueCgpKQotICAgICAgICAmJiBhcmVDb2xsaW5lYXJQb2ludHModmVy
dGV4MSwgdmVydGV4MiwgcG9pbnQpOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIG5leHRW
ZXJ0ZXhJbmRleCh1bnNpZ25lZCB2ZXJ0ZXhJbmRleCwgdW5zaWduZWQgblZlcnRpY2VzLCBib29s
IGNsb2Nrd2lzZSkKLXsKLSAgICByZXR1cm4gKChjbG9ja3dpc2UpID8gdmVydGV4SW5kZXggKyAx
IDogdmVydGV4SW5kZXggLSAxICsgblZlcnRpY2VzKSAlIG5WZXJ0aWNlczsKLX0KLQotdW5zaWdu
ZWQgRXhjbHVzaW9uUG9seWdvbjo6ZmluZE5leHRFZGdlVmVydGV4SW5kZXgodW5zaWduZWQgdmVy
dGV4SW5kZXgxLCBib29sIGNsb2Nrd2lzZSkgY29uc3QKLXsKLSAgICB1bnNpZ25lZCBuVmVydGlj
ZXMgPSBudW1iZXJPZlZlcnRpY2VzKCk7Ci0gICAgdW5zaWduZWQgdmVydGV4SW5kZXgyID0gbmV4
dFZlcnRleEluZGV4KHZlcnRleEluZGV4MSwgblZlcnRpY2VzLCBjbG9ja3dpc2UpOwotCi0gICAg
d2hpbGUgKHZlcnRleEluZGV4MiAmJiBhcmVDb2luY2lkZW50UG9pbnRzKHZlcnRleEF0KHZlcnRl
eEluZGV4MSksIHZlcnRleEF0KHZlcnRleEluZGV4MikpKQotICAgICAgICB2ZXJ0ZXhJbmRleDIg
PSBuZXh0VmVydGV4SW5kZXgodmVydGV4SW5kZXgyLCBuVmVydGljZXMsIGNsb2Nrd2lzZSk7Ci0K
LSAgICB3aGlsZSAodmVydGV4SW5kZXgyKSB7Ci0gICAgICAgIHVuc2lnbmVkIHZlcnRleEluZGV4
MyA9IG5leHRWZXJ0ZXhJbmRleCh2ZXJ0ZXhJbmRleDIsIG5WZXJ0aWNlcywgY2xvY2t3aXNlKTsK
LSAgICAgICAgaWYgKCFhcmVDb2xsaW5lYXJQb2ludHModmVydGV4QXQodmVydGV4SW5kZXgxKSwg
dmVydGV4QXQodmVydGV4SW5kZXgyKSwgdmVydGV4QXQodmVydGV4SW5kZXgzKSkpCi0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgdmVydGV4SW5kZXgyID0gdmVydGV4SW5kZXgzOwotICAgIH0K
LQotICAgIHJldHVybiB2ZXJ0ZXhJbmRleDI7Ci19Ci0KLUV4Y2x1c2lvblBvbHlnb246OkV4Y2x1
c2lvblBvbHlnb24oUGFzc093blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiB2ZXJ0aWNlcywgV2lu
ZFJ1bGUgZmlsbFJ1bGUpCi0gICAgOiBFeGNsdXNpb25TaGFwZSgpCi0gICAgLCBtX3ZlcnRpY2Vz
KHZlcnRpY2VzKQotICAgICwgbV9maWxsUnVsZShmaWxsUnVsZSkKK3N0YXRpYyBpbmxpbmUgZmxv
YXQgbGVmdFNpZGUoY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MSwgY29uc3QgRmxvYXRQb2ludCYg
dmVydGV4MiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCiB7Ci0gICAgdW5zaWduZWQgblZlcnRp
Y2VzID0gbnVtYmVyT2ZWZXJ0aWNlcygpOwotICAgIG1fZWRnZXMucmVzaXplKG5WZXJ0aWNlcyk7
Ci0gICAgbV9lbXB0eSA9IG5WZXJ0aWNlcyA8IDM7Ci0KLSAgICBpZiAoblZlcnRpY2VzKQotICAg
ICAgICBtX2JvdW5kaW5nQm94LnNldExvY2F0aW9uKHZlcnRleEF0KDApKTsKLQotICAgIGlmICht
X2VtcHR5KQotICAgICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25lZCBtaW5WZXJ0ZXhJbmRleCA9
IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IG5WZXJ0aWNlczsgKytpKSB7Ci0gICAg
ICAgIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleCA9IHZlcnRleEF0KGkpOwotICAgICAgICBpZiAo
dmVydGV4LnkoKSA8IHZlcnRleEF0KG1pblZlcnRleEluZGV4KS55KCkgfHwgKHZlcnRleC55KCkg
PT0gdmVydGV4QXQobWluVmVydGV4SW5kZXgpLnkoKSAmJiB2ZXJ0ZXgueCgpIDwgdmVydGV4QXQo
bWluVmVydGV4SW5kZXgpLngoKSkpCi0gICAgICAgICAgICBtaW5WZXJ0ZXhJbmRleCA9IGk7Ci0g
ICAgfQotICAgIEZsb2F0UG9pbnQgbmV4dFZlcnRleCA9IHZlcnRleEF0KChtaW5WZXJ0ZXhJbmRl
eCArIDEpICUgblZlcnRpY2VzKTsKLSAgICBGbG9hdFBvaW50IHByZXZWZXJ0ZXggPSB2ZXJ0ZXhB
dCgobWluVmVydGV4SW5kZXggKyBuVmVydGljZXMgLSAxKSAlIG5WZXJ0aWNlcyk7Ci0gICAgYm9v
bCBjbG9ja3dpc2UgPSBkZXRlcm1pbmFudCh2ZXJ0ZXhBdChtaW5WZXJ0ZXhJbmRleCkgLSBwcmV2
VmVydGV4LCBuZXh0VmVydGV4IC0gcHJldlZlcnRleCkgPiAwOwotCi0gICAgdW5zaWduZWQgZWRn
ZUluZGV4ID0gMDsKLSAgICB1bnNpZ25lZCB2ZXJ0ZXhJbmRleDEgPSAwOwotICAgIGRvIHsKLSAg
ICAgICAgbV9ib3VuZGluZ0JveC5leHRlbmQodmVydGV4QXQodmVydGV4SW5kZXgxKSk7Ci0gICAg
ICAgIHVuc2lnbmVkIHZlcnRleEluZGV4MiA9IGZpbmROZXh0RWRnZVZlcnRleEluZGV4KHZlcnRl
eEluZGV4MSwgY2xvY2t3aXNlKTsKLSAgICAgICAgbV9lZGdlc1tlZGdlSW5kZXhdLm1fcG9seWdv
biA9IHRoaXM7Ci0gICAgICAgIG1fZWRnZXNbZWRnZUluZGV4XS5tX3ZlcnRleEluZGV4MSA9IHZl
cnRleEluZGV4MTsKLSAgICAgICAgbV9lZGdlc1tlZGdlSW5kZXhdLm1fdmVydGV4SW5kZXgyID0g
dmVydGV4SW5kZXgyOwotICAgICAgICBtX2VkZ2VzW2VkZ2VJbmRleF0ubV9lZGdlSW5kZXggPSBl
ZGdlSW5kZXg7Ci0gICAgICAgICsrZWRnZUluZGV4OwotICAgICAgICB2ZXJ0ZXhJbmRleDEgPSB2
ZXJ0ZXhJbmRleDI7Ci0gICAgfSB3aGlsZSAodmVydGV4SW5kZXgxKTsKLQotICAgIGlmIChlZGdl
SW5kZXggPiAzKSB7Ci0gICAgICAgIGNvbnN0IEV4Y2x1c2lvblBvbHlnb25FZGdlJiBmaXJzdEVk
Z2UgPSBtX2VkZ2VzWzBdOwotICAgICAgICBjb25zdCBFeGNsdXNpb25Qb2x5Z29uRWRnZSYgbGFz
dEVkZ2UgPSBtX2VkZ2VzW2VkZ2VJbmRleCAtIDFdOwotICAgICAgICBpZiAoYXJlQ29sbGluZWFy
UG9pbnRzKGxhc3RFZGdlLnZlcnRleDEoKSwgbGFzdEVkZ2UudmVydGV4MigpLCBmaXJzdEVkZ2Uu
dmVydGV4MigpKSkgewotICAgICAgICAgICAgbV9lZGdlc1swXS5tX3ZlcnRleEluZGV4MSA9IGxh
c3RFZGdlLm1fdmVydGV4SW5kZXgxOwotICAgICAgICAgICAgZWRnZUluZGV4LS07Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBtX2VkZ2VzLnJlc2l6ZShlZGdlSW5kZXgpOwotICAgIG1fZW1wdHkg
PSBtX2VkZ2VzLnNpemUoKSA8IDM7Ci0KLSAgICBpZiAobV9lbXB0eSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZWRnZXMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgRXhjbHVzaW9uUG9seWdvbkVkZ2UqIGVkZ2UgPSAmbV9lZGdlc1tpXTsKLSAgICAg
ICAgbV9lZGdlVHJlZS5hZGQoRWRnZUludGVydmFsKGVkZ2UtPm1pblkoKSwgZWRnZS0+bWF4WSgp
LCBlZGdlKSk7Ci0gICAgfQorICAgIHJldHVybiAoKHBvaW50LngoKSAtIHZlcnRleDEueCgpKSAq
ICh2ZXJ0ZXgyLnkoKSAtIHZlcnRleDEueSgpKSkgLSAoKHZlcnRleDIueCgpIC0gdmVydGV4MS54
KCkpICogKHBvaW50LnkoKSAtIHZlcnRleDEueSgpKSk7CiB9CiAKLXN0YXRpYyBib29sIGNvbXB1
dGVYSW50ZXJzZWN0aW9uKGNvbnN0IEV4Y2x1c2lvblBvbHlnb25FZGdlKiBlZGdlUG9pbnRlciwg
ZmxvYXQgeSwgRWRnZUludGVyc2VjdGlvbiYgcmVzdWx0KQorc3RhdGljIGJvb2wgY29tcHV0ZVhJ
bnRlcnNlY3Rpb24oY29uc3QgRmxvYXRQb2x5Z29uRWRnZSogZWRnZVBvaW50ZXIsIGZsb2F0IHks
IEVkZ2VJbnRlcnNlY3Rpb24mIHJlc3VsdCkKIHsKLSAgICBjb25zdCBFeGNsdXNpb25Qb2x5Z29u
RWRnZSYgZWRnZSA9ICplZGdlUG9pbnRlcjsKKyAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdlJiBl
ZGdlID0gKmVkZ2VQb2ludGVyOwogCiAgICAgaWYgKGVkZ2UubWluWSgpID4geSB8fCBlZGdlLm1h
eFkoKSA8IHkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE5Miw4ICs5Myw4IEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBnZXRWZXJ0ZXhJbnRlcnNlY3Rpb25WZXJ0aWNlcyhjb25zdCBFZGdlSW50
ZXJzZWN0aW9uJiBpbnRlcnNlCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEFTU0VSVChp
bnRlcnNlY3Rpb24uZWRnZSAmJiBpbnRlcnNlY3Rpb24uZWRnZS0+cG9seWdvbigpKTsKLSAgICBj
b25zdCBFeGNsdXNpb25Qb2x5Z29uJiBwb2x5Z29uID0gKihpbnRlcnNlY3Rpb24uZWRnZS0+cG9s
eWdvbigpKTsKLSAgICBjb25zdCBFeGNsdXNpb25Qb2x5Z29uRWRnZSYgdGhpc0VkZ2UgPSAqKGlu
dGVyc2VjdGlvbi5lZGdlKTsKKyAgICBjb25zdCBGbG9hdFBvbHlnb24mIHBvbHlnb24gPSAqKGlu
dGVyc2VjdGlvbi5lZGdlLT5wb2x5Z29uKCkpOworICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2Um
IHRoaXNFZGdlID0gKihpbnRlcnNlY3Rpb24uZWRnZSk7CiAKICAgICBpZiAoKGludGVyc2VjdGlv
bi50eXBlID09IFZlcnRleE1pblkgJiYgKHRoaXNFZGdlLnZlcnRleDEoKS55KCkgPCB0aGlzRWRn
ZS52ZXJ0ZXgyKCkueSgpKSkKICAgICAgICAgfHwgKGludGVyc2VjdGlvbi50eXBlID09IFZlcnRl
eE1heFkgJiYgKHRoaXNFZGdlLnZlcnRleDEoKS55KCkgPiB0aGlzRWRnZS52ZXJ0ZXgyKCkueSgp
KSkpIHsKQEAgLTIyNiwxOCArMTI3LDE4IEBAIHN0YXRpYyBib29sIGNvbXBhcmVFZGdlSW50ZXJz
ZWN0aW9uWChjb25zdCBFZGdlSW50ZXJzZWN0aW9uJiBpbnRlcnNlY3Rpb24xLCBjb25zCiAgICAg
cmV0dXJuICh4MSA9PSB4MikgPyBpbnRlcnNlY3Rpb24xLnR5cGUgPCBpbnRlcnNlY3Rpb24yLnR5
cGUgOiB4MSA8IHgyOwogfQogCi12b2lkIEV4Y2x1c2lvblBvbHlnb246OmNvbXB1dGVYSW50ZXJz
ZWN0aW9ucyhmbG9hdCB5LCBib29sIGlzTWluWSwgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYg
cmVzdWx0KSBjb25zdAorc3RhdGljIHZvaWQgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKGNvbnN0IEZs
b2F0UG9seWdvbiYgcG9seWdvbiwgZmxvYXQgeSwgYm9vbCBpc01pblksIFZlY3RvcjxFeGNsdXNp
b25JbnRlcnZhbD4mIHJlc3VsdCkKIHsKLSAgICBWZWN0b3I8RXhjbHVzaW9uUG9seWdvbjo6RWRn
ZUludGVydmFsPiBvdmVybGFwcGluZ0VkZ2VzOwotICAgIG1fZWRnZVRyZWUuYWxsT3ZlcmxhcHMo
RXhjbHVzaW9uUG9seWdvbjo6RWRnZUludGVydmFsKHksIHksIDApLCBvdmVybGFwcGluZ0VkZ2Vz
KTsKKyAgICBWZWN0b3I8Y29uc3QgRmxvYXRQb2x5Z29uRWRnZSo+IGVkZ2VzOworICAgIGlmICgh
cG9seWdvbi5vdmVybGFwcGluZ0VkZ2VzKHksIHksIGVkZ2VzKSkKKyAgICAgICAgcmV0dXJuOwog
CiAgICAgVmVjdG9yPEVkZ2VJbnRlcnNlY3Rpb24+IGludGVyc2VjdGlvbnM7CiAgICAgRWRnZUlu
dGVyc2VjdGlvbiBpbnRlcnNlY3Rpb247Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG92
ZXJsYXBwaW5nRWRnZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgRXhjbHVzaW9uUG9seWdvbkVk
Z2UqIGVkZ2UgPSBzdGF0aWNfY2FzdDxFeGNsdXNpb25Qb2x5Z29uRWRnZSo+KG92ZXJsYXBwaW5n
RWRnZXNbaV0uZGF0YSgpKTsKLSAgICAgICAgaWYgKGNvbXB1dGVYSW50ZXJzZWN0aW9uKGVkZ2Us
IHksIGludGVyc2VjdGlvbikgJiYgaW50ZXJzZWN0aW9uLnR5cGUgIT0gVmVydGV4WUJvdGgpCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVkZ2VzLnNpemUoKTsgKytpKQorICAgICAgICBp
ZiAoY29tcHV0ZVhJbnRlcnNlY3Rpb24oZWRnZXNbaV0sIHksIGludGVyc2VjdGlvbikgJiYgaW50
ZXJzZWN0aW9uLnR5cGUgIT0gVmVydGV4WUJvdGgpCiAgICAgICAgICAgICBpbnRlcnNlY3Rpb25z
LmFwcGVuZChpbnRlcnNlY3Rpb24pOwotICAgIH0KKwogICAgIGlmIChpbnRlcnNlY3Rpb25zLnNp
emUoKSA8IDIpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjYzLDEwICsxNjQsMTAgQEAgdm9pZCBF
eGNsdXNpb25Qb2x5Z29uOjpjb21wdXRlWEludGVyc2VjdGlvbnMoZmxvYXQgeSwgYm9vbCBpc01p
blksIFZlY3RvcjxFeGNsdXMKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGNv
bnN0IEV4Y2x1c2lvblBvbHlnb25FZGdlJiB0aGlzRWRnZSA9ICp0aGlzSW50ZXJzZWN0aW9uLmVk
Z2U7CisgICAgICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIHRoaXNFZGdlID0gKnRoaXNJbnRl
cnNlY3Rpb24uZWRnZTsKICAgICAgICAgYm9vbCBldmVuT2RkQ3Jvc3NpbmcgPSAhd2luZENvdW50
OwogCi0gICAgICAgIGlmIChmaWxsUnVsZSgpID09IFJVTEVfRVZFTk9ERCkgeworICAgICAgICBp
ZiAocG9seWdvbi5maWxsUnVsZSgpID09IFJVTEVfRVZFTk9ERCkgewogICAgICAgICAgICAgd2lu
ZENvdW50ICs9ICh0aGlzRWRnZS52ZXJ0ZXgyKCkueSgpID4gdGhpc0VkZ2UudmVydGV4MSgpLnko
KSkgPyAxIDogLTE7CiAgICAgICAgICAgICBldmVuT2RkQ3Jvc3NpbmcgPSBldmVuT2RkQ3Jvc3Np
bmcgfHwgIXdpbmRDb3VudDsKICAgICAgICAgfQpAQCAtMjk1LDE1ICsxOTYsMTUgQEAgdm9pZCBF
eGNsdXNpb25Qb2x5Z29uOjpjb21wdXRlWEludGVyc2VjdGlvbnMoZmxvYXQgeSwgYm9vbCBpc01p
blksIFZlY3RvcjxFeGNsdXMKICAgICB9CiB9CiAKLS8vIFJldHVybiB0aGUgWCBwcm9qZWN0aW9u
cyBvZiB0aGUgZWRnZXMgdGhhdCBvdmVybGFwIHkxLHkyLgotdm9pZCBFeGNsdXNpb25Qb2x5Z29u
Ojpjb21wdXRlRWRnZUludGVyc2VjdGlvbnMoZmxvYXQgeTEsIGZsb2F0IHkyLCBWZWN0b3I8RXhj
bHVzaW9uSW50ZXJ2YWw+JiByZXN1bHQpIGNvbnN0CitzdGF0aWMgdm9pZCBjb21wdXRlT3Zlcmxh
cHBpbmdFZGdlWFByb2plY3Rpb25zKGNvbnN0IEZsb2F0UG9seWdvbiYgcG9seWdvbiwgZmxvYXQg
eTEsIGZsb2F0IHkyLCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JiByZXN1bHQpCiB7Ci0gICAg
VmVjdG9yPEV4Y2x1c2lvblBvbHlnb246OkVkZ2VJbnRlcnZhbD4gb3ZlcmxhcHBpbmdFZGdlczsK
LSAgICBtX2VkZ2VUcmVlLmFsbE92ZXJsYXBzKEV4Y2x1c2lvblBvbHlnb246OkVkZ2VJbnRlcnZh
bCh5MSwgeTIsIDApLCBvdmVybGFwcGluZ0VkZ2VzKTsKKyAgICBWZWN0b3I8Y29uc3QgRmxvYXRQ
b2x5Z29uRWRnZSo+IGVkZ2VzOworICAgIGlmICghcG9seWdvbi5vdmVybGFwcGluZ0VkZ2VzKHkx
LCB5MiwgZWRnZXMpKQorICAgICAgICByZXR1cm47CiAKICAgICBFZGdlSW50ZXJzZWN0aW9uIGlu
dGVyc2VjdGlvbjsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb3ZlcmxhcHBpbmdFZGdl
cy5zaXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBFeGNsdXNpb25Qb2x5Z29uRWRnZSAqZWRn
ZSA9IHN0YXRpY19jYXN0PEV4Y2x1c2lvblBvbHlnb25FZGdlKj4ob3ZlcmxhcHBpbmdFZGdlc1tp
XS5kYXRhKCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlZGdlcy5zaXplKCk7ICsr
aSkgeworICAgICAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdlICplZGdlID0gZWRnZXNbaV07CiAg
ICAgICAgIGZsb2F0IHgxOwogICAgICAgICBmbG9hdCB4MjsKIApAQCAtMzM4LDE0ICsyMzksMTQg
QEAgdm9pZCBFeGNsdXNpb25Qb2x5Z29uOjpnZXRFeGNsdWRlZEludGVydmFscyhmbG9hdCBsb2dp
Y2FsVG9wLCBmbG9hdCBsb2dpY2FsSGVpZ2gKICAgICBmbG9hdCB5MiA9IHkxICsgbG9naWNhbEhl
aWdodDsKIAogICAgIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4geTFYSW50ZXJ2YWxzLCB5MlhJ
bnRlcnZhbHM7Ci0gICAgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKHkxLCB0cnVlLCB5MVhJbnRlcnZh
bHMpOwotICAgIGNvbXB1dGVYSW50ZXJzZWN0aW9ucyh5MiwgZmFsc2UsIHkyWEludGVydmFscyk7
CisgICAgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKG1fcG9seWdvbiwgeTEsIHRydWUsIHkxWEludGVy
dmFscyk7CisgICAgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKG1fcG9seWdvbiwgeTIsIGZhbHNlLCB5
MlhJbnRlcnZhbHMpOwogCiAgICAgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiBtZXJnZWRJbnRl
cnZhbHM7CiAgICAgbWVyZ2VFeGNsdXNpb25JbnRlcnZhbHMoeTFYSW50ZXJ2YWxzLCB5MlhJbnRl
cnZhbHMsIG1lcmdlZEludGVydmFscyk7CiAKICAgICBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+
IGVkZ2VJbnRlcnZhbHM7Ci0gICAgY29tcHV0ZUVkZ2VJbnRlcnNlY3Rpb25zKHkxLCB5MiwgZWRn
ZUludGVydmFscyk7CisgICAgY29tcHV0ZU92ZXJsYXBwaW5nRWRnZVhQcm9qZWN0aW9ucyhtX3Bv
bHlnb24sIHkxLCB5MiwgZWRnZUludGVydmFscyk7CiAKICAgICBWZWN0b3I8RXhjbHVzaW9uSW50
ZXJ2YWw+IGV4Y2x1ZGVkSW50ZXJ2YWxzOwogICAgIG1lcmdlRXhjbHVzaW9uSW50ZXJ2YWxzKG1l
cmdlZEludGVydmFscywgZWRnZUludGVydmFscywgZXhjbHVkZWRJbnRlcnZhbHMpOwpAQCAtMzY1
LDE0ICsyNjYsMTQgQEAgdm9pZCBFeGNsdXNpb25Qb2x5Z29uOjpnZXRJbmNsdWRlZEludGVydmFs
cyhmbG9hdCBsb2dpY2FsVG9wLCBmbG9hdCBsb2dpY2FsSGVpZ2gKICAgICBmbG9hdCB5MiA9IHkx
ICsgbG9naWNhbEhlaWdodDsKIAogICAgIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4geTFYSW50
ZXJ2YWxzLCB5MlhJbnRlcnZhbHM7Ci0gICAgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKHkxLCB0cnVl
LCB5MVhJbnRlcnZhbHMpOwotICAgIGNvbXB1dGVYSW50ZXJzZWN0aW9ucyh5MiwgZmFsc2UsIHky
WEludGVydmFscyk7CisgICAgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKG1fcG9seWdvbiwgeTEsIHRy
dWUsIHkxWEludGVydmFscyk7CisgICAgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKG1fcG9seWdvbiwg
eTIsIGZhbHNlLCB5MlhJbnRlcnZhbHMpOwogCiAgICAgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFs
PiBjb21tb25JbnRlcnZhbHM7CiAgICAgaW50ZXJzZWN0RXhjbHVzaW9uSW50ZXJ2YWxzKHkxWElu
dGVydmFscywgeTJYSW50ZXJ2YWxzLCBjb21tb25JbnRlcnZhbHMpOwogCiAgICAgVmVjdG9yPEV4
Y2x1c2lvbkludGVydmFsPiBlZGdlSW50ZXJ2YWxzOwotICAgIGNvbXB1dGVFZGdlSW50ZXJzZWN0
aW9ucyh5MSwgeTIsIGVkZ2VJbnRlcnZhbHMpOworICAgIGNvbXB1dGVPdmVybGFwcGluZ0VkZ2VY
UHJvamVjdGlvbnMobV9wb2x5Z29uLCB5MSwgeTIsIGVkZ2VJbnRlcnZhbHMpOwogCiAgICAgVmVj
dG9yPEV4Y2x1c2lvbkludGVydmFsPiBpbmNsdWRlZEludGVydmFsczsKICAgICBzdWJ0cmFjdEV4
Y2x1c2lvbkludGVydmFscyhjb21tb25JbnRlcnZhbHMsIGVkZ2VJbnRlcnZhbHMsIGluY2x1ZGVk
SW50ZXJ2YWxzKTsKQEAgLTM4Myw5OCArMjg0LDE5IEBAIHZvaWQgRXhjbHVzaW9uUG9seWdvbjo6
Z2V0SW5jbHVkZWRJbnRlcnZhbHMoZmxvYXQgbG9naWNhbFRvcCwgZmxvYXQgbG9naWNhbEhlaWdo
CiAgICAgfQogfQogCi1zdGF0aWMgaW5saW5lIGZsb2F0IGxlZnRTaWRlKGNvbnN0IEZsb2F0UG9p
bnQmIHZlcnRleDEsIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDIsIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50KQotewotICAgIHJldHVybiAoKHBvaW50LngoKSAtIHZlcnRleDEueCgpKSAqICh2ZXJ0
ZXgyLnkoKSAtIHZlcnRleDEueSgpKSkgLSAoKHZlcnRleDIueCgpIC0gdmVydGV4MS54KCkpICog
KHBvaW50LnkoKSAtIHZlcnRleDEueSgpKSk7Ci19Ci0KLWJvb2wgRXhjbHVzaW9uUG9seWdvbjo6
Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2Jv
dW5kaW5nQm94LmNvbnRhaW5zKHBvaW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
aW50IHdpbmRpbmdOdW1iZXIgPSAwOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1i
ZXJPZkVkZ2VzKCk7ICsraSkgewotICAgICAgICBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgxID0g
ZWRnZUF0KGkpLnZlcnRleDEoKTsKLSAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MiA9
IGVkZ2VBdChpKS52ZXJ0ZXgyKCk7Ci0gICAgICAgIGlmIChpc1BvaW50T25MaW5lU2VnbWVudCh2
ZXJ0ZXgxLCB2ZXJ0ZXgyLCBwb2ludCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgaWYgKHZlcnRleDIueSgpIDwgcG9pbnQueSgpKSB7Ci0gICAgICAgICAgICBpZiAoKHZlcnRl
eDEueSgpID4gcG9pbnQueSgpKSAmJiAobGVmdFNpZGUodmVydGV4MSwgdmVydGV4MiwgcG9pbnQp
ID4gMCkpCi0gICAgICAgICAgICAgICAgKyt3aW5kaW5nTnVtYmVyOwotICAgICAgICB9IGVsc2Ug
aWYgKHZlcnRleDIueSgpID4gcG9pbnQueSgpKSB7Ci0gICAgICAgICAgICBpZiAoKHZlcnRleDEu
eSgpIDw9IHBvaW50LnkoKSkgJiYgKGxlZnRTaWRlKHZlcnRleDEsIHZlcnRleDIsIHBvaW50KSA8
IDApKQotICAgICAgICAgICAgICAgIC0td2luZGluZ051bWJlcjsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIHJldHVybiB3aW5kaW5nTnVtYmVyOwotfQotCi1ib29sIFZlcnRleFBhaXI6Om92ZXJs
YXBzUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0Ci17Ci0gICAgYm9vbCBib3VuZHNP
dmVybGFwID0gKG1pblgoKSA8IHJlY3QubWF4WCgpKSAmJiAobWF4WCgpID4gcmVjdC54KCkpICYm
IChtaW5ZKCkgPCByZWN0Lm1heFkoKSkgJiYgKG1heFkoKSA+IHJlY3QueSgpKTsKLSAgICBpZiAo
IWJvdW5kc092ZXJsYXApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZsb2F0IGxlZnRT
aWRlVmFsdWVzWzRdID0gewotICAgICAgICBsZWZ0U2lkZSh2ZXJ0ZXgxKCksIHZlcnRleDIoKSwg
cmVjdC5taW5YTWluWUNvcm5lcigpKSwKLSAgICAgICAgbGVmdFNpZGUodmVydGV4MSgpLCB2ZXJ0
ZXgyKCksIHJlY3QubWF4WE1pbllDb3JuZXIoKSksCi0gICAgICAgIGxlZnRTaWRlKHZlcnRleDEo
KSwgdmVydGV4MigpLCByZWN0Lm1pblhNYXhZQ29ybmVyKCkpLAotICAgICAgICBsZWZ0U2lkZSh2
ZXJ0ZXgxKCksIHZlcnRleDIoKSwgcmVjdC5tYXhYTWF4WUNvcm5lcigpKQotICAgIH07Ci0KLSAg
ICBpbnQgY3VycmVudExlZnRTaWRlU2lnbiA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IDQ7ICsraSkgewotICAgICAgICBpZiAoIWxlZnRTaWRlVmFsdWVzW2ldKQotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIGludCBsZWZ0U2lkZVNpZ24gPSBsZWZ0U2lkZVZhbHVlc1tp
XSA+IDAgPyAxIDogLTE7Ci0gICAgICAgIGlmICghY3VycmVudExlZnRTaWRlU2lnbikKLSAgICAg
ICAgICAgIGN1cnJlbnRMZWZ0U2lkZVNpZ24gPSBsZWZ0U2lkZVNpZ247Ci0gICAgICAgIGVsc2Ug
aWYgKGN1cnJlbnRMZWZ0U2lkZVNpZ24gIT0gbGVmdFNpZGVTaWduKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBzdGF0aWMgaW5saW5l
IGJvb2wgaXNSZWZsZXhWZXJ0ZXgoY29uc3QgRmxvYXRQb2ludCYgcHJldlZlcnRleCwgY29uc3Qg
RmxvYXRQb2ludCYgdmVydGV4LCBjb25zdCBGbG9hdFBvaW50JiBuZXh0VmVydGV4KQogewogICAg
IHJldHVybiBsZWZ0U2lkZShwcmV2VmVydGV4LCBuZXh0VmVydGV4LCB2ZXJ0ZXgpIDwgMDsKIH0K
IAotYm9vbCBWZXJ0ZXhQYWlyOjppbnRlcnNlY3Rpb24oY29uc3QgVmVydGV4UGFpciYgb3RoZXIs
IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAotewotICAgIC8vIFNlZTogaHR0cDovL3BhdWxib3Vy
a2UubmV0L2dlb21ldHJ5L3BvaW50bGluZXBsYW5lLywgIkludGVyc2VjdGlvbiBwb2ludCBvZiB0
d28gbGluZXMgaW4gMiBkaW1lbnNpb25zIgotCi0gICAgY29uc3QgRmxvYXRTaXplJiB0aGlzRGVs
dGEgPSB2ZXJ0ZXgyKCkgLSB2ZXJ0ZXgxKCk7Ci0gICAgY29uc3QgRmxvYXRTaXplJiBvdGhlckRl
bHRhID0gb3RoZXIudmVydGV4MigpIC0gb3RoZXIudmVydGV4MSgpOwotICAgIGZsb2F0IGRlbm9t
aW5hdG9yID0gZGV0ZXJtaW5hbnQodGhpc0RlbHRhLCBvdGhlckRlbHRhKTsKLSAgICBpZiAoIWRl
bm9taW5hdG9yKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBUaGUgdHdvIGxpbmUg
c2VnbWVudHM6ICJ0aGlzIiB2ZXJ0ZXgxLHZlcnRleDIgYW5kICJvdGhlciIgdmVydGV4MSx2ZXJ0
ZXgyLCBoYXZlIGJlZW4gZGVmaW5lZAotICAgIC8vIGluIHBhcmFtZXRyaWMgZm9ybS4gRWFjaCBw
b2ludCBvbiB0aGUgbGluZSBzZWdtZW50IGlzOiB2ZXJ0ZXgxICsgdSAqICh2ZXJ0ZXgyIC0gdmVy
dGV4MSksCi0gICAgLy8gd2hlbiAwIDw9IHUgPD0gMS4gV2UncmUgY29tcHV0aW5nIHRoZSB2YWx1
ZXMgb2YgdSBmb3IgZWFjaCBsaW5lIGF0IHRoZWlyIGludGVyc2VjdGlvbiBwb2ludC4KLQotICAg
IGNvbnN0IEZsb2F0U2l6ZSYgdmVydGV4MURlbHRhID0gdmVydGV4MSgpIC0gb3RoZXIudmVydGV4
MSgpOwotICAgIGZsb2F0IHVUaGlzTGluZSA9IGRldGVybWluYW50KG90aGVyRGVsdGEsIHZlcnRl
eDFEZWx0YSkgLyBkZW5vbWluYXRvcjsKLSAgICBmbG9hdCB1T3RoZXJMaW5lID0gZGV0ZXJtaW5h
bnQodGhpc0RlbHRhLCB2ZXJ0ZXgxRGVsdGEpIC8gZGVub21pbmF0b3I7Ci0KLSAgICBpZiAodVRo
aXNMaW5lIDwgMCB8fCB1T3RoZXJMaW5lIDwgMCB8fCB1VGhpc0xpbmUgPiAxIHx8IHVPdGhlckxp
bmUgPiAxKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBwb2ludCA9IHZlcnRleDEoKSAr
IHVUaGlzTGluZSAqIHRoaXNEZWx0YTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBFeGNs
dXNpb25Qb2x5Z29uOjpmaXJzdEZpdFJlY3RJblBvbHlnb24oY29uc3QgRmxvYXRSZWN0JiByZWN0
LCB1bnNpZ25lZCBvZmZzZXRFZGdlSW5kZXgxLCB1bnNpZ25lZCBvZmZzZXRFZGdlSW5kZXgyKSBj
b25zdAorc3RhdGljIGlubGluZSBib29sIGZpcnN0Rml0UmVjdEluUG9seWdvbihjb25zdCBGbG9h
dFBvbHlnb24mIHBvbHlnb24sIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgdW5zaWduZWQgb2Zmc2V0
RWRnZUluZGV4MSwgdW5zaWduZWQgb2Zmc2V0RWRnZUluZGV4MikKIHsKLSAgICBWZWN0b3I8RXhj
bHVzaW9uUG9seWdvbjo6RWRnZUludGVydmFsPiBvdmVybGFwcGluZ0VkZ2VzOwotICAgIG1fZWRn
ZVRyZWUuYWxsT3ZlcmxhcHMoRXhjbHVzaW9uUG9seWdvbjo6RWRnZUludGVydmFsKHJlY3QueSgp
LCByZWN0Lm1heFkoKSwgMCksIG92ZXJsYXBwaW5nRWRnZXMpOworICAgIFZlY3Rvcjxjb25zdCBG
bG9hdFBvbHlnb25FZGdlKj4gZWRnZXM7CisgICAgaWYgKCFwb2x5Z29uLm92ZXJsYXBwaW5nRWRn
ZXMocmVjdC55KCksIHJlY3QubWF4WSgpLCBlZGdlcykpCisgICAgICAgIHJldHVybiB0cnVlOwog
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG92ZXJsYXBwaW5nRWRnZXMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgY29uc3QgRXhjbHVzaW9uUG9seWdvbkVkZ2UqIGVkZ2UgPSBzdGF0aWNf
Y2FzdDxFeGNsdXNpb25Qb2x5Z29uRWRnZSo+KG92ZXJsYXBwaW5nRWRnZXNbaV0uZGF0YSgpKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWRnZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSogZWRnZSA9IGVkZ2VzW2ldOwogICAgICAgICBpZiAo
ZWRnZS0+ZWRnZUluZGV4KCkgIT0gb2Zmc2V0RWRnZUluZGV4MSAmJiBlZGdlLT5lZGdlSW5kZXgo
KSAhPSBvZmZzZXRFZGdlSW5kZXgyICYmIGVkZ2UtPm92ZXJsYXBzUmVjdChyZWN0KSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC00OTMsMjQgKzMxNSwyNSBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgYWJvdmVPclRvVGhlTGVmdChjb25zdCBGbG9hdFJlY3QmIHIxLCBjb25zdCBG
bG9hdFJlY3QmIHIyKQogCiBib29sIEV4Y2x1c2lvblBvbHlnb246OmZpcnN0SW5jbHVkZWRJbnRl
cnZhbExvZ2ljYWxUb3AoZmxvYXQgbWluTG9naWNhbEludGVydmFsVG9wLCBjb25zdCBGbG9hdFNp
emUmIG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUsIGZsb2F0JiByZXN1bHQpIGNvbnN0CiB7Ci0gICAg
aWYgKG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUud2lkdGgoKSA+IG1fYm91bmRpbmdCb3gud2lkdGgo
KSkKKyAgICBjb25zdCBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSBtX3BvbHlnb24uYm91bmRpbmdC
b3goKTsKKyAgICBpZiAobWluTG9naWNhbEludGVydmFsU2l6ZS53aWR0aCgpID4gYm91bmRpbmdC
b3gud2lkdGgoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZmxvYXQgbWluWSA9IHN0
ZDo6bWF4KG1fYm91bmRpbmdCb3gueSgpLCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3ApOworICAgIGZs
b2F0IG1pblkgPSBzdGQ6Om1heChib3VuZGluZ0JveC55KCksIG1pbkxvZ2ljYWxJbnRlcnZhbFRv
cCk7CiAgICAgZmxvYXQgbWF4WSA9IG1pblkgKyBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplLmhlaWdo
dCgpOwogCi0gICAgaWYgKG1heFkgPiBtX2JvdW5kaW5nQm94Lm1heFkoKSkKKyAgICBpZiAobWF4
WSA+IGJvdW5kaW5nQm94Lm1heFkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgVmVj
dG9yPEV4Y2x1c2lvblBvbHlnb246OkVkZ2VJbnRlcnZhbD4gb3ZlcmxhcHBpbmdFZGdlczsKLSAg
ICBtX2VkZ2VUcmVlLmFsbE92ZXJsYXBzKEV4Y2x1c2lvblBvbHlnb246OkVkZ2VJbnRlcnZhbCht
aW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIG1fYm91bmRpbmdCb3gubWF4WSgpLCAwKSwgb3ZlcmxhcHBp
bmdFZGdlcyk7CisgICAgVmVjdG9yPGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UqPiBlZGdlczsKKyAg
ICBtX3BvbHlnb24ub3ZlcmxhcHBpbmdFZGdlcyhtaW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIGJvdW5k
aW5nQm94Lm1heFkoKSwgZWRnZXMpOwogCiAgICAgZmxvYXQgZHggPSBtaW5Mb2dpY2FsSW50ZXJ2
YWxTaXplLndpZHRoKCkgLyAyOwogICAgIGZsb2F0IGR5ID0gbWluTG9naWNhbEludGVydmFsU2l6
ZS5oZWlnaHQoKSAvIDI7CiAgICAgVmVjdG9yPE9mZnNldFBvbHlnb25FZGdlPiBvZmZzZXRFZGdl
czsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvdmVybGFwcGluZ0VkZ2VzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEV4Y2x1c2lvblBvbHlnb25FZGdlJiBlZGdlID0gKnN0
YXRpY19jYXN0PEV4Y2x1c2lvblBvbHlnb25FZGdlKj4ob3ZlcmxhcHBpbmdFZGdlc1tpXS5kYXRh
KCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlZGdlcy5zaXplKCk7ICsraSkgewor
ICAgICAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdlJiBlZGdlID0gKihlZGdlc1tpXSk7CiAgICAg
ICAgIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDAgPSBlZGdlLnByZXZpb3VzRWRnZSgpLnZlcnRl
eDEoKTsKICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MSA9IGVkZ2UudmVydGV4MSgp
OwogICAgICAgICBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgyID0gZWRnZS52ZXJ0ZXgyKCk7CkBA
IC01NDAsNyArMzYzLDcgQEAgYm9vbCBFeGNsdXNpb25Qb2x5Z29uOjpmaXJzdEluY2x1ZGVkSW50
ZXJ2YWxMb2dpY2FsVG9wKGZsb2F0IG1pbkxvZ2ljYWxJbnRlcnZhbFQKICAgICAgICAgICAgICAg
ICBvZmZzZXRFZGdlcy5hcHBlbmQob2Zmc2V0RWRnZUJ1ZmZlcltqXSk7CiAgICAgfQogCi0gICAg
b2Zmc2V0RWRnZXMuYXBwZW5kKE9mZnNldFBvbHlnb25FZGdlKCp0aGlzLCBtaW5Mb2dpY2FsSW50
ZXJ2YWxUb3AsIEZsb2F0U2l6ZSgwLCBkeSkpKTsKKyAgICBvZmZzZXRFZGdlcy5hcHBlbmQoT2Zm
c2V0UG9seWdvbkVkZ2UobV9wb2x5Z29uLCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIEZsb2F0U2l6
ZSgwLCBkeSkpKTsKIAogICAgIEZsb2F0UG9pbnQgb2Zmc2V0RWRnZXNJbnRlcnNlY3Rpb247CiAg
ICAgRmxvYXRSZWN0IGZpcnN0Rml0UmVjdDsKQEAgLTU1Myw4ICszNzYsOCBAQCBib29sIEV4Y2x1
c2lvblBvbHlnb246OmZpcnN0SW5jbHVkZWRJbnRlcnZhbExvZ2ljYWxUb3AoZmxvYXQgbWluTG9n
aWNhbEludGVydmFsVAogICAgICAgICAgICAgICAgIEZsb2F0UmVjdCBwb3RlbnRpYWxGaXJzdEZp
dFJlY3QocG90ZW50aWFsRmlyc3RGaXRMb2NhdGlvbiwgbWluTG9naWNhbEludGVydmFsU2l6ZSk7
CiAgICAgICAgICAgICAgICAgaWYgKChwb3RlbnRpYWxGaXJzdEZpdExvY2F0aW9uLnkoKSA+PSBt
aW5Mb2dpY2FsSW50ZXJ2YWxUb3ApCiAgICAgICAgICAgICAgICAgICAgICYmICghZmlyc3RGaXRG
b3VuZCB8fCBhYm92ZU9yVG9UaGVMZWZ0KHBvdGVudGlhbEZpcnN0Rml0UmVjdCwgZmlyc3RGaXRS
ZWN0KSkKLSAgICAgICAgICAgICAgICAgICAgJiYgY29udGFpbnMob2Zmc2V0RWRnZXNJbnRlcnNl
Y3Rpb24pCi0gICAgICAgICAgICAgICAgICAgICYmIGZpcnN0Rml0UmVjdEluUG9seWdvbihwb3Rl
bnRpYWxGaXJzdEZpdFJlY3QsIG9mZnNldEVkZ2VzW2ldLmVkZ2VJbmRleCgpLCBvZmZzZXRFZGdl
c1tqXS5lZGdlSW5kZXgoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgJiYgbV9wb2x5Z29uLmNv
bnRhaW5zKG9mZnNldEVkZ2VzSW50ZXJzZWN0aW9uKQorICAgICAgICAgICAgICAgICAgICAmJiBm
aXJzdEZpdFJlY3RJblBvbHlnb24obV9wb2x5Z29uLCBwb3RlbnRpYWxGaXJzdEZpdFJlY3QsIG9m
ZnNldEVkZ2VzW2ldLmVkZ2VJbmRleCgpLCBvZmZzZXRFZGdlc1tqXS5lZGdlSW5kZXgoKSkpIHsK
ICAgICAgICAgICAgICAgICAgICAgZmlyc3RGaXRGb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgICAgIGZpcnN0Rml0UmVjdCA9IHBvdGVudGlhbEZpcnN0Rml0UmVjdDsKICAgICAgICAgICAg
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9s
eWdvbi5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uaAppbmRl
eCA2MmUxOTcxLi5kNDRhNmE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
RXhjbHVzaW9uUG9seWdvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNp
b25Qb2x5Z29uLmgKQEAgLTMzLDEzMiArMzMsMTggQEAKICNpbmNsdWRlICJFeGNsdXNpb25JbnRl
cnZhbC5oIgogI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlLmgiCiAjaW5jbHVkZSAiRmxvYXRQb2lu
dC5oIgorI2luY2x1ZGUgIkZsb2F0UG9seWdvbi5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgot
I2luY2x1ZGUgIlBPREludGVydmFsVHJlZS5oIgogI2luY2x1ZGUgIldpbmRSdWxlLmgiCi0jaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotY2xhc3MgRXhjbHVzaW9uUG9seWdvbkVkZ2U7Ci0KLS8vIFRoaXMgY2xh
c3MgaXMgdXNlZCBieSBQT0RJbnRlcnZhbFRyZWUgZm9yIGRlYnVnZ2luZy4KLSNpZm5kZWYgTkRF
QlVHCi10ZW1wbGF0ZSA8Y2xhc3M+IHN0cnVjdCBWYWx1ZVRvU3RyaW5nOwotI2VuZGlmCi0KLWNs
YXNzIEV4Y2x1c2lvblBvbHlnb24gOiBwdWJsaWMgRXhjbHVzaW9uU2hhcGUgewotICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEV4Y2x1c2lvblBvbHlnb24pOwotcHVibGljOgotICAgIEV4Y2x1c2lv
blBvbHlnb24oUGFzc093blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiB2ZXJ0aWNlcywgV2luZFJ1
bGUgZmlsbFJ1bGUpOwotCi0gICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4QXQodW5zaWduZWQg
aW5kZXgpIGNvbnN0IHsgcmV0dXJuICgqbV92ZXJ0aWNlcylbaW5kZXhdOyB9Ci0gICAgdW5zaWdu
ZWQgbnVtYmVyT2ZWZXJ0aWNlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGljZXMtPnNpemUoKTsg
fQotICAgIFdpbmRSdWxlIGZpbGxSdWxlKCkgY29uc3QgeyByZXR1cm4gbV9maWxsUnVsZTsgfQot
Ci0gICAgY29uc3QgRXhjbHVzaW9uUG9seWdvbkVkZ2UmIGVkZ2VBdCh1bnNpZ25lZCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbV9lZGdlc1tpbmRleF07IH0KLSAgICB1bnNpZ25lZCBudW1iZXJPZkVk
Z2VzKCkgY29uc3QgeyByZXR1cm4gbV9lZGdlcy5zaXplKCk7IH0KLQotICAgIGJvb2wgY29udGFp
bnMoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwotCi0gICAgdmlydHVhbCBGbG9hdFJlY3Qgc2hh
cGVMb2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2JvdW5kaW5n
Qm94OyB9Ci0gICAgdmlydHVhbCBib29sIGlzRW1wdHkoKSBjb25zdCBPVkVSUklERSB7IHJldHVy
biBtX2VtcHR5OyB9Ci0gICAgdmlydHVhbCB2b2lkIGdldEV4Y2x1ZGVkSW50ZXJ2YWxzKGZsb2F0
IGxvZ2ljYWxUb3AsIGZsb2F0IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0JikgY29uc3QgT1ZF
UlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGdldEluY2x1ZGVkSW50ZXJ2YWxzKGZsb2F0IGxvZ2lj
YWxUb3AsIGZsb2F0IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0JikgY29uc3QgT1ZFUlJJREU7
Ci0gICAgdmlydHVhbCBib29sIGZpcnN0SW5jbHVkZWRJbnRlcnZhbExvZ2ljYWxUb3AoZmxvYXQg
bWluTG9naWNhbEludGVydmFsVG9wLCBjb25zdCBGbG9hdFNpemUmIG1pbkxvZ2ljYWxJbnRlcnZh
bFNpemUsIGZsb2F0JikgY29uc3QgT1ZFUlJJREU7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBjb21w
dXRlWEludGVyc2VjdGlvbnMoZmxvYXQgeSwgYm9vbCBpc01pblksIFZlY3RvcjxFeGNsdXNpb25J
bnRlcnZhbD4mKSBjb25zdDsKLSAgICB2b2lkIGNvbXB1dGVFZGdlSW50ZXJzZWN0aW9ucyhmbG9h
dCBtaW5ZLCBmbG9hdCBtYXhZLCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JikgY29uc3Q7Ci0g
ICAgdW5zaWduZWQgZmluZE5leHRFZGdlVmVydGV4SW5kZXgodW5zaWduZWQgdmVydGV4SW5kZXgx
LCBib29sIGNsb2Nrd2lzZSkgY29uc3Q7Ci0gICAgYm9vbCBmaXJzdEZpdFJlY3RJblBvbHlnb24o
Y29uc3QgRmxvYXRSZWN0JiwgdW5zaWduZWQgb2Zmc2V0RWRnZUluZGV4MSwgdW5zaWduZWQgb2Zm
c2V0RWRnZUluZGV4KSBjb25zdDsKLQotICAgIHR5cGVkZWYgUE9ESW50ZXJ2YWw8ZmxvYXQsIEV4
Y2x1c2lvblBvbHlnb25FZGdlKj4gRWRnZUludGVydmFsOwotICAgIHR5cGVkZWYgUE9ESW50ZXJ2
YWxUcmVlPGZsb2F0LCBFeGNsdXNpb25Qb2x5Z29uRWRnZSo+IEVkZ2VJbnRlcnZhbFRyZWU7Ci0K
LSAgICBPd25QdHI8VmVjdG9yPEZsb2F0UG9pbnQ+ID4gbV92ZXJ0aWNlczsKLSAgICBXaW5kUnVs
ZSBtX2ZpbGxSdWxlOwotICAgIEZsb2F0UmVjdCBtX2JvdW5kaW5nQm94OwotICAgIFZlY3RvcjxF
eGNsdXNpb25Qb2x5Z29uRWRnZT4gbV9lZGdlczsKLSAgICBFZGdlSW50ZXJ2YWxUcmVlIG1fZWRn
ZVRyZWU7Ci0gICAgYm9vbCBtX2VtcHR5OwotfTsKLQotY2xhc3MgVmVydGV4UGFpciB7Ci1wdWJs
aWM6Ci0gICAgdmlydHVhbCB+VmVydGV4UGFpcigpIHsgfQotCi0gICAgdmlydHVhbCBjb25zdCBG
bG9hdFBvaW50JiB2ZXJ0ZXgxKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgY29uc3QgRmxvYXRQ
b2ludCYgdmVydGV4MigpIGNvbnN0ID0gMDsKLQotICAgIGZsb2F0IG1pblgoKSBjb25zdCB7IHJl
dHVybiBzdGQ6Om1pbih2ZXJ0ZXgxKCkueCgpLCB2ZXJ0ZXgyKCkueCgpKTsgfQotICAgIGZsb2F0
IG1pblkoKSBjb25zdCB7IHJldHVybiBzdGQ6Om1pbih2ZXJ0ZXgxKCkueSgpLCB2ZXJ0ZXgyKCku
eSgpKTsgfQotICAgIGZsb2F0IG1heFgoKSBjb25zdCB7IHJldHVybiBzdGQ6Om1heCh2ZXJ0ZXgx
KCkueCgpLCB2ZXJ0ZXgyKCkueCgpKTsgfQotICAgIGZsb2F0IG1heFkoKSBjb25zdCB7IHJldHVy
biBzdGQ6Om1heCh2ZXJ0ZXgxKCkueSgpLCB2ZXJ0ZXgyKCkueSgpKTsgfQotCi0gICAgYm9vbCBv
dmVybGFwc1JlY3QoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7Ci0gICAgYm9vbCBpbnRlcnNlY3Rp
b24oY29uc3QgVmVydGV4UGFpciYsIEZsb2F0UG9pbnQmKSBjb25zdDsKLX07Ci0KLS8vIEVkZ2VJ
bnRlcnZhbFRyZWUgbm9kZXMgc3RvcmUgbWluWSwgbWF4WSwgYW5kIGEgKCJVc2VyRGF0YSIpIHBv
aW50ZXIgdG8gYW4gRXhjbHVzaW9uUG9seWdvbkVkZ2UuIEVkZ2UgdmVydGV4Ci0vLyBpbmRleDEg
aXMgbGVzcyB0aGFuIGluZGV4MiwgZXhjZXB0IHRoZSBsYXN0IGVkZ2UsIHdoZXJlIGluZGV4MiBp
cyAwLiBXaGVuIGEgcG9seWdvbiBlZGdlIGlzIGRlZmluZWQgYnkgMwotLy8gb3IgbW9yZSBjb2xp
bmVhciB2ZXJ0aWNlcywgaW5kZXgyIGNhbiBiZSB0aGUgdGhlIGluZGV4IG9mIHRoZSBsYXN0IGNv
bGluZWFyIHZlcnRleC4KLWNsYXNzIEV4Y2x1c2lvblBvbHlnb25FZGdlIDogcHVibGljIFZlcnRl
eFBhaXIgewotICAgIGZyaWVuZCBjbGFzcyBFeGNsdXNpb25Qb2x5Z29uOwotcHVibGljOgotICAg
IHZpcnR1YWwgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MSgpIGNvbnN0IE9WRVJSSURFCi0gICAg
ewotICAgICAgICBBU1NFUlQobV9wb2x5Z29uKTsKLSAgICAgICAgcmV0dXJuIG1fcG9seWdvbi0+
dmVydGV4QXQobV92ZXJ0ZXhJbmRleDEpOwotICAgIH0KLQotICAgIHZpcnR1YWwgY29uc3QgRmxv
YXRQb2ludCYgdmVydGV4MigpIGNvbnN0IE9WRVJSSURFCi0gICAgewotICAgICAgICBBU1NFUlQo
bV9wb2x5Z29uKTsKLSAgICAgICAgcmV0dXJuIG1fcG9seWdvbi0+dmVydGV4QXQobV92ZXJ0ZXhJ
bmRleDIpOwotICAgIH0KLQotICAgIGNvbnN0IEV4Y2x1c2lvblBvbHlnb25FZGdlJiBwcmV2aW91
c0VkZ2UoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fcG9seWdvbiAmJiBtX3BvbHln
b24tPm51bWJlck9mRWRnZXMoKSA+IDEpOwotICAgICAgICByZXR1cm4gbV9wb2x5Z29uLT5lZGdl
QXQoKG1fZWRnZUluZGV4ICsgbV9wb2x5Z29uLT5udW1iZXJPZkVkZ2VzKCkgLSAxKSAlIG1fcG9s
eWdvbi0+bnVtYmVyT2ZFZGdlcygpKTsKLSAgICB9Ci0KLSAgICBjb25zdCBFeGNsdXNpb25Qb2x5
Z29uRWRnZSYgbmV4dEVkZ2UoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fcG9seWdv
biAmJiBtX3BvbHlnb24tPm51bWJlck9mRWRnZXMoKSA+IDEpOwotICAgICAgICByZXR1cm4gbV9w
b2x5Z29uLT5lZGdlQXQoKG1fZWRnZUluZGV4ICsgMSkgJSBtX3BvbHlnb24tPm51bWJlck9mRWRn
ZXMoKSk7Ci0gICAgfQotCi0gICAgY29uc3QgRXhjbHVzaW9uUG9seWdvbiogcG9seWdvbigpIGNv
bnN0IHsgcmV0dXJuIG1fcG9seWdvbjsgfQotICAgIHVuc2lnbmVkIHZlcnRleEluZGV4MSgpIGNv
bnN0IHsgcmV0dXJuIG1fdmVydGV4SW5kZXgxOyB9Ci0gICAgdW5zaWduZWQgdmVydGV4SW5kZXgy
KCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0ZXhJbmRleDI7IH0KLSAgICB1bnNpZ25lZCBlZGdlSW5k
ZXgoKSBjb25zdCB7IHJldHVybiBtX2VkZ2VJbmRleDsgfQotCi1wcml2YXRlOgotICAgIGNvbnN0
IEV4Y2x1c2lvblBvbHlnb24qIG1fcG9seWdvbjsKLSAgICB1bnNpZ25lZCBtX3ZlcnRleEluZGV4
MTsKLSAgICB1bnNpZ25lZCBtX3ZlcnRleEluZGV4MjsKLSAgICB1bnNpZ25lZCBtX2VkZ2VJbmRl
eDsKLX07Ci0KLS8vIFRoZXNlIHN0cnVjdHVyZXMgYXJlIHVzZWQgYnkgUE9ESW50ZXJ2YWxUcmVl
IGZvciBkZWJ1Z2dpbmcuMQotI2lmbmRlZiBOREVCVUcKLXRlbXBsYXRlIDw+IHN0cnVjdCBWYWx1
ZVRvU3RyaW5nPGZsb2F0PiB7Ci0gICAgc3RhdGljIFN0cmluZyBzdHJpbmcoY29uc3QgZmxvYXQg
dmFsdWUpIHsgcmV0dXJuIFN0cmluZzo6bnVtYmVyKHZhbHVlKTsgfQotfTsKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgVmFsdWVUb1N0cmluZzxFeGNsdXNpb25Qb2x5Z29uRWRnZSo+IHsKLSAgICBzdGF0
aWMgU3RyaW5nIHN0cmluZyhjb25zdCBFeGNsdXNpb25Qb2x5Z29uRWRnZSogZWRnZSkgeyByZXR1
cm4gU3RyaW5nOjpmb3JtYXQoIiVwICglZiwlZiAlZiwlZikiLCBlZGdlLCBlZGdlLT52ZXJ0ZXgx
KCkueCgpLCBlZGdlLT52ZXJ0ZXgxKCkueSgpLCBlZGdlLT52ZXJ0ZXgyKCkueCgpLCBlZGdlLT52
ZXJ0ZXgyKCkueSgpKTsgfQotfTsKLSNlbmRpZgotCiBjbGFzcyBPZmZzZXRQb2x5Z29uRWRnZSA6
IHB1YmxpYyBWZXJ0ZXhQYWlyIHsKIHB1YmxpYzoKLSAgICBPZmZzZXRQb2x5Z29uRWRnZShjb25z
dCBFeGNsdXNpb25Qb2x5Z29uRWRnZSYgZWRnZSwgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQpCisg
ICAgT2Zmc2V0UG9seWdvbkVkZ2UoY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgZWRnZSwgY29uc3Qg
RmxvYXRTaXplJiBvZmZzZXQpCiAgICAgICAgIDogbV92ZXJ0ZXgxKGVkZ2UudmVydGV4MSgpICsg
b2Zmc2V0KQogICAgICAgICAsIG1fdmVydGV4MihlZGdlLnZlcnRleDIoKSArIG9mZnNldCkKICAg
ICAgICAgLCBtX2VkZ2VJbmRleChlZGdlLmVkZ2VJbmRleCgpKQpAQCAtMTcyLDkgKzU4LDkgQEAg
cHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBPZmZzZXRQb2x5Z29uRWRnZShjb25zdCBFeGNs
dXNpb25Qb2x5Z29uJiBwb2x5Z29uLCBmbG9hdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIGNvbnN0
IEZsb2F0U2l6ZSYgb2Zmc2V0KQotICAgICAgICA6IG1fdmVydGV4MShGbG9hdFBvaW50KHBvbHln
b24uc2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKS54KCksIG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCkg
KyBvZmZzZXQpCi0gICAgICAgICwgbV92ZXJ0ZXgyKEZsb2F0UG9pbnQocG9seWdvbi5zaGFwZUxv
Z2ljYWxCb3VuZGluZ0JveCgpLm1heFgoKSwgbWluTG9naWNhbEludGVydmFsVG9wKSArIG9mZnNl
dCkKKyAgICBPZmZzZXRQb2x5Z29uRWRnZShjb25zdCBGbG9hdFBvbHlnb24mIHBvbHlnb24sIGZs
b2F0IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQpCisgICAg
ICAgIDogbV92ZXJ0ZXgxKEZsb2F0UG9pbnQocG9seWdvbi5ib3VuZGluZ0JveCgpLngoKSwgbWlu
TG9naWNhbEludGVydmFsVG9wKSArIG9mZnNldCkKKyAgICAgICAgLCBtX3ZlcnRleDIoRmxvYXRQ
b2ludChwb2x5Z29uLmJvdW5kaW5nQm94KCkubWF4WCgpLCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3Ap
ICsgb2Zmc2V0KQogICAgICAgICAsIG1fZWRnZUluZGV4KC0xKQogICAgIHsKICAgICB9CkBAIC0x
ODksNiArNzUsMjUgQEAgcHJpdmF0ZToKICAgICBpbnQgbV9lZGdlSW5kZXg7CiB9OwogCitjbGFz
cyBFeGNsdXNpb25Qb2x5Z29uIDogcHVibGljIEV4Y2x1c2lvblNoYXBlIHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShFeGNsdXNpb25Qb2x5Z29uKTsKK3B1YmxpYzoKKyAgICBFeGNsdXNpb25Q
b2x5Z29uKFBhc3NPd25QdHI8VmVjdG9yPEZsb2F0UG9pbnQ+ID4gdmVydGljZXMsIFdpbmRSdWxl
IGZpbGxSdWxlKQorICAgICAgICA6IEV4Y2x1c2lvblNoYXBlKCkKKyAgICAgICAgLCBtX3BvbHln
b24odmVydGljZXMsIGZpbGxSdWxlKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIEZsb2F0
UmVjdCBzaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1f
cG9seWdvbi5ib3VuZGluZ0JveCgpOyB9CisgICAgdmlydHVhbCBib29sIGlzRW1wdHkoKSBjb25z
dCBPVkVSUklERSB7IHJldHVybiBtX3BvbHlnb24uaXNFbXB0eSgpOyB9CisgICAgdmlydHVhbCB2
b2lkIGdldEV4Y2x1ZGVkSW50ZXJ2YWxzKGZsb2F0IGxvZ2ljYWxUb3AsIGZsb2F0IGxvZ2ljYWxI
ZWlnaHQsIFNlZ21lbnRMaXN0JikgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGdl
dEluY2x1ZGVkSW50ZXJ2YWxzKGZsb2F0IGxvZ2ljYWxUb3AsIGZsb2F0IGxvZ2ljYWxIZWlnaHQs
IFNlZ21lbnRMaXN0JikgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGZpcnN0SW5j
bHVkZWRJbnRlcnZhbExvZ2ljYWxUb3AoZmxvYXQgbWluTG9naWNhbEludGVydmFsVG9wLCBjb25z
dCBGbG9hdFNpemUmIG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUsIGZsb2F0JikgY29uc3QgT1ZFUlJJ
REU7CisKK3ByaXZhdGU6CisgICAgRmxvYXRQb2x5Z29uIG1fcG9seWdvbjsKK307CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEV4Y2x1c2lvblBvbHlnb25faAo=
</data>
<flag name="commit-queue"
          id="213471"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192275</attachid>
            <date>2013-03-08 12:45:29 -0800</date>
            <delta_ts>2013-03-08 14:37:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>tmp.patch</filename>
            <type>text/plain</type>
            <size>53293</size>
            <attacher name="Hans Muller">giles_joplin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZGU1OGEyYS4uNGIxZmViMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTE5MjAsNiArMTkyMCw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFBvaW50LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQz
RC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvbHlnb24uY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVj
dC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
Y2Y0YjVjZi4uNjJlNWMzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDczIEBACisyMDEzLTAzLTA4
ICBIYW5zIE11bGxlciAgPGhtdWxsZXJAYWRvYmUuY29tPgorCisgICAgICAgIFtDU1MgRXhjbHVz
aW9uc10gUmVmYWN0b3IgdGhlIEV4Y2x1c2lvblBvbHlnb24gY2xhc3MgdG8gZW5hYmxlIHN0b3Jp
bmcgbXVsdGlwbGUgYm91bmRhcmllcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTExNzY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgUmVmYWN0b3JlZCB0aGUgRXhjbHVzaW9uUG9seWdvbiBjbGFzcyB0byBl
bmFibGUgYWRkaW5nIHN1cHBvcnQgZm9yIHNoYXBlLW1hcmdpbiBhbmQgc2hhcGUtcGFkZGluZy4K
KyAgICAgICAgRXh0cmFjdGVkIGEgbmV3IEZsb2F0UG9seWdvbiBjbGFzcyB3aGljaCBpcyBub3cg
dXNlZCBieSBFeGNsdXNpb25Qb2x5Z29uIHRvIHJlcHJlc2VudCB0aGUgc2hhcGUncworICAgICAg
ICBib3VuZGFyeS4gSXQgd2lsbCBiZSB1c2VkIHRvIGFkZCBtX3BhZGRlZFBvbHlnb24gYW5kIG1f
bWFyZ2luUG9seWdvbiBtZW1iZXJzIHRvIEV4Y2x1c2lvblBvbHlnb24KKyAgICAgICAgaW4gYSBz
dWJzZXF1ZW50IHBhdGNoLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyBpcyBzdHJpY3Rs
eSBhIHJlZmFjdG9yaW5nIG9mIHRoZSBleGlzdGluZyBjb2RlLgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJD
b3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UG9seWdvbi5jcHA6IEZhY3RvcmVkIG91dCBvZiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHAuCisgICAgICAgIChXZWJDb3JlOjpk
ZXRlcm1pbmFudCk6CisgICAgICAgIChXZWJDb3JlOjphcmVDb2xsaW5lYXJQb2ludHMpOgorICAg
ICAgICAoV2ViQ29yZTo6YXJlQ29pbmNpZGVudFBvaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpp
c1BvaW50T25MaW5lU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpuZXh0VmVydGV4SW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2x5Z29uOjpGbG9hdFBvbHlnb24pOgorICAgICAg
ICAoV2ViQ29yZTo6RmxvYXRQb2x5Z29uOjpmaW5kTmV4dEVkZ2VWZXJ0ZXhJbmRleCk6CisgICAg
ICAgIChXZWJDb3JlOjpGbG9hdFBvbHlnb246Om92ZXJsYXBwaW5nRWRnZXMpOgorICAgICAgICAo
V2ViQ29yZTo6bGVmdFNpZGUpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2x5Z29uOjpjb250
YWlucyk6CisgICAgICAgIChXZWJDb3JlOjpWZXJ0ZXhQYWlyOjpvdmVybGFwc1JlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6VmVydGV4UGFpcjo6aW50ZXJzZWN0aW9uKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFBvbHlnb24uaDogRmFjdG9yZWQgb3V0IG9mIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmguCisgICAgICAgIChGbG9hdFBvbHlnb24p
OgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2x5Z29uOjp2ZXJ0ZXhBdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGbG9hdFBvbHlnb246Om51bWJlck9mVmVydGljZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6RmxvYXRQb2x5Z29uOjpmaWxsUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFBvbHln
b246OmVkZ2VBdCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFBvbHlnb246Om51bWJlck9mRWRn
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2x5Z29uOjpib3VuZGluZ0JveCk6CisgICAg
ICAgIChXZWJDb3JlOjpGbG9hdFBvbHlnb246OmlzRW1wdHkpOgorICAgICAgICAoVmVydGV4UGFp
cik6CisgICAgICAgIChXZWJDb3JlOjpWZXJ0ZXhQYWlyOjp+VmVydGV4UGFpcik6CisgICAgICAg
IChXZWJDb3JlOjpWZXJ0ZXhQYWlyOjptaW5YKToKKyAgICAgICAgKFdlYkNvcmU6OlZlcnRleFBh
aXI6Om1pblkpOgorICAgICAgICAoV2ViQ29yZTo6VmVydGV4UGFpcjo6bWF4WCk6CisgICAgICAg
IChXZWJDb3JlOjpWZXJ0ZXhQYWlyOjptYXhZKToKKyAgICAgICAgKEZsb2F0UG9seWdvbkVkZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2x5Z29uRWRnZTo6cHJldmlvdXNFZGdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZsb2F0UG9seWdvbkVkZ2U6Om5leHRFZGdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZsb2F0UG9seWdvbkVkZ2U6OnBvbHlnb24pOgorICAgICAgICAoV2ViQ29yZTo6Rmxv
YXRQb2x5Z29uRWRnZTo6dmVydGV4SW5kZXgxKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UG9s
eWdvbkVkZ2U6OnZlcnRleEluZGV4Mik6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFBvbHlnb25F
ZGdlOjplZGdlSW5kZXgpOgorICAgICAgICAqIHJlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNw
cDogTm93IGRlcGVuZHMgb24gRmxvYXRQb2x5Z29uLgorICAgICAgICAoRWRnZUludGVyc2VjdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpsZWZ0U2lkZSk6CisgICAgICAgIChXZWJDb3JlOjpjb21w
dXRlWEludGVyc2VjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpnZXRWZXJ0ZXhJbnRlcnNlY3Rp
b25WZXJ0aWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlWEludGVyc2VjdGlvbnMpOgor
ICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZU92ZXJsYXBwaW5nRWRnZVhQcm9qZWN0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpFeGNsdXNpb25Qb2x5Z29uOjpnZXRFeGNsdWRlZEludGVydmFscyk6
CisgICAgICAgIChXZWJDb3JlOjpFeGNsdXNpb25Qb2x5Z29uOjpnZXRJbmNsdWRlZEludGVydmFs
cyk6CisgICAgICAgIChXZWJDb3JlOjpmaXJzdEZpdFJlY3RJblBvbHlnb24pOgorICAgICAgICAo
V2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbjo6Zmlyc3RJbmNsdWRlZEludGVydmFsTG9naWNhbFRv
cCk6CisgICAgICAgICogcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uaDogTm93IGRlcGVuZHMg
b24gRmxvYXRQb2x5Z29uLgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2V0UG9seWdvbkVkZ2U6Ok9m
ZnNldFBvbHlnb25FZGdlKToKKyAgICAgICAgKEV4Y2x1c2lvblBvbHlnb24pOgorICAgICAgICAo
V2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbjo6RXhjbHVzaW9uUG9seWdvbik6CisKIDIwMTMtMDMt
MDcgIEVtaWwgQSBFa2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtzdWItcGl4
ZWxdIFJvdW5kaW5nIGVycm9yIGluIHRhYmxlIGNlbGwgaGVpZ2h0IGNhbGN1bGF0aW9uIGNhdXNl
cyB1bm5lY2Vzc2FyeSBzY3JvbGxiYXIKQEAgLTEyMTMsNiArMTI4Myw0OCBAQAogICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwOgogICAgICAgICAoV2ViQ29yZTo6Rm9ybURh
dGE6OmFwcGVuZEtleVZhbHVlUGFpckl0ZW1zKToKIAorMjAxMy0wMy0wNyAgSGFucyBNdWxsZXIg
IDxobXVsbGVyQGFkb2JlLmNvbT4KKworICAgICAgICBbQ1NTIEV4Y2x1c2lvbnNdIFJlZmFjdG9y
IHRoZSBFeGNsdXNpb25Qb2x5Z29uIGNsYXNzIHRvIGVuYWJsZSBzdG9yaW5nIG11bHRpcGxlIGJv
dW5kYXJpZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTExMTc2NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFJlZmFjdG9yZWQgdGhlIEV4Y2x1c2lvblBvbHlnb24gY2xhc3MgdG8gZW5hYmxlIGFkZGluZyBz
dXBwb3J0IGZvciBzaGFwZS1tYXJnaW4gYW5kIHNoYXBlLXBhZGRpbmcuCisgICAgICAgIEV4dHJh
Y3RlZCBhIG5ldyBGbG9hdFBvbHlnb24gY2xhc3Mgd2hpY2ggaXMgbm93IHVzZWQgYnkgRXhjbHVz
aW9uUG9seWdvbiB0byByZXByZXNlbnQgdGhlIHNoYXBlJ3MKKyAgICAgICAgYm91bmRhcnkuIEl0
IHdpbGwgYmUgdXNlZCB0byBhZGQgbV9wYWRkZWRQb2x5Z29uIGFuZCBtX21hcmdpblBvbHlnb24g
bWVtYmVycyB0byBFeGNsdXNpb25Qb2x5Z29uCisgICAgICAgIGluIGEgc3Vic2VxdWVudCBwYXRj
aC4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgaXMgc3RyaWN0bHkgYSByZWZhY3Rvcmlu
ZyBvZiB0aGUgZXhpc3RpbmcgY29kZS4KKworICAgICAgICAqIHJlbmRlcmluZy9FeGNsdXNpb25Q
b2x5Z29uLmNwcDoKKyAgICAgICAgKEVkZ2VJbnRlcnNlY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RmxvYXRQb2x5Z29uOjpGbG9hdFBvbHlnb24pOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQ
b2x5Z29uOjpmaW5kTmV4dEVkZ2VWZXJ0ZXhJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9h
dFBvbHlnb246Om92ZXJsYXBwaW5nRWRnZXMpOgorICAgICAgICAoV2ViQ29yZTo6bGVmdFNpZGUp
OgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2x5Z29uOjpjb250YWlucyk6CisgICAgICAgIChX
ZWJDb3JlOjpjb21wdXRlWEludGVyc2VjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpnZXRWZXJ0
ZXhJbnRlcnNlY3Rpb25WZXJ0aWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFBvbHlnb246
OmNvbXB1dGVYSW50ZXJzZWN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFBvbHlnb246
OmNvbXB1dGVPdmVybGFwcGluZ0VkZ2VYUHJvamVjdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
RXhjbHVzaW9uUG9seWdvbjo6Z2V0RXhjbHVkZWRJbnRlcnZhbHMpOgorICAgICAgICAoV2ViQ29y
ZTo6RXhjbHVzaW9uUG9seWdvbjo6Z2V0SW5jbHVkZWRJbnRlcnZhbHMpOgorICAgICAgICAoV2Vi
Q29yZTo6Zmlyc3RGaXRSZWN0SW5Qb2x5Z29uKToKKyAgICAgICAgKFdlYkNvcmU6OkV4Y2x1c2lv
blBvbHlnb246OmZpcnN0SW5jbHVkZWRJbnRlcnZhbExvZ2ljYWxUb3ApOgorICAgICAgICAqIHJl
bmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmg6CisgICAgICAgIChGbG9hdFBvbHlnb24pOiAtIEV4
dHJhY3RlZCBmcm9tIEV4Y2x1c2lvblBvbHlnb24KKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UG9s
eWdvbjo6ZWRnZUF0KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UG9seWdvbjo6Ym91bmRpbmdC
b3gpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2x5Z29uOjppc0VtcHR5KToKKyAgICAgICAg
KEZsb2F0UG9seWdvbkVkZ2UpOiAtIFdhcyBFeGNsdXNpb25Qb2x5Z29uRWRnZS4KKyAgICAgICAg
KFdlYkNvcmU6OkZsb2F0UG9seWdvbkVkZ2U6OnByZXZpb3VzRWRnZSk6CisgICAgICAgIChXZWJD
b3JlOjpGbG9hdFBvbHlnb25FZGdlOjpuZXh0RWRnZSk6CisgICAgICAgIChXZWJDb3JlOjpGbG9h
dFBvbHlnb25FZGdlOjpwb2x5Z29uKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNldFBvbHlnb25F
ZGdlOjpPZmZzZXRQb2x5Z29uRWRnZSk6CisgICAgICAgIChFeGNsdXNpb25Qb2x5Z29uKTogLSBO
b3cganVzdCBoYXMgdGhlIEV4Y2x1c2lvblNoYXBlIG1ldGhvZCBvdmVycmlkZXMgYW5kIG9uZSBw
cml2YXQgZUZsb2F0UG9seWdvbiBtZW1iZXIuCisgICAgICAgIChXZWJDb3JlOjpFeGNsdXNpb25Q
b2x5Z29uOjpFeGNsdXNpb25Qb2x5Z29uKToKKwogMjAxMy0wMy0wNyAgQ2hyaXMgRmxlaXphY2gg
IDxjZmxlaXphY2hAYXBwbGUuY29tPgogCiAgICAgICAgIEFYOiBDYW4ndCBhY3RpdmF0ZSBsaW5r
cyB3aXRoIFZvaWNlT3ZlciBpbiBTYWZhcmkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmlu
ZGV4IDlmNDU2ZmQuLjM0OWQ1MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAt
NTU5MSw2ICs1NTkxLDggQEAgd2ViY29yZV9wbGF0Zm9ybV9zb3VyY2VzICs9IFwKIAlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuaCBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRQb2x5Z29uLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRQb2x5Z29uLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0UXVhZC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
UXVhZC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3Bw
IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29y
ZS9UYXJnZXQucHJpCmluZGV4IDFiNjU1ZmIuLjI3Nzc5ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMTAw
NSw2ICsxMDA1LDcgQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ3Jvc3Nm
YWRlR2VuZXJhdGVkSW1hZ2UuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50
M0QuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmNwcCBcCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2x5Z29uLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
RmxvYXRRdWFkLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcCBcCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmNwcCBcCkBAIC0yMjMxLDYgKzIyMzIsNyBA
QCBIRUFERVJTICs9IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBo
aWMuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNELmggXAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQ
b2x5Z29uLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oIFwKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRT
aXplLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGZjYzFkYmUuLmZlZGExN2EgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKQEAgLTQ4MTMsNiArNDgxMyw3IEBACiAgICAgICAgIF0sCiAgICAgICAgICd3ZWJjb3Jl
X3BsYXRmb3JtX2dlb21ldHJ5X2ZpbGVzJzogWwogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL0Zsb2F0UG9pbnQuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9GbG9h
dFBvbHlnb24uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50
M0QuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwJywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggZWRkMDAxNS4uZmU4
OWZiNSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oK
QEAgLTI5Nzk4LDYgKzI5Nzk4LDE0IEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUK
KwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGbG9hdFBvbHlnb24uY3Bw
IgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cGxhdGZvcm1cZ3JhcGhpY3NcRmxvYXRQb2x5Z29uLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJ
CQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGbG9hdFF1
YWQuY3BwIgogCQkJCQk+CiAJCQkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDk2NzlmNjIuLjM4NGY2MjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTE5MjMsNiArMTkyMyw4IEBACiAJCTZFQkYwRTc2MTJBOTg2ODgwMERCMTcwQSAvKiBKU0VYVERy
YXdCdWZmZXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDZFQkYwRTc0MTJBOTg2ODgwMERCMTcwQSAvKiBKU0VYVERyYXdCdWZmZXJzLmNwcCAqLzsg
fTsKIAkJNkVCRjBFNzcxMkE5ODY4ODAwREIxNzA5IC8qIEpTT0VTVGV4dHVyZUZsb2F0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUJGMEU3NTEyQTk4
Njg4MDBEQjE3MDkgLyogSlNPRVNUZXh0dXJlRmxvYXQuaCAqLzsgfTsKIAkJNkVCRjBFNzcxMkE5
ODY4ODAwREIxNzBBIC8qIEpTRVhURHJhd0J1ZmZlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQkYwRTc1MTJBOTg2ODgwMERCMTcwQSAvKiBKU0VY
VERyYXdCdWZmZXJzLmggKi87IH07CisJCTZFQzQ4MEExMTZFQTYzOEEwMEE0OERDQiAvKiBGbG9h
dFBvbHlnb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNkVDNDgwOUYxNkVBNjM4QTAwQTQ4RENCIC8qIEZsb2F0UG9seWdvbi5jcHAgKi87IH07CisJ
CTZFQzQ4MEEyMTZFQTYzOEEwMEE0OERDQiAvKiBGbG9hdFBvbHlnb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQzQ4MEEwMTZFQTYzOEEwMEE0OERD
QiAvKiBGbG9hdFBvbHlnb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk2RUQ4NzhDNDE0NzQ5M0Y0MDA0QzM1OTcgLyogUmVuZGVyVGFibGVDYXB0
aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZF
RDg3OEMyMTQ3NDkzRjQwMDRDMzU5NyAvKiBSZW5kZXJUYWJsZUNhcHRpb24uY3BwICovOyB9Owog
CQk2RUQ4NzhDNTE0NzQ5M0Y0MDA0QzM1OTcgLyogUmVuZGVyVGFibGVDYXB0aW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUQ4NzhDMzE0NzQ5M0Y0
MDA0QzM1OTcgLyogUmVuZGVyVGFibGVDYXB0aW9uLmggKi87IH07CiAJCTZFRThBNzcyMTBGODAz
RjMwMDVBNEEyNCAvKiBKU1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVFOEE3NzAxMEY4MDNGMzAwNUE0QTI0
IC8qIEpTV2ViR0xDb250ZXh0QXR0cmlidXRlcy5jcHAgKi87IH07CkBAIC05NDA4LDYgKzk0MTAs
OCBAQAogCQk2RUJGMEU3NDEyQTk4Njg4MDBEQjE3MEEgLyogSlNFWFREcmF3QnVmZmVycy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0VYVERyYXdCdWZmZXJzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkVCRjBFNzUxMkE5ODY4ODAwREIxNzA5
IC8qIEpTT0VTVGV4dHVyZUZsb2F0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTT0VTVGV4dHVyZUZsb2F0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFQkYw
RTc1MTJBOTg2ODgwMERCMTcwQSAvKiBKU0VYVERyYXdCdWZmZXJzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTRVhURHJhd0J1ZmZlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNkVDNDgwOUYxNkVBNjM4QTAwQTQ4RENCIC8qIEZsb2F0UG9seWdvbi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbG9hdFBvbHlnb24uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RUM0ODBBMDE2RUE2MzhBMDBBNDhEQ0IgLyog
RmxvYXRQb2x5Z29uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsb2F0UG9s
eWdvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RUQ4NzhDMjE0NzQ5M0Y0MDA0
QzM1OTcgLyogUmVuZGVyVGFibGVDYXB0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFJlbmRlclRhYmxlQ2FwdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTZFRDg3OEMzMTQ3NDkzRjQwMDRDMzU5NyAvKiBSZW5kZXJUYWJsZUNhcHRpb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyVGFibGVDYXB0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFRThBNzcwMTBGODAzRjMwMDVBNEEyNCAv
KiBKU1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTIwNjkxLDYgKzIwNjk1LDggQEAKIAkJCQk2RTY3RDJBODEyODBFOEJE
MDA4NzU4RjcgLyogRXh0ZW5zaW9uczNELmggKi8sCiAJCQkJQjI3NTM1M0EwQjA1MzgxNDAwMkNF
NjRGIC8qIEZsb2F0UG9pbnQuY3BwICovLAogCQkJCUIyNzUzNTNCMEIwNTM4MTQwMDJDRTY0RiAv
KiBGbG9hdFBvaW50LmggKi8sCisJCQkJNkVDNDgwOUYxNkVBNjM4QTAwQTQ4RENCIC8qIEZsb2F0
UG9seWdvbi5jcHAgKi8sCisJCQkJNkVDNDgwQTAxNkVBNjM4QTAwQTQ4RENCIC8qIEZsb2F0UG9s
eWdvbi5oICovLAogCQkJCUIyRTI3QzlEMEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50M0Qu
Y3BwICovLAogCQkJCUIyRTI3QzlFMEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50M0QuaCAq
LywKIAkJCQkwRkQ3MjM4MTBFQzhCRDkzMDBDQTVERDcgLyogRmxvYXRRdWFkLmNwcCAqLywKQEAg
LTIzMjY0LDYgKzIzMjcwLDcgQEAKIAkJCWlzYSA9IFBCWEhlYWRlcnNCdWlsZFBoYXNlOwogCQkJ
YnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCTZFQzQ4MEEy
MTZFQTYzOEEwMEE0OERDQiAvKiBGbG9hdFBvbHlnb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUZF
MTE1RkFCMTY3OTg4Q0QwMDI0OTEzNCAvKiBBYnN0cmFjdERhdGFiYXNlU2VydmVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGRTlFODlGQzE2RTJEQzA1MDBBOTA4RjggLyogT3JpZ2luTG9jay5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRkU0QUFERUUxNkQyQzM3NDAwMDI2RkZDIC8qIEFic3RyYWN0U1FM
U3RhdGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTI5ODk1LDYgKzI5OTAyLDcgQEAKIAkJCQk3
RTY2RTIzMzE2RDZFQjZDMDBGN0U3RkYgLyogV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk3RUEzMEY2OTE2REZGRTc1MDAyNTdEMEIgLyogSlNXZWJHTENv
bXByZXNzZWRUZXh0dXJlQVRDLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEODI4N0Y2MTZFNEEw
MzgwMDg2QkQwMCAvKiBIaXRUZXN0TG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNkVD
NDgwQTExNkVBNjM4QTAwQTQ4RENCIC8qIEZsb2F0UG9seWdvbi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9seWdv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvbHlnb24uY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMDY4NDAKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvbHlnb24uY3Bw
CkBAIC0wLDAgKzEsMjM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3Rl
bXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAq
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisg
KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkZsb2F0UG9seWdvbi5oIgorCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitzdGF0aWMgaW5saW5lIGZsb2F0IGRldGVybWluYW50KGNvbnN0IEZs
b2F0U2l6ZSYgYSwgY29uc3QgRmxvYXRTaXplJiBiKQoreworICAgIHJldHVybiBhLndpZHRoKCkg
KiBiLmhlaWdodCgpIC0gYS5oZWlnaHQoKSAqIGIud2lkdGgoKTsKK30KKworc3RhdGljIGlubGlu
ZSBib29sIGFyZUNvbGxpbmVhclBvaW50cyhjb25zdCBGbG9hdFBvaW50JiBwMCwgY29uc3QgRmxv
YXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0UG9pbnQmIHAyKQoreworICAgIHJldHVybiAhZGV0ZXJt
aW5hbnQocDEgLSBwMCwgcDIgLSBwMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBhcmVDb2lu
Y2lkZW50UG9pbnRzKGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50JiBwMSkK
K3sKKyAgICByZXR1cm4gcDAueCgpID09IHAxLngoKSAmJiBwMC55KCkgPT0gcDEueSgpOworfQor
CitzdGF0aWMgaW5saW5lIGJvb2wgaXNQb2ludE9uTGluZVNlZ21lbnQoY29uc3QgRmxvYXRQb2lu
dCYgdmVydGV4MSwgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MiwgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQpCit7CisgICAgcmV0dXJuIHBvaW50LngoKSA+PSBzdGQ6Om1pbih2ZXJ0ZXgxLngoKSwg
dmVydGV4Mi54KCkpCisgICAgICAgICYmIHBvaW50LngoKSA8PSBzdGQ6Om1heCh2ZXJ0ZXgxLngo
KSwgdmVydGV4Mi54KCkpCisgICAgICAgICYmIGFyZUNvbGxpbmVhclBvaW50cyh2ZXJ0ZXgxLCB2
ZXJ0ZXgyLCBwb2ludCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbmV4dFZlcnRleElu
ZGV4KHVuc2lnbmVkIHZlcnRleEluZGV4LCB1bnNpZ25lZCBuVmVydGljZXMsIGJvb2wgY2xvY2t3
aXNlKQoreworICAgIHJldHVybiAoKGNsb2Nrd2lzZSkgPyB2ZXJ0ZXhJbmRleCArIDEgOiB2ZXJ0
ZXhJbmRleCAtIDEgKyBuVmVydGljZXMpICUgblZlcnRpY2VzOworfQorCitzdGF0aWMgdW5zaWdu
ZWQgZmluZE5leHRFZGdlVmVydGV4SW5kZXgoY29uc3QgRmxvYXRQb2x5Z29uJiBwb2x5Z29uLCB1
bnNpZ25lZCB2ZXJ0ZXhJbmRleDEsIGJvb2wgY2xvY2t3aXNlKQoreworICAgIHVuc2lnbmVkIG5W
ZXJ0aWNlcyA9IHBvbHlnb24ubnVtYmVyT2ZWZXJ0aWNlcygpOworICAgIHVuc2lnbmVkIHZlcnRl
eEluZGV4MiA9IG5leHRWZXJ0ZXhJbmRleCh2ZXJ0ZXhJbmRleDEsIG5WZXJ0aWNlcywgY2xvY2t3
aXNlKTsKKworICAgIHdoaWxlICh2ZXJ0ZXhJbmRleDIgJiYgYXJlQ29pbmNpZGVudFBvaW50cyhw
b2x5Z29uLnZlcnRleEF0KHZlcnRleEluZGV4MSksIHBvbHlnb24udmVydGV4QXQodmVydGV4SW5k
ZXgyKSkpCisgICAgICAgIHZlcnRleEluZGV4MiA9IG5leHRWZXJ0ZXhJbmRleCh2ZXJ0ZXhJbmRl
eDIsIG5WZXJ0aWNlcywgY2xvY2t3aXNlKTsKKworICAgIHdoaWxlICh2ZXJ0ZXhJbmRleDIpIHsK
KyAgICAgICAgdW5zaWduZWQgdmVydGV4SW5kZXgzID0gbmV4dFZlcnRleEluZGV4KHZlcnRleElu
ZGV4MiwgblZlcnRpY2VzLCBjbG9ja3dpc2UpOworICAgICAgICBpZiAoIWFyZUNvbGxpbmVhclBv
aW50cyhwb2x5Z29uLnZlcnRleEF0KHZlcnRleEluZGV4MSksIHBvbHlnb24udmVydGV4QXQodmVy
dGV4SW5kZXgyKSwgcG9seWdvbi52ZXJ0ZXhBdCh2ZXJ0ZXhJbmRleDMpKSkKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB2ZXJ0ZXhJbmRleDIgPSB2ZXJ0ZXhJbmRleDM7CisgICAgfQorCisg
ICAgcmV0dXJuIHZlcnRleEluZGV4MjsKK30KKworRmxvYXRQb2x5Z29uOjpGbG9hdFBvbHlnb24o
UGFzc093blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiB2ZXJ0aWNlcywgV2luZFJ1bGUgZmlsbFJ1
bGUpCisgICAgOiBtX3ZlcnRpY2VzKHZlcnRpY2VzKQorICAgICwgbV9maWxsUnVsZShmaWxsUnVs
ZSkKK3sKKyAgICB1bnNpZ25lZCBuVmVydGljZXMgPSBudW1iZXJPZlZlcnRpY2VzKCk7CisgICAg
bV9lZGdlcy5yZXNpemUoblZlcnRpY2VzKTsKKyAgICBtX2VtcHR5ID0gblZlcnRpY2VzIDwgMzsK
KworICAgIGlmIChuVmVydGljZXMpCisgICAgICAgIG1fYm91bmRpbmdCb3guc2V0TG9jYXRpb24o
dmVydGV4QXQoMCkpOworCisgICAgaWYgKG1fZW1wdHkpCisgICAgICAgIHJldHVybjsKKworICAg
IHVuc2lnbmVkIG1pblZlcnRleEluZGV4ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBp
IDwgblZlcnRpY2VzOyArK2kpIHsKKyAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4ID0g
dmVydGV4QXQoaSk7CisgICAgICAgIGlmICh2ZXJ0ZXgueSgpIDwgdmVydGV4QXQobWluVmVydGV4
SW5kZXgpLnkoKSB8fCAodmVydGV4LnkoKSA9PSB2ZXJ0ZXhBdChtaW5WZXJ0ZXhJbmRleCkueSgp
ICYmIHZlcnRleC54KCkgPCB2ZXJ0ZXhBdChtaW5WZXJ0ZXhJbmRleCkueCgpKSkKKyAgICAgICAg
ICAgIG1pblZlcnRleEluZGV4ID0gaTsKKyAgICB9CisgICAgRmxvYXRQb2ludCBuZXh0VmVydGV4
ID0gdmVydGV4QXQoKG1pblZlcnRleEluZGV4ICsgMSkgJSBuVmVydGljZXMpOworICAgIEZsb2F0
UG9pbnQgcHJldlZlcnRleCA9IHZlcnRleEF0KChtaW5WZXJ0ZXhJbmRleCArIG5WZXJ0aWNlcyAt
IDEpICUgblZlcnRpY2VzKTsKKyAgICBib29sIGNsb2Nrd2lzZSA9IGRldGVybWluYW50KHZlcnRl
eEF0KG1pblZlcnRleEluZGV4KSAtIHByZXZWZXJ0ZXgsIG5leHRWZXJ0ZXggLSBwcmV2VmVydGV4
KSA+IDA7CisKKyAgICB1bnNpZ25lZCBlZGdlSW5kZXggPSAwOworICAgIHVuc2lnbmVkIHZlcnRl
eEluZGV4MSA9IDA7CisgICAgZG8geworICAgICAgICBtX2JvdW5kaW5nQm94LmV4dGVuZCh2ZXJ0
ZXhBdCh2ZXJ0ZXhJbmRleDEpKTsKKyAgICAgICAgdW5zaWduZWQgdmVydGV4SW5kZXgyID0gZmlu
ZE5leHRFZGdlVmVydGV4SW5kZXgoKnRoaXMsIHZlcnRleEluZGV4MSwgY2xvY2t3aXNlKTsKKyAg
ICAgICAgbV9lZGdlc1tlZGdlSW5kZXhdLm1fcG9seWdvbiA9IHRoaXM7CisgICAgICAgIG1fZWRn
ZXNbZWRnZUluZGV4XS5tX3ZlcnRleEluZGV4MSA9IHZlcnRleEluZGV4MTsKKyAgICAgICAgbV9l
ZGdlc1tlZGdlSW5kZXhdLm1fdmVydGV4SW5kZXgyID0gdmVydGV4SW5kZXgyOworICAgICAgICBt
X2VkZ2VzW2VkZ2VJbmRleF0ubV9lZGdlSW5kZXggPSBlZGdlSW5kZXg7CisgICAgICAgICsrZWRn
ZUluZGV4OworICAgICAgICB2ZXJ0ZXhJbmRleDEgPSB2ZXJ0ZXhJbmRleDI7CisgICAgfSB3aGls
ZSAodmVydGV4SW5kZXgxKTsKKworICAgIGlmIChlZGdlSW5kZXggPiAzKSB7CisgICAgICAgIGNv
bnN0IEZsb2F0UG9seWdvbkVkZ2UmIGZpcnN0RWRnZSA9IG1fZWRnZXNbMF07CisgICAgICAgIGNv
bnN0IEZsb2F0UG9seWdvbkVkZ2UmIGxhc3RFZGdlID0gbV9lZGdlc1tlZGdlSW5kZXggLSAxXTsK
KyAgICAgICAgaWYgKGFyZUNvbGxpbmVhclBvaW50cyhsYXN0RWRnZS52ZXJ0ZXgxKCksIGxhc3RF
ZGdlLnZlcnRleDIoKSwgZmlyc3RFZGdlLnZlcnRleDIoKSkpIHsKKyAgICAgICAgICAgIG1fZWRn
ZXNbMF0ubV92ZXJ0ZXhJbmRleDEgPSBsYXN0RWRnZS5tX3ZlcnRleEluZGV4MTsKKyAgICAgICAg
ICAgIGVkZ2VJbmRleC0tOworICAgICAgICB9CisgICAgfQorCisgICAgbV9lZGdlcy5yZXNpemUo
ZWRnZUluZGV4KTsKKyAgICBtX2VtcHR5ID0gbV9lZGdlcy5zaXplKCkgPCAzOworCisgICAgaWYg
KG1fZW1wdHkpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX2VkZ2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgIEZsb2F0UG9seWdvbkVkZ2UqIGVkZ2Ug
PSAmbV9lZGdlc1tpXTsKKyAgICAgICAgbV9lZGdlVHJlZS5hZGQoRWRnZUludGVydmFsKGVkZ2Ut
Pm1pblkoKSwgZWRnZS0+bWF4WSgpLCBlZGdlKSk7CisgICAgfQorfQorCitib29sIEZsb2F0UG9s
eWdvbjo6b3ZlcmxhcHBpbmdFZGdlcyhmbG9hdCBtaW5ZLCBmbG9hdCBtYXhZLCBWZWN0b3I8Y29u
c3QgRmxvYXRQb2x5Z29uRWRnZSo+JiByZXN1bHQpIGNvbnN0Cit7CisgICAgVmVjdG9yPEZsb2F0
UG9seWdvbjo6RWRnZUludGVydmFsPiBvdmVybGFwcGluZ0VkZ2VJbnRlcnZhbHM7CisgICAgbV9l
ZGdlVHJlZS5hbGxPdmVybGFwcyhGbG9hdFBvbHlnb246OkVkZ2VJbnRlcnZhbChtaW5ZLCBtYXhZ
LCAwKSwgb3ZlcmxhcHBpbmdFZGdlSW50ZXJ2YWxzKTsKKyAgICB1bnNpZ25lZCBvdmVybGFwcGlu
Z0VkZ2VJbnRlcnZhbHNTaXplID0gb3ZlcmxhcHBpbmdFZGdlSW50ZXJ2YWxzLnNpemUoKTsKKyAg
ICByZXN1bHQucmVzaXplKG92ZXJsYXBwaW5nRWRnZUludGVydmFsc1NpemUpOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBvdmVybGFwcGluZ0VkZ2VJbnRlcnZhbHNTaXplOyArK2kpIHsK
KyAgICAgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSogZWRnZSA9IHN0YXRpY19jYXN0PGNvbnN0
IEZsb2F0UG9seWdvbkVkZ2UqPihvdmVybGFwcGluZ0VkZ2VJbnRlcnZhbHNbaV0uZGF0YSgpKTsK
KyAgICAgICAgQVNTRVJUKGVkZ2UpOworICAgICAgICByZXN1bHRbaV0gPSBlZGdlOworICAgIH0K
KyAgICByZXR1cm4gb3ZlcmxhcHBpbmdFZGdlSW50ZXJ2YWxzU2l6ZSA+IDA7Cit9CisKK3N0YXRp
YyBpbmxpbmUgZmxvYXQgbGVmdFNpZGUoY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MSwgY29uc3Qg
RmxvYXRQb2ludCYgdmVydGV4MiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit7CisgICAgcmV0
dXJuICgocG9pbnQueCgpIC0gdmVydGV4MS54KCkpICogKHZlcnRleDIueSgpIC0gdmVydGV4MS55
KCkpKSAtICgodmVydGV4Mi54KCkgLSB2ZXJ0ZXgxLngoKSkgKiAocG9pbnQueSgpIC0gdmVydGV4
MS55KCkpKTsKK30KKworYm9vbCBGbG9hdFBvbHlnb246OmNvbnRhaW5zKGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50KSBjb25zdAoreworICAgIGlmICghbV9ib3VuZGluZ0JveC5jb250YWlucyhwb2lu
dCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGludCB3aW5kaW5nTnVtYmVyID0gMDsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZFZGdlcygpOyArK2kpIHsKKyAg
ICAgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MSA9IGVkZ2VBdChpKS52ZXJ0ZXgxKCk7Cisg
ICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDIgPSBlZGdlQXQoaSkudmVydGV4MigpOwor
ICAgICAgICBpZiAoaXNQb2ludE9uTGluZVNlZ21lbnQodmVydGV4MSwgdmVydGV4MiwgcG9pbnQp
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICh2ZXJ0ZXgyLnkoKSA8IHBv
aW50LnkoKSkgeworICAgICAgICAgICAgaWYgKCh2ZXJ0ZXgxLnkoKSA+IHBvaW50LnkoKSkgJiYg
KGxlZnRTaWRlKHZlcnRleDEsIHZlcnRleDIsIHBvaW50KSA+IDApKQorICAgICAgICAgICAgICAg
ICsrd2luZGluZ051bWJlcjsKKyAgICAgICAgfSBlbHNlIGlmICh2ZXJ0ZXgyLnkoKSA+IHBvaW50
LnkoKSkgeworICAgICAgICAgICAgaWYgKCh2ZXJ0ZXgxLnkoKSA8PSBwb2ludC55KCkpICYmIChs
ZWZ0U2lkZSh2ZXJ0ZXgxLCB2ZXJ0ZXgyLCBwb2ludCkgPCAwKSkKKyAgICAgICAgICAgICAgICAt
LXdpbmRpbmdOdW1iZXI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gd2luZGluZ051
bWJlcjsKK30KKworYm9vbCBWZXJ0ZXhQYWlyOjpvdmVybGFwc1JlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0KSBjb25zdAoreworICAgIGJvb2wgYm91bmRzT3ZlcmxhcCA9IChtaW5YKCkgPCByZWN0
Lm1heFgoKSkgJiYgKG1heFgoKSA+IHJlY3QueCgpKSAmJiAobWluWSgpIDwgcmVjdC5tYXhZKCkp
ICYmIChtYXhZKCkgPiByZWN0LnkoKSk7CisgICAgaWYgKCFib3VuZHNPdmVybGFwKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBmbG9hdCBsZWZ0U2lkZVZhbHVlc1s0XSA9IHsKKyAgICAg
ICAgbGVmdFNpZGUodmVydGV4MSgpLCB2ZXJ0ZXgyKCksIHJlY3QubWluWE1pbllDb3JuZXIoKSks
CisgICAgICAgIGxlZnRTaWRlKHZlcnRleDEoKSwgdmVydGV4MigpLCByZWN0Lm1heFhNaW5ZQ29y
bmVyKCkpLAorICAgICAgICBsZWZ0U2lkZSh2ZXJ0ZXgxKCksIHZlcnRleDIoKSwgcmVjdC5taW5Y
TWF4WUNvcm5lcigpKSwKKyAgICAgICAgbGVmdFNpZGUodmVydGV4MSgpLCB2ZXJ0ZXgyKCksIHJl
Y3QubWF4WE1heFlDb3JuZXIoKSkKKyAgICB9OworCisgICAgaW50IGN1cnJlbnRMZWZ0U2lkZVNp
Z24gPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCA0OyArK2kpIHsKKyAgICAgICAg
aWYgKCFsZWZ0U2lkZVZhbHVlc1tpXSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBp
bnQgbGVmdFNpZGVTaWduID0gbGVmdFNpZGVWYWx1ZXNbaV0gPiAwID8gMSA6IC0xOworICAgICAg
ICBpZiAoIWN1cnJlbnRMZWZ0U2lkZVNpZ24pCisgICAgICAgICAgICBjdXJyZW50TGVmdFNpZGVT
aWduID0gbGVmdFNpZGVTaWduOworICAgICAgICBlbHNlIGlmIChjdXJyZW50TGVmdFNpZGVTaWdu
ICE9IGxlZnRTaWRlU2lnbikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBWZXJ0ZXhQYWlyOjppbnRlcnNlY3Rpb24oY29uc3Qg
VmVydGV4UGFpciYgb3RoZXIsIEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIC8vIFNl
ZTogaHR0cDovL3BhdWxib3Vya2UubmV0L2dlb21ldHJ5L3BvaW50bGluZXBsYW5lLywgIkludGVy
c2VjdGlvbiBwb2ludCBvZiB0d28gbGluZXMgaW4gMiBkaW1lbnNpb25zIgorCisgICAgY29uc3Qg
RmxvYXRTaXplJiB0aGlzRGVsdGEgPSB2ZXJ0ZXgyKCkgLSB2ZXJ0ZXgxKCk7CisgICAgY29uc3Qg
RmxvYXRTaXplJiBvdGhlckRlbHRhID0gb3RoZXIudmVydGV4MigpIC0gb3RoZXIudmVydGV4MSgp
OworICAgIGZsb2F0IGRlbm9taW5hdG9yID0gZGV0ZXJtaW5hbnQodGhpc0RlbHRhLCBvdGhlckRl
bHRhKTsKKyAgICBpZiAoIWRlbm9taW5hdG9yKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAvLyBUaGUgdHdvIGxpbmUgc2VnbWVudHM6ICJ0aGlzIiB2ZXJ0ZXgxLHZlcnRleDIgYW5kICJv
dGhlciIgdmVydGV4MSx2ZXJ0ZXgyLCBoYXZlIGJlZW4gZGVmaW5lZAorICAgIC8vIGluIHBhcmFt
ZXRyaWMgZm9ybS4gRWFjaCBwb2ludCBvbiB0aGUgbGluZSBzZWdtZW50IGlzOiB2ZXJ0ZXgxICsg
dSAqICh2ZXJ0ZXgyIC0gdmVydGV4MSksCisgICAgLy8gd2hlbiAwIDw9IHUgPD0gMS4gV2UncmUg
Y29tcHV0aW5nIHRoZSB2YWx1ZXMgb2YgdSBmb3IgZWFjaCBsaW5lIGF0IHRoZWlyIGludGVyc2Vj
dGlvbiBwb2ludC4KKworICAgIGNvbnN0IEZsb2F0U2l6ZSYgdmVydGV4MURlbHRhID0gdmVydGV4
MSgpIC0gb3RoZXIudmVydGV4MSgpOworICAgIGZsb2F0IHVUaGlzTGluZSA9IGRldGVybWluYW50
KG90aGVyRGVsdGEsIHZlcnRleDFEZWx0YSkgLyBkZW5vbWluYXRvcjsKKyAgICBmbG9hdCB1T3Ro
ZXJMaW5lID0gZGV0ZXJtaW5hbnQodGhpc0RlbHRhLCB2ZXJ0ZXgxRGVsdGEpIC8gZGVub21pbmF0
b3I7CisKKyAgICBpZiAodVRoaXNMaW5lIDwgMCB8fCB1T3RoZXJMaW5lIDwgMCB8fCB1VGhpc0xp
bmUgPiAxIHx8IHVPdGhlckxpbmUgPiAxKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBw
b2ludCA9IHZlcnRleDEoKSArIHVUaGlzTGluZSAqIHRoaXNEZWx0YTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2x5Z29uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFBvbHlnb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi44ZGVmZTE0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRQb2x5Z29uLmgKQEAgLTAsMCArMSwxNTAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlz
Y2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAg
ICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIEZsb2F0UG9seWdvbl9oCisjZGVmaW5lIEZsb2F0UG9seWdvbl9oCisKKyNpbmNsdWRlICJG
bG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiUE9ESW50ZXJ2
YWxUcmVlLmgiCisjaW5jbHVkZSAiV2luZFJ1bGUuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmxvYXRQb2x5Z29uRWRnZTsKKworLy8gVGhp
cyBjbGFzcyBpcyB1c2VkIGJ5IFBPREludGVydmFsVHJlZSBmb3IgZGVidWdnaW5nLgorI2lmbmRl
ZiBOREVCVUcKK3RlbXBsYXRlIDxjbGFzcz4gc3RydWN0IFZhbHVlVG9TdHJpbmc7CisjZW5kaWYK
KworY2xhc3MgRmxvYXRQb2x5Z29uIHsKK3B1YmxpYzoKKyAgICBGbG9hdFBvbHlnb24oUGFzc093
blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiB2ZXJ0aWNlcywgV2luZFJ1bGUgZmlsbFJ1bGUpOwor
CisgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4QXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuICgqbV92ZXJ0aWNlcylbaW5kZXhdOyB9CisgICAgdW5zaWduZWQgbnVtYmVyT2ZWZXJ0
aWNlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGljZXMtPnNpemUoKTsgfQorCisgICAgV2luZFJ1
bGUgZmlsbFJ1bGUoKSBjb25zdCB7IHJldHVybiBtX2ZpbGxSdWxlOyB9CisKKyAgICBjb25zdCBG
bG9hdFBvbHlnb25FZGdlJiBlZGdlQXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1f
ZWRnZXNbaW5kZXhdOyB9CisgICAgdW5zaWduZWQgbnVtYmVyT2ZFZGdlcygpIGNvbnN0IHsgcmV0
dXJuIG1fZWRnZXMuc2l6ZSgpOyB9CisKKyAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3goKSBjb25z
dCB7IHJldHVybiBtX2JvdW5kaW5nQm94OyB9CisgICAgYm9vbCBvdmVybGFwcGluZ0VkZ2VzKGZs
b2F0IG1pblksIGZsb2F0IG1heFksIFZlY3Rvcjxjb25zdCBGbG9hdFBvbHlnb25FZGdlKj4mIHJl
c3VsdCkgY29uc3Q7CisgICAgYm9vbCBjb250YWlucyhjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7
CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9lbXB0eTsgfQorCitwcml2YXRl
OgorICAgIHR5cGVkZWYgUE9ESW50ZXJ2YWw8ZmxvYXQsIEZsb2F0UG9seWdvbkVkZ2UqPiBFZGdl
SW50ZXJ2YWw7CisgICAgdHlwZWRlZiBQT0RJbnRlcnZhbFRyZWU8ZmxvYXQsIEZsb2F0UG9seWdv
bkVkZ2UqPiBFZGdlSW50ZXJ2YWxUcmVlOworCisgICAgT3duUHRyPFZlY3RvcjxGbG9hdFBvaW50
PiA+IG1fdmVydGljZXM7CisgICAgV2luZFJ1bGUgbV9maWxsUnVsZTsKKyAgICBGbG9hdFJlY3Qg
bV9ib3VuZGluZ0JveDsKKyAgICBib29sIG1fZW1wdHk7CisgICAgVmVjdG9yPEZsb2F0UG9seWdv
bkVkZ2U+IG1fZWRnZXM7CisgICAgRWRnZUludGVydmFsVHJlZSBtX2VkZ2VUcmVlOyAvLyBFYWNo
IEVkZ2VJbnRlcnZhbFRyZWUgbm9kZSBzdG9yZXMgbWluWSwgbWF4WSwgYW5kIGEgKCJVc2VyRGF0
YSIpIHBvaW50ZXIgdG8gYSBGbG9hdFBvbHlnb25FZGdlLgorCit9OworCitjbGFzcyBWZXJ0ZXhQ
YWlyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5WZXJ0ZXhQYWlyKCkgeyB9CisKKyAgICB2aXJ0
dWFsIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDEoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBj
b25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgyKCkgY29uc3QgPSAwOworCisgICAgZmxvYXQgbWluWCgp
IGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWluKHZlcnRleDEoKS54KCksIHZlcnRleDIoKS54KCkpOyB9
CisgICAgZmxvYXQgbWluWSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWluKHZlcnRleDEoKS55KCks
IHZlcnRleDIoKS55KCkpOyB9CisgICAgZmxvYXQgbWF4WCgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6
bWF4KHZlcnRleDEoKS54KCksIHZlcnRleDIoKS54KCkpOyB9CisgICAgZmxvYXQgbWF4WSgpIGNv
bnN0IHsgcmV0dXJuIHN0ZDo6bWF4KHZlcnRleDEoKS55KCksIHZlcnRleDIoKS55KCkpOyB9CisK
KyAgICBib29sIG92ZXJsYXBzUmVjdChjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKKyAgICBib29s
IGludGVyc2VjdGlvbihjb25zdCBWZXJ0ZXhQYWlyJiwgRmxvYXRQb2ludCYpIGNvbnN0OworfTsK
KworY2xhc3MgRmxvYXRQb2x5Z29uRWRnZSA6IHB1YmxpYyBWZXJ0ZXhQYWlyIHsKKyAgICBmcmll
bmQgY2xhc3MgRmxvYXRQb2x5Z29uOworcHVibGljOgorICAgIHZpcnR1YWwgY29uc3QgRmxvYXRQ
b2ludCYgdmVydGV4MSgpIGNvbnN0IE9WRVJSSURFCisgICAgeworICAgICAgICBBU1NFUlQobV9w
b2x5Z29uKTsKKyAgICAgICAgcmV0dXJuIG1fcG9seWdvbi0+dmVydGV4QXQobV92ZXJ0ZXhJbmRl
eDEpOworICAgIH0KKworICAgIHZpcnR1YWwgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MigpIGNv
bnN0IE9WRVJSSURFCisgICAgeworICAgICAgICBBU1NFUlQobV9wb2x5Z29uKTsKKyAgICAgICAg
cmV0dXJuIG1fcG9seWdvbi0+dmVydGV4QXQobV92ZXJ0ZXhJbmRleDIpOworICAgIH0KKworICAg
IGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIHByZXZpb3VzRWRnZSgpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQobV9wb2x5Z29uICYmIG1fcG9seWdvbi0+bnVtYmVyT2ZFZGdlcygpID4gMSk7
CisgICAgICAgIHJldHVybiBtX3BvbHlnb24tPmVkZ2VBdCgobV9lZGdlSW5kZXggKyBtX3BvbHln
b24tPm51bWJlck9mRWRnZXMoKSAtIDEpICUgbV9wb2x5Z29uLT5udW1iZXJPZkVkZ2VzKCkpOwor
ICAgIH0KKworICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIG5leHRFZGdlKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX3BvbHlnb24gJiYgbV9wb2x5Z29uLT5udW1iZXJPZkVkZ2Vz
KCkgPiAxKTsKKyAgICAgICAgcmV0dXJuIG1fcG9seWdvbi0+ZWRnZUF0KChtX2VkZ2VJbmRleCAr
IDEpICUgbV9wb2x5Z29uLT5udW1iZXJPZkVkZ2VzKCkpOworICAgIH0KKworICAgIGNvbnN0IEZs
b2F0UG9seWdvbiogcG9seWdvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9seWdvbjsgfQorICAgIHVu
c2lnbmVkIHZlcnRleEluZGV4MSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGV4SW5kZXgxOyB9Cisg
ICAgdW5zaWduZWQgdmVydGV4SW5kZXgyKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0ZXhJbmRleDI7
IH0KKyAgICB1bnNpZ25lZCBlZGdlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2VkZ2VJbmRleDsg
fQorCitwcml2YXRlOgorICAgIC8vIEVkZ2UgdmVydGV4IGluZGV4MSBpcyBsZXNzIHRoYW4gaW5k
ZXgyLCBleGNlcHQgdGhlIGxhc3QgZWRnZSwgd2hlcmUgaW5kZXgyIGlzIDAuIFdoZW4gYSBwb2x5
Z29uIGVkZ2UKKyAgICAvLyBpcyBkZWZpbmVkIGJ5IDMgb3IgbW9yZSBjb2xpbmVhciB2ZXJ0aWNl
cywgaW5kZXgyIGNhbiBiZSB0aGUgdGhlIGluZGV4IG9mIHRoZSBsYXN0IGNvbGluZWFyIHZlcnRl
eC4KKyAgICB1bnNpZ25lZCBtX3ZlcnRleEluZGV4MTsKKyAgICB1bnNpZ25lZCBtX3ZlcnRleElu
ZGV4MjsKKyAgICB1bnNpZ25lZCBtX2VkZ2VJbmRleDsKKyAgICBjb25zdCBGbG9hdFBvbHlnb24q
IG1fcG9seWdvbjsKK307CisKKy8vIFRoZXNlIHN0cnVjdHVyZXMgYXJlIHVzZWQgYnkgUE9ESW50
ZXJ2YWxUcmVlIGZvciBkZWJ1Z2dpbmcuCisjaWZuZGVmIE5ERUJVRwordGVtcGxhdGUgPD4gc3Ry
dWN0IFZhbHVlVG9TdHJpbmc8ZmxvYXQ+IHsKKyAgICBzdGF0aWMgU3RyaW5nIHN0cmluZyhjb25z
dCBmbG9hdCB2YWx1ZSkgeyByZXR1cm4gU3RyaW5nOjpudW1iZXIodmFsdWUpOyB9Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBWYWx1ZVRvU3RyaW5nPEZsb2F0UG9seWdvbkVkZ2UqPiB7CisgICAg
c3RhdGljIFN0cmluZyBzdHJpbmcoY29uc3QgRmxvYXRQb2x5Z29uRWRnZSogZWRnZSkgeyByZXR1
cm4gU3RyaW5nOjpmb3JtYXQoIiVwICglZiwlZiAlZiwlZikiLCBlZGdlLCBlZGdlLT52ZXJ0ZXgx
KCkueCgpLCBlZGdlLT52ZXJ0ZXgxKCkueSgpLCBlZGdlLT52ZXJ0ZXgyKCkueCgpLCBlZGdlLT52
ZXJ0ZXgyKCkueSgpKTsgfQorfTsKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBGbG9hdFBvbHlnb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4
Y2x1c2lvblBvbHlnb24uY3BwCmluZGV4IDEwNjBjMjAuLjVmNTlkYzAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHAKQEAgLTQyLDExOCArNDIsMTkg
QEAgZW51bSBFZGdlSW50ZXJzZWN0aW9uVHlwZSB7CiB9OwogCiBzdHJ1Y3QgRWRnZUludGVyc2Vj
dGlvbiB7Ci0gICAgY29uc3QgRXhjbHVzaW9uUG9seWdvbkVkZ2UqIGVkZ2U7CisgICAgY29uc3Qg
RmxvYXRQb2x5Z29uRWRnZSogZWRnZTsKICAgICBGbG9hdFBvaW50IHBvaW50OwogICAgIEVkZ2VJ
bnRlcnNlY3Rpb25UeXBlIHR5cGU7CiB9OwogCi1zdGF0aWMgaW5saW5lIGZsb2F0IGRldGVybWlu
YW50KGNvbnN0IEZsb2F0U2l6ZSYgYSwgY29uc3QgRmxvYXRTaXplJiBiKQotewotICAgIHJldHVy
biBhLndpZHRoKCkgKiBiLmhlaWdodCgpIC0gYS5oZWlnaHQoKSAqIGIud2lkdGgoKTsKLX0KLQot
c3RhdGljIGlubGluZSBib29sIGFyZUNvbGxpbmVhclBvaW50cyhjb25zdCBGbG9hdFBvaW50JiBw
MCwgY29uc3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0UG9pbnQmIHAyKQotewotICAgIHJl
dHVybiAhZGV0ZXJtaW5hbnQocDEgLSBwMCwgcDIgLSBwMCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
Ym9vbCBhcmVDb2luY2lkZW50UG9pbnRzKGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9h
dFBvaW50JiBwMSkKLXsKLSAgICByZXR1cm4gcDAueCgpID09IHAxLngoKSAmJiBwMC55KCkgPT0g
cDEueSgpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNQb2ludE9uTGluZVNlZ21lbnQoY29u
c3QgRmxvYXRQb2ludCYgdmVydGV4MSwgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MiwgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQpCi17Ci0gICAgcmV0dXJuIHBvaW50LngoKSA+PSBzdGQ6Om1pbih2
ZXJ0ZXgxLngoKSwgdmVydGV4Mi54KCkpCi0gICAgICAgICYmIHBvaW50LngoKSA8PSBzdGQ6Om1h
eCh2ZXJ0ZXgxLngoKSwgdmVydGV4Mi54KCkpCi0gICAgICAgICYmIGFyZUNvbGxpbmVhclBvaW50
cyh2ZXJ0ZXgxLCB2ZXJ0ZXgyLCBwb2ludCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQg
bmV4dFZlcnRleEluZGV4KHVuc2lnbmVkIHZlcnRleEluZGV4LCB1bnNpZ25lZCBuVmVydGljZXMs
IGJvb2wgY2xvY2t3aXNlKQotewotICAgIHJldHVybiAoKGNsb2Nrd2lzZSkgPyB2ZXJ0ZXhJbmRl
eCArIDEgOiB2ZXJ0ZXhJbmRleCAtIDEgKyBuVmVydGljZXMpICUgblZlcnRpY2VzOwotfQotCi11
bnNpZ25lZCBFeGNsdXNpb25Qb2x5Z29uOjpmaW5kTmV4dEVkZ2VWZXJ0ZXhJbmRleCh1bnNpZ25l
ZCB2ZXJ0ZXhJbmRleDEsIGJvb2wgY2xvY2t3aXNlKSBjb25zdAotewotICAgIHVuc2lnbmVkIG5W
ZXJ0aWNlcyA9IG51bWJlck9mVmVydGljZXMoKTsKLSAgICB1bnNpZ25lZCB2ZXJ0ZXhJbmRleDIg
PSBuZXh0VmVydGV4SW5kZXgodmVydGV4SW5kZXgxLCBuVmVydGljZXMsIGNsb2Nrd2lzZSk7Ci0K
LSAgICB3aGlsZSAodmVydGV4SW5kZXgyICYmIGFyZUNvaW5jaWRlbnRQb2ludHModmVydGV4QXQo
dmVydGV4SW5kZXgxKSwgdmVydGV4QXQodmVydGV4SW5kZXgyKSkpCi0gICAgICAgIHZlcnRleElu
ZGV4MiA9IG5leHRWZXJ0ZXhJbmRleCh2ZXJ0ZXhJbmRleDIsIG5WZXJ0aWNlcywgY2xvY2t3aXNl
KTsKLQotICAgIHdoaWxlICh2ZXJ0ZXhJbmRleDIpIHsKLSAgICAgICAgdW5zaWduZWQgdmVydGV4
SW5kZXgzID0gbmV4dFZlcnRleEluZGV4KHZlcnRleEluZGV4MiwgblZlcnRpY2VzLCBjbG9ja3dp
c2UpOwotICAgICAgICBpZiAoIWFyZUNvbGxpbmVhclBvaW50cyh2ZXJ0ZXhBdCh2ZXJ0ZXhJbmRl
eDEpLCB2ZXJ0ZXhBdCh2ZXJ0ZXhJbmRleDIpLCB2ZXJ0ZXhBdCh2ZXJ0ZXhJbmRleDMpKSkKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB2ZXJ0ZXhJbmRleDIgPSB2ZXJ0ZXhJbmRleDM7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHZlcnRleEluZGV4MjsKLX0KLQotRXhjbHVzaW9uUG9seWdvbjo6
RXhjbHVzaW9uUG9seWdvbihQYXNzT3duUHRyPFZlY3RvcjxGbG9hdFBvaW50PiA+IHZlcnRpY2Vz
LCBXaW5kUnVsZSBmaWxsUnVsZSkKLSAgICA6IEV4Y2x1c2lvblNoYXBlKCkKLSAgICAsIG1fdmVy
dGljZXModmVydGljZXMpCi0gICAgLCBtX2ZpbGxSdWxlKGZpbGxSdWxlKQorc3RhdGljIGlubGlu
ZSBmbG9hdCBsZWZ0U2lkZShjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgxLCBjb25zdCBGbG9hdFBv
aW50JiB2ZXJ0ZXgyLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKIHsKLSAgICB1bnNpZ25lZCBu
VmVydGljZXMgPSBudW1iZXJPZlZlcnRpY2VzKCk7Ci0gICAgbV9lZGdlcy5yZXNpemUoblZlcnRp
Y2VzKTsKLSAgICBtX2VtcHR5ID0gblZlcnRpY2VzIDwgMzsKLQotICAgIGlmIChuVmVydGljZXMp
Ci0gICAgICAgIG1fYm91bmRpbmdCb3guc2V0TG9jYXRpb24odmVydGV4QXQoMCkpOwotCi0gICAg
aWYgKG1fZW1wdHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVkIG1pblZlcnRleElu
ZGV4ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgblZlcnRpY2VzOyArK2kpIHsK
LSAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4ID0gdmVydGV4QXQoaSk7Ci0gICAgICAg
IGlmICh2ZXJ0ZXgueSgpIDwgdmVydGV4QXQobWluVmVydGV4SW5kZXgpLnkoKSB8fCAodmVydGV4
LnkoKSA9PSB2ZXJ0ZXhBdChtaW5WZXJ0ZXhJbmRleCkueSgpICYmIHZlcnRleC54KCkgPCB2ZXJ0
ZXhBdChtaW5WZXJ0ZXhJbmRleCkueCgpKSkKLSAgICAgICAgICAgIG1pblZlcnRleEluZGV4ID0g
aTsKLSAgICB9Ci0gICAgRmxvYXRQb2ludCBuZXh0VmVydGV4ID0gdmVydGV4QXQoKG1pblZlcnRl
eEluZGV4ICsgMSkgJSBuVmVydGljZXMpOwotICAgIEZsb2F0UG9pbnQgcHJldlZlcnRleCA9IHZl
cnRleEF0KChtaW5WZXJ0ZXhJbmRleCArIG5WZXJ0aWNlcyAtIDEpICUgblZlcnRpY2VzKTsKLSAg
ICBib29sIGNsb2Nrd2lzZSA9IGRldGVybWluYW50KHZlcnRleEF0KG1pblZlcnRleEluZGV4KSAt
IHByZXZWZXJ0ZXgsIG5leHRWZXJ0ZXggLSBwcmV2VmVydGV4KSA+IDA7Ci0KLSAgICB1bnNpZ25l
ZCBlZGdlSW5kZXggPSAwOwotICAgIHVuc2lnbmVkIHZlcnRleEluZGV4MSA9IDA7Ci0gICAgZG8g
ewotICAgICAgICBtX2JvdW5kaW5nQm94LmV4dGVuZCh2ZXJ0ZXhBdCh2ZXJ0ZXhJbmRleDEpKTsK
LSAgICAgICAgdW5zaWduZWQgdmVydGV4SW5kZXgyID0gZmluZE5leHRFZGdlVmVydGV4SW5kZXgo
dmVydGV4SW5kZXgxLCBjbG9ja3dpc2UpOwotICAgICAgICBtX2VkZ2VzW2VkZ2VJbmRleF0ubV9w
b2x5Z29uID0gdGhpczsKLSAgICAgICAgbV9lZGdlc1tlZGdlSW5kZXhdLm1fdmVydGV4SW5kZXgx
ID0gdmVydGV4SW5kZXgxOwotICAgICAgICBtX2VkZ2VzW2VkZ2VJbmRleF0ubV92ZXJ0ZXhJbmRl
eDIgPSB2ZXJ0ZXhJbmRleDI7Ci0gICAgICAgIG1fZWRnZXNbZWRnZUluZGV4XS5tX2VkZ2VJbmRl
eCA9IGVkZ2VJbmRleDsKLSAgICAgICAgKytlZGdlSW5kZXg7Ci0gICAgICAgIHZlcnRleEluZGV4
MSA9IHZlcnRleEluZGV4MjsKLSAgICB9IHdoaWxlICh2ZXJ0ZXhJbmRleDEpOwotCi0gICAgaWYg
KGVkZ2VJbmRleCA+IDMpIHsKLSAgICAgICAgY29uc3QgRXhjbHVzaW9uUG9seWdvbkVkZ2UmIGZp
cnN0RWRnZSA9IG1fZWRnZXNbMF07Ci0gICAgICAgIGNvbnN0IEV4Y2x1c2lvblBvbHlnb25FZGdl
JiBsYXN0RWRnZSA9IG1fZWRnZXNbZWRnZUluZGV4IC0gMV07Ci0gICAgICAgIGlmIChhcmVDb2xs
aW5lYXJQb2ludHMobGFzdEVkZ2UudmVydGV4MSgpLCBsYXN0RWRnZS52ZXJ0ZXgyKCksIGZpcnN0
RWRnZS52ZXJ0ZXgyKCkpKSB7Ci0gICAgICAgICAgICBtX2VkZ2VzWzBdLm1fdmVydGV4SW5kZXgx
ID0gbGFzdEVkZ2UubV92ZXJ0ZXhJbmRleDE7Ci0gICAgICAgICAgICBlZGdlSW5kZXgtLTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIG1fZWRnZXMucmVzaXplKGVkZ2VJbmRleCk7Ci0gICAgbV9l
bXB0eSA9IG1fZWRnZXMuc2l6ZSgpIDwgMzsKLQotICAgIGlmIChtX2VtcHR5KQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9lZGdlcy5zaXplKCk7ICsr
aSkgewotICAgICAgICBFeGNsdXNpb25Qb2x5Z29uRWRnZSogZWRnZSA9ICZtX2VkZ2VzW2ldOwot
ICAgICAgICBtX2VkZ2VUcmVlLmFkZChFZGdlSW50ZXJ2YWwoZWRnZS0+bWluWSgpLCBlZGdlLT5t
YXhZKCksIGVkZ2UpKTsKLSAgICB9CisgICAgcmV0dXJuICgocG9pbnQueCgpIC0gdmVydGV4MS54
KCkpICogKHZlcnRleDIueSgpIC0gdmVydGV4MS55KCkpKSAtICgodmVydGV4Mi54KCkgLSB2ZXJ0
ZXgxLngoKSkgKiAocG9pbnQueSgpIC0gdmVydGV4MS55KCkpKTsKIH0KIAotc3RhdGljIGJvb2wg
Y29tcHV0ZVhJbnRlcnNlY3Rpb24oY29uc3QgRXhjbHVzaW9uUG9seWdvbkVkZ2UqIGVkZ2VQb2lu
dGVyLCBmbG9hdCB5LCBFZGdlSW50ZXJzZWN0aW9uJiByZXN1bHQpCitzdGF0aWMgYm9vbCBjb21w
dXRlWEludGVyc2VjdGlvbihjb25zdCBGbG9hdFBvbHlnb25FZGdlKiBlZGdlUG9pbnRlciwgZmxv
YXQgeSwgRWRnZUludGVyc2VjdGlvbiYgcmVzdWx0KQogewotICAgIGNvbnN0IEV4Y2x1c2lvblBv
bHlnb25FZGdlJiBlZGdlID0gKmVkZ2VQb2ludGVyOworICAgIGNvbnN0IEZsb2F0UG9seWdvbkVk
Z2UmIGVkZ2UgPSAqZWRnZVBvaW50ZXI7CiAKICAgICBpZiAoZWRnZS5taW5ZKCkgPiB5IHx8IGVk
Z2UubWF4WSgpIDwgeSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTkyLDggKzkzLDggQEAg
c3RhdGljIGlubGluZSBib29sIGdldFZlcnRleEludGVyc2VjdGlvblZlcnRpY2VzKGNvbnN0IEVk
Z2VJbnRlcnNlY3Rpb24mIGludGVyc2UKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgQVNT
RVJUKGludGVyc2VjdGlvbi5lZGdlICYmIGludGVyc2VjdGlvbi5lZGdlLT5wb2x5Z29uKCkpOwot
ICAgIGNvbnN0IEV4Y2x1c2lvblBvbHlnb24mIHBvbHlnb24gPSAqKGludGVyc2VjdGlvbi5lZGdl
LT5wb2x5Z29uKCkpOwotICAgIGNvbnN0IEV4Y2x1c2lvblBvbHlnb25FZGdlJiB0aGlzRWRnZSA9
ICooaW50ZXJzZWN0aW9uLmVkZ2UpOworICAgIGNvbnN0IEZsb2F0UG9seWdvbiYgcG9seWdvbiA9
ICooaW50ZXJzZWN0aW9uLmVkZ2UtPnBvbHlnb24oKSk7CisgICAgY29uc3QgRmxvYXRQb2x5Z29u
RWRnZSYgdGhpc0VkZ2UgPSAqKGludGVyc2VjdGlvbi5lZGdlKTsKIAogICAgIGlmICgoaW50ZXJz
ZWN0aW9uLnR5cGUgPT0gVmVydGV4TWluWSAmJiAodGhpc0VkZ2UudmVydGV4MSgpLnkoKSA8IHRo
aXNFZGdlLnZlcnRleDIoKS55KCkpKQogICAgICAgICB8fCAoaW50ZXJzZWN0aW9uLnR5cGUgPT0g
VmVydGV4TWF4WSAmJiAodGhpc0VkZ2UudmVydGV4MSgpLnkoKSA+IHRoaXNFZGdlLnZlcnRleDIo
KS55KCkpKSkgewpAQCAtMjI2LDE4ICsxMjcsMTggQEAgc3RhdGljIGJvb2wgY29tcGFyZUVkZ2VJ
bnRlcnNlY3Rpb25YKGNvbnN0IEVkZ2VJbnRlcnNlY3Rpb24mIGludGVyc2VjdGlvbjEsIGNvbnMK
ICAgICByZXR1cm4gKHgxID09IHgyKSA/IGludGVyc2VjdGlvbjEudHlwZSA8IGludGVyc2VjdGlv
bjIudHlwZSA6IHgxIDwgeDI7CiB9CiAKLXZvaWQgRXhjbHVzaW9uUG9seWdvbjo6Y29tcHV0ZVhJ
bnRlcnNlY3Rpb25zKGZsb2F0IHksIGJvb2wgaXNNaW5ZLCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2
YWw+JiByZXN1bHQpIGNvbnN0CitzdGF0aWMgdm9pZCBjb21wdXRlWEludGVyc2VjdGlvbnMoY29u
c3QgRmxvYXRQb2x5Z29uJiBwb2x5Z29uLCBmbG9hdCB5LCBib29sIGlzTWluWSwgVmVjdG9yPEV4
Y2x1c2lvbkludGVydmFsPiYgcmVzdWx0KQogewotICAgIFZlY3RvcjxFeGNsdXNpb25Qb2x5Z29u
OjpFZGdlSW50ZXJ2YWw+IG92ZXJsYXBwaW5nRWRnZXM7Ci0gICAgbV9lZGdlVHJlZS5hbGxPdmVy
bGFwcyhFeGNsdXNpb25Qb2x5Z29uOjpFZGdlSW50ZXJ2YWwoeSwgeSwgMCksIG92ZXJsYXBwaW5n
RWRnZXMpOworICAgIFZlY3Rvcjxjb25zdCBGbG9hdFBvbHlnb25FZGdlKj4gZWRnZXM7CisgICAg
aWYgKCFwb2x5Z29uLm92ZXJsYXBwaW5nRWRnZXMoeSwgeSwgZWRnZXMpKQorICAgICAgICByZXR1
cm47CiAKICAgICBWZWN0b3I8RWRnZUludGVyc2VjdGlvbj4gaW50ZXJzZWN0aW9uczsKICAgICBF
ZGdlSW50ZXJzZWN0aW9uIGludGVyc2VjdGlvbjsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgb3ZlcmxhcHBpbmdFZGdlcy5zaXplKCk7ICsraSkgewotICAgICAgICBFeGNsdXNpb25Qb2x5
Z29uRWRnZSogZWRnZSA9IHN0YXRpY19jYXN0PEV4Y2x1c2lvblBvbHlnb25FZGdlKj4ob3Zlcmxh
cHBpbmdFZGdlc1tpXS5kYXRhKCkpOwotICAgICAgICBpZiAoY29tcHV0ZVhJbnRlcnNlY3Rpb24o
ZWRnZSwgeSwgaW50ZXJzZWN0aW9uKSAmJiBpbnRlcnNlY3Rpb24udHlwZSAhPSBWZXJ0ZXhZQm90
aCkKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWRnZXMuc2l6ZSgpOyArK2kpCisgICAg
ICAgIGlmIChjb21wdXRlWEludGVyc2VjdGlvbihlZGdlc1tpXSwgeSwgaW50ZXJzZWN0aW9uKSAm
JiBpbnRlcnNlY3Rpb24udHlwZSAhPSBWZXJ0ZXhZQm90aCkKICAgICAgICAgICAgIGludGVyc2Vj
dGlvbnMuYXBwZW5kKGludGVyc2VjdGlvbik7Ci0gICAgfQorCiAgICAgaWYgKGludGVyc2VjdGlv
bnMuc2l6ZSgpIDwgMikKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNjMsMTAgKzE2NCwxMCBAQCB2
b2lkIEV4Y2x1c2lvblBvbHlnb246OmNvbXB1dGVYSW50ZXJzZWN0aW9ucyhmbG9hdCB5LCBib29s
IGlzTWluWSwgVmVjdG9yPEV4Y2x1cwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAg
ICAgY29uc3QgRXhjbHVzaW9uUG9seWdvbkVkZ2UmIHRoaXNFZGdlID0gKnRoaXNJbnRlcnNlY3Rp
b24uZWRnZTsKKyAgICAgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgdGhpc0VkZ2UgPSAqdGhp
c0ludGVyc2VjdGlvbi5lZGdlOwogICAgICAgICBib29sIGV2ZW5PZGRDcm9zc2luZyA9ICF3aW5k
Q291bnQ7CiAKLSAgICAgICAgaWYgKGZpbGxSdWxlKCkgPT0gUlVMRV9FVkVOT0REKSB7CisgICAg
ICAgIGlmIChwb2x5Z29uLmZpbGxSdWxlKCkgPT0gUlVMRV9FVkVOT0REKSB7CiAgICAgICAgICAg
ICB3aW5kQ291bnQgKz0gKHRoaXNFZGdlLnZlcnRleDIoKS55KCkgPiB0aGlzRWRnZS52ZXJ0ZXgx
KCkueSgpKSA/IDEgOiAtMTsKICAgICAgICAgICAgIGV2ZW5PZGRDcm9zc2luZyA9IGV2ZW5PZGRD
cm9zc2luZyB8fCAhd2luZENvdW50OwogICAgICAgICB9CkBAIC0yOTUsMTUgKzE5NiwxNSBAQCB2
b2lkIEV4Y2x1c2lvblBvbHlnb246OmNvbXB1dGVYSW50ZXJzZWN0aW9ucyhmbG9hdCB5LCBib29s
IGlzTWluWSwgVmVjdG9yPEV4Y2x1cwogICAgIH0KIH0KIAotLy8gUmV0dXJuIHRoZSBYIHByb2pl
Y3Rpb25zIG9mIHRoZSBlZGdlcyB0aGF0IG92ZXJsYXAgeTEseTIuCi12b2lkIEV4Y2x1c2lvblBv
bHlnb246OmNvbXB1dGVFZGdlSW50ZXJzZWN0aW9ucyhmbG9hdCB5MSwgZmxvYXQgeTIsIFZlY3Rv
cjxFeGNsdXNpb25JbnRlcnZhbD4mIHJlc3VsdCkgY29uc3QKK3N0YXRpYyB2b2lkIGNvbXB1dGVP
dmVybGFwcGluZ0VkZ2VYUHJvamVjdGlvbnMoY29uc3QgRmxvYXRQb2x5Z29uJiBwb2x5Z29uLCBm
bG9hdCB5MSwgZmxvYXQgeTIsIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mIHJlc3VsdCkKIHsK
LSAgICBWZWN0b3I8RXhjbHVzaW9uUG9seWdvbjo6RWRnZUludGVydmFsPiBvdmVybGFwcGluZ0Vk
Z2VzOwotICAgIG1fZWRnZVRyZWUuYWxsT3ZlcmxhcHMoRXhjbHVzaW9uUG9seWdvbjo6RWRnZUlu
dGVydmFsKHkxLCB5MiwgMCksIG92ZXJsYXBwaW5nRWRnZXMpOworICAgIFZlY3Rvcjxjb25zdCBG
bG9hdFBvbHlnb25FZGdlKj4gZWRnZXM7CisgICAgaWYgKCFwb2x5Z29uLm92ZXJsYXBwaW5nRWRn
ZXMoeTEsIHkyLCBlZGdlcykpCisgICAgICAgIHJldHVybjsKIAogICAgIEVkZ2VJbnRlcnNlY3Rp
b24gaW50ZXJzZWN0aW9uOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvdmVybGFwcGlu
Z0VkZ2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEV4Y2x1c2lvblBvbHlnb25FZGdl
ICplZGdlID0gc3RhdGljX2Nhc3Q8RXhjbHVzaW9uUG9seWdvbkVkZ2UqPihvdmVybGFwcGluZ0Vk
Z2VzW2ldLmRhdGEoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVkZ2VzLnNpemUo
KTsgKytpKSB7CisgICAgICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UgKmVkZ2UgPSBlZGdlc1tp
XTsKICAgICAgICAgZmxvYXQgeDE7CiAgICAgICAgIGZsb2F0IHgyOwogCkBAIC0zMzgsMTQgKzIz
OSwxNCBAQCB2b2lkIEV4Y2x1c2lvblBvbHlnb246OmdldEV4Y2x1ZGVkSW50ZXJ2YWxzKGZsb2F0
IGxvZ2ljYWxUb3AsIGZsb2F0IGxvZ2ljYWxIZWlnaAogICAgIGZsb2F0IHkyID0geTEgKyBsb2dp
Y2FsSGVpZ2h0OwogCiAgICAgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiB5MVhJbnRlcnZhbHMs
IHkyWEludGVydmFsczsKLSAgICBjb21wdXRlWEludGVyc2VjdGlvbnMoeTEsIHRydWUsIHkxWElu
dGVydmFscyk7Ci0gICAgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKHkyLCBmYWxzZSwgeTJYSW50ZXJ2
YWxzKTsKKyAgICBjb21wdXRlWEludGVyc2VjdGlvbnMobV9wb2x5Z29uLCB5MSwgdHJ1ZSwgeTFY
SW50ZXJ2YWxzKTsKKyAgICBjb21wdXRlWEludGVyc2VjdGlvbnMobV9wb2x5Z29uLCB5MiwgZmFs
c2UsIHkyWEludGVydmFscyk7CiAKICAgICBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+IG1lcmdl
ZEludGVydmFsczsKICAgICBtZXJnZUV4Y2x1c2lvbkludGVydmFscyh5MVhJbnRlcnZhbHMsIHky
WEludGVydmFscywgbWVyZ2VkSW50ZXJ2YWxzKTsKIAogICAgIFZlY3RvcjxFeGNsdXNpb25JbnRl
cnZhbD4gZWRnZUludGVydmFsczsKLSAgICBjb21wdXRlRWRnZUludGVyc2VjdGlvbnMoeTEsIHky
LCBlZGdlSW50ZXJ2YWxzKTsKKyAgICBjb21wdXRlT3ZlcmxhcHBpbmdFZGdlWFByb2plY3Rpb25z
KG1fcG9seWdvbiwgeTEsIHkyLCBlZGdlSW50ZXJ2YWxzKTsKIAogICAgIFZlY3RvcjxFeGNsdXNp
b25JbnRlcnZhbD4gZXhjbHVkZWRJbnRlcnZhbHM7CiAgICAgbWVyZ2VFeGNsdXNpb25JbnRlcnZh
bHMobWVyZ2VkSW50ZXJ2YWxzLCBlZGdlSW50ZXJ2YWxzLCBleGNsdWRlZEludGVydmFscyk7CkBA
IC0zNjUsMTQgKzI2NiwxNCBAQCB2b2lkIEV4Y2x1c2lvblBvbHlnb246OmdldEluY2x1ZGVkSW50
ZXJ2YWxzKGZsb2F0IGxvZ2ljYWxUb3AsIGZsb2F0IGxvZ2ljYWxIZWlnaAogICAgIGZsb2F0IHky
ID0geTEgKyBsb2dpY2FsSGVpZ2h0OwogCiAgICAgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiB5
MVhJbnRlcnZhbHMsIHkyWEludGVydmFsczsKLSAgICBjb21wdXRlWEludGVyc2VjdGlvbnMoeTEs
IHRydWUsIHkxWEludGVydmFscyk7Ci0gICAgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKHkyLCBmYWxz
ZSwgeTJYSW50ZXJ2YWxzKTsKKyAgICBjb21wdXRlWEludGVyc2VjdGlvbnMobV9wb2x5Z29uLCB5
MSwgdHJ1ZSwgeTFYSW50ZXJ2YWxzKTsKKyAgICBjb21wdXRlWEludGVyc2VjdGlvbnMobV9wb2x5
Z29uLCB5MiwgZmFsc2UsIHkyWEludGVydmFscyk7CiAKICAgICBWZWN0b3I8RXhjbHVzaW9uSW50
ZXJ2YWw+IGNvbW1vbkludGVydmFsczsKICAgICBpbnRlcnNlY3RFeGNsdXNpb25JbnRlcnZhbHMo
eTFYSW50ZXJ2YWxzLCB5MlhJbnRlcnZhbHMsIGNvbW1vbkludGVydmFscyk7CiAKICAgICBWZWN0
b3I8RXhjbHVzaW9uSW50ZXJ2YWw+IGVkZ2VJbnRlcnZhbHM7Ci0gICAgY29tcHV0ZUVkZ2VJbnRl
cnNlY3Rpb25zKHkxLCB5MiwgZWRnZUludGVydmFscyk7CisgICAgY29tcHV0ZU92ZXJsYXBwaW5n
RWRnZVhQcm9qZWN0aW9ucyhtX3BvbHlnb24sIHkxLCB5MiwgZWRnZUludGVydmFscyk7CiAKICAg
ICBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+IGluY2x1ZGVkSW50ZXJ2YWxzOwogICAgIHN1YnRy
YWN0RXhjbHVzaW9uSW50ZXJ2YWxzKGNvbW1vbkludGVydmFscywgZWRnZUludGVydmFscywgaW5j
bHVkZWRJbnRlcnZhbHMpOwpAQCAtMzgzLDk4ICsyODQsMTkgQEAgdm9pZCBFeGNsdXNpb25Qb2x5
Z29uOjpnZXRJbmNsdWRlZEludGVydmFscyhmbG9hdCBsb2dpY2FsVG9wLCBmbG9hdCBsb2dpY2Fs
SGVpZ2gKICAgICB9CiB9CiAKLXN0YXRpYyBpbmxpbmUgZmxvYXQgbGVmdFNpZGUoY29uc3QgRmxv
YXRQb2ludCYgdmVydGV4MSwgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MiwgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQpCi17Ci0gICAgcmV0dXJuICgocG9pbnQueCgpIC0gdmVydGV4MS54KCkpICog
KHZlcnRleDIueSgpIC0gdmVydGV4MS55KCkpKSAtICgodmVydGV4Mi54KCkgLSB2ZXJ0ZXgxLngo
KSkgKiAocG9pbnQueSgpIC0gdmVydGV4MS55KCkpKTsKLX0KLQotYm9vbCBFeGNsdXNpb25Qb2x5
Z29uOjpjb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKLXsKLSAgICBpZiAo
IW1fYm91bmRpbmdCb3guY29udGFpbnMocG9pbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpbnQgd2luZGluZ051bWJlciA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG51bWJlck9mRWRnZXMoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRl
eDEgPSBlZGdlQXQoaSkudmVydGV4MSgpOwotICAgICAgICBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0
ZXgyID0gZWRnZUF0KGkpLnZlcnRleDIoKTsKLSAgICAgICAgaWYgKGlzUG9pbnRPbkxpbmVTZWdt
ZW50KHZlcnRleDEsIHZlcnRleDIsIHBvaW50KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICBpZiAodmVydGV4Mi55KCkgPCBwb2ludC55KCkpIHsKLSAgICAgICAgICAgIGlmICgo
dmVydGV4MS55KCkgPiBwb2ludC55KCkpICYmIChsZWZ0U2lkZSh2ZXJ0ZXgxLCB2ZXJ0ZXgyLCBw
b2ludCkgPiAwKSkKLSAgICAgICAgICAgICAgICArK3dpbmRpbmdOdW1iZXI7Ci0gICAgICAgIH0g
ZWxzZSBpZiAodmVydGV4Mi55KCkgPiBwb2ludC55KCkpIHsKLSAgICAgICAgICAgIGlmICgodmVy
dGV4MS55KCkgPD0gcG9pbnQueSgpKSAmJiAobGVmdFNpZGUodmVydGV4MSwgdmVydGV4MiwgcG9p
bnQpIDwgMCkpCi0gICAgICAgICAgICAgICAgLS13aW5kaW5nTnVtYmVyOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHdpbmRpbmdOdW1iZXI7Ci19Ci0KLWJvb2wgVmVydGV4UGFpcjo6
b3ZlcmxhcHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKLXsKLSAgICBib29sIGJv
dW5kc092ZXJsYXAgPSAobWluWCgpIDwgcmVjdC5tYXhYKCkpICYmIChtYXhYKCkgPiByZWN0Lngo
KSkgJiYgKG1pblkoKSA8IHJlY3QubWF4WSgpKSAmJiAobWF4WSgpID4gcmVjdC55KCkpOwotICAg
IGlmICghYm91bmRzT3ZlcmxhcCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZmxvYXQg
bGVmdFNpZGVWYWx1ZXNbNF0gPSB7Ci0gICAgICAgIGxlZnRTaWRlKHZlcnRleDEoKSwgdmVydGV4
MigpLCByZWN0Lm1pblhNaW5ZQ29ybmVyKCkpLAotICAgICAgICBsZWZ0U2lkZSh2ZXJ0ZXgxKCks
IHZlcnRleDIoKSwgcmVjdC5tYXhYTWluWUNvcm5lcigpKSwKLSAgICAgICAgbGVmdFNpZGUodmVy
dGV4MSgpLCB2ZXJ0ZXgyKCksIHJlY3QubWluWE1heFlDb3JuZXIoKSksCi0gICAgICAgIGxlZnRT
aWRlKHZlcnRleDEoKSwgdmVydGV4MigpLCByZWN0Lm1heFhNYXhZQ29ybmVyKCkpCi0gICAgfTsK
LQotICAgIGludCBjdXJyZW50TGVmdFNpZGVTaWduID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgNDsgKytpKSB7Ci0gICAgICAgIGlmICghbGVmdFNpZGVWYWx1ZXNbaV0pCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaW50IGxlZnRTaWRlU2lnbiA9IGxlZnRTaWRlVmFs
dWVzW2ldID4gMCA/IDEgOiAtMTsKLSAgICAgICAgaWYgKCFjdXJyZW50TGVmdFNpZGVTaWduKQot
ICAgICAgICAgICAgY3VycmVudExlZnRTaWRlU2lnbiA9IGxlZnRTaWRlU2lnbjsKLSAgICAgICAg
ZWxzZSBpZiAoY3VycmVudExlZnRTaWRlU2lnbiAhPSBsZWZ0U2lkZVNpZ24pCi0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHN0YXRpYyBp
bmxpbmUgYm9vbCBpc1JlZmxleFZlcnRleChjb25zdCBGbG9hdFBvaW50JiBwcmV2VmVydGV4LCBj
b25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgsIGNvbnN0IEZsb2F0UG9pbnQmIG5leHRWZXJ0ZXgpCiB7
CiAgICAgcmV0dXJuIGxlZnRTaWRlKHByZXZWZXJ0ZXgsIG5leHRWZXJ0ZXgsIHZlcnRleCkgPCAw
OwogfQogCi1ib29sIFZlcnRleFBhaXI6OmludGVyc2VjdGlvbihjb25zdCBWZXJ0ZXhQYWlyJiBv
dGhlciwgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Ci17Ci0gICAgLy8gU2VlOiBodHRwOi8vcGF1
bGJvdXJrZS5uZXQvZ2VvbWV0cnkvcG9pbnRsaW5lcGxhbmUvLCAiSW50ZXJzZWN0aW9uIHBvaW50
IG9mIHR3byBsaW5lcyBpbiAyIGRpbWVuc2lvbnMiCi0KLSAgICBjb25zdCBGbG9hdFNpemUmIHRo
aXNEZWx0YSA9IHZlcnRleDIoKSAtIHZlcnRleDEoKTsKLSAgICBjb25zdCBGbG9hdFNpemUmIG90
aGVyRGVsdGEgPSBvdGhlci52ZXJ0ZXgyKCkgLSBvdGhlci52ZXJ0ZXgxKCk7Ci0gICAgZmxvYXQg
ZGVub21pbmF0b3IgPSBkZXRlcm1pbmFudCh0aGlzRGVsdGEsIG90aGVyRGVsdGEpOwotICAgIGlm
ICghZGVub21pbmF0b3IpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFRoZSB0d28g
bGluZSBzZWdtZW50czogInRoaXMiIHZlcnRleDEsdmVydGV4MiBhbmQgIm90aGVyIiB2ZXJ0ZXgx
LHZlcnRleDIsIGhhdmUgYmVlbiBkZWZpbmVkCi0gICAgLy8gaW4gcGFyYW1ldHJpYyBmb3JtLiBF
YWNoIHBvaW50IG9uIHRoZSBsaW5lIHNlZ21lbnQgaXM6IHZlcnRleDEgKyB1ICogKHZlcnRleDIg
LSB2ZXJ0ZXgxKSwKLSAgICAvLyB3aGVuIDAgPD0gdSA8PSAxLiBXZSdyZSBjb21wdXRpbmcgdGhl
IHZhbHVlcyBvZiB1IGZvciBlYWNoIGxpbmUgYXQgdGhlaXIgaW50ZXJzZWN0aW9uIHBvaW50Lgot
Ci0gICAgY29uc3QgRmxvYXRTaXplJiB2ZXJ0ZXgxRGVsdGEgPSB2ZXJ0ZXgxKCkgLSBvdGhlci52
ZXJ0ZXgxKCk7Ci0gICAgZmxvYXQgdVRoaXNMaW5lID0gZGV0ZXJtaW5hbnQob3RoZXJEZWx0YSwg
dmVydGV4MURlbHRhKSAvIGRlbm9taW5hdG9yOwotICAgIGZsb2F0IHVPdGhlckxpbmUgPSBkZXRl
cm1pbmFudCh0aGlzRGVsdGEsIHZlcnRleDFEZWx0YSkgLyBkZW5vbWluYXRvcjsKLQotICAgIGlm
ICh1VGhpc0xpbmUgPCAwIHx8IHVPdGhlckxpbmUgPCAwIHx8IHVUaGlzTGluZSA+IDEgfHwgdU90
aGVyTGluZSA+IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHBvaW50ID0gdmVydGV4
MSgpICsgdVRoaXNMaW5lICogdGhpc0RlbHRhOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IEV4Y2x1c2lvblBvbHlnb246OmZpcnN0Rml0UmVjdEluUG9seWdvbihjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIHVuc2lnbmVkIG9mZnNldEVkZ2VJbmRleDEsIHVuc2lnbmVkIG9mZnNldEVkZ2VJbmRl
eDIpIGNvbnN0CitzdGF0aWMgaW5saW5lIGJvb2wgZmlyc3RGaXRSZWN0SW5Qb2x5Z29uKGNvbnN0
IEZsb2F0UG9seWdvbiYgcG9seWdvbiwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCB1bnNpZ25lZCBv
ZmZzZXRFZGdlSW5kZXgxLCB1bnNpZ25lZCBvZmZzZXRFZGdlSW5kZXgyKQogewotICAgIFZlY3Rv
cjxFeGNsdXNpb25Qb2x5Z29uOjpFZGdlSW50ZXJ2YWw+IG92ZXJsYXBwaW5nRWRnZXM7Ci0gICAg
bV9lZGdlVHJlZS5hbGxPdmVybGFwcyhFeGNsdXNpb25Qb2x5Z29uOjpFZGdlSW50ZXJ2YWwocmVj
dC55KCksIHJlY3QubWF4WSgpLCAwKSwgb3ZlcmxhcHBpbmdFZGdlcyk7CisgICAgVmVjdG9yPGNv
bnN0IEZsb2F0UG9seWdvbkVkZ2UqPiBlZGdlczsKKyAgICBpZiAoIXBvbHlnb24ub3ZlcmxhcHBp
bmdFZGdlcyhyZWN0LnkoKSwgcmVjdC5tYXhZKCksIGVkZ2VzKSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb3ZlcmxhcHBpbmdFZGdlcy5zaXpl
KCk7ICsraSkgewotICAgICAgICBjb25zdCBFeGNsdXNpb25Qb2x5Z29uRWRnZSogZWRnZSA9IHN0
YXRpY19jYXN0PEV4Y2x1c2lvblBvbHlnb25FZGdlKj4ob3ZlcmxhcHBpbmdFZGdlc1tpXS5kYXRh
KCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlZGdlcy5zaXplKCk7ICsraSkgewor
ICAgICAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdlKiBlZGdlID0gZWRnZXNbaV07CiAgICAgICAg
IGlmIChlZGdlLT5lZGdlSW5kZXgoKSAhPSBvZmZzZXRFZGdlSW5kZXgxICYmIGVkZ2UtPmVkZ2VJ
bmRleCgpICE9IG9mZnNldEVkZ2VJbmRleDIgJiYgZWRnZS0+b3ZlcmxhcHNSZWN0KHJlY3QpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTQ5MywyNCArMzE1LDI1IEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBhYm92ZU9yVG9UaGVMZWZ0KGNvbnN0IEZsb2F0UmVjdCYgcjEsIGNv
bnN0IEZsb2F0UmVjdCYgcjIpCiAKIGJvb2wgRXhjbHVzaW9uUG9seWdvbjo6Zmlyc3RJbmNsdWRl
ZEludGVydmFsTG9naWNhbFRvcChmbG9hdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIGNvbnN0IEZs
b2F0U2l6ZSYgbWluTG9naWNhbEludGVydmFsU2l6ZSwgZmxvYXQmIHJlc3VsdCkgY29uc3QKIHsK
LSAgICBpZiAobWluTG9naWNhbEludGVydmFsU2l6ZS53aWR0aCgpID4gbV9ib3VuZGluZ0JveC53
aWR0aCgpKQorICAgIGNvbnN0IEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IG1fcG9seWdvbi5ib3Vu
ZGluZ0JveCgpOworICAgIGlmIChtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplLndpZHRoKCkgPiBib3Vu
ZGluZ0JveC53aWR0aCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBmbG9hdCBtaW5Z
ID0gc3RkOjptYXgobV9ib3VuZGluZ0JveC55KCksIG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCk7Cisg
ICAgZmxvYXQgbWluWSA9IHN0ZDo6bWF4KGJvdW5kaW5nQm94LnkoKSwgbWluTG9naWNhbEludGVy
dmFsVG9wKTsKICAgICBmbG9hdCBtYXhZID0gbWluWSArIG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUu
aGVpZ2h0KCk7CiAKLSAgICBpZiAobWF4WSA+IG1fYm91bmRpbmdCb3gubWF4WSgpKQorICAgIGlm
IChtYXhZID4gYm91bmRpbmdCb3gubWF4WSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBWZWN0b3I8RXhjbHVzaW9uUG9seWdvbjo6RWRnZUludGVydmFsPiBvdmVybGFwcGluZ0VkZ2Vz
OwotICAgIG1fZWRnZVRyZWUuYWxsT3ZlcmxhcHMoRXhjbHVzaW9uUG9seWdvbjo6RWRnZUludGVy
dmFsKG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwgbV9ib3VuZGluZ0JveC5tYXhZKCksIDApLCBvdmVy
bGFwcGluZ0VkZ2VzKTsKKyAgICBWZWN0b3I8Y29uc3QgRmxvYXRQb2x5Z29uRWRnZSo+IGVkZ2Vz
OworICAgIG1fcG9seWdvbi5vdmVybGFwcGluZ0VkZ2VzKG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwg
Ym91bmRpbmdCb3gubWF4WSgpLCBlZGdlcyk7CiAKICAgICBmbG9hdCBkeCA9IG1pbkxvZ2ljYWxJ
bnRlcnZhbFNpemUud2lkdGgoKSAvIDI7CiAgICAgZmxvYXQgZHkgPSBtaW5Mb2dpY2FsSW50ZXJ2
YWxTaXplLmhlaWdodCgpIC8gMjsKICAgICBWZWN0b3I8T2Zmc2V0UG9seWdvbkVkZ2U+IG9mZnNl
dEVkZ2VzOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG92ZXJsYXBwaW5nRWRnZXMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgRXhjbHVzaW9uUG9seWdvbkVkZ2UmIGVkZ2Ug
PSAqc3RhdGljX2Nhc3Q8RXhjbHVzaW9uUG9seWdvbkVkZ2UqPihvdmVybGFwcGluZ0VkZ2VzW2ld
LmRhdGEoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVkZ2VzLnNpemUoKTsgKytp
KSB7CisgICAgICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIGVkZ2UgPSAqKGVkZ2VzW2ldKTsK
ICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MCA9IGVkZ2UucHJldmlvdXNFZGdlKCku
dmVydGV4MSgpOwogICAgICAgICBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgxID0gZWRnZS52ZXJ0
ZXgxKCk7CiAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDIgPSBlZGdlLnZlcnRleDIo
KTsKQEAgLTU0MCw3ICszNjMsNyBAQCBib29sIEV4Y2x1c2lvblBvbHlnb246OmZpcnN0SW5jbHVk
ZWRJbnRlcnZhbExvZ2ljYWxUb3AoZmxvYXQgbWluTG9naWNhbEludGVydmFsVAogICAgICAgICAg
ICAgICAgIG9mZnNldEVkZ2VzLmFwcGVuZChvZmZzZXRFZGdlQnVmZmVyW2pdKTsKICAgICB9CiAK
LSAgICBvZmZzZXRFZGdlcy5hcHBlbmQoT2Zmc2V0UG9seWdvbkVkZ2UoKnRoaXMsIG1pbkxvZ2lj
YWxJbnRlcnZhbFRvcCwgRmxvYXRTaXplKDAsIGR5KSkpOworICAgIG9mZnNldEVkZ2VzLmFwcGVu
ZChPZmZzZXRQb2x5Z29uRWRnZShtX3BvbHlnb24sIG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwgRmxv
YXRTaXplKDAsIGR5KSkpOwogCiAgICAgRmxvYXRQb2ludCBvZmZzZXRFZGdlc0ludGVyc2VjdGlv
bjsKICAgICBGbG9hdFJlY3QgZmlyc3RGaXRSZWN0OwpAQCAtNTUzLDggKzM3Niw4IEBAIGJvb2wg
RXhjbHVzaW9uUG9seWdvbjo6Zmlyc3RJbmNsdWRlZEludGVydmFsTG9naWNhbFRvcChmbG9hdCBt
aW5Mb2dpY2FsSW50ZXJ2YWxUCiAgICAgICAgICAgICAgICAgRmxvYXRSZWN0IHBvdGVudGlhbEZp
cnN0Rml0UmVjdChwb3RlbnRpYWxGaXJzdEZpdExvY2F0aW9uLCBtaW5Mb2dpY2FsSW50ZXJ2YWxT
aXplKTsKICAgICAgICAgICAgICAgICBpZiAoKHBvdGVudGlhbEZpcnN0Rml0TG9jYXRpb24ueSgp
ID49IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCkKICAgICAgICAgICAgICAgICAgICAgJiYgKCFmaXJz
dEZpdEZvdW5kIHx8IGFib3ZlT3JUb1RoZUxlZnQocG90ZW50aWFsRmlyc3RGaXRSZWN0LCBmaXJz
dEZpdFJlY3QpKQotICAgICAgICAgICAgICAgICAgICAmJiBjb250YWlucyhvZmZzZXRFZGdlc0lu
dGVyc2VjdGlvbikKLSAgICAgICAgICAgICAgICAgICAgJiYgZmlyc3RGaXRSZWN0SW5Qb2x5Z29u
KHBvdGVudGlhbEZpcnN0Rml0UmVjdCwgb2Zmc2V0RWRnZXNbaV0uZWRnZUluZGV4KCksIG9mZnNl
dEVkZ2VzW2pdLmVkZ2VJbmRleCgpKSkgeworICAgICAgICAgICAgICAgICAgICAmJiBtX3BvbHln
b24uY29udGFpbnMob2Zmc2V0RWRnZXNJbnRlcnNlY3Rpb24pCisgICAgICAgICAgICAgICAgICAg
ICYmIGZpcnN0Rml0UmVjdEluUG9seWdvbihtX3BvbHlnb24sIHBvdGVudGlhbEZpcnN0Rml0UmVj
dCwgb2Zmc2V0RWRnZXNbaV0uZWRnZUluZGV4KCksIG9mZnNldEVkZ2VzW2pdLmVkZ2VJbmRleCgp
KSkgewogICAgICAgICAgICAgICAgICAgICBmaXJzdEZpdEZvdW5kID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICAgICAgZmlyc3RGaXRSZWN0ID0gcG90ZW50aWFsRmlyc3RGaXRSZWN0OwogICAgICAg
ICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNp
b25Qb2x5Z29uLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5o
CmluZGV4IDYyZTE5NzEuLmQ0NGE2YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9FeGNsdXNpb25Qb2x5Z29uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4
Y2x1c2lvblBvbHlnb24uaApAQCAtMzMsMTMyICszMywxOCBAQAogI2luY2x1ZGUgIkV4Y2x1c2lv
bkludGVydmFsLmgiCiAjaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGUuaCIKICNpbmNsdWRlICJGbG9h
dFBvaW50LmgiCisjaW5jbHVkZSAiRmxvYXRQb2x5Z29uLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCi0jaW5jbHVkZSAiUE9ESW50ZXJ2YWxUcmVlLmgiCiAjaW5jbHVkZSAiV2luZFJ1bGUuaCIK
LSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBFeGNsdXNpb25Qb2x5Z29uRWRnZTsKLQotLy8gVGhp
cyBjbGFzcyBpcyB1c2VkIGJ5IFBPREludGVydmFsVHJlZSBmb3IgZGVidWdnaW5nLgotI2lmbmRl
ZiBOREVCVUcKLXRlbXBsYXRlIDxjbGFzcz4gc3RydWN0IFZhbHVlVG9TdHJpbmc7Ci0jZW5kaWYK
LQotY2xhc3MgRXhjbHVzaW9uUG9seWdvbiA6IHB1YmxpYyBFeGNsdXNpb25TaGFwZSB7Ci0gICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoRXhjbHVzaW9uUG9seWdvbik7Ci1wdWJsaWM6Ci0gICAgRXhj
bHVzaW9uUG9seWdvbihQYXNzT3duUHRyPFZlY3RvcjxGbG9hdFBvaW50PiA+IHZlcnRpY2VzLCBX
aW5kUnVsZSBmaWxsUnVsZSk7Ci0KLSAgICBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXhBdCh1bnNp
Z25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gKCptX3ZlcnRpY2VzKVtpbmRleF07IH0KLSAgICB1
bnNpZ25lZCBudW1iZXJPZlZlcnRpY2VzKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0aWNlcy0+c2l6
ZSgpOyB9Ci0gICAgV2luZFJ1bGUgZmlsbFJ1bGUoKSBjb25zdCB7IHJldHVybiBtX2ZpbGxSdWxl
OyB9Ci0KLSAgICBjb25zdCBFeGNsdXNpb25Qb2x5Z29uRWRnZSYgZWRnZUF0KHVuc2lnbmVkIGlu
ZGV4KSBjb25zdCB7IHJldHVybiBtX2VkZ2VzW2luZGV4XTsgfQotICAgIHVuc2lnbmVkIG51bWJl
ck9mRWRnZXMoKSBjb25zdCB7IHJldHVybiBtX2VkZ2VzLnNpemUoKTsgfQotCi0gICAgYm9vbCBj
b250YWlucyhjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIEZsb2F0UmVj
dCBzaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fYm91
bmRpbmdCb3g7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0IE9WRVJSSURFIHsg
cmV0dXJuIG1fZW1wdHk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0RXhjbHVkZWRJbnRlcnZhbHMo
ZmxvYXQgbG9naWNhbFRvcCwgZmxvYXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExpc3QmKSBjb25z
dCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0SW5jbHVkZWRJbnRlcnZhbHMoZmxvYXQg
bG9naWNhbFRvcCwgZmxvYXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExpc3QmKSBjb25zdCBPVkVS
UklERTsKLSAgICB2aXJ0dWFsIGJvb2wgZmlyc3RJbmNsdWRlZEludGVydmFsTG9naWNhbFRvcChm
bG9hdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIGNvbnN0IEZsb2F0U2l6ZSYgbWluTG9naWNhbElu
dGVydmFsU2l6ZSwgZmxvYXQmKSBjb25zdCBPVkVSUklERTsKLQotcHJpdmF0ZToKLSAgICB2b2lk
IGNvbXB1dGVYSW50ZXJzZWN0aW9ucyhmbG9hdCB5LCBib29sIGlzTWluWSwgVmVjdG9yPEV4Y2x1
c2lvbkludGVydmFsPiYpIGNvbnN0OwotICAgIHZvaWQgY29tcHV0ZUVkZ2VJbnRlcnNlY3Rpb25z
KGZsb2F0IG1pblksIGZsb2F0IG1heFksIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mKSBjb25z
dDsKLSAgICB1bnNpZ25lZCBmaW5kTmV4dEVkZ2VWZXJ0ZXhJbmRleCh1bnNpZ25lZCB2ZXJ0ZXhJ
bmRleDEsIGJvb2wgY2xvY2t3aXNlKSBjb25zdDsKLSAgICBib29sIGZpcnN0Rml0UmVjdEluUG9s
eWdvbihjb25zdCBGbG9hdFJlY3QmLCB1bnNpZ25lZCBvZmZzZXRFZGdlSW5kZXgxLCB1bnNpZ25l
ZCBvZmZzZXRFZGdlSW5kZXgpIGNvbnN0OwotCi0gICAgdHlwZWRlZiBQT0RJbnRlcnZhbDxmbG9h
dCwgRXhjbHVzaW9uUG9seWdvbkVkZ2UqPiBFZGdlSW50ZXJ2YWw7Ci0gICAgdHlwZWRlZiBQT0RJ
bnRlcnZhbFRyZWU8ZmxvYXQsIEV4Y2x1c2lvblBvbHlnb25FZGdlKj4gRWRnZUludGVydmFsVHJl
ZTsKLQotICAgIE93blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiBtX3ZlcnRpY2VzOwotICAgIFdp
bmRSdWxlIG1fZmlsbFJ1bGU7Ci0gICAgRmxvYXRSZWN0IG1fYm91bmRpbmdCb3g7Ci0gICAgVmVj
dG9yPEV4Y2x1c2lvblBvbHlnb25FZGdlPiBtX2VkZ2VzOwotICAgIEVkZ2VJbnRlcnZhbFRyZWUg
bV9lZGdlVHJlZTsKLSAgICBib29sIG1fZW1wdHk7Ci19OwotCi1jbGFzcyBWZXJ0ZXhQYWlyIHsK
LXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5WZXJ0ZXhQYWlyKCkgeyB9Ci0KLSAgICB2aXJ0dWFsIGNv
bnN0IEZsb2F0UG9pbnQmIHZlcnRleDEoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBjb25zdCBG
bG9hdFBvaW50JiB2ZXJ0ZXgyKCkgY29uc3QgPSAwOwotCi0gICAgZmxvYXQgbWluWCgpIGNvbnN0
IHsgcmV0dXJuIHN0ZDo6bWluKHZlcnRleDEoKS54KCksIHZlcnRleDIoKS54KCkpOyB9Ci0gICAg
ZmxvYXQgbWluWSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWluKHZlcnRleDEoKS55KCksIHZlcnRl
eDIoKS55KCkpOyB9Ci0gICAgZmxvYXQgbWF4WCgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWF4KHZl
cnRleDEoKS54KCksIHZlcnRleDIoKS54KCkpOyB9Ci0gICAgZmxvYXQgbWF4WSgpIGNvbnN0IHsg
cmV0dXJuIHN0ZDo6bWF4KHZlcnRleDEoKS55KCksIHZlcnRleDIoKS55KCkpOyB9Ci0KLSAgICBi
b29sIG92ZXJsYXBzUmVjdChjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKLSAgICBib29sIGludGVy
c2VjdGlvbihjb25zdCBWZXJ0ZXhQYWlyJiwgRmxvYXRQb2ludCYpIGNvbnN0OwotfTsKLQotLy8g
RWRnZUludGVydmFsVHJlZSBub2RlcyBzdG9yZSBtaW5ZLCBtYXhZLCBhbmQgYSAoIlVzZXJEYXRh
IikgcG9pbnRlciB0byBhbiBFeGNsdXNpb25Qb2x5Z29uRWRnZS4gRWRnZSB2ZXJ0ZXgKLS8vIGlu
ZGV4MSBpcyBsZXNzIHRoYW4gaW5kZXgyLCBleGNlcHQgdGhlIGxhc3QgZWRnZSwgd2hlcmUgaW5k
ZXgyIGlzIDAuIFdoZW4gYSBwb2x5Z29uIGVkZ2UgaXMgZGVmaW5lZCBieSAzCi0vLyBvciBtb3Jl
IGNvbGluZWFyIHZlcnRpY2VzLCBpbmRleDIgY2FuIGJlIHRoZSB0aGUgaW5kZXggb2YgdGhlIGxh
c3QgY29saW5lYXIgdmVydGV4LgotY2xhc3MgRXhjbHVzaW9uUG9seWdvbkVkZ2UgOiBwdWJsaWMg
VmVydGV4UGFpciB7Ci0gICAgZnJpZW5kIGNsYXNzIEV4Y2x1c2lvblBvbHlnb247Ci1wdWJsaWM6
Ci0gICAgdmlydHVhbCBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgxKCkgY29uc3QgT1ZFUlJJREUK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3BvbHlnb24pOwotICAgICAgICByZXR1cm4gbV9wb2x5
Z29uLT52ZXJ0ZXhBdChtX3ZlcnRleEluZGV4MSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCBjb25z
dCBGbG9hdFBvaW50JiB2ZXJ0ZXgyKCkgY29uc3QgT1ZFUlJJREUKLSAgICB7Ci0gICAgICAgIEFT
U0VSVChtX3BvbHlnb24pOwotICAgICAgICByZXR1cm4gbV9wb2x5Z29uLT52ZXJ0ZXhBdChtX3Zl
cnRleEluZGV4Mik7Ci0gICAgfQotCi0gICAgY29uc3QgRXhjbHVzaW9uUG9seWdvbkVkZ2UmIHBy
ZXZpb3VzRWRnZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV9wb2x5Z29uICYmIG1f
cG9seWdvbi0+bnVtYmVyT2ZFZGdlcygpID4gMSk7Ci0gICAgICAgIHJldHVybiBtX3BvbHlnb24t
PmVkZ2VBdCgobV9lZGdlSW5kZXggKyBtX3BvbHlnb24tPm51bWJlck9mRWRnZXMoKSAtIDEpICUg
bV9wb2x5Z29uLT5udW1iZXJPZkVkZ2VzKCkpOwotICAgIH0KLQotICAgIGNvbnN0IEV4Y2x1c2lv
blBvbHlnb25FZGdlJiBuZXh0RWRnZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV9w
b2x5Z29uICYmIG1fcG9seWdvbi0+bnVtYmVyT2ZFZGdlcygpID4gMSk7Ci0gICAgICAgIHJldHVy
biBtX3BvbHlnb24tPmVkZ2VBdCgobV9lZGdlSW5kZXggKyAxKSAlIG1fcG9seWdvbi0+bnVtYmVy
T2ZFZGdlcygpKTsKLSAgICB9Ci0KLSAgICBjb25zdCBFeGNsdXNpb25Qb2x5Z29uKiBwb2x5Z29u
KCkgY29uc3QgeyByZXR1cm4gbV9wb2x5Z29uOyB9Ci0gICAgdW5zaWduZWQgdmVydGV4SW5kZXgx
KCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0ZXhJbmRleDE7IH0KLSAgICB1bnNpZ25lZCB2ZXJ0ZXhJ
bmRleDIoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRleEluZGV4MjsgfQotICAgIHVuc2lnbmVkIGVk
Z2VJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fZWRnZUluZGV4OyB9Ci0KLXByaXZhdGU6Ci0gICAg
Y29uc3QgRXhjbHVzaW9uUG9seWdvbiogbV9wb2x5Z29uOwotICAgIHVuc2lnbmVkIG1fdmVydGV4
SW5kZXgxOwotICAgIHVuc2lnbmVkIG1fdmVydGV4SW5kZXgyOwotICAgIHVuc2lnbmVkIG1fZWRn
ZUluZGV4OwotfTsKLQotLy8gVGhlc2Ugc3RydWN0dXJlcyBhcmUgdXNlZCBieSBQT0RJbnRlcnZh
bFRyZWUgZm9yIGRlYnVnZ2luZy4xCi0jaWZuZGVmIE5ERUJVRwotdGVtcGxhdGUgPD4gc3RydWN0
IFZhbHVlVG9TdHJpbmc8ZmxvYXQ+IHsKLSAgICBzdGF0aWMgU3RyaW5nIHN0cmluZyhjb25zdCBm
bG9hdCB2YWx1ZSkgeyByZXR1cm4gU3RyaW5nOjpudW1iZXIodmFsdWUpOyB9Ci19OwotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBWYWx1ZVRvU3RyaW5nPEV4Y2x1c2lvblBvbHlnb25FZGdlKj4gewotICAg
IHN0YXRpYyBTdHJpbmcgc3RyaW5nKGNvbnN0IEV4Y2x1c2lvblBvbHlnb25FZGdlKiBlZGdlKSB7
IHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJXAgKCVmLCVmICVmLCVmKSIsIGVkZ2UsIGVkZ2UtPnZl
cnRleDEoKS54KCksIGVkZ2UtPnZlcnRleDEoKS55KCksIGVkZ2UtPnZlcnRleDIoKS54KCksIGVk
Z2UtPnZlcnRleDIoKS55KCkpOyB9Ci19OwotI2VuZGlmCi0KIGNsYXNzIE9mZnNldFBvbHlnb25F
ZGdlIDogcHVibGljIFZlcnRleFBhaXIgewogcHVibGljOgotICAgIE9mZnNldFBvbHlnb25FZGdl
KGNvbnN0IEV4Y2x1c2lvblBvbHlnb25FZGdlJiBlZGdlLCBjb25zdCBGbG9hdFNpemUmIG9mZnNl
dCkKKyAgICBPZmZzZXRQb2x5Z29uRWRnZShjb25zdCBGbG9hdFBvbHlnb25FZGdlJiBlZGdlLCBj
b25zdCBGbG9hdFNpemUmIG9mZnNldCkKICAgICAgICAgOiBtX3ZlcnRleDEoZWRnZS52ZXJ0ZXgx
KCkgKyBvZmZzZXQpCiAgICAgICAgICwgbV92ZXJ0ZXgyKGVkZ2UudmVydGV4MigpICsgb2Zmc2V0
KQogICAgICAgICAsIG1fZWRnZUluZGV4KGVkZ2UuZWRnZUluZGV4KCkpCkBAIC0xNzIsOSArNTgs
OSBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIE9mZnNldFBvbHlnb25FZGdlKGNvbnN0
IEV4Y2x1c2lvblBvbHlnb24mIHBvbHlnb24sIGZsb2F0IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwg
Y29uc3QgRmxvYXRTaXplJiBvZmZzZXQpCi0gICAgICAgIDogbV92ZXJ0ZXgxKEZsb2F0UG9pbnQo
cG9seWdvbi5zaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpLngoKSwgbWluTG9naWNhbEludGVydmFs
VG9wKSArIG9mZnNldCkKLSAgICAgICAgLCBtX3ZlcnRleDIoRmxvYXRQb2ludChwb2x5Z29uLnNo
YXBlTG9naWNhbEJvdW5kaW5nQm94KCkubWF4WCgpLCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3ApICsg
b2Zmc2V0KQorICAgIE9mZnNldFBvbHlnb25FZGdlKGNvbnN0IEZsb2F0UG9seWdvbiYgcG9seWdv
biwgZmxvYXQgbWluTG9naWNhbEludGVydmFsVG9wLCBjb25zdCBGbG9hdFNpemUmIG9mZnNldCkK
KyAgICAgICAgOiBtX3ZlcnRleDEoRmxvYXRQb2ludChwb2x5Z29uLmJvdW5kaW5nQm94KCkueCgp
LCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3ApICsgb2Zmc2V0KQorICAgICAgICAsIG1fdmVydGV4MihG
bG9hdFBvaW50KHBvbHlnb24uYm91bmRpbmdCb3goKS5tYXhYKCksIG1pbkxvZ2ljYWxJbnRlcnZh
bFRvcCkgKyBvZmZzZXQpCiAgICAgICAgICwgbV9lZGdlSW5kZXgoLTEpCiAgICAgewogICAgIH0K
QEAgLTE4OSw2ICs3NSwyNSBAQCBwcml2YXRlOgogICAgIGludCBtX2VkZ2VJbmRleDsKIH07CiAK
K2NsYXNzIEV4Y2x1c2lvblBvbHlnb24gOiBwdWJsaWMgRXhjbHVzaW9uU2hhcGUgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEV4Y2x1c2lvblBvbHlnb24pOworcHVibGljOgorICAgIEV4Y2x1
c2lvblBvbHlnb24oUGFzc093blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiB2ZXJ0aWNlcywgV2lu
ZFJ1bGUgZmlsbFJ1bGUpCisgICAgICAgIDogRXhjbHVzaW9uU2hhcGUoKQorICAgICAgICAsIG1f
cG9seWdvbih2ZXJ0aWNlcywgZmlsbFJ1bGUpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwg
RmxvYXRSZWN0IHNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1
cm4gbV9wb2x5Z29uLmJvdW5kaW5nQm94KCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fcG9seWdvbi5pc0VtcHR5KCk7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgZ2V0RXhjbHVkZWRJbnRlcnZhbHMoZmxvYXQgbG9naWNhbFRvcCwgZmxvYXQgbG9n
aWNhbEhlaWdodCwgU2VnbWVudExpc3QmKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgZ2V0SW5jbHVkZWRJbnRlcnZhbHMoZmxvYXQgbG9naWNhbFRvcCwgZmxvYXQgbG9naWNhbEhl
aWdodCwgU2VnbWVudExpc3QmKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgZmly
c3RJbmNsdWRlZEludGVydmFsTG9naWNhbFRvcChmbG9hdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3As
IGNvbnN0IEZsb2F0U2l6ZSYgbWluTG9naWNhbEludGVydmFsU2l6ZSwgZmxvYXQmKSBjb25zdCBP
VkVSUklERTsKKworcHJpdmF0ZToKKyAgICBGbG9hdFBvbHlnb24gbV9wb2x5Z29uOworfTsKKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRXhjbHVzaW9uUG9seWdvbl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192284</attachid>
            <date>2013-03-08 14:37:58 -0800</date>
            <delta_ts>2013-03-11 09:00:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>tmp.patch</filename>
            <type>text/plain</type>
            <size>50953</size>
            <attacher name="Hans Muller">giles_joplin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZGU1OGEyYS4uNGIxZmViMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTE5MjAsNiArMTkyMCw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFBvaW50LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQz
RC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvbHlnb24uY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVj
dC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
Y2Y0YjVjZi4uZmQzYmNiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDczIEBACisyMDEzLTAzLTA4
ICBIYW5zIE11bGxlciAgPGhtdWxsZXJAYWRvYmUuY29tPgorCisgICAgICAgIFtDU1MgRXhjbHVz
aW9uc10gUmVmYWN0b3IgdGhlIEV4Y2x1c2lvblBvbHlnb24gY2xhc3MgdG8gZW5hYmxlIHN0b3Jp
bmcgbXVsdGlwbGUgYm91bmRhcmllcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTExNzY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgUmVmYWN0b3JlZCB0aGUgRXhjbHVzaW9uUG9seWdvbiBjbGFzcyB0byBl
bmFibGUgYWRkaW5nIHN1cHBvcnQgZm9yIHNoYXBlLW1hcmdpbiBhbmQgc2hhcGUtcGFkZGluZy4K
KyAgICAgICAgRXh0cmFjdGVkIGEgbmV3IEZsb2F0UG9seWdvbiBjbGFzcyB3aGljaCBpcyBub3cg
dXNlZCBieSBFeGNsdXNpb25Qb2x5Z29uIHRvIHJlcHJlc2VudCB0aGUgc2hhcGUncworICAgICAg
ICBib3VuZGFyeS4gSXQgd2lsbCBiZSB1c2VkIHRvIGFkZCBtX3BhZGRlZFBvbHlnb24gYW5kIG1f
bWFyZ2luUG9seWdvbiBtZW1iZXJzIHRvIEV4Y2x1c2lvblBvbHlnb24KKyAgICAgICAgaW4gYSBz
dWJzZXF1ZW50IHBhdGNoLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyBpcyBzdHJpY3Rs
eSBhIHJlZmFjdG9yaW5nIG9mIHRoZSBleGlzdGluZyBjb2RlLgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJD
b3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UG9seWdvbi5jcHA6IEZhY3RvcmVkIG91dCBvZiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHAuCisgICAgICAgIChXZWJDb3JlOjpk
ZXRlcm1pbmFudCk6CisgICAgICAgIChXZWJDb3JlOjphcmVDb2xsaW5lYXJQb2ludHMpOgorICAg
ICAgICAoV2ViQ29yZTo6YXJlQ29pbmNpZGVudFBvaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpp
c1BvaW50T25MaW5lU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpuZXh0VmVydGV4SW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2x5Z29uOjpGbG9hdFBvbHlnb24pOgorICAgICAg
ICAoV2ViQ29yZTo6RmxvYXRQb2x5Z29uOjpmaW5kTmV4dEVkZ2VWZXJ0ZXhJbmRleCk6CisgICAg
ICAgIChXZWJDb3JlOjpGbG9hdFBvbHlnb246Om92ZXJsYXBwaW5nRWRnZXMpOgorICAgICAgICAo
V2ViQ29yZTo6bGVmdFNpZGUpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2x5Z29uOjpjb250
YWlucyk6CisgICAgICAgIChXZWJDb3JlOjpWZXJ0ZXhQYWlyOjpvdmVybGFwc1JlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6VmVydGV4UGFpcjo6aW50ZXJzZWN0aW9uKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFBvbHlnb24uaDogRmFjdG9yZWQgb3V0IG9mIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmguCisgICAgICAgIChGbG9hdFBvbHlnb24p
OgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2x5Z29uOjp2ZXJ0ZXhBdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGbG9hdFBvbHlnb246Om51bWJlck9mVmVydGljZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6RmxvYXRQb2x5Z29uOjpmaWxsUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFBvbHln
b246OmVkZ2VBdCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFBvbHlnb246Om51bWJlck9mRWRn
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2x5Z29uOjpib3VuZGluZ0JveCk6CisgICAg
ICAgIChXZWJDb3JlOjpGbG9hdFBvbHlnb246OmlzRW1wdHkpOgorICAgICAgICAoVmVydGV4UGFp
cik6CisgICAgICAgIChXZWJDb3JlOjpWZXJ0ZXhQYWlyOjp+VmVydGV4UGFpcik6CisgICAgICAg
IChXZWJDb3JlOjpWZXJ0ZXhQYWlyOjptaW5YKToKKyAgICAgICAgKFdlYkNvcmU6OlZlcnRleFBh
aXI6Om1pblkpOgorICAgICAgICAoV2ViQ29yZTo6VmVydGV4UGFpcjo6bWF4WCk6CisgICAgICAg
IChXZWJDb3JlOjpWZXJ0ZXhQYWlyOjptYXhZKToKKyAgICAgICAgKEZsb2F0UG9seWdvbkVkZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2x5Z29uRWRnZTo6cHJldmlvdXNFZGdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZsb2F0UG9seWdvbkVkZ2U6Om5leHRFZGdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZsb2F0UG9seWdvbkVkZ2U6OnBvbHlnb24pOgorICAgICAgICAoV2ViQ29yZTo6Rmxv
YXRQb2x5Z29uRWRnZTo6dmVydGV4SW5kZXgxKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UG9s
eWdvbkVkZ2U6OnZlcnRleEluZGV4Mik6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFBvbHlnb25F
ZGdlOjplZGdlSW5kZXgpOgorICAgICAgICAqIHJlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNw
cDogTm93IGRlcGVuZHMgb24gRmxvYXRQb2x5Z29uLgorICAgICAgICAoRWRnZUludGVyc2VjdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpsZWZ0U2lkZSk6CisgICAgICAgIChXZWJDb3JlOjpjb21w
dXRlWEludGVyc2VjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpnZXRWZXJ0ZXhJbnRlcnNlY3Rp
b25WZXJ0aWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlWEludGVyc2VjdGlvbnMpOgor
ICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZU92ZXJsYXBwaW5nRWRnZVhQcm9qZWN0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpFeGNsdXNpb25Qb2x5Z29uOjpnZXRFeGNsdWRlZEludGVydmFscyk6
CisgICAgICAgIChXZWJDb3JlOjpFeGNsdXNpb25Qb2x5Z29uOjpnZXRJbmNsdWRlZEludGVydmFs
cyk6CisgICAgICAgIChXZWJDb3JlOjpmaXJzdEZpdFJlY3RJblBvbHlnb24pOgorICAgICAgICAo
V2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbjo6Zmlyc3RJbmNsdWRlZEludGVydmFsTG9naWNhbFRv
cCk6CisgICAgICAgICogcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uaDogTm93IGRlcGVuZHMg
b24gRmxvYXRQb2x5Z29uLgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2V0UG9seWdvbkVkZ2U6Ok9m
ZnNldFBvbHlnb25FZGdlKToKKyAgICAgICAgKEV4Y2x1c2lvblBvbHlnb24pOgorICAgICAgICAo
V2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbjo6RXhjbHVzaW9uUG9seWdvbik6CisKIDIwMTMtMDMt
MDcgIEVtaWwgQSBFa2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtzdWItcGl4
ZWxdIFJvdW5kaW5nIGVycm9yIGluIHRhYmxlIGNlbGwgaGVpZ2h0IGNhbGN1bGF0aW9uIGNhdXNl
cyB1bm5lY2Vzc2FyeSBzY3JvbGxiYXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4
IDlmNDU2ZmQuLjM0OWQ1MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNTU5
MSw2ICs1NTkxLDggQEAgd2ViY29yZV9wbGF0Zm9ybV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuaCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRQb2x5Z29uLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRQb2x5Z29uLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0UXVhZC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVh
ZC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwIFwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9U
YXJnZXQucHJpCmluZGV4IDFiNjU1ZmIuLjI3Nzc5ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMTAwNSw2
ICsxMDA1LDcgQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ3Jvc3NmYWRl
R2VuZXJhdGVkSW1hZ2UuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0Qu
Y3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmNwcCBcCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRQb2x5Z29uLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRRdWFkLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcCBcCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmNwcCBcCkBAIC0yMjMxLDYgKzIyMzIsNyBAQCBI
RUFERVJTICs9IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMu
aCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNELmggXAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0UG9pbnQuaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2x5
Z29uLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oIFwKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFJlY3QuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXpl
LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGZjYzFkYmUuLmZlZGExN2EgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKQEAgLTQ4MTMsNiArNDgxMyw3IEBACiAgICAgICAgIF0sCiAgICAgICAgICd3ZWJjb3JlX3Bs
YXRmb3JtX2dlb21ldHJ5X2ZpbGVzJzogWwogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0UG9pbnQuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBv
bHlnb24uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0Qu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwJywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggZWRkMDAxNS4uZmU4OWZi
NSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAg
LTI5Nzk4LDYgKzI5Nzk4LDE0IEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGbG9hdFBvbHlnb24uY3BwIgor
CQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxh
dGZvcm1cZ3JhcGhpY3NcRmxvYXRQb2x5Z29uLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJ
PEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGbG9hdFF1YWQu
Y3BwIgogCQkJCQk+CiAJCQkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDk2NzlmNjIuLjM4NGY2MjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE5
MjMsNiArMTkyMyw4IEBACiAJCTZFQkYwRTc2MTJBOTg2ODgwMERCMTcwQSAvKiBKU0VYVERyYXdC
dWZmZXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDZFQkYwRTc0MTJBOTg2ODgwMERCMTcwQSAvKiBKU0VYVERyYXdCdWZmZXJzLmNwcCAqLzsgfTsK
IAkJNkVCRjBFNzcxMkE5ODY4ODAwREIxNzA5IC8qIEpTT0VTVGV4dHVyZUZsb2F0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUJGMEU3NTEyQTk4Njg4
MDBEQjE3MDkgLyogSlNPRVNUZXh0dXJlRmxvYXQuaCAqLzsgfTsKIAkJNkVCRjBFNzcxMkE5ODY4
ODAwREIxNzBBIC8qIEpTRVhURHJhd0J1ZmZlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQkYwRTc1MTJBOTg2ODgwMERCMTcwQSAvKiBKU0VYVERy
YXdCdWZmZXJzLmggKi87IH07CisJCTZFQzQ4MEExMTZFQTYzOEEwMEE0OERDQiAvKiBGbG9hdFBv
bHlnb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NkVDNDgwOUYxNkVBNjM4QTAwQTQ4RENCIC8qIEZsb2F0UG9seWdvbi5jcHAgKi87IH07CisJCTZF
QzQ4MEEyMTZFQTYzOEEwMEE0OERDQiAvKiBGbG9hdFBvbHlnb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQzQ4MEEwMTZFQTYzOEEwMEE0OERDQiAv
KiBGbG9hdFBvbHlnb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk2RUQ4NzhDNDE0NzQ5M0Y0MDA0QzM1OTcgLyogUmVuZGVyVGFibGVDYXB0aW9u
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFRDg3
OEMyMTQ3NDkzRjQwMDRDMzU5NyAvKiBSZW5kZXJUYWJsZUNhcHRpb24uY3BwICovOyB9OwogCQk2
RUQ4NzhDNTE0NzQ5M0Y0MDA0QzM1OTcgLyogUmVuZGVyVGFibGVDYXB0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUQ4NzhDMzE0NzQ5M0Y0MDA0
QzM1OTcgLyogUmVuZGVyVGFibGVDYXB0aW9uLmggKi87IH07CiAJCTZFRThBNzcyMTBGODAzRjMw
MDVBNEEyNCAvKiBKU1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVFOEE3NzAxMEY4MDNGMzAwNUE0QTI0IC8q
IEpTV2ViR0xDb250ZXh0QXR0cmlidXRlcy5jcHAgKi87IH07CkBAIC05NDA4LDYgKzk0MTAsOCBA
QAogCQk2RUJGMEU3NDEyQTk4Njg4MDBEQjE3MEEgLyogSlNFWFREcmF3QnVmZmVycy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0VYVERyYXdCdWZmZXJzLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkVCRjBFNzUxMkE5ODY4ODAwREIxNzA5IC8q
IEpTT0VTVGV4dHVyZUZsb2F0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
T0VTVGV4dHVyZUZsb2F0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFQkYwRTc1
MTJBOTg2ODgwMERCMTcwQSAvKiBKU0VYVERyYXdCdWZmZXJzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTRVhURHJhd0J1ZmZlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNkVDNDgwOUYxNkVBNjM4QTAwQTQ4RENCIC8qIEZsb2F0UG9seWdvbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbG9hdFBvbHlnb24uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RUM0ODBBMDE2RUE2MzhBMDBBNDhEQ0IgLyogRmxv
YXRQb2x5Z29uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsb2F0UG9seWdv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RUQ4NzhDMjE0NzQ5M0Y0MDA0QzM1
OTcgLyogUmVuZGVyVGFibGVDYXB0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFJlbmRlclRhYmxlQ2FwdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTZFRDg3OEMzMTQ3NDkzRjQwMDRDMzU5NyAvKiBSZW5kZXJUYWJsZUNhcHRpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyVGFibGVDYXB0aW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFRThBNzcwMTBGODAzRjMwMDVBNEEyNCAvKiBK
U1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTIwNjkxLDYgKzIwNjk1LDggQEAKIAkJCQk2RTY3RDJBODEyODBFOEJEMDA4
NzU4RjcgLyogRXh0ZW5zaW9uczNELmggKi8sCiAJCQkJQjI3NTM1M0EwQjA1MzgxNDAwMkNFNjRG
IC8qIEZsb2F0UG9pbnQuY3BwICovLAogCQkJCUIyNzUzNTNCMEIwNTM4MTQwMDJDRTY0RiAvKiBG
bG9hdFBvaW50LmggKi8sCisJCQkJNkVDNDgwOUYxNkVBNjM4QTAwQTQ4RENCIC8qIEZsb2F0UG9s
eWdvbi5jcHAgKi8sCisJCQkJNkVDNDgwQTAxNkVBNjM4QTAwQTQ4RENCIC8qIEZsb2F0UG9seWdv
bi5oICovLAogCQkJCUIyRTI3QzlEMEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50M0QuY3Bw
ICovLAogCQkJCUIyRTI3QzlFMEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50M0QuaCAqLywK
IAkJCQkwRkQ3MjM4MTBFQzhCRDkzMDBDQTVERDcgLyogRmxvYXRRdWFkLmNwcCAqLywKQEAgLTIz
MjY0LDYgKzIzMjcwLDcgQEAKIAkJCWlzYSA9IFBCWEhlYWRlcnNCdWlsZFBoYXNlOwogCQkJYnVp
bGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCTZFQzQ4MEEyMTZF
QTYzOEEwMEE0OERDQiAvKiBGbG9hdFBvbHlnb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMTE1
RkFCMTY3OTg4Q0QwMDI0OTEzNCAvKiBBYnN0cmFjdERhdGFiYXNlU2VydmVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlGRTlFODlGQzE2RTJEQzA1MDBBOTA4RjggLyogT3JpZ2luTG9jay5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRkU0QUFERUUxNkQyQzM3NDAwMDI2RkZDIC8qIEFic3RyYWN0U1FMU3Rh
dGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTI5ODk1LDYgKzI5OTAyLDcgQEAKIAkJCQk3RTY2
RTIzMzE2RDZFQjZDMDBGN0U3RkYgLyogV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk3RUEzMEY2OTE2REZGRTc1MDAyNTdEMEIgLyogSlNXZWJHTENvbXBy
ZXNzZWRUZXh0dXJlQVRDLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEODI4N0Y2MTZFNEEwMzgw
MDg2QkQwMCAvKiBIaXRUZXN0TG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNkVDNDgw
QTExNkVBNjM4QTAwQTQ4RENCIC8qIEZsb2F0UG9seWdvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9seWdvbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvbHlnb24uY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMDY4NDAKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvbHlnb24uY3BwCkBA
IC0wLDAgKzEsMjM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMg
SW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFCisgKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZs
b2F0UG9seWdvbi5oIgorCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitzdGF0aWMgaW5saW5lIGZsb2F0IGRldGVybWluYW50KGNvbnN0IEZsb2F0
U2l6ZSYgYSwgY29uc3QgRmxvYXRTaXplJiBiKQoreworICAgIHJldHVybiBhLndpZHRoKCkgKiBi
LmhlaWdodCgpIC0gYS5oZWlnaHQoKSAqIGIud2lkdGgoKTsKK30KKworc3RhdGljIGlubGluZSBi
b29sIGFyZUNvbGxpbmVhclBvaW50cyhjb25zdCBGbG9hdFBvaW50JiBwMCwgY29uc3QgRmxvYXRQ
b2ludCYgcDEsIGNvbnN0IEZsb2F0UG9pbnQmIHAyKQoreworICAgIHJldHVybiAhZGV0ZXJtaW5h
bnQocDEgLSBwMCwgcDIgLSBwMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBhcmVDb2luY2lk
ZW50UG9pbnRzKGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50JiBwMSkKK3sK
KyAgICByZXR1cm4gcDAueCgpID09IHAxLngoKSAmJiBwMC55KCkgPT0gcDEueSgpOworfQorCitz
dGF0aWMgaW5saW5lIGJvb2wgaXNQb2ludE9uTGluZVNlZ21lbnQoY29uc3QgRmxvYXRQb2ludCYg
dmVydGV4MSwgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MiwgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQpCit7CisgICAgcmV0dXJuIHBvaW50LngoKSA+PSBzdGQ6Om1pbih2ZXJ0ZXgxLngoKSwgdmVy
dGV4Mi54KCkpCisgICAgICAgICYmIHBvaW50LngoKSA8PSBzdGQ6Om1heCh2ZXJ0ZXgxLngoKSwg
dmVydGV4Mi54KCkpCisgICAgICAgICYmIGFyZUNvbGxpbmVhclBvaW50cyh2ZXJ0ZXgxLCB2ZXJ0
ZXgyLCBwb2ludCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbmV4dFZlcnRleEluZGV4
KHVuc2lnbmVkIHZlcnRleEluZGV4LCB1bnNpZ25lZCBuVmVydGljZXMsIGJvb2wgY2xvY2t3aXNl
KQoreworICAgIHJldHVybiAoKGNsb2Nrd2lzZSkgPyB2ZXJ0ZXhJbmRleCArIDEgOiB2ZXJ0ZXhJ
bmRleCAtIDEgKyBuVmVydGljZXMpICUgblZlcnRpY2VzOworfQorCitzdGF0aWMgdW5zaWduZWQg
ZmluZE5leHRFZGdlVmVydGV4SW5kZXgoY29uc3QgRmxvYXRQb2x5Z29uJiBwb2x5Z29uLCB1bnNp
Z25lZCB2ZXJ0ZXhJbmRleDEsIGJvb2wgY2xvY2t3aXNlKQoreworICAgIHVuc2lnbmVkIG5WZXJ0
aWNlcyA9IHBvbHlnb24ubnVtYmVyT2ZWZXJ0aWNlcygpOworICAgIHVuc2lnbmVkIHZlcnRleElu
ZGV4MiA9IG5leHRWZXJ0ZXhJbmRleCh2ZXJ0ZXhJbmRleDEsIG5WZXJ0aWNlcywgY2xvY2t3aXNl
KTsKKworICAgIHdoaWxlICh2ZXJ0ZXhJbmRleDIgJiYgYXJlQ29pbmNpZGVudFBvaW50cyhwb2x5
Z29uLnZlcnRleEF0KHZlcnRleEluZGV4MSksIHBvbHlnb24udmVydGV4QXQodmVydGV4SW5kZXgy
KSkpCisgICAgICAgIHZlcnRleEluZGV4MiA9IG5leHRWZXJ0ZXhJbmRleCh2ZXJ0ZXhJbmRleDIs
IG5WZXJ0aWNlcywgY2xvY2t3aXNlKTsKKworICAgIHdoaWxlICh2ZXJ0ZXhJbmRleDIpIHsKKyAg
ICAgICAgdW5zaWduZWQgdmVydGV4SW5kZXgzID0gbmV4dFZlcnRleEluZGV4KHZlcnRleEluZGV4
MiwgblZlcnRpY2VzLCBjbG9ja3dpc2UpOworICAgICAgICBpZiAoIWFyZUNvbGxpbmVhclBvaW50
cyhwb2x5Z29uLnZlcnRleEF0KHZlcnRleEluZGV4MSksIHBvbHlnb24udmVydGV4QXQodmVydGV4
SW5kZXgyKSwgcG9seWdvbi52ZXJ0ZXhBdCh2ZXJ0ZXhJbmRleDMpKSkKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB2ZXJ0ZXhJbmRleDIgPSB2ZXJ0ZXhJbmRleDM7CisgICAgfQorCisgICAg
cmV0dXJuIHZlcnRleEluZGV4MjsKK30KKworRmxvYXRQb2x5Z29uOjpGbG9hdFBvbHlnb24oUGFz
c093blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiB2ZXJ0aWNlcywgV2luZFJ1bGUgZmlsbFJ1bGUp
CisgICAgOiBtX3ZlcnRpY2VzKHZlcnRpY2VzKQorICAgICwgbV9maWxsUnVsZShmaWxsUnVsZSkK
K3sKKyAgICB1bnNpZ25lZCBuVmVydGljZXMgPSBudW1iZXJPZlZlcnRpY2VzKCk7CisgICAgbV9l
ZGdlcy5yZXNpemUoblZlcnRpY2VzKTsKKyAgICBtX2VtcHR5ID0gblZlcnRpY2VzIDwgMzsKKwor
ICAgIGlmIChuVmVydGljZXMpCisgICAgICAgIG1fYm91bmRpbmdCb3guc2V0TG9jYXRpb24odmVy
dGV4QXQoMCkpOworCisgICAgaWYgKG1fZW1wdHkpCisgICAgICAgIHJldHVybjsKKworICAgIHVu
c2lnbmVkIG1pblZlcnRleEluZGV4ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwg
blZlcnRpY2VzOyArK2kpIHsKKyAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4ID0gdmVy
dGV4QXQoaSk7CisgICAgICAgIGlmICh2ZXJ0ZXgueSgpIDwgdmVydGV4QXQobWluVmVydGV4SW5k
ZXgpLnkoKSB8fCAodmVydGV4LnkoKSA9PSB2ZXJ0ZXhBdChtaW5WZXJ0ZXhJbmRleCkueSgpICYm
IHZlcnRleC54KCkgPCB2ZXJ0ZXhBdChtaW5WZXJ0ZXhJbmRleCkueCgpKSkKKyAgICAgICAgICAg
IG1pblZlcnRleEluZGV4ID0gaTsKKyAgICB9CisgICAgRmxvYXRQb2ludCBuZXh0VmVydGV4ID0g
dmVydGV4QXQoKG1pblZlcnRleEluZGV4ICsgMSkgJSBuVmVydGljZXMpOworICAgIEZsb2F0UG9p
bnQgcHJldlZlcnRleCA9IHZlcnRleEF0KChtaW5WZXJ0ZXhJbmRleCArIG5WZXJ0aWNlcyAtIDEp
ICUgblZlcnRpY2VzKTsKKyAgICBib29sIGNsb2Nrd2lzZSA9IGRldGVybWluYW50KHZlcnRleEF0
KG1pblZlcnRleEluZGV4KSAtIHByZXZWZXJ0ZXgsIG5leHRWZXJ0ZXggLSBwcmV2VmVydGV4KSA+
IDA7CisKKyAgICB1bnNpZ25lZCBlZGdlSW5kZXggPSAwOworICAgIHVuc2lnbmVkIHZlcnRleElu
ZGV4MSA9IDA7CisgICAgZG8geworICAgICAgICBtX2JvdW5kaW5nQm94LmV4dGVuZCh2ZXJ0ZXhB
dCh2ZXJ0ZXhJbmRleDEpKTsKKyAgICAgICAgdW5zaWduZWQgdmVydGV4SW5kZXgyID0gZmluZE5l
eHRFZGdlVmVydGV4SW5kZXgoKnRoaXMsIHZlcnRleEluZGV4MSwgY2xvY2t3aXNlKTsKKyAgICAg
ICAgbV9lZGdlc1tlZGdlSW5kZXhdLm1fcG9seWdvbiA9IHRoaXM7CisgICAgICAgIG1fZWRnZXNb
ZWRnZUluZGV4XS5tX3ZlcnRleEluZGV4MSA9IHZlcnRleEluZGV4MTsKKyAgICAgICAgbV9lZGdl
c1tlZGdlSW5kZXhdLm1fdmVydGV4SW5kZXgyID0gdmVydGV4SW5kZXgyOworICAgICAgICBtX2Vk
Z2VzW2VkZ2VJbmRleF0ubV9lZGdlSW5kZXggPSBlZGdlSW5kZXg7CisgICAgICAgICsrZWRnZUlu
ZGV4OworICAgICAgICB2ZXJ0ZXhJbmRleDEgPSB2ZXJ0ZXhJbmRleDI7CisgICAgfSB3aGlsZSAo
dmVydGV4SW5kZXgxKTsKKworICAgIGlmIChlZGdlSW5kZXggPiAzKSB7CisgICAgICAgIGNvbnN0
IEZsb2F0UG9seWdvbkVkZ2UmIGZpcnN0RWRnZSA9IG1fZWRnZXNbMF07CisgICAgICAgIGNvbnN0
IEZsb2F0UG9seWdvbkVkZ2UmIGxhc3RFZGdlID0gbV9lZGdlc1tlZGdlSW5kZXggLSAxXTsKKyAg
ICAgICAgaWYgKGFyZUNvbGxpbmVhclBvaW50cyhsYXN0RWRnZS52ZXJ0ZXgxKCksIGxhc3RFZGdl
LnZlcnRleDIoKSwgZmlyc3RFZGdlLnZlcnRleDIoKSkpIHsKKyAgICAgICAgICAgIG1fZWRnZXNb
MF0ubV92ZXJ0ZXhJbmRleDEgPSBsYXN0RWRnZS5tX3ZlcnRleEluZGV4MTsKKyAgICAgICAgICAg
IGVkZ2VJbmRleC0tOworICAgICAgICB9CisgICAgfQorCisgICAgbV9lZGdlcy5yZXNpemUoZWRn
ZUluZGV4KTsKKyAgICBtX2VtcHR5ID0gbV9lZGdlcy5zaXplKCkgPCAzOworCisgICAgaWYgKG1f
ZW1wdHkpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X2VkZ2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgIEZsb2F0UG9seWdvbkVkZ2UqIGVkZ2UgPSAm
bV9lZGdlc1tpXTsKKyAgICAgICAgbV9lZGdlVHJlZS5hZGQoRWRnZUludGVydmFsKGVkZ2UtPm1p
blkoKSwgZWRnZS0+bWF4WSgpLCBlZGdlKSk7CisgICAgfQorfQorCitib29sIEZsb2F0UG9seWdv
bjo6b3ZlcmxhcHBpbmdFZGdlcyhmbG9hdCBtaW5ZLCBmbG9hdCBtYXhZLCBWZWN0b3I8Y29uc3Qg
RmxvYXRQb2x5Z29uRWRnZSo+JiByZXN1bHQpIGNvbnN0Cit7CisgICAgVmVjdG9yPEZsb2F0UG9s
eWdvbjo6RWRnZUludGVydmFsPiBvdmVybGFwcGluZ0VkZ2VJbnRlcnZhbHM7CisgICAgbV9lZGdl
VHJlZS5hbGxPdmVybGFwcyhGbG9hdFBvbHlnb246OkVkZ2VJbnRlcnZhbChtaW5ZLCBtYXhZLCAw
KSwgb3ZlcmxhcHBpbmdFZGdlSW50ZXJ2YWxzKTsKKyAgICB1bnNpZ25lZCBvdmVybGFwcGluZ0Vk
Z2VJbnRlcnZhbHNTaXplID0gb3ZlcmxhcHBpbmdFZGdlSW50ZXJ2YWxzLnNpemUoKTsKKyAgICBy
ZXN1bHQucmVzaXplKG92ZXJsYXBwaW5nRWRnZUludGVydmFsc1NpemUpOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBvdmVybGFwcGluZ0VkZ2VJbnRlcnZhbHNTaXplOyArK2kpIHsKKyAg
ICAgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSogZWRnZSA9IHN0YXRpY19jYXN0PGNvbnN0IEZs
b2F0UG9seWdvbkVkZ2UqPihvdmVybGFwcGluZ0VkZ2VJbnRlcnZhbHNbaV0uZGF0YSgpKTsKKyAg
ICAgICAgQVNTRVJUKGVkZ2UpOworICAgICAgICByZXN1bHRbaV0gPSBlZGdlOworICAgIH0KKyAg
ICByZXR1cm4gb3ZlcmxhcHBpbmdFZGdlSW50ZXJ2YWxzU2l6ZSA+IDA7Cit9CisKK3N0YXRpYyBp
bmxpbmUgZmxvYXQgbGVmdFNpZGUoY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MSwgY29uc3QgRmxv
YXRQb2ludCYgdmVydGV4MiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit7CisgICAgcmV0dXJu
ICgocG9pbnQueCgpIC0gdmVydGV4MS54KCkpICogKHZlcnRleDIueSgpIC0gdmVydGV4MS55KCkp
KSAtICgodmVydGV4Mi54KCkgLSB2ZXJ0ZXgxLngoKSkgKiAocG9pbnQueSgpIC0gdmVydGV4MS55
KCkpKTsKK30KKworYm9vbCBGbG9hdFBvbHlnb246OmNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50KSBjb25zdAoreworICAgIGlmICghbV9ib3VuZGluZ0JveC5jb250YWlucyhwb2ludCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGludCB3aW5kaW5nTnVtYmVyID0gMDsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZFZGdlcygpOyArK2kpIHsKKyAgICAg
ICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MSA9IGVkZ2VBdChpKS52ZXJ0ZXgxKCk7CisgICAg
ICAgIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDIgPSBlZGdlQXQoaSkudmVydGV4MigpOworICAg
ICAgICBpZiAoaXNQb2ludE9uTGluZVNlZ21lbnQodmVydGV4MSwgdmVydGV4MiwgcG9pbnQpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICh2ZXJ0ZXgyLnkoKSA8IHBvaW50
LnkoKSkgeworICAgICAgICAgICAgaWYgKCh2ZXJ0ZXgxLnkoKSA+IHBvaW50LnkoKSkgJiYgKGxl
ZnRTaWRlKHZlcnRleDEsIHZlcnRleDIsIHBvaW50KSA+IDApKQorICAgICAgICAgICAgICAgICsr
d2luZGluZ051bWJlcjsKKyAgICAgICAgfSBlbHNlIGlmICh2ZXJ0ZXgyLnkoKSA+IHBvaW50Lnko
KSkgeworICAgICAgICAgICAgaWYgKCh2ZXJ0ZXgxLnkoKSA8PSBwb2ludC55KCkpICYmIChsZWZ0
U2lkZSh2ZXJ0ZXgxLCB2ZXJ0ZXgyLCBwb2ludCkgPCAwKSkKKyAgICAgICAgICAgICAgICAtLXdp
bmRpbmdOdW1iZXI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gd2luZGluZ051bWJl
cjsKK30KKworYm9vbCBWZXJ0ZXhQYWlyOjpvdmVybGFwc1JlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KSBjb25zdAoreworICAgIGJvb2wgYm91bmRzT3ZlcmxhcCA9IChtaW5YKCkgPCByZWN0Lm1h
eFgoKSkgJiYgKG1heFgoKSA+IHJlY3QueCgpKSAmJiAobWluWSgpIDwgcmVjdC5tYXhZKCkpICYm
IChtYXhZKCkgPiByZWN0LnkoKSk7CisgICAgaWYgKCFib3VuZHNPdmVybGFwKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBmbG9hdCBsZWZ0U2lkZVZhbHVlc1s0XSA9IHsKKyAgICAgICAg
bGVmdFNpZGUodmVydGV4MSgpLCB2ZXJ0ZXgyKCksIHJlY3QubWluWE1pbllDb3JuZXIoKSksCisg
ICAgICAgIGxlZnRTaWRlKHZlcnRleDEoKSwgdmVydGV4MigpLCByZWN0Lm1heFhNaW5ZQ29ybmVy
KCkpLAorICAgICAgICBsZWZ0U2lkZSh2ZXJ0ZXgxKCksIHZlcnRleDIoKSwgcmVjdC5taW5YTWF4
WUNvcm5lcigpKSwKKyAgICAgICAgbGVmdFNpZGUodmVydGV4MSgpLCB2ZXJ0ZXgyKCksIHJlY3Qu
bWF4WE1heFlDb3JuZXIoKSkKKyAgICB9OworCisgICAgaW50IGN1cnJlbnRMZWZ0U2lkZVNpZ24g
PSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCA0OyArK2kpIHsKKyAgICAgICAgaWYg
KCFsZWZ0U2lkZVZhbHVlc1tpXSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpbnQg
bGVmdFNpZGVTaWduID0gbGVmdFNpZGVWYWx1ZXNbaV0gPiAwID8gMSA6IC0xOworICAgICAgICBp
ZiAoIWN1cnJlbnRMZWZ0U2lkZVNpZ24pCisgICAgICAgICAgICBjdXJyZW50TGVmdFNpZGVTaWdu
ID0gbGVmdFNpZGVTaWduOworICAgICAgICBlbHNlIGlmIChjdXJyZW50TGVmdFNpZGVTaWduICE9
IGxlZnRTaWRlU2lnbikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBWZXJ0ZXhQYWlyOjppbnRlcnNlY3Rpb24oY29uc3QgVmVy
dGV4UGFpciYgb3RoZXIsIEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIC8vIFNlZTog
aHR0cDovL3BhdWxib3Vya2UubmV0L2dlb21ldHJ5L3BvaW50bGluZXBsYW5lLywgIkludGVyc2Vj
dGlvbiBwb2ludCBvZiB0d28gbGluZXMgaW4gMiBkaW1lbnNpb25zIgorCisgICAgY29uc3QgRmxv
YXRTaXplJiB0aGlzRGVsdGEgPSB2ZXJ0ZXgyKCkgLSB2ZXJ0ZXgxKCk7CisgICAgY29uc3QgRmxv
YXRTaXplJiBvdGhlckRlbHRhID0gb3RoZXIudmVydGV4MigpIC0gb3RoZXIudmVydGV4MSgpOwor
ICAgIGZsb2F0IGRlbm9taW5hdG9yID0gZGV0ZXJtaW5hbnQodGhpc0RlbHRhLCBvdGhlckRlbHRh
KTsKKyAgICBpZiAoIWRlbm9taW5hdG9yKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAv
LyBUaGUgdHdvIGxpbmUgc2VnbWVudHM6ICJ0aGlzIiB2ZXJ0ZXgxLHZlcnRleDIgYW5kICJvdGhl
ciIgdmVydGV4MSx2ZXJ0ZXgyLCBoYXZlIGJlZW4gZGVmaW5lZAorICAgIC8vIGluIHBhcmFtZXRy
aWMgZm9ybS4gRWFjaCBwb2ludCBvbiB0aGUgbGluZSBzZWdtZW50IGlzOiB2ZXJ0ZXgxICsgdSAq
ICh2ZXJ0ZXgyIC0gdmVydGV4MSksCisgICAgLy8gd2hlbiAwIDw9IHUgPD0gMS4gV2UncmUgY29t
cHV0aW5nIHRoZSB2YWx1ZXMgb2YgdSBmb3IgZWFjaCBsaW5lIGF0IHRoZWlyIGludGVyc2VjdGlv
biBwb2ludC4KKworICAgIGNvbnN0IEZsb2F0U2l6ZSYgdmVydGV4MURlbHRhID0gdmVydGV4MSgp
IC0gb3RoZXIudmVydGV4MSgpOworICAgIGZsb2F0IHVUaGlzTGluZSA9IGRldGVybWluYW50KG90
aGVyRGVsdGEsIHZlcnRleDFEZWx0YSkgLyBkZW5vbWluYXRvcjsKKyAgICBmbG9hdCB1T3RoZXJM
aW5lID0gZGV0ZXJtaW5hbnQodGhpc0RlbHRhLCB2ZXJ0ZXgxRGVsdGEpIC8gZGVub21pbmF0b3I7
CisKKyAgICBpZiAodVRoaXNMaW5lIDwgMCB8fCB1T3RoZXJMaW5lIDwgMCB8fCB1VGhpc0xpbmUg
PiAxIHx8IHVPdGhlckxpbmUgPiAxKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBwb2lu
dCA9IHZlcnRleDEoKSArIHVUaGlzTGluZSAqIHRoaXNEZWx0YTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2x5Z29uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFBvbHlnb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi44ZGVmZTE0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRQb2x5Z29uLmgKQEAgLTAsMCArMSwxNTAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQor
ICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xh
aW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IEZsb2F0UG9seWdvbl9oCisjZGVmaW5lIEZsb2F0UG9seWdvbl9oCisKKyNpbmNsdWRlICJGbG9h
dFBvaW50LmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiUE9ESW50ZXJ2YWxU
cmVlLmgiCisjaW5jbHVkZSAiV2luZFJ1bGUuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmxvYXRQb2x5Z29uRWRnZTsKKworLy8gVGhpcyBj
bGFzcyBpcyB1c2VkIGJ5IFBPREludGVydmFsVHJlZSBmb3IgZGVidWdnaW5nLgorI2lmbmRlZiBO
REVCVUcKK3RlbXBsYXRlIDxjbGFzcz4gc3RydWN0IFZhbHVlVG9TdHJpbmc7CisjZW5kaWYKKwor
Y2xhc3MgRmxvYXRQb2x5Z29uIHsKK3B1YmxpYzoKKyAgICBGbG9hdFBvbHlnb24oUGFzc093blB0
cjxWZWN0b3I8RmxvYXRQb2ludD4gPiB2ZXJ0aWNlcywgV2luZFJ1bGUgZmlsbFJ1bGUpOworCisg
ICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4QXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0
dXJuICgqbV92ZXJ0aWNlcylbaW5kZXhdOyB9CisgICAgdW5zaWduZWQgbnVtYmVyT2ZWZXJ0aWNl
cygpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGljZXMtPnNpemUoKTsgfQorCisgICAgV2luZFJ1bGUg
ZmlsbFJ1bGUoKSBjb25zdCB7IHJldHVybiBtX2ZpbGxSdWxlOyB9CisKKyAgICBjb25zdCBGbG9h
dFBvbHlnb25FZGdlJiBlZGdlQXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fZWRn
ZXNbaW5kZXhdOyB9CisgICAgdW5zaWduZWQgbnVtYmVyT2ZFZGdlcygpIGNvbnN0IHsgcmV0dXJu
IG1fZWRnZXMuc2l6ZSgpOyB9CisKKyAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3goKSBjb25zdCB7
IHJldHVybiBtX2JvdW5kaW5nQm94OyB9CisgICAgYm9vbCBvdmVybGFwcGluZ0VkZ2VzKGZsb2F0
IG1pblksIGZsb2F0IG1heFksIFZlY3Rvcjxjb25zdCBGbG9hdFBvbHlnb25FZGdlKj4mIHJlc3Vs
dCkgY29uc3Q7CisgICAgYm9vbCBjb250YWlucyhjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Cisg
ICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9lbXB0eTsgfQorCitwcml2YXRlOgor
ICAgIHR5cGVkZWYgUE9ESW50ZXJ2YWw8ZmxvYXQsIEZsb2F0UG9seWdvbkVkZ2UqPiBFZGdlSW50
ZXJ2YWw7CisgICAgdHlwZWRlZiBQT0RJbnRlcnZhbFRyZWU8ZmxvYXQsIEZsb2F0UG9seWdvbkVk
Z2UqPiBFZGdlSW50ZXJ2YWxUcmVlOworCisgICAgT3duUHRyPFZlY3RvcjxGbG9hdFBvaW50PiA+
IG1fdmVydGljZXM7CisgICAgV2luZFJ1bGUgbV9maWxsUnVsZTsKKyAgICBGbG9hdFJlY3QgbV9i
b3VuZGluZ0JveDsKKyAgICBib29sIG1fZW1wdHk7CisgICAgVmVjdG9yPEZsb2F0UG9seWdvbkVk
Z2U+IG1fZWRnZXM7CisgICAgRWRnZUludGVydmFsVHJlZSBtX2VkZ2VUcmVlOyAvLyBFYWNoIEVk
Z2VJbnRlcnZhbFRyZWUgbm9kZSBzdG9yZXMgbWluWSwgbWF4WSwgYW5kIGEgKCJVc2VyRGF0YSIp
IHBvaW50ZXIgdG8gYSBGbG9hdFBvbHlnb25FZGdlLgorCit9OworCitjbGFzcyBWZXJ0ZXhQYWly
IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5WZXJ0ZXhQYWlyKCkgeyB9CisKKyAgICB2aXJ0dWFs
IGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDEoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBjb25z
dCBGbG9hdFBvaW50JiB2ZXJ0ZXgyKCkgY29uc3QgPSAwOworCisgICAgZmxvYXQgbWluWCgpIGNv
bnN0IHsgcmV0dXJuIHN0ZDo6bWluKHZlcnRleDEoKS54KCksIHZlcnRleDIoKS54KCkpOyB9Cisg
ICAgZmxvYXQgbWluWSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWluKHZlcnRleDEoKS55KCksIHZl
cnRleDIoKS55KCkpOyB9CisgICAgZmxvYXQgbWF4WCgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWF4
KHZlcnRleDEoKS54KCksIHZlcnRleDIoKS54KCkpOyB9CisgICAgZmxvYXQgbWF4WSgpIGNvbnN0
IHsgcmV0dXJuIHN0ZDo6bWF4KHZlcnRleDEoKS55KCksIHZlcnRleDIoKS55KCkpOyB9CisKKyAg
ICBib29sIG92ZXJsYXBzUmVjdChjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKKyAgICBib29sIGlu
dGVyc2VjdGlvbihjb25zdCBWZXJ0ZXhQYWlyJiwgRmxvYXRQb2ludCYpIGNvbnN0OworfTsKKwor
Y2xhc3MgRmxvYXRQb2x5Z29uRWRnZSA6IHB1YmxpYyBWZXJ0ZXhQYWlyIHsKKyAgICBmcmllbmQg
Y2xhc3MgRmxvYXRQb2x5Z29uOworcHVibGljOgorICAgIHZpcnR1YWwgY29uc3QgRmxvYXRQb2lu
dCYgdmVydGV4MSgpIGNvbnN0IE9WRVJSSURFCisgICAgeworICAgICAgICBBU1NFUlQobV9wb2x5
Z29uKTsKKyAgICAgICAgcmV0dXJuIG1fcG9seWdvbi0+dmVydGV4QXQobV92ZXJ0ZXhJbmRleDEp
OworICAgIH0KKworICAgIHZpcnR1YWwgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MigpIGNvbnN0
IE9WRVJSSURFCisgICAgeworICAgICAgICBBU1NFUlQobV9wb2x5Z29uKTsKKyAgICAgICAgcmV0
dXJuIG1fcG9seWdvbi0+dmVydGV4QXQobV92ZXJ0ZXhJbmRleDIpOworICAgIH0KKworICAgIGNv
bnN0IEZsb2F0UG9seWdvbkVkZ2UmIHByZXZpb3VzRWRnZSgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQobV9wb2x5Z29uICYmIG1fcG9seWdvbi0+bnVtYmVyT2ZFZGdlcygpID4gMSk7Cisg
ICAgICAgIHJldHVybiBtX3BvbHlnb24tPmVkZ2VBdCgobV9lZGdlSW5kZXggKyBtX3BvbHlnb24t
Pm51bWJlck9mRWRnZXMoKSAtIDEpICUgbV9wb2x5Z29uLT5udW1iZXJPZkVkZ2VzKCkpOworICAg
IH0KKworICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIG5leHRFZGdlKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX3BvbHlnb24gJiYgbV9wb2x5Z29uLT5udW1iZXJPZkVkZ2VzKCkg
PiAxKTsKKyAgICAgICAgcmV0dXJuIG1fcG9seWdvbi0+ZWRnZUF0KChtX2VkZ2VJbmRleCArIDEp
ICUgbV9wb2x5Z29uLT5udW1iZXJPZkVkZ2VzKCkpOworICAgIH0KKworICAgIGNvbnN0IEZsb2F0
UG9seWdvbiogcG9seWdvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9seWdvbjsgfQorICAgIHVuc2ln
bmVkIHZlcnRleEluZGV4MSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGV4SW5kZXgxOyB9CisgICAg
dW5zaWduZWQgdmVydGV4SW5kZXgyKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0ZXhJbmRleDI7IH0K
KyAgICB1bnNpZ25lZCBlZGdlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2VkZ2VJbmRleDsgfQor
Citwcml2YXRlOgorICAgIC8vIEVkZ2UgdmVydGV4IGluZGV4MSBpcyBsZXNzIHRoYW4gaW5kZXgy
LCBleGNlcHQgdGhlIGxhc3QgZWRnZSwgd2hlcmUgaW5kZXgyIGlzIDAuIFdoZW4gYSBwb2x5Z29u
IGVkZ2UKKyAgICAvLyBpcyBkZWZpbmVkIGJ5IDMgb3IgbW9yZSBjb2xpbmVhciB2ZXJ0aWNlcywg
aW5kZXgyIGNhbiBiZSB0aGUgdGhlIGluZGV4IG9mIHRoZSBsYXN0IGNvbGluZWFyIHZlcnRleC4K
KyAgICB1bnNpZ25lZCBtX3ZlcnRleEluZGV4MTsKKyAgICB1bnNpZ25lZCBtX3ZlcnRleEluZGV4
MjsKKyAgICB1bnNpZ25lZCBtX2VkZ2VJbmRleDsKKyAgICBjb25zdCBGbG9hdFBvbHlnb24qIG1f
cG9seWdvbjsKK307CisKKy8vIFRoZXNlIHN0cnVjdHVyZXMgYXJlIHVzZWQgYnkgUE9ESW50ZXJ2
YWxUcmVlIGZvciBkZWJ1Z2dpbmcuCisjaWZuZGVmIE5ERUJVRwordGVtcGxhdGUgPD4gc3RydWN0
IFZhbHVlVG9TdHJpbmc8ZmxvYXQ+IHsKKyAgICBzdGF0aWMgU3RyaW5nIHN0cmluZyhjb25zdCBm
bG9hdCB2YWx1ZSkgeyByZXR1cm4gU3RyaW5nOjpudW1iZXIodmFsdWUpOyB9Cit9OworCit0ZW1w
bGF0ZTw+IHN0cnVjdCBWYWx1ZVRvU3RyaW5nPEZsb2F0UG9seWdvbkVkZ2UqPiB7CisgICAgc3Rh
dGljIFN0cmluZyBzdHJpbmcoY29uc3QgRmxvYXRQb2x5Z29uRWRnZSogZWRnZSkgeyByZXR1cm4g
U3RyaW5nOjpmb3JtYXQoIiVwICglZiwlZiAlZiwlZikiLCBlZGdlLCBlZGdlLT52ZXJ0ZXgxKCku
eCgpLCBlZGdlLT52ZXJ0ZXgxKCkueSgpLCBlZGdlLT52ZXJ0ZXgyKCkueCgpLCBlZGdlLT52ZXJ0
ZXgyKCkueSgpKTsgfQorfTsKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBGbG9hdFBvbHlnb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0V4Y2x1c2lvblBvbHlnb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1
c2lvblBvbHlnb24uY3BwCmluZGV4IDEwNjBjMjAuLjVmNTlkYzAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHAKQEAgLTQyLDExOCArNDIsMTkgQEAg
ZW51bSBFZGdlSW50ZXJzZWN0aW9uVHlwZSB7CiB9OwogCiBzdHJ1Y3QgRWRnZUludGVyc2VjdGlv
biB7Ci0gICAgY29uc3QgRXhjbHVzaW9uUG9seWdvbkVkZ2UqIGVkZ2U7CisgICAgY29uc3QgRmxv
YXRQb2x5Z29uRWRnZSogZWRnZTsKICAgICBGbG9hdFBvaW50IHBvaW50OwogICAgIEVkZ2VJbnRl
cnNlY3Rpb25UeXBlIHR5cGU7CiB9OwogCi1zdGF0aWMgaW5saW5lIGZsb2F0IGRldGVybWluYW50
KGNvbnN0IEZsb2F0U2l6ZSYgYSwgY29uc3QgRmxvYXRTaXplJiBiKQotewotICAgIHJldHVybiBh
LndpZHRoKCkgKiBiLmhlaWdodCgpIC0gYS5oZWlnaHQoKSAqIGIud2lkdGgoKTsKLX0KLQotc3Rh
dGljIGlubGluZSBib29sIGFyZUNvbGxpbmVhclBvaW50cyhjb25zdCBGbG9hdFBvaW50JiBwMCwg
Y29uc3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0UG9pbnQmIHAyKQotewotICAgIHJldHVy
biAhZGV0ZXJtaW5hbnQocDEgLSBwMCwgcDIgLSBwMCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9v
bCBhcmVDb2luY2lkZW50UG9pbnRzKGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBv
aW50JiBwMSkKLXsKLSAgICByZXR1cm4gcDAueCgpID09IHAxLngoKSAmJiBwMC55KCkgPT0gcDEu
eSgpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNQb2ludE9uTGluZVNlZ21lbnQoY29uc3Qg
RmxvYXRQb2ludCYgdmVydGV4MSwgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MiwgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQpCi17Ci0gICAgcmV0dXJuIHBvaW50LngoKSA+PSBzdGQ6Om1pbih2ZXJ0
ZXgxLngoKSwgdmVydGV4Mi54KCkpCi0gICAgICAgICYmIHBvaW50LngoKSA8PSBzdGQ6Om1heCh2
ZXJ0ZXgxLngoKSwgdmVydGV4Mi54KCkpCi0gICAgICAgICYmIGFyZUNvbGxpbmVhclBvaW50cyh2
ZXJ0ZXgxLCB2ZXJ0ZXgyLCBwb2ludCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbmV4
dFZlcnRleEluZGV4KHVuc2lnbmVkIHZlcnRleEluZGV4LCB1bnNpZ25lZCBuVmVydGljZXMsIGJv
b2wgY2xvY2t3aXNlKQotewotICAgIHJldHVybiAoKGNsb2Nrd2lzZSkgPyB2ZXJ0ZXhJbmRleCAr
IDEgOiB2ZXJ0ZXhJbmRleCAtIDEgKyBuVmVydGljZXMpICUgblZlcnRpY2VzOwotfQotCi11bnNp
Z25lZCBFeGNsdXNpb25Qb2x5Z29uOjpmaW5kTmV4dEVkZ2VWZXJ0ZXhJbmRleCh1bnNpZ25lZCB2
ZXJ0ZXhJbmRleDEsIGJvb2wgY2xvY2t3aXNlKSBjb25zdAotewotICAgIHVuc2lnbmVkIG5WZXJ0
aWNlcyA9IG51bWJlck9mVmVydGljZXMoKTsKLSAgICB1bnNpZ25lZCB2ZXJ0ZXhJbmRleDIgPSBu
ZXh0VmVydGV4SW5kZXgodmVydGV4SW5kZXgxLCBuVmVydGljZXMsIGNsb2Nrd2lzZSk7Ci0KLSAg
ICB3aGlsZSAodmVydGV4SW5kZXgyICYmIGFyZUNvaW5jaWRlbnRQb2ludHModmVydGV4QXQodmVy
dGV4SW5kZXgxKSwgdmVydGV4QXQodmVydGV4SW5kZXgyKSkpCi0gICAgICAgIHZlcnRleEluZGV4
MiA9IG5leHRWZXJ0ZXhJbmRleCh2ZXJ0ZXhJbmRleDIsIG5WZXJ0aWNlcywgY2xvY2t3aXNlKTsK
LQotICAgIHdoaWxlICh2ZXJ0ZXhJbmRleDIpIHsKLSAgICAgICAgdW5zaWduZWQgdmVydGV4SW5k
ZXgzID0gbmV4dFZlcnRleEluZGV4KHZlcnRleEluZGV4MiwgblZlcnRpY2VzLCBjbG9ja3dpc2Up
OwotICAgICAgICBpZiAoIWFyZUNvbGxpbmVhclBvaW50cyh2ZXJ0ZXhBdCh2ZXJ0ZXhJbmRleDEp
LCB2ZXJ0ZXhBdCh2ZXJ0ZXhJbmRleDIpLCB2ZXJ0ZXhBdCh2ZXJ0ZXhJbmRleDMpKSkKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB2ZXJ0ZXhJbmRleDIgPSB2ZXJ0ZXhJbmRleDM7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHZlcnRleEluZGV4MjsKLX0KLQotRXhjbHVzaW9uUG9seWdvbjo6RXhj
bHVzaW9uUG9seWdvbihQYXNzT3duUHRyPFZlY3RvcjxGbG9hdFBvaW50PiA+IHZlcnRpY2VzLCBX
aW5kUnVsZSBmaWxsUnVsZSkKLSAgICA6IEV4Y2x1c2lvblNoYXBlKCkKLSAgICAsIG1fdmVydGlj
ZXModmVydGljZXMpCi0gICAgLCBtX2ZpbGxSdWxlKGZpbGxSdWxlKQorc3RhdGljIGlubGluZSBm
bG9hdCBsZWZ0U2lkZShjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgxLCBjb25zdCBGbG9hdFBvaW50
JiB2ZXJ0ZXgyLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKIHsKLSAgICB1bnNpZ25lZCBuVmVy
dGljZXMgPSBudW1iZXJPZlZlcnRpY2VzKCk7Ci0gICAgbV9lZGdlcy5yZXNpemUoblZlcnRpY2Vz
KTsKLSAgICBtX2VtcHR5ID0gblZlcnRpY2VzIDwgMzsKLQotICAgIGlmIChuVmVydGljZXMpCi0g
ICAgICAgIG1fYm91bmRpbmdCb3guc2V0TG9jYXRpb24odmVydGV4QXQoMCkpOwotCi0gICAgaWYg
KG1fZW1wdHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVkIG1pblZlcnRleEluZGV4
ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgblZlcnRpY2VzOyArK2kpIHsKLSAg
ICAgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4ID0gdmVydGV4QXQoaSk7Ci0gICAgICAgIGlm
ICh2ZXJ0ZXgueSgpIDwgdmVydGV4QXQobWluVmVydGV4SW5kZXgpLnkoKSB8fCAodmVydGV4Lnko
KSA9PSB2ZXJ0ZXhBdChtaW5WZXJ0ZXhJbmRleCkueSgpICYmIHZlcnRleC54KCkgPCB2ZXJ0ZXhB
dChtaW5WZXJ0ZXhJbmRleCkueCgpKSkKLSAgICAgICAgICAgIG1pblZlcnRleEluZGV4ID0gaTsK
LSAgICB9Ci0gICAgRmxvYXRQb2ludCBuZXh0VmVydGV4ID0gdmVydGV4QXQoKG1pblZlcnRleElu
ZGV4ICsgMSkgJSBuVmVydGljZXMpOwotICAgIEZsb2F0UG9pbnQgcHJldlZlcnRleCA9IHZlcnRl
eEF0KChtaW5WZXJ0ZXhJbmRleCArIG5WZXJ0aWNlcyAtIDEpICUgblZlcnRpY2VzKTsKLSAgICBi
b29sIGNsb2Nrd2lzZSA9IGRldGVybWluYW50KHZlcnRleEF0KG1pblZlcnRleEluZGV4KSAtIHBy
ZXZWZXJ0ZXgsIG5leHRWZXJ0ZXggLSBwcmV2VmVydGV4KSA+IDA7Ci0KLSAgICB1bnNpZ25lZCBl
ZGdlSW5kZXggPSAwOwotICAgIHVuc2lnbmVkIHZlcnRleEluZGV4MSA9IDA7Ci0gICAgZG8gewot
ICAgICAgICBtX2JvdW5kaW5nQm94LmV4dGVuZCh2ZXJ0ZXhBdCh2ZXJ0ZXhJbmRleDEpKTsKLSAg
ICAgICAgdW5zaWduZWQgdmVydGV4SW5kZXgyID0gZmluZE5leHRFZGdlVmVydGV4SW5kZXgodmVy
dGV4SW5kZXgxLCBjbG9ja3dpc2UpOwotICAgICAgICBtX2VkZ2VzW2VkZ2VJbmRleF0ubV9wb2x5
Z29uID0gdGhpczsKLSAgICAgICAgbV9lZGdlc1tlZGdlSW5kZXhdLm1fdmVydGV4SW5kZXgxID0g
dmVydGV4SW5kZXgxOwotICAgICAgICBtX2VkZ2VzW2VkZ2VJbmRleF0ubV92ZXJ0ZXhJbmRleDIg
PSB2ZXJ0ZXhJbmRleDI7Ci0gICAgICAgIG1fZWRnZXNbZWRnZUluZGV4XS5tX2VkZ2VJbmRleCA9
IGVkZ2VJbmRleDsKLSAgICAgICAgKytlZGdlSW5kZXg7Ci0gICAgICAgIHZlcnRleEluZGV4MSA9
IHZlcnRleEluZGV4MjsKLSAgICB9IHdoaWxlICh2ZXJ0ZXhJbmRleDEpOwotCi0gICAgaWYgKGVk
Z2VJbmRleCA+IDMpIHsKLSAgICAgICAgY29uc3QgRXhjbHVzaW9uUG9seWdvbkVkZ2UmIGZpcnN0
RWRnZSA9IG1fZWRnZXNbMF07Ci0gICAgICAgIGNvbnN0IEV4Y2x1c2lvblBvbHlnb25FZGdlJiBs
YXN0RWRnZSA9IG1fZWRnZXNbZWRnZUluZGV4IC0gMV07Ci0gICAgICAgIGlmIChhcmVDb2xsaW5l
YXJQb2ludHMobGFzdEVkZ2UudmVydGV4MSgpLCBsYXN0RWRnZS52ZXJ0ZXgyKCksIGZpcnN0RWRn
ZS52ZXJ0ZXgyKCkpKSB7Ci0gICAgICAgICAgICBtX2VkZ2VzWzBdLm1fdmVydGV4SW5kZXgxID0g
bGFzdEVkZ2UubV92ZXJ0ZXhJbmRleDE7Ci0gICAgICAgICAgICBlZGdlSW5kZXgtLTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIG1fZWRnZXMucmVzaXplKGVkZ2VJbmRleCk7Ci0gICAgbV9lbXB0
eSA9IG1fZWRnZXMuc2l6ZSgpIDwgMzsKLQotICAgIGlmIChtX2VtcHR5KQotICAgICAgICByZXR1
cm47Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9lZGdlcy5zaXplKCk7ICsraSkg
ewotICAgICAgICBFeGNsdXNpb25Qb2x5Z29uRWRnZSogZWRnZSA9ICZtX2VkZ2VzW2ldOwotICAg
ICAgICBtX2VkZ2VUcmVlLmFkZChFZGdlSW50ZXJ2YWwoZWRnZS0+bWluWSgpLCBlZGdlLT5tYXhZ
KCksIGVkZ2UpKTsKLSAgICB9CisgICAgcmV0dXJuICgocG9pbnQueCgpIC0gdmVydGV4MS54KCkp
ICogKHZlcnRleDIueSgpIC0gdmVydGV4MS55KCkpKSAtICgodmVydGV4Mi54KCkgLSB2ZXJ0ZXgx
LngoKSkgKiAocG9pbnQueSgpIC0gdmVydGV4MS55KCkpKTsKIH0KIAotc3RhdGljIGJvb2wgY29t
cHV0ZVhJbnRlcnNlY3Rpb24oY29uc3QgRXhjbHVzaW9uUG9seWdvbkVkZ2UqIGVkZ2VQb2ludGVy
LCBmbG9hdCB5LCBFZGdlSW50ZXJzZWN0aW9uJiByZXN1bHQpCitzdGF0aWMgYm9vbCBjb21wdXRl
WEludGVyc2VjdGlvbihjb25zdCBGbG9hdFBvbHlnb25FZGdlKiBlZGdlUG9pbnRlciwgZmxvYXQg
eSwgRWRnZUludGVyc2VjdGlvbiYgcmVzdWx0KQogewotICAgIGNvbnN0IEV4Y2x1c2lvblBvbHln
b25FZGdlJiBlZGdlID0gKmVkZ2VQb2ludGVyOworICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2Um
IGVkZ2UgPSAqZWRnZVBvaW50ZXI7CiAKICAgICBpZiAoZWRnZS5taW5ZKCkgPiB5IHx8IGVkZ2Uu
bWF4WSgpIDwgeSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTkyLDggKzkzLDggQEAgc3Rh
dGljIGlubGluZSBib29sIGdldFZlcnRleEludGVyc2VjdGlvblZlcnRpY2VzKGNvbnN0IEVkZ2VJ
bnRlcnNlY3Rpb24mIGludGVyc2UKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgQVNTRVJU
KGludGVyc2VjdGlvbi5lZGdlICYmIGludGVyc2VjdGlvbi5lZGdlLT5wb2x5Z29uKCkpOwotICAg
IGNvbnN0IEV4Y2x1c2lvblBvbHlnb24mIHBvbHlnb24gPSAqKGludGVyc2VjdGlvbi5lZGdlLT5w
b2x5Z29uKCkpOwotICAgIGNvbnN0IEV4Y2x1c2lvblBvbHlnb25FZGdlJiB0aGlzRWRnZSA9ICoo
aW50ZXJzZWN0aW9uLmVkZ2UpOworICAgIGNvbnN0IEZsb2F0UG9seWdvbiYgcG9seWdvbiA9ICoo
aW50ZXJzZWN0aW9uLmVkZ2UtPnBvbHlnb24oKSk7CisgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRn
ZSYgdGhpc0VkZ2UgPSAqKGludGVyc2VjdGlvbi5lZGdlKTsKIAogICAgIGlmICgoaW50ZXJzZWN0
aW9uLnR5cGUgPT0gVmVydGV4TWluWSAmJiAodGhpc0VkZ2UudmVydGV4MSgpLnkoKSA8IHRoaXNF
ZGdlLnZlcnRleDIoKS55KCkpKQogICAgICAgICB8fCAoaW50ZXJzZWN0aW9uLnR5cGUgPT0gVmVy
dGV4TWF4WSAmJiAodGhpc0VkZ2UudmVydGV4MSgpLnkoKSA+IHRoaXNFZGdlLnZlcnRleDIoKS55
KCkpKSkgewpAQCAtMjI2LDE4ICsxMjcsMTggQEAgc3RhdGljIGJvb2wgY29tcGFyZUVkZ2VJbnRl
cnNlY3Rpb25YKGNvbnN0IEVkZ2VJbnRlcnNlY3Rpb24mIGludGVyc2VjdGlvbjEsIGNvbnMKICAg
ICByZXR1cm4gKHgxID09IHgyKSA/IGludGVyc2VjdGlvbjEudHlwZSA8IGludGVyc2VjdGlvbjIu
dHlwZSA6IHgxIDwgeDI7CiB9CiAKLXZvaWQgRXhjbHVzaW9uUG9seWdvbjo6Y29tcHV0ZVhJbnRl
cnNlY3Rpb25zKGZsb2F0IHksIGJvb2wgaXNNaW5ZLCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+
JiByZXN1bHQpIGNvbnN0CitzdGF0aWMgdm9pZCBjb21wdXRlWEludGVyc2VjdGlvbnMoY29uc3Qg
RmxvYXRQb2x5Z29uJiBwb2x5Z29uLCBmbG9hdCB5LCBib29sIGlzTWluWSwgVmVjdG9yPEV4Y2x1
c2lvbkludGVydmFsPiYgcmVzdWx0KQogewotICAgIFZlY3RvcjxFeGNsdXNpb25Qb2x5Z29uOjpF
ZGdlSW50ZXJ2YWw+IG92ZXJsYXBwaW5nRWRnZXM7Ci0gICAgbV9lZGdlVHJlZS5hbGxPdmVybGFw
cyhFeGNsdXNpb25Qb2x5Z29uOjpFZGdlSW50ZXJ2YWwoeSwgeSwgMCksIG92ZXJsYXBwaW5nRWRn
ZXMpOworICAgIFZlY3Rvcjxjb25zdCBGbG9hdFBvbHlnb25FZGdlKj4gZWRnZXM7CisgICAgaWYg
KCFwb2x5Z29uLm92ZXJsYXBwaW5nRWRnZXMoeSwgeSwgZWRnZXMpKQorICAgICAgICByZXR1cm47
CiAKICAgICBWZWN0b3I8RWRnZUludGVyc2VjdGlvbj4gaW50ZXJzZWN0aW9uczsKICAgICBFZGdl
SW50ZXJzZWN0aW9uIGludGVyc2VjdGlvbjsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
b3ZlcmxhcHBpbmdFZGdlcy5zaXplKCk7ICsraSkgewotICAgICAgICBFeGNsdXNpb25Qb2x5Z29u
RWRnZSogZWRnZSA9IHN0YXRpY19jYXN0PEV4Y2x1c2lvblBvbHlnb25FZGdlKj4ob3ZlcmxhcHBp
bmdFZGdlc1tpXS5kYXRhKCkpOwotICAgICAgICBpZiAoY29tcHV0ZVhJbnRlcnNlY3Rpb24oZWRn
ZSwgeSwgaW50ZXJzZWN0aW9uKSAmJiBpbnRlcnNlY3Rpb24udHlwZSAhPSBWZXJ0ZXhZQm90aCkK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWRnZXMuc2l6ZSgpOyArK2kpCisgICAgICAg
IGlmIChjb21wdXRlWEludGVyc2VjdGlvbihlZGdlc1tpXSwgeSwgaW50ZXJzZWN0aW9uKSAmJiBp
bnRlcnNlY3Rpb24udHlwZSAhPSBWZXJ0ZXhZQm90aCkKICAgICAgICAgICAgIGludGVyc2VjdGlv
bnMuYXBwZW5kKGludGVyc2VjdGlvbik7Ci0gICAgfQorCiAgICAgaWYgKGludGVyc2VjdGlvbnMu
c2l6ZSgpIDwgMikKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNjMsMTAgKzE2NCwxMCBAQCB2b2lk
IEV4Y2x1c2lvblBvbHlnb246OmNvbXB1dGVYSW50ZXJzZWN0aW9ucyhmbG9hdCB5LCBib29sIGlz
TWluWSwgVmVjdG9yPEV4Y2x1cwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAg
Y29uc3QgRXhjbHVzaW9uUG9seWdvbkVkZ2UmIHRoaXNFZGdlID0gKnRoaXNJbnRlcnNlY3Rpb24u
ZWRnZTsKKyAgICAgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgdGhpc0VkZ2UgPSAqdGhpc0lu
dGVyc2VjdGlvbi5lZGdlOwogICAgICAgICBib29sIGV2ZW5PZGRDcm9zc2luZyA9ICF3aW5kQ291
bnQ7CiAKLSAgICAgICAgaWYgKGZpbGxSdWxlKCkgPT0gUlVMRV9FVkVOT0REKSB7CisgICAgICAg
IGlmIChwb2x5Z29uLmZpbGxSdWxlKCkgPT0gUlVMRV9FVkVOT0REKSB7CiAgICAgICAgICAgICB3
aW5kQ291bnQgKz0gKHRoaXNFZGdlLnZlcnRleDIoKS55KCkgPiB0aGlzRWRnZS52ZXJ0ZXgxKCku
eSgpKSA/IDEgOiAtMTsKICAgICAgICAgICAgIGV2ZW5PZGRDcm9zc2luZyA9IGV2ZW5PZGRDcm9z
c2luZyB8fCAhd2luZENvdW50OwogICAgICAgICB9CkBAIC0yOTUsMTUgKzE5NiwxNSBAQCB2b2lk
IEV4Y2x1c2lvblBvbHlnb246OmNvbXB1dGVYSW50ZXJzZWN0aW9ucyhmbG9hdCB5LCBib29sIGlz
TWluWSwgVmVjdG9yPEV4Y2x1cwogICAgIH0KIH0KIAotLy8gUmV0dXJuIHRoZSBYIHByb2plY3Rp
b25zIG9mIHRoZSBlZGdlcyB0aGF0IG92ZXJsYXAgeTEseTIuCi12b2lkIEV4Y2x1c2lvblBvbHln
b246OmNvbXB1dGVFZGdlSW50ZXJzZWN0aW9ucyhmbG9hdCB5MSwgZmxvYXQgeTIsIFZlY3RvcjxF
eGNsdXNpb25JbnRlcnZhbD4mIHJlc3VsdCkgY29uc3QKK3N0YXRpYyB2b2lkIGNvbXB1dGVPdmVy
bGFwcGluZ0VkZ2VYUHJvamVjdGlvbnMoY29uc3QgRmxvYXRQb2x5Z29uJiBwb2x5Z29uLCBmbG9h
dCB5MSwgZmxvYXQgeTIsIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mIHJlc3VsdCkKIHsKLSAg
ICBWZWN0b3I8RXhjbHVzaW9uUG9seWdvbjo6RWRnZUludGVydmFsPiBvdmVybGFwcGluZ0VkZ2Vz
OwotICAgIG1fZWRnZVRyZWUuYWxsT3ZlcmxhcHMoRXhjbHVzaW9uUG9seWdvbjo6RWRnZUludGVy
dmFsKHkxLCB5MiwgMCksIG92ZXJsYXBwaW5nRWRnZXMpOworICAgIFZlY3Rvcjxjb25zdCBGbG9h
dFBvbHlnb25FZGdlKj4gZWRnZXM7CisgICAgaWYgKCFwb2x5Z29uLm92ZXJsYXBwaW5nRWRnZXMo
eTEsIHkyLCBlZGdlcykpCisgICAgICAgIHJldHVybjsKIAogICAgIEVkZ2VJbnRlcnNlY3Rpb24g
aW50ZXJzZWN0aW9uOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvdmVybGFwcGluZ0Vk
Z2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEV4Y2x1c2lvblBvbHlnb25FZGdlICpl
ZGdlID0gc3RhdGljX2Nhc3Q8RXhjbHVzaW9uUG9seWdvbkVkZ2UqPihvdmVybGFwcGluZ0VkZ2Vz
W2ldLmRhdGEoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVkZ2VzLnNpemUoKTsg
KytpKSB7CisgICAgICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UgKmVkZ2UgPSBlZGdlc1tpXTsK
ICAgICAgICAgZmxvYXQgeDE7CiAgICAgICAgIGZsb2F0IHgyOwogCkBAIC0zMzgsMTQgKzIzOSwx
NCBAQCB2b2lkIEV4Y2x1c2lvblBvbHlnb246OmdldEV4Y2x1ZGVkSW50ZXJ2YWxzKGZsb2F0IGxv
Z2ljYWxUb3AsIGZsb2F0IGxvZ2ljYWxIZWlnaAogICAgIGZsb2F0IHkyID0geTEgKyBsb2dpY2Fs
SGVpZ2h0OwogCiAgICAgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiB5MVhJbnRlcnZhbHMsIHky
WEludGVydmFsczsKLSAgICBjb21wdXRlWEludGVyc2VjdGlvbnMoeTEsIHRydWUsIHkxWEludGVy
dmFscyk7Ci0gICAgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKHkyLCBmYWxzZSwgeTJYSW50ZXJ2YWxz
KTsKKyAgICBjb21wdXRlWEludGVyc2VjdGlvbnMobV9wb2x5Z29uLCB5MSwgdHJ1ZSwgeTFYSW50
ZXJ2YWxzKTsKKyAgICBjb21wdXRlWEludGVyc2VjdGlvbnMobV9wb2x5Z29uLCB5MiwgZmFsc2Us
IHkyWEludGVydmFscyk7CiAKICAgICBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+IG1lcmdlZElu
dGVydmFsczsKICAgICBtZXJnZUV4Y2x1c2lvbkludGVydmFscyh5MVhJbnRlcnZhbHMsIHkyWElu
dGVydmFscywgbWVyZ2VkSW50ZXJ2YWxzKTsKIAogICAgIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZh
bD4gZWRnZUludGVydmFsczsKLSAgICBjb21wdXRlRWRnZUludGVyc2VjdGlvbnMoeTEsIHkyLCBl
ZGdlSW50ZXJ2YWxzKTsKKyAgICBjb21wdXRlT3ZlcmxhcHBpbmdFZGdlWFByb2plY3Rpb25zKG1f
cG9seWdvbiwgeTEsIHkyLCBlZGdlSW50ZXJ2YWxzKTsKIAogICAgIFZlY3RvcjxFeGNsdXNpb25J
bnRlcnZhbD4gZXhjbHVkZWRJbnRlcnZhbHM7CiAgICAgbWVyZ2VFeGNsdXNpb25JbnRlcnZhbHMo
bWVyZ2VkSW50ZXJ2YWxzLCBlZGdlSW50ZXJ2YWxzLCBleGNsdWRlZEludGVydmFscyk7CkBAIC0z
NjUsMTQgKzI2NiwxNCBAQCB2b2lkIEV4Y2x1c2lvblBvbHlnb246OmdldEluY2x1ZGVkSW50ZXJ2
YWxzKGZsb2F0IGxvZ2ljYWxUb3AsIGZsb2F0IGxvZ2ljYWxIZWlnaAogICAgIGZsb2F0IHkyID0g
eTEgKyBsb2dpY2FsSGVpZ2h0OwogCiAgICAgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiB5MVhJ
bnRlcnZhbHMsIHkyWEludGVydmFsczsKLSAgICBjb21wdXRlWEludGVyc2VjdGlvbnMoeTEsIHRy
dWUsIHkxWEludGVydmFscyk7Ci0gICAgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKHkyLCBmYWxzZSwg
eTJYSW50ZXJ2YWxzKTsKKyAgICBjb21wdXRlWEludGVyc2VjdGlvbnMobV9wb2x5Z29uLCB5MSwg
dHJ1ZSwgeTFYSW50ZXJ2YWxzKTsKKyAgICBjb21wdXRlWEludGVyc2VjdGlvbnMobV9wb2x5Z29u
LCB5MiwgZmFsc2UsIHkyWEludGVydmFscyk7CiAKICAgICBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2
YWw+IGNvbW1vbkludGVydmFsczsKICAgICBpbnRlcnNlY3RFeGNsdXNpb25JbnRlcnZhbHMoeTFY
SW50ZXJ2YWxzLCB5MlhJbnRlcnZhbHMsIGNvbW1vbkludGVydmFscyk7CiAKICAgICBWZWN0b3I8
RXhjbHVzaW9uSW50ZXJ2YWw+IGVkZ2VJbnRlcnZhbHM7Ci0gICAgY29tcHV0ZUVkZ2VJbnRlcnNl
Y3Rpb25zKHkxLCB5MiwgZWRnZUludGVydmFscyk7CisgICAgY29tcHV0ZU92ZXJsYXBwaW5nRWRn
ZVhQcm9qZWN0aW9ucyhtX3BvbHlnb24sIHkxLCB5MiwgZWRnZUludGVydmFscyk7CiAKICAgICBW
ZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+IGluY2x1ZGVkSW50ZXJ2YWxzOwogICAgIHN1YnRyYWN0
RXhjbHVzaW9uSW50ZXJ2YWxzKGNvbW1vbkludGVydmFscywgZWRnZUludGVydmFscywgaW5jbHVk
ZWRJbnRlcnZhbHMpOwpAQCAtMzgzLDk4ICsyODQsMTkgQEAgdm9pZCBFeGNsdXNpb25Qb2x5Z29u
OjpnZXRJbmNsdWRlZEludGVydmFscyhmbG9hdCBsb2dpY2FsVG9wLCBmbG9hdCBsb2dpY2FsSGVp
Z2gKICAgICB9CiB9CiAKLXN0YXRpYyBpbmxpbmUgZmxvYXQgbGVmdFNpZGUoY29uc3QgRmxvYXRQ
b2ludCYgdmVydGV4MSwgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MiwgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQpCi17Ci0gICAgcmV0dXJuICgocG9pbnQueCgpIC0gdmVydGV4MS54KCkpICogKHZl
cnRleDIueSgpIC0gdmVydGV4MS55KCkpKSAtICgodmVydGV4Mi54KCkgLSB2ZXJ0ZXgxLngoKSkg
KiAocG9pbnQueSgpIC0gdmVydGV4MS55KCkpKTsKLX0KLQotYm9vbCBFeGNsdXNpb25Qb2x5Z29u
Ojpjb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKLXsKLSAgICBpZiAoIW1f
Ym91bmRpbmdCb3guY29udGFpbnMocG9pbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBpbnQgd2luZGluZ051bWJlciA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51
bWJlck9mRWRnZXMoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDEg
PSBlZGdlQXQoaSkudmVydGV4MSgpOwotICAgICAgICBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgy
ID0gZWRnZUF0KGkpLnZlcnRleDIoKTsKLSAgICAgICAgaWYgKGlzUG9pbnRPbkxpbmVTZWdtZW50
KHZlcnRleDEsIHZlcnRleDIsIHBvaW50KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICBpZiAodmVydGV4Mi55KCkgPCBwb2ludC55KCkpIHsKLSAgICAgICAgICAgIGlmICgodmVy
dGV4MS55KCkgPiBwb2ludC55KCkpICYmIChsZWZ0U2lkZSh2ZXJ0ZXgxLCB2ZXJ0ZXgyLCBwb2lu
dCkgPiAwKSkKLSAgICAgICAgICAgICAgICArK3dpbmRpbmdOdW1iZXI7Ci0gICAgICAgIH0gZWxz
ZSBpZiAodmVydGV4Mi55KCkgPiBwb2ludC55KCkpIHsKLSAgICAgICAgICAgIGlmICgodmVydGV4
MS55KCkgPD0gcG9pbnQueSgpKSAmJiAobGVmdFNpZGUodmVydGV4MSwgdmVydGV4MiwgcG9pbnQp
IDwgMCkpCi0gICAgICAgICAgICAgICAgLS13aW5kaW5nTnVtYmVyOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcmV0dXJuIHdpbmRpbmdOdW1iZXI7Ci19Ci0KLWJvb2wgVmVydGV4UGFpcjo6b3Zl
cmxhcHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKLXsKLSAgICBib29sIGJvdW5k
c092ZXJsYXAgPSAobWluWCgpIDwgcmVjdC5tYXhYKCkpICYmIChtYXhYKCkgPiByZWN0LngoKSkg
JiYgKG1pblkoKSA8IHJlY3QubWF4WSgpKSAmJiAobWF4WSgpID4gcmVjdC55KCkpOwotICAgIGlm
ICghYm91bmRzT3ZlcmxhcCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZmxvYXQgbGVm
dFNpZGVWYWx1ZXNbNF0gPSB7Ci0gICAgICAgIGxlZnRTaWRlKHZlcnRleDEoKSwgdmVydGV4Migp
LCByZWN0Lm1pblhNaW5ZQ29ybmVyKCkpLAotICAgICAgICBsZWZ0U2lkZSh2ZXJ0ZXgxKCksIHZl
cnRleDIoKSwgcmVjdC5tYXhYTWluWUNvcm5lcigpKSwKLSAgICAgICAgbGVmdFNpZGUodmVydGV4
MSgpLCB2ZXJ0ZXgyKCksIHJlY3QubWluWE1heFlDb3JuZXIoKSksCi0gICAgICAgIGxlZnRTaWRl
KHZlcnRleDEoKSwgdmVydGV4MigpLCByZWN0Lm1heFhNYXhZQ29ybmVyKCkpCi0gICAgfTsKLQot
ICAgIGludCBjdXJyZW50TGVmdFNpZGVTaWduID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgNDsgKytpKSB7Ci0gICAgICAgIGlmICghbGVmdFNpZGVWYWx1ZXNbaV0pCi0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgaW50IGxlZnRTaWRlU2lnbiA9IGxlZnRTaWRlVmFsdWVz
W2ldID4gMCA/IDEgOiAtMTsKLSAgICAgICAgaWYgKCFjdXJyZW50TGVmdFNpZGVTaWduKQotICAg
ICAgICAgICAgY3VycmVudExlZnRTaWRlU2lnbiA9IGxlZnRTaWRlU2lnbjsKLSAgICAgICAgZWxz
ZSBpZiAoY3VycmVudExlZnRTaWRlU2lnbiAhPSBsZWZ0U2lkZVNpZ24pCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHN0YXRpYyBpbmxp
bmUgYm9vbCBpc1JlZmxleFZlcnRleChjb25zdCBGbG9hdFBvaW50JiBwcmV2VmVydGV4LCBjb25z
dCBGbG9hdFBvaW50JiB2ZXJ0ZXgsIGNvbnN0IEZsb2F0UG9pbnQmIG5leHRWZXJ0ZXgpCiB7CiAg
ICAgcmV0dXJuIGxlZnRTaWRlKHByZXZWZXJ0ZXgsIG5leHRWZXJ0ZXgsIHZlcnRleCkgPCAwOwog
fQogCi1ib29sIFZlcnRleFBhaXI6OmludGVyc2VjdGlvbihjb25zdCBWZXJ0ZXhQYWlyJiBvdGhl
ciwgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Ci17Ci0gICAgLy8gU2VlOiBodHRwOi8vcGF1bGJv
dXJrZS5uZXQvZ2VvbWV0cnkvcG9pbnRsaW5lcGxhbmUvLCAiSW50ZXJzZWN0aW9uIHBvaW50IG9m
IHR3byBsaW5lcyBpbiAyIGRpbWVuc2lvbnMiCi0KLSAgICBjb25zdCBGbG9hdFNpemUmIHRoaXNE
ZWx0YSA9IHZlcnRleDIoKSAtIHZlcnRleDEoKTsKLSAgICBjb25zdCBGbG9hdFNpemUmIG90aGVy
RGVsdGEgPSBvdGhlci52ZXJ0ZXgyKCkgLSBvdGhlci52ZXJ0ZXgxKCk7Ci0gICAgZmxvYXQgZGVu
b21pbmF0b3IgPSBkZXRlcm1pbmFudCh0aGlzRGVsdGEsIG90aGVyRGVsdGEpOwotICAgIGlmICgh
ZGVub21pbmF0b3IpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFRoZSB0d28gbGlu
ZSBzZWdtZW50czogInRoaXMiIHZlcnRleDEsdmVydGV4MiBhbmQgIm90aGVyIiB2ZXJ0ZXgxLHZl
cnRleDIsIGhhdmUgYmVlbiBkZWZpbmVkCi0gICAgLy8gaW4gcGFyYW1ldHJpYyBmb3JtLiBFYWNo
IHBvaW50IG9uIHRoZSBsaW5lIHNlZ21lbnQgaXM6IHZlcnRleDEgKyB1ICogKHZlcnRleDIgLSB2
ZXJ0ZXgxKSwKLSAgICAvLyB3aGVuIDAgPD0gdSA8PSAxLiBXZSdyZSBjb21wdXRpbmcgdGhlIHZh
bHVlcyBvZiB1IGZvciBlYWNoIGxpbmUgYXQgdGhlaXIgaW50ZXJzZWN0aW9uIHBvaW50LgotCi0g
ICAgY29uc3QgRmxvYXRTaXplJiB2ZXJ0ZXgxRGVsdGEgPSB2ZXJ0ZXgxKCkgLSBvdGhlci52ZXJ0
ZXgxKCk7Ci0gICAgZmxvYXQgdVRoaXNMaW5lID0gZGV0ZXJtaW5hbnQob3RoZXJEZWx0YSwgdmVy
dGV4MURlbHRhKSAvIGRlbm9taW5hdG9yOwotICAgIGZsb2F0IHVPdGhlckxpbmUgPSBkZXRlcm1p
bmFudCh0aGlzRGVsdGEsIHZlcnRleDFEZWx0YSkgLyBkZW5vbWluYXRvcjsKLQotICAgIGlmICh1
VGhpc0xpbmUgPCAwIHx8IHVPdGhlckxpbmUgPCAwIHx8IHVUaGlzTGluZSA+IDEgfHwgdU90aGVy
TGluZSA+IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHBvaW50ID0gdmVydGV4MSgp
ICsgdVRoaXNMaW5lICogdGhpc0RlbHRhOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEV4
Y2x1c2lvblBvbHlnb246OmZpcnN0Rml0UmVjdEluUG9seWdvbihjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIHVuc2lnbmVkIG9mZnNldEVkZ2VJbmRleDEsIHVuc2lnbmVkIG9mZnNldEVkZ2VJbmRleDIp
IGNvbnN0CitzdGF0aWMgaW5saW5lIGJvb2wgZmlyc3RGaXRSZWN0SW5Qb2x5Z29uKGNvbnN0IEZs
b2F0UG9seWdvbiYgcG9seWdvbiwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCB1bnNpZ25lZCBvZmZz
ZXRFZGdlSW5kZXgxLCB1bnNpZ25lZCBvZmZzZXRFZGdlSW5kZXgyKQogewotICAgIFZlY3RvcjxF
eGNsdXNpb25Qb2x5Z29uOjpFZGdlSW50ZXJ2YWw+IG92ZXJsYXBwaW5nRWRnZXM7Ci0gICAgbV9l
ZGdlVHJlZS5hbGxPdmVybGFwcyhFeGNsdXNpb25Qb2x5Z29uOjpFZGdlSW50ZXJ2YWwocmVjdC55
KCksIHJlY3QubWF4WSgpLCAwKSwgb3ZlcmxhcHBpbmdFZGdlcyk7CisgICAgVmVjdG9yPGNvbnN0
IEZsb2F0UG9seWdvbkVkZ2UqPiBlZGdlczsKKyAgICBpZiAoIXBvbHlnb24ub3ZlcmxhcHBpbmdF
ZGdlcyhyZWN0LnkoKSwgcmVjdC5tYXhZKCksIGVkZ2VzKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb3ZlcmxhcHBpbmdFZGdlcy5zaXplKCk7
ICsraSkgewotICAgICAgICBjb25zdCBFeGNsdXNpb25Qb2x5Z29uRWRnZSogZWRnZSA9IHN0YXRp
Y19jYXN0PEV4Y2x1c2lvblBvbHlnb25FZGdlKj4ob3ZlcmxhcHBpbmdFZGdlc1tpXS5kYXRhKCkp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlZGdlcy5zaXplKCk7ICsraSkgeworICAg
ICAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdlKiBlZGdlID0gZWRnZXNbaV07CiAgICAgICAgIGlm
IChlZGdlLT5lZGdlSW5kZXgoKSAhPSBvZmZzZXRFZGdlSW5kZXgxICYmIGVkZ2UtPmVkZ2VJbmRl
eCgpICE9IG9mZnNldEVkZ2VJbmRleDIgJiYgZWRnZS0+b3ZlcmxhcHNSZWN0KHJlY3QpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTQ5MywyNCArMzE1LDI1IEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBhYm92ZU9yVG9UaGVMZWZ0KGNvbnN0IEZsb2F0UmVjdCYgcjEsIGNvbnN0
IEZsb2F0UmVjdCYgcjIpCiAKIGJvb2wgRXhjbHVzaW9uUG9seWdvbjo6Zmlyc3RJbmNsdWRlZElu
dGVydmFsTG9naWNhbFRvcChmbG9hdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIGNvbnN0IEZsb2F0
U2l6ZSYgbWluTG9naWNhbEludGVydmFsU2l6ZSwgZmxvYXQmIHJlc3VsdCkgY29uc3QKIHsKLSAg
ICBpZiAobWluTG9naWNhbEludGVydmFsU2l6ZS53aWR0aCgpID4gbV9ib3VuZGluZ0JveC53aWR0
aCgpKQorICAgIGNvbnN0IEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IG1fcG9seWdvbi5ib3VuZGlu
Z0JveCgpOworICAgIGlmIChtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplLndpZHRoKCkgPiBib3VuZGlu
Z0JveC53aWR0aCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBmbG9hdCBtaW5ZID0g
c3RkOjptYXgobV9ib3VuZGluZ0JveC55KCksIG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCk7CisgICAg
ZmxvYXQgbWluWSA9IHN0ZDo6bWF4KGJvdW5kaW5nQm94LnkoKSwgbWluTG9naWNhbEludGVydmFs
VG9wKTsKICAgICBmbG9hdCBtYXhZID0gbWluWSArIG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUuaGVp
Z2h0KCk7CiAKLSAgICBpZiAobWF4WSA+IG1fYm91bmRpbmdCb3gubWF4WSgpKQorICAgIGlmICht
YXhZID4gYm91bmRpbmdCb3gubWF4WSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBW
ZWN0b3I8RXhjbHVzaW9uUG9seWdvbjo6RWRnZUludGVydmFsPiBvdmVybGFwcGluZ0VkZ2VzOwot
ICAgIG1fZWRnZVRyZWUuYWxsT3ZlcmxhcHMoRXhjbHVzaW9uUG9seWdvbjo6RWRnZUludGVydmFs
KG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwgbV9ib3VuZGluZ0JveC5tYXhZKCksIDApLCBvdmVybGFw
cGluZ0VkZ2VzKTsKKyAgICBWZWN0b3I8Y29uc3QgRmxvYXRQb2x5Z29uRWRnZSo+IGVkZ2VzOwor
ICAgIG1fcG9seWdvbi5vdmVybGFwcGluZ0VkZ2VzKG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwgYm91
bmRpbmdCb3gubWF4WSgpLCBlZGdlcyk7CiAKICAgICBmbG9hdCBkeCA9IG1pbkxvZ2ljYWxJbnRl
cnZhbFNpemUud2lkdGgoKSAvIDI7CiAgICAgZmxvYXQgZHkgPSBtaW5Mb2dpY2FsSW50ZXJ2YWxT
aXplLmhlaWdodCgpIC8gMjsKICAgICBWZWN0b3I8T2Zmc2V0UG9seWdvbkVkZ2U+IG9mZnNldEVk
Z2VzOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG92ZXJsYXBwaW5nRWRnZXMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgRXhjbHVzaW9uUG9seWdvbkVkZ2UmIGVkZ2UgPSAq
c3RhdGljX2Nhc3Q8RXhjbHVzaW9uUG9seWdvbkVkZ2UqPihvdmVybGFwcGluZ0VkZ2VzW2ldLmRh
dGEoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVkZ2VzLnNpemUoKTsgKytpKSB7
CisgICAgICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIGVkZ2UgPSAqKGVkZ2VzW2ldKTsKICAg
ICAgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MCA9IGVkZ2UucHJldmlvdXNFZGdlKCkudmVy
dGV4MSgpOwogICAgICAgICBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgxID0gZWRnZS52ZXJ0ZXgx
KCk7CiAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDIgPSBlZGdlLnZlcnRleDIoKTsK
QEAgLTU0MCw3ICszNjMsNyBAQCBib29sIEV4Y2x1c2lvblBvbHlnb246OmZpcnN0SW5jbHVkZWRJ
bnRlcnZhbExvZ2ljYWxUb3AoZmxvYXQgbWluTG9naWNhbEludGVydmFsVAogICAgICAgICAgICAg
ICAgIG9mZnNldEVkZ2VzLmFwcGVuZChvZmZzZXRFZGdlQnVmZmVyW2pdKTsKICAgICB9CiAKLSAg
ICBvZmZzZXRFZGdlcy5hcHBlbmQoT2Zmc2V0UG9seWdvbkVkZ2UoKnRoaXMsIG1pbkxvZ2ljYWxJ
bnRlcnZhbFRvcCwgRmxvYXRTaXplKDAsIGR5KSkpOworICAgIG9mZnNldEVkZ2VzLmFwcGVuZChP
ZmZzZXRQb2x5Z29uRWRnZShtX3BvbHlnb24sIG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwgRmxvYXRT
aXplKDAsIGR5KSkpOwogCiAgICAgRmxvYXRQb2ludCBvZmZzZXRFZGdlc0ludGVyc2VjdGlvbjsK
ICAgICBGbG9hdFJlY3QgZmlyc3RGaXRSZWN0OwpAQCAtNTUzLDggKzM3Niw4IEBAIGJvb2wgRXhj
bHVzaW9uUG9seWdvbjo6Zmlyc3RJbmNsdWRlZEludGVydmFsTG9naWNhbFRvcChmbG9hdCBtaW5M
b2dpY2FsSW50ZXJ2YWxUCiAgICAgICAgICAgICAgICAgRmxvYXRSZWN0IHBvdGVudGlhbEZpcnN0
Rml0UmVjdChwb3RlbnRpYWxGaXJzdEZpdExvY2F0aW9uLCBtaW5Mb2dpY2FsSW50ZXJ2YWxTaXpl
KTsKICAgICAgICAgICAgICAgICBpZiAoKHBvdGVudGlhbEZpcnN0Rml0TG9jYXRpb24ueSgpID49
IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCkKICAgICAgICAgICAgICAgICAgICAgJiYgKCFmaXJzdEZp
dEZvdW5kIHx8IGFib3ZlT3JUb1RoZUxlZnQocG90ZW50aWFsRmlyc3RGaXRSZWN0LCBmaXJzdEZp
dFJlY3QpKQotICAgICAgICAgICAgICAgICAgICAmJiBjb250YWlucyhvZmZzZXRFZGdlc0ludGVy
c2VjdGlvbikKLSAgICAgICAgICAgICAgICAgICAgJiYgZmlyc3RGaXRSZWN0SW5Qb2x5Z29uKHBv
dGVudGlhbEZpcnN0Rml0UmVjdCwgb2Zmc2V0RWRnZXNbaV0uZWRnZUluZGV4KCksIG9mZnNldEVk
Z2VzW2pdLmVkZ2VJbmRleCgpKSkgeworICAgICAgICAgICAgICAgICAgICAmJiBtX3BvbHlnb24u
Y29udGFpbnMob2Zmc2V0RWRnZXNJbnRlcnNlY3Rpb24pCisgICAgICAgICAgICAgICAgICAgICYm
IGZpcnN0Rml0UmVjdEluUG9seWdvbihtX3BvbHlnb24sIHBvdGVudGlhbEZpcnN0Rml0UmVjdCwg
b2Zmc2V0RWRnZXNbaV0uZWRnZUluZGV4KCksIG9mZnNldEVkZ2VzW2pdLmVkZ2VJbmRleCgpKSkg
ewogICAgICAgICAgICAgICAgICAgICBmaXJzdEZpdEZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICAgICAgZmlyc3RGaXRSZWN0ID0gcG90ZW50aWFsRmlyc3RGaXRSZWN0OwogICAgICAgICAg
ICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25Q
b2x5Z29uLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5oCmlu
ZGV4IDYyZTE5NzEuLmQ0NGE2YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9FeGNsdXNpb25Qb2x5Z29uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1
c2lvblBvbHlnb24uaApAQCAtMzMsMTMyICszMywxOCBAQAogI2luY2x1ZGUgIkV4Y2x1c2lvbklu
dGVydmFsLmgiCiAjaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGUuaCIKICNpbmNsdWRlICJGbG9hdFBv
aW50LmgiCisjaW5jbHVkZSAiRmxvYXRQb2x5Z29uLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
Ci0jaW5jbHVkZSAiUE9ESW50ZXJ2YWxUcmVlLmgiCiAjaW5jbHVkZSAiV2luZFJ1bGUuaCIKLSNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBFeGNsdXNpb25Qb2x5Z29uRWRnZTsKLQotLy8gVGhpcyBj
bGFzcyBpcyB1c2VkIGJ5IFBPREludGVydmFsVHJlZSBmb3IgZGVidWdnaW5nLgotI2lmbmRlZiBO
REVCVUcKLXRlbXBsYXRlIDxjbGFzcz4gc3RydWN0IFZhbHVlVG9TdHJpbmc7Ci0jZW5kaWYKLQot
Y2xhc3MgRXhjbHVzaW9uUG9seWdvbiA6IHB1YmxpYyBFeGNsdXNpb25TaGFwZSB7Ci0gICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoRXhjbHVzaW9uUG9seWdvbik7Ci1wdWJsaWM6Ci0gICAgRXhjbHVz
aW9uUG9seWdvbihQYXNzT3duUHRyPFZlY3RvcjxGbG9hdFBvaW50PiA+IHZlcnRpY2VzLCBXaW5k
UnVsZSBmaWxsUnVsZSk7Ci0KLSAgICBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXhBdCh1bnNpZ25l
ZCBpbmRleCkgY29uc3QgeyByZXR1cm4gKCptX3ZlcnRpY2VzKVtpbmRleF07IH0KLSAgICB1bnNp
Z25lZCBudW1iZXJPZlZlcnRpY2VzKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0aWNlcy0+c2l6ZSgp
OyB9Ci0gICAgV2luZFJ1bGUgZmlsbFJ1bGUoKSBjb25zdCB7IHJldHVybiBtX2ZpbGxSdWxlOyB9
Ci0KLSAgICBjb25zdCBFeGNsdXNpb25Qb2x5Z29uRWRnZSYgZWRnZUF0KHVuc2lnbmVkIGluZGV4
KSBjb25zdCB7IHJldHVybiBtX2VkZ2VzW2luZGV4XTsgfQotICAgIHVuc2lnbmVkIG51bWJlck9m
RWRnZXMoKSBjb25zdCB7IHJldHVybiBtX2VkZ2VzLnNpemUoKTsgfQotCi0gICAgYm9vbCBjb250
YWlucyhjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBz
aGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fYm91bmRp
bmdCb3g7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0
dXJuIG1fZW1wdHk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0RXhjbHVkZWRJbnRlcnZhbHMoZmxv
YXQgbG9naWNhbFRvcCwgZmxvYXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExpc3QmKSBjb25zdCBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0SW5jbHVkZWRJbnRlcnZhbHMoZmxvYXQgbG9n
aWNhbFRvcCwgZmxvYXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExpc3QmKSBjb25zdCBPVkVSUklE
RTsKLSAgICB2aXJ0dWFsIGJvb2wgZmlyc3RJbmNsdWRlZEludGVydmFsTG9naWNhbFRvcChmbG9h
dCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIGNvbnN0IEZsb2F0U2l6ZSYgbWluTG9naWNhbEludGVy
dmFsU2l6ZSwgZmxvYXQmKSBjb25zdCBPVkVSUklERTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGNv
bXB1dGVYSW50ZXJzZWN0aW9ucyhmbG9hdCB5LCBib29sIGlzTWluWSwgVmVjdG9yPEV4Y2x1c2lv
bkludGVydmFsPiYpIGNvbnN0OwotICAgIHZvaWQgY29tcHV0ZUVkZ2VJbnRlcnNlY3Rpb25zKGZs
b2F0IG1pblksIGZsb2F0IG1heFksIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mKSBjb25zdDsK
LSAgICB1bnNpZ25lZCBmaW5kTmV4dEVkZ2VWZXJ0ZXhJbmRleCh1bnNpZ25lZCB2ZXJ0ZXhJbmRl
eDEsIGJvb2wgY2xvY2t3aXNlKSBjb25zdDsKLSAgICBib29sIGZpcnN0Rml0UmVjdEluUG9seWdv
bihjb25zdCBGbG9hdFJlY3QmLCB1bnNpZ25lZCBvZmZzZXRFZGdlSW5kZXgxLCB1bnNpZ25lZCBv
ZmZzZXRFZGdlSW5kZXgpIGNvbnN0OwotCi0gICAgdHlwZWRlZiBQT0RJbnRlcnZhbDxmbG9hdCwg
RXhjbHVzaW9uUG9seWdvbkVkZ2UqPiBFZGdlSW50ZXJ2YWw7Ci0gICAgdHlwZWRlZiBQT0RJbnRl
cnZhbFRyZWU8ZmxvYXQsIEV4Y2x1c2lvblBvbHlnb25FZGdlKj4gRWRnZUludGVydmFsVHJlZTsK
LQotICAgIE93blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiBtX3ZlcnRpY2VzOwotICAgIFdpbmRS
dWxlIG1fZmlsbFJ1bGU7Ci0gICAgRmxvYXRSZWN0IG1fYm91bmRpbmdCb3g7Ci0gICAgVmVjdG9y
PEV4Y2x1c2lvblBvbHlnb25FZGdlPiBtX2VkZ2VzOwotICAgIEVkZ2VJbnRlcnZhbFRyZWUgbV9l
ZGdlVHJlZTsKLSAgICBib29sIG1fZW1wdHk7Ci19OwotCi1jbGFzcyBWZXJ0ZXhQYWlyIHsKLXB1
YmxpYzoKLSAgICB2aXJ0dWFsIH5WZXJ0ZXhQYWlyKCkgeyB9Ci0KLSAgICB2aXJ0dWFsIGNvbnN0
IEZsb2F0UG9pbnQmIHZlcnRleDEoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBjb25zdCBGbG9h
dFBvaW50JiB2ZXJ0ZXgyKCkgY29uc3QgPSAwOwotCi0gICAgZmxvYXQgbWluWCgpIGNvbnN0IHsg
cmV0dXJuIHN0ZDo6bWluKHZlcnRleDEoKS54KCksIHZlcnRleDIoKS54KCkpOyB9Ci0gICAgZmxv
YXQgbWluWSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWluKHZlcnRleDEoKS55KCksIHZlcnRleDIo
KS55KCkpOyB9Ci0gICAgZmxvYXQgbWF4WCgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWF4KHZlcnRl
eDEoKS54KCksIHZlcnRleDIoKS54KCkpOyB9Ci0gICAgZmxvYXQgbWF4WSgpIGNvbnN0IHsgcmV0
dXJuIHN0ZDo6bWF4KHZlcnRleDEoKS55KCksIHZlcnRleDIoKS55KCkpOyB9Ci0KLSAgICBib29s
IG92ZXJsYXBzUmVjdChjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKLSAgICBib29sIGludGVyc2Vj
dGlvbihjb25zdCBWZXJ0ZXhQYWlyJiwgRmxvYXRQb2ludCYpIGNvbnN0OwotfTsKLQotLy8gRWRn
ZUludGVydmFsVHJlZSBub2RlcyBzdG9yZSBtaW5ZLCBtYXhZLCBhbmQgYSAoIlVzZXJEYXRhIikg
cG9pbnRlciB0byBhbiBFeGNsdXNpb25Qb2x5Z29uRWRnZS4gRWRnZSB2ZXJ0ZXgKLS8vIGluZGV4
MSBpcyBsZXNzIHRoYW4gaW5kZXgyLCBleGNlcHQgdGhlIGxhc3QgZWRnZSwgd2hlcmUgaW5kZXgy
IGlzIDAuIFdoZW4gYSBwb2x5Z29uIGVkZ2UgaXMgZGVmaW5lZCBieSAzCi0vLyBvciBtb3JlIGNv
bGluZWFyIHZlcnRpY2VzLCBpbmRleDIgY2FuIGJlIHRoZSB0aGUgaW5kZXggb2YgdGhlIGxhc3Qg
Y29saW5lYXIgdmVydGV4LgotY2xhc3MgRXhjbHVzaW9uUG9seWdvbkVkZ2UgOiBwdWJsaWMgVmVy
dGV4UGFpciB7Ci0gICAgZnJpZW5kIGNsYXNzIEV4Y2x1c2lvblBvbHlnb247Ci1wdWJsaWM6Ci0g
ICAgdmlydHVhbCBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgxKCkgY29uc3QgT1ZFUlJJREUKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChtX3BvbHlnb24pOwotICAgICAgICByZXR1cm4gbV9wb2x5Z29u
LT52ZXJ0ZXhBdChtX3ZlcnRleEluZGV4MSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCBjb25zdCBG
bG9hdFBvaW50JiB2ZXJ0ZXgyKCkgY29uc3QgT1ZFUlJJREUKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChtX3BvbHlnb24pOwotICAgICAgICByZXR1cm4gbV9wb2x5Z29uLT52ZXJ0ZXhBdChtX3ZlcnRl
eEluZGV4Mik7Ci0gICAgfQotCi0gICAgY29uc3QgRXhjbHVzaW9uUG9seWdvbkVkZ2UmIHByZXZp
b3VzRWRnZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV9wb2x5Z29uICYmIG1fcG9s
eWdvbi0+bnVtYmVyT2ZFZGdlcygpID4gMSk7Ci0gICAgICAgIHJldHVybiBtX3BvbHlnb24tPmVk
Z2VBdCgobV9lZGdlSW5kZXggKyBtX3BvbHlnb24tPm51bWJlck9mRWRnZXMoKSAtIDEpICUgbV9w
b2x5Z29uLT5udW1iZXJPZkVkZ2VzKCkpOwotICAgIH0KLQotICAgIGNvbnN0IEV4Y2x1c2lvblBv
bHlnb25FZGdlJiBuZXh0RWRnZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV9wb2x5
Z29uICYmIG1fcG9seWdvbi0+bnVtYmVyT2ZFZGdlcygpID4gMSk7Ci0gICAgICAgIHJldHVybiBt
X3BvbHlnb24tPmVkZ2VBdCgobV9lZGdlSW5kZXggKyAxKSAlIG1fcG9seWdvbi0+bnVtYmVyT2ZF
ZGdlcygpKTsKLSAgICB9Ci0KLSAgICBjb25zdCBFeGNsdXNpb25Qb2x5Z29uKiBwb2x5Z29uKCkg
Y29uc3QgeyByZXR1cm4gbV9wb2x5Z29uOyB9Ci0gICAgdW5zaWduZWQgdmVydGV4SW5kZXgxKCkg
Y29uc3QgeyByZXR1cm4gbV92ZXJ0ZXhJbmRleDE7IH0KLSAgICB1bnNpZ25lZCB2ZXJ0ZXhJbmRl
eDIoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRleEluZGV4MjsgfQotICAgIHVuc2lnbmVkIGVkZ2VJ
bmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fZWRnZUluZGV4OyB9Ci0KLXByaXZhdGU6Ci0gICAgY29u
c3QgRXhjbHVzaW9uUG9seWdvbiogbV9wb2x5Z29uOwotICAgIHVuc2lnbmVkIG1fdmVydGV4SW5k
ZXgxOwotICAgIHVuc2lnbmVkIG1fdmVydGV4SW5kZXgyOwotICAgIHVuc2lnbmVkIG1fZWRnZUlu
ZGV4OwotfTsKLQotLy8gVGhlc2Ugc3RydWN0dXJlcyBhcmUgdXNlZCBieSBQT0RJbnRlcnZhbFRy
ZWUgZm9yIGRlYnVnZ2luZy4xCi0jaWZuZGVmIE5ERUJVRwotdGVtcGxhdGUgPD4gc3RydWN0IFZh
bHVlVG9TdHJpbmc8ZmxvYXQ+IHsKLSAgICBzdGF0aWMgU3RyaW5nIHN0cmluZyhjb25zdCBmbG9h
dCB2YWx1ZSkgeyByZXR1cm4gU3RyaW5nOjpudW1iZXIodmFsdWUpOyB9Ci19OwotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBWYWx1ZVRvU3RyaW5nPEV4Y2x1c2lvblBvbHlnb25FZGdlKj4gewotICAgIHN0
YXRpYyBTdHJpbmcgc3RyaW5nKGNvbnN0IEV4Y2x1c2lvblBvbHlnb25FZGdlKiBlZGdlKSB7IHJl
dHVybiBTdHJpbmc6OmZvcm1hdCgiJXAgKCVmLCVmICVmLCVmKSIsIGVkZ2UsIGVkZ2UtPnZlcnRl
eDEoKS54KCksIGVkZ2UtPnZlcnRleDEoKS55KCksIGVkZ2UtPnZlcnRleDIoKS54KCksIGVkZ2Ut
PnZlcnRleDIoKS55KCkpOyB9Ci19OwotI2VuZGlmCi0KIGNsYXNzIE9mZnNldFBvbHlnb25FZGdl
IDogcHVibGljIFZlcnRleFBhaXIgewogcHVibGljOgotICAgIE9mZnNldFBvbHlnb25FZGdlKGNv
bnN0IEV4Y2x1c2lvblBvbHlnb25FZGdlJiBlZGdlLCBjb25zdCBGbG9hdFNpemUmIG9mZnNldCkK
KyAgICBPZmZzZXRQb2x5Z29uRWRnZShjb25zdCBGbG9hdFBvbHlnb25FZGdlJiBlZGdlLCBjb25z
dCBGbG9hdFNpemUmIG9mZnNldCkKICAgICAgICAgOiBtX3ZlcnRleDEoZWRnZS52ZXJ0ZXgxKCkg
KyBvZmZzZXQpCiAgICAgICAgICwgbV92ZXJ0ZXgyKGVkZ2UudmVydGV4MigpICsgb2Zmc2V0KQog
ICAgICAgICAsIG1fZWRnZUluZGV4KGVkZ2UuZWRnZUluZGV4KCkpCkBAIC0xNzIsOSArNTgsOSBA
QCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIE9mZnNldFBvbHlnb25FZGdlKGNvbnN0IEV4
Y2x1c2lvblBvbHlnb24mIHBvbHlnb24sIGZsb2F0IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwgY29u
c3QgRmxvYXRTaXplJiBvZmZzZXQpCi0gICAgICAgIDogbV92ZXJ0ZXgxKEZsb2F0UG9pbnQocG9s
eWdvbi5zaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpLngoKSwgbWluTG9naWNhbEludGVydmFsVG9w
KSArIG9mZnNldCkKLSAgICAgICAgLCBtX3ZlcnRleDIoRmxvYXRQb2ludChwb2x5Z29uLnNoYXBl
TG9naWNhbEJvdW5kaW5nQm94KCkubWF4WCgpLCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3ApICsgb2Zm
c2V0KQorICAgIE9mZnNldFBvbHlnb25FZGdlKGNvbnN0IEZsb2F0UG9seWdvbiYgcG9seWdvbiwg
ZmxvYXQgbWluTG9naWNhbEludGVydmFsVG9wLCBjb25zdCBGbG9hdFNpemUmIG9mZnNldCkKKyAg
ICAgICAgOiBtX3ZlcnRleDEoRmxvYXRQb2ludChwb2x5Z29uLmJvdW5kaW5nQm94KCkueCgpLCBt
aW5Mb2dpY2FsSW50ZXJ2YWxUb3ApICsgb2Zmc2V0KQorICAgICAgICAsIG1fdmVydGV4MihGbG9h
dFBvaW50KHBvbHlnb24uYm91bmRpbmdCb3goKS5tYXhYKCksIG1pbkxvZ2ljYWxJbnRlcnZhbFRv
cCkgKyBvZmZzZXQpCiAgICAgICAgICwgbV9lZGdlSW5kZXgoLTEpCiAgICAgewogICAgIH0KQEAg
LTE4OSw2ICs3NSwyNSBAQCBwcml2YXRlOgogICAgIGludCBtX2VkZ2VJbmRleDsKIH07CiAKK2Ns
YXNzIEV4Y2x1c2lvblBvbHlnb24gOiBwdWJsaWMgRXhjbHVzaW9uU2hhcGUgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEV4Y2x1c2lvblBvbHlnb24pOworcHVibGljOgorICAgIEV4Y2x1c2lv
blBvbHlnb24oUGFzc093blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiB2ZXJ0aWNlcywgV2luZFJ1
bGUgZmlsbFJ1bGUpCisgICAgICAgIDogRXhjbHVzaW9uU2hhcGUoKQorICAgICAgICAsIG1fcG9s
eWdvbih2ZXJ0aWNlcywgZmlsbFJ1bGUpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgRmxv
YXRSZWN0IHNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4g
bV9wb2x5Z29uLmJvdW5kaW5nQm94KCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgpIGNv
bnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fcG9seWdvbi5pc0VtcHR5KCk7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgZ2V0RXhjbHVkZWRJbnRlcnZhbHMoZmxvYXQgbG9naWNhbFRvcCwgZmxvYXQgbG9naWNh
bEhlaWdodCwgU2VnbWVudExpc3QmKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQg
Z2V0SW5jbHVkZWRJbnRlcnZhbHMoZmxvYXQgbG9naWNhbFRvcCwgZmxvYXQgbG9naWNhbEhlaWdo
dCwgU2VnbWVudExpc3QmKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgZmlyc3RJ
bmNsdWRlZEludGVydmFsTG9naWNhbFRvcChmbG9hdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIGNv
bnN0IEZsb2F0U2l6ZSYgbWluTG9naWNhbEludGVydmFsU2l6ZSwgZmxvYXQmKSBjb25zdCBPVkVS
UklERTsKKworcHJpdmF0ZToKKyAgICBGbG9hdFBvbHlnb24gbV9wb2x5Z29uOworfTsKKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRXhjbHVzaW9uUG9seWdvbl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192480</attachid>
            <date>2013-03-11 09:00:18 -0700</date>
            <delta_ts>2013-03-11 13:42:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>tmp.patch</filename>
            <type>text/plain</type>
            <size>51013</size>
            <attacher name="Hans Muller">giles_joplin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNjQ1YmJmZC4uOTVkMzQyMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTE5MTksNiArMTkxOSw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFBvaW50LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQz
RC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvbHlnb24uY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVj
dC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MzljMmUwYi4uYTQ3NjMwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDczIEBACisyMDEzLTAzLTEx
ICBIYW5zIE11bGxlciAgPGhtdWxsZXJAYWRvYmUuY29tPgorCisgICAgICAgIFtDU1MgRXhjbHVz
aW9uc10gUmVmYWN0b3IgdGhlIEV4Y2x1c2lvblBvbHlnb24gY2xhc3MgdG8gZW5hYmxlIHN0b3Jp
bmcgbXVsdGlwbGUgYm91bmRhcmllcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTExNzY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgUmVmYWN0b3JlZCB0aGUgRXhjbHVzaW9uUG9seWdvbiBjbGFzcyB0byBl
bmFibGUgYWRkaW5nIHN1cHBvcnQgZm9yIHNoYXBlLW1hcmdpbiBhbmQgc2hhcGUtcGFkZGluZy4K
KyAgICAgICAgRXh0cmFjdGVkIGEgbmV3IEZsb2F0UG9seWdvbiBjbGFzcyB3aGljaCBpcyBub3cg
dXNlZCBieSBFeGNsdXNpb25Qb2x5Z29uIHRvIHJlcHJlc2VudCB0aGUgc2hhcGUncworICAgICAg
ICBib3VuZGFyeS4gSXQgd2lsbCBiZSB1c2VkIHRvIGFkZCBtX3BhZGRlZFBvbHlnb24gYW5kIG1f
bWFyZ2luUG9seWdvbiBtZW1iZXJzIHRvIEV4Y2x1c2lvblBvbHlnb24KKyAgICAgICAgaW4gYSBz
dWJzZXF1ZW50IHBhdGNoLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyBpcyBzdHJpY3Rs
eSBhIHJlZmFjdG9yaW5nIG9mIHRoZSBleGlzdGluZyBjb2RlLgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJD
b3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UG9seWdvbi5jcHA6IEZhY3RvcmVkIG91dCBvZiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHAuCisgICAgICAgIChXZWJDb3JlOjpk
ZXRlcm1pbmFudCk6CisgICAgICAgIChXZWJDb3JlOjphcmVDb2xsaW5lYXJQb2ludHMpOgorICAg
ICAgICAoV2ViQ29yZTo6YXJlQ29pbmNpZGVudFBvaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpp
c1BvaW50T25MaW5lU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpuZXh0VmVydGV4SW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2x5Z29uOjpGbG9hdFBvbHlnb24pOgorICAgICAg
ICAoV2ViQ29yZTo6RmxvYXRQb2x5Z29uOjpmaW5kTmV4dEVkZ2VWZXJ0ZXhJbmRleCk6CisgICAg
ICAgIChXZWJDb3JlOjpGbG9hdFBvbHlnb246Om92ZXJsYXBwaW5nRWRnZXMpOgorICAgICAgICAo
V2ViQ29yZTo6bGVmdFNpZGUpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2x5Z29uOjpjb250
YWlucyk6CisgICAgICAgIChXZWJDb3JlOjpWZXJ0ZXhQYWlyOjpvdmVybGFwc1JlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6VmVydGV4UGFpcjo6aW50ZXJzZWN0aW9uKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFBvbHlnb24uaDogRmFjdG9yZWQgb3V0IG9mIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmguCisgICAgICAgIChGbG9hdFBvbHlnb24p
OgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2x5Z29uOjp2ZXJ0ZXhBdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGbG9hdFBvbHlnb246Om51bWJlck9mVmVydGljZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6RmxvYXRQb2x5Z29uOjpmaWxsUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFBvbHln
b246OmVkZ2VBdCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFBvbHlnb246Om51bWJlck9mRWRn
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2x5Z29uOjpib3VuZGluZ0JveCk6CisgICAg
ICAgIChXZWJDb3JlOjpGbG9hdFBvbHlnb246OmlzRW1wdHkpOgorICAgICAgICAoVmVydGV4UGFp
cik6CisgICAgICAgIChXZWJDb3JlOjpWZXJ0ZXhQYWlyOjp+VmVydGV4UGFpcik6CisgICAgICAg
IChXZWJDb3JlOjpWZXJ0ZXhQYWlyOjptaW5YKToKKyAgICAgICAgKFdlYkNvcmU6OlZlcnRleFBh
aXI6Om1pblkpOgorICAgICAgICAoV2ViQ29yZTo6VmVydGV4UGFpcjo6bWF4WCk6CisgICAgICAg
IChXZWJDb3JlOjpWZXJ0ZXhQYWlyOjptYXhZKToKKyAgICAgICAgKEZsb2F0UG9seWdvbkVkZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2x5Z29uRWRnZTo6cHJldmlvdXNFZGdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZsb2F0UG9seWdvbkVkZ2U6Om5leHRFZGdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZsb2F0UG9seWdvbkVkZ2U6OnBvbHlnb24pOgorICAgICAgICAoV2ViQ29yZTo6Rmxv
YXRQb2x5Z29uRWRnZTo6dmVydGV4SW5kZXgxKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UG9s
eWdvbkVkZ2U6OnZlcnRleEluZGV4Mik6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFBvbHlnb25F
ZGdlOjplZGdlSW5kZXgpOgorICAgICAgICAqIHJlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNw
cDogTm93IGRlcGVuZHMgb24gRmxvYXRQb2x5Z29uLgorICAgICAgICAoRWRnZUludGVyc2VjdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpsZWZ0U2lkZSk6CisgICAgICAgIChXZWJDb3JlOjpjb21w
dXRlWEludGVyc2VjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpnZXRWZXJ0ZXhJbnRlcnNlY3Rp
b25WZXJ0aWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlWEludGVyc2VjdGlvbnMpOgor
ICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZU92ZXJsYXBwaW5nRWRnZVhQcm9qZWN0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpFeGNsdXNpb25Qb2x5Z29uOjpnZXRFeGNsdWRlZEludGVydmFscyk6
CisgICAgICAgIChXZWJDb3JlOjpFeGNsdXNpb25Qb2x5Z29uOjpnZXRJbmNsdWRlZEludGVydmFs
cyk6CisgICAgICAgIChXZWJDb3JlOjpmaXJzdEZpdFJlY3RJblBvbHlnb24pOgorICAgICAgICAo
V2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbjo6Zmlyc3RJbmNsdWRlZEludGVydmFsTG9naWNhbFRv
cCk6CisgICAgICAgICogcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uaDogTm93IGRlcGVuZHMg
b24gRmxvYXRQb2x5Z29uLgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2V0UG9seWdvbkVkZ2U6Ok9m
ZnNldFBvbHlnb25FZGdlKToKKyAgICAgICAgKEV4Y2x1c2lvblBvbHlnb24pOgorICAgICAgICAo
V2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbjo6RXhjbHVzaW9uUG9seWdvbik6CisKIDIwMTMtMDMt
MTEgIEFsYmVydG8gR2FyY2lhICA8YWdhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtCbGFj
a0JlcnJ5XSBHcmFwaGljc0xheWVyOiByZW5hbWUgbm90aWZ5U3luY1JlcXVpcmVkIHRvIG5vdGlm
eUZsdXNoUmVxdWlyZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDMwODc3ZDYu
LmVhMDZkMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0K
KysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNTU4OCw2ICs1NTg4
LDggQEAgd2ViY29yZV9wbGF0Zm9ybV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRQb2ludC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0Zsb2F0UG9pbnQuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRQb2x5Z29uLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQ
b2x5Z29uLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oIFwKIAlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwIFwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJp
CmluZGV4IDI0NGJjYjEuLmExZGY2ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Rhcmdl
dC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMTAwNiw2ICsxMDA2LDcg
QEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ3Jvc3NmYWRlR2VuZXJhdGVk
SW1hZ2UuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuY3BwIFwKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRQb2x5Z29uLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmNw
cCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcCBcCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRTaXplLmNwcCBcCkBAIC0yMjMyLDYgKzIyMzMsNyBAQCBIRUFERVJTICs9
IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaCBcCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNELmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0UG9pbnQuaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2x5Z29uLmggXAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFJlY3QuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmggXApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCmluZGV4IDk4ZDNhZWYuLmRjZDMwNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTQ4
MTIsNiArNDgxMiw3IEBACiAgICAgICAgIF0sCiAgICAgICAgICd3ZWJjb3JlX3BsYXRmb3JtX2dl
b21ldHJ5X2ZpbGVzJzogWwogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9p
bnQuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvbHlnb24uY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggYzY0YmVhOS4uM2IxZDc5YiAxMDA3NTUK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTI5Nzk4LDYg
KzI5Nzk4LDE0IEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGbG9hdFBvbHlnb24uY3BwIgorCQkJCQk+CisJ
CQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3Jh
cGhpY3NcRmxvYXRQb2x5Z29uLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKIAkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGbG9hdFF1YWQuY3BwIgogCQkJ
CQk+CiAJCQkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IGE2NTFkMjYuLjI5NWNlOWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE5MjMsNiArMTky
Myw4IEBACiAJCTZFQkYwRTc2MTJBOTg2ODgwMERCMTcwQSAvKiBKU0VYVERyYXdCdWZmZXJzLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQkYwRTc0
MTJBOTg2ODgwMERCMTcwQSAvKiBKU0VYVERyYXdCdWZmZXJzLmNwcCAqLzsgfTsKIAkJNkVCRjBF
NzcxMkE5ODY4ODAwREIxNzA5IC8qIEpTT0VTVGV4dHVyZUZsb2F0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUJGMEU3NTEyQTk4Njg4MDBEQjE3MDkg
LyogSlNPRVNUZXh0dXJlRmxvYXQuaCAqLzsgfTsKIAkJNkVCRjBFNzcxMkE5ODY4ODAwREIxNzBB
IC8qIEpTRVhURHJhd0J1ZmZlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDZFQkYwRTc1MTJBOTg2ODgwMERCMTcwQSAvKiBKU0VYVERyYXdCdWZmZXJz
LmggKi87IH07CisJCTZFQzQ4MEExMTZFQTYzOEEwMEE0OERDQiAvKiBGbG9hdFBvbHlnb24uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVDNDgwOUYx
NkVBNjM4QTAwQTQ4RENCIC8qIEZsb2F0UG9seWdvbi5jcHAgKi87IH07CisJCTZFQzQ4MEEyMTZF
QTYzOEEwMEE0OERDQiAvKiBGbG9hdFBvbHlnb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQzQ4MEEwMTZFQTYzOEEwMEE0OERDQiAvKiBGbG9hdFBv
bHlnb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk2RUQ4NzhDNDE0NzQ5M0Y0MDA0QzM1OTcgLyogUmVuZGVyVGFibGVDYXB0aW9uLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFRDg3OEMyMTQ3NDkz
RjQwMDRDMzU5NyAvKiBSZW5kZXJUYWJsZUNhcHRpb24uY3BwICovOyB9OwogCQk2RUQ4NzhDNTE0
NzQ5M0Y0MDA0QzM1OTcgLyogUmVuZGVyVGFibGVDYXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUQ4NzhDMzE0NzQ5M0Y0MDA0QzM1OTcgLyog
UmVuZGVyVGFibGVDYXB0aW9uLmggKi87IH07CiAJCTZFRThBNzcyMTBGODAzRjMwMDVBNEEyNCAv
KiBKU1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNkVFOEE3NzAxMEY4MDNGMzAwNUE0QTI0IC8qIEpTV2ViR0xD
b250ZXh0QXR0cmlidXRlcy5jcHAgKi87IH07CkBAIC05NDEyLDYgKzk0MTQsOCBAQAogCQk2RUJG
MEU3NDEyQTk4Njg4MDBEQjE3MEEgLyogSlNFWFREcmF3QnVmZmVycy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0VYVERyYXdCdWZmZXJzLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkVCRjBFNzUxMkE5ODY4ODAwREIxNzA5IC8qIEpTT0VTVGV4
dHVyZUZsb2F0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTT0VTVGV4dHVy
ZUZsb2F0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFQkYwRTc1MTJBOTg2ODgw
MERCMTcwQSAvKiBKU0VYVERyYXdCdWZmZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTRVhURHJhd0J1ZmZlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NkVDNDgwOUYxNkVBNjM4QTAwQTQ4RENCIC8qIEZsb2F0UG9seWdvbi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbG9hdFBvbHlnb24uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk2RUM0ODBBMDE2RUE2MzhBMDBBNDhEQ0IgLyogRmxvYXRQb2x5Z29u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsb2F0UG9seWdvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RUQ4NzhDMjE0NzQ5M0Y0MDA0QzM1OTcgLyogUmVu
ZGVyVGFibGVDYXB0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlbmRlclRhYmxlQ2FwdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZF
RDg3OEMzMTQ3NDkzRjQwMDRDMzU5NyAvKiBSZW5kZXJUYWJsZUNhcHRpb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyVGFibGVDYXB0aW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTZFRThBNzcwMTBGODAzRjMwMDVBNEEyNCAvKiBKU1dlYkdMQ29u
dGV4dEF0dHJpYnV0ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTIwNjk5LDYgKzIwNzAzLDggQEAKIAkJCQk2RTY3RDJBODEyODBFOEJEMDA4NzU4RjcgLyog
RXh0ZW5zaW9uczNELmggKi8sCiAJCQkJQjI3NTM1M0EwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0
UG9pbnQuY3BwICovLAogCQkJCUIyNzUzNTNCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50
LmggKi8sCisJCQkJNkVDNDgwOUYxNkVBNjM4QTAwQTQ4RENCIC8qIEZsb2F0UG9seWdvbi5jcHAg
Ki8sCisJCQkJNkVDNDgwQTAxNkVBNjM4QTAwQTQ4RENCIC8qIEZsb2F0UG9seWdvbi5oICovLAog
CQkJCUIyRTI3QzlEMEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50M0QuY3BwICovLAogCQkJ
CUIyRTI3QzlFMEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50M0QuaCAqLywKIAkJCQkwRkQ3
MjM4MTBFQzhCRDkzMDBDQTVERDcgLyogRmxvYXRRdWFkLmNwcCAqLywKQEAgLTIzMjc0LDYgKzIz
MjgwLDcgQEAKIAkJCWlzYSA9IFBCWEhlYWRlcnNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25N
YXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCTZFQzQ4MEEyMTZFQTYzOEEwMEE0
OERDQiAvKiBGbG9hdFBvbHlnb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMTE1RkFCMTY3OTg4
Q0QwMDI0OTEzNCAvKiBBYnN0cmFjdERhdGFiYXNlU2VydmVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlGRTlFODlGQzE2RTJEQzA1MDBBOTA4RjggLyogT3JpZ2luTG9jay5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRkU0QUFERUUxNkQyQzM3NDAwMDI2RkZDIC8qIEFic3RyYWN0U1FMU3RhdGVtZW50Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTI5OTA2LDcgKzI5OTEzLDkgQEAKIAkJCQk3RTY2RTIzMzE2RDZF
QjZDMDBGN0U3RkYgLyogV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk3RUEzMEY2OTE2REZGRTc1MDAyNTdEMEIgLyogSlNXZWJHTENvbXByZXNzZWRUZXh0
dXJlQVRDLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEODI4N0Y2MTZFNEEwMzgwMDg2QkQwMCAv
KiBIaXRUZXN0TG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNkVDNDgwQTExNkVBNjM4
QTAwQTQ4RENCIC8qIEZsb2F0UG9seWdvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODk1NzA5
RjE2RTlCRDU5MDAxODRFNTUgLyogSFRNTElkZW50aWZpZXIuY3BwIGluIFNvdXJjZXMgKi8sCisK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9seWdv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvbHlnb24uY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMDY4NDAKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvbHlnb24uY3Bw
CkBAIC0wLDAgKzEsMjM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3Rl
bXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAq
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisg
KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkZsb2F0UG9seWdvbi5oIgorCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitzdGF0aWMgaW5saW5lIGZsb2F0IGRldGVybWluYW50KGNvbnN0IEZs
b2F0U2l6ZSYgYSwgY29uc3QgRmxvYXRTaXplJiBiKQoreworICAgIHJldHVybiBhLndpZHRoKCkg
KiBiLmhlaWdodCgpIC0gYS5oZWlnaHQoKSAqIGIud2lkdGgoKTsKK30KKworc3RhdGljIGlubGlu
ZSBib29sIGFyZUNvbGxpbmVhclBvaW50cyhjb25zdCBGbG9hdFBvaW50JiBwMCwgY29uc3QgRmxv
YXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0UG9pbnQmIHAyKQoreworICAgIHJldHVybiAhZGV0ZXJt
aW5hbnQocDEgLSBwMCwgcDIgLSBwMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBhcmVDb2lu
Y2lkZW50UG9pbnRzKGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50JiBwMSkK
K3sKKyAgICByZXR1cm4gcDAueCgpID09IHAxLngoKSAmJiBwMC55KCkgPT0gcDEueSgpOworfQor
CitzdGF0aWMgaW5saW5lIGJvb2wgaXNQb2ludE9uTGluZVNlZ21lbnQoY29uc3QgRmxvYXRQb2lu
dCYgdmVydGV4MSwgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MiwgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQpCit7CisgICAgcmV0dXJuIHBvaW50LngoKSA+PSBzdGQ6Om1pbih2ZXJ0ZXgxLngoKSwg
dmVydGV4Mi54KCkpCisgICAgICAgICYmIHBvaW50LngoKSA8PSBzdGQ6Om1heCh2ZXJ0ZXgxLngo
KSwgdmVydGV4Mi54KCkpCisgICAgICAgICYmIGFyZUNvbGxpbmVhclBvaW50cyh2ZXJ0ZXgxLCB2
ZXJ0ZXgyLCBwb2ludCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbmV4dFZlcnRleElu
ZGV4KHVuc2lnbmVkIHZlcnRleEluZGV4LCB1bnNpZ25lZCBuVmVydGljZXMsIGJvb2wgY2xvY2t3
aXNlKQoreworICAgIHJldHVybiAoKGNsb2Nrd2lzZSkgPyB2ZXJ0ZXhJbmRleCArIDEgOiB2ZXJ0
ZXhJbmRleCAtIDEgKyBuVmVydGljZXMpICUgblZlcnRpY2VzOworfQorCitzdGF0aWMgdW5zaWdu
ZWQgZmluZE5leHRFZGdlVmVydGV4SW5kZXgoY29uc3QgRmxvYXRQb2x5Z29uJiBwb2x5Z29uLCB1
bnNpZ25lZCB2ZXJ0ZXhJbmRleDEsIGJvb2wgY2xvY2t3aXNlKQoreworICAgIHVuc2lnbmVkIG5W
ZXJ0aWNlcyA9IHBvbHlnb24ubnVtYmVyT2ZWZXJ0aWNlcygpOworICAgIHVuc2lnbmVkIHZlcnRl
eEluZGV4MiA9IG5leHRWZXJ0ZXhJbmRleCh2ZXJ0ZXhJbmRleDEsIG5WZXJ0aWNlcywgY2xvY2t3
aXNlKTsKKworICAgIHdoaWxlICh2ZXJ0ZXhJbmRleDIgJiYgYXJlQ29pbmNpZGVudFBvaW50cyhw
b2x5Z29uLnZlcnRleEF0KHZlcnRleEluZGV4MSksIHBvbHlnb24udmVydGV4QXQodmVydGV4SW5k
ZXgyKSkpCisgICAgICAgIHZlcnRleEluZGV4MiA9IG5leHRWZXJ0ZXhJbmRleCh2ZXJ0ZXhJbmRl
eDIsIG5WZXJ0aWNlcywgY2xvY2t3aXNlKTsKKworICAgIHdoaWxlICh2ZXJ0ZXhJbmRleDIpIHsK
KyAgICAgICAgdW5zaWduZWQgdmVydGV4SW5kZXgzID0gbmV4dFZlcnRleEluZGV4KHZlcnRleElu
ZGV4MiwgblZlcnRpY2VzLCBjbG9ja3dpc2UpOworICAgICAgICBpZiAoIWFyZUNvbGxpbmVhclBv
aW50cyhwb2x5Z29uLnZlcnRleEF0KHZlcnRleEluZGV4MSksIHBvbHlnb24udmVydGV4QXQodmVy
dGV4SW5kZXgyKSwgcG9seWdvbi52ZXJ0ZXhBdCh2ZXJ0ZXhJbmRleDMpKSkKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB2ZXJ0ZXhJbmRleDIgPSB2ZXJ0ZXhJbmRleDM7CisgICAgfQorCisg
ICAgcmV0dXJuIHZlcnRleEluZGV4MjsKK30KKworRmxvYXRQb2x5Z29uOjpGbG9hdFBvbHlnb24o
UGFzc093blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiB2ZXJ0aWNlcywgV2luZFJ1bGUgZmlsbFJ1
bGUpCisgICAgOiBtX3ZlcnRpY2VzKHZlcnRpY2VzKQorICAgICwgbV9maWxsUnVsZShmaWxsUnVs
ZSkKK3sKKyAgICB1bnNpZ25lZCBuVmVydGljZXMgPSBudW1iZXJPZlZlcnRpY2VzKCk7CisgICAg
bV9lZGdlcy5yZXNpemUoblZlcnRpY2VzKTsKKyAgICBtX2VtcHR5ID0gblZlcnRpY2VzIDwgMzsK
KworICAgIGlmIChuVmVydGljZXMpCisgICAgICAgIG1fYm91bmRpbmdCb3guc2V0TG9jYXRpb24o
dmVydGV4QXQoMCkpOworCisgICAgaWYgKG1fZW1wdHkpCisgICAgICAgIHJldHVybjsKKworICAg
IHVuc2lnbmVkIG1pblZlcnRleEluZGV4ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBp
IDwgblZlcnRpY2VzOyArK2kpIHsKKyAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4ID0g
dmVydGV4QXQoaSk7CisgICAgICAgIGlmICh2ZXJ0ZXgueSgpIDwgdmVydGV4QXQobWluVmVydGV4
SW5kZXgpLnkoKSB8fCAodmVydGV4LnkoKSA9PSB2ZXJ0ZXhBdChtaW5WZXJ0ZXhJbmRleCkueSgp
ICYmIHZlcnRleC54KCkgPCB2ZXJ0ZXhBdChtaW5WZXJ0ZXhJbmRleCkueCgpKSkKKyAgICAgICAg
ICAgIG1pblZlcnRleEluZGV4ID0gaTsKKyAgICB9CisgICAgRmxvYXRQb2ludCBuZXh0VmVydGV4
ID0gdmVydGV4QXQoKG1pblZlcnRleEluZGV4ICsgMSkgJSBuVmVydGljZXMpOworICAgIEZsb2F0
UG9pbnQgcHJldlZlcnRleCA9IHZlcnRleEF0KChtaW5WZXJ0ZXhJbmRleCArIG5WZXJ0aWNlcyAt
IDEpICUgblZlcnRpY2VzKTsKKyAgICBib29sIGNsb2Nrd2lzZSA9IGRldGVybWluYW50KHZlcnRl
eEF0KG1pblZlcnRleEluZGV4KSAtIHByZXZWZXJ0ZXgsIG5leHRWZXJ0ZXggLSBwcmV2VmVydGV4
KSA+IDA7CisKKyAgICB1bnNpZ25lZCBlZGdlSW5kZXggPSAwOworICAgIHVuc2lnbmVkIHZlcnRl
eEluZGV4MSA9IDA7CisgICAgZG8geworICAgICAgICBtX2JvdW5kaW5nQm94LmV4dGVuZCh2ZXJ0
ZXhBdCh2ZXJ0ZXhJbmRleDEpKTsKKyAgICAgICAgdW5zaWduZWQgdmVydGV4SW5kZXgyID0gZmlu
ZE5leHRFZGdlVmVydGV4SW5kZXgoKnRoaXMsIHZlcnRleEluZGV4MSwgY2xvY2t3aXNlKTsKKyAg
ICAgICAgbV9lZGdlc1tlZGdlSW5kZXhdLm1fcG9seWdvbiA9IHRoaXM7CisgICAgICAgIG1fZWRn
ZXNbZWRnZUluZGV4XS5tX3ZlcnRleEluZGV4MSA9IHZlcnRleEluZGV4MTsKKyAgICAgICAgbV9l
ZGdlc1tlZGdlSW5kZXhdLm1fdmVydGV4SW5kZXgyID0gdmVydGV4SW5kZXgyOworICAgICAgICBt
X2VkZ2VzW2VkZ2VJbmRleF0ubV9lZGdlSW5kZXggPSBlZGdlSW5kZXg7CisgICAgICAgICsrZWRn
ZUluZGV4OworICAgICAgICB2ZXJ0ZXhJbmRleDEgPSB2ZXJ0ZXhJbmRleDI7CisgICAgfSB3aGls
ZSAodmVydGV4SW5kZXgxKTsKKworICAgIGlmIChlZGdlSW5kZXggPiAzKSB7CisgICAgICAgIGNv
bnN0IEZsb2F0UG9seWdvbkVkZ2UmIGZpcnN0RWRnZSA9IG1fZWRnZXNbMF07CisgICAgICAgIGNv
bnN0IEZsb2F0UG9seWdvbkVkZ2UmIGxhc3RFZGdlID0gbV9lZGdlc1tlZGdlSW5kZXggLSAxXTsK
KyAgICAgICAgaWYgKGFyZUNvbGxpbmVhclBvaW50cyhsYXN0RWRnZS52ZXJ0ZXgxKCksIGxhc3RF
ZGdlLnZlcnRleDIoKSwgZmlyc3RFZGdlLnZlcnRleDIoKSkpIHsKKyAgICAgICAgICAgIG1fZWRn
ZXNbMF0ubV92ZXJ0ZXhJbmRleDEgPSBsYXN0RWRnZS5tX3ZlcnRleEluZGV4MTsKKyAgICAgICAg
ICAgIGVkZ2VJbmRleC0tOworICAgICAgICB9CisgICAgfQorCisgICAgbV9lZGdlcy5yZXNpemUo
ZWRnZUluZGV4KTsKKyAgICBtX2VtcHR5ID0gbV9lZGdlcy5zaXplKCkgPCAzOworCisgICAgaWYg
KG1fZW1wdHkpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX2VkZ2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgIEZsb2F0UG9seWdvbkVkZ2UqIGVkZ2Ug
PSAmbV9lZGdlc1tpXTsKKyAgICAgICAgbV9lZGdlVHJlZS5hZGQoRWRnZUludGVydmFsKGVkZ2Ut
Pm1pblkoKSwgZWRnZS0+bWF4WSgpLCBlZGdlKSk7CisgICAgfQorfQorCitib29sIEZsb2F0UG9s
eWdvbjo6b3ZlcmxhcHBpbmdFZGdlcyhmbG9hdCBtaW5ZLCBmbG9hdCBtYXhZLCBWZWN0b3I8Y29u
c3QgRmxvYXRQb2x5Z29uRWRnZSo+JiByZXN1bHQpIGNvbnN0Cit7CisgICAgVmVjdG9yPEZsb2F0
UG9seWdvbjo6RWRnZUludGVydmFsPiBvdmVybGFwcGluZ0VkZ2VJbnRlcnZhbHM7CisgICAgbV9l
ZGdlVHJlZS5hbGxPdmVybGFwcyhGbG9hdFBvbHlnb246OkVkZ2VJbnRlcnZhbChtaW5ZLCBtYXhZ
LCAwKSwgb3ZlcmxhcHBpbmdFZGdlSW50ZXJ2YWxzKTsKKyAgICB1bnNpZ25lZCBvdmVybGFwcGlu
Z0VkZ2VJbnRlcnZhbHNTaXplID0gb3ZlcmxhcHBpbmdFZGdlSW50ZXJ2YWxzLnNpemUoKTsKKyAg
ICByZXN1bHQucmVzaXplKG92ZXJsYXBwaW5nRWRnZUludGVydmFsc1NpemUpOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBvdmVybGFwcGluZ0VkZ2VJbnRlcnZhbHNTaXplOyArK2kpIHsK
KyAgICAgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSogZWRnZSA9IHN0YXRpY19jYXN0PGNvbnN0
IEZsb2F0UG9seWdvbkVkZ2UqPihvdmVybGFwcGluZ0VkZ2VJbnRlcnZhbHNbaV0uZGF0YSgpKTsK
KyAgICAgICAgQVNTRVJUKGVkZ2UpOworICAgICAgICByZXN1bHRbaV0gPSBlZGdlOworICAgIH0K
KyAgICByZXR1cm4gb3ZlcmxhcHBpbmdFZGdlSW50ZXJ2YWxzU2l6ZSA+IDA7Cit9CisKK3N0YXRp
YyBpbmxpbmUgZmxvYXQgbGVmdFNpZGUoY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MSwgY29uc3Qg
RmxvYXRQb2ludCYgdmVydGV4MiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit7CisgICAgcmV0
dXJuICgocG9pbnQueCgpIC0gdmVydGV4MS54KCkpICogKHZlcnRleDIueSgpIC0gdmVydGV4MS55
KCkpKSAtICgodmVydGV4Mi54KCkgLSB2ZXJ0ZXgxLngoKSkgKiAocG9pbnQueSgpIC0gdmVydGV4
MS55KCkpKTsKK30KKworYm9vbCBGbG9hdFBvbHlnb246OmNvbnRhaW5zKGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50KSBjb25zdAoreworICAgIGlmICghbV9ib3VuZGluZ0JveC5jb250YWlucyhwb2lu
dCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGludCB3aW5kaW5nTnVtYmVyID0gMDsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZFZGdlcygpOyArK2kpIHsKKyAg
ICAgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MSA9IGVkZ2VBdChpKS52ZXJ0ZXgxKCk7Cisg
ICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDIgPSBlZGdlQXQoaSkudmVydGV4MigpOwor
ICAgICAgICBpZiAoaXNQb2ludE9uTGluZVNlZ21lbnQodmVydGV4MSwgdmVydGV4MiwgcG9pbnQp
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICh2ZXJ0ZXgyLnkoKSA8IHBv
aW50LnkoKSkgeworICAgICAgICAgICAgaWYgKCh2ZXJ0ZXgxLnkoKSA+IHBvaW50LnkoKSkgJiYg
KGxlZnRTaWRlKHZlcnRleDEsIHZlcnRleDIsIHBvaW50KSA+IDApKQorICAgICAgICAgICAgICAg
ICsrd2luZGluZ051bWJlcjsKKyAgICAgICAgfSBlbHNlIGlmICh2ZXJ0ZXgyLnkoKSA+IHBvaW50
LnkoKSkgeworICAgICAgICAgICAgaWYgKCh2ZXJ0ZXgxLnkoKSA8PSBwb2ludC55KCkpICYmIChs
ZWZ0U2lkZSh2ZXJ0ZXgxLCB2ZXJ0ZXgyLCBwb2ludCkgPCAwKSkKKyAgICAgICAgICAgICAgICAt
LXdpbmRpbmdOdW1iZXI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gd2luZGluZ051
bWJlcjsKK30KKworYm9vbCBWZXJ0ZXhQYWlyOjpvdmVybGFwc1JlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0KSBjb25zdAoreworICAgIGJvb2wgYm91bmRzT3ZlcmxhcCA9IChtaW5YKCkgPCByZWN0
Lm1heFgoKSkgJiYgKG1heFgoKSA+IHJlY3QueCgpKSAmJiAobWluWSgpIDwgcmVjdC5tYXhZKCkp
ICYmIChtYXhZKCkgPiByZWN0LnkoKSk7CisgICAgaWYgKCFib3VuZHNPdmVybGFwKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBmbG9hdCBsZWZ0U2lkZVZhbHVlc1s0XSA9IHsKKyAgICAg
ICAgbGVmdFNpZGUodmVydGV4MSgpLCB2ZXJ0ZXgyKCksIHJlY3QubWluWE1pbllDb3JuZXIoKSks
CisgICAgICAgIGxlZnRTaWRlKHZlcnRleDEoKSwgdmVydGV4MigpLCByZWN0Lm1heFhNaW5ZQ29y
bmVyKCkpLAorICAgICAgICBsZWZ0U2lkZSh2ZXJ0ZXgxKCksIHZlcnRleDIoKSwgcmVjdC5taW5Y
TWF4WUNvcm5lcigpKSwKKyAgICAgICAgbGVmdFNpZGUodmVydGV4MSgpLCB2ZXJ0ZXgyKCksIHJl
Y3QubWF4WE1heFlDb3JuZXIoKSkKKyAgICB9OworCisgICAgaW50IGN1cnJlbnRMZWZ0U2lkZVNp
Z24gPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCA0OyArK2kpIHsKKyAgICAgICAg
aWYgKCFsZWZ0U2lkZVZhbHVlc1tpXSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBp
bnQgbGVmdFNpZGVTaWduID0gbGVmdFNpZGVWYWx1ZXNbaV0gPiAwID8gMSA6IC0xOworICAgICAg
ICBpZiAoIWN1cnJlbnRMZWZ0U2lkZVNpZ24pCisgICAgICAgICAgICBjdXJyZW50TGVmdFNpZGVT
aWduID0gbGVmdFNpZGVTaWduOworICAgICAgICBlbHNlIGlmIChjdXJyZW50TGVmdFNpZGVTaWdu
ICE9IGxlZnRTaWRlU2lnbikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBWZXJ0ZXhQYWlyOjppbnRlcnNlY3Rpb24oY29uc3Qg
VmVydGV4UGFpciYgb3RoZXIsIEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIC8vIFNl
ZTogaHR0cDovL3BhdWxib3Vya2UubmV0L2dlb21ldHJ5L3BvaW50bGluZXBsYW5lLywgIkludGVy
c2VjdGlvbiBwb2ludCBvZiB0d28gbGluZXMgaW4gMiBkaW1lbnNpb25zIgorCisgICAgY29uc3Qg
RmxvYXRTaXplJiB0aGlzRGVsdGEgPSB2ZXJ0ZXgyKCkgLSB2ZXJ0ZXgxKCk7CisgICAgY29uc3Qg
RmxvYXRTaXplJiBvdGhlckRlbHRhID0gb3RoZXIudmVydGV4MigpIC0gb3RoZXIudmVydGV4MSgp
OworICAgIGZsb2F0IGRlbm9taW5hdG9yID0gZGV0ZXJtaW5hbnQodGhpc0RlbHRhLCBvdGhlckRl
bHRhKTsKKyAgICBpZiAoIWRlbm9taW5hdG9yKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAvLyBUaGUgdHdvIGxpbmUgc2VnbWVudHM6ICJ0aGlzIiB2ZXJ0ZXgxLHZlcnRleDIgYW5kICJv
dGhlciIgdmVydGV4MSx2ZXJ0ZXgyLCBoYXZlIGJlZW4gZGVmaW5lZAorICAgIC8vIGluIHBhcmFt
ZXRyaWMgZm9ybS4gRWFjaCBwb2ludCBvbiB0aGUgbGluZSBzZWdtZW50IGlzOiB2ZXJ0ZXgxICsg
dSAqICh2ZXJ0ZXgyIC0gdmVydGV4MSksCisgICAgLy8gd2hlbiAwIDw9IHUgPD0gMS4gV2UncmUg
Y29tcHV0aW5nIHRoZSB2YWx1ZXMgb2YgdSBmb3IgZWFjaCBsaW5lIGF0IHRoZWlyIGludGVyc2Vj
dGlvbiBwb2ludC4KKworICAgIGNvbnN0IEZsb2F0U2l6ZSYgdmVydGV4MURlbHRhID0gdmVydGV4
MSgpIC0gb3RoZXIudmVydGV4MSgpOworICAgIGZsb2F0IHVUaGlzTGluZSA9IGRldGVybWluYW50
KG90aGVyRGVsdGEsIHZlcnRleDFEZWx0YSkgLyBkZW5vbWluYXRvcjsKKyAgICBmbG9hdCB1T3Ro
ZXJMaW5lID0gZGV0ZXJtaW5hbnQodGhpc0RlbHRhLCB2ZXJ0ZXgxRGVsdGEpIC8gZGVub21pbmF0
b3I7CisKKyAgICBpZiAodVRoaXNMaW5lIDwgMCB8fCB1T3RoZXJMaW5lIDwgMCB8fCB1VGhpc0xp
bmUgPiAxIHx8IHVPdGhlckxpbmUgPiAxKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBw
b2ludCA9IHZlcnRleDEoKSArIHVUaGlzTGluZSAqIHRoaXNEZWx0YTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2x5Z29uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFBvbHlnb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi44ZGVmZTE0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRQb2x5Z29uLmgKQEAgLTAsMCArMSwxNTAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlz
Y2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAg
ICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIEZsb2F0UG9seWdvbl9oCisjZGVmaW5lIEZsb2F0UG9seWdvbl9oCisKKyNpbmNsdWRlICJG
bG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiUE9ESW50ZXJ2
YWxUcmVlLmgiCisjaW5jbHVkZSAiV2luZFJ1bGUuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmxvYXRQb2x5Z29uRWRnZTsKKworLy8gVGhp
cyBjbGFzcyBpcyB1c2VkIGJ5IFBPREludGVydmFsVHJlZSBmb3IgZGVidWdnaW5nLgorI2lmbmRl
ZiBOREVCVUcKK3RlbXBsYXRlIDxjbGFzcz4gc3RydWN0IFZhbHVlVG9TdHJpbmc7CisjZW5kaWYK
KworY2xhc3MgRmxvYXRQb2x5Z29uIHsKK3B1YmxpYzoKKyAgICBGbG9hdFBvbHlnb24oUGFzc093
blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiB2ZXJ0aWNlcywgV2luZFJ1bGUgZmlsbFJ1bGUpOwor
CisgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4QXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuICgqbV92ZXJ0aWNlcylbaW5kZXhdOyB9CisgICAgdW5zaWduZWQgbnVtYmVyT2ZWZXJ0
aWNlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGljZXMtPnNpemUoKTsgfQorCisgICAgV2luZFJ1
bGUgZmlsbFJ1bGUoKSBjb25zdCB7IHJldHVybiBtX2ZpbGxSdWxlOyB9CisKKyAgICBjb25zdCBG
bG9hdFBvbHlnb25FZGdlJiBlZGdlQXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1f
ZWRnZXNbaW5kZXhdOyB9CisgICAgdW5zaWduZWQgbnVtYmVyT2ZFZGdlcygpIGNvbnN0IHsgcmV0
dXJuIG1fZWRnZXMuc2l6ZSgpOyB9CisKKyAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3goKSBjb25z
dCB7IHJldHVybiBtX2JvdW5kaW5nQm94OyB9CisgICAgYm9vbCBvdmVybGFwcGluZ0VkZ2VzKGZs
b2F0IG1pblksIGZsb2F0IG1heFksIFZlY3Rvcjxjb25zdCBGbG9hdFBvbHlnb25FZGdlKj4mIHJl
c3VsdCkgY29uc3Q7CisgICAgYm9vbCBjb250YWlucyhjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7
CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9lbXB0eTsgfQorCitwcml2YXRl
OgorICAgIHR5cGVkZWYgUE9ESW50ZXJ2YWw8ZmxvYXQsIEZsb2F0UG9seWdvbkVkZ2UqPiBFZGdl
SW50ZXJ2YWw7CisgICAgdHlwZWRlZiBQT0RJbnRlcnZhbFRyZWU8ZmxvYXQsIEZsb2F0UG9seWdv
bkVkZ2UqPiBFZGdlSW50ZXJ2YWxUcmVlOworCisgICAgT3duUHRyPFZlY3RvcjxGbG9hdFBvaW50
PiA+IG1fdmVydGljZXM7CisgICAgV2luZFJ1bGUgbV9maWxsUnVsZTsKKyAgICBGbG9hdFJlY3Qg
bV9ib3VuZGluZ0JveDsKKyAgICBib29sIG1fZW1wdHk7CisgICAgVmVjdG9yPEZsb2F0UG9seWdv
bkVkZ2U+IG1fZWRnZXM7CisgICAgRWRnZUludGVydmFsVHJlZSBtX2VkZ2VUcmVlOyAvLyBFYWNo
IEVkZ2VJbnRlcnZhbFRyZWUgbm9kZSBzdG9yZXMgbWluWSwgbWF4WSwgYW5kIGEgKCJVc2VyRGF0
YSIpIHBvaW50ZXIgdG8gYSBGbG9hdFBvbHlnb25FZGdlLgorCit9OworCitjbGFzcyBWZXJ0ZXhQ
YWlyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5WZXJ0ZXhQYWlyKCkgeyB9CisKKyAgICB2aXJ0
dWFsIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDEoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBj
b25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgyKCkgY29uc3QgPSAwOworCisgICAgZmxvYXQgbWluWCgp
IGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWluKHZlcnRleDEoKS54KCksIHZlcnRleDIoKS54KCkpOyB9
CisgICAgZmxvYXQgbWluWSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWluKHZlcnRleDEoKS55KCks
IHZlcnRleDIoKS55KCkpOyB9CisgICAgZmxvYXQgbWF4WCgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6
bWF4KHZlcnRleDEoKS54KCksIHZlcnRleDIoKS54KCkpOyB9CisgICAgZmxvYXQgbWF4WSgpIGNv
bnN0IHsgcmV0dXJuIHN0ZDo6bWF4KHZlcnRleDEoKS55KCksIHZlcnRleDIoKS55KCkpOyB9CisK
KyAgICBib29sIG92ZXJsYXBzUmVjdChjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKKyAgICBib29s
IGludGVyc2VjdGlvbihjb25zdCBWZXJ0ZXhQYWlyJiwgRmxvYXRQb2ludCYpIGNvbnN0OworfTsK
KworY2xhc3MgRmxvYXRQb2x5Z29uRWRnZSA6IHB1YmxpYyBWZXJ0ZXhQYWlyIHsKKyAgICBmcmll
bmQgY2xhc3MgRmxvYXRQb2x5Z29uOworcHVibGljOgorICAgIHZpcnR1YWwgY29uc3QgRmxvYXRQ
b2ludCYgdmVydGV4MSgpIGNvbnN0IE9WRVJSSURFCisgICAgeworICAgICAgICBBU1NFUlQobV9w
b2x5Z29uKTsKKyAgICAgICAgcmV0dXJuIG1fcG9seWdvbi0+dmVydGV4QXQobV92ZXJ0ZXhJbmRl
eDEpOworICAgIH0KKworICAgIHZpcnR1YWwgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MigpIGNv
bnN0IE9WRVJSSURFCisgICAgeworICAgICAgICBBU1NFUlQobV9wb2x5Z29uKTsKKyAgICAgICAg
cmV0dXJuIG1fcG9seWdvbi0+dmVydGV4QXQobV92ZXJ0ZXhJbmRleDIpOworICAgIH0KKworICAg
IGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIHByZXZpb3VzRWRnZSgpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQobV9wb2x5Z29uICYmIG1fcG9seWdvbi0+bnVtYmVyT2ZFZGdlcygpID4gMSk7
CisgICAgICAgIHJldHVybiBtX3BvbHlnb24tPmVkZ2VBdCgobV9lZGdlSW5kZXggKyBtX3BvbHln
b24tPm51bWJlck9mRWRnZXMoKSAtIDEpICUgbV9wb2x5Z29uLT5udW1iZXJPZkVkZ2VzKCkpOwor
ICAgIH0KKworICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIG5leHRFZGdlKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX3BvbHlnb24gJiYgbV9wb2x5Z29uLT5udW1iZXJPZkVkZ2Vz
KCkgPiAxKTsKKyAgICAgICAgcmV0dXJuIG1fcG9seWdvbi0+ZWRnZUF0KChtX2VkZ2VJbmRleCAr
IDEpICUgbV9wb2x5Z29uLT5udW1iZXJPZkVkZ2VzKCkpOworICAgIH0KKworICAgIGNvbnN0IEZs
b2F0UG9seWdvbiogcG9seWdvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9seWdvbjsgfQorICAgIHVu
c2lnbmVkIHZlcnRleEluZGV4MSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGV4SW5kZXgxOyB9Cisg
ICAgdW5zaWduZWQgdmVydGV4SW5kZXgyKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0ZXhJbmRleDI7
IH0KKyAgICB1bnNpZ25lZCBlZGdlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2VkZ2VJbmRleDsg
fQorCitwcml2YXRlOgorICAgIC8vIEVkZ2UgdmVydGV4IGluZGV4MSBpcyBsZXNzIHRoYW4gaW5k
ZXgyLCBleGNlcHQgdGhlIGxhc3QgZWRnZSwgd2hlcmUgaW5kZXgyIGlzIDAuIFdoZW4gYSBwb2x5
Z29uIGVkZ2UKKyAgICAvLyBpcyBkZWZpbmVkIGJ5IDMgb3IgbW9yZSBjb2xpbmVhciB2ZXJ0aWNl
cywgaW5kZXgyIGNhbiBiZSB0aGUgdGhlIGluZGV4IG9mIHRoZSBsYXN0IGNvbGluZWFyIHZlcnRl
eC4KKyAgICB1bnNpZ25lZCBtX3ZlcnRleEluZGV4MTsKKyAgICB1bnNpZ25lZCBtX3ZlcnRleElu
ZGV4MjsKKyAgICB1bnNpZ25lZCBtX2VkZ2VJbmRleDsKKyAgICBjb25zdCBGbG9hdFBvbHlnb24q
IG1fcG9seWdvbjsKK307CisKKy8vIFRoZXNlIHN0cnVjdHVyZXMgYXJlIHVzZWQgYnkgUE9ESW50
ZXJ2YWxUcmVlIGZvciBkZWJ1Z2dpbmcuCisjaWZuZGVmIE5ERUJVRwordGVtcGxhdGUgPD4gc3Ry
dWN0IFZhbHVlVG9TdHJpbmc8ZmxvYXQ+IHsKKyAgICBzdGF0aWMgU3RyaW5nIHN0cmluZyhjb25z
dCBmbG9hdCB2YWx1ZSkgeyByZXR1cm4gU3RyaW5nOjpudW1iZXIodmFsdWUpOyB9Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBWYWx1ZVRvU3RyaW5nPEZsb2F0UG9seWdvbkVkZ2UqPiB7CisgICAg
c3RhdGljIFN0cmluZyBzdHJpbmcoY29uc3QgRmxvYXRQb2x5Z29uRWRnZSogZWRnZSkgeyByZXR1
cm4gU3RyaW5nOjpmb3JtYXQoIiVwICglZiwlZiAlZiwlZikiLCBlZGdlLCBlZGdlLT52ZXJ0ZXgx
KCkueCgpLCBlZGdlLT52ZXJ0ZXgxKCkueSgpLCBlZGdlLT52ZXJ0ZXgyKCkueCgpLCBlZGdlLT52
ZXJ0ZXgyKCkueSgpKTsgfQorfTsKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBGbG9hdFBvbHlnb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4
Y2x1c2lvblBvbHlnb24uY3BwCmluZGV4IDEwNjBjMjAuLjVmNTlkYzAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHAKQEAgLTQyLDExOCArNDIsMTkg
QEAgZW51bSBFZGdlSW50ZXJzZWN0aW9uVHlwZSB7CiB9OwogCiBzdHJ1Y3QgRWRnZUludGVyc2Vj
dGlvbiB7Ci0gICAgY29uc3QgRXhjbHVzaW9uUG9seWdvbkVkZ2UqIGVkZ2U7CisgICAgY29uc3Qg
RmxvYXRQb2x5Z29uRWRnZSogZWRnZTsKICAgICBGbG9hdFBvaW50IHBvaW50OwogICAgIEVkZ2VJ
bnRlcnNlY3Rpb25UeXBlIHR5cGU7CiB9OwogCi1zdGF0aWMgaW5saW5lIGZsb2F0IGRldGVybWlu
YW50KGNvbnN0IEZsb2F0U2l6ZSYgYSwgY29uc3QgRmxvYXRTaXplJiBiKQotewotICAgIHJldHVy
biBhLndpZHRoKCkgKiBiLmhlaWdodCgpIC0gYS5oZWlnaHQoKSAqIGIud2lkdGgoKTsKLX0KLQot
c3RhdGljIGlubGluZSBib29sIGFyZUNvbGxpbmVhclBvaW50cyhjb25zdCBGbG9hdFBvaW50JiBw
MCwgY29uc3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0UG9pbnQmIHAyKQotewotICAgIHJl
dHVybiAhZGV0ZXJtaW5hbnQocDEgLSBwMCwgcDIgLSBwMCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
Ym9vbCBhcmVDb2luY2lkZW50UG9pbnRzKGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9h
dFBvaW50JiBwMSkKLXsKLSAgICByZXR1cm4gcDAueCgpID09IHAxLngoKSAmJiBwMC55KCkgPT0g
cDEueSgpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNQb2ludE9uTGluZVNlZ21lbnQoY29u
c3QgRmxvYXRQb2ludCYgdmVydGV4MSwgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MiwgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQpCi17Ci0gICAgcmV0dXJuIHBvaW50LngoKSA+PSBzdGQ6Om1pbih2
ZXJ0ZXgxLngoKSwgdmVydGV4Mi54KCkpCi0gICAgICAgICYmIHBvaW50LngoKSA8PSBzdGQ6Om1h
eCh2ZXJ0ZXgxLngoKSwgdmVydGV4Mi54KCkpCi0gICAgICAgICYmIGFyZUNvbGxpbmVhclBvaW50
cyh2ZXJ0ZXgxLCB2ZXJ0ZXgyLCBwb2ludCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQg
bmV4dFZlcnRleEluZGV4KHVuc2lnbmVkIHZlcnRleEluZGV4LCB1bnNpZ25lZCBuVmVydGljZXMs
IGJvb2wgY2xvY2t3aXNlKQotewotICAgIHJldHVybiAoKGNsb2Nrd2lzZSkgPyB2ZXJ0ZXhJbmRl
eCArIDEgOiB2ZXJ0ZXhJbmRleCAtIDEgKyBuVmVydGljZXMpICUgblZlcnRpY2VzOwotfQotCi11
bnNpZ25lZCBFeGNsdXNpb25Qb2x5Z29uOjpmaW5kTmV4dEVkZ2VWZXJ0ZXhJbmRleCh1bnNpZ25l
ZCB2ZXJ0ZXhJbmRleDEsIGJvb2wgY2xvY2t3aXNlKSBjb25zdAotewotICAgIHVuc2lnbmVkIG5W
ZXJ0aWNlcyA9IG51bWJlck9mVmVydGljZXMoKTsKLSAgICB1bnNpZ25lZCB2ZXJ0ZXhJbmRleDIg
PSBuZXh0VmVydGV4SW5kZXgodmVydGV4SW5kZXgxLCBuVmVydGljZXMsIGNsb2Nrd2lzZSk7Ci0K
LSAgICB3aGlsZSAodmVydGV4SW5kZXgyICYmIGFyZUNvaW5jaWRlbnRQb2ludHModmVydGV4QXQo
dmVydGV4SW5kZXgxKSwgdmVydGV4QXQodmVydGV4SW5kZXgyKSkpCi0gICAgICAgIHZlcnRleElu
ZGV4MiA9IG5leHRWZXJ0ZXhJbmRleCh2ZXJ0ZXhJbmRleDIsIG5WZXJ0aWNlcywgY2xvY2t3aXNl
KTsKLQotICAgIHdoaWxlICh2ZXJ0ZXhJbmRleDIpIHsKLSAgICAgICAgdW5zaWduZWQgdmVydGV4
SW5kZXgzID0gbmV4dFZlcnRleEluZGV4KHZlcnRleEluZGV4MiwgblZlcnRpY2VzLCBjbG9ja3dp
c2UpOwotICAgICAgICBpZiAoIWFyZUNvbGxpbmVhclBvaW50cyh2ZXJ0ZXhBdCh2ZXJ0ZXhJbmRl
eDEpLCB2ZXJ0ZXhBdCh2ZXJ0ZXhJbmRleDIpLCB2ZXJ0ZXhBdCh2ZXJ0ZXhJbmRleDMpKSkKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB2ZXJ0ZXhJbmRleDIgPSB2ZXJ0ZXhJbmRleDM7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHZlcnRleEluZGV4MjsKLX0KLQotRXhjbHVzaW9uUG9seWdvbjo6
RXhjbHVzaW9uUG9seWdvbihQYXNzT3duUHRyPFZlY3RvcjxGbG9hdFBvaW50PiA+IHZlcnRpY2Vz
LCBXaW5kUnVsZSBmaWxsUnVsZSkKLSAgICA6IEV4Y2x1c2lvblNoYXBlKCkKLSAgICAsIG1fdmVy
dGljZXModmVydGljZXMpCi0gICAgLCBtX2ZpbGxSdWxlKGZpbGxSdWxlKQorc3RhdGljIGlubGlu
ZSBmbG9hdCBsZWZ0U2lkZShjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgxLCBjb25zdCBGbG9hdFBv
aW50JiB2ZXJ0ZXgyLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKIHsKLSAgICB1bnNpZ25lZCBu
VmVydGljZXMgPSBudW1iZXJPZlZlcnRpY2VzKCk7Ci0gICAgbV9lZGdlcy5yZXNpemUoblZlcnRp
Y2VzKTsKLSAgICBtX2VtcHR5ID0gblZlcnRpY2VzIDwgMzsKLQotICAgIGlmIChuVmVydGljZXMp
Ci0gICAgICAgIG1fYm91bmRpbmdCb3guc2V0TG9jYXRpb24odmVydGV4QXQoMCkpOwotCi0gICAg
aWYgKG1fZW1wdHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVkIG1pblZlcnRleElu
ZGV4ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgblZlcnRpY2VzOyArK2kpIHsK
LSAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4ID0gdmVydGV4QXQoaSk7Ci0gICAgICAg
IGlmICh2ZXJ0ZXgueSgpIDwgdmVydGV4QXQobWluVmVydGV4SW5kZXgpLnkoKSB8fCAodmVydGV4
LnkoKSA9PSB2ZXJ0ZXhBdChtaW5WZXJ0ZXhJbmRleCkueSgpICYmIHZlcnRleC54KCkgPCB2ZXJ0
ZXhBdChtaW5WZXJ0ZXhJbmRleCkueCgpKSkKLSAgICAgICAgICAgIG1pblZlcnRleEluZGV4ID0g
aTsKLSAgICB9Ci0gICAgRmxvYXRQb2ludCBuZXh0VmVydGV4ID0gdmVydGV4QXQoKG1pblZlcnRl
eEluZGV4ICsgMSkgJSBuVmVydGljZXMpOwotICAgIEZsb2F0UG9pbnQgcHJldlZlcnRleCA9IHZl
cnRleEF0KChtaW5WZXJ0ZXhJbmRleCArIG5WZXJ0aWNlcyAtIDEpICUgblZlcnRpY2VzKTsKLSAg
ICBib29sIGNsb2Nrd2lzZSA9IGRldGVybWluYW50KHZlcnRleEF0KG1pblZlcnRleEluZGV4KSAt
IHByZXZWZXJ0ZXgsIG5leHRWZXJ0ZXggLSBwcmV2VmVydGV4KSA+IDA7Ci0KLSAgICB1bnNpZ25l
ZCBlZGdlSW5kZXggPSAwOwotICAgIHVuc2lnbmVkIHZlcnRleEluZGV4MSA9IDA7Ci0gICAgZG8g
ewotICAgICAgICBtX2JvdW5kaW5nQm94LmV4dGVuZCh2ZXJ0ZXhBdCh2ZXJ0ZXhJbmRleDEpKTsK
LSAgICAgICAgdW5zaWduZWQgdmVydGV4SW5kZXgyID0gZmluZE5leHRFZGdlVmVydGV4SW5kZXgo
dmVydGV4SW5kZXgxLCBjbG9ja3dpc2UpOwotICAgICAgICBtX2VkZ2VzW2VkZ2VJbmRleF0ubV9w
b2x5Z29uID0gdGhpczsKLSAgICAgICAgbV9lZGdlc1tlZGdlSW5kZXhdLm1fdmVydGV4SW5kZXgx
ID0gdmVydGV4SW5kZXgxOwotICAgICAgICBtX2VkZ2VzW2VkZ2VJbmRleF0ubV92ZXJ0ZXhJbmRl
eDIgPSB2ZXJ0ZXhJbmRleDI7Ci0gICAgICAgIG1fZWRnZXNbZWRnZUluZGV4XS5tX2VkZ2VJbmRl
eCA9IGVkZ2VJbmRleDsKLSAgICAgICAgKytlZGdlSW5kZXg7Ci0gICAgICAgIHZlcnRleEluZGV4
MSA9IHZlcnRleEluZGV4MjsKLSAgICB9IHdoaWxlICh2ZXJ0ZXhJbmRleDEpOwotCi0gICAgaWYg
KGVkZ2VJbmRleCA+IDMpIHsKLSAgICAgICAgY29uc3QgRXhjbHVzaW9uUG9seWdvbkVkZ2UmIGZp
cnN0RWRnZSA9IG1fZWRnZXNbMF07Ci0gICAgICAgIGNvbnN0IEV4Y2x1c2lvblBvbHlnb25FZGdl
JiBsYXN0RWRnZSA9IG1fZWRnZXNbZWRnZUluZGV4IC0gMV07Ci0gICAgICAgIGlmIChhcmVDb2xs
aW5lYXJQb2ludHMobGFzdEVkZ2UudmVydGV4MSgpLCBsYXN0RWRnZS52ZXJ0ZXgyKCksIGZpcnN0
RWRnZS52ZXJ0ZXgyKCkpKSB7Ci0gICAgICAgICAgICBtX2VkZ2VzWzBdLm1fdmVydGV4SW5kZXgx
ID0gbGFzdEVkZ2UubV92ZXJ0ZXhJbmRleDE7Ci0gICAgICAgICAgICBlZGdlSW5kZXgtLTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIG1fZWRnZXMucmVzaXplKGVkZ2VJbmRleCk7Ci0gICAgbV9l
bXB0eSA9IG1fZWRnZXMuc2l6ZSgpIDwgMzsKLQotICAgIGlmIChtX2VtcHR5KQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9lZGdlcy5zaXplKCk7ICsr
aSkgewotICAgICAgICBFeGNsdXNpb25Qb2x5Z29uRWRnZSogZWRnZSA9ICZtX2VkZ2VzW2ldOwot
ICAgICAgICBtX2VkZ2VUcmVlLmFkZChFZGdlSW50ZXJ2YWwoZWRnZS0+bWluWSgpLCBlZGdlLT5t
YXhZKCksIGVkZ2UpKTsKLSAgICB9CisgICAgcmV0dXJuICgocG9pbnQueCgpIC0gdmVydGV4MS54
KCkpICogKHZlcnRleDIueSgpIC0gdmVydGV4MS55KCkpKSAtICgodmVydGV4Mi54KCkgLSB2ZXJ0
ZXgxLngoKSkgKiAocG9pbnQueSgpIC0gdmVydGV4MS55KCkpKTsKIH0KIAotc3RhdGljIGJvb2wg
Y29tcHV0ZVhJbnRlcnNlY3Rpb24oY29uc3QgRXhjbHVzaW9uUG9seWdvbkVkZ2UqIGVkZ2VQb2lu
dGVyLCBmbG9hdCB5LCBFZGdlSW50ZXJzZWN0aW9uJiByZXN1bHQpCitzdGF0aWMgYm9vbCBjb21w
dXRlWEludGVyc2VjdGlvbihjb25zdCBGbG9hdFBvbHlnb25FZGdlKiBlZGdlUG9pbnRlciwgZmxv
YXQgeSwgRWRnZUludGVyc2VjdGlvbiYgcmVzdWx0KQogewotICAgIGNvbnN0IEV4Y2x1c2lvblBv
bHlnb25FZGdlJiBlZGdlID0gKmVkZ2VQb2ludGVyOworICAgIGNvbnN0IEZsb2F0UG9seWdvbkVk
Z2UmIGVkZ2UgPSAqZWRnZVBvaW50ZXI7CiAKICAgICBpZiAoZWRnZS5taW5ZKCkgPiB5IHx8IGVk
Z2UubWF4WSgpIDwgeSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTkyLDggKzkzLDggQEAg
c3RhdGljIGlubGluZSBib29sIGdldFZlcnRleEludGVyc2VjdGlvblZlcnRpY2VzKGNvbnN0IEVk
Z2VJbnRlcnNlY3Rpb24mIGludGVyc2UKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgQVNT
RVJUKGludGVyc2VjdGlvbi5lZGdlICYmIGludGVyc2VjdGlvbi5lZGdlLT5wb2x5Z29uKCkpOwot
ICAgIGNvbnN0IEV4Y2x1c2lvblBvbHlnb24mIHBvbHlnb24gPSAqKGludGVyc2VjdGlvbi5lZGdl
LT5wb2x5Z29uKCkpOwotICAgIGNvbnN0IEV4Y2x1c2lvblBvbHlnb25FZGdlJiB0aGlzRWRnZSA9
ICooaW50ZXJzZWN0aW9uLmVkZ2UpOworICAgIGNvbnN0IEZsb2F0UG9seWdvbiYgcG9seWdvbiA9
ICooaW50ZXJzZWN0aW9uLmVkZ2UtPnBvbHlnb24oKSk7CisgICAgY29uc3QgRmxvYXRQb2x5Z29u
RWRnZSYgdGhpc0VkZ2UgPSAqKGludGVyc2VjdGlvbi5lZGdlKTsKIAogICAgIGlmICgoaW50ZXJz
ZWN0aW9uLnR5cGUgPT0gVmVydGV4TWluWSAmJiAodGhpc0VkZ2UudmVydGV4MSgpLnkoKSA8IHRo
aXNFZGdlLnZlcnRleDIoKS55KCkpKQogICAgICAgICB8fCAoaW50ZXJzZWN0aW9uLnR5cGUgPT0g
VmVydGV4TWF4WSAmJiAodGhpc0VkZ2UudmVydGV4MSgpLnkoKSA+IHRoaXNFZGdlLnZlcnRleDIo
KS55KCkpKSkgewpAQCAtMjI2LDE4ICsxMjcsMTggQEAgc3RhdGljIGJvb2wgY29tcGFyZUVkZ2VJ
bnRlcnNlY3Rpb25YKGNvbnN0IEVkZ2VJbnRlcnNlY3Rpb24mIGludGVyc2VjdGlvbjEsIGNvbnMK
ICAgICByZXR1cm4gKHgxID09IHgyKSA/IGludGVyc2VjdGlvbjEudHlwZSA8IGludGVyc2VjdGlv
bjIudHlwZSA6IHgxIDwgeDI7CiB9CiAKLXZvaWQgRXhjbHVzaW9uUG9seWdvbjo6Y29tcHV0ZVhJ
bnRlcnNlY3Rpb25zKGZsb2F0IHksIGJvb2wgaXNNaW5ZLCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2
YWw+JiByZXN1bHQpIGNvbnN0CitzdGF0aWMgdm9pZCBjb21wdXRlWEludGVyc2VjdGlvbnMoY29u
c3QgRmxvYXRQb2x5Z29uJiBwb2x5Z29uLCBmbG9hdCB5LCBib29sIGlzTWluWSwgVmVjdG9yPEV4
Y2x1c2lvbkludGVydmFsPiYgcmVzdWx0KQogewotICAgIFZlY3RvcjxFeGNsdXNpb25Qb2x5Z29u
OjpFZGdlSW50ZXJ2YWw+IG92ZXJsYXBwaW5nRWRnZXM7Ci0gICAgbV9lZGdlVHJlZS5hbGxPdmVy
bGFwcyhFeGNsdXNpb25Qb2x5Z29uOjpFZGdlSW50ZXJ2YWwoeSwgeSwgMCksIG92ZXJsYXBwaW5n
RWRnZXMpOworICAgIFZlY3Rvcjxjb25zdCBGbG9hdFBvbHlnb25FZGdlKj4gZWRnZXM7CisgICAg
aWYgKCFwb2x5Z29uLm92ZXJsYXBwaW5nRWRnZXMoeSwgeSwgZWRnZXMpKQorICAgICAgICByZXR1
cm47CiAKICAgICBWZWN0b3I8RWRnZUludGVyc2VjdGlvbj4gaW50ZXJzZWN0aW9uczsKICAgICBF
ZGdlSW50ZXJzZWN0aW9uIGludGVyc2VjdGlvbjsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgb3ZlcmxhcHBpbmdFZGdlcy5zaXplKCk7ICsraSkgewotICAgICAgICBFeGNsdXNpb25Qb2x5
Z29uRWRnZSogZWRnZSA9IHN0YXRpY19jYXN0PEV4Y2x1c2lvblBvbHlnb25FZGdlKj4ob3Zlcmxh
cHBpbmdFZGdlc1tpXS5kYXRhKCkpOwotICAgICAgICBpZiAoY29tcHV0ZVhJbnRlcnNlY3Rpb24o
ZWRnZSwgeSwgaW50ZXJzZWN0aW9uKSAmJiBpbnRlcnNlY3Rpb24udHlwZSAhPSBWZXJ0ZXhZQm90
aCkKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWRnZXMuc2l6ZSgpOyArK2kpCisgICAg
ICAgIGlmIChjb21wdXRlWEludGVyc2VjdGlvbihlZGdlc1tpXSwgeSwgaW50ZXJzZWN0aW9uKSAm
JiBpbnRlcnNlY3Rpb24udHlwZSAhPSBWZXJ0ZXhZQm90aCkKICAgICAgICAgICAgIGludGVyc2Vj
dGlvbnMuYXBwZW5kKGludGVyc2VjdGlvbik7Ci0gICAgfQorCiAgICAgaWYgKGludGVyc2VjdGlv
bnMuc2l6ZSgpIDwgMikKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNjMsMTAgKzE2NCwxMCBAQCB2
b2lkIEV4Y2x1c2lvblBvbHlnb246OmNvbXB1dGVYSW50ZXJzZWN0aW9ucyhmbG9hdCB5LCBib29s
IGlzTWluWSwgVmVjdG9yPEV4Y2x1cwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAg
ICAgY29uc3QgRXhjbHVzaW9uUG9seWdvbkVkZ2UmIHRoaXNFZGdlID0gKnRoaXNJbnRlcnNlY3Rp
b24uZWRnZTsKKyAgICAgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgdGhpc0VkZ2UgPSAqdGhp
c0ludGVyc2VjdGlvbi5lZGdlOwogICAgICAgICBib29sIGV2ZW5PZGRDcm9zc2luZyA9ICF3aW5k
Q291bnQ7CiAKLSAgICAgICAgaWYgKGZpbGxSdWxlKCkgPT0gUlVMRV9FVkVOT0REKSB7CisgICAg
ICAgIGlmIChwb2x5Z29uLmZpbGxSdWxlKCkgPT0gUlVMRV9FVkVOT0REKSB7CiAgICAgICAgICAg
ICB3aW5kQ291bnQgKz0gKHRoaXNFZGdlLnZlcnRleDIoKS55KCkgPiB0aGlzRWRnZS52ZXJ0ZXgx
KCkueSgpKSA/IDEgOiAtMTsKICAgICAgICAgICAgIGV2ZW5PZGRDcm9zc2luZyA9IGV2ZW5PZGRD
cm9zc2luZyB8fCAhd2luZENvdW50OwogICAgICAgICB9CkBAIC0yOTUsMTUgKzE5NiwxNSBAQCB2
b2lkIEV4Y2x1c2lvblBvbHlnb246OmNvbXB1dGVYSW50ZXJzZWN0aW9ucyhmbG9hdCB5LCBib29s
IGlzTWluWSwgVmVjdG9yPEV4Y2x1cwogICAgIH0KIH0KIAotLy8gUmV0dXJuIHRoZSBYIHByb2pl
Y3Rpb25zIG9mIHRoZSBlZGdlcyB0aGF0IG92ZXJsYXAgeTEseTIuCi12b2lkIEV4Y2x1c2lvblBv
bHlnb246OmNvbXB1dGVFZGdlSW50ZXJzZWN0aW9ucyhmbG9hdCB5MSwgZmxvYXQgeTIsIFZlY3Rv
cjxFeGNsdXNpb25JbnRlcnZhbD4mIHJlc3VsdCkgY29uc3QKK3N0YXRpYyB2b2lkIGNvbXB1dGVP
dmVybGFwcGluZ0VkZ2VYUHJvamVjdGlvbnMoY29uc3QgRmxvYXRQb2x5Z29uJiBwb2x5Z29uLCBm
bG9hdCB5MSwgZmxvYXQgeTIsIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mIHJlc3VsdCkKIHsK
LSAgICBWZWN0b3I8RXhjbHVzaW9uUG9seWdvbjo6RWRnZUludGVydmFsPiBvdmVybGFwcGluZ0Vk
Z2VzOwotICAgIG1fZWRnZVRyZWUuYWxsT3ZlcmxhcHMoRXhjbHVzaW9uUG9seWdvbjo6RWRnZUlu
dGVydmFsKHkxLCB5MiwgMCksIG92ZXJsYXBwaW5nRWRnZXMpOworICAgIFZlY3Rvcjxjb25zdCBG
bG9hdFBvbHlnb25FZGdlKj4gZWRnZXM7CisgICAgaWYgKCFwb2x5Z29uLm92ZXJsYXBwaW5nRWRn
ZXMoeTEsIHkyLCBlZGdlcykpCisgICAgICAgIHJldHVybjsKIAogICAgIEVkZ2VJbnRlcnNlY3Rp
b24gaW50ZXJzZWN0aW9uOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvdmVybGFwcGlu
Z0VkZ2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEV4Y2x1c2lvblBvbHlnb25FZGdl
ICplZGdlID0gc3RhdGljX2Nhc3Q8RXhjbHVzaW9uUG9seWdvbkVkZ2UqPihvdmVybGFwcGluZ0Vk
Z2VzW2ldLmRhdGEoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVkZ2VzLnNpemUo
KTsgKytpKSB7CisgICAgICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UgKmVkZ2UgPSBlZGdlc1tp
XTsKICAgICAgICAgZmxvYXQgeDE7CiAgICAgICAgIGZsb2F0IHgyOwogCkBAIC0zMzgsMTQgKzIz
OSwxNCBAQCB2b2lkIEV4Y2x1c2lvblBvbHlnb246OmdldEV4Y2x1ZGVkSW50ZXJ2YWxzKGZsb2F0
IGxvZ2ljYWxUb3AsIGZsb2F0IGxvZ2ljYWxIZWlnaAogICAgIGZsb2F0IHkyID0geTEgKyBsb2dp
Y2FsSGVpZ2h0OwogCiAgICAgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiB5MVhJbnRlcnZhbHMs
IHkyWEludGVydmFsczsKLSAgICBjb21wdXRlWEludGVyc2VjdGlvbnMoeTEsIHRydWUsIHkxWElu
dGVydmFscyk7Ci0gICAgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKHkyLCBmYWxzZSwgeTJYSW50ZXJ2
YWxzKTsKKyAgICBjb21wdXRlWEludGVyc2VjdGlvbnMobV9wb2x5Z29uLCB5MSwgdHJ1ZSwgeTFY
SW50ZXJ2YWxzKTsKKyAgICBjb21wdXRlWEludGVyc2VjdGlvbnMobV9wb2x5Z29uLCB5MiwgZmFs
c2UsIHkyWEludGVydmFscyk7CiAKICAgICBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+IG1lcmdl
ZEludGVydmFsczsKICAgICBtZXJnZUV4Y2x1c2lvbkludGVydmFscyh5MVhJbnRlcnZhbHMsIHky
WEludGVydmFscywgbWVyZ2VkSW50ZXJ2YWxzKTsKIAogICAgIFZlY3RvcjxFeGNsdXNpb25JbnRl
cnZhbD4gZWRnZUludGVydmFsczsKLSAgICBjb21wdXRlRWRnZUludGVyc2VjdGlvbnMoeTEsIHky
LCBlZGdlSW50ZXJ2YWxzKTsKKyAgICBjb21wdXRlT3ZlcmxhcHBpbmdFZGdlWFByb2plY3Rpb25z
KG1fcG9seWdvbiwgeTEsIHkyLCBlZGdlSW50ZXJ2YWxzKTsKIAogICAgIFZlY3RvcjxFeGNsdXNp
b25JbnRlcnZhbD4gZXhjbHVkZWRJbnRlcnZhbHM7CiAgICAgbWVyZ2VFeGNsdXNpb25JbnRlcnZh
bHMobWVyZ2VkSW50ZXJ2YWxzLCBlZGdlSW50ZXJ2YWxzLCBleGNsdWRlZEludGVydmFscyk7CkBA
IC0zNjUsMTQgKzI2NiwxNCBAQCB2b2lkIEV4Y2x1c2lvblBvbHlnb246OmdldEluY2x1ZGVkSW50
ZXJ2YWxzKGZsb2F0IGxvZ2ljYWxUb3AsIGZsb2F0IGxvZ2ljYWxIZWlnaAogICAgIGZsb2F0IHky
ID0geTEgKyBsb2dpY2FsSGVpZ2h0OwogCiAgICAgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiB5
MVhJbnRlcnZhbHMsIHkyWEludGVydmFsczsKLSAgICBjb21wdXRlWEludGVyc2VjdGlvbnMoeTEs
IHRydWUsIHkxWEludGVydmFscyk7Ci0gICAgY29tcHV0ZVhJbnRlcnNlY3Rpb25zKHkyLCBmYWxz
ZSwgeTJYSW50ZXJ2YWxzKTsKKyAgICBjb21wdXRlWEludGVyc2VjdGlvbnMobV9wb2x5Z29uLCB5
MSwgdHJ1ZSwgeTFYSW50ZXJ2YWxzKTsKKyAgICBjb21wdXRlWEludGVyc2VjdGlvbnMobV9wb2x5
Z29uLCB5MiwgZmFsc2UsIHkyWEludGVydmFscyk7CiAKICAgICBWZWN0b3I8RXhjbHVzaW9uSW50
ZXJ2YWw+IGNvbW1vbkludGVydmFsczsKICAgICBpbnRlcnNlY3RFeGNsdXNpb25JbnRlcnZhbHMo
eTFYSW50ZXJ2YWxzLCB5MlhJbnRlcnZhbHMsIGNvbW1vbkludGVydmFscyk7CiAKICAgICBWZWN0
b3I8RXhjbHVzaW9uSW50ZXJ2YWw+IGVkZ2VJbnRlcnZhbHM7Ci0gICAgY29tcHV0ZUVkZ2VJbnRl
cnNlY3Rpb25zKHkxLCB5MiwgZWRnZUludGVydmFscyk7CisgICAgY29tcHV0ZU92ZXJsYXBwaW5n
RWRnZVhQcm9qZWN0aW9ucyhtX3BvbHlnb24sIHkxLCB5MiwgZWRnZUludGVydmFscyk7CiAKICAg
ICBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+IGluY2x1ZGVkSW50ZXJ2YWxzOwogICAgIHN1YnRy
YWN0RXhjbHVzaW9uSW50ZXJ2YWxzKGNvbW1vbkludGVydmFscywgZWRnZUludGVydmFscywgaW5j
bHVkZWRJbnRlcnZhbHMpOwpAQCAtMzgzLDk4ICsyODQsMTkgQEAgdm9pZCBFeGNsdXNpb25Qb2x5
Z29uOjpnZXRJbmNsdWRlZEludGVydmFscyhmbG9hdCBsb2dpY2FsVG9wLCBmbG9hdCBsb2dpY2Fs
SGVpZ2gKICAgICB9CiB9CiAKLXN0YXRpYyBpbmxpbmUgZmxvYXQgbGVmdFNpZGUoY29uc3QgRmxv
YXRQb2ludCYgdmVydGV4MSwgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MiwgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQpCi17Ci0gICAgcmV0dXJuICgocG9pbnQueCgpIC0gdmVydGV4MS54KCkpICog
KHZlcnRleDIueSgpIC0gdmVydGV4MS55KCkpKSAtICgodmVydGV4Mi54KCkgLSB2ZXJ0ZXgxLngo
KSkgKiAocG9pbnQueSgpIC0gdmVydGV4MS55KCkpKTsKLX0KLQotYm9vbCBFeGNsdXNpb25Qb2x5
Z29uOjpjb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKLXsKLSAgICBpZiAo
IW1fYm91bmRpbmdCb3guY29udGFpbnMocG9pbnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpbnQgd2luZGluZ051bWJlciA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG51bWJlck9mRWRnZXMoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRl
eDEgPSBlZGdlQXQoaSkudmVydGV4MSgpOwotICAgICAgICBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0
ZXgyID0gZWRnZUF0KGkpLnZlcnRleDIoKTsKLSAgICAgICAgaWYgKGlzUG9pbnRPbkxpbmVTZWdt
ZW50KHZlcnRleDEsIHZlcnRleDIsIHBvaW50KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICBpZiAodmVydGV4Mi55KCkgPCBwb2ludC55KCkpIHsKLSAgICAgICAgICAgIGlmICgo
dmVydGV4MS55KCkgPiBwb2ludC55KCkpICYmIChsZWZ0U2lkZSh2ZXJ0ZXgxLCB2ZXJ0ZXgyLCBw
b2ludCkgPiAwKSkKLSAgICAgICAgICAgICAgICArK3dpbmRpbmdOdW1iZXI7Ci0gICAgICAgIH0g
ZWxzZSBpZiAodmVydGV4Mi55KCkgPiBwb2ludC55KCkpIHsKLSAgICAgICAgICAgIGlmICgodmVy
dGV4MS55KCkgPD0gcG9pbnQueSgpKSAmJiAobGVmdFNpZGUodmVydGV4MSwgdmVydGV4MiwgcG9p
bnQpIDwgMCkpCi0gICAgICAgICAgICAgICAgLS13aW5kaW5nTnVtYmVyOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHdpbmRpbmdOdW1iZXI7Ci19Ci0KLWJvb2wgVmVydGV4UGFpcjo6
b3ZlcmxhcHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKLXsKLSAgICBib29sIGJv
dW5kc092ZXJsYXAgPSAobWluWCgpIDwgcmVjdC5tYXhYKCkpICYmIChtYXhYKCkgPiByZWN0Lngo
KSkgJiYgKG1pblkoKSA8IHJlY3QubWF4WSgpKSAmJiAobWF4WSgpID4gcmVjdC55KCkpOwotICAg
IGlmICghYm91bmRzT3ZlcmxhcCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZmxvYXQg
bGVmdFNpZGVWYWx1ZXNbNF0gPSB7Ci0gICAgICAgIGxlZnRTaWRlKHZlcnRleDEoKSwgdmVydGV4
MigpLCByZWN0Lm1pblhNaW5ZQ29ybmVyKCkpLAotICAgICAgICBsZWZ0U2lkZSh2ZXJ0ZXgxKCks
IHZlcnRleDIoKSwgcmVjdC5tYXhYTWluWUNvcm5lcigpKSwKLSAgICAgICAgbGVmdFNpZGUodmVy
dGV4MSgpLCB2ZXJ0ZXgyKCksIHJlY3QubWluWE1heFlDb3JuZXIoKSksCi0gICAgICAgIGxlZnRT
aWRlKHZlcnRleDEoKSwgdmVydGV4MigpLCByZWN0Lm1heFhNYXhZQ29ybmVyKCkpCi0gICAgfTsK
LQotICAgIGludCBjdXJyZW50TGVmdFNpZGVTaWduID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgNDsgKytpKSB7Ci0gICAgICAgIGlmICghbGVmdFNpZGVWYWx1ZXNbaV0pCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaW50IGxlZnRTaWRlU2lnbiA9IGxlZnRTaWRlVmFs
dWVzW2ldID4gMCA/IDEgOiAtMTsKLSAgICAgICAgaWYgKCFjdXJyZW50TGVmdFNpZGVTaWduKQot
ICAgICAgICAgICAgY3VycmVudExlZnRTaWRlU2lnbiA9IGxlZnRTaWRlU2lnbjsKLSAgICAgICAg
ZWxzZSBpZiAoY3VycmVudExlZnRTaWRlU2lnbiAhPSBsZWZ0U2lkZVNpZ24pCi0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHN0YXRpYyBp
bmxpbmUgYm9vbCBpc1JlZmxleFZlcnRleChjb25zdCBGbG9hdFBvaW50JiBwcmV2VmVydGV4LCBj
b25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgsIGNvbnN0IEZsb2F0UG9pbnQmIG5leHRWZXJ0ZXgpCiB7
CiAgICAgcmV0dXJuIGxlZnRTaWRlKHByZXZWZXJ0ZXgsIG5leHRWZXJ0ZXgsIHZlcnRleCkgPCAw
OwogfQogCi1ib29sIFZlcnRleFBhaXI6OmludGVyc2VjdGlvbihjb25zdCBWZXJ0ZXhQYWlyJiBv
dGhlciwgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Ci17Ci0gICAgLy8gU2VlOiBodHRwOi8vcGF1
bGJvdXJrZS5uZXQvZ2VvbWV0cnkvcG9pbnRsaW5lcGxhbmUvLCAiSW50ZXJzZWN0aW9uIHBvaW50
IG9mIHR3byBsaW5lcyBpbiAyIGRpbWVuc2lvbnMiCi0KLSAgICBjb25zdCBGbG9hdFNpemUmIHRo
aXNEZWx0YSA9IHZlcnRleDIoKSAtIHZlcnRleDEoKTsKLSAgICBjb25zdCBGbG9hdFNpemUmIG90
aGVyRGVsdGEgPSBvdGhlci52ZXJ0ZXgyKCkgLSBvdGhlci52ZXJ0ZXgxKCk7Ci0gICAgZmxvYXQg
ZGVub21pbmF0b3IgPSBkZXRlcm1pbmFudCh0aGlzRGVsdGEsIG90aGVyRGVsdGEpOwotICAgIGlm
ICghZGVub21pbmF0b3IpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFRoZSB0d28g
bGluZSBzZWdtZW50czogInRoaXMiIHZlcnRleDEsdmVydGV4MiBhbmQgIm90aGVyIiB2ZXJ0ZXgx
LHZlcnRleDIsIGhhdmUgYmVlbiBkZWZpbmVkCi0gICAgLy8gaW4gcGFyYW1ldHJpYyBmb3JtLiBF
YWNoIHBvaW50IG9uIHRoZSBsaW5lIHNlZ21lbnQgaXM6IHZlcnRleDEgKyB1ICogKHZlcnRleDIg
LSB2ZXJ0ZXgxKSwKLSAgICAvLyB3aGVuIDAgPD0gdSA8PSAxLiBXZSdyZSBjb21wdXRpbmcgdGhl
IHZhbHVlcyBvZiB1IGZvciBlYWNoIGxpbmUgYXQgdGhlaXIgaW50ZXJzZWN0aW9uIHBvaW50Lgot
Ci0gICAgY29uc3QgRmxvYXRTaXplJiB2ZXJ0ZXgxRGVsdGEgPSB2ZXJ0ZXgxKCkgLSBvdGhlci52
ZXJ0ZXgxKCk7Ci0gICAgZmxvYXQgdVRoaXNMaW5lID0gZGV0ZXJtaW5hbnQob3RoZXJEZWx0YSwg
dmVydGV4MURlbHRhKSAvIGRlbm9taW5hdG9yOwotICAgIGZsb2F0IHVPdGhlckxpbmUgPSBkZXRl
cm1pbmFudCh0aGlzRGVsdGEsIHZlcnRleDFEZWx0YSkgLyBkZW5vbWluYXRvcjsKLQotICAgIGlm
ICh1VGhpc0xpbmUgPCAwIHx8IHVPdGhlckxpbmUgPCAwIHx8IHVUaGlzTGluZSA+IDEgfHwgdU90
aGVyTGluZSA+IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHBvaW50ID0gdmVydGV4
MSgpICsgdVRoaXNMaW5lICogdGhpc0RlbHRhOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IEV4Y2x1c2lvblBvbHlnb246OmZpcnN0Rml0UmVjdEluUG9seWdvbihjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIHVuc2lnbmVkIG9mZnNldEVkZ2VJbmRleDEsIHVuc2lnbmVkIG9mZnNldEVkZ2VJbmRl
eDIpIGNvbnN0CitzdGF0aWMgaW5saW5lIGJvb2wgZmlyc3RGaXRSZWN0SW5Qb2x5Z29uKGNvbnN0
IEZsb2F0UG9seWdvbiYgcG9seWdvbiwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCB1bnNpZ25lZCBv
ZmZzZXRFZGdlSW5kZXgxLCB1bnNpZ25lZCBvZmZzZXRFZGdlSW5kZXgyKQogewotICAgIFZlY3Rv
cjxFeGNsdXNpb25Qb2x5Z29uOjpFZGdlSW50ZXJ2YWw+IG92ZXJsYXBwaW5nRWRnZXM7Ci0gICAg
bV9lZGdlVHJlZS5hbGxPdmVybGFwcyhFeGNsdXNpb25Qb2x5Z29uOjpFZGdlSW50ZXJ2YWwocmVj
dC55KCksIHJlY3QubWF4WSgpLCAwKSwgb3ZlcmxhcHBpbmdFZGdlcyk7CisgICAgVmVjdG9yPGNv
bnN0IEZsb2F0UG9seWdvbkVkZ2UqPiBlZGdlczsKKyAgICBpZiAoIXBvbHlnb24ub3ZlcmxhcHBp
bmdFZGdlcyhyZWN0LnkoKSwgcmVjdC5tYXhZKCksIGVkZ2VzKSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb3ZlcmxhcHBpbmdFZGdlcy5zaXpl
KCk7ICsraSkgewotICAgICAgICBjb25zdCBFeGNsdXNpb25Qb2x5Z29uRWRnZSogZWRnZSA9IHN0
YXRpY19jYXN0PEV4Y2x1c2lvblBvbHlnb25FZGdlKj4ob3ZlcmxhcHBpbmdFZGdlc1tpXS5kYXRh
KCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlZGdlcy5zaXplKCk7ICsraSkgewor
ICAgICAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdlKiBlZGdlID0gZWRnZXNbaV07CiAgICAgICAg
IGlmIChlZGdlLT5lZGdlSW5kZXgoKSAhPSBvZmZzZXRFZGdlSW5kZXgxICYmIGVkZ2UtPmVkZ2VJ
bmRleCgpICE9IG9mZnNldEVkZ2VJbmRleDIgJiYgZWRnZS0+b3ZlcmxhcHNSZWN0KHJlY3QpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTQ5MywyNCArMzE1LDI1IEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBhYm92ZU9yVG9UaGVMZWZ0KGNvbnN0IEZsb2F0UmVjdCYgcjEsIGNv
bnN0IEZsb2F0UmVjdCYgcjIpCiAKIGJvb2wgRXhjbHVzaW9uUG9seWdvbjo6Zmlyc3RJbmNsdWRl
ZEludGVydmFsTG9naWNhbFRvcChmbG9hdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIGNvbnN0IEZs
b2F0U2l6ZSYgbWluTG9naWNhbEludGVydmFsU2l6ZSwgZmxvYXQmIHJlc3VsdCkgY29uc3QKIHsK
LSAgICBpZiAobWluTG9naWNhbEludGVydmFsU2l6ZS53aWR0aCgpID4gbV9ib3VuZGluZ0JveC53
aWR0aCgpKQorICAgIGNvbnN0IEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IG1fcG9seWdvbi5ib3Vu
ZGluZ0JveCgpOworICAgIGlmIChtaW5Mb2dpY2FsSW50ZXJ2YWxTaXplLndpZHRoKCkgPiBib3Vu
ZGluZ0JveC53aWR0aCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBmbG9hdCBtaW5Z
ID0gc3RkOjptYXgobV9ib3VuZGluZ0JveC55KCksIG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCk7Cisg
ICAgZmxvYXQgbWluWSA9IHN0ZDo6bWF4KGJvdW5kaW5nQm94LnkoKSwgbWluTG9naWNhbEludGVy
dmFsVG9wKTsKICAgICBmbG9hdCBtYXhZID0gbWluWSArIG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUu
aGVpZ2h0KCk7CiAKLSAgICBpZiAobWF4WSA+IG1fYm91bmRpbmdCb3gubWF4WSgpKQorICAgIGlm
IChtYXhZID4gYm91bmRpbmdCb3gubWF4WSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBWZWN0b3I8RXhjbHVzaW9uUG9seWdvbjo6RWRnZUludGVydmFsPiBvdmVybGFwcGluZ0VkZ2Vz
OwotICAgIG1fZWRnZVRyZWUuYWxsT3ZlcmxhcHMoRXhjbHVzaW9uUG9seWdvbjo6RWRnZUludGVy
dmFsKG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwgbV9ib3VuZGluZ0JveC5tYXhZKCksIDApLCBvdmVy
bGFwcGluZ0VkZ2VzKTsKKyAgICBWZWN0b3I8Y29uc3QgRmxvYXRQb2x5Z29uRWRnZSo+IGVkZ2Vz
OworICAgIG1fcG9seWdvbi5vdmVybGFwcGluZ0VkZ2VzKG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwg
Ym91bmRpbmdCb3gubWF4WSgpLCBlZGdlcyk7CiAKICAgICBmbG9hdCBkeCA9IG1pbkxvZ2ljYWxJ
bnRlcnZhbFNpemUud2lkdGgoKSAvIDI7CiAgICAgZmxvYXQgZHkgPSBtaW5Mb2dpY2FsSW50ZXJ2
YWxTaXplLmhlaWdodCgpIC8gMjsKICAgICBWZWN0b3I8T2Zmc2V0UG9seWdvbkVkZ2U+IG9mZnNl
dEVkZ2VzOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG92ZXJsYXBwaW5nRWRnZXMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgRXhjbHVzaW9uUG9seWdvbkVkZ2UmIGVkZ2Ug
PSAqc3RhdGljX2Nhc3Q8RXhjbHVzaW9uUG9seWdvbkVkZ2UqPihvdmVybGFwcGluZ0VkZ2VzW2ld
LmRhdGEoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVkZ2VzLnNpemUoKTsgKytp
KSB7CisgICAgICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIGVkZ2UgPSAqKGVkZ2VzW2ldKTsK
ICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MCA9IGVkZ2UucHJldmlvdXNFZGdlKCku
dmVydGV4MSgpOwogICAgICAgICBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgxID0gZWRnZS52ZXJ0
ZXgxKCk7CiAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDIgPSBlZGdlLnZlcnRleDIo
KTsKQEAgLTU0MCw3ICszNjMsNyBAQCBib29sIEV4Y2x1c2lvblBvbHlnb246OmZpcnN0SW5jbHVk
ZWRJbnRlcnZhbExvZ2ljYWxUb3AoZmxvYXQgbWluTG9naWNhbEludGVydmFsVAogICAgICAgICAg
ICAgICAgIG9mZnNldEVkZ2VzLmFwcGVuZChvZmZzZXRFZGdlQnVmZmVyW2pdKTsKICAgICB9CiAK
LSAgICBvZmZzZXRFZGdlcy5hcHBlbmQoT2Zmc2V0UG9seWdvbkVkZ2UoKnRoaXMsIG1pbkxvZ2lj
YWxJbnRlcnZhbFRvcCwgRmxvYXRTaXplKDAsIGR5KSkpOworICAgIG9mZnNldEVkZ2VzLmFwcGVu
ZChPZmZzZXRQb2x5Z29uRWRnZShtX3BvbHlnb24sIG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwgRmxv
YXRTaXplKDAsIGR5KSkpOwogCiAgICAgRmxvYXRQb2ludCBvZmZzZXRFZGdlc0ludGVyc2VjdGlv
bjsKICAgICBGbG9hdFJlY3QgZmlyc3RGaXRSZWN0OwpAQCAtNTUzLDggKzM3Niw4IEBAIGJvb2wg
RXhjbHVzaW9uUG9seWdvbjo6Zmlyc3RJbmNsdWRlZEludGVydmFsTG9naWNhbFRvcChmbG9hdCBt
aW5Mb2dpY2FsSW50ZXJ2YWxUCiAgICAgICAgICAgICAgICAgRmxvYXRSZWN0IHBvdGVudGlhbEZp
cnN0Rml0UmVjdChwb3RlbnRpYWxGaXJzdEZpdExvY2F0aW9uLCBtaW5Mb2dpY2FsSW50ZXJ2YWxT
aXplKTsKICAgICAgICAgICAgICAgICBpZiAoKHBvdGVudGlhbEZpcnN0Rml0TG9jYXRpb24ueSgp
ID49IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCkKICAgICAgICAgICAgICAgICAgICAgJiYgKCFmaXJz
dEZpdEZvdW5kIHx8IGFib3ZlT3JUb1RoZUxlZnQocG90ZW50aWFsRmlyc3RGaXRSZWN0LCBmaXJz
dEZpdFJlY3QpKQotICAgICAgICAgICAgICAgICAgICAmJiBjb250YWlucyhvZmZzZXRFZGdlc0lu
dGVyc2VjdGlvbikKLSAgICAgICAgICAgICAgICAgICAgJiYgZmlyc3RGaXRSZWN0SW5Qb2x5Z29u
KHBvdGVudGlhbEZpcnN0Rml0UmVjdCwgb2Zmc2V0RWRnZXNbaV0uZWRnZUluZGV4KCksIG9mZnNl
dEVkZ2VzW2pdLmVkZ2VJbmRleCgpKSkgeworICAgICAgICAgICAgICAgICAgICAmJiBtX3BvbHln
b24uY29udGFpbnMob2Zmc2V0RWRnZXNJbnRlcnNlY3Rpb24pCisgICAgICAgICAgICAgICAgICAg
ICYmIGZpcnN0Rml0UmVjdEluUG9seWdvbihtX3BvbHlnb24sIHBvdGVudGlhbEZpcnN0Rml0UmVj
dCwgb2Zmc2V0RWRnZXNbaV0uZWRnZUluZGV4KCksIG9mZnNldEVkZ2VzW2pdLmVkZ2VJbmRleCgp
KSkgewogICAgICAgICAgICAgICAgICAgICBmaXJzdEZpdEZvdW5kID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICAgICAgZmlyc3RGaXRSZWN0ID0gcG90ZW50aWFsRmlyc3RGaXRSZWN0OwogICAgICAg
ICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNp
b25Qb2x5Z29uLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5o
CmluZGV4IDYyZTE5NzEuLmQ0NGE2YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9FeGNsdXNpb25Qb2x5Z29uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4
Y2x1c2lvblBvbHlnb24uaApAQCAtMzMsMTMyICszMywxOCBAQAogI2luY2x1ZGUgIkV4Y2x1c2lv
bkludGVydmFsLmgiCiAjaW5jbHVkZSAiRXhjbHVzaW9uU2hhcGUuaCIKICNpbmNsdWRlICJGbG9h
dFBvaW50LmgiCisjaW5jbHVkZSAiRmxvYXRQb2x5Z29uLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCi0jaW5jbHVkZSAiUE9ESW50ZXJ2YWxUcmVlLmgiCiAjaW5jbHVkZSAiV2luZFJ1bGUuaCIK
LSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBFeGNsdXNpb25Qb2x5Z29uRWRnZTsKLQotLy8gVGhp
cyBjbGFzcyBpcyB1c2VkIGJ5IFBPREludGVydmFsVHJlZSBmb3IgZGVidWdnaW5nLgotI2lmbmRl
ZiBOREVCVUcKLXRlbXBsYXRlIDxjbGFzcz4gc3RydWN0IFZhbHVlVG9TdHJpbmc7Ci0jZW5kaWYK
LQotY2xhc3MgRXhjbHVzaW9uUG9seWdvbiA6IHB1YmxpYyBFeGNsdXNpb25TaGFwZSB7Ci0gICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoRXhjbHVzaW9uUG9seWdvbik7Ci1wdWJsaWM6Ci0gICAgRXhj
bHVzaW9uUG9seWdvbihQYXNzT3duUHRyPFZlY3RvcjxGbG9hdFBvaW50PiA+IHZlcnRpY2VzLCBX
aW5kUnVsZSBmaWxsUnVsZSk7Ci0KLSAgICBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXhBdCh1bnNp
Z25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gKCptX3ZlcnRpY2VzKVtpbmRleF07IH0KLSAgICB1
bnNpZ25lZCBudW1iZXJPZlZlcnRpY2VzKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0aWNlcy0+c2l6
ZSgpOyB9Ci0gICAgV2luZFJ1bGUgZmlsbFJ1bGUoKSBjb25zdCB7IHJldHVybiBtX2ZpbGxSdWxl
OyB9Ci0KLSAgICBjb25zdCBFeGNsdXNpb25Qb2x5Z29uRWRnZSYgZWRnZUF0KHVuc2lnbmVkIGlu
ZGV4KSBjb25zdCB7IHJldHVybiBtX2VkZ2VzW2luZGV4XTsgfQotICAgIHVuc2lnbmVkIG51bWJl
ck9mRWRnZXMoKSBjb25zdCB7IHJldHVybiBtX2VkZ2VzLnNpemUoKTsgfQotCi0gICAgYm9vbCBj
b250YWlucyhjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIEZsb2F0UmVj
dCBzaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fYm91
bmRpbmdCb3g7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0IE9WRVJSSURFIHsg
cmV0dXJuIG1fZW1wdHk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0RXhjbHVkZWRJbnRlcnZhbHMo
ZmxvYXQgbG9naWNhbFRvcCwgZmxvYXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExpc3QmKSBjb25z
dCBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0SW5jbHVkZWRJbnRlcnZhbHMoZmxvYXQg
bG9naWNhbFRvcCwgZmxvYXQgbG9naWNhbEhlaWdodCwgU2VnbWVudExpc3QmKSBjb25zdCBPVkVS
UklERTsKLSAgICB2aXJ0dWFsIGJvb2wgZmlyc3RJbmNsdWRlZEludGVydmFsTG9naWNhbFRvcChm
bG9hdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIGNvbnN0IEZsb2F0U2l6ZSYgbWluTG9naWNhbElu
dGVydmFsU2l6ZSwgZmxvYXQmKSBjb25zdCBPVkVSUklERTsKLQotcHJpdmF0ZToKLSAgICB2b2lk
IGNvbXB1dGVYSW50ZXJzZWN0aW9ucyhmbG9hdCB5LCBib29sIGlzTWluWSwgVmVjdG9yPEV4Y2x1
c2lvbkludGVydmFsPiYpIGNvbnN0OwotICAgIHZvaWQgY29tcHV0ZUVkZ2VJbnRlcnNlY3Rpb25z
KGZsb2F0IG1pblksIGZsb2F0IG1heFksIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4mKSBjb25z
dDsKLSAgICB1bnNpZ25lZCBmaW5kTmV4dEVkZ2VWZXJ0ZXhJbmRleCh1bnNpZ25lZCB2ZXJ0ZXhJ
bmRleDEsIGJvb2wgY2xvY2t3aXNlKSBjb25zdDsKLSAgICBib29sIGZpcnN0Rml0UmVjdEluUG9s
eWdvbihjb25zdCBGbG9hdFJlY3QmLCB1bnNpZ25lZCBvZmZzZXRFZGdlSW5kZXgxLCB1bnNpZ25l
ZCBvZmZzZXRFZGdlSW5kZXgpIGNvbnN0OwotCi0gICAgdHlwZWRlZiBQT0RJbnRlcnZhbDxmbG9h
dCwgRXhjbHVzaW9uUG9seWdvbkVkZ2UqPiBFZGdlSW50ZXJ2YWw7Ci0gICAgdHlwZWRlZiBQT0RJ
bnRlcnZhbFRyZWU8ZmxvYXQsIEV4Y2x1c2lvblBvbHlnb25FZGdlKj4gRWRnZUludGVydmFsVHJl
ZTsKLQotICAgIE93blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiBtX3ZlcnRpY2VzOwotICAgIFdp
bmRSdWxlIG1fZmlsbFJ1bGU7Ci0gICAgRmxvYXRSZWN0IG1fYm91bmRpbmdCb3g7Ci0gICAgVmVj
dG9yPEV4Y2x1c2lvblBvbHlnb25FZGdlPiBtX2VkZ2VzOwotICAgIEVkZ2VJbnRlcnZhbFRyZWUg
bV9lZGdlVHJlZTsKLSAgICBib29sIG1fZW1wdHk7Ci19OwotCi1jbGFzcyBWZXJ0ZXhQYWlyIHsK
LXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5WZXJ0ZXhQYWlyKCkgeyB9Ci0KLSAgICB2aXJ0dWFsIGNv
bnN0IEZsb2F0UG9pbnQmIHZlcnRleDEoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBjb25zdCBG
bG9hdFBvaW50JiB2ZXJ0ZXgyKCkgY29uc3QgPSAwOwotCi0gICAgZmxvYXQgbWluWCgpIGNvbnN0
IHsgcmV0dXJuIHN0ZDo6bWluKHZlcnRleDEoKS54KCksIHZlcnRleDIoKS54KCkpOyB9Ci0gICAg
ZmxvYXQgbWluWSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWluKHZlcnRleDEoKS55KCksIHZlcnRl
eDIoKS55KCkpOyB9Ci0gICAgZmxvYXQgbWF4WCgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWF4KHZl
cnRleDEoKS54KCksIHZlcnRleDIoKS54KCkpOyB9Ci0gICAgZmxvYXQgbWF4WSgpIGNvbnN0IHsg
cmV0dXJuIHN0ZDo6bWF4KHZlcnRleDEoKS55KCksIHZlcnRleDIoKS55KCkpOyB9Ci0KLSAgICBi
b29sIG92ZXJsYXBzUmVjdChjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKLSAgICBib29sIGludGVy
c2VjdGlvbihjb25zdCBWZXJ0ZXhQYWlyJiwgRmxvYXRQb2ludCYpIGNvbnN0OwotfTsKLQotLy8g
RWRnZUludGVydmFsVHJlZSBub2RlcyBzdG9yZSBtaW5ZLCBtYXhZLCBhbmQgYSAoIlVzZXJEYXRh
IikgcG9pbnRlciB0byBhbiBFeGNsdXNpb25Qb2x5Z29uRWRnZS4gRWRnZSB2ZXJ0ZXgKLS8vIGlu
ZGV4MSBpcyBsZXNzIHRoYW4gaW5kZXgyLCBleGNlcHQgdGhlIGxhc3QgZWRnZSwgd2hlcmUgaW5k
ZXgyIGlzIDAuIFdoZW4gYSBwb2x5Z29uIGVkZ2UgaXMgZGVmaW5lZCBieSAzCi0vLyBvciBtb3Jl
IGNvbGluZWFyIHZlcnRpY2VzLCBpbmRleDIgY2FuIGJlIHRoZSB0aGUgaW5kZXggb2YgdGhlIGxh
c3QgY29saW5lYXIgdmVydGV4LgotY2xhc3MgRXhjbHVzaW9uUG9seWdvbkVkZ2UgOiBwdWJsaWMg
VmVydGV4UGFpciB7Ci0gICAgZnJpZW5kIGNsYXNzIEV4Y2x1c2lvblBvbHlnb247Ci1wdWJsaWM6
Ci0gICAgdmlydHVhbCBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgxKCkgY29uc3QgT1ZFUlJJREUK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3BvbHlnb24pOwotICAgICAgICByZXR1cm4gbV9wb2x5
Z29uLT52ZXJ0ZXhBdChtX3ZlcnRleEluZGV4MSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCBjb25z
dCBGbG9hdFBvaW50JiB2ZXJ0ZXgyKCkgY29uc3QgT1ZFUlJJREUKLSAgICB7Ci0gICAgICAgIEFT
U0VSVChtX3BvbHlnb24pOwotICAgICAgICByZXR1cm4gbV9wb2x5Z29uLT52ZXJ0ZXhBdChtX3Zl
cnRleEluZGV4Mik7Ci0gICAgfQotCi0gICAgY29uc3QgRXhjbHVzaW9uUG9seWdvbkVkZ2UmIHBy
ZXZpb3VzRWRnZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV9wb2x5Z29uICYmIG1f
cG9seWdvbi0+bnVtYmVyT2ZFZGdlcygpID4gMSk7Ci0gICAgICAgIHJldHVybiBtX3BvbHlnb24t
PmVkZ2VBdCgobV9lZGdlSW5kZXggKyBtX3BvbHlnb24tPm51bWJlck9mRWRnZXMoKSAtIDEpICUg
bV9wb2x5Z29uLT5udW1iZXJPZkVkZ2VzKCkpOwotICAgIH0KLQotICAgIGNvbnN0IEV4Y2x1c2lv
blBvbHlnb25FZGdlJiBuZXh0RWRnZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV9w
b2x5Z29uICYmIG1fcG9seWdvbi0+bnVtYmVyT2ZFZGdlcygpID4gMSk7Ci0gICAgICAgIHJldHVy
biBtX3BvbHlnb24tPmVkZ2VBdCgobV9lZGdlSW5kZXggKyAxKSAlIG1fcG9seWdvbi0+bnVtYmVy
T2ZFZGdlcygpKTsKLSAgICB9Ci0KLSAgICBjb25zdCBFeGNsdXNpb25Qb2x5Z29uKiBwb2x5Z29u
KCkgY29uc3QgeyByZXR1cm4gbV9wb2x5Z29uOyB9Ci0gICAgdW5zaWduZWQgdmVydGV4SW5kZXgx
KCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0ZXhJbmRleDE7IH0KLSAgICB1bnNpZ25lZCB2ZXJ0ZXhJ
bmRleDIoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRleEluZGV4MjsgfQotICAgIHVuc2lnbmVkIGVk
Z2VJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fZWRnZUluZGV4OyB9Ci0KLXByaXZhdGU6Ci0gICAg
Y29uc3QgRXhjbHVzaW9uUG9seWdvbiogbV9wb2x5Z29uOwotICAgIHVuc2lnbmVkIG1fdmVydGV4
SW5kZXgxOwotICAgIHVuc2lnbmVkIG1fdmVydGV4SW5kZXgyOwotICAgIHVuc2lnbmVkIG1fZWRn
ZUluZGV4OwotfTsKLQotLy8gVGhlc2Ugc3RydWN0dXJlcyBhcmUgdXNlZCBieSBQT0RJbnRlcnZh
bFRyZWUgZm9yIGRlYnVnZ2luZy4xCi0jaWZuZGVmIE5ERUJVRwotdGVtcGxhdGUgPD4gc3RydWN0
IFZhbHVlVG9TdHJpbmc8ZmxvYXQ+IHsKLSAgICBzdGF0aWMgU3RyaW5nIHN0cmluZyhjb25zdCBm
bG9hdCB2YWx1ZSkgeyByZXR1cm4gU3RyaW5nOjpudW1iZXIodmFsdWUpOyB9Ci19OwotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBWYWx1ZVRvU3RyaW5nPEV4Y2x1c2lvblBvbHlnb25FZGdlKj4gewotICAg
IHN0YXRpYyBTdHJpbmcgc3RyaW5nKGNvbnN0IEV4Y2x1c2lvblBvbHlnb25FZGdlKiBlZGdlKSB7
IHJldHVybiBTdHJpbmc6OmZvcm1hdCgiJXAgKCVmLCVmICVmLCVmKSIsIGVkZ2UsIGVkZ2UtPnZl
cnRleDEoKS54KCksIGVkZ2UtPnZlcnRleDEoKS55KCksIGVkZ2UtPnZlcnRleDIoKS54KCksIGVk
Z2UtPnZlcnRleDIoKS55KCkpOyB9Ci19OwotI2VuZGlmCi0KIGNsYXNzIE9mZnNldFBvbHlnb25F
ZGdlIDogcHVibGljIFZlcnRleFBhaXIgewogcHVibGljOgotICAgIE9mZnNldFBvbHlnb25FZGdl
KGNvbnN0IEV4Y2x1c2lvblBvbHlnb25FZGdlJiBlZGdlLCBjb25zdCBGbG9hdFNpemUmIG9mZnNl
dCkKKyAgICBPZmZzZXRQb2x5Z29uRWRnZShjb25zdCBGbG9hdFBvbHlnb25FZGdlJiBlZGdlLCBj
b25zdCBGbG9hdFNpemUmIG9mZnNldCkKICAgICAgICAgOiBtX3ZlcnRleDEoZWRnZS52ZXJ0ZXgx
KCkgKyBvZmZzZXQpCiAgICAgICAgICwgbV92ZXJ0ZXgyKGVkZ2UudmVydGV4MigpICsgb2Zmc2V0
KQogICAgICAgICAsIG1fZWRnZUluZGV4KGVkZ2UuZWRnZUluZGV4KCkpCkBAIC0xNzIsOSArNTgs
OSBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIE9mZnNldFBvbHlnb25FZGdlKGNvbnN0
IEV4Y2x1c2lvblBvbHlnb24mIHBvbHlnb24sIGZsb2F0IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwg
Y29uc3QgRmxvYXRTaXplJiBvZmZzZXQpCi0gICAgICAgIDogbV92ZXJ0ZXgxKEZsb2F0UG9pbnQo
cG9seWdvbi5zaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpLngoKSwgbWluTG9naWNhbEludGVydmFs
VG9wKSArIG9mZnNldCkKLSAgICAgICAgLCBtX3ZlcnRleDIoRmxvYXRQb2ludChwb2x5Z29uLnNo
YXBlTG9naWNhbEJvdW5kaW5nQm94KCkubWF4WCgpLCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3ApICsg
b2Zmc2V0KQorICAgIE9mZnNldFBvbHlnb25FZGdlKGNvbnN0IEZsb2F0UG9seWdvbiYgcG9seWdv
biwgZmxvYXQgbWluTG9naWNhbEludGVydmFsVG9wLCBjb25zdCBGbG9hdFNpemUmIG9mZnNldCkK
KyAgICAgICAgOiBtX3ZlcnRleDEoRmxvYXRQb2ludChwb2x5Z29uLmJvdW5kaW5nQm94KCkueCgp
LCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3ApICsgb2Zmc2V0KQorICAgICAgICAsIG1fdmVydGV4MihG
bG9hdFBvaW50KHBvbHlnb24uYm91bmRpbmdCb3goKS5tYXhYKCksIG1pbkxvZ2ljYWxJbnRlcnZh
bFRvcCkgKyBvZmZzZXQpCiAgICAgICAgICwgbV9lZGdlSW5kZXgoLTEpCiAgICAgewogICAgIH0K
QEAgLTE4OSw2ICs3NSwyNSBAQCBwcml2YXRlOgogICAgIGludCBtX2VkZ2VJbmRleDsKIH07CiAK
K2NsYXNzIEV4Y2x1c2lvblBvbHlnb24gOiBwdWJsaWMgRXhjbHVzaW9uU2hhcGUgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEV4Y2x1c2lvblBvbHlnb24pOworcHVibGljOgorICAgIEV4Y2x1
c2lvblBvbHlnb24oUGFzc093blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiB2ZXJ0aWNlcywgV2lu
ZFJ1bGUgZmlsbFJ1bGUpCisgICAgICAgIDogRXhjbHVzaW9uU2hhcGUoKQorICAgICAgICAsIG1f
cG9seWdvbih2ZXJ0aWNlcywgZmlsbFJ1bGUpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwg
RmxvYXRSZWN0IHNoYXBlTG9naWNhbEJvdW5kaW5nQm94KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1
cm4gbV9wb2x5Z29uLmJvdW5kaW5nQm94KCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fcG9seWdvbi5pc0VtcHR5KCk7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgZ2V0RXhjbHVkZWRJbnRlcnZhbHMoZmxvYXQgbG9naWNhbFRvcCwgZmxvYXQgbG9n
aWNhbEhlaWdodCwgU2VnbWVudExpc3QmKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgZ2V0SW5jbHVkZWRJbnRlcnZhbHMoZmxvYXQgbG9naWNhbFRvcCwgZmxvYXQgbG9naWNhbEhl
aWdodCwgU2VnbWVudExpc3QmKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgZmly
c3RJbmNsdWRlZEludGVydmFsTG9naWNhbFRvcChmbG9hdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3As
IGNvbnN0IEZsb2F0U2l6ZSYgbWluTG9naWNhbEludGVydmFsU2l6ZSwgZmxvYXQmKSBjb25zdCBP
VkVSUklERTsKKworcHJpdmF0ZToKKyAgICBGbG9hdFBvbHlnb24gbV9wb2x5Z29uOworfTsKKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRXhjbHVzaW9uUG9seWdvbl9oCg==
</data>
<flag name="review"
          id="213728"
          type_id="1"
          status="+"
          setter="krit"
    />
    <flag name="commit-queue"
          id="213786"
          type_id="3"
          status="-"
          setter="krit"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192546</attachid>
            <date>2013-03-11 13:42:50 -0700</date>
            <delta_ts>2013-03-11 15:14:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>tmp.patch</filename>
            <type>text/plain</type>
            <size>51005</size>
            <attacher name="Hans Muller">giles_joplin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNjQ1YmJmZC4uOTVkMzQyMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTE5MTksNiArMTkxOSw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9Dcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFBvaW50LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQz
RC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvbHlnb24uY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVj
dC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MDk1ZmZiYy4uZWE3OWI0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDczIEBACisyMDEzLTAzLTEx
ICBIYW5zIE11bGxlciAgPGhtdWxsZXJAYWRvYmUuY29tPgorCisgICAgICAgIFtDU1MgRXhjbHVz
aW9uc10gUmVmYWN0b3IgdGhlIEV4Y2x1c2lvblBvbHlnb24gY2xhc3MgdG8gZW5hYmxlIHN0b3Jp
bmcgbXVsdGlwbGUgYm91bmRhcmllcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTExNzY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGlyayBTY2h1bHpl
LgorCisgICAgICAgIFJlZmFjdG9yZWQgdGhlIEV4Y2x1c2lvblBvbHlnb24gY2xhc3MgdG8gZW5h
YmxlIGFkZGluZyBzdXBwb3J0IGZvciBzaGFwZS1tYXJnaW4gYW5kIHNoYXBlLXBhZGRpbmcuCisg
ICAgICAgIEV4dHJhY3RlZCBhIG5ldyBGbG9hdFBvbHlnb24gY2xhc3Mgd2hpY2ggaXMgbm93IHVz
ZWQgYnkgRXhjbHVzaW9uUG9seWdvbiB0byByZXByZXNlbnQgdGhlIHNoYXBlJ3MKKyAgICAgICAg
Ym91bmRhcnkuIEl0IHdpbGwgYmUgdXNlZCB0byBhZGQgbV9wYWRkZWRQb2x5Z29uIGFuZCBtX21h
cmdpblBvbHlnb24gbWVtYmVycyB0byBFeGNsdXNpb25Qb2x5Z29uCisgICAgICAgIGluIGEgc3Vi
c2VxdWVudCBwYXRjaC4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgaXMgc3RyaWN0bHkg
YSByZWZhY3RvcmluZyBvZiB0aGUgZXhpc3RpbmcgY29kZS4KKworICAgICAgICAqIENNYWtlTGlz
dHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogV2ViQ29y
ZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFBvbHlnb24uY3BwOiBGYWN0b3JlZCBvdXQgb2YgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24uY3BwLgorICAgICAgICAoV2ViQ29yZTo6ZGV0
ZXJtaW5hbnQpOgorICAgICAgICAoV2ViQ29yZTo6YXJlQ29sbGluZWFyUG9pbnRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OmFyZUNvaW5jaWRlbnRQb2ludHMpOgorICAgICAgICAoV2ViQ29yZTo6aXNQ
b2ludE9uTGluZVNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6bmV4dFZlcnRleEluZGV4KToK
KyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UG9seWdvbjo6RmxvYXRQb2x5Z29uKToKKyAgICAgICAg
KFdlYkNvcmU6OkZsb2F0UG9seWdvbjo6ZmluZE5leHRFZGdlVmVydGV4SW5kZXgpOgorICAgICAg
ICAoV2ViQ29yZTo6RmxvYXRQb2x5Z29uOjpvdmVybGFwcGluZ0VkZ2VzKToKKyAgICAgICAgKFdl
YkNvcmU6OmxlZnRTaWRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UG9seWdvbjo6Y29udGFp
bnMpOgorICAgICAgICAoV2ViQ29yZTo6VmVydGV4UGFpcjo6b3ZlcmxhcHNSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlZlcnRleFBhaXI6OmludGVyc2VjdGlvbik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRQb2x5Z29uLmg6IEZhY3RvcmVkIG91dCBvZiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5oLgorICAgICAgICAoRmxvYXRQb2x5Z29uKToK
KyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UG9seWdvbjo6dmVydGV4QXQpOgorICAgICAgICAoV2Vi
Q29yZTo6RmxvYXRQb2x5Z29uOjpudW1iZXJPZlZlcnRpY2VzKToKKyAgICAgICAgKFdlYkNvcmU6
OkZsb2F0UG9seWdvbjo6ZmlsbFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2x5Z29u
OjplZGdlQXQpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2x5Z29uOjpudW1iZXJPZkVkZ2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UG9seWdvbjo6Ym91bmRpbmdCb3gpOgorICAgICAg
ICAoV2ViQ29yZTo6RmxvYXRQb2x5Z29uOjppc0VtcHR5KToKKyAgICAgICAgKFZlcnRleFBhaXIp
OgorICAgICAgICAoV2ViQ29yZTo6VmVydGV4UGFpcjo6flZlcnRleFBhaXIpOgorICAgICAgICAo
V2ViQ29yZTo6VmVydGV4UGFpcjo6bWluWCk6CisgICAgICAgIChXZWJDb3JlOjpWZXJ0ZXhQYWly
OjptaW5ZKToKKyAgICAgICAgKFdlYkNvcmU6OlZlcnRleFBhaXI6Om1heFgpOgorICAgICAgICAo
V2ViQ29yZTo6VmVydGV4UGFpcjo6bWF4WSk6CisgICAgICAgIChGbG9hdFBvbHlnb25FZGdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UG9seWdvbkVkZ2U6OnByZXZpb3VzRWRnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpGbG9hdFBvbHlnb25FZGdlOjpuZXh0RWRnZSk6CisgICAgICAgIChXZWJD
b3JlOjpGbG9hdFBvbHlnb25FZGdlOjpwb2x5Z29uKToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0
UG9seWdvbkVkZ2U6OnZlcnRleEluZGV4MSk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdFBvbHln
b25FZGdlOjp2ZXJ0ZXhJbmRleDIpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2x5Z29uRWRn
ZTo6ZWRnZUluZGV4KToKKyAgICAgICAgKiByZW5kZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHA6
IE5vdyBkZXBlbmRzIG9uIEZsb2F0UG9seWdvbi4KKyAgICAgICAgKEVkZ2VJbnRlcnNlY3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6bGVmdFNpZGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0
ZVhJbnRlcnNlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Z2V0VmVydGV4SW50ZXJzZWN0aW9u
VmVydGljZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZVhJbnRlcnNlY3Rpb25zKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbXB1dGVPdmVybGFwcGluZ0VkZ2VYUHJvamVjdGlvbnMpOgorICAg
ICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbjo6Z2V0RXhjbHVkZWRJbnRlcnZhbHMpOgor
ICAgICAgICAoV2ViQ29yZTo6RXhjbHVzaW9uUG9seWdvbjo6Z2V0SW5jbHVkZWRJbnRlcnZhbHMp
OgorICAgICAgICAoV2ViQ29yZTo6Zmlyc3RGaXRSZWN0SW5Qb2x5Z29uKToKKyAgICAgICAgKFdl
YkNvcmU6OkV4Y2x1c2lvblBvbHlnb246OmZpcnN0SW5jbHVkZWRJbnRlcnZhbExvZ2ljYWxUb3Ap
OgorICAgICAgICAqIHJlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmg6IE5vdyBkZXBlbmRzIG9u
IEZsb2F0UG9seWdvbi4KKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNldFBvbHlnb25FZGdlOjpPZmZz
ZXRQb2x5Z29uRWRnZSk6CisgICAgICAgIChFeGNsdXNpb25Qb2x5Z29uKToKKyAgICAgICAgKFdl
YkNvcmU6OkV4Y2x1c2lvblBvbHlnb246OkV4Y2x1c2lvblBvbHlnb24pOgorCiAyMDEzLTAzLTEx
ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIENocm9t
ZUNsaWVudC5oIGRvZXNu4oCZdCBuZWVkIHRvIGluY2x1ZGUgUmVuZGVyU25hcHNob3R0ZWRQbHVn
SW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDMwODc3ZDYuLmVhMDZkMmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNTU4OCw2ICs1NTg4LDggQEAgd2ViY29y
ZV9wbGF0Zm9ybV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFBvaW50M0QuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRQb2ludC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9p
bnQuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2x5Z29uLmNw
cCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2x5Z29uLmggXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5jcHAgXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IDI0NGJj
YjEuLmExZGY2ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIv
U291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMTAwNiw2ICsxMDA2LDcgQEAgU09VUkNFUyAr
PSBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3BwIFwK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuY3BwIFwKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFBvaW50LmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2x5
Z29uLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmNwcCBcCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRTaXplLmNwcCBcCkBAIC0yMjMyLDYgKzIyMzMsNyBAQCBIRUFERVJTICs9IFwKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaCBcCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRQb2ludDNELmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQu
aCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2x5Z29uLmggXAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0UXVhZC5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3Qu
aCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmggXApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmlu
ZGV4IDk4ZDNhZWYuLmRjZDMwNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTQ4MTIsNiArNDgxMiw3
IEBACiAgICAgICAgIF0sCiAgICAgICAgICd3ZWJjb3JlX3BsYXRmb3JtX2dlb21ldHJ5X2ZpbGVz
JzogWwogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3BwJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvbHlnb24uY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFJlY3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oKaW5kZXggYzY0YmVhOS4uM2IxZDc5YiAxMDA3NTUKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTI5Nzk4LDYgKzI5Nzk4LDE0IEBA
CiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxw
bGF0Zm9ybVxncmFwaGljc1xGbG9hdFBvbHlnb24uY3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgor
CQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRmxvYXRQ
b2x5Z29uLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGbG9hdFF1YWQuY3BwIgogCQkJCQk+CiAJCQkJPC9G
aWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IGE2NTFkMjYuLjI5NWNlOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE5MjMsNiArMTkyMyw4IEBACiAJCTZF
QkYwRTc2MTJBOTg2ODgwMERCMTcwQSAvKiBKU0VYVERyYXdCdWZmZXJzLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQkYwRTc0MTJBOTg2ODgwMERC
MTcwQSAvKiBKU0VYVERyYXdCdWZmZXJzLmNwcCAqLzsgfTsKIAkJNkVCRjBFNzcxMkE5ODY4ODAw
REIxNzA5IC8qIEpTT0VTVGV4dHVyZUZsb2F0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA2RUJGMEU3NTEyQTk4Njg4MDBEQjE3MDkgLyogSlNPRVNUZXh0
dXJlRmxvYXQuaCAqLzsgfTsKIAkJNkVCRjBFNzcxMkE5ODY4ODAwREIxNzBBIC8qIEpTRVhURHJh
d0J1ZmZlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDZFQkYwRTc1MTJBOTg2ODgwMERCMTcwQSAvKiBKU0VYVERyYXdCdWZmZXJzLmggKi87IH07CisJ
CTZFQzQ4MEExMTZFQTYzOEEwMEE0OERDQiAvKiBGbG9hdFBvbHlnb24uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVDNDgwOUYxNkVBNjM4QTAwQTQ4
RENCIC8qIEZsb2F0UG9seWdvbi5jcHAgKi87IH07CisJCTZFQzQ4MEEyMTZFQTYzOEEwMEE0OERD
QiAvKiBGbG9hdFBvbHlnb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDZFQzQ4MEEwMTZFQTYzOEEwMEE0OERDQiAvKiBGbG9hdFBvbHlnb24uaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RUQ4NzhDNDE0
NzQ5M0Y0MDA0QzM1OTcgLyogUmVuZGVyVGFibGVDYXB0aW9uLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFRDg3OEMyMTQ3NDkzRjQwMDRDMzU5NyAv
KiBSZW5kZXJUYWJsZUNhcHRpb24uY3BwICovOyB9OwogCQk2RUQ4NzhDNTE0NzQ5M0Y0MDA0QzM1
OTcgLyogUmVuZGVyVGFibGVDYXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2RUQ4NzhDMzE0NzQ5M0Y0MDA0QzM1OTcgLyogUmVuZGVyVGFibGVD
YXB0aW9uLmggKi87IH07CiAJCTZFRThBNzcyMTBGODAzRjMwMDVBNEEyNCAvKiBKU1dlYkdMQ29u
dGV4dEF0dHJpYnV0ZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNkVFOEE3NzAxMEY4MDNGMzAwNUE0QTI0IC8qIEpTV2ViR0xDb250ZXh0QXR0cmli
dXRlcy5jcHAgKi87IH07CkBAIC05NDEyLDYgKzk0MTQsOCBAQAogCQk2RUJGMEU3NDEyQTk4Njg4
MDBEQjE3MEEgLyogSlNFWFREcmF3QnVmZmVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU0VYVERyYXdCdWZmZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNkVCRjBFNzUxMkE5ODY4ODAwREIxNzA5IC8qIEpTT0VTVGV4dHVyZUZsb2F0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTT0VTVGV4dHVyZUZsb2F0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFQkYwRTc1MTJBOTg2ODgwMERCMTcwQSAvKiBK
U0VYVERyYXdCdWZmZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRVhU
RHJhd0J1ZmZlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkVDNDgwOUYxNkVB
NjM4QTAwQTQ4RENCIC8qIEZsb2F0UG9seWdvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBGbG9hdFBvbHlnb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk2RUM0ODBBMDE2RUE2MzhBMDBBNDhEQ0IgLyogRmxvYXRQb2x5Z29uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsb2F0UG9seWdvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk2RUQ4NzhDMjE0NzQ5M0Y0MDA0QzM1OTcgLyogUmVuZGVyVGFibGVDYXB0
aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclRhYmxl
Q2FwdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZFRDg3OEMzMTQ3NDkz
RjQwMDRDMzU5NyAvKiBSZW5kZXJUYWJsZUNhcHRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVuZGVyVGFibGVDYXB0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTZFRThBNzcwMTBGODAzRjMwMDVBNEEyNCAvKiBKU1dlYkdMQ29udGV4dEF0dHJpYnV0
ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJHTENvbnRl
eHRBdHRyaWJ1dGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIwNjk5LDYg
KzIwNzAzLDggQEAKIAkJCQk2RTY3RDJBODEyODBFOEJEMDA4NzU4RjcgLyogRXh0ZW5zaW9uczNE
LmggKi8sCiAJCQkJQjI3NTM1M0EwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnQuY3BwICov
LAogCQkJCUIyNzUzNTNCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50LmggKi8sCisJCQkJ
NkVDNDgwOUYxNkVBNjM4QTAwQTQ4RENCIC8qIEZsb2F0UG9seWdvbi5jcHAgKi8sCisJCQkJNkVD
NDgwQTAxNkVBNjM4QTAwQTQ4RENCIC8qIEZsb2F0UG9seWdvbi5oICovLAogCQkJCUIyRTI3QzlE
MEIwRjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50M0QuY3BwICovLAogCQkJCUIyRTI3QzlFMEIw
RjJCMDkwMEYxN0M3QiAvKiBGbG9hdFBvaW50M0QuaCAqLywKIAkJCQkwRkQ3MjM4MTBFQzhCRDkz
MDBDQTVERDcgLyogRmxvYXRRdWFkLmNwcCAqLywKQEAgLTIzMjc0LDYgKzIzMjgwLDcgQEAKIAkJ
CWlzYSA9IFBCWEhlYWRlcnNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4
MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCTZFQzQ4MEEyMTZFQTYzOEEwMEE0OERDQiAvKiBGbG9h
dFBvbHlnb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMTE1RkFCMTY3OTg4Q0QwMDI0OTEzNCAv
KiBBYnN0cmFjdERhdGFiYXNlU2VydmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTlFODlGQzE2
RTJEQzA1MDBBOTA4RjggLyogT3JpZ2luTG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU0QUFE
RUUxNkQyQzM3NDAwMDI2RkZDIC8qIEFic3RyYWN0U1FMU3RhdGVtZW50LmggaW4gSGVhZGVycyAq
LywKQEAgLTI5OTA2LDcgKzI5OTEzLDkgQEAKIAkJCQk3RTY2RTIzMzE2RDZFQjZDMDBGN0U3RkYg
LyogV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3RUEz
MEY2OTE2REZGRTc1MDAyNTdEMEIgLyogSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTJEODI4N0Y2MTZFNEEwMzgwMDg2QkQwMCAvKiBIaXRUZXN0TG9j
YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNkVDNDgwQTExNkVBNjM4QTAwQTQ4RENCIC8q
IEZsb2F0UG9seWdvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODk1NzA5RjE2RTlCRDU5MDAx
ODRFNTUgLyogSFRNTElkZW50aWZpZXIuY3BwIGluIFNvdXJjZXMgKi8sCisKIAkJCSk7CiAJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9seWdvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvbHlnb24uY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMDY4NDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvbHlnb24uY3BwCkBAIC0wLDAgKzEs
MjM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3Jh
dGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICog
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBD
T1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
CisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
CisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZsb2F0UG9seWdv
bi5oIgorCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitzdGF0aWMgaW5saW5lIGZsb2F0IGRldGVybWluYW50KGNvbnN0IEZsb2F0U2l6ZSYgYSwg
Y29uc3QgRmxvYXRTaXplJiBiKQoreworICAgIHJldHVybiBhLndpZHRoKCkgKiBiLmhlaWdodCgp
IC0gYS5oZWlnaHQoKSAqIGIud2lkdGgoKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGFyZUNv
bGxpbmVhclBvaW50cyhjb25zdCBGbG9hdFBvaW50JiBwMCwgY29uc3QgRmxvYXRQb2ludCYgcDEs
IGNvbnN0IEZsb2F0UG9pbnQmIHAyKQoreworICAgIHJldHVybiAhZGV0ZXJtaW5hbnQocDEgLSBw
MCwgcDIgLSBwMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBhcmVDb2luY2lkZW50UG9pbnRz
KGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50JiBwMSkKK3sKKyAgICByZXR1
cm4gcDAueCgpID09IHAxLngoKSAmJiBwMC55KCkgPT0gcDEueSgpOworfQorCitzdGF0aWMgaW5s
aW5lIGJvb2wgaXNQb2ludE9uTGluZVNlZ21lbnQoY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MSwg
Y29uc3QgRmxvYXRQb2ludCYgdmVydGV4MiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit7Cisg
ICAgcmV0dXJuIHBvaW50LngoKSA+PSBzdGQ6Om1pbih2ZXJ0ZXgxLngoKSwgdmVydGV4Mi54KCkp
CisgICAgICAgICYmIHBvaW50LngoKSA8PSBzdGQ6Om1heCh2ZXJ0ZXgxLngoKSwgdmVydGV4Mi54
KCkpCisgICAgICAgICYmIGFyZUNvbGxpbmVhclBvaW50cyh2ZXJ0ZXgxLCB2ZXJ0ZXgyLCBwb2lu
dCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbmV4dFZlcnRleEluZGV4KHVuc2lnbmVk
IHZlcnRleEluZGV4LCB1bnNpZ25lZCBuVmVydGljZXMsIGJvb2wgY2xvY2t3aXNlKQoreworICAg
IHJldHVybiAoKGNsb2Nrd2lzZSkgPyB2ZXJ0ZXhJbmRleCArIDEgOiB2ZXJ0ZXhJbmRleCAtIDEg
KyBuVmVydGljZXMpICUgblZlcnRpY2VzOworfQorCitzdGF0aWMgdW5zaWduZWQgZmluZE5leHRF
ZGdlVmVydGV4SW5kZXgoY29uc3QgRmxvYXRQb2x5Z29uJiBwb2x5Z29uLCB1bnNpZ25lZCB2ZXJ0
ZXhJbmRleDEsIGJvb2wgY2xvY2t3aXNlKQoreworICAgIHVuc2lnbmVkIG5WZXJ0aWNlcyA9IHBv
bHlnb24ubnVtYmVyT2ZWZXJ0aWNlcygpOworICAgIHVuc2lnbmVkIHZlcnRleEluZGV4MiA9IG5l
eHRWZXJ0ZXhJbmRleCh2ZXJ0ZXhJbmRleDEsIG5WZXJ0aWNlcywgY2xvY2t3aXNlKTsKKworICAg
IHdoaWxlICh2ZXJ0ZXhJbmRleDIgJiYgYXJlQ29pbmNpZGVudFBvaW50cyhwb2x5Z29uLnZlcnRl
eEF0KHZlcnRleEluZGV4MSksIHBvbHlnb24udmVydGV4QXQodmVydGV4SW5kZXgyKSkpCisgICAg
ICAgIHZlcnRleEluZGV4MiA9IG5leHRWZXJ0ZXhJbmRleCh2ZXJ0ZXhJbmRleDIsIG5WZXJ0aWNl
cywgY2xvY2t3aXNlKTsKKworICAgIHdoaWxlICh2ZXJ0ZXhJbmRleDIpIHsKKyAgICAgICAgdW5z
aWduZWQgdmVydGV4SW5kZXgzID0gbmV4dFZlcnRleEluZGV4KHZlcnRleEluZGV4MiwgblZlcnRp
Y2VzLCBjbG9ja3dpc2UpOworICAgICAgICBpZiAoIWFyZUNvbGxpbmVhclBvaW50cyhwb2x5Z29u
LnZlcnRleEF0KHZlcnRleEluZGV4MSksIHBvbHlnb24udmVydGV4QXQodmVydGV4SW5kZXgyKSwg
cG9seWdvbi52ZXJ0ZXhBdCh2ZXJ0ZXhJbmRleDMpKSkKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB2ZXJ0ZXhJbmRleDIgPSB2ZXJ0ZXhJbmRleDM7CisgICAgfQorCisgICAgcmV0dXJuIHZl
cnRleEluZGV4MjsKK30KKworRmxvYXRQb2x5Z29uOjpGbG9hdFBvbHlnb24oUGFzc093blB0cjxW
ZWN0b3I8RmxvYXRQb2ludD4gPiB2ZXJ0aWNlcywgV2luZFJ1bGUgZmlsbFJ1bGUpCisgICAgOiBt
X3ZlcnRpY2VzKHZlcnRpY2VzKQorICAgICwgbV9maWxsUnVsZShmaWxsUnVsZSkKK3sKKyAgICB1
bnNpZ25lZCBuVmVydGljZXMgPSBudW1iZXJPZlZlcnRpY2VzKCk7CisgICAgbV9lZGdlcy5yZXNp
emUoblZlcnRpY2VzKTsKKyAgICBtX2VtcHR5ID0gblZlcnRpY2VzIDwgMzsKKworICAgIGlmIChu
VmVydGljZXMpCisgICAgICAgIG1fYm91bmRpbmdCb3guc2V0TG9jYXRpb24odmVydGV4QXQoMCkp
OworCisgICAgaWYgKG1fZW1wdHkpCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIG1p
blZlcnRleEluZGV4ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgblZlcnRpY2Vz
OyArK2kpIHsKKyAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4ID0gdmVydGV4QXQoaSk7
CisgICAgICAgIGlmICh2ZXJ0ZXgueSgpIDwgdmVydGV4QXQobWluVmVydGV4SW5kZXgpLnkoKSB8
fCAodmVydGV4LnkoKSA9PSB2ZXJ0ZXhBdChtaW5WZXJ0ZXhJbmRleCkueSgpICYmIHZlcnRleC54
KCkgPCB2ZXJ0ZXhBdChtaW5WZXJ0ZXhJbmRleCkueCgpKSkKKyAgICAgICAgICAgIG1pblZlcnRl
eEluZGV4ID0gaTsKKyAgICB9CisgICAgRmxvYXRQb2ludCBuZXh0VmVydGV4ID0gdmVydGV4QXQo
KG1pblZlcnRleEluZGV4ICsgMSkgJSBuVmVydGljZXMpOworICAgIEZsb2F0UG9pbnQgcHJldlZl
cnRleCA9IHZlcnRleEF0KChtaW5WZXJ0ZXhJbmRleCArIG5WZXJ0aWNlcyAtIDEpICUgblZlcnRp
Y2VzKTsKKyAgICBib29sIGNsb2Nrd2lzZSA9IGRldGVybWluYW50KHZlcnRleEF0KG1pblZlcnRl
eEluZGV4KSAtIHByZXZWZXJ0ZXgsIG5leHRWZXJ0ZXggLSBwcmV2VmVydGV4KSA+IDA7CisKKyAg
ICB1bnNpZ25lZCBlZGdlSW5kZXggPSAwOworICAgIHVuc2lnbmVkIHZlcnRleEluZGV4MSA9IDA7
CisgICAgZG8geworICAgICAgICBtX2JvdW5kaW5nQm94LmV4dGVuZCh2ZXJ0ZXhBdCh2ZXJ0ZXhJ
bmRleDEpKTsKKyAgICAgICAgdW5zaWduZWQgdmVydGV4SW5kZXgyID0gZmluZE5leHRFZGdlVmVy
dGV4SW5kZXgoKnRoaXMsIHZlcnRleEluZGV4MSwgY2xvY2t3aXNlKTsKKyAgICAgICAgbV9lZGdl
c1tlZGdlSW5kZXhdLm1fcG9seWdvbiA9IHRoaXM7CisgICAgICAgIG1fZWRnZXNbZWRnZUluZGV4
XS5tX3ZlcnRleEluZGV4MSA9IHZlcnRleEluZGV4MTsKKyAgICAgICAgbV9lZGdlc1tlZGdlSW5k
ZXhdLm1fdmVydGV4SW5kZXgyID0gdmVydGV4SW5kZXgyOworICAgICAgICBtX2VkZ2VzW2VkZ2VJ
bmRleF0ubV9lZGdlSW5kZXggPSBlZGdlSW5kZXg7CisgICAgICAgICsrZWRnZUluZGV4OworICAg
ICAgICB2ZXJ0ZXhJbmRleDEgPSB2ZXJ0ZXhJbmRleDI7CisgICAgfSB3aGlsZSAodmVydGV4SW5k
ZXgxKTsKKworICAgIGlmIChlZGdlSW5kZXggPiAzKSB7CisgICAgICAgIGNvbnN0IEZsb2F0UG9s
eWdvbkVkZ2UmIGZpcnN0RWRnZSA9IG1fZWRnZXNbMF07CisgICAgICAgIGNvbnN0IEZsb2F0UG9s
eWdvbkVkZ2UmIGxhc3RFZGdlID0gbV9lZGdlc1tlZGdlSW5kZXggLSAxXTsKKyAgICAgICAgaWYg
KGFyZUNvbGxpbmVhclBvaW50cyhsYXN0RWRnZS52ZXJ0ZXgxKCksIGxhc3RFZGdlLnZlcnRleDIo
KSwgZmlyc3RFZGdlLnZlcnRleDIoKSkpIHsKKyAgICAgICAgICAgIG1fZWRnZXNbMF0ubV92ZXJ0
ZXhJbmRleDEgPSBsYXN0RWRnZS5tX3ZlcnRleEluZGV4MTsKKyAgICAgICAgICAgIGVkZ2VJbmRl
eC0tOworICAgICAgICB9CisgICAgfQorCisgICAgbV9lZGdlcy5yZXNpemUoZWRnZUluZGV4KTsK
KyAgICBtX2VtcHR5ID0gbV9lZGdlcy5zaXplKCkgPCAzOworCisgICAgaWYgKG1fZW1wdHkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2VkZ2VzLnNp
emUoKTsgKytpKSB7CisgICAgICAgIEZsb2F0UG9seWdvbkVkZ2UqIGVkZ2UgPSAmbV9lZGdlc1tp
XTsKKyAgICAgICAgbV9lZGdlVHJlZS5hZGQoRWRnZUludGVydmFsKGVkZ2UtPm1pblkoKSwgZWRn
ZS0+bWF4WSgpLCBlZGdlKSk7CisgICAgfQorfQorCitib29sIEZsb2F0UG9seWdvbjo6b3Zlcmxh
cHBpbmdFZGdlcyhmbG9hdCBtaW5ZLCBmbG9hdCBtYXhZLCBWZWN0b3I8Y29uc3QgRmxvYXRQb2x5
Z29uRWRnZSo+JiByZXN1bHQpIGNvbnN0Cit7CisgICAgVmVjdG9yPEZsb2F0UG9seWdvbjo6RWRn
ZUludGVydmFsPiBvdmVybGFwcGluZ0VkZ2VJbnRlcnZhbHM7CisgICAgbV9lZGdlVHJlZS5hbGxP
dmVybGFwcyhGbG9hdFBvbHlnb246OkVkZ2VJbnRlcnZhbChtaW5ZLCBtYXhZLCAwKSwgb3Zlcmxh
cHBpbmdFZGdlSW50ZXJ2YWxzKTsKKyAgICB1bnNpZ25lZCBvdmVybGFwcGluZ0VkZ2VJbnRlcnZh
bHNTaXplID0gb3ZlcmxhcHBpbmdFZGdlSW50ZXJ2YWxzLnNpemUoKTsKKyAgICByZXN1bHQucmVz
aXplKG92ZXJsYXBwaW5nRWRnZUludGVydmFsc1NpemUpOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBvdmVybGFwcGluZ0VkZ2VJbnRlcnZhbHNTaXplOyArK2kpIHsKKyAgICAgICAgY29u
c3QgRmxvYXRQb2x5Z29uRWRnZSogZWRnZSA9IHN0YXRpY19jYXN0PGNvbnN0IEZsb2F0UG9seWdv
bkVkZ2UqPihvdmVybGFwcGluZ0VkZ2VJbnRlcnZhbHNbaV0uZGF0YSgpKTsKKyAgICAgICAgQVNT
RVJUKGVkZ2UpOworICAgICAgICByZXN1bHRbaV0gPSBlZGdlOworICAgIH0KKyAgICByZXR1cm4g
b3ZlcmxhcHBpbmdFZGdlSW50ZXJ2YWxzU2l6ZSA+IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgZmxv
YXQgbGVmdFNpZGUoY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MSwgY29uc3QgRmxvYXRQb2ludCYg
dmVydGV4MiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit7CisgICAgcmV0dXJuICgocG9pbnQu
eCgpIC0gdmVydGV4MS54KCkpICogKHZlcnRleDIueSgpIC0gdmVydGV4MS55KCkpKSAtICgodmVy
dGV4Mi54KCkgLSB2ZXJ0ZXgxLngoKSkgKiAocG9pbnQueSgpIC0gdmVydGV4MS55KCkpKTsKK30K
KworYm9vbCBGbG9hdFBvbHlnb246OmNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBj
b25zdAoreworICAgIGlmICghbV9ib3VuZGluZ0JveC5jb250YWlucyhwb2ludCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGludCB3aW5kaW5nTnVtYmVyID0gMDsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZFZGdlcygpOyArK2kpIHsKKyAgICAgICAgY29uc3Qg
RmxvYXRQb2ludCYgdmVydGV4MSA9IGVkZ2VBdChpKS52ZXJ0ZXgxKCk7CisgICAgICAgIGNvbnN0
IEZsb2F0UG9pbnQmIHZlcnRleDIgPSBlZGdlQXQoaSkudmVydGV4MigpOworICAgICAgICBpZiAo
aXNQb2ludE9uTGluZVNlZ21lbnQodmVydGV4MSwgdmVydGV4MiwgcG9pbnQpKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICh2ZXJ0ZXgyLnkoKSA8IHBvaW50LnkoKSkgewor
ICAgICAgICAgICAgaWYgKCh2ZXJ0ZXgxLnkoKSA+IHBvaW50LnkoKSkgJiYgKGxlZnRTaWRlKHZl
cnRleDEsIHZlcnRleDIsIHBvaW50KSA+IDApKQorICAgICAgICAgICAgICAgICsrd2luZGluZ051
bWJlcjsKKyAgICAgICAgfSBlbHNlIGlmICh2ZXJ0ZXgyLnkoKSA+IHBvaW50LnkoKSkgeworICAg
ICAgICAgICAgaWYgKCh2ZXJ0ZXgxLnkoKSA8PSBwb2ludC55KCkpICYmIChsZWZ0U2lkZSh2ZXJ0
ZXgxLCB2ZXJ0ZXgyLCBwb2ludCkgPCAwKSkKKyAgICAgICAgICAgICAgICAtLXdpbmRpbmdOdW1i
ZXI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gd2luZGluZ051bWJlcjsKK30KKwor
Ym9vbCBWZXJ0ZXhQYWlyOjpvdmVybGFwc1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25z
dAoreworICAgIGJvb2wgYm91bmRzT3ZlcmxhcCA9IChtaW5YKCkgPCByZWN0Lm1heFgoKSkgJiYg
KG1heFgoKSA+IHJlY3QueCgpKSAmJiAobWluWSgpIDwgcmVjdC5tYXhZKCkpICYmIChtYXhZKCkg
PiByZWN0LnkoKSk7CisgICAgaWYgKCFib3VuZHNPdmVybGFwKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBmbG9hdCBsZWZ0U2lkZVZhbHVlc1s0XSA9IHsKKyAgICAgICAgbGVmdFNpZGUo
dmVydGV4MSgpLCB2ZXJ0ZXgyKCksIHJlY3QubWluWE1pbllDb3JuZXIoKSksCisgICAgICAgIGxl
ZnRTaWRlKHZlcnRleDEoKSwgdmVydGV4MigpLCByZWN0Lm1heFhNaW5ZQ29ybmVyKCkpLAorICAg
ICAgICBsZWZ0U2lkZSh2ZXJ0ZXgxKCksIHZlcnRleDIoKSwgcmVjdC5taW5YTWF4WUNvcm5lcigp
KSwKKyAgICAgICAgbGVmdFNpZGUodmVydGV4MSgpLCB2ZXJ0ZXgyKCksIHJlY3QubWF4WE1heFlD
b3JuZXIoKSkKKyAgICB9OworCisgICAgaW50IGN1cnJlbnRMZWZ0U2lkZVNpZ24gPSAwOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCA0OyArK2kpIHsKKyAgICAgICAgaWYgKCFsZWZ0U2lk
ZVZhbHVlc1tpXSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpbnQgbGVmdFNpZGVT
aWduID0gbGVmdFNpZGVWYWx1ZXNbaV0gPiAwID8gMSA6IC0xOworICAgICAgICBpZiAoIWN1cnJl
bnRMZWZ0U2lkZVNpZ24pCisgICAgICAgICAgICBjdXJyZW50TGVmdFNpZGVTaWduID0gbGVmdFNp
ZGVTaWduOworICAgICAgICBlbHNlIGlmIChjdXJyZW50TGVmdFNpZGVTaWduICE9IGxlZnRTaWRl
U2lnbikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBWZXJ0ZXhQYWlyOjppbnRlcnNlY3Rpb24oY29uc3QgVmVydGV4UGFpciYg
b3RoZXIsIEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIC8vIFNlZTogaHR0cDovL3Bh
dWxib3Vya2UubmV0L2dlb21ldHJ5L3BvaW50bGluZXBsYW5lLywgIkludGVyc2VjdGlvbiBwb2lu
dCBvZiB0d28gbGluZXMgaW4gMiBkaW1lbnNpb25zIgorCisgICAgY29uc3QgRmxvYXRTaXplJiB0
aGlzRGVsdGEgPSB2ZXJ0ZXgyKCkgLSB2ZXJ0ZXgxKCk7CisgICAgY29uc3QgRmxvYXRTaXplJiBv
dGhlckRlbHRhID0gb3RoZXIudmVydGV4MigpIC0gb3RoZXIudmVydGV4MSgpOworICAgIGZsb2F0
IGRlbm9taW5hdG9yID0gZGV0ZXJtaW5hbnQodGhpc0RlbHRhLCBvdGhlckRlbHRhKTsKKyAgICBp
ZiAoIWRlbm9taW5hdG9yKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBUaGUgdHdv
IGxpbmUgc2VnbWVudHM6ICJ0aGlzIiB2ZXJ0ZXgxLHZlcnRleDIgYW5kICJvdGhlciIgdmVydGV4
MSx2ZXJ0ZXgyLCBoYXZlIGJlZW4gZGVmaW5lZAorICAgIC8vIGluIHBhcmFtZXRyaWMgZm9ybS4g
RWFjaCBwb2ludCBvbiB0aGUgbGluZSBzZWdtZW50IGlzOiB2ZXJ0ZXgxICsgdSAqICh2ZXJ0ZXgy
IC0gdmVydGV4MSksCisgICAgLy8gd2hlbiAwIDw9IHUgPD0gMS4gV2UncmUgY29tcHV0aW5nIHRo
ZSB2YWx1ZXMgb2YgdSBmb3IgZWFjaCBsaW5lIGF0IHRoZWlyIGludGVyc2VjdGlvbiBwb2ludC4K
KworICAgIGNvbnN0IEZsb2F0U2l6ZSYgdmVydGV4MURlbHRhID0gdmVydGV4MSgpIC0gb3RoZXIu
dmVydGV4MSgpOworICAgIGZsb2F0IHVUaGlzTGluZSA9IGRldGVybWluYW50KG90aGVyRGVsdGEs
IHZlcnRleDFEZWx0YSkgLyBkZW5vbWluYXRvcjsKKyAgICBmbG9hdCB1T3RoZXJMaW5lID0gZGV0
ZXJtaW5hbnQodGhpc0RlbHRhLCB2ZXJ0ZXgxRGVsdGEpIC8gZGVub21pbmF0b3I7CisKKyAgICBp
ZiAodVRoaXNMaW5lIDwgMCB8fCB1T3RoZXJMaW5lIDwgMCB8fCB1VGhpc0xpbmUgPiAxIHx8IHVP
dGhlckxpbmUgPiAxKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBwb2ludCA9IHZlcnRl
eDEoKSArIHVUaGlzTGluZSAqIHRoaXNEZWx0YTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRQb2x5Z29uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFBvbHlnb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGVm
ZTE0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RmxvYXRQb2x5Z29uLmgKQEAgLTAsMCArMSwxNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcK
KyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisg
KiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEZsb2F0UG9s
eWdvbl9oCisjZGVmaW5lIEZsb2F0UG9seWdvbl9oCisKKyNpbmNsdWRlICJGbG9hdFBvaW50Lmgi
CisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiUE9ESW50ZXJ2YWxUcmVlLmgiCisj
aW5jbHVkZSAiV2luZFJ1bGUuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgRmxvYXRQb2x5Z29uRWRnZTsKKworLy8gVGhpcyBjbGFzcyBpcyB1
c2VkIGJ5IFBPREludGVydmFsVHJlZSBmb3IgZGVidWdnaW5nLgorI2lmbmRlZiBOREVCVUcKK3Rl
bXBsYXRlIDxjbGFzcz4gc3RydWN0IFZhbHVlVG9TdHJpbmc7CisjZW5kaWYKKworY2xhc3MgRmxv
YXRQb2x5Z29uIHsKK3B1YmxpYzoKKyAgICBGbG9hdFBvbHlnb24oUGFzc093blB0cjxWZWN0b3I8
RmxvYXRQb2ludD4gPiB2ZXJ0aWNlcywgV2luZFJ1bGUgZmlsbFJ1bGUpOworCisgICAgY29uc3Qg
RmxvYXRQb2ludCYgdmVydGV4QXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuICgqbV92
ZXJ0aWNlcylbaW5kZXhdOyB9CisgICAgdW5zaWduZWQgbnVtYmVyT2ZWZXJ0aWNlcygpIGNvbnN0
IHsgcmV0dXJuIG1fdmVydGljZXMtPnNpemUoKTsgfQorCisgICAgV2luZFJ1bGUgZmlsbFJ1bGUo
KSBjb25zdCB7IHJldHVybiBtX2ZpbGxSdWxlOyB9CisKKyAgICBjb25zdCBGbG9hdFBvbHlnb25F
ZGdlJiBlZGdlQXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fZWRnZXNbaW5kZXhd
OyB9CisgICAgdW5zaWduZWQgbnVtYmVyT2ZFZGdlcygpIGNvbnN0IHsgcmV0dXJuIG1fZWRnZXMu
c2l6ZSgpOyB9CisKKyAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBt
X2JvdW5kaW5nQm94OyB9CisgICAgYm9vbCBvdmVybGFwcGluZ0VkZ2VzKGZsb2F0IG1pblksIGZs
b2F0IG1heFksIFZlY3Rvcjxjb25zdCBGbG9hdFBvbHlnb25FZGdlKj4mIHJlc3VsdCkgY29uc3Q7
CisgICAgYm9vbCBjb250YWlucyhjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAgYm9vbCBp
c0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9lbXB0eTsgfQorCitwcml2YXRlOgorICAgIHR5cGVk
ZWYgUE9ESW50ZXJ2YWw8ZmxvYXQsIEZsb2F0UG9seWdvbkVkZ2UqPiBFZGdlSW50ZXJ2YWw7Cisg
ICAgdHlwZWRlZiBQT0RJbnRlcnZhbFRyZWU8ZmxvYXQsIEZsb2F0UG9seWdvbkVkZ2UqPiBFZGdl
SW50ZXJ2YWxUcmVlOworCisgICAgT3duUHRyPFZlY3RvcjxGbG9hdFBvaW50PiA+IG1fdmVydGlj
ZXM7CisgICAgV2luZFJ1bGUgbV9maWxsUnVsZTsKKyAgICBGbG9hdFJlY3QgbV9ib3VuZGluZ0Jv
eDsKKyAgICBib29sIG1fZW1wdHk7CisgICAgVmVjdG9yPEZsb2F0UG9seWdvbkVkZ2U+IG1fZWRn
ZXM7CisgICAgRWRnZUludGVydmFsVHJlZSBtX2VkZ2VUcmVlOyAvLyBFYWNoIEVkZ2VJbnRlcnZh
bFRyZWUgbm9kZSBzdG9yZXMgbWluWSwgbWF4WSwgYW5kIGEgKCJVc2VyRGF0YSIpIHBvaW50ZXIg
dG8gYSBGbG9hdFBvbHlnb25FZGdlLgorCit9OworCitjbGFzcyBWZXJ0ZXhQYWlyIHsKK3B1Ymxp
YzoKKyAgICB2aXJ0dWFsIH5WZXJ0ZXhQYWlyKCkgeyB9CisKKyAgICB2aXJ0dWFsIGNvbnN0IEZs
b2F0UG9pbnQmIHZlcnRleDEoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBjb25zdCBGbG9hdFBv
aW50JiB2ZXJ0ZXgyKCkgY29uc3QgPSAwOworCisgICAgZmxvYXQgbWluWCgpIGNvbnN0IHsgcmV0
dXJuIHN0ZDo6bWluKHZlcnRleDEoKS54KCksIHZlcnRleDIoKS54KCkpOyB9CisgICAgZmxvYXQg
bWluWSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWluKHZlcnRleDEoKS55KCksIHZlcnRleDIoKS55
KCkpOyB9CisgICAgZmxvYXQgbWF4WCgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWF4KHZlcnRleDEo
KS54KCksIHZlcnRleDIoKS54KCkpOyB9CisgICAgZmxvYXQgbWF4WSgpIGNvbnN0IHsgcmV0dXJu
IHN0ZDo6bWF4KHZlcnRleDEoKS55KCksIHZlcnRleDIoKS55KCkpOyB9CisKKyAgICBib29sIG92
ZXJsYXBzUmVjdChjb25zdCBGbG9hdFJlY3QmKSBjb25zdDsKKyAgICBib29sIGludGVyc2VjdGlv
bihjb25zdCBWZXJ0ZXhQYWlyJiwgRmxvYXRQb2ludCYpIGNvbnN0OworfTsKKworY2xhc3MgRmxv
YXRQb2x5Z29uRWRnZSA6IHB1YmxpYyBWZXJ0ZXhQYWlyIHsKKyAgICBmcmllbmQgY2xhc3MgRmxv
YXRQb2x5Z29uOworcHVibGljOgorICAgIHZpcnR1YWwgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4
MSgpIGNvbnN0IE9WRVJSSURFCisgICAgeworICAgICAgICBBU1NFUlQobV9wb2x5Z29uKTsKKyAg
ICAgICAgcmV0dXJuIG1fcG9seWdvbi0+dmVydGV4QXQobV92ZXJ0ZXhJbmRleDEpOworICAgIH0K
KworICAgIHZpcnR1YWwgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MigpIGNvbnN0IE9WRVJSSURF
CisgICAgeworICAgICAgICBBU1NFUlQobV9wb2x5Z29uKTsKKyAgICAgICAgcmV0dXJuIG1fcG9s
eWdvbi0+dmVydGV4QXQobV92ZXJ0ZXhJbmRleDIpOworICAgIH0KKworICAgIGNvbnN0IEZsb2F0
UG9seWdvbkVkZ2UmIHByZXZpb3VzRWRnZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQo
bV9wb2x5Z29uICYmIG1fcG9seWdvbi0+bnVtYmVyT2ZFZGdlcygpID4gMSk7CisgICAgICAgIHJl
dHVybiBtX3BvbHlnb24tPmVkZ2VBdCgobV9lZGdlSW5kZXggKyBtX3BvbHlnb24tPm51bWJlck9m
RWRnZXMoKSAtIDEpICUgbV9wb2x5Z29uLT5udW1iZXJPZkVkZ2VzKCkpOworICAgIH0KKworICAg
IGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIG5leHRFZGdlKCkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVChtX3BvbHlnb24gJiYgbV9wb2x5Z29uLT5udW1iZXJPZkVkZ2VzKCkgPiAxKTsKKyAg
ICAgICAgcmV0dXJuIG1fcG9seWdvbi0+ZWRnZUF0KChtX2VkZ2VJbmRleCArIDEpICUgbV9wb2x5
Z29uLT5udW1iZXJPZkVkZ2VzKCkpOworICAgIH0KKworICAgIGNvbnN0IEZsb2F0UG9seWdvbiog
cG9seWdvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9seWdvbjsgfQorICAgIHVuc2lnbmVkIHZlcnRl
eEluZGV4MSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGV4SW5kZXgxOyB9CisgICAgdW5zaWduZWQg
dmVydGV4SW5kZXgyKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0ZXhJbmRleDI7IH0KKyAgICB1bnNp
Z25lZCBlZGdlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2VkZ2VJbmRleDsgfQorCitwcml2YXRl
OgorICAgIC8vIEVkZ2UgdmVydGV4IGluZGV4MSBpcyBsZXNzIHRoYW4gaW5kZXgyLCBleGNlcHQg
dGhlIGxhc3QgZWRnZSwgd2hlcmUgaW5kZXgyIGlzIDAuIFdoZW4gYSBwb2x5Z29uIGVkZ2UKKyAg
ICAvLyBpcyBkZWZpbmVkIGJ5IDMgb3IgbW9yZSBjb2xpbmVhciB2ZXJ0aWNlcywgaW5kZXgyIGNh
biBiZSB0aGUgdGhlIGluZGV4IG9mIHRoZSBsYXN0IGNvbGluZWFyIHZlcnRleC4KKyAgICB1bnNp
Z25lZCBtX3ZlcnRleEluZGV4MTsKKyAgICB1bnNpZ25lZCBtX3ZlcnRleEluZGV4MjsKKyAgICB1
bnNpZ25lZCBtX2VkZ2VJbmRleDsKKyAgICBjb25zdCBGbG9hdFBvbHlnb24qIG1fcG9seWdvbjsK
K307CisKKy8vIFRoZXNlIHN0cnVjdHVyZXMgYXJlIHVzZWQgYnkgUE9ESW50ZXJ2YWxUcmVlIGZv
ciBkZWJ1Z2dpbmcuCisjaWZuZGVmIE5ERUJVRwordGVtcGxhdGUgPD4gc3RydWN0IFZhbHVlVG9T
dHJpbmc8ZmxvYXQ+IHsKKyAgICBzdGF0aWMgU3RyaW5nIHN0cmluZyhjb25zdCBmbG9hdCB2YWx1
ZSkgeyByZXR1cm4gU3RyaW5nOjpudW1iZXIodmFsdWUpOyB9Cit9OworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBWYWx1ZVRvU3RyaW5nPEZsb2F0UG9seWdvbkVkZ2UqPiB7CisgICAgc3RhdGljIFN0cmlu
ZyBzdHJpbmcoY29uc3QgRmxvYXRQb2x5Z29uRWRnZSogZWRnZSkgeyByZXR1cm4gU3RyaW5nOjpm
b3JtYXQoIiVwICglZiwlZiAlZiwlZikiLCBlZGdlLCBlZGdlLT52ZXJ0ZXgxKCkueCgpLCBlZGdl
LT52ZXJ0ZXgxKCkueSgpLCBlZGdlLT52ZXJ0ZXgyKCkueCgpLCBlZGdlLT52ZXJ0ZXgyKCkueSgp
KTsgfQorfTsKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBG
bG9hdFBvbHlnb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1
c2lvblBvbHlnb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHln
b24uY3BwCmluZGV4IDEwNjBjMjAuLjRkY2VlODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvRXhjbHVzaW9uUG9seWdvbi5jcHAKQEAgLTQyLDExOCArNDIsMTkgQEAgZW51bSBFZGdl
SW50ZXJzZWN0aW9uVHlwZSB7CiB9OwogCiBzdHJ1Y3QgRWRnZUludGVyc2VjdGlvbiB7Ci0gICAg
Y29uc3QgRXhjbHVzaW9uUG9seWdvbkVkZ2UqIGVkZ2U7CisgICAgY29uc3QgRmxvYXRQb2x5Z29u
RWRnZSogZWRnZTsKICAgICBGbG9hdFBvaW50IHBvaW50OwogICAgIEVkZ2VJbnRlcnNlY3Rpb25U
eXBlIHR5cGU7CiB9OwogCi1zdGF0aWMgaW5saW5lIGZsb2F0IGRldGVybWluYW50KGNvbnN0IEZs
b2F0U2l6ZSYgYSwgY29uc3QgRmxvYXRTaXplJiBiKQotewotICAgIHJldHVybiBhLndpZHRoKCkg
KiBiLmhlaWdodCgpIC0gYS5oZWlnaHQoKSAqIGIud2lkdGgoKTsKLX0KLQotc3RhdGljIGlubGlu
ZSBib29sIGFyZUNvbGxpbmVhclBvaW50cyhjb25zdCBGbG9hdFBvaW50JiBwMCwgY29uc3QgRmxv
YXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0UG9pbnQmIHAyKQotewotICAgIHJldHVybiAhZGV0ZXJt
aW5hbnQocDEgLSBwMCwgcDIgLSBwMCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBhcmVDb2lu
Y2lkZW50UG9pbnRzKGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50JiBwMSkK
LXsKLSAgICByZXR1cm4gcDAueCgpID09IHAxLngoKSAmJiBwMC55KCkgPT0gcDEueSgpOwotfQot
Ci1zdGF0aWMgaW5saW5lIGJvb2wgaXNQb2ludE9uTGluZVNlZ21lbnQoY29uc3QgRmxvYXRQb2lu
dCYgdmVydGV4MSwgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MiwgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQpCi17Ci0gICAgcmV0dXJuIHBvaW50LngoKSA+PSBzdGQ6Om1pbih2ZXJ0ZXgxLngoKSwg
dmVydGV4Mi54KCkpCi0gICAgICAgICYmIHBvaW50LngoKSA8PSBzdGQ6Om1heCh2ZXJ0ZXgxLngo
KSwgdmVydGV4Mi54KCkpCi0gICAgICAgICYmIGFyZUNvbGxpbmVhclBvaW50cyh2ZXJ0ZXgxLCB2
ZXJ0ZXgyLCBwb2ludCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbmV4dFZlcnRleElu
ZGV4KHVuc2lnbmVkIHZlcnRleEluZGV4LCB1bnNpZ25lZCBuVmVydGljZXMsIGJvb2wgY2xvY2t3
aXNlKQotewotICAgIHJldHVybiAoKGNsb2Nrd2lzZSkgPyB2ZXJ0ZXhJbmRleCArIDEgOiB2ZXJ0
ZXhJbmRleCAtIDEgKyBuVmVydGljZXMpICUgblZlcnRpY2VzOwotfQotCi11bnNpZ25lZCBFeGNs
dXNpb25Qb2x5Z29uOjpmaW5kTmV4dEVkZ2VWZXJ0ZXhJbmRleCh1bnNpZ25lZCB2ZXJ0ZXhJbmRl
eDEsIGJvb2wgY2xvY2t3aXNlKSBjb25zdAotewotICAgIHVuc2lnbmVkIG5WZXJ0aWNlcyA9IG51
bWJlck9mVmVydGljZXMoKTsKLSAgICB1bnNpZ25lZCB2ZXJ0ZXhJbmRleDIgPSBuZXh0VmVydGV4
SW5kZXgodmVydGV4SW5kZXgxLCBuVmVydGljZXMsIGNsb2Nrd2lzZSk7Ci0KLSAgICB3aGlsZSAo
dmVydGV4SW5kZXgyICYmIGFyZUNvaW5jaWRlbnRQb2ludHModmVydGV4QXQodmVydGV4SW5kZXgx
KSwgdmVydGV4QXQodmVydGV4SW5kZXgyKSkpCi0gICAgICAgIHZlcnRleEluZGV4MiA9IG5leHRW
ZXJ0ZXhJbmRleCh2ZXJ0ZXhJbmRleDIsIG5WZXJ0aWNlcywgY2xvY2t3aXNlKTsKLQotICAgIHdo
aWxlICh2ZXJ0ZXhJbmRleDIpIHsKLSAgICAgICAgdW5zaWduZWQgdmVydGV4SW5kZXgzID0gbmV4
dFZlcnRleEluZGV4KHZlcnRleEluZGV4MiwgblZlcnRpY2VzLCBjbG9ja3dpc2UpOwotICAgICAg
ICBpZiAoIWFyZUNvbGxpbmVhclBvaW50cyh2ZXJ0ZXhBdCh2ZXJ0ZXhJbmRleDEpLCB2ZXJ0ZXhB
dCh2ZXJ0ZXhJbmRleDIpLCB2ZXJ0ZXhBdCh2ZXJ0ZXhJbmRleDMpKSkKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB2ZXJ0ZXhJbmRleDIgPSB2ZXJ0ZXhJbmRleDM7Ci0gICAgfQotCi0gICAg
cmV0dXJuIHZlcnRleEluZGV4MjsKLX0KLQotRXhjbHVzaW9uUG9seWdvbjo6RXhjbHVzaW9uUG9s
eWdvbihQYXNzT3duUHRyPFZlY3RvcjxGbG9hdFBvaW50PiA+IHZlcnRpY2VzLCBXaW5kUnVsZSBm
aWxsUnVsZSkKLSAgICA6IEV4Y2x1c2lvblNoYXBlKCkKLSAgICAsIG1fdmVydGljZXModmVydGlj
ZXMpCi0gICAgLCBtX2ZpbGxSdWxlKGZpbGxSdWxlKQorc3RhdGljIGlubGluZSBmbG9hdCBsZWZ0
U2lkZShjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgxLCBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgy
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkKIHsKLSAgICB1bnNpZ25lZCBuVmVydGljZXMgPSBu
dW1iZXJPZlZlcnRpY2VzKCk7Ci0gICAgbV9lZGdlcy5yZXNpemUoblZlcnRpY2VzKTsKLSAgICBt
X2VtcHR5ID0gblZlcnRpY2VzIDwgMzsKLQotICAgIGlmIChuVmVydGljZXMpCi0gICAgICAgIG1f
Ym91bmRpbmdCb3guc2V0TG9jYXRpb24odmVydGV4QXQoMCkpOwotCi0gICAgaWYgKG1fZW1wdHkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVkIG1pblZlcnRleEluZGV4ID0gMDsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgblZlcnRpY2VzOyArK2kpIHsKLSAgICAgICAgY29u
c3QgRmxvYXRQb2ludCYgdmVydGV4ID0gdmVydGV4QXQoaSk7Ci0gICAgICAgIGlmICh2ZXJ0ZXgu
eSgpIDwgdmVydGV4QXQobWluVmVydGV4SW5kZXgpLnkoKSB8fCAodmVydGV4LnkoKSA9PSB2ZXJ0
ZXhBdChtaW5WZXJ0ZXhJbmRleCkueSgpICYmIHZlcnRleC54KCkgPCB2ZXJ0ZXhBdChtaW5WZXJ0
ZXhJbmRleCkueCgpKSkKLSAgICAgICAgICAgIG1pblZlcnRleEluZGV4ID0gaTsKLSAgICB9Ci0g
ICAgRmxvYXRQb2ludCBuZXh0VmVydGV4ID0gdmVydGV4QXQoKG1pblZlcnRleEluZGV4ICsgMSkg
JSBuVmVydGljZXMpOwotICAgIEZsb2F0UG9pbnQgcHJldlZlcnRleCA9IHZlcnRleEF0KChtaW5W
ZXJ0ZXhJbmRleCArIG5WZXJ0aWNlcyAtIDEpICUgblZlcnRpY2VzKTsKLSAgICBib29sIGNsb2Nr
d2lzZSA9IGRldGVybWluYW50KHZlcnRleEF0KG1pblZlcnRleEluZGV4KSAtIHByZXZWZXJ0ZXgs
IG5leHRWZXJ0ZXggLSBwcmV2VmVydGV4KSA+IDA7Ci0KLSAgICB1bnNpZ25lZCBlZGdlSW5kZXgg
PSAwOwotICAgIHVuc2lnbmVkIHZlcnRleEluZGV4MSA9IDA7Ci0gICAgZG8gewotICAgICAgICBt
X2JvdW5kaW5nQm94LmV4dGVuZCh2ZXJ0ZXhBdCh2ZXJ0ZXhJbmRleDEpKTsKLSAgICAgICAgdW5z
aWduZWQgdmVydGV4SW5kZXgyID0gZmluZE5leHRFZGdlVmVydGV4SW5kZXgodmVydGV4SW5kZXgx
LCBjbG9ja3dpc2UpOwotICAgICAgICBtX2VkZ2VzW2VkZ2VJbmRleF0ubV9wb2x5Z29uID0gdGhp
czsKLSAgICAgICAgbV9lZGdlc1tlZGdlSW5kZXhdLm1fdmVydGV4SW5kZXgxID0gdmVydGV4SW5k
ZXgxOwotICAgICAgICBtX2VkZ2VzW2VkZ2VJbmRleF0ubV92ZXJ0ZXhJbmRleDIgPSB2ZXJ0ZXhJ
bmRleDI7Ci0gICAgICAgIG1fZWRnZXNbZWRnZUluZGV4XS5tX2VkZ2VJbmRleCA9IGVkZ2VJbmRl
eDsKLSAgICAgICAgKytlZGdlSW5kZXg7Ci0gICAgICAgIHZlcnRleEluZGV4MSA9IHZlcnRleElu
ZGV4MjsKLSAgICB9IHdoaWxlICh2ZXJ0ZXhJbmRleDEpOwotCi0gICAgaWYgKGVkZ2VJbmRleCA+
IDMpIHsKLSAgICAgICAgY29uc3QgRXhjbHVzaW9uUG9seWdvbkVkZ2UmIGZpcnN0RWRnZSA9IG1f
ZWRnZXNbMF07Ci0gICAgICAgIGNvbnN0IEV4Y2x1c2lvblBvbHlnb25FZGdlJiBsYXN0RWRnZSA9
IG1fZWRnZXNbZWRnZUluZGV4IC0gMV07Ci0gICAgICAgIGlmIChhcmVDb2xsaW5lYXJQb2ludHMo
bGFzdEVkZ2UudmVydGV4MSgpLCBsYXN0RWRnZS52ZXJ0ZXgyKCksIGZpcnN0RWRnZS52ZXJ0ZXgy
KCkpKSB7Ci0gICAgICAgICAgICBtX2VkZ2VzWzBdLm1fdmVydGV4SW5kZXgxID0gbGFzdEVkZ2Uu
bV92ZXJ0ZXhJbmRleDE7Ci0gICAgICAgICAgICBlZGdlSW5kZXgtLTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIG1fZWRnZXMucmVzaXplKGVkZ2VJbmRleCk7Ci0gICAgbV9lbXB0eSA9IG1fZWRn
ZXMuc2l6ZSgpIDwgMzsKLQotICAgIGlmIChtX2VtcHR5KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9lZGdlcy5zaXplKCk7ICsraSkgewotICAgICAg
ICBFeGNsdXNpb25Qb2x5Z29uRWRnZSogZWRnZSA9ICZtX2VkZ2VzW2ldOwotICAgICAgICBtX2Vk
Z2VUcmVlLmFkZChFZGdlSW50ZXJ2YWwoZWRnZS0+bWluWSgpLCBlZGdlLT5tYXhZKCksIGVkZ2Up
KTsKLSAgICB9CisgICAgcmV0dXJuICgocG9pbnQueCgpIC0gdmVydGV4MS54KCkpICogKHZlcnRl
eDIueSgpIC0gdmVydGV4MS55KCkpKSAtICgodmVydGV4Mi54KCkgLSB2ZXJ0ZXgxLngoKSkgKiAo
cG9pbnQueSgpIC0gdmVydGV4MS55KCkpKTsKIH0KIAotc3RhdGljIGJvb2wgY29tcHV0ZVhJbnRl
cnNlY3Rpb24oY29uc3QgRXhjbHVzaW9uUG9seWdvbkVkZ2UqIGVkZ2VQb2ludGVyLCBmbG9hdCB5
LCBFZGdlSW50ZXJzZWN0aW9uJiByZXN1bHQpCitzdGF0aWMgYm9vbCBjb21wdXRlWEludGVyc2Vj
dGlvbihjb25zdCBGbG9hdFBvbHlnb25FZGdlKiBlZGdlUG9pbnRlciwgZmxvYXQgeSwgRWRnZUlu
dGVyc2VjdGlvbiYgcmVzdWx0KQogewotICAgIGNvbnN0IEV4Y2x1c2lvblBvbHlnb25FZGdlJiBl
ZGdlID0gKmVkZ2VQb2ludGVyOworICAgIGNvbnN0IEZsb2F0UG9seWdvbkVkZ2UmIGVkZ2UgPSAq
ZWRnZVBvaW50ZXI7CiAKICAgICBpZiAoZWRnZS5taW5ZKCkgPiB5IHx8IGVkZ2UubWF4WSgpIDwg
eSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTkyLDggKzkzLDggQEAgc3RhdGljIGlubGlu
ZSBib29sIGdldFZlcnRleEludGVyc2VjdGlvblZlcnRpY2VzKGNvbnN0IEVkZ2VJbnRlcnNlY3Rp
b24mIGludGVyc2UKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgQVNTRVJUKGludGVyc2Vj
dGlvbi5lZGdlICYmIGludGVyc2VjdGlvbi5lZGdlLT5wb2x5Z29uKCkpOwotICAgIGNvbnN0IEV4
Y2x1c2lvblBvbHlnb24mIHBvbHlnb24gPSAqKGludGVyc2VjdGlvbi5lZGdlLT5wb2x5Z29uKCkp
OwotICAgIGNvbnN0IEV4Y2x1c2lvblBvbHlnb25FZGdlJiB0aGlzRWRnZSA9ICooaW50ZXJzZWN0
aW9uLmVkZ2UpOworICAgIGNvbnN0IEZsb2F0UG9seWdvbiYgcG9seWdvbiA9ICooaW50ZXJzZWN0
aW9uLmVkZ2UtPnBvbHlnb24oKSk7CisgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgdGhpc0Vk
Z2UgPSAqKGludGVyc2VjdGlvbi5lZGdlKTsKIAogICAgIGlmICgoaW50ZXJzZWN0aW9uLnR5cGUg
PT0gVmVydGV4TWluWSAmJiAodGhpc0VkZ2UudmVydGV4MSgpLnkoKSA8IHRoaXNFZGdlLnZlcnRl
eDIoKS55KCkpKQogICAgICAgICB8fCAoaW50ZXJzZWN0aW9uLnR5cGUgPT0gVmVydGV4TWF4WSAm
JiAodGhpc0VkZ2UudmVydGV4MSgpLnkoKSA+IHRoaXNFZGdlLnZlcnRleDIoKS55KCkpKSkgewpA
QCAtMjI2LDE4ICsxMjcsMTkgQEAgc3RhdGljIGJvb2wgY29tcGFyZUVkZ2VJbnRlcnNlY3Rpb25Y
KGNvbnN0IEVkZ2VJbnRlcnNlY3Rpb24mIGludGVyc2VjdGlvbjEsIGNvbnMKICAgICByZXR1cm4g
KHgxID09IHgyKSA/IGludGVyc2VjdGlvbjEudHlwZSA8IGludGVyc2VjdGlvbjIudHlwZSA6IHgx
IDwgeDI7CiB9CiAKLXZvaWQgRXhjbHVzaW9uUG9seWdvbjo6Y29tcHV0ZVhJbnRlcnNlY3Rpb25z
KGZsb2F0IHksIGJvb2wgaXNNaW5ZLCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JiByZXN1bHQp
IGNvbnN0CitzdGF0aWMgdm9pZCBjb21wdXRlWEludGVyc2VjdGlvbnMoY29uc3QgRmxvYXRQb2x5
Z29uJiBwb2x5Z29uLCBmbG9hdCB5LCBib29sIGlzTWluWSwgVmVjdG9yPEV4Y2x1c2lvbkludGVy
dmFsPiYgcmVzdWx0KQogewotICAgIFZlY3RvcjxFeGNsdXNpb25Qb2x5Z29uOjpFZGdlSW50ZXJ2
YWw+IG92ZXJsYXBwaW5nRWRnZXM7Ci0gICAgbV9lZGdlVHJlZS5hbGxPdmVybGFwcyhFeGNsdXNp
b25Qb2x5Z29uOjpFZGdlSW50ZXJ2YWwoeSwgeSwgMCksIG92ZXJsYXBwaW5nRWRnZXMpOworICAg
IFZlY3Rvcjxjb25zdCBGbG9hdFBvbHlnb25FZGdlKj4gZWRnZXM7CisgICAgaWYgKCFwb2x5Z29u
Lm92ZXJsYXBwaW5nRWRnZXMoeSwgeSwgZWRnZXMpKQorICAgICAgICByZXR1cm47CiAKICAgICBW
ZWN0b3I8RWRnZUludGVyc2VjdGlvbj4gaW50ZXJzZWN0aW9uczsKICAgICBFZGdlSW50ZXJzZWN0
aW9uIGludGVyc2VjdGlvbjsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb3ZlcmxhcHBp
bmdFZGdlcy5zaXplKCk7ICsraSkgewotICAgICAgICBFeGNsdXNpb25Qb2x5Z29uRWRnZSogZWRn
ZSA9IHN0YXRpY19jYXN0PEV4Y2x1c2lvblBvbHlnb25FZGdlKj4ob3ZlcmxhcHBpbmdFZGdlc1tp
XS5kYXRhKCkpOwotICAgICAgICBpZiAoY29tcHV0ZVhJbnRlcnNlY3Rpb24oZWRnZSwgeSwgaW50
ZXJzZWN0aW9uKSAmJiBpbnRlcnNlY3Rpb24udHlwZSAhPSBWZXJ0ZXhZQm90aCkKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZWRnZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGNv
bXB1dGVYSW50ZXJzZWN0aW9uKGVkZ2VzW2ldLCB5LCBpbnRlcnNlY3Rpb24pICYmIGludGVyc2Vj
dGlvbi50eXBlICE9IFZlcnRleFlCb3RoKQogICAgICAgICAgICAgaW50ZXJzZWN0aW9ucy5hcHBl
bmQoaW50ZXJzZWN0aW9uKTsKICAgICB9CisKICAgICBpZiAoaW50ZXJzZWN0aW9ucy5zaXplKCkg
PCAyKQogICAgICAgICByZXR1cm47CiAKQEAgLTI2MywxMCArMTY1LDEwIEBAIHZvaWQgRXhjbHVz
aW9uUG9seWdvbjo6Y29tcHV0ZVhJbnRlcnNlY3Rpb25zKGZsb2F0IHksIGJvb2wgaXNNaW5ZLCBW
ZWN0b3I8RXhjbHVzCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBjb25zdCBF
eGNsdXNpb25Qb2x5Z29uRWRnZSYgdGhpc0VkZ2UgPSAqdGhpc0ludGVyc2VjdGlvbi5lZGdlOwor
ICAgICAgICBjb25zdCBGbG9hdFBvbHlnb25FZGdlJiB0aGlzRWRnZSA9ICp0aGlzSW50ZXJzZWN0
aW9uLmVkZ2U7CiAgICAgICAgIGJvb2wgZXZlbk9kZENyb3NzaW5nID0gIXdpbmRDb3VudDsKIAot
ICAgICAgICBpZiAoZmlsbFJ1bGUoKSA9PSBSVUxFX0VWRU5PREQpIHsKKyAgICAgICAgaWYgKHBv
bHlnb24uZmlsbFJ1bGUoKSA9PSBSVUxFX0VWRU5PREQpIHsKICAgICAgICAgICAgIHdpbmRDb3Vu
dCArPSAodGhpc0VkZ2UudmVydGV4MigpLnkoKSA+IHRoaXNFZGdlLnZlcnRleDEoKS55KCkpID8g
MSA6IC0xOwogICAgICAgICAgICAgZXZlbk9kZENyb3NzaW5nID0gZXZlbk9kZENyb3NzaW5nIHx8
ICF3aW5kQ291bnQ7CiAgICAgICAgIH0KQEAgLTI5NSwxNSArMTk3LDE1IEBAIHZvaWQgRXhjbHVz
aW9uUG9seWdvbjo6Y29tcHV0ZVhJbnRlcnNlY3Rpb25zKGZsb2F0IHksIGJvb2wgaXNNaW5ZLCBW
ZWN0b3I8RXhjbHVzCiAgICAgfQogfQogCi0vLyBSZXR1cm4gdGhlIFggcHJvamVjdGlvbnMgb2Yg
dGhlIGVkZ2VzIHRoYXQgb3ZlcmxhcCB5MSx5Mi4KLXZvaWQgRXhjbHVzaW9uUG9seWdvbjo6Y29t
cHV0ZUVkZ2VJbnRlcnNlY3Rpb25zKGZsb2F0IHkxLCBmbG9hdCB5MiwgVmVjdG9yPEV4Y2x1c2lv
bkludGVydmFsPiYgcmVzdWx0KSBjb25zdAorc3RhdGljIHZvaWQgY29tcHV0ZU92ZXJsYXBwaW5n
RWRnZVhQcm9qZWN0aW9ucyhjb25zdCBGbG9hdFBvbHlnb24mIHBvbHlnb24sIGZsb2F0IHkxLCBm
bG9hdCB5MiwgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiYgcmVzdWx0KQogewotICAgIFZlY3Rv
cjxFeGNsdXNpb25Qb2x5Z29uOjpFZGdlSW50ZXJ2YWw+IG92ZXJsYXBwaW5nRWRnZXM7Ci0gICAg
bV9lZGdlVHJlZS5hbGxPdmVybGFwcyhFeGNsdXNpb25Qb2x5Z29uOjpFZGdlSW50ZXJ2YWwoeTEs
IHkyLCAwKSwgb3ZlcmxhcHBpbmdFZGdlcyk7CisgICAgVmVjdG9yPGNvbnN0IEZsb2F0UG9seWdv
bkVkZ2UqPiBlZGdlczsKKyAgICBpZiAoIXBvbHlnb24ub3ZlcmxhcHBpbmdFZGdlcyh5MSwgeTIs
IGVkZ2VzKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgRWRnZUludGVyc2VjdGlvbiBpbnRlcnNl
Y3Rpb247Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG92ZXJsYXBwaW5nRWRnZXMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgRXhjbHVzaW9uUG9seWdvbkVkZ2UgKmVkZ2UgPSBz
dGF0aWNfY2FzdDxFeGNsdXNpb25Qb2x5Z29uRWRnZSo+KG92ZXJsYXBwaW5nRWRnZXNbaV0uZGF0
YSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWRnZXMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSAqZWRnZSA9IGVkZ2VzW2ldOwogICAgICAg
ICBmbG9hdCB4MTsKICAgICAgICAgZmxvYXQgeDI7CiAKQEAgLTMzOCwxNCArMjQwLDE0IEBAIHZv
aWQgRXhjbHVzaW9uUG9seWdvbjo6Z2V0RXhjbHVkZWRJbnRlcnZhbHMoZmxvYXQgbG9naWNhbFRv
cCwgZmxvYXQgbG9naWNhbEhlaWdoCiAgICAgZmxvYXQgeTIgPSB5MSArIGxvZ2ljYWxIZWlnaHQ7
CiAKICAgICBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+IHkxWEludGVydmFscywgeTJYSW50ZXJ2
YWxzOwotICAgIGNvbXB1dGVYSW50ZXJzZWN0aW9ucyh5MSwgdHJ1ZSwgeTFYSW50ZXJ2YWxzKTsK
LSAgICBjb21wdXRlWEludGVyc2VjdGlvbnMoeTIsIGZhbHNlLCB5MlhJbnRlcnZhbHMpOworICAg
IGNvbXB1dGVYSW50ZXJzZWN0aW9ucyhtX3BvbHlnb24sIHkxLCB0cnVlLCB5MVhJbnRlcnZhbHMp
OworICAgIGNvbXB1dGVYSW50ZXJzZWN0aW9ucyhtX3BvbHlnb24sIHkyLCBmYWxzZSwgeTJYSW50
ZXJ2YWxzKTsKIAogICAgIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4gbWVyZ2VkSW50ZXJ2YWxz
OwogICAgIG1lcmdlRXhjbHVzaW9uSW50ZXJ2YWxzKHkxWEludGVydmFscywgeTJYSW50ZXJ2YWxz
LCBtZXJnZWRJbnRlcnZhbHMpOwogCiAgICAgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFsPiBlZGdl
SW50ZXJ2YWxzOwotICAgIGNvbXB1dGVFZGdlSW50ZXJzZWN0aW9ucyh5MSwgeTIsIGVkZ2VJbnRl
cnZhbHMpOworICAgIGNvbXB1dGVPdmVybGFwcGluZ0VkZ2VYUHJvamVjdGlvbnMobV9wb2x5Z29u
LCB5MSwgeTIsIGVkZ2VJbnRlcnZhbHMpOwogCiAgICAgVmVjdG9yPEV4Y2x1c2lvbkludGVydmFs
PiBleGNsdWRlZEludGVydmFsczsKICAgICBtZXJnZUV4Y2x1c2lvbkludGVydmFscyhtZXJnZWRJ
bnRlcnZhbHMsIGVkZ2VJbnRlcnZhbHMsIGV4Y2x1ZGVkSW50ZXJ2YWxzKTsKQEAgLTM2NSwxNCAr
MjY3LDE0IEBAIHZvaWQgRXhjbHVzaW9uUG9seWdvbjo6Z2V0SW5jbHVkZWRJbnRlcnZhbHMoZmxv
YXQgbG9naWNhbFRvcCwgZmxvYXQgbG9naWNhbEhlaWdoCiAgICAgZmxvYXQgeTIgPSB5MSArIGxv
Z2ljYWxIZWlnaHQ7CiAKICAgICBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+IHkxWEludGVydmFs
cywgeTJYSW50ZXJ2YWxzOwotICAgIGNvbXB1dGVYSW50ZXJzZWN0aW9ucyh5MSwgdHJ1ZSwgeTFY
SW50ZXJ2YWxzKTsKLSAgICBjb21wdXRlWEludGVyc2VjdGlvbnMoeTIsIGZhbHNlLCB5MlhJbnRl
cnZhbHMpOworICAgIGNvbXB1dGVYSW50ZXJzZWN0aW9ucyhtX3BvbHlnb24sIHkxLCB0cnVlLCB5
MVhJbnRlcnZhbHMpOworICAgIGNvbXB1dGVYSW50ZXJzZWN0aW9ucyhtX3BvbHlnb24sIHkyLCBm
YWxzZSwgeTJYSW50ZXJ2YWxzKTsKIAogICAgIFZlY3RvcjxFeGNsdXNpb25JbnRlcnZhbD4gY29t
bW9uSW50ZXJ2YWxzOwogICAgIGludGVyc2VjdEV4Y2x1c2lvbkludGVydmFscyh5MVhJbnRlcnZh
bHMsIHkyWEludGVydmFscywgY29tbW9uSW50ZXJ2YWxzKTsKIAogICAgIFZlY3RvcjxFeGNsdXNp
b25JbnRlcnZhbD4gZWRnZUludGVydmFsczsKLSAgICBjb21wdXRlRWRnZUludGVyc2VjdGlvbnMo
eTEsIHkyLCBlZGdlSW50ZXJ2YWxzKTsKKyAgICBjb21wdXRlT3ZlcmxhcHBpbmdFZGdlWFByb2pl
Y3Rpb25zKG1fcG9seWdvbiwgeTEsIHkyLCBlZGdlSW50ZXJ2YWxzKTsKIAogICAgIFZlY3RvcjxF
eGNsdXNpb25JbnRlcnZhbD4gaW5jbHVkZWRJbnRlcnZhbHM7CiAgICAgc3VidHJhY3RFeGNsdXNp
b25JbnRlcnZhbHMoY29tbW9uSW50ZXJ2YWxzLCBlZGdlSW50ZXJ2YWxzLCBpbmNsdWRlZEludGVy
dmFscyk7CkBAIC0zODMsOTggKzI4NSwxOSBAQCB2b2lkIEV4Y2x1c2lvblBvbHlnb246OmdldElu
Y2x1ZGVkSW50ZXJ2YWxzKGZsb2F0IGxvZ2ljYWxUb3AsIGZsb2F0IGxvZ2ljYWxIZWlnaAogICAg
IH0KIH0KIAotc3RhdGljIGlubGluZSBmbG9hdCBsZWZ0U2lkZShjb25zdCBGbG9hdFBvaW50JiB2
ZXJ0ZXgxLCBjb25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgyLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCkKLXsKLSAgICByZXR1cm4gKChwb2ludC54KCkgLSB2ZXJ0ZXgxLngoKSkgKiAodmVydGV4Mi55
KCkgLSB2ZXJ0ZXgxLnkoKSkpIC0gKCh2ZXJ0ZXgyLngoKSAtIHZlcnRleDEueCgpKSAqIChwb2lu
dC55KCkgLSB2ZXJ0ZXgxLnkoKSkpOwotfQotCi1ib29sIEV4Y2x1c2lvblBvbHlnb246OmNvbnRh
aW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAotewotICAgIGlmICghbV9ib3VuZGlu
Z0JveC5jb250YWlucyhwb2ludCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGludCB3
aW5kaW5nTnVtYmVyID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZF
ZGdlcygpOyArK2kpIHsKLSAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MSA9IGVkZ2VB
dChpKS52ZXJ0ZXgxKCk7Ci0gICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDIgPSBlZGdl
QXQoaSkudmVydGV4MigpOwotICAgICAgICBpZiAoaXNQb2ludE9uTGluZVNlZ21lbnQodmVydGV4
MSwgdmVydGV4MiwgcG9pbnQpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlm
ICh2ZXJ0ZXgyLnkoKSA8IHBvaW50LnkoKSkgewotICAgICAgICAgICAgaWYgKCh2ZXJ0ZXgxLnko
KSA+IHBvaW50LnkoKSkgJiYgKGxlZnRTaWRlKHZlcnRleDEsIHZlcnRleDIsIHBvaW50KSA+IDAp
KQotICAgICAgICAgICAgICAgICsrd2luZGluZ051bWJlcjsKLSAgICAgICAgfSBlbHNlIGlmICh2
ZXJ0ZXgyLnkoKSA+IHBvaW50LnkoKSkgewotICAgICAgICAgICAgaWYgKCh2ZXJ0ZXgxLnkoKSA8
PSBwb2ludC55KCkpICYmIChsZWZ0U2lkZSh2ZXJ0ZXgxLCB2ZXJ0ZXgyLCBwb2ludCkgPCAwKSkK
LSAgICAgICAgICAgICAgICAtLXdpbmRpbmdOdW1iZXI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICByZXR1cm4gd2luZGluZ051bWJlcjsKLX0KLQotYm9vbCBWZXJ0ZXhQYWlyOjpvdmVybGFwc1Jl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdAotewotICAgIGJvb2wgYm91bmRzT3Zlcmxh
cCA9IChtaW5YKCkgPCByZWN0Lm1heFgoKSkgJiYgKG1heFgoKSA+IHJlY3QueCgpKSAmJiAobWlu
WSgpIDwgcmVjdC5tYXhZKCkpICYmIChtYXhZKCkgPiByZWN0LnkoKSk7Ci0gICAgaWYgKCFib3Vu
ZHNPdmVybGFwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmbG9hdCBsZWZ0U2lkZVZh
bHVlc1s0XSA9IHsKLSAgICAgICAgbGVmdFNpZGUodmVydGV4MSgpLCB2ZXJ0ZXgyKCksIHJlY3Qu
bWluWE1pbllDb3JuZXIoKSksCi0gICAgICAgIGxlZnRTaWRlKHZlcnRleDEoKSwgdmVydGV4Migp
LCByZWN0Lm1heFhNaW5ZQ29ybmVyKCkpLAotICAgICAgICBsZWZ0U2lkZSh2ZXJ0ZXgxKCksIHZl
cnRleDIoKSwgcmVjdC5taW5YTWF4WUNvcm5lcigpKSwKLSAgICAgICAgbGVmdFNpZGUodmVydGV4
MSgpLCB2ZXJ0ZXgyKCksIHJlY3QubWF4WE1heFlDb3JuZXIoKSkKLSAgICB9OwotCi0gICAgaW50
IGN1cnJlbnRMZWZ0U2lkZVNpZ24gPSAwOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCA0
OyArK2kpIHsKLSAgICAgICAgaWYgKCFsZWZ0U2lkZVZhbHVlc1tpXSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBpbnQgbGVmdFNpZGVTaWduID0gbGVmdFNpZGVWYWx1ZXNbaV0gPiAw
ID8gMSA6IC0xOwotICAgICAgICBpZiAoIWN1cnJlbnRMZWZ0U2lkZVNpZ24pCi0gICAgICAgICAg
ICBjdXJyZW50TGVmdFNpZGVTaWduID0gbGVmdFNpZGVTaWduOwotICAgICAgICBlbHNlIGlmIChj
dXJyZW50TGVmdFNpZGVTaWduICE9IGxlZnRTaWRlU2lnbikKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQogc3RhdGljIGlubGluZSBib29s
IGlzUmVmbGV4VmVydGV4KGNvbnN0IEZsb2F0UG9pbnQmIHByZXZWZXJ0ZXgsIGNvbnN0IEZsb2F0
UG9pbnQmIHZlcnRleCwgY29uc3QgRmxvYXRQb2ludCYgbmV4dFZlcnRleCkKIHsKICAgICByZXR1
cm4gbGVmdFNpZGUocHJldlZlcnRleCwgbmV4dFZlcnRleCwgdmVydGV4KSA8IDA7CiB9CiAKLWJv
b2wgVmVydGV4UGFpcjo6aW50ZXJzZWN0aW9uKGNvbnN0IFZlcnRleFBhaXImIG90aGVyLCBGbG9h
dFBvaW50JiBwb2ludCkgY29uc3QKLXsKLSAgICAvLyBTZWU6IGh0dHA6Ly9wYXVsYm91cmtlLm5l
dC9nZW9tZXRyeS9wb2ludGxpbmVwbGFuZS8sICJJbnRlcnNlY3Rpb24gcG9pbnQgb2YgdHdvIGxp
bmVzIGluIDIgZGltZW5zaW9ucyIKLQotICAgIGNvbnN0IEZsb2F0U2l6ZSYgdGhpc0RlbHRhID0g
dmVydGV4MigpIC0gdmVydGV4MSgpOwotICAgIGNvbnN0IEZsb2F0U2l6ZSYgb3RoZXJEZWx0YSA9
IG90aGVyLnZlcnRleDIoKSAtIG90aGVyLnZlcnRleDEoKTsKLSAgICBmbG9hdCBkZW5vbWluYXRv
ciA9IGRldGVybWluYW50KHRoaXNEZWx0YSwgb3RoZXJEZWx0YSk7Ci0gICAgaWYgKCFkZW5vbWlu
YXRvcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gVGhlIHR3byBsaW5lIHNlZ21l
bnRzOiAidGhpcyIgdmVydGV4MSx2ZXJ0ZXgyIGFuZCAib3RoZXIiIHZlcnRleDEsdmVydGV4Miwg
aGF2ZSBiZWVuIGRlZmluZWQKLSAgICAvLyBpbiBwYXJhbWV0cmljIGZvcm0uIEVhY2ggcG9pbnQg
b24gdGhlIGxpbmUgc2VnbWVudCBpczogdmVydGV4MSArIHUgKiAodmVydGV4MiAtIHZlcnRleDEp
LAotICAgIC8vIHdoZW4gMCA8PSB1IDw9IDEuIFdlJ3JlIGNvbXB1dGluZyB0aGUgdmFsdWVzIG9m
IHUgZm9yIGVhY2ggbGluZSBhdCB0aGVpciBpbnRlcnNlY3Rpb24gcG9pbnQuCi0KLSAgICBjb25z
dCBGbG9hdFNpemUmIHZlcnRleDFEZWx0YSA9IHZlcnRleDEoKSAtIG90aGVyLnZlcnRleDEoKTsK
LSAgICBmbG9hdCB1VGhpc0xpbmUgPSBkZXRlcm1pbmFudChvdGhlckRlbHRhLCB2ZXJ0ZXgxRGVs
dGEpIC8gZGVub21pbmF0b3I7Ci0gICAgZmxvYXQgdU90aGVyTGluZSA9IGRldGVybWluYW50KHRo
aXNEZWx0YSwgdmVydGV4MURlbHRhKSAvIGRlbm9taW5hdG9yOwotCi0gICAgaWYgKHVUaGlzTGlu
ZSA8IDAgfHwgdU90aGVyTGluZSA8IDAgfHwgdVRoaXNMaW5lID4gMSB8fCB1T3RoZXJMaW5lID4g
MSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcG9pbnQgPSB2ZXJ0ZXgxKCkgKyB1VGhp
c0xpbmUgKiB0aGlzRGVsdGE7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRXhjbHVzaW9u
UG9seWdvbjo6Zmlyc3RGaXRSZWN0SW5Qb2x5Z29uKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgdW5z
aWduZWQgb2Zmc2V0RWRnZUluZGV4MSwgdW5zaWduZWQgb2Zmc2V0RWRnZUluZGV4MikgY29uc3QK
K3N0YXRpYyBpbmxpbmUgYm9vbCBmaXJzdEZpdFJlY3RJblBvbHlnb24oY29uc3QgRmxvYXRQb2x5
Z29uJiBwb2x5Z29uLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIHVuc2lnbmVkIG9mZnNldEVkZ2VJ
bmRleDEsIHVuc2lnbmVkIG9mZnNldEVkZ2VJbmRleDIpCiB7Ci0gICAgVmVjdG9yPEV4Y2x1c2lv
blBvbHlnb246OkVkZ2VJbnRlcnZhbD4gb3ZlcmxhcHBpbmdFZGdlczsKLSAgICBtX2VkZ2VUcmVl
LmFsbE92ZXJsYXBzKEV4Y2x1c2lvblBvbHlnb246OkVkZ2VJbnRlcnZhbChyZWN0LnkoKSwgcmVj
dC5tYXhZKCksIDApLCBvdmVybGFwcGluZ0VkZ2VzKTsKKyAgICBWZWN0b3I8Y29uc3QgRmxvYXRQ
b2x5Z29uRWRnZSo+IGVkZ2VzOworICAgIGlmICghcG9seWdvbi5vdmVybGFwcGluZ0VkZ2VzKHJl
Y3QueSgpLCByZWN0Lm1heFkoKSwgZWRnZXMpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvdmVybGFwcGluZ0VkZ2VzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIGNvbnN0IEV4Y2x1c2lvblBvbHlnb25FZGdlKiBlZGdlID0gc3RhdGljX2Nhc3Q8
RXhjbHVzaW9uUG9seWdvbkVkZ2UqPihvdmVybGFwcGluZ0VkZ2VzW2ldLmRhdGEoKSk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVkZ2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNv
bnN0IEZsb2F0UG9seWdvbkVkZ2UqIGVkZ2UgPSBlZGdlc1tpXTsKICAgICAgICAgaWYgKGVkZ2Ut
PmVkZ2VJbmRleCgpICE9IG9mZnNldEVkZ2VJbmRleDEgJiYgZWRnZS0+ZWRnZUluZGV4KCkgIT0g
b2Zmc2V0RWRnZUluZGV4MiAmJiBlZGdlLT5vdmVybGFwc1JlY3QocmVjdCkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtNDkzLDI0ICszMTYsMjUgQEAgc3RhdGljIGlubGlu
ZSBib29sIGFib3ZlT3JUb1RoZUxlZnQoY29uc3QgRmxvYXRSZWN0JiByMSwgY29uc3QgRmxvYXRS
ZWN0JiByMikKIAogYm9vbCBFeGNsdXNpb25Qb2x5Z29uOjpmaXJzdEluY2x1ZGVkSW50ZXJ2YWxM
b2dpY2FsVG9wKGZsb2F0IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwgY29uc3QgRmxvYXRTaXplJiBt
aW5Mb2dpY2FsSW50ZXJ2YWxTaXplLCBmbG9hdCYgcmVzdWx0KSBjb25zdAogewotICAgIGlmICht
aW5Mb2dpY2FsSW50ZXJ2YWxTaXplLndpZHRoKCkgPiBtX2JvdW5kaW5nQm94LndpZHRoKCkpCisg
ICAgY29uc3QgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gbV9wb2x5Z29uLmJvdW5kaW5nQm94KCk7
CisgICAgaWYgKG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUud2lkdGgoKSA+IGJvdW5kaW5nQm94Lndp
ZHRoKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGZsb2F0IG1pblkgPSBzdGQ6Om1h
eChtX2JvdW5kaW5nQm94LnkoKSwgbWluTG9naWNhbEludGVydmFsVG9wKTsKKyAgICBmbG9hdCBt
aW5ZID0gc3RkOjptYXgoYm91bmRpbmdCb3gueSgpLCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3ApOwog
ICAgIGZsb2F0IG1heFkgPSBtaW5ZICsgbWluTG9naWNhbEludGVydmFsU2l6ZS5oZWlnaHQoKTsK
IAotICAgIGlmIChtYXhZID4gbV9ib3VuZGluZ0JveC5tYXhZKCkpCisgICAgaWYgKG1heFkgPiBi
b3VuZGluZ0JveC5tYXhZKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFZlY3RvcjxF
eGNsdXNpb25Qb2x5Z29uOjpFZGdlSW50ZXJ2YWw+IG92ZXJsYXBwaW5nRWRnZXM7Ci0gICAgbV9l
ZGdlVHJlZS5hbGxPdmVybGFwcyhFeGNsdXNpb25Qb2x5Z29uOjpFZGdlSW50ZXJ2YWwobWluTG9n
aWNhbEludGVydmFsVG9wLCBtX2JvdW5kaW5nQm94Lm1heFkoKSwgMCksIG92ZXJsYXBwaW5nRWRn
ZXMpOworICAgIFZlY3Rvcjxjb25zdCBGbG9hdFBvbHlnb25FZGdlKj4gZWRnZXM7CisgICAgbV9w
b2x5Z29uLm92ZXJsYXBwaW5nRWRnZXMobWluTG9naWNhbEludGVydmFsVG9wLCBib3VuZGluZ0Jv
eC5tYXhZKCksIGVkZ2VzKTsKIAogICAgIGZsb2F0IGR4ID0gbWluTG9naWNhbEludGVydmFsU2l6
ZS53aWR0aCgpIC8gMjsKICAgICBmbG9hdCBkeSA9IG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUuaGVp
Z2h0KCkgLyAyOwogICAgIFZlY3RvcjxPZmZzZXRQb2x5Z29uRWRnZT4gb2Zmc2V0RWRnZXM7CiAK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb3ZlcmxhcHBpbmdFZGdlcy5zaXplKCk7ICsr
aSkgewotICAgICAgICBjb25zdCBFeGNsdXNpb25Qb2x5Z29uRWRnZSYgZWRnZSA9ICpzdGF0aWNf
Y2FzdDxFeGNsdXNpb25Qb2x5Z29uRWRnZSo+KG92ZXJsYXBwaW5nRWRnZXNbaV0uZGF0YSgpKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWRnZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgZWRnZSA9ICooZWRnZXNbaV0pOwogICAgICAgICBj
b25zdCBGbG9hdFBvaW50JiB2ZXJ0ZXgwID0gZWRnZS5wcmV2aW91c0VkZ2UoKS52ZXJ0ZXgxKCk7
CiAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHZlcnRleDEgPSBlZGdlLnZlcnRleDEoKTsKICAg
ICAgICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MiA9IGVkZ2UudmVydGV4MigpOwpAQCAtNTQw
LDcgKzM2NCw3IEBAIGJvb2wgRXhjbHVzaW9uUG9seWdvbjo6Zmlyc3RJbmNsdWRlZEludGVydmFs
TG9naWNhbFRvcChmbG9hdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUCiAgICAgICAgICAgICAgICAgb2Zm
c2V0RWRnZXMuYXBwZW5kKG9mZnNldEVkZ2VCdWZmZXJbal0pOwogICAgIH0KIAotICAgIG9mZnNl
dEVkZ2VzLmFwcGVuZChPZmZzZXRQb2x5Z29uRWRnZSgqdGhpcywgbWluTG9naWNhbEludGVydmFs
VG9wLCBGbG9hdFNpemUoMCwgZHkpKSk7CisgICAgb2Zmc2V0RWRnZXMuYXBwZW5kKE9mZnNldFBv
bHlnb25FZGdlKG1fcG9seWdvbiwgbWluTG9naWNhbEludGVydmFsVG9wLCBGbG9hdFNpemUoMCwg
ZHkpKSk7CiAKICAgICBGbG9hdFBvaW50IG9mZnNldEVkZ2VzSW50ZXJzZWN0aW9uOwogICAgIEZs
b2F0UmVjdCBmaXJzdEZpdFJlY3Q7CkBAIC01NTMsOCArMzc3LDggQEAgYm9vbCBFeGNsdXNpb25Q
b2x5Z29uOjpmaXJzdEluY2x1ZGVkSW50ZXJ2YWxMb2dpY2FsVG9wKGZsb2F0IG1pbkxvZ2ljYWxJ
bnRlcnZhbFQKICAgICAgICAgICAgICAgICBGbG9hdFJlY3QgcG90ZW50aWFsRmlyc3RGaXRSZWN0
KHBvdGVudGlhbEZpcnN0Rml0TG9jYXRpb24sIG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUpOwogICAg
ICAgICAgICAgICAgIGlmICgocG90ZW50aWFsRmlyc3RGaXRMb2NhdGlvbi55KCkgPj0gbWluTG9n
aWNhbEludGVydmFsVG9wKQogICAgICAgICAgICAgICAgICAgICAmJiAoIWZpcnN0Rml0Rm91bmQg
fHwgYWJvdmVPclRvVGhlTGVmdChwb3RlbnRpYWxGaXJzdEZpdFJlY3QsIGZpcnN0Rml0UmVjdCkp
Ci0gICAgICAgICAgICAgICAgICAgICYmIGNvbnRhaW5zKG9mZnNldEVkZ2VzSW50ZXJzZWN0aW9u
KQotICAgICAgICAgICAgICAgICAgICAmJiBmaXJzdEZpdFJlY3RJblBvbHlnb24ocG90ZW50aWFs
Rmlyc3RGaXRSZWN0LCBvZmZzZXRFZGdlc1tpXS5lZGdlSW5kZXgoKSwgb2Zmc2V0RWRnZXNbal0u
ZWRnZUluZGV4KCkpKSB7CisgICAgICAgICAgICAgICAgICAgICYmIG1fcG9seWdvbi5jb250YWlu
cyhvZmZzZXRFZGdlc0ludGVyc2VjdGlvbikKKyAgICAgICAgICAgICAgICAgICAgJiYgZmlyc3RG
aXRSZWN0SW5Qb2x5Z29uKG1fcG9seWdvbiwgcG90ZW50aWFsRmlyc3RGaXRSZWN0LCBvZmZzZXRF
ZGdlc1tpXS5lZGdlSW5kZXgoKSwgb2Zmc2V0RWRnZXNbal0uZWRnZUluZGV4KCkpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGZpcnN0Rml0Rm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAg
ICBmaXJzdEZpdFJlY3QgPSBwb3RlbnRpYWxGaXJzdEZpdFJlY3Q7CiAgICAgICAgICAgICAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1c2lvblBvbHlnb24u
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FeGNsdXNpb25Qb2x5Z29uLmgKaW5kZXggNjJl
MTk3MS4uMjMzMmVlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0V4Y2x1
c2lvblBvbHlnb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRXhjbHVzaW9uUG9s
eWdvbi5oCkBAIC0zMiwxMzMgKzMyLDEzIEBACiAKICNpbmNsdWRlICJFeGNsdXNpb25JbnRlcnZh
bC5oIgogI2luY2x1ZGUgIkV4Y2x1c2lvblNoYXBlLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5o
IgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIlBPREludGVydmFsVHJlZS5oIgot
I2luY2x1ZGUgIldpbmRSdWxlLmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSAiRmxvYXRQb2x5Z29uLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY2xhc3MgRXhjbHVzaW9uUG9seWdvbkVkZ2U7Ci0KLS8vIFRoaXMgY2xhc3Mg
aXMgdXNlZCBieSBQT0RJbnRlcnZhbFRyZWUgZm9yIGRlYnVnZ2luZy4KLSNpZm5kZWYgTkRFQlVH
Ci10ZW1wbGF0ZSA8Y2xhc3M+IHN0cnVjdCBWYWx1ZVRvU3RyaW5nOwotI2VuZGlmCi0KLWNsYXNz
IEV4Y2x1c2lvblBvbHlnb24gOiBwdWJsaWMgRXhjbHVzaW9uU2hhcGUgewotICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEV4Y2x1c2lvblBvbHlnb24pOwotcHVibGljOgotICAgIEV4Y2x1c2lvblBv
bHlnb24oUGFzc093blB0cjxWZWN0b3I8RmxvYXRQb2ludD4gPiB2ZXJ0aWNlcywgV2luZFJ1bGUg
ZmlsbFJ1bGUpOwotCi0gICAgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4QXQodW5zaWduZWQgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuICgqbV92ZXJ0aWNlcylbaW5kZXhdOyB9Ci0gICAgdW5zaWduZWQg
bnVtYmVyT2ZWZXJ0aWNlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGljZXMtPnNpemUoKTsgfQot
ICAgIFdpbmRSdWxlIGZpbGxSdWxlKCkgY29uc3QgeyByZXR1cm4gbV9maWxsUnVsZTsgfQotCi0g
ICAgY29uc3QgRXhjbHVzaW9uUG9seWdvbkVkZ2UmIGVkZ2VBdCh1bnNpZ25lZCBpbmRleCkgY29u
c3QgeyByZXR1cm4gbV9lZGdlc1tpbmRleF07IH0KLSAgICB1bnNpZ25lZCBudW1iZXJPZkVkZ2Vz
KCkgY29uc3QgeyByZXR1cm4gbV9lZGdlcy5zaXplKCk7IH0KLQotICAgIGJvb2wgY29udGFpbnMo
Y29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwotCi0gICAgdmlydHVhbCBGbG9hdFJlY3Qgc2hhcGVM
b2dpY2FsQm91bmRpbmdCb3goKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2JvdW5kaW5nQm94
OyB9Ci0gICAgdmlydHVhbCBib29sIGlzRW1wdHkoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBt
X2VtcHR5OyB9Ci0gICAgdmlydHVhbCB2b2lkIGdldEV4Y2x1ZGVkSW50ZXJ2YWxzKGZsb2F0IGxv
Z2ljYWxUb3AsIGZsb2F0IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0JikgY29uc3QgT1ZFUlJJ
REU7Ci0gICAgdmlydHVhbCB2b2lkIGdldEluY2x1ZGVkSW50ZXJ2YWxzKGZsb2F0IGxvZ2ljYWxU
b3AsIGZsb2F0IGxvZ2ljYWxIZWlnaHQsIFNlZ21lbnRMaXN0JikgY29uc3QgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCBib29sIGZpcnN0SW5jbHVkZWRJbnRlcnZhbExvZ2ljYWxUb3AoZmxvYXQgbWlu
TG9naWNhbEludGVydmFsVG9wLCBjb25zdCBGbG9hdFNpemUmIG1pbkxvZ2ljYWxJbnRlcnZhbFNp
emUsIGZsb2F0JikgY29uc3QgT1ZFUlJJREU7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBjb21wdXRl
WEludGVyc2VjdGlvbnMoZmxvYXQgeSwgYm9vbCBpc01pblksIFZlY3RvcjxFeGNsdXNpb25JbnRl
cnZhbD4mKSBjb25zdDsKLSAgICB2b2lkIGNvbXB1dGVFZGdlSW50ZXJzZWN0aW9ucyhmbG9hdCBt
aW5ZLCBmbG9hdCBtYXhZLCBWZWN0b3I8RXhjbHVzaW9uSW50ZXJ2YWw+JikgY29uc3Q7Ci0gICAg
dW5zaWduZWQgZmluZE5leHRFZGdlVmVydGV4SW5kZXgodW5zaWduZWQgdmVydGV4SW5kZXgxLCBi
b29sIGNsb2Nrd2lzZSkgY29uc3Q7Ci0gICAgYm9vbCBmaXJzdEZpdFJlY3RJblBvbHlnb24oY29u
c3QgRmxvYXRSZWN0JiwgdW5zaWduZWQgb2Zmc2V0RWRnZUluZGV4MSwgdW5zaWduZWQgb2Zmc2V0
RWRnZUluZGV4KSBjb25zdDsKLQotICAgIHR5cGVkZWYgUE9ESW50ZXJ2YWw8ZmxvYXQsIEV4Y2x1
c2lvblBvbHlnb25FZGdlKj4gRWRnZUludGVydmFsOwotICAgIHR5cGVkZWYgUE9ESW50ZXJ2YWxU
cmVlPGZsb2F0LCBFeGNsdXNpb25Qb2x5Z29uRWRnZSo+IEVkZ2VJbnRlcnZhbFRyZWU7Ci0KLSAg
ICBPd25QdHI8VmVjdG9yPEZsb2F0UG9pbnQ+ID4gbV92ZXJ0aWNlczsKLSAgICBXaW5kUnVsZSBt
X2ZpbGxSdWxlOwotICAgIEZsb2F0UmVjdCBtX2JvdW5kaW5nQm94OwotICAgIFZlY3RvcjxFeGNs
dXNpb25Qb2x5Z29uRWRnZT4gbV9lZGdlczsKLSAgICBFZGdlSW50ZXJ2YWxUcmVlIG1fZWRnZVRy
ZWU7Ci0gICAgYm9vbCBtX2VtcHR5OwotfTsKLQotY2xhc3MgVmVydGV4UGFpciB7Ci1wdWJsaWM6
Ci0gICAgdmlydHVhbCB+VmVydGV4UGFpcigpIHsgfQotCi0gICAgdmlydHVhbCBjb25zdCBGbG9h
dFBvaW50JiB2ZXJ0ZXgxKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgY29uc3QgRmxvYXRQb2lu
dCYgdmVydGV4MigpIGNvbnN0ID0gMDsKLQotICAgIGZsb2F0IG1pblgoKSBjb25zdCB7IHJldHVy
biBzdGQ6Om1pbih2ZXJ0ZXgxKCkueCgpLCB2ZXJ0ZXgyKCkueCgpKTsgfQotICAgIGZsb2F0IG1p
blkoKSBjb25zdCB7IHJldHVybiBzdGQ6Om1pbih2ZXJ0ZXgxKCkueSgpLCB2ZXJ0ZXgyKCkueSgp
KTsgfQotICAgIGZsb2F0IG1heFgoKSBjb25zdCB7IHJldHVybiBzdGQ6Om1heCh2ZXJ0ZXgxKCku
eCgpLCB2ZXJ0ZXgyKCkueCgpKTsgfQotICAgIGZsb2F0IG1heFkoKSBjb25zdCB7IHJldHVybiBz
dGQ6Om1heCh2ZXJ0ZXgxKCkueSgpLCB2ZXJ0ZXgyKCkueSgpKTsgfQotCi0gICAgYm9vbCBvdmVy
bGFwc1JlY3QoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7Ci0gICAgYm9vbCBpbnRlcnNlY3Rpb24o
Y29uc3QgVmVydGV4UGFpciYsIEZsb2F0UG9pbnQmKSBjb25zdDsKLX07Ci0KLS8vIEVkZ2VJbnRl
cnZhbFRyZWUgbm9kZXMgc3RvcmUgbWluWSwgbWF4WSwgYW5kIGEgKCJVc2VyRGF0YSIpIHBvaW50
ZXIgdG8gYW4gRXhjbHVzaW9uUG9seWdvbkVkZ2UuIEVkZ2UgdmVydGV4Ci0vLyBpbmRleDEgaXMg
bGVzcyB0aGFuIGluZGV4MiwgZXhjZXB0IHRoZSBsYXN0IGVkZ2UsIHdoZXJlIGluZGV4MiBpcyAw
LiBXaGVuIGEgcG9seWdvbiBlZGdlIGlzIGRlZmluZWQgYnkgMwotLy8gb3IgbW9yZSBjb2xpbmVh
ciB2ZXJ0aWNlcywgaW5kZXgyIGNhbiBiZSB0aGUgdGhlIGluZGV4IG9mIHRoZSBsYXN0IGNvbGlu
ZWFyIHZlcnRleC4KLWNsYXNzIEV4Y2x1c2lvblBvbHlnb25FZGdlIDogcHVibGljIFZlcnRleFBh
aXIgewotICAgIGZyaWVuZCBjbGFzcyBFeGNsdXNpb25Qb2x5Z29uOwotcHVibGljOgotICAgIHZp
cnR1YWwgY29uc3QgRmxvYXRQb2ludCYgdmVydGV4MSgpIGNvbnN0IE9WRVJSSURFCi0gICAgewot
ICAgICAgICBBU1NFUlQobV9wb2x5Z29uKTsKLSAgICAgICAgcmV0dXJuIG1fcG9seWdvbi0+dmVy
dGV4QXQobV92ZXJ0ZXhJbmRleDEpOwotICAgIH0KLQotICAgIHZpcnR1YWwgY29uc3QgRmxvYXRQ
b2ludCYgdmVydGV4MigpIGNvbnN0IE9WRVJSSURFCi0gICAgewotICAgICAgICBBU1NFUlQobV9w
b2x5Z29uKTsKLSAgICAgICAgcmV0dXJuIG1fcG9seWdvbi0+dmVydGV4QXQobV92ZXJ0ZXhJbmRl
eDIpOwotICAgIH0KLQotICAgIGNvbnN0IEV4Y2x1c2lvblBvbHlnb25FZGdlJiBwcmV2aW91c0Vk
Z2UoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fcG9seWdvbiAmJiBtX3BvbHlnb24t
Pm51bWJlck9mRWRnZXMoKSA+IDEpOwotICAgICAgICByZXR1cm4gbV9wb2x5Z29uLT5lZGdlQXQo
KG1fZWRnZUluZGV4ICsgbV9wb2x5Z29uLT5udW1iZXJPZkVkZ2VzKCkgLSAxKSAlIG1fcG9seWdv
bi0+bnVtYmVyT2ZFZGdlcygpKTsKLSAgICB9Ci0KLSAgICBjb25zdCBFeGNsdXNpb25Qb2x5Z29u
RWRnZSYgbmV4dEVkZ2UoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fcG9seWdvbiAm
JiBtX3BvbHlnb24tPm51bWJlck9mRWRnZXMoKSA+IDEpOwotICAgICAgICByZXR1cm4gbV9wb2x5
Z29uLT5lZGdlQXQoKG1fZWRnZUluZGV4ICsgMSkgJSBtX3BvbHlnb24tPm51bWJlck9mRWRnZXMo
KSk7Ci0gICAgfQotCi0gICAgY29uc3QgRXhjbHVzaW9uUG9seWdvbiogcG9seWdvbigpIGNvbnN0
IHsgcmV0dXJuIG1fcG9seWdvbjsgfQotICAgIHVuc2lnbmVkIHZlcnRleEluZGV4MSgpIGNvbnN0
IHsgcmV0dXJuIG1fdmVydGV4SW5kZXgxOyB9Ci0gICAgdW5zaWduZWQgdmVydGV4SW5kZXgyKCkg
Y29uc3QgeyByZXR1cm4gbV92ZXJ0ZXhJbmRleDI7IH0KLSAgICB1bnNpZ25lZCBlZGdlSW5kZXgo
KSBjb25zdCB7IHJldHVybiBtX2VkZ2VJbmRleDsgfQotCi1wcml2YXRlOgotICAgIGNvbnN0IEV4
Y2x1c2lvblBvbHlnb24qIG1fcG9seWdvbjsKLSAgICB1bnNpZ25lZCBtX3ZlcnRleEluZGV4MTsK
LSAgICB1bnNpZ25lZCBtX3ZlcnRleEluZGV4MjsKLSAgICB1bnNpZ25lZCBtX2VkZ2VJbmRleDsK
LX07Ci0KLS8vIFRoZXNlIHN0cnVjdHVyZXMgYXJlIHVzZWQgYnkgUE9ESW50ZXJ2YWxUcmVlIGZv
ciBkZWJ1Z2dpbmcuMQotI2lmbmRlZiBOREVCVUcKLXRlbXBsYXRlIDw+IHN0cnVjdCBWYWx1ZVRv
U3RyaW5nPGZsb2F0PiB7Ci0gICAgc3RhdGljIFN0cmluZyBzdHJpbmcoY29uc3QgZmxvYXQgdmFs
dWUpIHsgcmV0dXJuIFN0cmluZzo6bnVtYmVyKHZhbHVlKTsgfQotfTsKLQotdGVtcGxhdGU8PiBz
dHJ1Y3QgVmFsdWVUb1N0cmluZzxFeGNsdXNpb25Qb2x5Z29uRWRnZSo+IHsKLSAgICBzdGF0aWMg
U3RyaW5nIHN0cmluZyhjb25zdCBFeGNsdXNpb25Qb2x5Z29uRWRnZSogZWRnZSkgeyByZXR1cm4g
U3RyaW5nOjpmb3JtYXQoIiVwICglZiwlZiAlZiwlZikiLCBlZGdlLCBlZGdlLT52ZXJ0ZXgxKCku
eCgpLCBlZGdlLT52ZXJ0ZXgxKCkueSgpLCBlZGdlLT52ZXJ0ZXgyKCkueCgpLCBlZGdlLT52ZXJ0
ZXgyKCkueSgpKTsgfQotfTsKLSNlbmRpZgotCiBjbGFzcyBPZmZzZXRQb2x5Z29uRWRnZSA6IHB1
YmxpYyBWZXJ0ZXhQYWlyIHsKIHB1YmxpYzoKLSAgICBPZmZzZXRQb2x5Z29uRWRnZShjb25zdCBF
eGNsdXNpb25Qb2x5Z29uRWRnZSYgZWRnZSwgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQpCisgICAg
T2Zmc2V0UG9seWdvbkVkZ2UoY29uc3QgRmxvYXRQb2x5Z29uRWRnZSYgZWRnZSwgY29uc3QgRmxv
YXRTaXplJiBvZmZzZXQpCiAgICAgICAgIDogbV92ZXJ0ZXgxKGVkZ2UudmVydGV4MSgpICsgb2Zm
c2V0KQogICAgICAgICAsIG1fdmVydGV4MihlZGdlLnZlcnRleDIoKSArIG9mZnNldCkKICAgICAg
ICAgLCBtX2VkZ2VJbmRleChlZGdlLmVkZ2VJbmRleCgpKQpAQCAtMTcyLDkgKzUyLDkgQEAgcHVi
bGljOgogICAgIHsKICAgICB9CiAKLSAgICBPZmZzZXRQb2x5Z29uRWRnZShjb25zdCBFeGNsdXNp
b25Qb2x5Z29uJiBwb2x5Z29uLCBmbG9hdCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3AsIGNvbnN0IEZs
b2F0U2l6ZSYgb2Zmc2V0KQotICAgICAgICA6IG1fdmVydGV4MShGbG9hdFBvaW50KHBvbHlnb24u
c2hhcGVMb2dpY2FsQm91bmRpbmdCb3goKS54KCksIG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCkgKyBv
ZmZzZXQpCi0gICAgICAgICwgbV92ZXJ0ZXgyKEZsb2F0UG9pbnQocG9seWdvbi5zaGFwZUxvZ2lj
YWxCb3VuZGluZ0JveCgpLm1heFgoKSwgbWluTG9naWNhbEludGVydmFsVG9wKSArIG9mZnNldCkK
KyAgICBPZmZzZXRQb2x5Z29uRWRnZShjb25zdCBGbG9hdFBvbHlnb24mIHBvbHlnb24sIGZsb2F0
IG1pbkxvZ2ljYWxJbnRlcnZhbFRvcCwgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQpCisgICAgICAg
IDogbV92ZXJ0ZXgxKEZsb2F0UG9pbnQocG9seWdvbi5ib3VuZGluZ0JveCgpLngoKSwgbWluTG9n
aWNhbEludGVydmFsVG9wKSArIG9mZnNldCkKKyAgICAgICAgLCBtX3ZlcnRleDIoRmxvYXRQb2lu
dChwb2x5Z29uLmJvdW5kaW5nQm94KCkubWF4WCgpLCBtaW5Mb2dpY2FsSW50ZXJ2YWxUb3ApICsg
b2Zmc2V0KQogICAgICAgICAsIG1fZWRnZUluZGV4KC0xKQogICAgIHsKICAgICB9CkBAIC0xODks
NiArNjksMjUgQEAgcHJpdmF0ZToKICAgICBpbnQgbV9lZGdlSW5kZXg7CiB9OwogCitjbGFzcyBF
eGNsdXNpb25Qb2x5Z29uIDogcHVibGljIEV4Y2x1c2lvblNoYXBlIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShFeGNsdXNpb25Qb2x5Z29uKTsKK3B1YmxpYzoKKyAgICBFeGNsdXNpb25Qb2x5
Z29uKFBhc3NPd25QdHI8VmVjdG9yPEZsb2F0UG9pbnQ+ID4gdmVydGljZXMsIFdpbmRSdWxlIGZp
bGxSdWxlKQorICAgICAgICA6IEV4Y2x1c2lvblNoYXBlKCkKKyAgICAgICAgLCBtX3BvbHlnb24o
dmVydGljZXMsIGZpbGxSdWxlKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIEZsb2F0UmVj
dCBzaGFwZUxvZ2ljYWxCb3VuZGluZ0JveCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fcG9s
eWdvbi5ib3VuZGluZ0JveCgpOyB9CisgICAgdmlydHVhbCBib29sIGlzRW1wdHkoKSBjb25zdCBP
VkVSUklERSB7IHJldHVybiBtX3BvbHlnb24uaXNFbXB0eSgpOyB9CisgICAgdmlydHVhbCB2b2lk
IGdldEV4Y2x1ZGVkSW50ZXJ2YWxzKGZsb2F0IGxvZ2ljYWxUb3AsIGZsb2F0IGxvZ2ljYWxIZWln
aHQsIFNlZ21lbnRMaXN0JikgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGdldElu
Y2x1ZGVkSW50ZXJ2YWxzKGZsb2F0IGxvZ2ljYWxUb3AsIGZsb2F0IGxvZ2ljYWxIZWlnaHQsIFNl
Z21lbnRMaXN0JikgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGZpcnN0SW5jbHVk
ZWRJbnRlcnZhbExvZ2ljYWxUb3AoZmxvYXQgbWluTG9naWNhbEludGVydmFsVG9wLCBjb25zdCBG
bG9hdFNpemUmIG1pbkxvZ2ljYWxJbnRlcnZhbFNpemUsIGZsb2F0JikgY29uc3QgT1ZFUlJJREU7
CisKK3ByaXZhdGU6CisgICAgRmxvYXRQb2x5Z29uIG1fcG9seWdvbjsKK307CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEV4Y2x1c2lvblBvbHlnb25faAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>