<?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>153868</bug_id>
          
          <creation_ts>2016-02-04 08:01:10 -0800</creation_ts>
          <short_desc>[css-grid] GridSpan refactoring</short_desc>
          <delta_ts>2016-02-17 03:45:33 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit 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>153488</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Manuel Rego Casasnovas">rego</reporter>
          <assigned_to name="Manuel Rego Casasnovas">rego</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>jfernandez</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>svillar</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1161983</commentid>
    <comment_count>0</comment_count>
    <who name="Manuel Rego Casasnovas">rego</who>
    <bug_when>2016-02-04 08:01:10 -0800</bug_when>
    <thetext>This is somehow a port of a patch in Blink: https://codereview.chromium.org/1459373002/

It&apos;s not exactly the same, as we were already not using pointers in GridCoordinate in WebKit.
But porting this will help to avoid repeated calls to resolveGridPositionsFromStyle() from RenderGrid.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161985</commentid>
    <comment_count>1</comment_count>
      <attachid>270656</attachid>
    <who name="Manuel Rego Casasnovas">rego</who>
    <bug_when>2016-02-04 08:04:29 -0800</bug_when>
    <thetext>Created attachment 270656
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165556</commentid>
    <comment_count>2</comment_count>
      <attachid>270656</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2016-02-17 01:39:01 -0800</bug_when>
    <thetext>Comment on attachment 270656
Patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        Add new boolean to know if a GridSpan is definite or indefinite.

I was going to complain asking for an enumerated type, but then I saw that you are actually using it. In any case you need to fix this sentence.

&gt; Source/WebCore/rendering/style/GridCoordinate.h:50
&gt; +

Extra line here

&gt; Source/WebCore/rendering/style/GridResolvedPosition.cpp:79
&gt; +    initialPosition = (direction == ForColumns) ? gridItem.style().gridItemColumnStart() : gridItem.style().gridItemRowStart();

Consider doing
bool isRowAxis = direction == ForColumns;

and using that in these two ternary operators (also you don&apos;t need parens).

&gt; Source/WebCore/rendering/style/GridResolvedPosition.cpp:311
&gt; +        // We can&apos;t get our grid positions without running the auto placement algorithm.

You can move the comment out of the if block and remove the brackets.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165558</commentid>
    <comment_count>3</comment_count>
      <attachid>271549</attachid>
    <who name="Manuel Rego Casasnovas">rego</who>
    <bug_when>2016-02-17 02:54:31 -0800</bug_when>
    <thetext>Created attachment 271549
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165559</commentid>
    <comment_count>4</comment_count>
    <who name="Manuel Rego Casasnovas">rego</who>
    <bug_when>2016-02-17 02:55:38 -0800</bug_when>
    <thetext>Thanks for the review, applied suggested changes!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165560</commentid>
    <comment_count>5</comment_count>
      <attachid>271549</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-17 03:45:29 -0800</bug_when>
    <thetext>Comment on attachment 271549
Patch

Clearing flags on attachment: 271549

Committed r196691: &lt;http://trac.webkit.org/changeset/196691&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165561</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-17 03:45:33 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270656</attachid>
            <date>2016-02-04 08:04:29 -0800</date>
            <delta_ts>2016-02-17 02:54:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-153868-20160204170404.patch</filename>
            <type>text/plain</type>
            <size>51717</size>
            <attacher name="Manuel Rego Casasnovas">rego</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk1ODA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTJjODI1Nzk5YWE4YWVk
NDY2ZDBjNjI4NTVkYzc5NzgyNjMwN2E3Zi4uMjZlMGY4OTNlYWFkYmZkZjU5OThkMTNhOWM5YWRl
M2MxZThmYWI1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc3IEBACisyMDE2LTAyLTA0ICBNYW51
ZWwgUmVnbyBDYXNhc25vdmFzICA8cmVnb0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtjc3MtZ3Jp
ZF0gR3JpZFNwYW4gcmVmYWN0b3JpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1Mzg2OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZCBuZXcgYm9vbGVhbiB0byBrbm93IGlmIGEgR3JpZFNwYW4gaXMg
ZGVmaW5pdGUgb3IgaW5kZWZpbml0ZS4KKyAgICAgICAgVGhhdCB3YXkgd2UgZG9uJ3QgbmVlZCBH
cmlkVW5yZXNvbHZlZFNwYW4gY2xhc3MgKHdoaWNoIGlzIHJlbW92ZWQpLgorICAgICAgICBXZSBj
YW4gYWx3YXlzIGhhdmUgdHdvIEdyaWRTcGFucyBpbiBHcmlkQ29vcmRpbmF0ZSwKKyAgICAgICAg
aWYgdGhlIHBvc2l0aW9uIGlzICJhdXRvIiB0aGUgR3JpZFNwYW4gd2lsbCBiZSBtYXJrZWQgYXMg
aW5kZWZpbml0ZS4KKyAgICAgICAgVGhpcyB3aWxsIGFsbG93IGluIGEgZm9sbG93LXVwIHBhdGNo
IHRvIGF2b2lkIHJlcGVhdGVkIGNhbGxzCisgICAgICAgIHRvIG1ldGhvZHMgdGhhdCByZXNvbHZl
IHBvc2l0aW9ucy4KKworICAgICAgICBNb3N0IG9wZXJhdGlvbnMgaW4gR3JpZFNwYW4gYXJlIHJl
c3RyaWN0ZWQgdG8gZGVmaW5pdGUgR3JpZFNwYW5zIChhY2Nlc3MKKyAgICAgICAgdG8gcG9zaXRp
b25zLCBpdGVyYXRvciwgZXRjLikuIEZvciBpbmRlZmluaXRlIEdyaWRTcGFucyB3ZSBvbmx5IG5l
ZWQgdG8KKyAgICAgICAga25vdyB0aGF0IHRoZXkncmUgaW5kZWZpbml0ZSwgd2Ugc2hvdWxkbid0
IHVzZSB0aGUgcmVzdCBvZiB0aGUgZGF0YS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGNo
YW5nZSBvZiBiZWhhdmlvci4KKworICAgICAgICAqIGNzcy9DU1NHcmlkVGVtcGxhdGVBcmVhc1Zh
bHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN0cmluZ0ZvclBvc2l0aW9uKToKKyAgICAgICAg
KiBjc3MvQ1NTUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VH
cmlkVGVtcGxhdGVBcmVhc1Jvdyk6CisgICAgICAgICogY3NzL1N0eWxlQnVpbGRlckNvbnZlcnRl
ci5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjcmVhdGVJbXBs
aWNpdE5hbWVkR3JpZExpbmVzRnJvbUdyaWRBcmVhKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyR3JpZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpHcmlkSXRlcmF0b3I6
Om5leHRFbXB0eUdyaWRBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OmNvbXB1
dGVVc2VkQnJlYWR0aE9mR3JpZFRyYWNrcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlk
OjpyZXNvbHZlQ29udGVudEJhc2VkVHJhY2tTaXppbmdGdW5jdGlvbnNGb3JOb25TcGFubmluZ0l0
ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6Omluc2VydEl0ZW1JbnRvR3JpZCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpwbGFjZUl0ZW1zT25HcmlkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OnBvcHVsYXRlRXhwbGljaXRHcmlkQW5kT3JkZXJJdGVy
YXRvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpwbGFjZVNwZWNpZmllZE1ham9y
QXhpc0l0ZW1zT25HcmlkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OnBsYWNlQXV0
b01ham9yQXhpc0l0ZW1PbkdyaWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6b2Zm
c2V0QW5kQnJlYWR0aEZvclBvc2l0aW9uZWRDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJHcmlkOjpncmlkQXJlYUJyZWFkdGhGb3JDaGlsZEluY2x1ZGluZ0FsaWdubWVudE9mZnNldHMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6Y29sdW1uQXhpc09mZnNldEZvckNoaWxk
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OnJvd0F4aXNPZmZzZXRGb3JDaGlsZCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpwbGFjZUF1dG9NYWpvckF4aXNJdGVtc09u
R3JpZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjphdXRvUGxhY2Vt
ZW50TWlub3JBeGlzRGlyZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckdyaWQ6OnBvcHVsYXRlR3JpZFBvc2l0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVy
aW5nL3N0eWxlL0dyaWRDb29yZGluYXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpHcmlkU3Bhbjo6
ZGVmaW5pdGVHcmlkU3Bhbik6CisgICAgICAgIChXZWJDb3JlOjpHcmlkU3Bhbjo6aW5kZWZpbml0
ZUdyaWRTcGFuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRTcGFuOjpvcGVyYXRvcj09KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyaWRTcGFuOjppbnRlZ2VyU3Bhbik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmlkU3Bhbjo6cmVzb2x2ZWRJbml0aWFsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
R3JpZFNwYW46OnJlc29sdmVkRmluYWxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmlk
U3Bhbjo6YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6R3JpZFNwYW46OmVuZCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmlkU3Bhbjo6aXNEZWZpbml0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmlk
U3Bhbjo6R3JpZFNwYW4pOgorICAgICAgICAoV2ViQ29yZTo6R3JpZENvb3JkaW5hdGU6OkdyaWRD
b29yZGluYXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvR3JpZFJlc29sdmVkUG9zaXRp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5pdGlhbFBvc2l0aW9uU2lkZSk6CisgICAgICAg
IChXZWJDb3JlOjpmaW5hbFBvc2l0aW9uU2lkZSk6CisgICAgICAgIChXZWJDb3JlOjphZGp1c3RH
cmlkUG9zaXRpb25zRnJvbVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OnJlc29sdmVSb3dTdGFy
dENvbHVtblN0YXJ0TmFtZWRHcmlkTGluZVBvc2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6cmVzb2x2ZVJvd0VuZENvbHVtbkVuZE5hbWVkR3JpZExpbmVQ
b3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnJlc29s
dmVOYW1lZEdyaWRMaW5lUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpyZXNvbHZlR3JpZFBvc2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6R3JpZFJlc29sdmVkUG9zaXRpb246OnJlc29sdmVHcmlkUG9zaXRp
b25zRnJvbUF1dG9QbGFjZW1lbnRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmlkUmVz
b2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9tU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6aW1wbGljaXROYW1lZEdyaWRMaW5lRm9yU2lkZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6aXNOb25FeGlzdGVudE5hbWVkTGluZU9y
QXJlYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpyZXNvbHZlTmFtZWRHcmlkTGluZVBv
c2l0aW9uRnJvbVN0eWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnJlc29sdmVHcmlk
UG9zaXRpb25Gcm9tU3R5bGUpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9H
cmlkUmVzb2x2ZWRQb3NpdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6R3JpZFJlc29sdmVkUG9z
aXRpb246OkdyaWRSZXNvbHZlZFBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyaWRSZXNvbHZlZFBvc2l0aW9uOjpvcGVyYXRvciopOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JpZFJlc29sdmVkUG9zaXRpb246Om9wZXJhdG9yKyspOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JpZFJlc29sdmVkUG9zaXRpb246Om9wZXJhdG9yPT0pOiBEZWxldGVkLgor
CiAyMDE2LTAxLTI5ICBNYW51ZWwgUmVnbyBDYXNhc25vdmFzICA8cmVnb0BpZ2FsaWEuY29tPgog
CiAgICAgICAgIFtjc3MtZ3JpZF0gU3RvcmUgbGluZXMgaW5zdGVhZCBvZiB0cmFja3MgaW4gR3Jp
ZFJlc29sdmVkUG9zaXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmlk
VGVtcGxhdGVBcmVhc1ZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmlkVGVtcGxh
dGVBcmVhc1ZhbHVlLmNwcAppbmRleCBkNjgzOTBjM2VlNWU3YjZiMjkzODIwNzdkY2NiNmMwNTNh
ZTdiNmE4Li5iNWRlZmMxNTFmODg2ZDE4N2Y2NGUyOGUwYjdhNzhmY2EyMTFhZmFhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyaWRUZW1wbGF0ZUFyZWFzVmFsdWUuY3BwCkBAIC01
NSwxMyArNTUsMTMgQEAgc3RhdGljIFN0cmluZyBzdHJpbmdGb3JQb3NpdGlvbihjb25zdCBOYW1l
ZEdyaWRBcmVhTWFwJiBncmlkQXJlYU1hcCwgc2l6ZV90IHJvdywKIAogICAgIGZvciAoY29uc3Qg
YXV0byYgaXQgOiBncmlkQXJlYU1hcCkgewogICAgICAgICBjb25zdCBHcmlkQ29vcmRpbmF0ZSYg
Y29vcmRpbmF0ZSA9IGl0LnZhbHVlOwotICAgICAgICBpZiAocm93ID49IGNvb3JkaW5hdGUucm93
cy5yZXNvbHZlZEluaXRpYWxQb3NpdGlvbi50b0ludCgpICYmIHJvdyA8IGNvb3JkaW5hdGUucm93
cy5yZXNvbHZlZEZpbmFsUG9zaXRpb24udG9JbnQoKSkKKyAgICAgICAgaWYgKHJvdyA+PSBjb29y
ZGluYXRlLnJvd3MucmVzb2x2ZWRJbml0aWFsUG9zaXRpb24oKS50b0ludCgpICYmIHJvdyA8IGNv
b3JkaW5hdGUucm93cy5yZXNvbHZlZEZpbmFsUG9zaXRpb24oKS50b0ludCgpKQogICAgICAgICAg
ICAgY2FuZGlkYXRlcy5hcHBlbmQoaXQua2V5KTsKICAgICB9CiAKICAgICBmb3IgKGNvbnN0IGF1
dG8mIGl0IDogZ3JpZEFyZWFNYXApIHsKICAgICAgICAgY29uc3QgR3JpZENvb3JkaW5hdGUmIGNv
b3JkaW5hdGUgPSBpdC52YWx1ZTsKLSAgICAgICAgaWYgKGNvbHVtbiA+PSBjb29yZGluYXRlLmNv
bHVtbnMucmVzb2x2ZWRJbml0aWFsUG9zaXRpb24udG9JbnQoKSAmJiBjb2x1bW4gPCBjb29yZGlu
YXRlLmNvbHVtbnMucmVzb2x2ZWRGaW5hbFBvc2l0aW9uLnRvSW50KCkgJiYgY2FuZGlkYXRlcy5j
b250YWlucyhpdC5rZXkpKQorICAgICAgICBpZiAoY29sdW1uID49IGNvb3JkaW5hdGUuY29sdW1u
cy5yZXNvbHZlZEluaXRpYWxQb3NpdGlvbigpLnRvSW50KCkgJiYgY29sdW1uIDwgY29vcmRpbmF0
ZS5jb2x1bW5zLnJlc29sdmVkRmluYWxQb3NpdGlvbigpLnRvSW50KCkgJiYgY2FuZGlkYXRlcy5j
b250YWlucyhpdC5rZXkpKQogICAgICAgICAgICAgcmV0dXJuIGl0LmtleTsKICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1BhcnNlci5jcHAKaW5kZXggNmNkYjk0NDBiMjJjZmRmYTZmY2QwMDE5OTI3YzQ5
NDdjNmRhMWI1OS4uZjhjNWY5NjE3ZjI3YzQwNTExN2M1ZWNiYTg0OTVjZTUyNDgwYmRiNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKQEAgLTYyMDIsMjQgKzYyMDIsMjQgQEAgYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlR3JpZFRlbXBsYXRlQXJlYXNSb3coTmFtZWRHcmlkQXJlYU1hcCYgZ3JpZEFy
ZWFNYXAsIGNvbnN0IHUKIAogICAgICAgICBhdXRvIGdyaWRBcmVhSXRlcmF0b3IgPSBncmlkQXJl
YU1hcC5maW5kKGdyaWRBcmVhTmFtZSk7CiAgICAgICAgIGlmIChncmlkQXJlYUl0ZXJhdG9yID09
IGdyaWRBcmVhTWFwLmVuZCgpKQotICAgICAgICAgICAgZ3JpZEFyZWFNYXAuYWRkKGdyaWRBcmVh
TmFtZSwgR3JpZENvb3JkaW5hdGUoR3JpZFNwYW4ocm93Q291bnQsIHJvd0NvdW50ICsgMSksIEdy
aWRTcGFuKGN1cnJlbnRDb2x1bW4sIGxvb2tBaGVhZENvbHVtbikpKTsKKyAgICAgICAgICAgIGdy
aWRBcmVhTWFwLmFkZChncmlkQXJlYU5hbWUsIEdyaWRDb29yZGluYXRlKEdyaWRTcGFuOjpkZWZp
bml0ZUdyaWRTcGFuKHJvd0NvdW50LCByb3dDb3VudCArIDEpLCBHcmlkU3Bhbjo6ZGVmaW5pdGVH
cmlkU3BhbihjdXJyZW50Q29sdW1uLCBsb29rQWhlYWRDb2x1bW4pKSk7CiAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgR3JpZENvb3JkaW5hdGUmIGdyaWRDb29yZGluYXRlID0gZ3JpZEFyZWFJ
dGVyYXRvci0+dmFsdWU7CiAKICAgICAgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgY2hlY2tzIHRl
c3QgdGhhdCB0aGUgZ3JpZCBhcmVhIGlzIGEgc2luZ2xlIGZpbGxlZC1pbiByZWN0YW5nbGUuCiAg
ICAgICAgICAgICAvLyAxLiBUaGUgbmV3IHJvdyBpcyBhZGphY2VudCB0byB0aGUgcHJldmlvdXNs
eSBwYXJzZWQgcm93LgotICAgICAgICAgICAgaWYgKHJvd0NvdW50ICE9IGdyaWRDb29yZGluYXRl
LnJvd3MucmVzb2x2ZWRGaW5hbFBvc2l0aW9uLnRvSW50KCkpCisgICAgICAgICAgICBpZiAocm93
Q291bnQgIT0gZ3JpZENvb3JkaW5hdGUucm93cy5yZXNvbHZlZEZpbmFsUG9zaXRpb24oKS50b0lu
dCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgLy8gMi4g
VGhlIG5ldyBhcmVhIHN0YXJ0cyBhdCB0aGUgc2FtZSBwb3NpdGlvbiBhcyB0aGUgcHJldmlvdXNs
eSBwYXJzZWQgYXJlYS4KLSAgICAgICAgICAgIGlmIChjdXJyZW50Q29sdW1uICE9IGdyaWRDb29y
ZGluYXRlLmNvbHVtbnMucmVzb2x2ZWRJbml0aWFsUG9zaXRpb24udG9JbnQoKSkKKyAgICAgICAg
ICAgIGlmIChjdXJyZW50Q29sdW1uICE9IGdyaWRDb29yZGluYXRlLmNvbHVtbnMucmVzb2x2ZWRJ
bml0aWFsUG9zaXRpb24oKS50b0ludCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgICAgICAgICAgLy8gMy4gVGhlIG5ldyBhcmVhIGVuZHMgYXQgdGhlIHNhbWUgcG9zaXRp
b24gYXMgdGhlIHByZXZpb3VzbHkgcGFyc2VkIGFyZWEuCi0gICAgICAgICAgICBpZiAobG9va0Fo
ZWFkQ29sdW1uICE9IGdyaWRDb29yZGluYXRlLmNvbHVtbnMucmVzb2x2ZWRGaW5hbFBvc2l0aW9u
LnRvSW50KCkpCisgICAgICAgICAgICBpZiAobG9va0FoZWFkQ29sdW1uICE9IGdyaWRDb29yZGlu
YXRlLmNvbHVtbnMucmVzb2x2ZWRGaW5hbFBvc2l0aW9uKCkudG9JbnQoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgICsrZ3JpZENvb3JkaW5hdGUucm93cy5y
ZXNvbHZlZEZpbmFsUG9zaXRpb247CisgICAgICAgICAgICBncmlkQ29vcmRpbmF0ZS5yb3dzID0g
R3JpZFNwYW46OmRlZmluaXRlR3JpZFNwYW4oZ3JpZENvb3JkaW5hdGUucm93cy5yZXNvbHZlZElu
aXRpYWxQb3NpdGlvbigpLCBncmlkQ29vcmRpbmF0ZS5yb3dzLnJlc29sdmVkRmluYWxQb3NpdGlv
bigpLm5leHQoKSk7CiAgICAgICAgIH0KICAgICAgICAgY3VycmVudENvbHVtbiA9IGxvb2tBaGVh
ZENvbHVtbiAtIDE7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
QnVpbGRlckNvbnZlcnRlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckNvbnZl
cnRlci5oCmluZGV4IDllMjFlMzg0OTk4M2U2YjZmMjg2OTY3NmYyZGM4OTdkZjk3N2VmYTIuLjQ2
NTMwNDFkNjliNzgzZGYzNGY4ZDNmZDZlYjg5ZTg5ZjBmZWIzOWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVCdWlsZGVyQ29udmVydGVyLmgKQEAgLTg3NSwxMiArODc1LDEyIEBAIGlubGlu
ZSB2b2lkIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y3JlYXRlSW1wbGljaXROYW1lZEdyaWRMaW5l
c0Zyb21HcmlkQXJlYShjb25zCiAgICAgICAgIEdyaWRTcGFuIGFyZWFTcGFuID0gZGlyZWN0aW9u
ID09IEZvclJvd3MgPyBhcmVhLnZhbHVlLnJvd3MgOiBhcmVhLnZhbHVlLmNvbHVtbnM7CiAgICAg
ICAgIHsKICAgICAgICAgICAgIGF1dG8mIHN0YXJ0VmVjdG9yID0gbmFtZWRHcmlkTGluZXMuYWRk
KGFyZWEua2V5ICsgIi1zdGFydCIsIFZlY3Rvcjx1bnNpZ25lZD4oKSkuaXRlcmF0b3ItPnZhbHVl
OwotICAgICAgICAgICAgc3RhcnRWZWN0b3IuYXBwZW5kKGFyZWFTcGFuLnJlc29sdmVkSW5pdGlh
bFBvc2l0aW9uLnRvSW50KCkpOworICAgICAgICAgICAgc3RhcnRWZWN0b3IuYXBwZW5kKGFyZWFT
cGFuLnJlc29sdmVkSW5pdGlhbFBvc2l0aW9uKCkudG9JbnQoKSk7CiAgICAgICAgICAgICBzdGQ6
OnNvcnQoc3RhcnRWZWN0b3IuYmVnaW4oKSwgc3RhcnRWZWN0b3IuZW5kKCkpOwogICAgICAgICB9
CiAgICAgICAgIHsKICAgICAgICAgICAgIGF1dG8mIGVuZFZlY3RvciA9IG5hbWVkR3JpZExpbmVz
LmFkZChhcmVhLmtleSArICItZW5kIiwgVmVjdG9yPHVuc2lnbmVkPigpKS5pdGVyYXRvci0+dmFs
dWU7Ci0gICAgICAgICAgICBlbmRWZWN0b3IuYXBwZW5kKGFyZWFTcGFuLnJlc29sdmVkRmluYWxQ
b3NpdGlvbi50b0ludCgpKTsKKyAgICAgICAgICAgIGVuZFZlY3Rvci5hcHBlbmQoYXJlYVNwYW4u
cmVzb2x2ZWRGaW5hbFBvc2l0aW9uKCkudG9JbnQoKSk7CiAgICAgICAgICAgICBzdGQ6OnNvcnQo
ZW5kVmVjdG9yLmJlZ2luKCksIGVuZFZlY3Rvci5lbmQoKSk7CiAgICAgICAgIH0KICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAKaW5kZXggMTQxZTc0Y2IxNDg2Y2Fm
ZDQ1YTI1Y2E3YWYyZGQwMzI2NDA5MjM3Yy4uMmE0YzM1OTRhNjU0YjA5MGZkOTcwNmExMWNiM2Fj
YWNiOGYxNGRjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdy
aWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNwcApAQCAt
MTkwLDcgKzE5MCw3IEBAIHB1YmxpYzoKICAgICAgICAgY29uc3QgdW5zaWduZWQgZW5kT2ZWYXJ5
aW5nVHJhY2tJbmRleCA9IChtX2RpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKSA/IG1fZ3JpZC5zaXpl
KCkgOiBtX2dyaWRbMF0uc2l6ZSgpOwogICAgICAgICBmb3IgKDsgdmFyeWluZ1RyYWNrSW5kZXgg
PCBlbmRPZlZhcnlpbmdUcmFja0luZGV4OyArK3ZhcnlpbmdUcmFja0luZGV4KSB7CiAgICAgICAg
ICAgICBpZiAoaXNFbXB0eUFyZWFFbm91Z2gocm93U3BhbiwgY29sdW1uU3BhbikpIHsKLSAgICAg
ICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JpZENvb3JkaW5hdGU+IHJlc3VsdCA9IHN0ZDo6
bWFrZV91bmlxdWU8R3JpZENvb3JkaW5hdGU+KEdyaWRTcGFuKG1fcm93SW5kZXgsIG1fcm93SW5k
ZXggKyByb3dTcGFuKSwgR3JpZFNwYW4obV9jb2x1bW5JbmRleCwgbV9jb2x1bW5JbmRleCArIGNv
bHVtblNwYW4pKTsKKyAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JpZENvb3JkaW5h
dGU+IHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8R3JpZENvb3JkaW5hdGU+KEdyaWRTcGFuOjpk
ZWZpbml0ZUdyaWRTcGFuKG1fcm93SW5kZXgsIG1fcm93SW5kZXggKyByb3dTcGFuKSwgR3JpZFNw
YW46OmRlZmluaXRlR3JpZFNwYW4obV9jb2x1bW5JbmRleCwgbV9jb2x1bW5JbmRleCArIGNvbHVt
blNwYW4pKTsKICAgICAgICAgICAgICAgICAvLyBBZHZhbmNlIHRoZSBpdGVyYXRvciB0byBhdm9p
ZCBhbiBpbmZpbml0ZSBsb29wIHdoZXJlIHdlIHdvdWxkIHJldHVybiB0aGUgc2FtZSBncmlkIGFy
ZWEgb3ZlciBhbmQgb3Zlci4KICAgICAgICAgICAgICAgICArK3ZhcnlpbmdUcmFja0luZGV4Owog
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC01NjYsNyArNTY2LDcgQEAgdm9pZCBS
ZW5kZXJHcmlkOjpjb21wdXRlVXNlZEJyZWFkdGhPZkdyaWRUcmFja3MoR3JpZFRyYWNrU2l6aW5n
RGlyZWN0aW9uIGRpcmVjdGkKICAgICAvLyA0LiBHcm93IGFsbCBHcmlkIHRyYWNrcyBoYXZpbmcg
YSBmcmFjdGlvbiBhcyB0aGUgTWF4VHJhY2tTaXppbmdGdW5jdGlvbi4KICAgICBkb3VibGUgZmxl
eEZyYWN0aW9uID0gMDsKICAgICBpZiAoaGFzRGVmaW5pdGVGcmVlU3BhY2UpCi0gICAgICAgIGZs
ZXhGcmFjdGlvbiA9IGZpbmRGbGV4RmFjdG9yVW5pdFNpemUodHJhY2tzLCBHcmlkU3BhbigwLCB0
cmFja3Muc2l6ZSgpKSwgZGlyZWN0aW9uLCBpbml0aWFsRnJlZVNwYWNlLnZhbHVlKCkpOworICAg
ICAgICBmbGV4RnJhY3Rpb24gPSBmaW5kRmxleEZhY3RvclVuaXRTaXplKHRyYWNrcywgR3JpZFNw
YW46OmRlZmluaXRlR3JpZFNwYW4oMCwgdHJhY2tzLnNpemUoKSksIGRpcmVjdGlvbiwgaW5pdGlh
bEZyZWVTcGFjZS52YWx1ZSgpKTsKICAgICBlbHNlIHsKICAgICAgICAgZm9yIChjb25zdCBhdXRv
JiB0cmFja0luZGV4IDogZmxleGlibGVTaXplZFRyYWNrc0luZGV4KQogICAgICAgICAgICAgZmxl
eEZyYWN0aW9uID0gc3RkOjptYXgoZmxleEZyYWN0aW9uLCBub3JtYWxpemVkRmxleEZyYWN0aW9u
KHRyYWNrc1t0cmFja0luZGV4XSwgZ3JpZFRyYWNrU2l6ZShkaXJlY3Rpb24sIHRyYWNrSW5kZXgp
Lm1heFRyYWNrQnJlYWR0aCgpLmZsZXgoKSkpOwpAQCAtNTc3LDcgKzU3Nyw3IEBAIHZvaWQgUmVu
ZGVyR3JpZDo6Y29tcHV0ZVVzZWRCcmVhZHRoT2ZHcmlkVHJhY2tzKEdyaWRUcmFja1NpemluZ0Rp
cmVjdGlvbiBkaXJlY3RpCiAgICAgICAgICAgICAgICAgY29uc3QgR3JpZFNwYW4gc3BhbiA9IGNh
Y2hlZEdyaWRTcGFuKCpncmlkSXRlbSwgZGlyZWN0aW9uKTsKIAogICAgICAgICAgICAgICAgIC8v
IERvIG5vdCBpbmNsdWRlIGFscmVhZHkgcHJvY2Vzc2VkIGl0ZW1zLgotICAgICAgICAgICAgICAg
IGlmIChpID4gMCAmJiBzcGFuLnJlc29sdmVkSW5pdGlhbFBvc2l0aW9uLnRvSW50KCkgPD0gZmxl
eGlibGVTaXplZFRyYWNrc0luZGV4W2kgLSAxXSkKKyAgICAgICAgICAgICAgICBpZiAoaSA+IDAg
JiYgc3Bhbi5yZXNvbHZlZEluaXRpYWxQb3NpdGlvbigpLnRvSW50KCkgPD0gZmxleGlibGVTaXpl
ZFRyYWNrc0luZGV4W2kgLSAxXSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAg
ICAgICAgICAgICAgICBmbGV4RnJhY3Rpb24gPSBzdGQ6Om1heChmbGV4RnJhY3Rpb24sIGZpbmRG
bGV4RmFjdG9yVW5pdFNpemUodHJhY2tzLCBzcGFuLCBkaXJlY3Rpb24sIG1heENvbnRlbnRGb3JD
aGlsZCgqZ3JpZEl0ZW0sIGRpcmVjdGlvbiwgc2l6aW5nRGF0YS5jb2x1bW5UcmFja3MpKSk7CkBA
IC04NjUsNyArODY1LDcgQEAgdm9pZCBSZW5kZXJHcmlkOjpyZXNvbHZlQ29udGVudEJhc2VkVHJh
Y2tTaXppbmdGdW5jdGlvbnMoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW8KIAogdm9pZCBSZW5kZXJH
cmlkOjpyZXNvbHZlQ29udGVudEJhc2VkVHJhY2tTaXppbmdGdW5jdGlvbnNGb3JOb25TcGFubmlu
Z0l0ZW1zKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEdyaWRTcGFu
JiBzcGFuLCBSZW5kZXJCb3gmIGdyaWRJdGVtLCBHcmlkVHJhY2smIHRyYWNrLCBWZWN0b3I8R3Jp
ZFRyYWNrPiYgY29sdW1uVHJhY2tzKQogewotICAgIGNvbnN0IEdyaWRSZXNvbHZlZFBvc2l0aW9u
IHRyYWNrUG9zaXRpb24gPSBzcGFuLnJlc29sdmVkSW5pdGlhbFBvc2l0aW9uOworICAgIGNvbnN0
IEdyaWRSZXNvbHZlZFBvc2l0aW9uIHRyYWNrUG9zaXRpb24gPSBzcGFuLnJlc29sdmVkSW5pdGlh
bFBvc2l0aW9uKCk7CiAgICAgR3JpZFRyYWNrU2l6ZSB0cmFja1NpemUgPSBncmlkVHJhY2tTaXpl
KGRpcmVjdGlvbiwgdHJhY2tQb3NpdGlvbi50b0ludCgpKTsKIAogICAgIGlmICh0cmFja1NpemUu
aGFzTWluQ29udGVudE1pblRyYWNrQnJlYWR0aCgpKQpAQCAtMTEzOCw3ICsxMTM4LDcgQEAgdm9p
ZCBSZW5kZXJHcmlkOjplbnN1cmVHcmlkU2l6ZSh1bnNpZ25lZCBtYXhpbXVtUm93U2l6ZSwgdW5z
aWduZWQgbWF4aW11bUNvbHVtblMKIAogdm9pZCBSZW5kZXJHcmlkOjppbnNlcnRJdGVtSW50b0dy
aWQoUmVuZGVyQm94JiBjaGlsZCwgY29uc3QgR3JpZENvb3JkaW5hdGUmIGNvb3JkaW5hdGUpCiB7
Ci0gICAgZW5zdXJlR3JpZFNpemUoY29vcmRpbmF0ZS5yb3dzLnJlc29sdmVkRmluYWxQb3NpdGlv
bi50b0ludCgpLCBjb29yZGluYXRlLmNvbHVtbnMucmVzb2x2ZWRGaW5hbFBvc2l0aW9uLnRvSW50
KCkpOworICAgIGVuc3VyZUdyaWRTaXplKGNvb3JkaW5hdGUucm93cy5yZXNvbHZlZEZpbmFsUG9z
aXRpb24oKS50b0ludCgpLCBjb29yZGluYXRlLmNvbHVtbnMucmVzb2x2ZWRGaW5hbFBvc2l0aW9u
KCkudG9JbnQoKSk7CiAKICAgICBmb3IgKGF1dG8mIHJvdyA6IGNvb3JkaW5hdGUucm93cykgewog
ICAgICAgICBmb3IgKGF1dG8mIGNvbHVtbiA6IGNvb3JkaW5hdGUuY29sdW1ucykKQEAgLTExNjAs
MjEgKzExNjAsMTggQEAgdm9pZCBSZW5kZXJHcmlkOjpwbGFjZUl0ZW1zT25HcmlkKCkKICAgICAg
ICAgaWYgKGNoaWxkLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogCi0gICAgICAgIGF1dG8gdW5yZXNvbHZlZFJvd1Bvc2l0aW9ucyA9IEdyaWRSZXNvbHZl
ZFBvc2l0aW9uOjp1bnJlc29sdmVkU3BhbkZyb21TdHlsZShzdHlsZSgpLCAqY2hpbGQsIEZvclJv
d3MpOwotICAgICAgICBhdXRvIHVucmVzb2x2ZWRDb2x1bW5Qb3NpdGlvbnMgPSBHcmlkUmVzb2x2
ZWRQb3NpdGlvbjo6dW5yZXNvbHZlZFNwYW5Gcm9tU3R5bGUoc3R5bGUoKSwgKmNoaWxkLCBGb3JD
b2x1bW5zKTsKLQotICAgICAgICBpZiAodW5yZXNvbHZlZFJvd1Bvc2l0aW9ucy5yZXF1aXJlc0F1
dG9QbGFjZW1lbnQoKSB8fCB1bnJlc29sdmVkQ29sdW1uUG9zaXRpb25zLnJlcXVpcmVzQXV0b1Bs
YWNlbWVudCgpKSB7CisgICAgICAgIEdyaWRTcGFuIHJvd1Bvc2l0aW9ucyA9IEdyaWRSZXNvbHZl
ZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21TdHlsZShzdHlsZSgpLCAqY2hpbGQs
IEZvclJvd3MpOworICAgICAgICBHcmlkU3BhbiBjb2x1bW5Qb3NpdGlvbnMgPSBHcmlkUmVzb2x2
ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9tU3R5bGUoc3R5bGUoKSwgKmNoaWxk
LCBGb3JDb2x1bW5zKTsKIAorICAgICAgICBpZiAoIXJvd1Bvc2l0aW9ucy5pc0RlZmluaXRlKCkg
fHwgIWNvbHVtblBvc2l0aW9ucy5pc0RlZmluaXRlKCkpIHsKICAgICAgICAgICAgIGJvb2wgbWFq
b3JBeGlzRGlyZWN0aW9uSXNGb3JDb2x1bW5zID0gYXV0b1BsYWNlbWVudE1ham9yQXhpc0RpcmVj
dGlvbigpID09IEZvckNvbHVtbnM7Ci0gICAgICAgICAgICBpZiAoKG1ham9yQXhpc0RpcmVjdGlv
bklzRm9yQ29sdW1ucyAmJiB1bnJlc29sdmVkQ29sdW1uUG9zaXRpb25zLnJlcXVpcmVzQXV0b1Bs
YWNlbWVudCgpKQotICAgICAgICAgICAgICAgIHx8ICghbWFqb3JBeGlzRGlyZWN0aW9uSXNGb3JD
b2x1bW5zICYmIHVucmVzb2x2ZWRSb3dQb3NpdGlvbnMucmVxdWlyZXNBdXRvUGxhY2VtZW50KCkp
KQorICAgICAgICAgICAgaWYgKChtYWpvckF4aXNEaXJlY3Rpb25Jc0ZvckNvbHVtbnMgJiYgIWNv
bHVtblBvc2l0aW9ucy5pc0RlZmluaXRlKCkpCisgICAgICAgICAgICAgICAgfHwgKCFtYWpvckF4
aXNEaXJlY3Rpb25Jc0ZvckNvbHVtbnMgJiYgIXJvd1Bvc2l0aW9ucy5pc0RlZmluaXRlKCkpKQog
ICAgICAgICAgICAgICAgIGF1dG9NYWpvckF4aXNBdXRvR3JpZEl0ZW1zLmFwcGVuZChjaGlsZCk7
CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgc3BlY2lmaWVkTWFqb3JBeGlzQXV0
b0dyaWRJdGVtcy5hcHBlbmQoY2hpbGQpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IH0KLSAgICAgICAgR3JpZFNwYW4gcm93UG9zaXRpb25zID0gR3JpZFJlc29sdmVkUG9zaXRpb246
OnJlc29sdmVHcmlkUG9zaXRpb25zRnJvbVN0eWxlKHVucmVzb2x2ZWRSb3dQb3NpdGlvbnMsIHN0
eWxlKCkpOwotICAgICAgICBHcmlkU3BhbiBjb2x1bW5Qb3NpdGlvbnMgPSBHcmlkUmVzb2x2ZWRQ
b3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9tU3R5bGUodW5yZXNvbHZlZENvbHVtblBv
c2l0aW9ucywgc3R5bGUoKSk7CiAgICAgICAgIGluc2VydEl0ZW1JbnRvR3JpZCgqY2hpbGQsIEdy
aWRDb29yZGluYXRlKHJvd1Bvc2l0aW9ucywgY29sdW1uUG9zaXRpb25zKSk7CiAgICAgfQogCkBA
IC0xMTk3LDI0ICsxMTk0LDIyIEBAIHZvaWQgUmVuZGVyR3JpZDo6cG9wdWxhdGVFeHBsaWNpdEdy
aWRBbmRPcmRlckl0ZXJhdG9yKCkKIAogICAgICAgICBwb3B1bGF0b3IuY29sbGVjdENoaWxkKCpj
aGlsZCk7CiAKLSAgICAgICAgYXV0byB1bnJlc29sdmVkUm93UG9zaXRpb25zID0gR3JpZFJlc29s
dmVkUG9zaXRpb246OnVucmVzb2x2ZWRTcGFuRnJvbVN0eWxlKHN0eWxlKCksICpjaGlsZCwgRm9y
Um93cyk7Ci0gICAgICAgIGlmICghdW5yZXNvbHZlZFJvd1Bvc2l0aW9ucy5yZXF1aXJlc0F1dG9Q
bGFjZW1lbnQoKSkgewotICAgICAgICAgICAgR3JpZFNwYW4gcm93UG9zaXRpb25zID0gR3JpZFJl
c29sdmVkUG9zaXRpb246OnJlc29sdmVHcmlkUG9zaXRpb25zRnJvbVN0eWxlKHVucmVzb2x2ZWRS
b3dQb3NpdGlvbnMsIHN0eWxlKCkpOwotICAgICAgICAgICAgbWF4aW11bVJvd0luZGV4ID0gc3Rk
OjptYXgobWF4aW11bVJvd0luZGV4LCByb3dQb3NpdGlvbnMucmVzb2x2ZWRGaW5hbFBvc2l0aW9u
LnRvSW50KCkpOworICAgICAgICBHcmlkU3BhbiByb3dQb3NpdGlvbnMgPSBHcmlkUmVzb2x2ZWRQ
b3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9tU3R5bGUoc3R5bGUoKSwgKmNoaWxkLCBG
b3JSb3dzKTsKKyAgICAgICAgaWYgKHJvd1Bvc2l0aW9ucy5pc0RlZmluaXRlKCkpIHsKKyAgICAg
ICAgICAgIG1heGltdW1Sb3dJbmRleCA9IHN0ZDo6bWF4KG1heGltdW1Sb3dJbmRleCwgcm93UG9z
aXRpb25zLnJlc29sdmVkRmluYWxQb3NpdGlvbigpLnRvSW50KCkpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgLy8gR3JvdyB0aGUgZ3JpZCBmb3IgaXRlbXMgd2l0aCBhIGRlZmluaXRl
IHJvdyBzcGFuLCBnZXR0aW5nIHRoZSBsYXJnZXN0IHN1Y2ggc3Bhbi4KICAgICAgICAgICAgIEdy
aWRTcGFuIHBvc2l0aW9ucyA9IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0
aW9uc0Zyb21BdXRvUGxhY2VtZW50UG9zaXRpb24oc3R5bGUoKSwgKmNoaWxkLCBGb3JSb3dzLCBH
cmlkUmVzb2x2ZWRQb3NpdGlvbigwKSk7Ci0gICAgICAgICAgICBtYXhpbXVtUm93SW5kZXggPSBz
dGQ6Om1heChtYXhpbXVtUm93SW5kZXgsIHBvc2l0aW9ucy5yZXNvbHZlZEZpbmFsUG9zaXRpb24u
dG9JbnQoKSk7CisgICAgICAgICAgICBtYXhpbXVtUm93SW5kZXggPSBzdGQ6Om1heChtYXhpbXVt
Um93SW5kZXgsIHBvc2l0aW9ucy5yZXNvbHZlZEZpbmFsUG9zaXRpb24oKS50b0ludCgpKTsKICAg
ICAgICAgfQogCi0gICAgICAgIGF1dG8gdW5yZXNvbHZlZENvbHVtblBvc2l0aW9ucyA9IEdyaWRS
ZXNvbHZlZFBvc2l0aW9uOjp1bnJlc29sdmVkU3BhbkZyb21TdHlsZShzdHlsZSgpLCAqY2hpbGQs
IEZvckNvbHVtbnMpOwotICAgICAgICBpZiAoIXVucmVzb2x2ZWRDb2x1bW5Qb3NpdGlvbnMucmVx
dWlyZXNBdXRvUGxhY2VtZW50KCkpIHsKLSAgICAgICAgICAgIEdyaWRTcGFuIGNvbHVtblBvc2l0
aW9ucyA9IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21TdHls
ZSh1bnJlc29sdmVkQ29sdW1uUG9zaXRpb25zLCBzdHlsZSgpKTsKLSAgICAgICAgICAgIG1heGlt
dW1Db2x1bW5JbmRleCA9IHN0ZDo6bWF4KG1heGltdW1Db2x1bW5JbmRleCwgY29sdW1uUG9zaXRp
b25zLnJlc29sdmVkRmluYWxQb3NpdGlvbi50b0ludCgpKTsKKyAgICAgICAgR3JpZFNwYW4gY29s
dW1uUG9zaXRpb25zID0gR3JpZFJlc29sdmVkUG9zaXRpb246OnJlc29sdmVHcmlkUG9zaXRpb25z
RnJvbVN0eWxlKHN0eWxlKCksICpjaGlsZCwgRm9yQ29sdW1ucyk7CisgICAgICAgIGlmIChjb2x1
bW5Qb3NpdGlvbnMuaXNEZWZpbml0ZSgpKSB7CisgICAgICAgICAgICBtYXhpbXVtQ29sdW1uSW5k
ZXggPSBzdGQ6Om1heChtYXhpbXVtQ29sdW1uSW5kZXgsIGNvbHVtblBvc2l0aW9ucy5yZXNvbHZl
ZEZpbmFsUG9zaXRpb24oKS50b0ludCgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IC8vIEdyb3cgdGhlIGdyaWQgZm9yIGl0ZW1zIHdpdGggYSBkZWZpbml0ZSBjb2x1bW4gc3Bhbiwg
Z2V0dGluZyB0aGUgbGFyZ2VzdCBzdWNoIHNwYW4uCiAgICAgICAgICAgICBHcmlkU3BhbiBwb3Np
dGlvbnMgPSBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9tQXV0
b1BsYWNlbWVudFBvc2l0aW9uKHN0eWxlKCksICpjaGlsZCwgRm9yQ29sdW1ucywgR3JpZFJlc29s
dmVkUG9zaXRpb24oMCkpOwotICAgICAgICAgICAgbWF4aW11bUNvbHVtbkluZGV4ID0gc3RkOjpt
YXgobWF4aW11bUNvbHVtbkluZGV4LCBwb3NpdGlvbnMucmVzb2x2ZWRGaW5hbFBvc2l0aW9uLnRv
SW50KCkpOworICAgICAgICAgICAgbWF4aW11bUNvbHVtbkluZGV4ID0gc3RkOjptYXgobWF4aW11
bUNvbHVtbkluZGV4LCBwb3NpdGlvbnMucmVzb2x2ZWRGaW5hbFBvc2l0aW9uKCkudG9JbnQoKSk7
CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEyNDIsMjAgKzEyMzcsMTkgQEAgdm9pZCBSZW5kZXJH
cmlkOjpwbGFjZVNwZWNpZmllZE1ham9yQXhpc0l0ZW1zT25HcmlkKGNvbnN0IFZlY3RvcjxSZW5k
ZXJCb3gqPiYgYXUKICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZCwgRGVmYXVsdEhhc2g8
dW5zaWduZWQ+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2ln
bmVkPj4gbWlub3JBeGlzQ3Vyc29yczsKIAogICAgIGZvciAoYXV0byYgYXV0b0dyaWRJdGVtIDog
YXV0b0dyaWRJdGVtcykgewotICAgICAgICBhdXRvIHVucmVzb2x2ZWRNYWpvckF4aXNQb3NpdGlv
bnMgPSBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6dW5yZXNvbHZlZFNwYW5Gcm9tU3R5bGUoc3R5bGUo
KSwgKmF1dG9HcmlkSXRlbSwgYXV0b1BsYWNlbWVudE1ham9yQXhpc0RpcmVjdGlvbigpKTsKLSAg
ICAgICAgQVNTRVJUKCF1bnJlc29sdmVkTWFqb3JBeGlzUG9zaXRpb25zLnJlcXVpcmVzQXV0b1Bs
YWNlbWVudCgpKTsKLSAgICAgICAgR3JpZFNwYW4gbWFqb3JBeGlzUG9zaXRpb25zID0gR3JpZFJl
c29sdmVkUG9zaXRpb246OnJlc29sdmVHcmlkUG9zaXRpb25zRnJvbVN0eWxlKHVucmVzb2x2ZWRN
YWpvckF4aXNQb3NpdGlvbnMsIHN0eWxlKCkpOworICAgICAgICBHcmlkU3BhbiBtYWpvckF4aXNQ
b3NpdGlvbnMgPSBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9t
U3R5bGUoc3R5bGUoKSwgKmF1dG9HcmlkSXRlbSwgYXV0b1BsYWNlbWVudE1ham9yQXhpc0RpcmVj
dGlvbigpKTsKKyAgICAgICAgQVNTRVJUKG1ham9yQXhpc1Bvc2l0aW9ucy5pc0RlZmluaXRlKCkp
OwogICAgICAgICBHcmlkU3BhbiBtaW5vckF4aXNQb3NpdGlvbnMgPSBHcmlkUmVzb2x2ZWRQb3Np
dGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9tQXV0b1BsYWNlbWVudFBvc2l0aW9uKHN0eWxl
KCksICphdXRvR3JpZEl0ZW0sIGF1dG9QbGFjZW1lbnRNaW5vckF4aXNEaXJlY3Rpb24oKSwgR3Jp
ZFJlc29sdmVkUG9zaXRpb24oMCkpOwotICAgICAgICB1bnNpZ25lZCBtYWpvckF4aXNJbml0aWFs
UG9zaXRpb24gPSBtYWpvckF4aXNQb3NpdGlvbnMucmVzb2x2ZWRJbml0aWFsUG9zaXRpb24udG9J
bnQoKTsKKyAgICAgICAgdW5zaWduZWQgbWFqb3JBeGlzSW5pdGlhbFBvc2l0aW9uID0gbWFqb3JB
eGlzUG9zaXRpb25zLnJlc29sdmVkSW5pdGlhbFBvc2l0aW9uKCkudG9JbnQoKTsKIAotICAgICAg
ICBHcmlkSXRlcmF0b3IgaXRlcmF0b3IobV9ncmlkLCBhdXRvUGxhY2VtZW50TWFqb3JBeGlzRGly
ZWN0aW9uKCksIG1ham9yQXhpc1Bvc2l0aW9ucy5yZXNvbHZlZEluaXRpYWxQb3NpdGlvbi50b0lu
dCgpLCBpc0dyaWRBdXRvRmxvd0RlbnNlID8gMCA6IG1pbm9yQXhpc0N1cnNvcnMuZ2V0KG1ham9y
QXhpc0luaXRpYWxQb3NpdGlvbikpOworICAgICAgICBHcmlkSXRlcmF0b3IgaXRlcmF0b3IobV9n
cmlkLCBhdXRvUGxhY2VtZW50TWFqb3JBeGlzRGlyZWN0aW9uKCksIG1ham9yQXhpc1Bvc2l0aW9u
cy5yZXNvbHZlZEluaXRpYWxQb3NpdGlvbigpLnRvSW50KCksIGlzR3JpZEF1dG9GbG93RGVuc2Ug
PyAwIDogbWlub3JBeGlzQ3Vyc29ycy5nZXQobWFqb3JBeGlzSW5pdGlhbFBvc2l0aW9uKSk7CiAg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmlkQ29vcmRpbmF0ZT4gZW1wdHlHcmlkQXJlYSA9IGl0
ZXJhdG9yLm5leHRFbXB0eUdyaWRBcmVhKG1ham9yQXhpc1Bvc2l0aW9ucy5pbnRlZ2VyU3Bhbigp
LCBtaW5vckF4aXNQb3NpdGlvbnMuaW50ZWdlclNwYW4oKSk7CiAgICAgICAgIGlmICghZW1wdHlH
cmlkQXJlYSkKICAgICAgICAgICAgIGVtcHR5R3JpZEFyZWEgPSBjcmVhdGVFbXB0eUdyaWRBcmVh
QXRTcGVjaWZpZWRQb3NpdGlvbnNPdXRzaWRlR3JpZCgqYXV0b0dyaWRJdGVtLCBhdXRvUGxhY2Vt
ZW50TWFqb3JBeGlzRGlyZWN0aW9uKCksIG1ham9yQXhpc1Bvc2l0aW9ucyk7CiAgICAgICAgIGlu
c2VydEl0ZW1JbnRvR3JpZCgqYXV0b0dyaWRJdGVtLCAqZW1wdHlHcmlkQXJlYSk7CiAKICAgICAg
ICAgaWYgKCFpc0dyaWRBdXRvRmxvd0RlbnNlKQotICAgICAgICAgICAgbWlub3JBeGlzQ3Vyc29y
cy5zZXQobWFqb3JBeGlzSW5pdGlhbFBvc2l0aW9uLCBpc0ZvckNvbHVtbnMgPyBlbXB0eUdyaWRB
cmVhLT5yb3dzLnJlc29sdmVkSW5pdGlhbFBvc2l0aW9uLnRvSW50KCkgOiBlbXB0eUdyaWRBcmVh
LT5jb2x1bW5zLnJlc29sdmVkSW5pdGlhbFBvc2l0aW9uLnRvSW50KCkpOworICAgICAgICAgICAg
bWlub3JBeGlzQ3Vyc29ycy5zZXQobWFqb3JBeGlzSW5pdGlhbFBvc2l0aW9uLCBpc0ZvckNvbHVt
bnMgPyBlbXB0eUdyaWRBcmVhLT5yb3dzLnJlc29sdmVkSW5pdGlhbFBvc2l0aW9uKCkudG9JbnQo
KSA6IGVtcHR5R3JpZEFyZWEtPmNvbHVtbnMucmVzb2x2ZWRJbml0aWFsUG9zaXRpb24oKS50b0lu
dCgpKTsKICAgICB9CiB9CiAKQEAgLTEyNzYsNyArMTI3MCw3IEBAIHZvaWQgUmVuZGVyR3JpZDo6
cGxhY2VBdXRvTWFqb3JBeGlzSXRlbXNPbkdyaWQoY29uc3QgVmVjdG9yPFJlbmRlckJveCo+JiBh
dXRvR3JpCiAKIHZvaWQgUmVuZGVyR3JpZDo6cGxhY2VBdXRvTWFqb3JBeGlzSXRlbU9uR3JpZChS
ZW5kZXJCb3gmIGdyaWRJdGVtLCBBdXRvUGxhY2VtZW50Q3Vyc29yJiBhdXRvUGxhY2VtZW50Q3Vy
c29yKQogewotICAgIEFTU0VSVChHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6dW5yZXNvbHZlZFNwYW5G
cm9tU3R5bGUoc3R5bGUoKSwgZ3JpZEl0ZW0sIGF1dG9QbGFjZW1lbnRNYWpvckF4aXNEaXJlY3Rp
b24oKSkucmVxdWlyZXNBdXRvUGxhY2VtZW50KCkpOworICAgIEFTU0VSVCghR3JpZFJlc29sdmVk
UG9zaXRpb246OnJlc29sdmVHcmlkUG9zaXRpb25zRnJvbVN0eWxlKHN0eWxlKCksIGdyaWRJdGVt
LCBhdXRvUGxhY2VtZW50TWFqb3JBeGlzRGlyZWN0aW9uKCkpLmlzRGVmaW5pdGUoKSk7CiAgICAg
R3JpZFNwYW4gbWFqb3JBeGlzUG9zaXRpb25zID0gR3JpZFJlc29sdmVkUG9zaXRpb246OnJlc29s
dmVHcmlkUG9zaXRpb25zRnJvbUF1dG9QbGFjZW1lbnRQb3NpdGlvbihzdHlsZSgpLCBncmlkSXRl
bSwgYXV0b1BsYWNlbWVudE1ham9yQXhpc0RpcmVjdGlvbigpLCBHcmlkUmVzb2x2ZWRQb3NpdGlv
bigwKSk7CiAKICAgICBjb25zdCB1bnNpZ25lZCBlbmRPZk1ham9yQXhpcyA9IChhdXRvUGxhY2Vt
ZW50TWFqb3JBeGlzRGlyZWN0aW9uKCkgPT0gRm9yQ29sdW1ucykgPyBncmlkQ29sdW1uQ291bnQo
KSA6IGdyaWRSb3dDb3VudCgpOwpAQCAtMTI4NCwxNiArMTI3OCwxNCBAQCB2b2lkIFJlbmRlckdy
aWQ6OnBsYWNlQXV0b01ham9yQXhpc0l0ZW1PbkdyaWQoUmVuZGVyQm94JiBncmlkSXRlbSwgQXV0
b1BsYWNlbWVudAogICAgIHVuc2lnbmVkIG1pbm9yQXhpc0F1dG9QbGFjZW1lbnRDdXJzb3IgPSBh
dXRvUGxhY2VtZW50TWFqb3JBeGlzRGlyZWN0aW9uKCkgPT0gRm9yQ29sdW1ucyA/IGF1dG9QbGFj
ZW1lbnRDdXJzb3IuZmlyc3QgOiBhdXRvUGxhY2VtZW50Q3Vyc29yLnNlY29uZDsKIAogICAgIHN0
ZDo6dW5pcXVlX3B0cjxHcmlkQ29vcmRpbmF0ZT4gZW1wdHlHcmlkQXJlYTsKLSAgICBhdXRvIHVu
cmVzb2x2ZWRNaW5vckF4aXNQb3NpdGlvbnMgPSBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6dW5yZXNv
bHZlZFNwYW5Gcm9tU3R5bGUoc3R5bGUoKSwgZ3JpZEl0ZW0sIGF1dG9QbGFjZW1lbnRNaW5vckF4
aXNEaXJlY3Rpb24oKSk7Ci0gICAgaWYgKCF1bnJlc29sdmVkTWlub3JBeGlzUG9zaXRpb25zLnJl
cXVpcmVzQXV0b1BsYWNlbWVudCgpKSB7Ci0gICAgICAgIEdyaWRTcGFuIG1pbm9yQXhpc1Bvc2l0
aW9ucyA9IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21TdHls
ZSh1bnJlc29sdmVkTWlub3JBeGlzUG9zaXRpb25zLCBzdHlsZSgpKTsKLQorICAgIEdyaWRTcGFu
IG1pbm9yQXhpc1Bvc2l0aW9ucyA9IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBv
c2l0aW9uc0Zyb21TdHlsZShzdHlsZSgpLCBncmlkSXRlbSwgYXV0b1BsYWNlbWVudE1pbm9yQXhp
c0RpcmVjdGlvbigpKTsKKyAgICBpZiAobWlub3JBeGlzUG9zaXRpb25zLmlzRGVmaW5pdGUoKSkg
ewogICAgICAgICAvLyBNb3ZlIHRvIHRoZSBuZXh0IHRyYWNrIGluIG1ham9yIGF4aXMgaWYgaW5p
dGlhbCBwb3NpdGlvbiBpbiBtaW5vciBheGlzIGlzIGJlZm9yZSBhdXRvLXBsYWNlbWVudCBjdXJz
b3IuCi0gICAgICAgIGlmIChtaW5vckF4aXNQb3NpdGlvbnMucmVzb2x2ZWRJbml0aWFsUG9zaXRp
b24udG9JbnQoKSA8IG1pbm9yQXhpc0F1dG9QbGFjZW1lbnRDdXJzb3IpCisgICAgICAgIGlmICht
aW5vckF4aXNQb3NpdGlvbnMucmVzb2x2ZWRJbml0aWFsUG9zaXRpb24oKS50b0ludCgpIDwgbWlu
b3JBeGlzQXV0b1BsYWNlbWVudEN1cnNvcikKICAgICAgICAgICAgIG1ham9yQXhpc0F1dG9QbGFj
ZW1lbnRDdXJzb3IrKzsKIAogICAgICAgICBpZiAobWFqb3JBeGlzQXV0b1BsYWNlbWVudEN1cnNv
ciA8IGVuZE9mTWFqb3JBeGlzKSB7Ci0gICAgICAgICAgICBHcmlkSXRlcmF0b3IgaXRlcmF0b3Io
bV9ncmlkLCBhdXRvUGxhY2VtZW50TWlub3JBeGlzRGlyZWN0aW9uKCksIG1pbm9yQXhpc1Bvc2l0
aW9ucy5yZXNvbHZlZEluaXRpYWxQb3NpdGlvbi50b0ludCgpLCBtYWpvckF4aXNBdXRvUGxhY2Vt
ZW50Q3Vyc29yKTsKKyAgICAgICAgICAgIEdyaWRJdGVyYXRvciBpdGVyYXRvcihtX2dyaWQsIGF1
dG9QbGFjZW1lbnRNaW5vckF4aXNEaXJlY3Rpb24oKSwgbWlub3JBeGlzUG9zaXRpb25zLnJlc29s
dmVkSW5pdGlhbFBvc2l0aW9uKCkudG9JbnQoKSwgbWFqb3JBeGlzQXV0b1BsYWNlbWVudEN1cnNv
cik7CiAgICAgICAgICAgICBlbXB0eUdyaWRBcmVhID0gaXRlcmF0b3IubmV4dEVtcHR5R3JpZEFy
ZWEobWlub3JBeGlzUG9zaXRpb25zLmludGVnZXJTcGFuKCksIG1ham9yQXhpc1Bvc2l0aW9ucy5p
bnRlZ2VyU3BhbigpKTsKICAgICAgICAgfQogCkBAIC0xMzA4LDcgKzEzMDAsNyBAQCB2b2lkIFJl
bmRlckdyaWQ6OnBsYWNlQXV0b01ham9yQXhpc0l0ZW1PbkdyaWQoUmVuZGVyQm94JiBncmlkSXRl
bSwgQXV0b1BsYWNlbWVudAogCiAgICAgICAgICAgICBpZiAoZW1wdHlHcmlkQXJlYSkgewogICAg
ICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgaXQgZml0cyBpbiB0aGUgbWlub3IgYXhpcyBkaXJl
Y3Rpb24sIGFzIHdlIHNob3VsZG4ndCBncm93IGluIHRoYXQgZGlyZWN0aW9uIGhlcmUgKGl0IHdh
cyBhbHJlYWR5IG1hbmFnZWQgaW4gcG9wdWxhdGVFeHBsaWNpdEdyaWRBbmRPcmRlckl0ZXJhdG9y
KCkpLgotICAgICAgICAgICAgICAgIEdyaWRSZXNvbHZlZFBvc2l0aW9uIG1pbm9yQXhpc0ZpbmFs
UG9zaXRpb25JbmRleCA9IGF1dG9QbGFjZW1lbnRNaW5vckF4aXNEaXJlY3Rpb24oKSA9PSBGb3JD
b2x1bW5zID8gZW1wdHlHcmlkQXJlYS0+Y29sdW1ucy5yZXNvbHZlZEZpbmFsUG9zaXRpb24gOiBl
bXB0eUdyaWRBcmVhLT5yb3dzLnJlc29sdmVkRmluYWxQb3NpdGlvbjsKKyAgICAgICAgICAgICAg
ICBHcmlkUmVzb2x2ZWRQb3NpdGlvbiBtaW5vckF4aXNGaW5hbFBvc2l0aW9uSW5kZXggPSBhdXRv
UGxhY2VtZW50TWlub3JBeGlzRGlyZWN0aW9uKCkgPT0gRm9yQ29sdW1ucyA/IGVtcHR5R3JpZEFy
ZWEtPmNvbHVtbnMucmVzb2x2ZWRGaW5hbFBvc2l0aW9uKCkgOiBlbXB0eUdyaWRBcmVhLT5yb3dz
LnJlc29sdmVkRmluYWxQb3NpdGlvbigpOwogICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVk
IGVuZE9mTWlub3JBeGlzID0gYXV0b1BsYWNlbWVudE1pbm9yQXhpc0RpcmVjdGlvbigpID09IEZv
ckNvbHVtbnMgPyBncmlkQ29sdW1uQ291bnQoKSA6IGdyaWRSb3dDb3VudCgpOwogICAgICAgICAg
ICAgICAgIGlmIChtaW5vckF4aXNGaW5hbFBvc2l0aW9uSW5kZXgudG9JbnQoKSA8PSBlbmRPZk1p
bm9yQXhpcykKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzI3LDggKzEzMTksOCBA
QCB2b2lkIFJlbmRlckdyaWQ6OnBsYWNlQXV0b01ham9yQXhpc0l0ZW1PbkdyaWQoUmVuZGVyQm94
JiBncmlkSXRlbSwgQXV0b1BsYWNlbWVudAogICAgIH0KIAogICAgIGluc2VydEl0ZW1JbnRvR3Jp
ZChncmlkSXRlbSwgKmVtcHR5R3JpZEFyZWEpOwotICAgIGF1dG9QbGFjZW1lbnRDdXJzb3IuZmly
c3QgPSBlbXB0eUdyaWRBcmVhLT5yb3dzLnJlc29sdmVkSW5pdGlhbFBvc2l0aW9uLnRvSW50KCk7
Ci0gICAgYXV0b1BsYWNlbWVudEN1cnNvci5zZWNvbmQgPSBlbXB0eUdyaWRBcmVhLT5jb2x1bW5z
LnJlc29sdmVkSW5pdGlhbFBvc2l0aW9uLnRvSW50KCk7CisgICAgYXV0b1BsYWNlbWVudEN1cnNv
ci5maXJzdCA9IGVtcHR5R3JpZEFyZWEtPnJvd3MucmVzb2x2ZWRJbml0aWFsUG9zaXRpb24oKS50
b0ludCgpOworICAgIGF1dG9QbGFjZW1lbnRDdXJzb3Iuc2Vjb25kID0gZW1wdHlHcmlkQXJlYS0+
Y29sdW1ucy5yZXNvbHZlZEluaXRpYWxQb3NpdGlvbigpLnRvSW50KCk7CiB9CiAKIEdyaWRUcmFj
a1NpemluZ0RpcmVjdGlvbiBSZW5kZXJHcmlkOjphdXRvUGxhY2VtZW50TWFqb3JBeGlzRGlyZWN0
aW9uKCkgY29uc3QKQEAgLTE0NjAsOCArMTQ1Miw4IEBAIHZvaWQgUmVuZGVyR3JpZDo6b2Zmc2V0
QW5kQnJlYWR0aEZvclBvc2l0aW9uZWRDaGlsZChjb25zdCBSZW5kZXJCb3gmIGNoaWxkLCBHcmlk
CiB7CiAgICAgQVNTRVJUKGNoaWxkLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPT0gaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSk7CiAKLSAgICBhdXRvIHVucmVzb2x2ZWRQb3NpdGlvbnMgPSBH
cmlkUmVzb2x2ZWRQb3NpdGlvbjo6dW5yZXNvbHZlZFNwYW5Gcm9tU3R5bGUoc3R5bGUoKSwgY2hp
bGQsIGRpcmVjdGlvbik7Ci0gICAgaWYgKHVucmVzb2x2ZWRQb3NpdGlvbnMucmVxdWlyZXNBdXRv
UGxhY2VtZW50KCkpIHsKKyAgICBHcmlkU3BhbiBwb3NpdGlvbnMgPSBHcmlkUmVzb2x2ZWRQb3Np
dGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9tU3R5bGUoc3R5bGUoKSwgY2hpbGQsIGRpcmVj
dGlvbik7CisgICAgaWYgKCFwb3NpdGlvbnMuaXNEZWZpbml0ZSgpKSB7CiAgICAgICAgIG9mZnNl
dCA9IExheW91dFVuaXQoKTsKICAgICAgICAgYnJlYWR0aCA9IChkaXJlY3Rpb24gPT0gRm9yQ29s
dW1ucykgPyBjbGllbnRMb2dpY2FsV2lkdGgoKSA6IGNsaWVudExvZ2ljYWxIZWlnaHQoKTsKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTQ3MSwxOCArMTQ2MywxNyBAQCB2b2lkIFJlbmRlckdyaWQ6Om9m
ZnNldEFuZEJyZWFkdGhGb3JQb3NpdGlvbmVkQ2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCwg
R3JpZAogICAgIEdyaWRQb3NpdGlvbiBlbmRQb3NpdGlvbiA9IChkaXJlY3Rpb24gPT0gRm9yQ29s
dW1ucykgPyBjaGlsZC5zdHlsZSgpLmdyaWRJdGVtQ29sdW1uRW5kKCkgOiBjaGlsZC5zdHlsZSgp
LmdyaWRJdGVtUm93RW5kKCk7CiAgICAgc2l6ZV90IGxhc3RUcmFja0luZGV4ID0gKGRpcmVjdGlv
biA9PSBGb3JDb2x1bW5zID8gZ3JpZENvbHVtbkNvdW50KCkgOiBncmlkUm93Q291bnQoKSkgLSAx
OwogCi0gICAgR3JpZFNwYW4gcG9zaXRpb25zID0gR3JpZFJlc29sdmVkUG9zaXRpb246OnJlc29s
dmVHcmlkUG9zaXRpb25zRnJvbVN0eWxlKHVucmVzb2x2ZWRQb3NpdGlvbnMsIHN0eWxlKCkpOwog
ICAgIGJvb2wgc3RhcnRJc0F1dG8gPSBzdGFydFBvc2l0aW9uLmlzQXV0bygpCiAgICAgICAgIHx8
IChzdGFydFBvc2l0aW9uLmlzTmFtZWRHcmlkQXJlYSgpICYmIEdyaWRSZXNvbHZlZFBvc2l0aW9u
Ojppc05vbkV4aXN0ZW50TmFtZWRMaW5lT3JBcmVhKHN0YXJ0UG9zaXRpb24ubmFtZWRHcmlkTGlu
ZSgpLCBzdHlsZSgpLCAoZGlyZWN0aW9uID09IEZvckNvbHVtbnMpID8gQ29sdW1uU3RhcnRTaWRl
IDogUm93U3RhcnRTaWRlKSkKLSAgICAgICAgfHwgKHBvc2l0aW9ucy5yZXNvbHZlZEluaXRpYWxQ
b3NpdGlvbi50b0ludCgpID4gbGFzdFRyYWNrSW5kZXgpOworICAgICAgICB8fCAocG9zaXRpb25z
LnJlc29sdmVkSW5pdGlhbFBvc2l0aW9uKCkudG9JbnQoKSA+IGxhc3RUcmFja0luZGV4KTsKICAg
ICBib29sIGVuZElzQXV0byA9IGVuZFBvc2l0aW9uLmlzQXV0bygpCiAgICAgICAgIHx8IChlbmRQ
b3NpdGlvbi5pc05hbWVkR3JpZEFyZWEoKSAmJiBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6aXNOb25F
eGlzdGVudE5hbWVkTGluZU9yQXJlYShlbmRQb3NpdGlvbi5uYW1lZEdyaWRMaW5lKCksIHN0eWxl
KCksIChkaXJlY3Rpb24gPT0gRm9yQ29sdW1ucykgPyBDb2x1bW5FbmRTaWRlIDogUm93RW5kU2lk
ZSkpCi0gICAgICAgIHx8IChwb3NpdGlvbnMucmVzb2x2ZWRGaW5hbFBvc2l0aW9uLnByZXYoKS50
b0ludCgpID4gbGFzdFRyYWNrSW5kZXgpOworICAgICAgICB8fCAocG9zaXRpb25zLnJlc29sdmVk
RmluYWxQb3NpdGlvbigpLnByZXYoKS50b0ludCgpID4gbGFzdFRyYWNrSW5kZXgpOwogCiAgICAg
R3JpZFJlc29sdmVkUG9zaXRpb24gZmlyc3RQb3NpdGlvbiA9IEdyaWRSZXNvbHZlZFBvc2l0aW9u
KDApOwotICAgIEdyaWRSZXNvbHZlZFBvc2l0aW9uIGluaXRpYWxQb3NpdGlvbiA9IHN0YXJ0SXNB
dXRvID8gZmlyc3RQb3NpdGlvbiA6IHBvc2l0aW9ucy5yZXNvbHZlZEluaXRpYWxQb3NpdGlvbjsK
KyAgICBHcmlkUmVzb2x2ZWRQb3NpdGlvbiBpbml0aWFsUG9zaXRpb24gPSBzdGFydElzQXV0byA/
IGZpcnN0UG9zaXRpb24gOiBwb3NpdGlvbnMucmVzb2x2ZWRJbml0aWFsUG9zaXRpb24oKTsKICAg
ICBHcmlkUmVzb2x2ZWRQb3NpdGlvbiBsYXN0UG9zaXRpb24gPSBHcmlkUmVzb2x2ZWRQb3NpdGlv
bihsYXN0VHJhY2tJbmRleCk7Ci0gICAgR3JpZFJlc29sdmVkUG9zaXRpb24gZmluYWxQb3NpdGlv
biA9IGVuZElzQXV0byA/IGxhc3RQb3NpdGlvbiA6IHBvc2l0aW9ucy5yZXNvbHZlZEZpbmFsUG9z
aXRpb24ucHJldigpOworICAgIEdyaWRSZXNvbHZlZFBvc2l0aW9uIGZpbmFsUG9zaXRpb24gPSBl
bmRJc0F1dG8gPyBsYXN0UG9zaXRpb24gOiBwb3NpdGlvbnMucmVzb2x2ZWRGaW5hbFBvc2l0aW9u
KCkucHJldigpOwogCiAgICAgLy8gUG9zaXRpb25lZCBjaGlsZHJlbiBkbyBub3QgZ3JvdyB0aGUg
Z3JpZCwgc28gd2UgbmVlZCB0byBjbGFtcCB0aGUgcG9zaXRpb25zIHRvIGF2b2lkIGVuZGluZyB1
cCBvdXRzaWRlIG9mIGl0LgogICAgIGluaXRpYWxQb3NpdGlvbiA9IHN0ZDo6bWluPEdyaWRSZXNv
bHZlZFBvc2l0aW9uPihpbml0aWFsUG9zaXRpb24sIGxhc3RQb3NpdGlvbik7CkBAIC0xNTQyLDEx
ICsxNTMzLDExIEBAIExheW91dFVuaXQgUmVuZGVyR3JpZDo6Z3JpZEFyZWFCcmVhZHRoRm9yQ2hp
bGRJbmNsdWRpbmdBbGlnbm1lbnRPZmZzZXRzKGNvbnN0IFJlCiAgICAgY29uc3QgYXV0byYgc3Bh
biA9IGNhY2hlZEdyaWRTcGFuKGNoaWxkLCBkaXJlY3Rpb24pOwogICAgIGNvbnN0IGF1dG8mIGxp
bmVQb3NpdGlvbnMgPSAoZGlyZWN0aW9uID09IEZvckNvbHVtbnMpID8gbV9jb2x1bW5Qb3NpdGlv
bnMgOiBtX3Jvd1Bvc2l0aW9uczsKIAotICAgIExheW91dFVuaXQgaW5pdGlhbFRyYWNrUG9zaXRp
b24gPSBsaW5lUG9zaXRpb25zW3NwYW4ucmVzb2x2ZWRJbml0aWFsUG9zaXRpb24udG9JbnQoKV07
Ci0gICAgTGF5b3V0VW5pdCBmaW5hbFRyYWNrUG9zaXRpb24gPSBsaW5lUG9zaXRpb25zW3NwYW4u
cmVzb2x2ZWRGaW5hbFBvc2l0aW9uLnByZXYoKS50b0ludCgpXTsKKyAgICBMYXlvdXRVbml0IGlu
aXRpYWxUcmFja1Bvc2l0aW9uID0gbGluZVBvc2l0aW9uc1tzcGFuLnJlc29sdmVkSW5pdGlhbFBv
c2l0aW9uKCkudG9JbnQoKV07CisgICAgTGF5b3V0VW5pdCBmaW5hbFRyYWNrUG9zaXRpb24gPSBs
aW5lUG9zaXRpb25zW3NwYW4ucmVzb2x2ZWRGaW5hbFBvc2l0aW9uKCkucHJldigpLnRvSW50KCld
OwogCiAgICAgLy8gVHJhY2sgUG9zaXRpb25zIHZlY3RvciBzdG9yZXMgdGhlICdzdGFydCcgZ3Jp
ZCBsaW5lIG9mIGVhY2ggdHJhY2ssIHNvIHdlIGhhdmUgdG8gYWRkIGxhc3QgdHJhY2sncyBiYXNl
U2l6ZS4KLSAgICByZXR1cm4gZmluYWxUcmFja1Bvc2l0aW9uIC0gaW5pdGlhbFRyYWNrUG9zaXRp
b24gKyB0cmFja3Nbc3Bhbi5yZXNvbHZlZEZpbmFsUG9zaXRpb24ucHJldigpLnRvSW50KCldLmJh
c2VTaXplKCk7CisgICAgcmV0dXJuIGZpbmFsVHJhY2tQb3NpdGlvbiAtIGluaXRpYWxUcmFja1Bv
c2l0aW9uICsgdHJhY2tzW3NwYW4ucmVzb2x2ZWRGaW5hbFBvc2l0aW9uKCkucHJldigpLnRvSW50
KCldLmJhc2VTaXplKCk7CiB9CiAKIHZvaWQgUmVuZGVyR3JpZDo6cG9wdWxhdGVHcmlkUG9zaXRp
b25zKEdyaWRTaXppbmdEYXRhJiBzaXppbmdEYXRhKQpAQCAtMTgyNSw3ICsxODE2LDcgQEAgc3Rh
dGljIGlubGluZSBMYXlvdXRVbml0IG9mZnNldEJldHdlZW5UcmFja3MoQ29udGVudERpc3RyaWJ1
dGlvblR5cGUgZGlzdHJpYnV0aW8KIExheW91dFVuaXQgUmVuZGVyR3JpZDo6Y29sdW1uQXhpc09m
ZnNldEZvckNoaWxkKGNvbnN0IFJlbmRlckJveCYgY2hpbGQpIGNvbnN0CiB7CiAgICAgY29uc3Qg
R3JpZFNwYW4mIHJvd3NTcGFuID0gY2FjaGVkR3JpZFNwYW4oY2hpbGQsIEZvclJvd3MpOwotICAg
IHVuc2lnbmVkIGNoaWxkU3RhcnRMaW5lID0gcm93c1NwYW4ucmVzb2x2ZWRJbml0aWFsUG9zaXRp
b24udG9JbnQoKTsKKyAgICB1bnNpZ25lZCBjaGlsZFN0YXJ0TGluZSA9IHJvd3NTcGFuLnJlc29s
dmVkSW5pdGlhbFBvc2l0aW9uKCkudG9JbnQoKTsKICAgICBMYXlvdXRVbml0IHN0YXJ0T2ZSb3cg
PSBtX3Jvd1Bvc2l0aW9uc1tjaGlsZFN0YXJ0TGluZV07CiAgICAgTGF5b3V0VW5pdCBzdGFydFBv
c2l0aW9uID0gc3RhcnRPZlJvdyArIG1hcmdpbkJlZm9yZUZvckNoaWxkKGNoaWxkKTsKICAgICBp
ZiAoaGFzQXV0b01hcmdpbnNJbkNvbHVtbkF4aXMoY2hpbGQpKQpAQCAtMTgzNiw3ICsxODI3LDcg
QEAgTGF5b3V0VW5pdCBSZW5kZXJHcmlkOjpjb2x1bW5BeGlzT2Zmc2V0Rm9yQ2hpbGQoY29uc3Qg
UmVuZGVyQm94JiBjaGlsZCkgY29uc3QKICAgICAgICAgcmV0dXJuIHN0YXJ0UG9zaXRpb247CiAg
ICAgY2FzZSBHcmlkQXhpc0VuZDoKICAgICBjYXNlIEdyaWRBeGlzQ2VudGVyOiB7Ci0gICAgICAg
IHVuc2lnbmVkIGNoaWxkRW5kTGluZSA9IHJvd3NTcGFuLnJlc29sdmVkRmluYWxQb3NpdGlvbi50
b0ludCgpOworICAgICAgICB1bnNpZ25lZCBjaGlsZEVuZExpbmUgPSByb3dzU3Bhbi5yZXNvbHZl
ZEZpbmFsUG9zaXRpb24oKS50b0ludCgpOwogICAgICAgICBMYXlvdXRVbml0IGVuZE9mUm93ID0g
bV9yb3dQb3NpdGlvbnNbY2hpbGRFbmRMaW5lXTsKICAgICAgICAgLy8gbV9yb3dQb3NpdGlvbnMg
aW5jbHVkZSBndXR0ZXJzIHNvIHdlIG5lZWQgdG8gc3Vic3RyYWN0IHRoZW0gdG8gZ2V0IHRoZSBh
Y3R1YWwgZW5kIHBvc2l0aW9uIGZvciBhIGdpdmVuCiAgICAgICAgIC8vIHJvdyAodGhpcyBkb2Vz
IG5vdCBoYXZlIHRvIGJlIGRvbmUgZm9yIHRoZSBsYXN0IHRyYWNrIGFzIHRoZXJlIGFyZSBubyBt
b3JlIG1fcm93UG9zaXRpb25zIGFmdGVyIGl0KQpAQCAtMTg1OSw3ICsxODUwLDcgQEAgTGF5b3V0
VW5pdCBSZW5kZXJHcmlkOjpjb2x1bW5BeGlzT2Zmc2V0Rm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94
JiBjaGlsZCkgY29uc3QKIExheW91dFVuaXQgUmVuZGVyR3JpZDo6cm93QXhpc09mZnNldEZvckNo
aWxkKGNvbnN0IFJlbmRlckJveCYgY2hpbGQpIGNvbnN0CiB7CiAgICAgY29uc3QgR3JpZFNwYW4m
IGNvbHVtbnNTcGFuID0gY2FjaGVkR3JpZFNwYW4oY2hpbGQsIEZvckNvbHVtbnMpOwotICAgIHVu
c2lnbmVkIGNoaWxkU3RhcnRMaW5lID0gY29sdW1uc1NwYW4ucmVzb2x2ZWRJbml0aWFsUG9zaXRp
b24udG9JbnQoKTsKKyAgICB1bnNpZ25lZCBjaGlsZFN0YXJ0TGluZSA9IGNvbHVtbnNTcGFuLnJl
c29sdmVkSW5pdGlhbFBvc2l0aW9uKCkudG9JbnQoKTsKICAgICBMYXlvdXRVbml0IHN0YXJ0T2ZD
b2x1bW4gPSBtX2NvbHVtblBvc2l0aW9uc1tjaGlsZFN0YXJ0TGluZV07CiAgICAgTGF5b3V0VW5p
dCBzdGFydFBvc2l0aW9uID0gc3RhcnRPZkNvbHVtbiArIG1hcmdpblN0YXJ0Rm9yQ2hpbGQoY2hp
bGQpOwogICAgIGlmIChoYXNBdXRvTWFyZ2luc0luUm93QXhpcyhjaGlsZCkpCkBAIC0xODcwLDcg
KzE4NjEsNyBAQCBMYXlvdXRVbml0IFJlbmRlckdyaWQ6OnJvd0F4aXNPZmZzZXRGb3JDaGlsZChj
b25zdCBSZW5kZXJCb3gmIGNoaWxkKSBjb25zdAogICAgICAgICByZXR1cm4gc3RhcnRQb3NpdGlv
bjsKICAgICBjYXNlIEdyaWRBeGlzRW5kOgogICAgIGNhc2UgR3JpZEF4aXNDZW50ZXI6IHsKLSAg
ICAgICAgdW5zaWduZWQgY2hpbGRFbmRMaW5lID0gY29sdW1uc1NwYW4ucmVzb2x2ZWRGaW5hbFBv
c2l0aW9uLnRvSW50KCk7CisgICAgICAgIHVuc2lnbmVkIGNoaWxkRW5kTGluZSA9IGNvbHVtbnNT
cGFuLnJlc29sdmVkRmluYWxQb3NpdGlvbigpLnRvSW50KCk7CiAgICAgICAgIExheW91dFVuaXQg
ZW5kT2ZDb2x1bW4gPSBtX2NvbHVtblBvc2l0aW9uc1tjaGlsZEVuZExpbmVdOwogICAgICAgICAv
LyBtX2NvbHVtblBvc2l0aW9ucyBpbmNsdWRlIGd1dHRlcnMgc28gd2UgbmVlZCB0byBzdWJzdHJh
Y3QgdGhlbSB0byBnZXQgdGhlIGFjdHVhbCBlbmQgcG9zaXRpb24gZm9yIGEgZ2l2ZW4KICAgICAg
ICAgLy8gY29sdW1uICh0aGlzIGRvZXMgbm90IGhhdmUgdG8gYmUgZG9uZSBmb3IgdGhlIGxhc3Qg
dHJhY2sgYXMgdGhlcmUgYXJlIG5vIG1vcmUgbV9jb2x1bW5Qb3NpdGlvbnMgYWZ0ZXIgaXQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZENvb3JkaW5hdGUu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9HcmlkQ29vcmRpbmF0ZS5oCmluZGV4
IDc3OGQyYjM3N2NlMDZhMzhkZTQzZGE3ZTBjOWU4ZDBhNzYyY2Y2NGYuLmZmOTg4ZWU0YjVjZGE3
MDkyZTE0ODI3MDEwNmRjMjZjOTdkNmEwODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9HcmlkQ29vcmRpbmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9HcmlkQ29vcmRpbmF0ZS5oCkBAIC00NywzOCArNDcsNzggQEAgY29uc3QgdW5z
aWduZWQga0dyaWRNYXhUcmFja3MgPSAxMDAwMDAwOwogLy8gYW5kIHxyZXNvbHZlZEZpbmFsUG9z
aXRpb258IGFyZSBncmlkIGxpbmVzJyBpbmRleGVzLgogLy8gSXRlcmF0aW5nIG92ZXIgdGhlIHNw
YW4gc2hvdWxkbid0IGluY2x1ZGUgfHJlc29sdmVkRmluYWxQb3NpdGlvbnwgdG8gYmUgY29ycmVj
dC4KIGNsYXNzIEdyaWRTcGFuIHsKKwogcHVibGljOgotICAgIEdyaWRTcGFuKGNvbnN0IEdyaWRS
ZXNvbHZlZFBvc2l0aW9uJiByZXNvbHZlZEluaXRpYWxQb3NpdGlvbiwgY29uc3QgR3JpZFJlc29s
dmVkUG9zaXRpb24mIHJlc29sdmVkRmluYWxQb3NpdGlvbikKLSAgICAgICAgOiByZXNvbHZlZElu
aXRpYWxQb3NpdGlvbihzdGQ6Om1pbihyZXNvbHZlZEluaXRpYWxQb3NpdGlvbi50b0ludCgpLCBr
R3JpZE1heFRyYWNrcyAtIDEpKQotICAgICAgICAsIHJlc29sdmVkRmluYWxQb3NpdGlvbihzdGQ6
Om1pbihyZXNvbHZlZEZpbmFsUG9zaXRpb24udG9JbnQoKSwga0dyaWRNYXhUcmFja3MpKQorCisg
ICAgc3RhdGljIEdyaWRTcGFuIGRlZmluaXRlR3JpZFNwYW4oY29uc3QgR3JpZFJlc29sdmVkUG9z
aXRpb24mIHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uLCBjb25zdCBHcmlkUmVzb2x2ZWRQb3NpdGlv
biYgcmVzb2x2ZWRGaW5hbFBvc2l0aW9uKQogICAgIHsKLSAgICAgICAgQVNTRVJUKHJlc29sdmVk
SW5pdGlhbFBvc2l0aW9uIDwgcmVzb2x2ZWRGaW5hbFBvc2l0aW9uKTsKKyAgICAgICAgcmV0dXJu
IEdyaWRTcGFuKHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uLCByZXNvbHZlZEZpbmFsUG9zaXRpb24s
IERlZmluaXRlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgR3JpZFNwYW4gaW5kZWZpbml0ZUdyaWRT
cGFuKCkKKyAgICB7CisgICAgICAgIHJldHVybiBHcmlkU3BhbigwLCAxLCBJbmRlZmluaXRlKTsK
ICAgICB9CiAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgR3JpZFNwYW4mIG8pIGNvbnN0CiAg
ICAgewotICAgICAgICByZXR1cm4gcmVzb2x2ZWRJbml0aWFsUG9zaXRpb24gPT0gby5yZXNvbHZl
ZEluaXRpYWxQb3NpdGlvbiAmJiByZXNvbHZlZEZpbmFsUG9zaXRpb24gPT0gby5yZXNvbHZlZEZp
bmFsUG9zaXRpb247CisgICAgICAgIHJldHVybiBtX3R5cGUgPT0gby5tX3R5cGUgJiYgbV9yZXNv
bHZlZEluaXRpYWxQb3NpdGlvbiA9PSBvLm1fcmVzb2x2ZWRJbml0aWFsUG9zaXRpb24gJiYgbV9y
ZXNvbHZlZEZpbmFsUG9zaXRpb24gPT0gby5tX3Jlc29sdmVkRmluYWxQb3NpdGlvbjsKICAgICB9
CiAKICAgICB1bnNpZ25lZCBpbnRlZ2VyU3BhbigpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1
cm4gcmVzb2x2ZWRGaW5hbFBvc2l0aW9uLnRvSW50KCkgLSByZXNvbHZlZEluaXRpYWxQb3NpdGlv
bi50b0ludCgpOworICAgICAgICBBU1NFUlQoaXNEZWZpbml0ZSgpKTsKKyAgICAgICAgcmV0dXJu
IG1fcmVzb2x2ZWRGaW5hbFBvc2l0aW9uLnRvSW50KCkgLSBtX3Jlc29sdmVkSW5pdGlhbFBvc2l0
aW9uLnRvSW50KCk7CiAgICAgfQogCi0gICAgR3JpZFJlc29sdmVkUG9zaXRpb24gcmVzb2x2ZWRJ
bml0aWFsUG9zaXRpb247Ci0gICAgR3JpZFJlc29sdmVkUG9zaXRpb24gcmVzb2x2ZWRGaW5hbFBv
c2l0aW9uOworICAgIGNvbnN0IEdyaWRSZXNvbHZlZFBvc2l0aW9uJiByZXNvbHZlZEluaXRpYWxQ
b3NpdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNEZWZpbml0ZSgpKTsKKyAg
ICAgICAgcmV0dXJuIG1fcmVzb2x2ZWRJbml0aWFsUG9zaXRpb247CisgICAgfQorCisgICAgY29u
c3QgR3JpZFJlc29sdmVkUG9zaXRpb24mIHJlc29sdmVkRmluYWxQb3NpdGlvbigpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoaXNEZWZpbml0ZSgpKTsKKyAgICAgICAgcmV0dXJuIG1fcmVz
b2x2ZWRGaW5hbFBvc2l0aW9uOworICAgIH0KIAogICAgIHR5cGVkZWYgR3JpZFJlc29sdmVkUG9z
aXRpb24gaXRlcmF0b3I7CiAKICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0CiAgICAgewotICAg
ICAgICByZXR1cm4gcmVzb2x2ZWRJbml0aWFsUG9zaXRpb247CisgICAgICAgIEFTU0VSVChpc0Rl
ZmluaXRlKCkpOworICAgICAgICByZXR1cm4gbV9yZXNvbHZlZEluaXRpYWxQb3NpdGlvbjsKICAg
ICB9CiAKICAgICBpdGVyYXRvciBlbmQoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIHJl
c29sdmVkRmluYWxQb3NpdGlvbjsKKyAgICAgICAgQVNTRVJUKGlzRGVmaW5pdGUoKSk7CisgICAg
ICAgIHJldHVybiBtX3Jlc29sdmVkRmluYWxQb3NpdGlvbjsKICAgICB9CisKKyAgICBib29sIGlz
RGVmaW5pdGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdHlwZSA9PSBEZWZpbml0
ZTsKKyAgICB9CisKK3ByaXZhdGU6CisKKyAgICBlbnVtIEdyaWRTcGFuVHlwZSB7RGVmaW5pdGUs
IEluZGVmaW5pdGV9OworCisgICAgR3JpZFNwYW4oY29uc3QgR3JpZFJlc29sdmVkUG9zaXRpb24m
IHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uLCBjb25zdCBHcmlkUmVzb2x2ZWRQb3NpdGlvbiYgcmVz
b2x2ZWRGaW5hbFBvc2l0aW9uLCBHcmlkU3BhblR5cGUgdHlwZSkKKyAgICAgICAgOiBtX3Jlc29s
dmVkSW5pdGlhbFBvc2l0aW9uKHN0ZDo6bWluKHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uLnRvSW50
KCksIGtHcmlkTWF4VHJhY2tzIC0gMSkpCisgICAgICAgICwgbV9yZXNvbHZlZEZpbmFsUG9zaXRp
b24oc3RkOjptaW4ocmVzb2x2ZWRGaW5hbFBvc2l0aW9uLnRvSW50KCksIGtHcmlkTWF4VHJhY2tz
KSkKKyAgICAgICAgLCBtX3R5cGUodHlwZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChyZXNvbHZl
ZEluaXRpYWxQb3NpdGlvbiA8IHJlc29sdmVkRmluYWxQb3NpdGlvbik7CisgICAgfQorCisgICAg
R3JpZFJlc29sdmVkUG9zaXRpb24gbV9yZXNvbHZlZEluaXRpYWxQb3NpdGlvbjsKKyAgICBHcmlk
UmVzb2x2ZWRQb3NpdGlvbiBtX3Jlc29sdmVkRmluYWxQb3NpdGlvbjsKKyAgICBHcmlkU3BhblR5
cGUgbV90eXBlOworCisKIH07CiAKIC8vIFRoaXMgcmVwcmVzZW50cyBhIGdyaWQgYXJlYSB0aGF0
IHNwYW5zIGluIGJvdGggcm93cycgYW5kIGNvbHVtbnMnIGRpcmVjdGlvbi4KQEAgLTg2LDggKzEy
Niw4IEBAIGNsYXNzIEdyaWRDb29yZGluYXRlIHsKIHB1YmxpYzoKICAgICAvLyBIYXNoTWFwIHJl
cXVpcmVzIGEgZGVmYXVsdCBjb25zdHVjdG9yLgogICAgIEdyaWRDb29yZGluYXRlKCkKLSAgICAg
ICAgOiBjb2x1bW5zKDAsIDEpCi0gICAgICAgICwgcm93cygwLCAxKQorICAgICAgICA6IGNvbHVt
bnMoR3JpZFNwYW46OmluZGVmaW5pdGVHcmlkU3BhbigpKQorICAgICAgICAsIHJvd3MoR3JpZFNw
YW46OmluZGVmaW5pdGVHcmlkU3BhbigpKQogICAgIHsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9HcmlkUmVzb2x2ZWRQb3NpdGlvbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFJlc29sdmVkUG9zaXRpb24uY3BwCmlu
ZGV4IDlhMGY0ZGY1OGUzM2QyNGVkMDc3MzRjODkzYjQxZDZmN2NlODU1ZmUuLjc5YjkwMGQyMDhm
OTIwNjcxY2NiOWQ2NTY5NWM2ZGU1OWVjNjZlNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9HcmlkUmVzb2x2ZWRQb3NpdGlvbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL0dyaWRSZXNvbHZlZFBvc2l0aW9uLmNwcApAQCAtNDgsNiAr
NDgsMTYgQEAgc3RhdGljIGlubGluZSBib29sIGlzU3RhcnRTaWRlKEdyaWRQb3NpdGlvblNpZGUg
c2lkZSkKICAgICByZXR1cm4gc2lkZSA9PSBDb2x1bW5TdGFydFNpZGUgfHwgc2lkZSA9PSBSb3dT
dGFydFNpZGU7CiB9CiAKK3N0YXRpYyBpbmxpbmUgR3JpZFBvc2l0aW9uU2lkZSBpbml0aWFsUG9z
aXRpb25TaWRlKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgcmV0
dXJuIGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zID8gQ29sdW1uU3RhcnRTaWRlIDogUm93U3RhcnRT
aWRlOworfQorCitzdGF0aWMgaW5saW5lIEdyaWRQb3NpdGlvblNpZGUgZmluYWxQb3NpdGlvblNp
ZGUoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAgICByZXR1cm4gZGly
ZWN0aW9uID09IEZvckNvbHVtbnMgPyBDb2x1bW5FbmRTaWRlIDogUm93RW5kU2lkZTsKK30KKwog
c3RhdGljIGNvbnN0IE5hbWVkR3JpZExpbmVzTWFwJiBncmlkTGluZXNGb3JTaWRlKGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSwgR3JpZFBvc2l0aW9uU2lkZSBzaWRlKQogewogICAgIHJldHVybiBp
c0NvbHVtblNpZGUoc2lkZSkgPyBzdHlsZS5uYW1lZEdyaWRDb2x1bW5MaW5lcygpIDogc3R5bGUu
bmFtZWRHcmlkUm93TGluZXMoKTsKQEAgLTY0LDM0ICs3NCwzMCBAQCBib29sIEdyaWRSZXNvbHZl
ZFBvc2l0aW9uOjppc05vbkV4aXN0ZW50TmFtZWRMaW5lT3JBcmVhKGNvbnN0IFN0cmluZyYgbGlu
ZU5hbWUsCiAgICAgcmV0dXJuICFncmlkTGluZU5hbWVzLmNvbnRhaW5zKGltcGxpY2l0TmFtZWRH
cmlkTGluZUZvclNpZGUobGluZU5hbWUsIHNpZGUpKSAmJiAhZ3JpZExpbmVOYW1lcy5jb250YWlu
cyhsaW5lTmFtZSk7CiB9CiAKLWJvb2wgR3JpZFVucmVzb2x2ZWRTcGFuOjpyZXF1aXJlc0F1dG9Q
bGFjZW1lbnQoKSBjb25zdAotewotICAgIHJldHVybiBtX2luaXRpYWxQb3NpdGlvbi5zaG91bGRC
ZVJlc29sdmVkQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24oKSAmJiBtX2ZpbmFsUG9zaXRpb24uc2hv
dWxkQmVSZXNvbHZlZEFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKCk7Ci19Ci0KLXZvaWQgR3JpZFVu
cmVzb2x2ZWRTcGFuOjphZGp1c3RHcmlkUG9zaXRpb25zRnJvbVN0eWxlKGNvbnN0IFJlbmRlclN0
eWxlJiBncmlkQ29udGFpbmVyU3R5bGUpCitzdGF0aWMgdm9pZCBhZGp1c3RHcmlkUG9zaXRpb25z
RnJvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBncmlkQ29udGFpbmVyU3R5bGUsIGNvbnN0IFJl
bmRlckJveCYgZ3JpZEl0ZW0sIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24sIEdy
aWRQb3NpdGlvbiYgaW5pdGlhbFBvc2l0aW9uLCBHcmlkUG9zaXRpb24mIGZpbmFsUG9zaXRpb24p
CiB7Ci0gICAgQVNTRVJUKGlzQ29sdW1uU2lkZShtX2luaXRpYWxQb3NpdGlvblNpZGUpID09IGlz
Q29sdW1uU2lkZShtX2ZpbmFsUG9zaXRpb25TaWRlKSk7CisgICAgaW5pdGlhbFBvc2l0aW9uID0g
KGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKSA/IGdyaWRJdGVtLnN0eWxlKCkuZ3JpZEl0ZW1Db2x1
bW5TdGFydCgpIDogZ3JpZEl0ZW0uc3R5bGUoKS5ncmlkSXRlbVJvd1N0YXJ0KCk7CisgICAgZmlu
YWxQb3NpdGlvbiA9IChkaXJlY3Rpb24gPT0gRm9yQ29sdW1ucykgPyBncmlkSXRlbS5zdHlsZSgp
LmdyaWRJdGVtQ29sdW1uRW5kKCkgOiBncmlkSXRlbS5zdHlsZSgpLmdyaWRJdGVtUm93RW5kKCk7
CiAKICAgICAvLyBXZSBtdXN0IGhhbmRsZSB0aGUgcGxhY2VtZW50IGVycm9yIGhhbmRsaW5nIGNv
ZGUgaGVyZSBpbnN0ZWFkIG9mIGluIHRoZSBTdHlsZUFkanVzdGVyIGJlY2F1c2Ugd2UgZG9uJ3Qg
d2FudCB0bwogICAgIC8vIG92ZXJ3cml0ZSB0aGUgc3BlY2lmaWVkIHZhbHVlcy4KLSAgICBpZiAo
bV9pbml0aWFsUG9zaXRpb24uaXNTcGFuKCkgJiYgbV9maW5hbFBvc2l0aW9uLmlzU3BhbigpKQot
ICAgICAgICBtX2ZpbmFsUG9zaXRpb24uc2V0QXV0b1Bvc2l0aW9uKCk7CisgICAgaWYgKGluaXRp
YWxQb3NpdGlvbi5pc1NwYW4oKSAmJiBmaW5hbFBvc2l0aW9uLmlzU3BhbigpKQorICAgICAgICBm
aW5hbFBvc2l0aW9uLnNldEF1dG9Qb3NpdGlvbigpOwogCiAgICAgLy8gVHJ5IHRvIGVhcmx5IGRl
dGVjdCB0aGUgY2FzZSBvZiBub24gZXhpc3RpbmcgbmFtZWQgZ3JpZCBsaW5lcy4gVGhpcyB3YXkg
d2UgY291bGQgYXNzdW1lIGxhdGVyIHRoYXQKICAgICAvLyBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6
cmVzb2x2ZUdyaXNQb3NpdGlvbkZyb21TdHlsZSgpIHdvbid0IHJlcXVpcmUgdGhlIGF1dG9wbGFj
ZW1lbnQgdG8gcnVuLCBpLmUuLCBpdCdsbCBhbHdheXMgcmV0dXJuIGEKICAgICAvLyB2YWxpZCBy
ZXNvbHZlZCBwb3NpdGlvbi4KLSAgICBpZiAobV9pbml0aWFsUG9zaXRpb24uaXNOYW1lZEdyaWRB
cmVhKCkgJiYgR3JpZFJlc29sdmVkUG9zaXRpb246OmlzTm9uRXhpc3RlbnROYW1lZExpbmVPckFy
ZWEobV9pbml0aWFsUG9zaXRpb24ubmFtZWRHcmlkTGluZSgpLCBncmlkQ29udGFpbmVyU3R5bGUs
IG1faW5pdGlhbFBvc2l0aW9uU2lkZSkpCi0gICAgICAgIG1faW5pdGlhbFBvc2l0aW9uLnNldEF1
dG9Qb3NpdGlvbigpOworICAgIGlmIChpbml0aWFsUG9zaXRpb24uaXNOYW1lZEdyaWRBcmVhKCkg
JiYgR3JpZFJlc29sdmVkUG9zaXRpb246OmlzTm9uRXhpc3RlbnROYW1lZExpbmVPckFyZWEoaW5p
dGlhbFBvc2l0aW9uLm5hbWVkR3JpZExpbmUoKSwgZ3JpZENvbnRhaW5lclN0eWxlLCBpbml0aWFs
UG9zaXRpb25TaWRlKGRpcmVjdGlvbikpKQorICAgICAgICBpbml0aWFsUG9zaXRpb24uc2V0QXV0
b1Bvc2l0aW9uKCk7CiAKLSAgICBpZiAobV9maW5hbFBvc2l0aW9uLmlzTmFtZWRHcmlkQXJlYSgp
ICYmIEdyaWRSZXNvbHZlZFBvc2l0aW9uOjppc05vbkV4aXN0ZW50TmFtZWRMaW5lT3JBcmVhKG1f
ZmluYWxQb3NpdGlvbi5uYW1lZEdyaWRMaW5lKCksIGdyaWRDb250YWluZXJTdHlsZSwgbV9maW5h
bFBvc2l0aW9uU2lkZSkpCi0gICAgICAgIG1fZmluYWxQb3NpdGlvbi5zZXRBdXRvUG9zaXRpb24o
KTsKKyAgICBpZiAoZmluYWxQb3NpdGlvbi5pc05hbWVkR3JpZEFyZWEoKSAmJiBHcmlkUmVzb2x2
ZWRQb3NpdGlvbjo6aXNOb25FeGlzdGVudE5hbWVkTGluZU9yQXJlYShmaW5hbFBvc2l0aW9uLm5h
bWVkR3JpZExpbmUoKSwgZ3JpZENvbnRhaW5lclN0eWxlLCBmaW5hbFBvc2l0aW9uU2lkZShkaXJl
Y3Rpb24pKSkKKyAgICAgICAgZmluYWxQb3NpdGlvbi5zZXRBdXRvUG9zaXRpb24oKTsKIAogICAg
IC8vIElmIHRoZSBncmlkIGl0ZW0gaGFzIGFuIGF1dG9tYXRpYyBwb3NpdGlvbiBhbmQgYSBncmlk
IHNwYW4gZm9yIGEgbmFtZWQgbGluZSBpbiBhIGdpdmVuIGRpbWVuc2lvbiwgaW5zdGVhZCB0cmVh
dCB0aGUgZ3JpZCBzcGFuIGFzIG9uZS4KLSAgICBpZiAobV9pbml0aWFsUG9zaXRpb24uaXNBdXRv
KCkgJiYgbV9maW5hbFBvc2l0aW9uLmlzU3BhbigpICYmICFtX2ZpbmFsUG9zaXRpb24ubmFtZWRH
cmlkTGluZSgpLmlzTnVsbCgpKQotICAgICAgICBtX2ZpbmFsUG9zaXRpb24uc2V0U3BhblBvc2l0
aW9uKDEsIFN0cmluZygpKTsKLSAgICBpZiAobV9maW5hbFBvc2l0aW9uLmlzQXV0bygpICYmIG1f
aW5pdGlhbFBvc2l0aW9uLmlzU3BhbigpICYmICFtX2luaXRpYWxQb3NpdGlvbi5uYW1lZEdyaWRM
aW5lKCkuaXNOdWxsKCkpCi0gICAgICAgIG1faW5pdGlhbFBvc2l0aW9uLnNldFNwYW5Qb3NpdGlv
bigxLCBTdHJpbmcoKSk7CisgICAgaWYgKGluaXRpYWxQb3NpdGlvbi5pc0F1dG8oKSAmJiBmaW5h
bFBvc2l0aW9uLmlzU3BhbigpICYmICFmaW5hbFBvc2l0aW9uLm5hbWVkR3JpZExpbmUoKS5pc051
bGwoKSkKKyAgICAgICAgZmluYWxQb3NpdGlvbi5zZXRTcGFuUG9zaXRpb24oMSwgU3RyaW5nKCkp
OworICAgIGlmIChmaW5hbFBvc2l0aW9uLmlzQXV0bygpICYmIGluaXRpYWxQb3NpdGlvbi5pc1Nw
YW4oKSAmJiAhaW5pdGlhbFBvc2l0aW9uLm5hbWVkR3JpZExpbmUoKS5pc051bGwoKSkKKyAgICAg
ICAgaW5pdGlhbFBvc2l0aW9uLnNldFNwYW5Qb3NpdGlvbigxLCBTdHJpbmcoKSk7CiB9CiAKIHVu
c2lnbmVkIEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpleHBsaWNpdEdyaWRDb2x1bW5Db3VudChjb25z
dCBSZW5kZXJTdHlsZSYgZ3JpZENvbnRhaW5lclN0eWxlKQpAQCAtMTMzLDcgKzEzOSw3IEBAIHN0
YXRpYyBHcmlkUmVzb2x2ZWRQb3NpdGlvbiByZXNvbHZlTmFtZWRHcmlkTGluZVBvc2l0aW9uRnJv
bVN0eWxlKGNvbnN0IFJlbmRlclN0CiBzdGF0aWMgR3JpZFNwYW4gcmVzb2x2ZVJvd1N0YXJ0Q29s
dW1uU3RhcnROYW1lZEdyaWRMaW5lUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbihjb25z
dCBHcmlkUmVzb2x2ZWRQb3NpdGlvbiYgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCBjb25zdCBH
cmlkUG9zaXRpb24mIHBvc2l0aW9uLCBjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBncmlkTGluZXMp
CiB7CiAgICAgaWYgKCFyZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24udG9JbnQoKSkKLSAgICAgICAg
cmV0dXJuIEdyaWRTcGFuKHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbiwgcmVzb2x2ZWRPcHBvc2l0
ZVBvc2l0aW9uLm5leHQoKSk7CisgICAgICAgIHJldHVybiBHcmlkU3Bhbjo6ZGVmaW5pdGVHcmlk
U3BhbihyZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24sIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbi5u
ZXh0KCkpOwogCiAgICAgdW5zaWduZWQgZmlyc3RMaW5lQmVmb3JlUG9zaXRpb25JbmRleCA9IDA7
CiAgICAgYXV0byBmaXJzdExpbmVCZWZvcmVQb3NpdGlvbiA9IHN0ZDo6bG93ZXJfYm91bmQoZ3Jp
ZExpbmVzLmJlZ2luKCksIGdyaWRMaW5lcy5lbmQoKSwgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9u
LnRvSW50KCkpOwpAQCAtMTQ1LDcgKzE1MSw3IEBAIHN0YXRpYyBHcmlkU3BhbiByZXNvbHZlUm93
U3RhcnRDb2x1bW5TdGFydE5hbWVkR3JpZExpbmVQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvCiAg
ICAgR3JpZFJlc29sdmVkUG9zaXRpb24gcmVzb2x2ZWRHcmlkTGluZVBvc2l0aW9uID0gR3JpZFJl
c29sdmVkUG9zaXRpb24oZ3JpZExpbmVzW2dyaWRMaW5lSW5kZXhdKTsKICAgICBpZiAocmVzb2x2
ZWRHcmlkTGluZVBvc2l0aW9uID49IHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbikKICAgICAgICAg
cmVzb2x2ZWRHcmlkTGluZVBvc2l0aW9uID0gcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLnByZXYo
KTsKLSAgICByZXR1cm4gR3JpZFNwYW4oc3RkOjptaW48R3JpZFJlc29sdmVkUG9zaXRpb24+KHJl
c29sdmVkR3JpZExpbmVQb3NpdGlvbiwgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uKSwgcmVzb2x2
ZWRPcHBvc2l0ZVBvc2l0aW9uKTsKKyAgICByZXR1cm4gR3JpZFNwYW46OmRlZmluaXRlR3JpZFNw
YW4oc3RkOjptaW48R3JpZFJlc29sdmVkUG9zaXRpb24+KHJlc29sdmVkR3JpZExpbmVQb3NpdGlv
biwgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uKSwgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uKTsK
IH0KIAogc3RhdGljIEdyaWRTcGFuIHJlc29sdmVSb3dFbmRDb2x1bW5FbmROYW1lZEdyaWRMaW5l
UG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbihjb25zdCBHcmlkUmVzb2x2ZWRQb3NpdGlv
biYgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCBjb25zdCBHcmlkUG9zaXRpb24mIHBvc2l0aW9u
LCBjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBncmlkTGluZXMpCkBAIC0xNjAsNyArMTY2LDcgQEAg
c3RhdGljIEdyaWRTcGFuIHJlc29sdmVSb3dFbmRDb2x1bW5FbmROYW1lZEdyaWRMaW5lUG9zaXRp
b25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGkKICAgICBHcmlkUmVzb2x2ZWRQb3NpdGlvbiByZXNvbHZl
ZEdyaWRMaW5lUG9zaXRpb24gPSBncmlkTGluZXNbZ3JpZExpbmVJbmRleF07CiAgICAgaWYgKHJl
c29sdmVkR3JpZExpbmVQb3NpdGlvbiA8PSByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24pCiAgICAg
ICAgIHJlc29sdmVkR3JpZExpbmVQb3NpdGlvbiA9IHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbi5u
ZXh0KCk7Ci0gICAgcmV0dXJuIEdyaWRTcGFuKHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbiwgcmVz
b2x2ZWRHcmlkTGluZVBvc2l0aW9uKTsKKyAgICByZXR1cm4gR3JpZFNwYW46OmRlZmluaXRlR3Jp
ZFNwYW4ocmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCByZXNvbHZlZEdyaWRMaW5lUG9zaXRpb24p
OwogfQogCiBzdGF0aWMgR3JpZFNwYW4gcmVzb2x2ZU5hbWVkR3JpZExpbmVQb3NpdGlvbkFnYWlu
c3RPcHBvc2l0ZVBvc2l0aW9uKGNvbnN0IFJlbmRlclN0eWxlJiBncmlkQ29udGFpbmVyU3R5bGUs
IGNvbnN0IEdyaWRSZXNvbHZlZFBvc2l0aW9uJiByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24sIGNv
bnN0IEdyaWRQb3NpdGlvbiYgcG9zaXRpb24sIEdyaWRQb3NpdGlvblNpZGUgc2lkZSkKQEAgLTE3
Nyw4ICsxODMsOCBAQCBzdGF0aWMgR3JpZFNwYW4gcmVzb2x2ZU5hbWVkR3JpZExpbmVQb3NpdGlv
bkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKGNvbnN0IFJlbmRlcgogICAgIC8vIFNlZSBodHRwOi8v
bGlzdHMudzMub3JnL0FyY2hpdmVzL1B1YmxpYy93d3ctc3R5bGUvMjAxM0p1bi8wMzk0Lmh0bWwu
CiAgICAgaWYgKGl0ID09IGdyaWRMaW5lc05hbWVzLmVuZCgpKSB7CiAgICAgICAgIGlmIChpc1N0
YXJ0U2lkZShzaWRlKSAmJiByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24udG9JbnQoKSkKLSAgICAg
ICAgICAgIHJldHVybiBHcmlkU3BhbihyZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24ucHJldigpLCBy
ZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24pOwotICAgICAgICByZXR1cm4gR3JpZFNwYW4ocmVzb2x2
ZWRPcHBvc2l0ZVBvc2l0aW9uLCByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24ubmV4dCgpKTsKKyAg
ICAgICAgICAgIHJldHVybiBHcmlkU3Bhbjo6ZGVmaW5pdGVHcmlkU3BhbihyZXNvbHZlZE9wcG9z
aXRlUG9zaXRpb24ucHJldigpLCByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24pOworICAgICAgICBy
ZXR1cm4gR3JpZFNwYW46OmRlZmluaXRlR3JpZFNwYW4ocmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9u
LCByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24ubmV4dCgpKTsKICAgICB9CiAKICAgICBpZiAoc2lk
ZSA9PSBSb3dTdGFydFNpZGUgfHwgc2lkZSA9PSBDb2x1bW5TdGFydFNpZGUpCkBAIC0xOTEsOCAr
MTk3LDggQEAgc3RhdGljIEdyaWRTcGFuIHJlc29sdmVHcmlkUG9zaXRpb25BZ2FpbnN0T3Bwb3Np
dGVQb3NpdGlvbihjb25zdCBSZW5kZXJTdHlsZSYgZ3IKIHsKICAgICBpZiAocG9zaXRpb24uaXNB
dXRvKCkpIHsKICAgICAgICAgaWYgKGlzU3RhcnRTaWRlKHNpZGUpICYmIHJlc29sdmVkT3Bwb3Np
dGVQb3NpdGlvbi50b0ludCgpKQotICAgICAgICAgICAgcmV0dXJuIEdyaWRTcGFuKHJlc29sdmVk
T3Bwb3NpdGVQb3NpdGlvbi5wcmV2KCksIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbik7Ci0gICAg
ICAgIHJldHVybiBHcmlkU3BhbihyZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24sIHJlc29sdmVkT3Bw
b3NpdGVQb3NpdGlvbi5uZXh0KCkpOworICAgICAgICAgICAgcmV0dXJuIEdyaWRTcGFuOjpkZWZp
bml0ZUdyaWRTcGFuKHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbi5wcmV2KCksIHJlc29sdmVkT3Bw
b3NpdGVQb3NpdGlvbik7CisgICAgICAgIHJldHVybiBHcmlkU3Bhbjo6ZGVmaW5pdGVHcmlkU3Bh
bihyZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24sIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbi5uZXh0
KCkpOwogICAgIH0KIAogICAgIEFTU0VSVChwb3NpdGlvbi5pc1NwYW4oKSk7CkBAIC0yMDgsMzAg
KzIxNCwzMiBAQCBzdGF0aWMgR3JpZFNwYW4gcmVzb2x2ZUdyaWRQb3NpdGlvbkFnYWluc3RPcHBv
c2l0ZVBvc2l0aW9uKGNvbnN0IFJlbmRlclN0eWxlJiBncgogICAgIHVuc2lnbmVkIHBvc2l0aW9u
T2Zmc2V0ID0gcG9zaXRpb24uc3BhblBvc2l0aW9uKCk7CiAgICAgaWYgKGlzU3RhcnRTaWRlKHNp
ZGUpKSB7CiAgICAgICAgIGlmICghcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLnRvSW50KCkpCi0g
ICAgICAgICAgICByZXR1cm4gR3JpZFNwYW4ocmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCByZXNv
bHZlZE9wcG9zaXRlUG9zaXRpb24ubmV4dCgpKTsKKyAgICAgICAgICAgIHJldHVybiBHcmlkU3Bh
bjo6ZGVmaW5pdGVHcmlkU3BhbihyZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24sIHJlc29sdmVkT3Bw
b3NpdGVQb3NpdGlvbi5uZXh0KCkpOwogCiAgICAgICAgIHVuc2lnbmVkIGluaXRpYWxSZXNvbHZl
ZFBvc2l0aW9uID0gc3RkOjptYXg8aW50PigwLCByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24udG9J
bnQoKSAtIHBvc2l0aW9uT2Zmc2V0KTsKLSAgICAgICAgcmV0dXJuIEdyaWRTcGFuKGluaXRpYWxS
ZXNvbHZlZFBvc2l0aW9uLCByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24pOworICAgICAgICByZXR1
cm4gR3JpZFNwYW46OmRlZmluaXRlR3JpZFNwYW4oaW5pdGlhbFJlc29sdmVkUG9zaXRpb24sIHJl
c29sdmVkT3Bwb3NpdGVQb3NpdGlvbik7CiAgICAgfQogCi0gICAgcmV0dXJuIEdyaWRTcGFuKHJl
c29sdmVkT3Bwb3NpdGVQb3NpdGlvbiwgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLnRvSW50KCkg
KyBwb3NpdGlvbk9mZnNldCk7CisgICAgcmV0dXJuIEdyaWRTcGFuOjpkZWZpbml0ZUdyaWRTcGFu
KHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbiwgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLnRvSW50
KCkgKyBwb3NpdGlvbk9mZnNldCk7CiB9CiAKIEdyaWRTcGFuIEdyaWRSZXNvbHZlZFBvc2l0aW9u
OjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21BdXRvUGxhY2VtZW50UG9zaXRpb24oY29uc3QgUmVu
ZGVyU3R5bGUmIGdyaWRDb250YWluZXJTdHlsZSwgY29uc3QgUmVuZGVyQm94JiBncmlkSXRlbSwg
R3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgR3JpZFJlc29sdmVkUG9z
aXRpb24mIHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uKQogewotICAgIEdyaWRVbnJlc29sdmVkU3Bh
biB1bnJlc29sdmVkU3BhbiA9IHVucmVzb2x2ZWRTcGFuRnJvbVN0eWxlKGdyaWRDb250YWluZXJT
dHlsZSwgZ3JpZEl0ZW0sIGRpcmVjdGlvbik7CisgICAgR3JpZFBvc2l0aW9uIGluaXRpYWxQb3Np
dGlvbiwgZmluYWxQb3NpdGlvbjsKKyAgICBhZGp1c3RHcmlkUG9zaXRpb25zRnJvbVN0eWxlKGdy
aWRDb250YWluZXJTdHlsZSwgZ3JpZEl0ZW0sIGRpcmVjdGlvbiwgaW5pdGlhbFBvc2l0aW9uLCBm
aW5hbFBvc2l0aW9uKTsKIAorICAgIEdyaWRQb3NpdGlvblNpZGUgZmluYWxTaWRlID0gZmluYWxQ
b3NpdGlvblNpZGUoZGlyZWN0aW9uKTsKICAgICAvLyBUaGlzIG1ldGhvZCB3aWxsIG9ubHkgYmUg
dXNlZCB3aGVuIGJvdGggcG9zaXRpb25zIG5lZWQgdG8gYmUgcmVzb2x2ZWQgYWdhaW5zdCB0aGUg
b3Bwb3NpdGUgb25lLgotICAgIEFTU0VSVCh1bnJlc29sdmVkU3Bhbi5yZXF1aXJlc0F1dG9QbGFj
ZW1lbnQoKSk7CisgICAgQVNTRVJUKGluaXRpYWxQb3NpdGlvbi5zaG91bGRCZVJlc29sdmVkQWdh
aW5zdE9wcG9zaXRlUG9zaXRpb24oKSAmJiBmaW5hbFBvc2l0aW9uLnNob3VsZEJlUmVzb2x2ZWRB
Z2FpbnN0T3Bwb3NpdGVQb3NpdGlvbigpKTsKIAogICAgIEdyaWRSZXNvbHZlZFBvc2l0aW9uIHJl
c29sdmVkRmluYWxQb3NpdGlvbiA9IHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uLm5leHQoKTsKIAot
ICAgIGlmICh1bnJlc29sdmVkU3Bhbi5pbml0aWFsUG9zaXRpb24oKS5pc1NwYW4oKSkKLSAgICAg
ICAgcmV0dXJuIHJlc29sdmVHcmlkUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbihncmlk
Q29udGFpbmVyU3R5bGUsIHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uLCB1bnJlc29sdmVkU3Bhbi5p
bml0aWFsUG9zaXRpb24oKSwgdW5yZXNvbHZlZFNwYW4uZmluYWxQb3NpdGlvblNpZGUoKSk7Ci0g
ICAgaWYgKHVucmVzb2x2ZWRTcGFuLmZpbmFsUG9zaXRpb24oKS5pc1NwYW4oKSkKLSAgICAgICAg
cmV0dXJuIHJlc29sdmVHcmlkUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbihncmlkQ29u
dGFpbmVyU3R5bGUsIHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uLCB1bnJlc29sdmVkU3Bhbi5maW5h
bFBvc2l0aW9uKCksIHVucmVzb2x2ZWRTcGFuLmZpbmFsUG9zaXRpb25TaWRlKCkpOworICAgIGlm
IChpbml0aWFsUG9zaXRpb24uaXNTcGFuKCkpCisgICAgICAgIHJldHVybiByZXNvbHZlR3JpZFBv
c2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24oZ3JpZENvbnRhaW5lclN0eWxlLCByZXNvbHZl
ZEluaXRpYWxQb3NpdGlvbiwgaW5pdGlhbFBvc2l0aW9uLCBmaW5hbFNpZGUpOworICAgIGlmIChm
aW5hbFBvc2l0aW9uLmlzU3BhbigpKQorICAgICAgICByZXR1cm4gcmVzb2x2ZUdyaWRQb3NpdGlv
bkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKGdyaWRDb250YWluZXJTdHlsZSwgcmVzb2x2ZWRJbml0
aWFsUG9zaXRpb24sIGZpbmFsUG9zaXRpb24sIGZpbmFsU2lkZSk7CiAKLSAgICByZXR1cm4gR3Jp
ZFNwYW4ocmVzb2x2ZWRJbml0aWFsUG9zaXRpb24sIHJlc29sdmVkRmluYWxQb3NpdGlvbik7Cisg
ICAgcmV0dXJuIEdyaWRTcGFuOjpkZWZpbml0ZUdyaWRTcGFuKHJlc29sdmVkSW5pdGlhbFBvc2l0
aW9uLCByZXNvbHZlZEZpbmFsUG9zaXRpb24pOwogfQogCiBzdGF0aWMgR3JpZFJlc29sdmVkUG9z
aXRpb24gcmVzb2x2ZUdyaWRQb3NpdGlvbkZyb21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgZ3Jp
ZENvbnRhaW5lclN0eWxlLCBjb25zdCBHcmlkUG9zaXRpb24mIHBvc2l0aW9uLCBHcmlkUG9zaXRp
b25TaWRlIHNpZGUpCkBAIC0yOTEsNDcgKzI5OSw0MCBAQCBzdGF0aWMgR3JpZFJlc29sdmVkUG9z
aXRpb24gcmVzb2x2ZUdyaWRQb3NpdGlvbkZyb21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgZ3Jp
ZAogICAgIHJldHVybiBHcmlkUmVzb2x2ZWRQb3NpdGlvbigwKTsKIH0KIAotR3JpZFVucmVzb2x2
ZWRTcGFuIEdyaWRSZXNvbHZlZFBvc2l0aW9uOjp1bnJlc29sdmVkU3BhbkZyb21TdHlsZShjb25z
dCBSZW5kZXJTdHlsZSYgZ3JpZENvbnRhaW5lclN0eWxlLCBjb25zdCBSZW5kZXJCb3gmIGdyaWRJ
dGVtLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uKQorR3JpZFNwYW4gR3JpZFJl
c29sdmVkUG9zaXRpb246OnJlc29sdmVHcmlkUG9zaXRpb25zRnJvbVN0eWxlKGNvbnN0IFJlbmRl
clN0eWxlJiBncmlkQ29udGFpbmVyU3R5bGUsIGNvbnN0IFJlbmRlckJveCYgZ3JpZEl0ZW0sIEdy
aWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0gICAgR3JpZFBvc2l0aW9uIGlu
aXRpYWxQb3NpdGlvbiA9IChkaXJlY3Rpb24gPT0gRm9yQ29sdW1ucykgPyBncmlkSXRlbS5zdHls
ZSgpLmdyaWRJdGVtQ29sdW1uU3RhcnQoKSA6IGdyaWRJdGVtLnN0eWxlKCkuZ3JpZEl0ZW1Sb3dT
dGFydCgpOwotICAgIGF1dG8gaW5pdGlhbFBvc2l0aW9uU2lkZSA9IChkaXJlY3Rpb24gPT0gRm9y
Q29sdW1ucykgPyBDb2x1bW5TdGFydFNpZGUgOiBSb3dTdGFydFNpZGU7Ci0gICAgR3JpZFBvc2l0
aW9uIGZpbmFsUG9zaXRpb24gPSAoZGlyZWN0aW9uID09IEZvckNvbHVtbnMpID8gZ3JpZEl0ZW0u
c3R5bGUoKS5ncmlkSXRlbUNvbHVtbkVuZCgpIDogZ3JpZEl0ZW0uc3R5bGUoKS5ncmlkSXRlbVJv
d0VuZCgpOwotICAgIGF1dG8gZmluYWxQb3NpdGlvblNpZGUgPSAoZGlyZWN0aW9uID09IEZvckNv
bHVtbnMpID8gQ29sdW1uRW5kU2lkZSA6IFJvd0VuZFNpZGU7CisgICAgR3JpZFBvc2l0aW9uIGlu
aXRpYWxQb3NpdGlvbiwgZmluYWxQb3NpdGlvbjsKKyAgICBhZGp1c3RHcmlkUG9zaXRpb25zRnJv
bVN0eWxlKGdyaWRDb250YWluZXJTdHlsZSwgZ3JpZEl0ZW0sIGRpcmVjdGlvbiwgaW5pdGlhbFBv
c2l0aW9uLCBmaW5hbFBvc2l0aW9uKTsKIAotICAgIEdyaWRVbnJlc29sdmVkU3BhbiB1bnJlc29s
dmVkU3Bhbihpbml0aWFsUG9zaXRpb24sIGluaXRpYWxQb3NpdGlvblNpZGUsIGZpbmFsUG9zaXRp
b24sIGZpbmFsUG9zaXRpb25TaWRlKTsKLSAgICB1bnJlc29sdmVkU3Bhbi5hZGp1c3RHcmlkUG9z
aXRpb25zRnJvbVN0eWxlKGdyaWRDb250YWluZXJTdHlsZSk7Ci0KLSAgICByZXR1cm4gdW5yZXNv
bHZlZFNwYW47Ci19CisgICAgR3JpZFBvc2l0aW9uU2lkZSBpbml0aWFsU2lkZSA9IGluaXRpYWxQ
b3NpdGlvblNpZGUoZGlyZWN0aW9uKTsKKyAgICBHcmlkUG9zaXRpb25TaWRlIGZpbmFsU2lkZSA9
IGZpbmFsUG9zaXRpb25TaWRlKGRpcmVjdGlvbik7CiAKLUdyaWRTcGFuIEdyaWRSZXNvbHZlZFBv
c2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21TdHlsZShjb25zdCBHcmlkVW5yZXNvbHZl
ZFNwYW4mIHVucmVzb2x2ZWRTcGFuLCBjb25zdCBSZW5kZXJTdHlsZSYgZ3JpZENvbnRhaW5lclN0
eWxlKQotewotICAgIEFTU0VSVCghdW5yZXNvbHZlZFNwYW4ucmVxdWlyZXNBdXRvUGxhY2VtZW50
KCkpOwotCi0gICAgLy8gV2UgbXVzdCBjcmVhdGUgdGhlIEdyaWRTcGFuIHVzaW5nIGZpbmFsUG9z
aXRpb24ucHJldigpIGJlY2F1c2UgR3JpZFNwYW4gc3RvcmVzIGNlbGwgaW5kZXhlcyBhbmQKLSAg
ICAvLyBhbiBpdGVtIGZpbmlzaGluZyBvbiB0aGUgTi10aCBsaW5lIGJlbG9uZ3MgdG8gdGhlIE4t
MS10aCBjZWxsLgorICAgIGlmIChpbml0aWFsUG9zaXRpb24uc2hvdWxkQmVSZXNvbHZlZEFnYWlu
c3RPcHBvc2l0ZVBvc2l0aW9uKCkgJiYgZmluYWxQb3NpdGlvbi5zaG91bGRCZVJlc29sdmVkQWdh
aW5zdE9wcG9zaXRlUG9zaXRpb24oKSkgeworICAgICAgICAvLyBXZSBjYW4ndCBnZXQgb3VyIGdy
aWQgcG9zaXRpb25zIHdpdGhvdXQgcnVubmluZyB0aGUgYXV0byBwbGFjZW1lbnQgYWxnb3JpdGht
LgorICAgICAgICByZXR1cm4gR3JpZFNwYW46OmluZGVmaW5pdGVHcmlkU3BhbigpOworICAgIH0K
IAotICAgIGlmICh1bnJlc29sdmVkU3Bhbi5pbml0aWFsUG9zaXRpb24oKS5zaG91bGRCZVJlc29s
dmVkQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24oKSkgeworICAgIGlmIChpbml0aWFsUG9zaXRpb24u
c2hvdWxkQmVSZXNvbHZlZEFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKCkpIHsKICAgICAgICAgLy8g
SW5mZXIgdGhlIHBvc2l0aW9uIGZyb20gdGhlIGZpbmFsIHBvc2l0aW9uICgnYXV0byAvIDEnIG9y
ICdzcGFuIDIgLyAzJyBjYXNlKS4KLSAgICAgICAgYXV0byBmaW5hbFJlc29sdmVkUG9zaXRpb24g
PSByZXNvbHZlR3JpZFBvc2l0aW9uRnJvbVN0eWxlKGdyaWRDb250YWluZXJTdHlsZSwgdW5yZXNv
bHZlZFNwYW4uZmluYWxQb3NpdGlvbigpLCB1bnJlc29sdmVkU3Bhbi5maW5hbFBvc2l0aW9uU2lk
ZSgpKTsKLSAgICAgICAgcmV0dXJuIHJlc29sdmVHcmlkUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQ
b3NpdGlvbihncmlkQ29udGFpbmVyU3R5bGUsIGZpbmFsUmVzb2x2ZWRQb3NpdGlvbiwgdW5yZXNv
bHZlZFNwYW4uaW5pdGlhbFBvc2l0aW9uKCksIHVucmVzb2x2ZWRTcGFuLmluaXRpYWxQb3NpdGlv
blNpZGUoKSk7CisgICAgICAgIGF1dG8gZmluYWxSZXNvbHZlZFBvc2l0aW9uID0gcmVzb2x2ZUdy
aWRQb3NpdGlvbkZyb21TdHlsZShncmlkQ29udGFpbmVyU3R5bGUsIGZpbmFsUG9zaXRpb24sIGZp
bmFsU2lkZSk7CisgICAgICAgIHJldHVybiByZXNvbHZlR3JpZFBvc2l0aW9uQWdhaW5zdE9wcG9z
aXRlUG9zaXRpb24oZ3JpZENvbnRhaW5lclN0eWxlLCBmaW5hbFJlc29sdmVkUG9zaXRpb24sIGlu
aXRpYWxQb3NpdGlvbiwgaW5pdGlhbFNpZGUpOwogICAgIH0KIAotICAgIGlmICh1bnJlc29sdmVk
U3Bhbi5maW5hbFBvc2l0aW9uKCkuc2hvdWxkQmVSZXNvbHZlZEFnYWluc3RPcHBvc2l0ZVBvc2l0
aW9uKCkpIHsKKyAgICBpZiAoZmluYWxQb3NpdGlvbi5zaG91bGRCZVJlc29sdmVkQWdhaW5zdE9w
cG9zaXRlUG9zaXRpb24oKSkgewogICAgICAgICAvLyBJbmZlciBvdXIgcG9zaXRpb24gZnJvbSB0
aGUgaW5pdGlhbCBwb3NpdGlvbiAoJzEgLyBhdXRvJyBvciAnMyAvIHNwYW4gMicgY2FzZSkuCi0g
ICAgICAgIGF1dG8gaW5pdGlhbFJlc29sdmVkUG9zaXRpb24gPSByZXNvbHZlR3JpZFBvc2l0aW9u
RnJvbVN0eWxlKGdyaWRDb250YWluZXJTdHlsZSwgdW5yZXNvbHZlZFNwYW4uaW5pdGlhbFBvc2l0
aW9uKCksIHVucmVzb2x2ZWRTcGFuLmluaXRpYWxQb3NpdGlvblNpZGUoKSk7Ci0gICAgICAgIHJl
dHVybiByZXNvbHZlR3JpZFBvc2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24oZ3JpZENvbnRh
aW5lclN0eWxlLCBpbml0aWFsUmVzb2x2ZWRQb3NpdGlvbiwgdW5yZXNvbHZlZFNwYW4uZmluYWxQ
b3NpdGlvbigpLCB1bnJlc29sdmVkU3Bhbi5maW5hbFBvc2l0aW9uU2lkZSgpKTsKKyAgICAgICAg
YXV0byBpbml0aWFsUmVzb2x2ZWRQb3NpdGlvbiA9IHJlc29sdmVHcmlkUG9zaXRpb25Gcm9tU3R5
bGUoZ3JpZENvbnRhaW5lclN0eWxlLCBpbml0aWFsUG9zaXRpb24sIGluaXRpYWxTaWRlKTsKKyAg
ICAgICAgcmV0dXJuIHJlc29sdmVHcmlkUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbihn
cmlkQ29udGFpbmVyU3R5bGUsIGluaXRpYWxSZXNvbHZlZFBvc2l0aW9uLCBmaW5hbFBvc2l0aW9u
LCBmaW5hbFNpZGUpOwogICAgIH0KIAotICAgIEdyaWRSZXNvbHZlZFBvc2l0aW9uIHJlc29sdmVk
SW5pdGlhbFBvc2l0aW9uID0gcmVzb2x2ZUdyaWRQb3NpdGlvbkZyb21TdHlsZShncmlkQ29udGFp
bmVyU3R5bGUsIHVucmVzb2x2ZWRTcGFuLmluaXRpYWxQb3NpdGlvbigpLCB1bnJlc29sdmVkU3Bh
bi5pbml0aWFsUG9zaXRpb25TaWRlKCkpOwotICAgIEdyaWRSZXNvbHZlZFBvc2l0aW9uIHJlc29s
dmVkRmluYWxQb3NpdGlvbiA9IHJlc29sdmVHcmlkUG9zaXRpb25Gcm9tU3R5bGUoZ3JpZENvbnRh
aW5lclN0eWxlLCB1bnJlc29sdmVkU3Bhbi5maW5hbFBvc2l0aW9uKCksIHVucmVzb2x2ZWRTcGFu
LmZpbmFsUG9zaXRpb25TaWRlKCkpOworICAgIEdyaWRSZXNvbHZlZFBvc2l0aW9uIHJlc29sdmVk
SW5pdGlhbFBvc2l0aW9uID0gcmVzb2x2ZUdyaWRQb3NpdGlvbkZyb21TdHlsZShncmlkQ29udGFp
bmVyU3R5bGUsIGluaXRpYWxQb3NpdGlvbiwgaW5pdGlhbFNpZGUpOworICAgIEdyaWRSZXNvbHZl
ZFBvc2l0aW9uIHJlc29sdmVkRmluYWxQb3NpdGlvbiA9IHJlc29sdmVHcmlkUG9zaXRpb25Gcm9t
U3R5bGUoZ3JpZENvbnRhaW5lclN0eWxlLCBmaW5hbFBvc2l0aW9uLCBmaW5hbFNpZGUpOwogCiAg
ICAgaWYgKHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uID4gcmVzb2x2ZWRGaW5hbFBvc2l0aW9uKQog
ICAgICAgICBzdGQ6OnN3YXAocmVzb2x2ZWRJbml0aWFsUG9zaXRpb24sIHJlc29sdmVkRmluYWxQ
b3NpdGlvbik7CiAgICAgZWxzZSBpZiAocmVzb2x2ZWRJbml0aWFsUG9zaXRpb24gPT0gcmVzb2x2
ZWRGaW5hbFBvc2l0aW9uKQogICAgICAgICByZXNvbHZlZEZpbmFsUG9zaXRpb24gPSByZXNvbHZl
ZEluaXRpYWxQb3NpdGlvbi5uZXh0KCk7CiAKLSAgICByZXR1cm4gR3JpZFNwYW4ocmVzb2x2ZWRJ
bml0aWFsUG9zaXRpb24sIHN0ZDo6bWF4KHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uLCByZXNvbHZl
ZEZpbmFsUG9zaXRpb24pKTsKKyAgICByZXR1cm4gR3JpZFNwYW46OmRlZmluaXRlR3JpZFNwYW4o
cmVzb2x2ZWRJbml0aWFsUG9zaXRpb24sIHN0ZDo6bWF4KHJlc29sdmVkSW5pdGlhbFBvc2l0aW9u
LCByZXNvbHZlZEZpbmFsUG9zaXRpb24pKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0dyaWRSZXNvbHZlZFBv
c2l0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFJlc29sdmVkUG9z
aXRpb24uaAppbmRleCAyYmViMmIyZjE5ZDdjNTU4NjY1OTRjOTQ1NjZlMzJmYzlmNzQ0NzZlLi4z
ZDkxZWVjYjBiY2Q1M2ZkMGUyMTIyYTZmYjUwY2E1YzA2YzIzMjBhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFJlc29sdmVkUG9zaXRpb24uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFJlc29sdmVkUG9zaXRpb24uaApAQCAt
NDYsMzEgKzQ2LDYgQEAgZW51bSBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gewogICAgIEZvclJv
d3MKIH07CiAKLWNsYXNzIEdyaWRVbnJlc29sdmVkU3BhbiB7Ci1wdWJsaWM6Ci0gICAgR3JpZFVu
cmVzb2x2ZWRTcGFuKEdyaWRQb3NpdGlvbiBpbml0aWFsUG9zaXRpb24sIEdyaWRQb3NpdGlvblNp
ZGUgaW5pdGlhbFBvc2l0aW9uU2lkZSwgR3JpZFBvc2l0aW9uIGZpbmFsUG9zaXRpb24sIEdyaWRQ
b3NpdGlvblNpZGUgZmluYWxQb3NpdGlvblNpZGUpCi0gICAgICAgIDogbV9pbml0aWFsUG9zaXRp
b24oaW5pdGlhbFBvc2l0aW9uKQotICAgICAgICAsIG1fZmluYWxQb3NpdGlvbihmaW5hbFBvc2l0
aW9uKQotICAgICAgICAsIG1faW5pdGlhbFBvc2l0aW9uU2lkZShpbml0aWFsUG9zaXRpb25TaWRl
KQotICAgICAgICAsIG1fZmluYWxQb3NpdGlvblNpZGUoZmluYWxQb3NpdGlvblNpZGUpCi0gICAg
ewotICAgIH0KLQotICAgIGNvbnN0IEdyaWRQb3NpdGlvbiYgaW5pdGlhbFBvc2l0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9pbml0aWFsUG9zaXRpb247IH0KLSAgICBjb25zdCBHcmlkUG9zaXRpb24m
IGZpbmFsUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2ZpbmFsUG9zaXRpb247IH0KLSAgICBH
cmlkUG9zaXRpb25TaWRlIGluaXRpYWxQb3NpdGlvblNpZGUoKSBjb25zdCB7IHJldHVybiBtX2lu
aXRpYWxQb3NpdGlvblNpZGU7IH0KLSAgICBHcmlkUG9zaXRpb25TaWRlIGZpbmFsUG9zaXRpb25T
aWRlKCkgY29uc3QgeyByZXR1cm4gbV9maW5hbFBvc2l0aW9uU2lkZTsgfQotCi0gICAgYm9vbCBy
ZXF1aXJlc0F1dG9QbGFjZW1lbnQoKSBjb25zdDsKLSAgICB2b2lkIGFkanVzdEdyaWRQb3NpdGlv
bnNGcm9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIGdyaWRDb250YWluZXJTdHlsZSk7Ci0KLXBy
aXZhdGU6Ci0gICAgR3JpZFBvc2l0aW9uIG1faW5pdGlhbFBvc2l0aW9uOwotICAgIEdyaWRQb3Np
dGlvbiBtX2ZpbmFsUG9zaXRpb247Ci0gICAgR3JpZFBvc2l0aW9uU2lkZSBtX2luaXRpYWxQb3Np
dGlvblNpZGU7Ci0gICAgR3JpZFBvc2l0aW9uU2lkZSBtX2ZpbmFsUG9zaXRpb25TaWRlOwotfTsK
LQogLy8gVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgbGluZSBpbmRleCBpbnRvIG9uZSBvZiB0aGUg
ZGltZW5zaW9ucyBvZiB0aGUgZ3JpZCBhcnJheS4KIC8vIFdyYXBzIGFuIHVuc2lnbmVkIGludGVn
ZXIganVzdCBmb3IgdGhlIHB1cnBvc2Ugb2Yga25vd2luZyB3aGF0IHdlIG1hbmlwdWxhdGUgaW4g
dGhlIGdyaWQgY29kZS4KIGNsYXNzIEdyaWRSZXNvbHZlZFBvc2l0aW9uIHsKQEAgLTEzNyw4ICsx
MTIsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIEdyaWRTcGFuIHJlc29sdmVHcmlk
UG9zaXRpb25zRnJvbUF1dG9QbGFjZW1lbnRQb3NpdGlvbihjb25zdCBSZW5kZXJTdHlsZSYsIGNv
bnN0IFJlbmRlckJveCYsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiwgY29uc3QgR3JpZFJlc29s
dmVkUG9zaXRpb24mKTsKLSAgICBzdGF0aWMgR3JpZFNwYW4gcmVzb2x2ZUdyaWRQb3NpdGlvbnNG
cm9tU3R5bGUoY29uc3QgR3JpZFVucmVzb2x2ZWRTcGFuJiwgY29uc3QgUmVuZGVyU3R5bGUmKTsK
LSAgICBzdGF0aWMgR3JpZFVucmVzb2x2ZWRTcGFuIHVucmVzb2x2ZWRTcGFuRnJvbVN0eWxlKGNv
bnN0IFJlbmRlclN0eWxlJiwgY29uc3QgUmVuZGVyQm94JiwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0
aW9uKTsKKyAgICBzdGF0aWMgR3JpZFNwYW4gcmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9tU3R5bGUo
Y29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJCb3gmLCBHcmlkVHJhY2tTaXppbmdEaXJl
Y3Rpb24pOwogICAgIHN0YXRpYyB1bnNpZ25lZCBleHBsaWNpdEdyaWRDb2x1bW5Db3VudChjb25z
dCBSZW5kZXJTdHlsZSYpOwogICAgIHN0YXRpYyB1bnNpZ25lZCBleHBsaWNpdEdyaWRSb3dDb3Vu
dChjb25zdCBSZW5kZXJTdHlsZSYpOwogICAgIHN0YXRpYyBib29sIGlzTm9uRXhpc3RlbnROYW1l
ZExpbmVPckFyZWEoY29uc3QgU3RyaW5nJiBsaW5lTmFtZSwgY29uc3QgUmVuZGVyU3R5bGUmLCBH
cmlkUG9zaXRpb25TaWRlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271549</attachid>
            <date>2016-02-17 02:54:31 -0800</date>
            <delta_ts>2016-02-17 03:45:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-153868-20160217115410.patch</filename>
            <type>text/plain</type>
            <size>51671</size>
            <attacher name="Manuel Rego Casasnovas">rego</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk1ODA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTJjODI1Nzk5YWE4YWVk
NDY2ZDBjNjI4NTVkYzc5NzgyNjMwN2E3Zi4uNGE0OGQ4NGYwNDk3MDEyMzZkZmFmZWYyMjkxNGYx
MDRiZjIwNzI4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc3IEBACisyMDE2LTAyLTA0ICBNYW51
ZWwgUmVnbyBDYXNhc25vdmFzICA8cmVnb0BpZ2FsaWEuY29tPgorCisgICAgICAgIFtjc3MtZ3Jp
ZF0gR3JpZFNwYW4gcmVmYWN0b3JpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1Mzg2OAorCisgICAgICAgIFJldmlld2VkIGJ5IFNlcmdpbyBWaWxs
YXIgU2VuaW4uCisKKyAgICAgICAgQWRkIG5ldyBlbnVtIHRvIGtub3cgaWYgYSBHcmlkU3BhbiBp
cyBkZWZpbml0ZSBvciBpbmRlZmluaXRlLgorICAgICAgICBUaGF0IHdheSB3ZSBkb24ndCBuZWVk
IEdyaWRVbnJlc29sdmVkU3BhbiBjbGFzcyAod2hpY2ggaXMgcmVtb3ZlZCkuCisgICAgICAgIFdl
IGNhbiBhbHdheXMgaGF2ZSB0d28gR3JpZFNwYW5zIGluIEdyaWRDb29yZGluYXRlLAorICAgICAg
ICBpZiB0aGUgcG9zaXRpb24gaXMgImF1dG8iIHRoZSBHcmlkU3BhbiB3aWxsIGJlIG1hcmtlZCBh
cyBpbmRlZmluaXRlLgorICAgICAgICBUaGlzIHdpbGwgYWxsb3cgaW4gYSBmb2xsb3ctdXAgcGF0
Y2ggdG8gYXZvaWQgcmVwZWF0ZWQgY2FsbHMKKyAgICAgICAgdG8gbWV0aG9kcyB0aGF0IHJlc29s
dmUgcG9zaXRpb25zLgorCisgICAgICAgIE1vc3Qgb3BlcmF0aW9ucyBpbiBHcmlkU3BhbiBhcmUg
cmVzdHJpY3RlZCB0byBkZWZpbml0ZSBHcmlkU3BhbnMgKGFjY2VzcworICAgICAgICB0byBwb3Np
dGlvbnMsIGl0ZXJhdG9yLCBldGMuKS4gRm9yIGluZGVmaW5pdGUgR3JpZFNwYW5zIHdlIG9ubHkg
bmVlZCB0bworICAgICAgICBrbm93IHRoYXQgdGhleSdyZSBpbmRlZmluaXRlLCB3ZSBzaG91bGRu
J3QgdXNlIHRoZSByZXN0IG9mIHRoZSBkYXRhLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8g
Y2hhbmdlIG9mIGJlaGF2aW9yLgorCisgICAgICAgICogY3NzL0NTU0dyaWRUZW1wbGF0ZUFyZWFz
VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c3RyaW5nRm9yUG9zaXRpb24pOgorICAgICAg
ICAqIGNzcy9DU1NQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJz
ZUdyaWRUZW1wbGF0ZUFyZWFzUm93KToKKyAgICAgICAgKiBjc3MvU3R5bGVCdWlsZGVyQ29udmVy
dGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNyZWF0ZUlt
cGxpY2l0TmFtZWRHcmlkTGluZXNGcm9tR3JpZEFyZWEpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJHcmlkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OkdyaWRJdGVyYXRv
cjo6bmV4dEVtcHR5R3JpZEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6Y29t
cHV0ZVVzZWRCcmVhZHRoT2ZHcmlkVHJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdy
aWQ6OnJlc29sdmVDb250ZW50QmFzZWRUcmFja1NpemluZ0Z1bmN0aW9uc0Zvck5vblNwYW5uaW5n
SXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6aW5zZXJ0SXRlbUludG9Hcmlk
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OnBsYWNlSXRlbXNPbkdyaWQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6cG9wdWxhdGVFeHBsaWNpdEdyaWRBbmRPcmRlckl0
ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OnBsYWNlU3BlY2lmaWVkTWFq
b3JBeGlzSXRlbXNPbkdyaWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6cGxhY2VB
dXRvTWFqb3JBeGlzSXRlbU9uR3JpZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpv
ZmZzZXRBbmRCcmVhZHRoRm9yUG9zaXRpb25lZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckdyaWQ6OmdyaWRBcmVhQnJlYWR0aEZvckNoaWxkSW5jbHVkaW5nQWxpZ25tZW50T2Zmc2V0
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpjb2x1bW5BeGlzT2Zmc2V0Rm9yQ2hp
bGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6cm93QXhpc09mZnNldEZvckNoaWxk
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OnBsYWNlQXV0b01ham9yQXhpc0l0ZW1z
T25HcmlkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OmF1dG9QbGFj
ZW1lbnRNaW5vckF4aXNEaXJlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyR3JpZDo6cG9wdWxhdGVHcmlkUG9zaXRpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5k
ZXJpbmcvc3R5bGUvR3JpZENvb3JkaW5hdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRTcGFu
OjpkZWZpbml0ZUdyaWRTcGFuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRTcGFuOjppbmRlZmlu
aXRlR3JpZFNwYW4pOgorICAgICAgICAoV2ViQ29yZTo6R3JpZFNwYW46Om9wZXJhdG9yPT0pOgor
ICAgICAgICAoV2ViQ29yZTo6R3JpZFNwYW46OmludGVnZXJTcGFuKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyaWRTcGFuOjpyZXNvbHZlZEluaXRpYWxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmlkU3Bhbjo6cmVzb2x2ZWRGaW5hbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
aWRTcGFuOjpiZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpHcmlkU3Bhbjo6ZW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyaWRTcGFuOjppc0RlZmluaXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
aWRTcGFuOjpHcmlkU3Bhbik6CisgICAgICAgIChXZWJDb3JlOjpHcmlkQ29vcmRpbmF0ZTo6R3Jp
ZENvb3JkaW5hdGUpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9HcmlkUmVzb2x2ZWRQb3Np
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbml0aWFsUG9zaXRpb25TaWRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OmZpbmFsUG9zaXRpb25TaWRlKToKKyAgICAgICAgKFdlYkNvcmU6OmFkanVz
dEdyaWRQb3NpdGlvbnNGcm9tU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6cmVzb2x2ZVJvd1N0
YXJ0Q29sdW1uU3RhcnROYW1lZEdyaWRMaW5lUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpyZXNvbHZlUm93RW5kQ29sdW1uRW5kTmFtZWRHcmlkTGlu
ZVBvc2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6cmVz
b2x2ZU5hbWVkR3JpZExpbmVQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OnJlc29sdmVHcmlkUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3Np
dGlvbnNGcm9tQXV0b1BsYWNlbWVudFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRS
ZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21TdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjppbXBsaWNpdE5hbWVkR3JpZExpbmVGb3JTaWRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyaWRSZXNvbHZlZFBvc2l0aW9uOjppc05vbkV4aXN0ZW50TmFtZWRMaW5l
T3JBcmVhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnJlc29sdmVOYW1lZEdyaWRMaW5l
UG9zaXRpb25Gcm9tU3R5bGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6cmVzb2x2ZUdy
aWRQb3NpdGlvbkZyb21TdHlsZSk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3N0eWxl
L0dyaWRSZXNvbHZlZFBvc2l0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpHcmlkUmVzb2x2ZWRQ
b3NpdGlvbjo6R3JpZFJlc29sdmVkUG9zaXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JpZFJlc29sdmVkUG9zaXRpb246Om9wZXJhdG9yKik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6b3BlcmF0b3IrKyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6b3BlcmF0b3I9PSk6IERlbGV0ZWQu
CisKIDIwMTYtMDEtMjkgIE1hbnVlbCBSZWdvIENhc2Fzbm92YXMgIDxyZWdvQGlnYWxpYS5jb20+
CiAKICAgICAgICAgW2Nzcy1ncmlkXSBTdG9yZSBsaW5lcyBpbnN0ZWFkIG9mIHRyYWNrcyBpbiBH
cmlkUmVzb2x2ZWRQb3NpdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dy
aWRUZW1wbGF0ZUFyZWFzVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyaWRUZW1w
bGF0ZUFyZWFzVmFsdWUuY3BwCmluZGV4IGQ2ODM5MGMzZWU1ZTdiNmIyOTM4MjA3N2RjY2I2YzA1
M2FlN2I2YTguLmI1ZGVmYzE1MWY4ODZkMTg3ZjY0ZTI4ZTBiN2E3OGZjYTIxMWFmYWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmlkVGVtcGxhdGVBcmVhc1ZhbHVlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS5jcHAKQEAg
LTU1LDEzICs1NSwxMyBAQCBzdGF0aWMgU3RyaW5nIHN0cmluZ0ZvclBvc2l0aW9uKGNvbnN0IE5h
bWVkR3JpZEFyZWFNYXAmIGdyaWRBcmVhTWFwLCBzaXplX3Qgcm93LAogCiAgICAgZm9yIChjb25z
dCBhdXRvJiBpdCA6IGdyaWRBcmVhTWFwKSB7CiAgICAgICAgIGNvbnN0IEdyaWRDb29yZGluYXRl
JiBjb29yZGluYXRlID0gaXQudmFsdWU7Ci0gICAgICAgIGlmIChyb3cgPj0gY29vcmRpbmF0ZS5y
b3dzLnJlc29sdmVkSW5pdGlhbFBvc2l0aW9uLnRvSW50KCkgJiYgcm93IDwgY29vcmRpbmF0ZS5y
b3dzLnJlc29sdmVkRmluYWxQb3NpdGlvbi50b0ludCgpKQorICAgICAgICBpZiAocm93ID49IGNv
b3JkaW5hdGUucm93cy5yZXNvbHZlZEluaXRpYWxQb3NpdGlvbigpLnRvSW50KCkgJiYgcm93IDwg
Y29vcmRpbmF0ZS5yb3dzLnJlc29sdmVkRmluYWxQb3NpdGlvbigpLnRvSW50KCkpCiAgICAgICAg
ICAgICBjYW5kaWRhdGVzLmFwcGVuZChpdC5rZXkpOwogICAgIH0KIAogICAgIGZvciAoY29uc3Qg
YXV0byYgaXQgOiBncmlkQXJlYU1hcCkgewogICAgICAgICBjb25zdCBHcmlkQ29vcmRpbmF0ZSYg
Y29vcmRpbmF0ZSA9IGl0LnZhbHVlOwotICAgICAgICBpZiAoY29sdW1uID49IGNvb3JkaW5hdGUu
Y29sdW1ucy5yZXNvbHZlZEluaXRpYWxQb3NpdGlvbi50b0ludCgpICYmIGNvbHVtbiA8IGNvb3Jk
aW5hdGUuY29sdW1ucy5yZXNvbHZlZEZpbmFsUG9zaXRpb24udG9JbnQoKSAmJiBjYW5kaWRhdGVz
LmNvbnRhaW5zKGl0LmtleSkpCisgICAgICAgIGlmIChjb2x1bW4gPj0gY29vcmRpbmF0ZS5jb2x1
bW5zLnJlc29sdmVkSW5pdGlhbFBvc2l0aW9uKCkudG9JbnQoKSAmJiBjb2x1bW4gPCBjb29yZGlu
YXRlLmNvbHVtbnMucmVzb2x2ZWRGaW5hbFBvc2l0aW9uKCkudG9JbnQoKSAmJiBjYW5kaWRhdGVz
LmNvbnRhaW5zKGl0LmtleSkpCiAgICAgICAgICAgICByZXR1cm4gaXQua2V5OwogICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUGFyc2VyLmNwcAppbmRleCA2Y2RiOTQ0MGIyMmNmZGZhNmZjZDAwMTk5Mjdj
NDk0N2M2ZGExYjU5Li5mOGM1Zjk2MTdmMjdjNDA1MTE3YzVlY2JhODQ5NWNlNTI0ODBiZGI0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcApAQCAtNjIwMiwyNCArNjIwMiwyNCBAQCBib29sIENT
U1BhcnNlcjo6cGFyc2VHcmlkVGVtcGxhdGVBcmVhc1JvdyhOYW1lZEdyaWRBcmVhTWFwJiBncmlk
QXJlYU1hcCwgY29uc3QgdQogCiAgICAgICAgIGF1dG8gZ3JpZEFyZWFJdGVyYXRvciA9IGdyaWRB
cmVhTWFwLmZpbmQoZ3JpZEFyZWFOYW1lKTsKICAgICAgICAgaWYgKGdyaWRBcmVhSXRlcmF0b3Ig
PT0gZ3JpZEFyZWFNYXAuZW5kKCkpCi0gICAgICAgICAgICBncmlkQXJlYU1hcC5hZGQoZ3JpZEFy
ZWFOYW1lLCBHcmlkQ29vcmRpbmF0ZShHcmlkU3Bhbihyb3dDb3VudCwgcm93Q291bnQgKyAxKSwg
R3JpZFNwYW4oY3VycmVudENvbHVtbiwgbG9va0FoZWFkQ29sdW1uKSkpOworICAgICAgICAgICAg
Z3JpZEFyZWFNYXAuYWRkKGdyaWRBcmVhTmFtZSwgR3JpZENvb3JkaW5hdGUoR3JpZFNwYW46OmRl
ZmluaXRlR3JpZFNwYW4ocm93Q291bnQsIHJvd0NvdW50ICsgMSksIEdyaWRTcGFuOjpkZWZpbml0
ZUdyaWRTcGFuKGN1cnJlbnRDb2x1bW4sIGxvb2tBaGVhZENvbHVtbikpKTsKICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICBHcmlkQ29vcmRpbmF0ZSYgZ3JpZENvb3JkaW5hdGUgPSBncmlkQXJl
YUl0ZXJhdG9yLT52YWx1ZTsKIAogICAgICAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBjaGVja3Mg
dGVzdCB0aGF0IHRoZSBncmlkIGFyZWEgaXMgYSBzaW5nbGUgZmlsbGVkLWluIHJlY3RhbmdsZS4K
ICAgICAgICAgICAgIC8vIDEuIFRoZSBuZXcgcm93IGlzIGFkamFjZW50IHRvIHRoZSBwcmV2aW91
c2x5IHBhcnNlZCByb3cuCi0gICAgICAgICAgICBpZiAocm93Q291bnQgIT0gZ3JpZENvb3JkaW5h
dGUucm93cy5yZXNvbHZlZEZpbmFsUG9zaXRpb24udG9JbnQoKSkKKyAgICAgICAgICAgIGlmIChy
b3dDb3VudCAhPSBncmlkQ29vcmRpbmF0ZS5yb3dzLnJlc29sdmVkRmluYWxQb3NpdGlvbigpLnRv
SW50KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICAvLyAy
LiBUaGUgbmV3IGFyZWEgc3RhcnRzIGF0IHRoZSBzYW1lIHBvc2l0aW9uIGFzIHRoZSBwcmV2aW91
c2x5IHBhcnNlZCBhcmVhLgotICAgICAgICAgICAgaWYgKGN1cnJlbnRDb2x1bW4gIT0gZ3JpZENv
b3JkaW5hdGUuY29sdW1ucy5yZXNvbHZlZEluaXRpYWxQb3NpdGlvbi50b0ludCgpKQorICAgICAg
ICAgICAgaWYgKGN1cnJlbnRDb2x1bW4gIT0gZ3JpZENvb3JkaW5hdGUuY29sdW1ucy5yZXNvbHZl
ZEluaXRpYWxQb3NpdGlvbigpLnRvSW50KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgICAgICAgICAvLyAzLiBUaGUgbmV3IGFyZWEgZW5kcyBhdCB0aGUgc2FtZSBwb3Np
dGlvbiBhcyB0aGUgcHJldmlvdXNseSBwYXJzZWQgYXJlYS4KLSAgICAgICAgICAgIGlmIChsb29r
QWhlYWRDb2x1bW4gIT0gZ3JpZENvb3JkaW5hdGUuY29sdW1ucy5yZXNvbHZlZEZpbmFsUG9zaXRp
b24udG9JbnQoKSkKKyAgICAgICAgICAgIGlmIChsb29rQWhlYWRDb2x1bW4gIT0gZ3JpZENvb3Jk
aW5hdGUuY29sdW1ucy5yZXNvbHZlZEZpbmFsUG9zaXRpb24oKS50b0ludCgpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgKytncmlkQ29vcmRpbmF0ZS5yb3dz
LnJlc29sdmVkRmluYWxQb3NpdGlvbjsKKyAgICAgICAgICAgIGdyaWRDb29yZGluYXRlLnJvd3Mg
PSBHcmlkU3Bhbjo6ZGVmaW5pdGVHcmlkU3BhbihncmlkQ29vcmRpbmF0ZS5yb3dzLnJlc29sdmVk
SW5pdGlhbFBvc2l0aW9uKCksIGdyaWRDb29yZGluYXRlLnJvd3MucmVzb2x2ZWRGaW5hbFBvc2l0
aW9uKCkubmV4dCgpKTsKICAgICAgICAgfQogICAgICAgICBjdXJyZW50Q29sdW1uID0gbG9va0Fo
ZWFkQ29sdW1uIC0gMTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVCdWlsZGVyQ29udmVydGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ29u
dmVydGVyLmgKaW5kZXggOWUyMWUzODQ5OTgzZTZiNmYyODY5Njc2ZjJkYzg5N2RmOTc3ZWZhMi4u
NDY1MzA0MWQ2OWI3ODNkZjM0ZjhkM2ZkNmViODllODlmMGZlYjM5YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckNvbnZlcnRlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaApAQCAtODc1LDEyICs4NzUsMTIgQEAgaW5s
aW5lIHZvaWQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjcmVhdGVJbXBsaWNpdE5hbWVkR3JpZExp
bmVzRnJvbUdyaWRBcmVhKGNvbnMKICAgICAgICAgR3JpZFNwYW4gYXJlYVNwYW4gPSBkaXJlY3Rp
b24gPT0gRm9yUm93cyA/IGFyZWEudmFsdWUucm93cyA6IGFyZWEudmFsdWUuY29sdW1uczsKICAg
ICAgICAgewogICAgICAgICAgICAgYXV0byYgc3RhcnRWZWN0b3IgPSBuYW1lZEdyaWRMaW5lcy5h
ZGQoYXJlYS5rZXkgKyAiLXN0YXJ0IiwgVmVjdG9yPHVuc2lnbmVkPigpKS5pdGVyYXRvci0+dmFs
dWU7Ci0gICAgICAgICAgICBzdGFydFZlY3Rvci5hcHBlbmQoYXJlYVNwYW4ucmVzb2x2ZWRJbml0
aWFsUG9zaXRpb24udG9JbnQoKSk7CisgICAgICAgICAgICBzdGFydFZlY3Rvci5hcHBlbmQoYXJl
YVNwYW4ucmVzb2x2ZWRJbml0aWFsUG9zaXRpb24oKS50b0ludCgpKTsKICAgICAgICAgICAgIHN0
ZDo6c29ydChzdGFydFZlY3Rvci5iZWdpbigpLCBzdGFydFZlY3Rvci5lbmQoKSk7CiAgICAgICAg
IH0KICAgICAgICAgewogICAgICAgICAgICAgYXV0byYgZW5kVmVjdG9yID0gbmFtZWRHcmlkTGlu
ZXMuYWRkKGFyZWEua2V5ICsgIi1lbmQiLCBWZWN0b3I8dW5zaWduZWQ+KCkpLml0ZXJhdG9yLT52
YWx1ZTsKLSAgICAgICAgICAgIGVuZFZlY3Rvci5hcHBlbmQoYXJlYVNwYW4ucmVzb2x2ZWRGaW5h
bFBvc2l0aW9uLnRvSW50KCkpOworICAgICAgICAgICAgZW5kVmVjdG9yLmFwcGVuZChhcmVhU3Bh
bi5yZXNvbHZlZEZpbmFsUG9zaXRpb24oKS50b0ludCgpKTsKICAgICAgICAgICAgIHN0ZDo6c29y
dChlbmRWZWN0b3IuYmVnaW4oKSwgZW5kVmVjdG9yLmVuZCgpKTsKICAgICAgICAgfQogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNwcAppbmRleCAxNDFlNzRjYjE0ODZj
YWZkNDVhMjVjYTdhZjJkZDAzMjY0MDkyMzdjLi4yYTRjMzU5NGE2NTRiMDkwZmQ5NzA2YTExY2Iz
YWNhY2I4ZjE0ZGMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
R3JpZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwCkBA
IC0xOTAsNyArMTkwLDcgQEAgcHVibGljOgogICAgICAgICBjb25zdCB1bnNpZ25lZCBlbmRPZlZh
cnlpbmdUcmFja0luZGV4ID0gKG1fZGlyZWN0aW9uID09IEZvckNvbHVtbnMpID8gbV9ncmlkLnNp
emUoKSA6IG1fZ3JpZFswXS5zaXplKCk7CiAgICAgICAgIGZvciAoOyB2YXJ5aW5nVHJhY2tJbmRl
eCA8IGVuZE9mVmFyeWluZ1RyYWNrSW5kZXg7ICsrdmFyeWluZ1RyYWNrSW5kZXgpIHsKICAgICAg
ICAgICAgIGlmIChpc0VtcHR5QXJlYUVub3VnaChyb3dTcGFuLCBjb2x1bW5TcGFuKSkgewotICAg
ICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmlkQ29vcmRpbmF0ZT4gcmVzdWx0ID0gc3Rk
OjptYWtlX3VuaXF1ZTxHcmlkQ29vcmRpbmF0ZT4oR3JpZFNwYW4obV9yb3dJbmRleCwgbV9yb3dJ
bmRleCArIHJvd1NwYW4pLCBHcmlkU3BhbihtX2NvbHVtbkluZGV4LCBtX2NvbHVtbkluZGV4ICsg
Y29sdW1uU3BhbikpOworICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmlkQ29vcmRp
bmF0ZT4gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxHcmlkQ29vcmRpbmF0ZT4oR3JpZFNwYW46
OmRlZmluaXRlR3JpZFNwYW4obV9yb3dJbmRleCwgbV9yb3dJbmRleCArIHJvd1NwYW4pLCBHcmlk
U3Bhbjo6ZGVmaW5pdGVHcmlkU3BhbihtX2NvbHVtbkluZGV4LCBtX2NvbHVtbkluZGV4ICsgY29s
dW1uU3BhbikpOwogICAgICAgICAgICAgICAgIC8vIEFkdmFuY2UgdGhlIGl0ZXJhdG9yIHRvIGF2
b2lkIGFuIGluZmluaXRlIGxvb3Agd2hlcmUgd2Ugd291bGQgcmV0dXJuIHRoZSBzYW1lIGdyaWQg
YXJlYSBvdmVyIGFuZCBvdmVyLgogICAgICAgICAgICAgICAgICsrdmFyeWluZ1RyYWNrSW5kZXg7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTU2Niw3ICs1NjYsNyBAQCB2b2lk
IFJlbmRlckdyaWQ6OmNvbXB1dGVVc2VkQnJlYWR0aE9mR3JpZFRyYWNrcyhHcmlkVHJhY2tTaXpp
bmdEaXJlY3Rpb24gZGlyZWN0aQogICAgIC8vIDQuIEdyb3cgYWxsIEdyaWQgdHJhY2tzIGhhdmlu
ZyBhIGZyYWN0aW9uIGFzIHRoZSBNYXhUcmFja1NpemluZ0Z1bmN0aW9uLgogICAgIGRvdWJsZSBm
bGV4RnJhY3Rpb24gPSAwOwogICAgIGlmIChoYXNEZWZpbml0ZUZyZWVTcGFjZSkKLSAgICAgICAg
ZmxleEZyYWN0aW9uID0gZmluZEZsZXhGYWN0b3JVbml0U2l6ZSh0cmFja3MsIEdyaWRTcGFuKDAs
IHRyYWNrcy5zaXplKCkpLCBkaXJlY3Rpb24sIGluaXRpYWxGcmVlU3BhY2UudmFsdWUoKSk7Cisg
ICAgICAgIGZsZXhGcmFjdGlvbiA9IGZpbmRGbGV4RmFjdG9yVW5pdFNpemUodHJhY2tzLCBHcmlk
U3Bhbjo6ZGVmaW5pdGVHcmlkU3BhbigwLCB0cmFja3Muc2l6ZSgpKSwgZGlyZWN0aW9uLCBpbml0
aWFsRnJlZVNwYWNlLnZhbHVlKCkpOwogICAgIGVsc2UgewogICAgICAgICBmb3IgKGNvbnN0IGF1
dG8mIHRyYWNrSW5kZXggOiBmbGV4aWJsZVNpemVkVHJhY2tzSW5kZXgpCiAgICAgICAgICAgICBm
bGV4RnJhY3Rpb24gPSBzdGQ6Om1heChmbGV4RnJhY3Rpb24sIG5vcm1hbGl6ZWRGbGV4RnJhY3Rp
b24odHJhY2tzW3RyYWNrSW5kZXhdLCBncmlkVHJhY2tTaXplKGRpcmVjdGlvbiwgdHJhY2tJbmRl
eCkubWF4VHJhY2tCcmVhZHRoKCkuZmxleCgpKSk7CkBAIC01NzcsNyArNTc3LDcgQEAgdm9pZCBS
ZW5kZXJHcmlkOjpjb21wdXRlVXNlZEJyZWFkdGhPZkdyaWRUcmFja3MoR3JpZFRyYWNrU2l6aW5n
RGlyZWN0aW9uIGRpcmVjdGkKICAgICAgICAgICAgICAgICBjb25zdCBHcmlkU3BhbiBzcGFuID0g
Y2FjaGVkR3JpZFNwYW4oKmdyaWRJdGVtLCBkaXJlY3Rpb24pOwogCiAgICAgICAgICAgICAgICAg
Ly8gRG8gbm90IGluY2x1ZGUgYWxyZWFkeSBwcm9jZXNzZWQgaXRlbXMuCi0gICAgICAgICAgICAg
ICAgaWYgKGkgPiAwICYmIHNwYW4ucmVzb2x2ZWRJbml0aWFsUG9zaXRpb24udG9JbnQoKSA8PSBm
bGV4aWJsZVNpemVkVHJhY2tzSW5kZXhbaSAtIDFdKQorICAgICAgICAgICAgICAgIGlmIChpID4g
MCAmJiBzcGFuLnJlc29sdmVkSW5pdGlhbFBvc2l0aW9uKCkudG9JbnQoKSA8PSBmbGV4aWJsZVNp
emVkVHJhY2tzSW5kZXhbaSAtIDFdKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAog
ICAgICAgICAgICAgICAgIGZsZXhGcmFjdGlvbiA9IHN0ZDo6bWF4KGZsZXhGcmFjdGlvbiwgZmlu
ZEZsZXhGYWN0b3JVbml0U2l6ZSh0cmFja3MsIHNwYW4sIGRpcmVjdGlvbiwgbWF4Q29udGVudEZv
ckNoaWxkKCpncmlkSXRlbSwgZGlyZWN0aW9uLCBzaXppbmdEYXRhLmNvbHVtblRyYWNrcykpKTsK
QEAgLTg2NSw3ICs4NjUsNyBAQCB2b2lkIFJlbmRlckdyaWQ6OnJlc29sdmVDb250ZW50QmFzZWRU
cmFja1NpemluZ0Z1bmN0aW9ucyhHcmlkVHJhY2tTaXppbmdEaXJlY3RpbwogCiB2b2lkIFJlbmRl
ckdyaWQ6OnJlc29sdmVDb250ZW50QmFzZWRUcmFja1NpemluZ0Z1bmN0aW9uc0Zvck5vblNwYW5u
aW5nSXRlbXMoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgR3JpZFNw
YW4mIHNwYW4sIFJlbmRlckJveCYgZ3JpZEl0ZW0sIEdyaWRUcmFjayYgdHJhY2ssIFZlY3RvcjxH
cmlkVHJhY2s+JiBjb2x1bW5UcmFja3MpCiB7Ci0gICAgY29uc3QgR3JpZFJlc29sdmVkUG9zaXRp
b24gdHJhY2tQb3NpdGlvbiA9IHNwYW4ucmVzb2x2ZWRJbml0aWFsUG9zaXRpb247CisgICAgY29u
c3QgR3JpZFJlc29sdmVkUG9zaXRpb24gdHJhY2tQb3NpdGlvbiA9IHNwYW4ucmVzb2x2ZWRJbml0
aWFsUG9zaXRpb24oKTsKICAgICBHcmlkVHJhY2tTaXplIHRyYWNrU2l6ZSA9IGdyaWRUcmFja1Np
emUoZGlyZWN0aW9uLCB0cmFja1Bvc2l0aW9uLnRvSW50KCkpOwogCiAgICAgaWYgKHRyYWNrU2l6
ZS5oYXNNaW5Db250ZW50TWluVHJhY2tCcmVhZHRoKCkpCkBAIC0xMTM4LDcgKzExMzgsNyBAQCB2
b2lkIFJlbmRlckdyaWQ6OmVuc3VyZUdyaWRTaXplKHVuc2lnbmVkIG1heGltdW1Sb3dTaXplLCB1
bnNpZ25lZCBtYXhpbXVtQ29sdW1uUwogCiB2b2lkIFJlbmRlckdyaWQ6Omluc2VydEl0ZW1JbnRv
R3JpZChSZW5kZXJCb3gmIGNoaWxkLCBjb25zdCBHcmlkQ29vcmRpbmF0ZSYgY29vcmRpbmF0ZSkK
IHsKLSAgICBlbnN1cmVHcmlkU2l6ZShjb29yZGluYXRlLnJvd3MucmVzb2x2ZWRGaW5hbFBvc2l0
aW9uLnRvSW50KCksIGNvb3JkaW5hdGUuY29sdW1ucy5yZXNvbHZlZEZpbmFsUG9zaXRpb24udG9J
bnQoKSk7CisgICAgZW5zdXJlR3JpZFNpemUoY29vcmRpbmF0ZS5yb3dzLnJlc29sdmVkRmluYWxQ
b3NpdGlvbigpLnRvSW50KCksIGNvb3JkaW5hdGUuY29sdW1ucy5yZXNvbHZlZEZpbmFsUG9zaXRp
b24oKS50b0ludCgpKTsKIAogICAgIGZvciAoYXV0byYgcm93IDogY29vcmRpbmF0ZS5yb3dzKSB7
CiAgICAgICAgIGZvciAoYXV0byYgY29sdW1uIDogY29vcmRpbmF0ZS5jb2x1bW5zKQpAQCAtMTE2
MCwyMSArMTE2MCwxOCBAQCB2b2lkIFJlbmRlckdyaWQ6OnBsYWNlSXRlbXNPbkdyaWQoKQogICAg
ICAgICBpZiAoY2hpbGQtPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKQogICAgICAgICAgICAgY29u
dGludWU7CiAKLSAgICAgICAgYXV0byB1bnJlc29sdmVkUm93UG9zaXRpb25zID0gR3JpZFJlc29s
dmVkUG9zaXRpb246OnVucmVzb2x2ZWRTcGFuRnJvbVN0eWxlKHN0eWxlKCksICpjaGlsZCwgRm9y
Um93cyk7Ci0gICAgICAgIGF1dG8gdW5yZXNvbHZlZENvbHVtblBvc2l0aW9ucyA9IEdyaWRSZXNv
bHZlZFBvc2l0aW9uOjp1bnJlc29sdmVkU3BhbkZyb21TdHlsZShzdHlsZSgpLCAqY2hpbGQsIEZv
ckNvbHVtbnMpOwotCi0gICAgICAgIGlmICh1bnJlc29sdmVkUm93UG9zaXRpb25zLnJlcXVpcmVz
QXV0b1BsYWNlbWVudCgpIHx8IHVucmVzb2x2ZWRDb2x1bW5Qb3NpdGlvbnMucmVxdWlyZXNBdXRv
UGxhY2VtZW50KCkpIHsKKyAgICAgICAgR3JpZFNwYW4gcm93UG9zaXRpb25zID0gR3JpZFJlc29s
dmVkUG9zaXRpb246OnJlc29sdmVHcmlkUG9zaXRpb25zRnJvbVN0eWxlKHN0eWxlKCksICpjaGls
ZCwgRm9yUm93cyk7CisgICAgICAgIEdyaWRTcGFuIGNvbHVtblBvc2l0aW9ucyA9IEdyaWRSZXNv
bHZlZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21TdHlsZShzdHlsZSgpLCAqY2hp
bGQsIEZvckNvbHVtbnMpOwogCisgICAgICAgIGlmICghcm93UG9zaXRpb25zLmlzRGVmaW5pdGUo
KSB8fCAhY29sdW1uUG9zaXRpb25zLmlzRGVmaW5pdGUoKSkgewogICAgICAgICAgICAgYm9vbCBt
YWpvckF4aXNEaXJlY3Rpb25Jc0ZvckNvbHVtbnMgPSBhdXRvUGxhY2VtZW50TWFqb3JBeGlzRGly
ZWN0aW9uKCkgPT0gRm9yQ29sdW1uczsKLSAgICAgICAgICAgIGlmICgobWFqb3JBeGlzRGlyZWN0
aW9uSXNGb3JDb2x1bW5zICYmIHVucmVzb2x2ZWRDb2x1bW5Qb3NpdGlvbnMucmVxdWlyZXNBdXRv
UGxhY2VtZW50KCkpCi0gICAgICAgICAgICAgICAgfHwgKCFtYWpvckF4aXNEaXJlY3Rpb25Jc0Zv
ckNvbHVtbnMgJiYgdW5yZXNvbHZlZFJvd1Bvc2l0aW9ucy5yZXF1aXJlc0F1dG9QbGFjZW1lbnQo
KSkpCisgICAgICAgICAgICBpZiAoKG1ham9yQXhpc0RpcmVjdGlvbklzRm9yQ29sdW1ucyAmJiAh
Y29sdW1uUG9zaXRpb25zLmlzRGVmaW5pdGUoKSkKKyAgICAgICAgICAgICAgICB8fCAoIW1ham9y
QXhpc0RpcmVjdGlvbklzRm9yQ29sdW1ucyAmJiAhcm93UG9zaXRpb25zLmlzRGVmaW5pdGUoKSkp
CiAgICAgICAgICAgICAgICAgYXV0b01ham9yQXhpc0F1dG9HcmlkSXRlbXMuYXBwZW5kKGNoaWxk
KTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBzcGVjaWZpZWRNYWpvckF4aXNB
dXRvR3JpZEl0ZW1zLmFwcGVuZChjaGlsZCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgfQotICAgICAgICBHcmlkU3BhbiByb3dQb3NpdGlvbnMgPSBHcmlkUmVzb2x2ZWRQb3NpdGlv
bjo6cmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9tU3R5bGUodW5yZXNvbHZlZFJvd1Bvc2l0aW9ucywg
c3R5bGUoKSk7Ci0gICAgICAgIEdyaWRTcGFuIGNvbHVtblBvc2l0aW9ucyA9IEdyaWRSZXNvbHZl
ZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21TdHlsZSh1bnJlc29sdmVkQ29sdW1u
UG9zaXRpb25zLCBzdHlsZSgpKTsKICAgICAgICAgaW5zZXJ0SXRlbUludG9HcmlkKCpjaGlsZCwg
R3JpZENvb3JkaW5hdGUocm93UG9zaXRpb25zLCBjb2x1bW5Qb3NpdGlvbnMpKTsKICAgICB9CiAK
QEAgLTExOTcsMjQgKzExOTQsMjIgQEAgdm9pZCBSZW5kZXJHcmlkOjpwb3B1bGF0ZUV4cGxpY2l0
R3JpZEFuZE9yZGVySXRlcmF0b3IoKQogCiAgICAgICAgIHBvcHVsYXRvci5jb2xsZWN0Q2hpbGQo
KmNoaWxkKTsKIAotICAgICAgICBhdXRvIHVucmVzb2x2ZWRSb3dQb3NpdGlvbnMgPSBHcmlkUmVz
b2x2ZWRQb3NpdGlvbjo6dW5yZXNvbHZlZFNwYW5Gcm9tU3R5bGUoc3R5bGUoKSwgKmNoaWxkLCBG
b3JSb3dzKTsKLSAgICAgICAgaWYgKCF1bnJlc29sdmVkUm93UG9zaXRpb25zLnJlcXVpcmVzQXV0
b1BsYWNlbWVudCgpKSB7Ci0gICAgICAgICAgICBHcmlkU3BhbiByb3dQb3NpdGlvbnMgPSBHcmlk
UmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9tU3R5bGUodW5yZXNvbHZl
ZFJvd1Bvc2l0aW9ucywgc3R5bGUoKSk7Ci0gICAgICAgICAgICBtYXhpbXVtUm93SW5kZXggPSBz
dGQ6Om1heChtYXhpbXVtUm93SW5kZXgsIHJvd1Bvc2l0aW9ucy5yZXNvbHZlZEZpbmFsUG9zaXRp
b24udG9JbnQoKSk7CisgICAgICAgIEdyaWRTcGFuIHJvd1Bvc2l0aW9ucyA9IEdyaWRSZXNvbHZl
ZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21TdHlsZShzdHlsZSgpLCAqY2hpbGQs
IEZvclJvd3MpOworICAgICAgICBpZiAocm93UG9zaXRpb25zLmlzRGVmaW5pdGUoKSkgeworICAg
ICAgICAgICAgbWF4aW11bVJvd0luZGV4ID0gc3RkOjptYXgobWF4aW11bVJvd0luZGV4LCByb3dQ
b3NpdGlvbnMucmVzb2x2ZWRGaW5hbFBvc2l0aW9uKCkudG9JbnQoKSk7CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAvLyBHcm93IHRoZSBncmlkIGZvciBpdGVtcyB3aXRoIGEgZGVmaW5p
dGUgcm93IHNwYW4sIGdldHRpbmcgdGhlIGxhcmdlc3Qgc3VjaCBzcGFuLgogICAgICAgICAgICAg
R3JpZFNwYW4gcG9zaXRpb25zID0gR3JpZFJlc29sdmVkUG9zaXRpb246OnJlc29sdmVHcmlkUG9z
aXRpb25zRnJvbUF1dG9QbGFjZW1lbnRQb3NpdGlvbihzdHlsZSgpLCAqY2hpbGQsIEZvclJvd3Ms
IEdyaWRSZXNvbHZlZFBvc2l0aW9uKDApKTsKLSAgICAgICAgICAgIG1heGltdW1Sb3dJbmRleCA9
IHN0ZDo6bWF4KG1heGltdW1Sb3dJbmRleCwgcG9zaXRpb25zLnJlc29sdmVkRmluYWxQb3NpdGlv
bi50b0ludCgpKTsKKyAgICAgICAgICAgIG1heGltdW1Sb3dJbmRleCA9IHN0ZDo6bWF4KG1heGlt
dW1Sb3dJbmRleCwgcG9zaXRpb25zLnJlc29sdmVkRmluYWxQb3NpdGlvbigpLnRvSW50KCkpOwog
ICAgICAgICB9CiAKLSAgICAgICAgYXV0byB1bnJlc29sdmVkQ29sdW1uUG9zaXRpb25zID0gR3Jp
ZFJlc29sdmVkUG9zaXRpb246OnVucmVzb2x2ZWRTcGFuRnJvbVN0eWxlKHN0eWxlKCksICpjaGls
ZCwgRm9yQ29sdW1ucyk7Ci0gICAgICAgIGlmICghdW5yZXNvbHZlZENvbHVtblBvc2l0aW9ucy5y
ZXF1aXJlc0F1dG9QbGFjZW1lbnQoKSkgewotICAgICAgICAgICAgR3JpZFNwYW4gY29sdW1uUG9z
aXRpb25zID0gR3JpZFJlc29sdmVkUG9zaXRpb246OnJlc29sdmVHcmlkUG9zaXRpb25zRnJvbVN0
eWxlKHVucmVzb2x2ZWRDb2x1bW5Qb3NpdGlvbnMsIHN0eWxlKCkpOwotICAgICAgICAgICAgbWF4
aW11bUNvbHVtbkluZGV4ID0gc3RkOjptYXgobWF4aW11bUNvbHVtbkluZGV4LCBjb2x1bW5Qb3Np
dGlvbnMucmVzb2x2ZWRGaW5hbFBvc2l0aW9uLnRvSW50KCkpOworICAgICAgICBHcmlkU3BhbiBj
b2x1bW5Qb3NpdGlvbnMgPSBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlv
bnNGcm9tU3R5bGUoc3R5bGUoKSwgKmNoaWxkLCBGb3JDb2x1bW5zKTsKKyAgICAgICAgaWYgKGNv
bHVtblBvc2l0aW9ucy5pc0RlZmluaXRlKCkpIHsKKyAgICAgICAgICAgIG1heGltdW1Db2x1bW5J
bmRleCA9IHN0ZDo6bWF4KG1heGltdW1Db2x1bW5JbmRleCwgY29sdW1uUG9zaXRpb25zLnJlc29s
dmVkRmluYWxQb3NpdGlvbigpLnRvSW50KCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgLy8gR3JvdyB0aGUgZ3JpZCBmb3IgaXRlbXMgd2l0aCBhIGRlZmluaXRlIGNvbHVtbiBzcGFu
LCBnZXR0aW5nIHRoZSBsYXJnZXN0IHN1Y2ggc3Bhbi4KICAgICAgICAgICAgIEdyaWRTcGFuIHBv
c2l0aW9ucyA9IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21B
dXRvUGxhY2VtZW50UG9zaXRpb24oc3R5bGUoKSwgKmNoaWxkLCBGb3JDb2x1bW5zLCBHcmlkUmVz
b2x2ZWRQb3NpdGlvbigwKSk7Ci0gICAgICAgICAgICBtYXhpbXVtQ29sdW1uSW5kZXggPSBzdGQ6
Om1heChtYXhpbXVtQ29sdW1uSW5kZXgsIHBvc2l0aW9ucy5yZXNvbHZlZEZpbmFsUG9zaXRpb24u
dG9JbnQoKSk7CisgICAgICAgICAgICBtYXhpbXVtQ29sdW1uSW5kZXggPSBzdGQ6Om1heChtYXhp
bXVtQ29sdW1uSW5kZXgsIHBvc2l0aW9ucy5yZXNvbHZlZEZpbmFsUG9zaXRpb24oKS50b0ludCgp
KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTI0MiwyMCArMTIzNywxOSBAQCB2b2lkIFJlbmRl
ckdyaWQ6OnBsYWNlU3BlY2lmaWVkTWFqb3JBeGlzSXRlbXNPbkdyaWQoY29uc3QgVmVjdG9yPFJl
bmRlckJveCo+JiBhdQogICAgIEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkLCBEZWZhdWx0SGFz
aDx1bnNpZ25lZD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dW5z
aWduZWQ+PiBtaW5vckF4aXNDdXJzb3JzOwogCiAgICAgZm9yIChhdXRvJiBhdXRvR3JpZEl0ZW0g
OiBhdXRvR3JpZEl0ZW1zKSB7Ci0gICAgICAgIGF1dG8gdW5yZXNvbHZlZE1ham9yQXhpc1Bvc2l0
aW9ucyA9IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjp1bnJlc29sdmVkU3BhbkZyb21TdHlsZShzdHls
ZSgpLCAqYXV0b0dyaWRJdGVtLCBhdXRvUGxhY2VtZW50TWFqb3JBeGlzRGlyZWN0aW9uKCkpOwot
ICAgICAgICBBU1NFUlQoIXVucmVzb2x2ZWRNYWpvckF4aXNQb3NpdGlvbnMucmVxdWlyZXNBdXRv
UGxhY2VtZW50KCkpOwotICAgICAgICBHcmlkU3BhbiBtYWpvckF4aXNQb3NpdGlvbnMgPSBHcmlk
UmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9tU3R5bGUodW5yZXNvbHZl
ZE1ham9yQXhpc1Bvc2l0aW9ucywgc3R5bGUoKSk7CisgICAgICAgIEdyaWRTcGFuIG1ham9yQXhp
c1Bvc2l0aW9ucyA9IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zy
b21TdHlsZShzdHlsZSgpLCAqYXV0b0dyaWRJdGVtLCBhdXRvUGxhY2VtZW50TWFqb3JBeGlzRGly
ZWN0aW9uKCkpOworICAgICAgICBBU1NFUlQobWFqb3JBeGlzUG9zaXRpb25zLmlzRGVmaW5pdGUo
KSk7CiAgICAgICAgIEdyaWRTcGFuIG1pbm9yQXhpc1Bvc2l0aW9ucyA9IEdyaWRSZXNvbHZlZFBv
c2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21BdXRvUGxhY2VtZW50UG9zaXRpb24oc3R5
bGUoKSwgKmF1dG9HcmlkSXRlbSwgYXV0b1BsYWNlbWVudE1pbm9yQXhpc0RpcmVjdGlvbigpLCBH
cmlkUmVzb2x2ZWRQb3NpdGlvbigwKSk7Ci0gICAgICAgIHVuc2lnbmVkIG1ham9yQXhpc0luaXRp
YWxQb3NpdGlvbiA9IG1ham9yQXhpc1Bvc2l0aW9ucy5yZXNvbHZlZEluaXRpYWxQb3NpdGlvbi50
b0ludCgpOworICAgICAgICB1bnNpZ25lZCBtYWpvckF4aXNJbml0aWFsUG9zaXRpb24gPSBtYWpv
ckF4aXNQb3NpdGlvbnMucmVzb2x2ZWRJbml0aWFsUG9zaXRpb24oKS50b0ludCgpOwogCi0gICAg
ICAgIEdyaWRJdGVyYXRvciBpdGVyYXRvcihtX2dyaWQsIGF1dG9QbGFjZW1lbnRNYWpvckF4aXNE
aXJlY3Rpb24oKSwgbWFqb3JBeGlzUG9zaXRpb25zLnJlc29sdmVkSW5pdGlhbFBvc2l0aW9uLnRv
SW50KCksIGlzR3JpZEF1dG9GbG93RGVuc2UgPyAwIDogbWlub3JBeGlzQ3Vyc29ycy5nZXQobWFq
b3JBeGlzSW5pdGlhbFBvc2l0aW9uKSk7CisgICAgICAgIEdyaWRJdGVyYXRvciBpdGVyYXRvciht
X2dyaWQsIGF1dG9QbGFjZW1lbnRNYWpvckF4aXNEaXJlY3Rpb24oKSwgbWFqb3JBeGlzUG9zaXRp
b25zLnJlc29sdmVkSW5pdGlhbFBvc2l0aW9uKCkudG9JbnQoKSwgaXNHcmlkQXV0b0Zsb3dEZW5z
ZSA/IDAgOiBtaW5vckF4aXNDdXJzb3JzLmdldChtYWpvckF4aXNJbml0aWFsUG9zaXRpb24pKTsK
ICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEdyaWRDb29yZGluYXRlPiBlbXB0eUdyaWRBcmVhID0g
aXRlcmF0b3IubmV4dEVtcHR5R3JpZEFyZWEobWFqb3JBeGlzUG9zaXRpb25zLmludGVnZXJTcGFu
KCksIG1pbm9yQXhpc1Bvc2l0aW9ucy5pbnRlZ2VyU3BhbigpKTsKICAgICAgICAgaWYgKCFlbXB0
eUdyaWRBcmVhKQogICAgICAgICAgICAgZW1wdHlHcmlkQXJlYSA9IGNyZWF0ZUVtcHR5R3JpZEFy
ZWFBdFNwZWNpZmllZFBvc2l0aW9uc091dHNpZGVHcmlkKCphdXRvR3JpZEl0ZW0sIGF1dG9QbGFj
ZW1lbnRNYWpvckF4aXNEaXJlY3Rpb24oKSwgbWFqb3JBeGlzUG9zaXRpb25zKTsKICAgICAgICAg
aW5zZXJ0SXRlbUludG9HcmlkKCphdXRvR3JpZEl0ZW0sICplbXB0eUdyaWRBcmVhKTsKIAogICAg
ICAgICBpZiAoIWlzR3JpZEF1dG9GbG93RGVuc2UpCi0gICAgICAgICAgICBtaW5vckF4aXNDdXJz
b3JzLnNldChtYWpvckF4aXNJbml0aWFsUG9zaXRpb24sIGlzRm9yQ29sdW1ucyA/IGVtcHR5R3Jp
ZEFyZWEtPnJvd3MucmVzb2x2ZWRJbml0aWFsUG9zaXRpb24udG9JbnQoKSA6IGVtcHR5R3JpZEFy
ZWEtPmNvbHVtbnMucmVzb2x2ZWRJbml0aWFsUG9zaXRpb24udG9JbnQoKSk7CisgICAgICAgICAg
ICBtaW5vckF4aXNDdXJzb3JzLnNldChtYWpvckF4aXNJbml0aWFsUG9zaXRpb24sIGlzRm9yQ29s
dW1ucyA/IGVtcHR5R3JpZEFyZWEtPnJvd3MucmVzb2x2ZWRJbml0aWFsUG9zaXRpb24oKS50b0lu
dCgpIDogZW1wdHlHcmlkQXJlYS0+Y29sdW1ucy5yZXNvbHZlZEluaXRpYWxQb3NpdGlvbigpLnRv
SW50KCkpOwogICAgIH0KIH0KIApAQCAtMTI3Niw3ICsxMjcwLDcgQEAgdm9pZCBSZW5kZXJHcmlk
OjpwbGFjZUF1dG9NYWpvckF4aXNJdGVtc09uR3JpZChjb25zdCBWZWN0b3I8UmVuZGVyQm94Kj4m
IGF1dG9HcmkKIAogdm9pZCBSZW5kZXJHcmlkOjpwbGFjZUF1dG9NYWpvckF4aXNJdGVtT25Hcmlk
KFJlbmRlckJveCYgZ3JpZEl0ZW0sIEF1dG9QbGFjZW1lbnRDdXJzb3ImIGF1dG9QbGFjZW1lbnRD
dXJzb3IpCiB7Ci0gICAgQVNTRVJUKEdyaWRSZXNvbHZlZFBvc2l0aW9uOjp1bnJlc29sdmVkU3Bh
bkZyb21TdHlsZShzdHlsZSgpLCBncmlkSXRlbSwgYXV0b1BsYWNlbWVudE1ham9yQXhpc0RpcmVj
dGlvbigpKS5yZXF1aXJlc0F1dG9QbGFjZW1lbnQoKSk7CisgICAgQVNTRVJUKCFHcmlkUmVzb2x2
ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9tU3R5bGUoc3R5bGUoKSwgZ3JpZEl0
ZW0sIGF1dG9QbGFjZW1lbnRNYWpvckF4aXNEaXJlY3Rpb24oKSkuaXNEZWZpbml0ZSgpKTsKICAg
ICBHcmlkU3BhbiBtYWpvckF4aXNQb3NpdGlvbnMgPSBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVz
b2x2ZUdyaWRQb3NpdGlvbnNGcm9tQXV0b1BsYWNlbWVudFBvc2l0aW9uKHN0eWxlKCksIGdyaWRJ
dGVtLCBhdXRvUGxhY2VtZW50TWFqb3JBeGlzRGlyZWN0aW9uKCksIEdyaWRSZXNvbHZlZFBvc2l0
aW9uKDApKTsKIAogICAgIGNvbnN0IHVuc2lnbmVkIGVuZE9mTWFqb3JBeGlzID0gKGF1dG9QbGFj
ZW1lbnRNYWpvckF4aXNEaXJlY3Rpb24oKSA9PSBGb3JDb2x1bW5zKSA/IGdyaWRDb2x1bW5Db3Vu
dCgpIDogZ3JpZFJvd0NvdW50KCk7CkBAIC0xMjg0LDE2ICsxMjc4LDE0IEBAIHZvaWQgUmVuZGVy
R3JpZDo6cGxhY2VBdXRvTWFqb3JBeGlzSXRlbU9uR3JpZChSZW5kZXJCb3gmIGdyaWRJdGVtLCBB
dXRvUGxhY2VtZW50CiAgICAgdW5zaWduZWQgbWlub3JBeGlzQXV0b1BsYWNlbWVudEN1cnNvciA9
IGF1dG9QbGFjZW1lbnRNYWpvckF4aXNEaXJlY3Rpb24oKSA9PSBGb3JDb2x1bW5zID8gYXV0b1Bs
YWNlbWVudEN1cnNvci5maXJzdCA6IGF1dG9QbGFjZW1lbnRDdXJzb3Iuc2Vjb25kOwogCiAgICAg
c3RkOjp1bmlxdWVfcHRyPEdyaWRDb29yZGluYXRlPiBlbXB0eUdyaWRBcmVhOwotICAgIGF1dG8g
dW5yZXNvbHZlZE1pbm9yQXhpc1Bvc2l0aW9ucyA9IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjp1bnJl
c29sdmVkU3BhbkZyb21TdHlsZShzdHlsZSgpLCBncmlkSXRlbSwgYXV0b1BsYWNlbWVudE1pbm9y
QXhpc0RpcmVjdGlvbigpKTsKLSAgICBpZiAoIXVucmVzb2x2ZWRNaW5vckF4aXNQb3NpdGlvbnMu
cmVxdWlyZXNBdXRvUGxhY2VtZW50KCkpIHsKLSAgICAgICAgR3JpZFNwYW4gbWlub3JBeGlzUG9z
aXRpb25zID0gR3JpZFJlc29sdmVkUG9zaXRpb246OnJlc29sdmVHcmlkUG9zaXRpb25zRnJvbVN0
eWxlKHVucmVzb2x2ZWRNaW5vckF4aXNQb3NpdGlvbnMsIHN0eWxlKCkpOwotCisgICAgR3JpZFNw
YW4gbWlub3JBeGlzUG9zaXRpb25zID0gR3JpZFJlc29sdmVkUG9zaXRpb246OnJlc29sdmVHcmlk
UG9zaXRpb25zRnJvbVN0eWxlKHN0eWxlKCksIGdyaWRJdGVtLCBhdXRvUGxhY2VtZW50TWlub3JB
eGlzRGlyZWN0aW9uKCkpOworICAgIGlmIChtaW5vckF4aXNQb3NpdGlvbnMuaXNEZWZpbml0ZSgp
KSB7CiAgICAgICAgIC8vIE1vdmUgdG8gdGhlIG5leHQgdHJhY2sgaW4gbWFqb3IgYXhpcyBpZiBp
bml0aWFsIHBvc2l0aW9uIGluIG1pbm9yIGF4aXMgaXMgYmVmb3JlIGF1dG8tcGxhY2VtZW50IGN1
cnNvci4KLSAgICAgICAgaWYgKG1pbm9yQXhpc1Bvc2l0aW9ucy5yZXNvbHZlZEluaXRpYWxQb3Np
dGlvbi50b0ludCgpIDwgbWlub3JBeGlzQXV0b1BsYWNlbWVudEN1cnNvcikKKyAgICAgICAgaWYg
KG1pbm9yQXhpc1Bvc2l0aW9ucy5yZXNvbHZlZEluaXRpYWxQb3NpdGlvbigpLnRvSW50KCkgPCBt
aW5vckF4aXNBdXRvUGxhY2VtZW50Q3Vyc29yKQogICAgICAgICAgICAgbWFqb3JBeGlzQXV0b1Bs
YWNlbWVudEN1cnNvcisrOwogCiAgICAgICAgIGlmIChtYWpvckF4aXNBdXRvUGxhY2VtZW50Q3Vy
c29yIDwgZW5kT2ZNYWpvckF4aXMpIHsKLSAgICAgICAgICAgIEdyaWRJdGVyYXRvciBpdGVyYXRv
cihtX2dyaWQsIGF1dG9QbGFjZW1lbnRNaW5vckF4aXNEaXJlY3Rpb24oKSwgbWlub3JBeGlzUG9z
aXRpb25zLnJlc29sdmVkSW5pdGlhbFBvc2l0aW9uLnRvSW50KCksIG1ham9yQXhpc0F1dG9QbGFj
ZW1lbnRDdXJzb3IpOworICAgICAgICAgICAgR3JpZEl0ZXJhdG9yIGl0ZXJhdG9yKG1fZ3JpZCwg
YXV0b1BsYWNlbWVudE1pbm9yQXhpc0RpcmVjdGlvbigpLCBtaW5vckF4aXNQb3NpdGlvbnMucmVz
b2x2ZWRJbml0aWFsUG9zaXRpb24oKS50b0ludCgpLCBtYWpvckF4aXNBdXRvUGxhY2VtZW50Q3Vy
c29yKTsKICAgICAgICAgICAgIGVtcHR5R3JpZEFyZWEgPSBpdGVyYXRvci5uZXh0RW1wdHlHcmlk
QXJlYShtaW5vckF4aXNQb3NpdGlvbnMuaW50ZWdlclNwYW4oKSwgbWFqb3JBeGlzUG9zaXRpb25z
LmludGVnZXJTcGFuKCkpOwogICAgICAgICB9CiAKQEAgLTEzMDgsNyArMTMwMCw3IEBAIHZvaWQg
UmVuZGVyR3JpZDo6cGxhY2VBdXRvTWFqb3JBeGlzSXRlbU9uR3JpZChSZW5kZXJCb3gmIGdyaWRJ
dGVtLCBBdXRvUGxhY2VtZW50CiAKICAgICAgICAgICAgIGlmIChlbXB0eUdyaWRBcmVhKSB7CiAg
ICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBmaXRzIGluIHRoZSBtaW5vciBheGlzIGRp
cmVjdGlvbiwgYXMgd2Ugc2hvdWxkbid0IGdyb3cgaW4gdGhhdCBkaXJlY3Rpb24gaGVyZSAoaXQg
d2FzIGFscmVhZHkgbWFuYWdlZCBpbiBwb3B1bGF0ZUV4cGxpY2l0R3JpZEFuZE9yZGVySXRlcmF0
b3IoKSkuCi0gICAgICAgICAgICAgICAgR3JpZFJlc29sdmVkUG9zaXRpb24gbWlub3JBeGlzRmlu
YWxQb3NpdGlvbkluZGV4ID0gYXV0b1BsYWNlbWVudE1pbm9yQXhpc0RpcmVjdGlvbigpID09IEZv
ckNvbHVtbnMgPyBlbXB0eUdyaWRBcmVhLT5jb2x1bW5zLnJlc29sdmVkRmluYWxQb3NpdGlvbiA6
IGVtcHR5R3JpZEFyZWEtPnJvd3MucmVzb2x2ZWRGaW5hbFBvc2l0aW9uOworICAgICAgICAgICAg
ICAgIEdyaWRSZXNvbHZlZFBvc2l0aW9uIG1pbm9yQXhpc0ZpbmFsUG9zaXRpb25JbmRleCA9IGF1
dG9QbGFjZW1lbnRNaW5vckF4aXNEaXJlY3Rpb24oKSA9PSBGb3JDb2x1bW5zID8gZW1wdHlHcmlk
QXJlYS0+Y29sdW1ucy5yZXNvbHZlZEZpbmFsUG9zaXRpb24oKSA6IGVtcHR5R3JpZEFyZWEtPnJv
d3MucmVzb2x2ZWRGaW5hbFBvc2l0aW9uKCk7CiAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWdu
ZWQgZW5kT2ZNaW5vckF4aXMgPSBhdXRvUGxhY2VtZW50TWlub3JBeGlzRGlyZWN0aW9uKCkgPT0g
Rm9yQ29sdW1ucyA/IGdyaWRDb2x1bW5Db3VudCgpIDogZ3JpZFJvd0NvdW50KCk7CiAgICAgICAg
ICAgICAgICAgaWYgKG1pbm9yQXhpc0ZpbmFsUG9zaXRpb25JbmRleC50b0ludCgpIDw9IGVuZE9m
TWlub3JBeGlzKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTEzMjcsOCArMTMxOSw4
IEBAIHZvaWQgUmVuZGVyR3JpZDo6cGxhY2VBdXRvTWFqb3JBeGlzSXRlbU9uR3JpZChSZW5kZXJC
b3gmIGdyaWRJdGVtLCBBdXRvUGxhY2VtZW50CiAgICAgfQogCiAgICAgaW5zZXJ0SXRlbUludG9H
cmlkKGdyaWRJdGVtLCAqZW1wdHlHcmlkQXJlYSk7Ci0gICAgYXV0b1BsYWNlbWVudEN1cnNvci5m
aXJzdCA9IGVtcHR5R3JpZEFyZWEtPnJvd3MucmVzb2x2ZWRJbml0aWFsUG9zaXRpb24udG9JbnQo
KTsKLSAgICBhdXRvUGxhY2VtZW50Q3Vyc29yLnNlY29uZCA9IGVtcHR5R3JpZEFyZWEtPmNvbHVt
bnMucmVzb2x2ZWRJbml0aWFsUG9zaXRpb24udG9JbnQoKTsKKyAgICBhdXRvUGxhY2VtZW50Q3Vy
c29yLmZpcnN0ID0gZW1wdHlHcmlkQXJlYS0+cm93cy5yZXNvbHZlZEluaXRpYWxQb3NpdGlvbigp
LnRvSW50KCk7CisgICAgYXV0b1BsYWNlbWVudEN1cnNvci5zZWNvbmQgPSBlbXB0eUdyaWRBcmVh
LT5jb2x1bW5zLnJlc29sdmVkSW5pdGlhbFBvc2l0aW9uKCkudG9JbnQoKTsKIH0KIAogR3JpZFRy
YWNrU2l6aW5nRGlyZWN0aW9uIFJlbmRlckdyaWQ6OmF1dG9QbGFjZW1lbnRNYWpvckF4aXNEaXJl
Y3Rpb24oKSBjb25zdApAQCAtMTQ2MCw4ICsxNDUyLDggQEAgdm9pZCBSZW5kZXJHcmlkOjpvZmZz
ZXRBbmRCcmVhZHRoRm9yUG9zaXRpb25lZENoaWxkKGNvbnN0IFJlbmRlckJveCYgY2hpbGQsIEdy
aWQKIHsKICAgICBBU1NFUlQoY2hpbGQuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA9PSBpc0hv
cml6b250YWxXcml0aW5nTW9kZSgpKTsKIAotICAgIGF1dG8gdW5yZXNvbHZlZFBvc2l0aW9ucyA9
IEdyaWRSZXNvbHZlZFBvc2l0aW9uOjp1bnJlc29sdmVkU3BhbkZyb21TdHlsZShzdHlsZSgpLCBj
aGlsZCwgZGlyZWN0aW9uKTsKLSAgICBpZiAodW5yZXNvbHZlZFBvc2l0aW9ucy5yZXF1aXJlc0F1
dG9QbGFjZW1lbnQoKSkgeworICAgIEdyaWRTcGFuIHBvc2l0aW9ucyA9IEdyaWRSZXNvbHZlZFBv
c2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21TdHlsZShzdHlsZSgpLCBjaGlsZCwgZGly
ZWN0aW9uKTsKKyAgICBpZiAoIXBvc2l0aW9ucy5pc0RlZmluaXRlKCkpIHsKICAgICAgICAgb2Zm
c2V0ID0gTGF5b3V0VW5pdCgpOwogICAgICAgICBicmVhZHRoID0gKGRpcmVjdGlvbiA9PSBGb3JD
b2x1bW5zKSA/IGNsaWVudExvZ2ljYWxXaWR0aCgpIDogY2xpZW50TG9naWNhbEhlaWdodCgpOwog
ICAgICAgICByZXR1cm47CkBAIC0xNDcxLDE4ICsxNDYzLDE3IEBAIHZvaWQgUmVuZGVyR3JpZDo6
b2Zmc2V0QW5kQnJlYWR0aEZvclBvc2l0aW9uZWRDaGlsZChjb25zdCBSZW5kZXJCb3gmIGNoaWxk
LCBHcmlkCiAgICAgR3JpZFBvc2l0aW9uIGVuZFBvc2l0aW9uID0gKGRpcmVjdGlvbiA9PSBGb3JD
b2x1bW5zKSA/IGNoaWxkLnN0eWxlKCkuZ3JpZEl0ZW1Db2x1bW5FbmQoKSA6IGNoaWxkLnN0eWxl
KCkuZ3JpZEl0ZW1Sb3dFbmQoKTsKICAgICBzaXplX3QgbGFzdFRyYWNrSW5kZXggPSAoZGlyZWN0
aW9uID09IEZvckNvbHVtbnMgPyBncmlkQ29sdW1uQ291bnQoKSA6IGdyaWRSb3dDb3VudCgpKSAt
IDE7CiAKLSAgICBHcmlkU3BhbiBwb3NpdGlvbnMgPSBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVz
b2x2ZUdyaWRQb3NpdGlvbnNGcm9tU3R5bGUodW5yZXNvbHZlZFBvc2l0aW9ucywgc3R5bGUoKSk7
CiAgICAgYm9vbCBzdGFydElzQXV0byA9IHN0YXJ0UG9zaXRpb24uaXNBdXRvKCkKICAgICAgICAg
fHwgKHN0YXJ0UG9zaXRpb24uaXNOYW1lZEdyaWRBcmVhKCkgJiYgR3JpZFJlc29sdmVkUG9zaXRp
b246OmlzTm9uRXhpc3RlbnROYW1lZExpbmVPckFyZWEoc3RhcnRQb3NpdGlvbi5uYW1lZEdyaWRM
aW5lKCksIHN0eWxlKCksIChkaXJlY3Rpb24gPT0gRm9yQ29sdW1ucykgPyBDb2x1bW5TdGFydFNp
ZGUgOiBSb3dTdGFydFNpZGUpKQotICAgICAgICB8fCAocG9zaXRpb25zLnJlc29sdmVkSW5pdGlh
bFBvc2l0aW9uLnRvSW50KCkgPiBsYXN0VHJhY2tJbmRleCk7CisgICAgICAgIHx8IChwb3NpdGlv
bnMucmVzb2x2ZWRJbml0aWFsUG9zaXRpb24oKS50b0ludCgpID4gbGFzdFRyYWNrSW5kZXgpOwog
ICAgIGJvb2wgZW5kSXNBdXRvID0gZW5kUG9zaXRpb24uaXNBdXRvKCkKICAgICAgICAgfHwgKGVu
ZFBvc2l0aW9uLmlzTmFtZWRHcmlkQXJlYSgpICYmIEdyaWRSZXNvbHZlZFBvc2l0aW9uOjppc05v
bkV4aXN0ZW50TmFtZWRMaW5lT3JBcmVhKGVuZFBvc2l0aW9uLm5hbWVkR3JpZExpbmUoKSwgc3R5
bGUoKSwgKGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKSA/IENvbHVtbkVuZFNpZGUgOiBSb3dFbmRT
aWRlKSkKLSAgICAgICAgfHwgKHBvc2l0aW9ucy5yZXNvbHZlZEZpbmFsUG9zaXRpb24ucHJldigp
LnRvSW50KCkgPiBsYXN0VHJhY2tJbmRleCk7CisgICAgICAgIHx8IChwb3NpdGlvbnMucmVzb2x2
ZWRGaW5hbFBvc2l0aW9uKCkucHJldigpLnRvSW50KCkgPiBsYXN0VHJhY2tJbmRleCk7CiAKICAg
ICBHcmlkUmVzb2x2ZWRQb3NpdGlvbiBmaXJzdFBvc2l0aW9uID0gR3JpZFJlc29sdmVkUG9zaXRp
b24oMCk7Ci0gICAgR3JpZFJlc29sdmVkUG9zaXRpb24gaW5pdGlhbFBvc2l0aW9uID0gc3RhcnRJ
c0F1dG8gPyBmaXJzdFBvc2l0aW9uIDogcG9zaXRpb25zLnJlc29sdmVkSW5pdGlhbFBvc2l0aW9u
OworICAgIEdyaWRSZXNvbHZlZFBvc2l0aW9uIGluaXRpYWxQb3NpdGlvbiA9IHN0YXJ0SXNBdXRv
ID8gZmlyc3RQb3NpdGlvbiA6IHBvc2l0aW9ucy5yZXNvbHZlZEluaXRpYWxQb3NpdGlvbigpOwog
ICAgIEdyaWRSZXNvbHZlZFBvc2l0aW9uIGxhc3RQb3NpdGlvbiA9IEdyaWRSZXNvbHZlZFBvc2l0
aW9uKGxhc3RUcmFja0luZGV4KTsKLSAgICBHcmlkUmVzb2x2ZWRQb3NpdGlvbiBmaW5hbFBvc2l0
aW9uID0gZW5kSXNBdXRvID8gbGFzdFBvc2l0aW9uIDogcG9zaXRpb25zLnJlc29sdmVkRmluYWxQ
b3NpdGlvbi5wcmV2KCk7CisgICAgR3JpZFJlc29sdmVkUG9zaXRpb24gZmluYWxQb3NpdGlvbiA9
IGVuZElzQXV0byA/IGxhc3RQb3NpdGlvbiA6IHBvc2l0aW9ucy5yZXNvbHZlZEZpbmFsUG9zaXRp
b24oKS5wcmV2KCk7CiAKICAgICAvLyBQb3NpdGlvbmVkIGNoaWxkcmVuIGRvIG5vdCBncm93IHRo
ZSBncmlkLCBzbyB3ZSBuZWVkIHRvIGNsYW1wIHRoZSBwb3NpdGlvbnMgdG8gYXZvaWQgZW5kaW5n
IHVwIG91dHNpZGUgb2YgaXQuCiAgICAgaW5pdGlhbFBvc2l0aW9uID0gc3RkOjptaW48R3JpZFJl
c29sdmVkUG9zaXRpb24+KGluaXRpYWxQb3NpdGlvbiwgbGFzdFBvc2l0aW9uKTsKQEAgLTE1NDIs
MTEgKzE1MzMsMTEgQEAgTGF5b3V0VW5pdCBSZW5kZXJHcmlkOjpncmlkQXJlYUJyZWFkdGhGb3JD
aGlsZEluY2x1ZGluZ0FsaWdubWVudE9mZnNldHMoY29uc3QgUmUKICAgICBjb25zdCBhdXRvJiBz
cGFuID0gY2FjaGVkR3JpZFNwYW4oY2hpbGQsIGRpcmVjdGlvbik7CiAgICAgY29uc3QgYXV0byYg
bGluZVBvc2l0aW9ucyA9IChkaXJlY3Rpb24gPT0gRm9yQ29sdW1ucykgPyBtX2NvbHVtblBvc2l0
aW9ucyA6IG1fcm93UG9zaXRpb25zOwogCi0gICAgTGF5b3V0VW5pdCBpbml0aWFsVHJhY2tQb3Np
dGlvbiA9IGxpbmVQb3NpdGlvbnNbc3Bhbi5yZXNvbHZlZEluaXRpYWxQb3NpdGlvbi50b0ludCgp
XTsKLSAgICBMYXlvdXRVbml0IGZpbmFsVHJhY2tQb3NpdGlvbiA9IGxpbmVQb3NpdGlvbnNbc3Bh
bi5yZXNvbHZlZEZpbmFsUG9zaXRpb24ucHJldigpLnRvSW50KCldOworICAgIExheW91dFVuaXQg
aW5pdGlhbFRyYWNrUG9zaXRpb24gPSBsaW5lUG9zaXRpb25zW3NwYW4ucmVzb2x2ZWRJbml0aWFs
UG9zaXRpb24oKS50b0ludCgpXTsKKyAgICBMYXlvdXRVbml0IGZpbmFsVHJhY2tQb3NpdGlvbiA9
IGxpbmVQb3NpdGlvbnNbc3Bhbi5yZXNvbHZlZEZpbmFsUG9zaXRpb24oKS5wcmV2KCkudG9JbnQo
KV07CiAKICAgICAvLyBUcmFjayBQb3NpdGlvbnMgdmVjdG9yIHN0b3JlcyB0aGUgJ3N0YXJ0JyBn
cmlkIGxpbmUgb2YgZWFjaCB0cmFjaywgc28gd2UgaGF2ZSB0byBhZGQgbGFzdCB0cmFjaydzIGJh
c2VTaXplLgotICAgIHJldHVybiBmaW5hbFRyYWNrUG9zaXRpb24gLSBpbml0aWFsVHJhY2tQb3Np
dGlvbiArIHRyYWNrc1tzcGFuLnJlc29sdmVkRmluYWxQb3NpdGlvbi5wcmV2KCkudG9JbnQoKV0u
YmFzZVNpemUoKTsKKyAgICByZXR1cm4gZmluYWxUcmFja1Bvc2l0aW9uIC0gaW5pdGlhbFRyYWNr
UG9zaXRpb24gKyB0cmFja3Nbc3Bhbi5yZXNvbHZlZEZpbmFsUG9zaXRpb24oKS5wcmV2KCkudG9J
bnQoKV0uYmFzZVNpemUoKTsKIH0KIAogdm9pZCBSZW5kZXJHcmlkOjpwb3B1bGF0ZUdyaWRQb3Np
dGlvbnMoR3JpZFNpemluZ0RhdGEmIHNpemluZ0RhdGEpCkBAIC0xODI1LDcgKzE4MTYsNyBAQCBz
dGF0aWMgaW5saW5lIExheW91dFVuaXQgb2Zmc2V0QmV0d2VlblRyYWNrcyhDb250ZW50RGlzdHJp
YnV0aW9uVHlwZSBkaXN0cmlidXRpbwogTGF5b3V0VW5pdCBSZW5kZXJHcmlkOjpjb2x1bW5BeGlz
T2Zmc2V0Rm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCkgY29uc3QKIHsKICAgICBjb25z
dCBHcmlkU3BhbiYgcm93c1NwYW4gPSBjYWNoZWRHcmlkU3BhbihjaGlsZCwgRm9yUm93cyk7Ci0g
ICAgdW5zaWduZWQgY2hpbGRTdGFydExpbmUgPSByb3dzU3Bhbi5yZXNvbHZlZEluaXRpYWxQb3Np
dGlvbi50b0ludCgpOworICAgIHVuc2lnbmVkIGNoaWxkU3RhcnRMaW5lID0gcm93c1NwYW4ucmVz
b2x2ZWRJbml0aWFsUG9zaXRpb24oKS50b0ludCgpOwogICAgIExheW91dFVuaXQgc3RhcnRPZlJv
dyA9IG1fcm93UG9zaXRpb25zW2NoaWxkU3RhcnRMaW5lXTsKICAgICBMYXlvdXRVbml0IHN0YXJ0
UG9zaXRpb24gPSBzdGFydE9mUm93ICsgbWFyZ2luQmVmb3JlRm9yQ2hpbGQoY2hpbGQpOwogICAg
IGlmIChoYXNBdXRvTWFyZ2luc0luQ29sdW1uQXhpcyhjaGlsZCkpCkBAIC0xODM2LDcgKzE4Mjcs
NyBAQCBMYXlvdXRVbml0IFJlbmRlckdyaWQ6OmNvbHVtbkF4aXNPZmZzZXRGb3JDaGlsZChjb25z
dCBSZW5kZXJCb3gmIGNoaWxkKSBjb25zdAogICAgICAgICByZXR1cm4gc3RhcnRQb3NpdGlvbjsK
ICAgICBjYXNlIEdyaWRBeGlzRW5kOgogICAgIGNhc2UgR3JpZEF4aXNDZW50ZXI6IHsKLSAgICAg
ICAgdW5zaWduZWQgY2hpbGRFbmRMaW5lID0gcm93c1NwYW4ucmVzb2x2ZWRGaW5hbFBvc2l0aW9u
LnRvSW50KCk7CisgICAgICAgIHVuc2lnbmVkIGNoaWxkRW5kTGluZSA9IHJvd3NTcGFuLnJlc29s
dmVkRmluYWxQb3NpdGlvbigpLnRvSW50KCk7CiAgICAgICAgIExheW91dFVuaXQgZW5kT2ZSb3cg
PSBtX3Jvd1Bvc2l0aW9uc1tjaGlsZEVuZExpbmVdOwogICAgICAgICAvLyBtX3Jvd1Bvc2l0aW9u
cyBpbmNsdWRlIGd1dHRlcnMgc28gd2UgbmVlZCB0byBzdWJzdHJhY3QgdGhlbSB0byBnZXQgdGhl
IGFjdHVhbCBlbmQgcG9zaXRpb24gZm9yIGEgZ2l2ZW4KICAgICAgICAgLy8gcm93ICh0aGlzIGRv
ZXMgbm90IGhhdmUgdG8gYmUgZG9uZSBmb3IgdGhlIGxhc3QgdHJhY2sgYXMgdGhlcmUgYXJlIG5v
IG1vcmUgbV9yb3dQb3NpdGlvbnMgYWZ0ZXIgaXQpCkBAIC0xODU5LDcgKzE4NTAsNyBAQCBMYXlv
dXRVbml0IFJlbmRlckdyaWQ6OmNvbHVtbkF4aXNPZmZzZXRGb3JDaGlsZChjb25zdCBSZW5kZXJC
b3gmIGNoaWxkKSBjb25zdAogTGF5b3V0VW5pdCBSZW5kZXJHcmlkOjpyb3dBeGlzT2Zmc2V0Rm9y
Q2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCkgY29uc3QKIHsKICAgICBjb25zdCBHcmlkU3Bh
biYgY29sdW1uc1NwYW4gPSBjYWNoZWRHcmlkU3BhbihjaGlsZCwgRm9yQ29sdW1ucyk7Ci0gICAg
dW5zaWduZWQgY2hpbGRTdGFydExpbmUgPSBjb2x1bW5zU3Bhbi5yZXNvbHZlZEluaXRpYWxQb3Np
dGlvbi50b0ludCgpOworICAgIHVuc2lnbmVkIGNoaWxkU3RhcnRMaW5lID0gY29sdW1uc1NwYW4u
cmVzb2x2ZWRJbml0aWFsUG9zaXRpb24oKS50b0ludCgpOwogICAgIExheW91dFVuaXQgc3RhcnRP
ZkNvbHVtbiA9IG1fY29sdW1uUG9zaXRpb25zW2NoaWxkU3RhcnRMaW5lXTsKICAgICBMYXlvdXRV
bml0IHN0YXJ0UG9zaXRpb24gPSBzdGFydE9mQ29sdW1uICsgbWFyZ2luU3RhcnRGb3JDaGlsZChj
aGlsZCk7CiAgICAgaWYgKGhhc0F1dG9NYXJnaW5zSW5Sb3dBeGlzKGNoaWxkKSkKQEAgLTE4NzAs
NyArMTg2MSw3IEBAIExheW91dFVuaXQgUmVuZGVyR3JpZDo6cm93QXhpc09mZnNldEZvckNoaWxk
KGNvbnN0IFJlbmRlckJveCYgY2hpbGQpIGNvbnN0CiAgICAgICAgIHJldHVybiBzdGFydFBvc2l0
aW9uOwogICAgIGNhc2UgR3JpZEF4aXNFbmQ6CiAgICAgY2FzZSBHcmlkQXhpc0NlbnRlcjogewot
ICAgICAgICB1bnNpZ25lZCBjaGlsZEVuZExpbmUgPSBjb2x1bW5zU3Bhbi5yZXNvbHZlZEZpbmFs
UG9zaXRpb24udG9JbnQoKTsKKyAgICAgICAgdW5zaWduZWQgY2hpbGRFbmRMaW5lID0gY29sdW1u
c1NwYW4ucmVzb2x2ZWRGaW5hbFBvc2l0aW9uKCkudG9JbnQoKTsKICAgICAgICAgTGF5b3V0VW5p
dCBlbmRPZkNvbHVtbiA9IG1fY29sdW1uUG9zaXRpb25zW2NoaWxkRW5kTGluZV07CiAgICAgICAg
IC8vIG1fY29sdW1uUG9zaXRpb25zIGluY2x1ZGUgZ3V0dGVycyBzbyB3ZSBuZWVkIHRvIHN1YnN0
cmFjdCB0aGVtIHRvIGdldCB0aGUgYWN0dWFsIGVuZCBwb3NpdGlvbiBmb3IgYSBnaXZlbgogICAg
ICAgICAvLyBjb2x1bW4gKHRoaXMgZG9lcyBub3QgaGF2ZSB0byBiZSBkb25lIGZvciB0aGUgbGFz
dCB0cmFjayBhcyB0aGVyZSBhcmUgbm8gbW9yZSBtX2NvbHVtblBvc2l0aW9ucyBhZnRlciBpdCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9HcmlkQ29vcmRpbmF0
ZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0dyaWRDb29yZGluYXRlLmgKaW5k
ZXggNzc4ZDJiMzc3Y2UwNmEzOGRlNDNkYTdlMGM5ZThkMGE3NjJjZjY0Zi4uMjFlMDQwZGMyNGQ0
NjljZTExZTJjZTJmZGVjNDA5YjI3MDM2NTNkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL0dyaWRDb29yZGluYXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL0dyaWRDb29yZGluYXRlLmgKQEAgLTQ4LDM3ICs0OCw3NiBAQCBjb25zdCB1
bnNpZ25lZCBrR3JpZE1heFRyYWNrcyA9IDEwMDAwMDA7CiAvLyBJdGVyYXRpbmcgb3ZlciB0aGUg
c3BhbiBzaG91bGRuJ3QgaW5jbHVkZSB8cmVzb2x2ZWRGaW5hbFBvc2l0aW9ufCB0byBiZSBjb3Jy
ZWN0LgogY2xhc3MgR3JpZFNwYW4gewogcHVibGljOgotICAgIEdyaWRTcGFuKGNvbnN0IEdyaWRS
ZXNvbHZlZFBvc2l0aW9uJiByZXNvbHZlZEluaXRpYWxQb3NpdGlvbiwgY29uc3QgR3JpZFJlc29s
dmVkUG9zaXRpb24mIHJlc29sdmVkRmluYWxQb3NpdGlvbikKLSAgICAgICAgOiByZXNvbHZlZElu
aXRpYWxQb3NpdGlvbihzdGQ6Om1pbihyZXNvbHZlZEluaXRpYWxQb3NpdGlvbi50b0ludCgpLCBr
R3JpZE1heFRyYWNrcyAtIDEpKQotICAgICAgICAsIHJlc29sdmVkRmluYWxQb3NpdGlvbihzdGQ6
Om1pbihyZXNvbHZlZEZpbmFsUG9zaXRpb24udG9JbnQoKSwga0dyaWRNYXhUcmFja3MpKQorCisg
ICAgc3RhdGljIEdyaWRTcGFuIGRlZmluaXRlR3JpZFNwYW4oY29uc3QgR3JpZFJlc29sdmVkUG9z
aXRpb24mIHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uLCBjb25zdCBHcmlkUmVzb2x2ZWRQb3NpdGlv
biYgcmVzb2x2ZWRGaW5hbFBvc2l0aW9uKQogICAgIHsKLSAgICAgICAgQVNTRVJUKHJlc29sdmVk
SW5pdGlhbFBvc2l0aW9uIDwgcmVzb2x2ZWRGaW5hbFBvc2l0aW9uKTsKKyAgICAgICAgcmV0dXJu
IEdyaWRTcGFuKHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uLCByZXNvbHZlZEZpbmFsUG9zaXRpb24s
IERlZmluaXRlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgR3JpZFNwYW4gaW5kZWZpbml0ZUdyaWRT
cGFuKCkKKyAgICB7CisgICAgICAgIHJldHVybiBHcmlkU3BhbigwLCAxLCBJbmRlZmluaXRlKTsK
ICAgICB9CiAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgR3JpZFNwYW4mIG8pIGNvbnN0CiAg
ICAgewotICAgICAgICByZXR1cm4gcmVzb2x2ZWRJbml0aWFsUG9zaXRpb24gPT0gby5yZXNvbHZl
ZEluaXRpYWxQb3NpdGlvbiAmJiByZXNvbHZlZEZpbmFsUG9zaXRpb24gPT0gby5yZXNvbHZlZEZp
bmFsUG9zaXRpb247CisgICAgICAgIHJldHVybiBtX3R5cGUgPT0gby5tX3R5cGUgJiYgbV9yZXNv
bHZlZEluaXRpYWxQb3NpdGlvbiA9PSBvLm1fcmVzb2x2ZWRJbml0aWFsUG9zaXRpb24gJiYgbV9y
ZXNvbHZlZEZpbmFsUG9zaXRpb24gPT0gby5tX3Jlc29sdmVkRmluYWxQb3NpdGlvbjsKICAgICB9
CiAKICAgICB1bnNpZ25lZCBpbnRlZ2VyU3BhbigpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1
cm4gcmVzb2x2ZWRGaW5hbFBvc2l0aW9uLnRvSW50KCkgLSByZXNvbHZlZEluaXRpYWxQb3NpdGlv
bi50b0ludCgpOworICAgICAgICBBU1NFUlQoaXNEZWZpbml0ZSgpKTsKKyAgICAgICAgcmV0dXJu
IG1fcmVzb2x2ZWRGaW5hbFBvc2l0aW9uLnRvSW50KCkgLSBtX3Jlc29sdmVkSW5pdGlhbFBvc2l0
aW9uLnRvSW50KCk7CiAgICAgfQogCi0gICAgR3JpZFJlc29sdmVkUG9zaXRpb24gcmVzb2x2ZWRJ
bml0aWFsUG9zaXRpb247Ci0gICAgR3JpZFJlc29sdmVkUG9zaXRpb24gcmVzb2x2ZWRGaW5hbFBv
c2l0aW9uOworICAgIGNvbnN0IEdyaWRSZXNvbHZlZFBvc2l0aW9uJiByZXNvbHZlZEluaXRpYWxQ
b3NpdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNEZWZpbml0ZSgpKTsKKyAg
ICAgICAgcmV0dXJuIG1fcmVzb2x2ZWRJbml0aWFsUG9zaXRpb247CisgICAgfQorCisgICAgY29u
c3QgR3JpZFJlc29sdmVkUG9zaXRpb24mIHJlc29sdmVkRmluYWxQb3NpdGlvbigpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoaXNEZWZpbml0ZSgpKTsKKyAgICAgICAgcmV0dXJuIG1fcmVz
b2x2ZWRGaW5hbFBvc2l0aW9uOworICAgIH0KIAogICAgIHR5cGVkZWYgR3JpZFJlc29sdmVkUG9z
aXRpb24gaXRlcmF0b3I7CiAKICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0CiAgICAgewotICAg
ICAgICByZXR1cm4gcmVzb2x2ZWRJbml0aWFsUG9zaXRpb247CisgICAgICAgIEFTU0VSVChpc0Rl
ZmluaXRlKCkpOworICAgICAgICByZXR1cm4gbV9yZXNvbHZlZEluaXRpYWxQb3NpdGlvbjsKICAg
ICB9CiAKICAgICBpdGVyYXRvciBlbmQoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIHJl
c29sdmVkRmluYWxQb3NpdGlvbjsKKyAgICAgICAgQVNTRVJUKGlzRGVmaW5pdGUoKSk7CisgICAg
ICAgIHJldHVybiBtX3Jlc29sdmVkRmluYWxQb3NpdGlvbjsKKyAgICB9CisKKyAgICBib29sIGlz
RGVmaW5pdGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdHlwZSA9PSBEZWZpbml0
ZTsKICAgICB9CisKK3ByaXZhdGU6CisKKyAgICBlbnVtIEdyaWRTcGFuVHlwZSB7RGVmaW5pdGUs
IEluZGVmaW5pdGV9OworCisgICAgR3JpZFNwYW4oY29uc3QgR3JpZFJlc29sdmVkUG9zaXRpb24m
IHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uLCBjb25zdCBHcmlkUmVzb2x2ZWRQb3NpdGlvbiYgcmVz
b2x2ZWRGaW5hbFBvc2l0aW9uLCBHcmlkU3BhblR5cGUgdHlwZSkKKyAgICAgICAgOiBtX3Jlc29s
dmVkSW5pdGlhbFBvc2l0aW9uKHN0ZDo6bWluKHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uLnRvSW50
KCksIGtHcmlkTWF4VHJhY2tzIC0gMSkpCisgICAgICAgICwgbV9yZXNvbHZlZEZpbmFsUG9zaXRp
b24oc3RkOjptaW4ocmVzb2x2ZWRGaW5hbFBvc2l0aW9uLnRvSW50KCksIGtHcmlkTWF4VHJhY2tz
KSkKKyAgICAgICAgLCBtX3R5cGUodHlwZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChyZXNvbHZl
ZEluaXRpYWxQb3NpdGlvbiA8IHJlc29sdmVkRmluYWxQb3NpdGlvbik7CisgICAgfQorCisgICAg
R3JpZFJlc29sdmVkUG9zaXRpb24gbV9yZXNvbHZlZEluaXRpYWxQb3NpdGlvbjsKKyAgICBHcmlk
UmVzb2x2ZWRQb3NpdGlvbiBtX3Jlc29sdmVkRmluYWxQb3NpdGlvbjsKKyAgICBHcmlkU3BhblR5
cGUgbV90eXBlOworCisKIH07CiAKIC8vIFRoaXMgcmVwcmVzZW50cyBhIGdyaWQgYXJlYSB0aGF0
IHNwYW5zIGluIGJvdGggcm93cycgYW5kIGNvbHVtbnMnIGRpcmVjdGlvbi4KQEAgLTg2LDggKzEy
NSw4IEBAIGNsYXNzIEdyaWRDb29yZGluYXRlIHsKIHB1YmxpYzoKICAgICAvLyBIYXNoTWFwIHJl
cXVpcmVzIGEgZGVmYXVsdCBjb25zdHVjdG9yLgogICAgIEdyaWRDb29yZGluYXRlKCkKLSAgICAg
ICAgOiBjb2x1bW5zKDAsIDEpCi0gICAgICAgICwgcm93cygwLCAxKQorICAgICAgICA6IGNvbHVt
bnMoR3JpZFNwYW46OmluZGVmaW5pdGVHcmlkU3BhbigpKQorICAgICAgICAsIHJvd3MoR3JpZFNw
YW46OmluZGVmaW5pdGVHcmlkU3BhbigpKQogICAgIHsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9HcmlkUmVzb2x2ZWRQb3NpdGlvbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3JpZFJlc29sdmVkUG9zaXRpb24uY3BwCmlu
ZGV4IDlhMGY0ZGY1OGUzM2QyNGVkMDc3MzRjODkzYjQxZDZmN2NlODU1ZmUuLjdjMjEwMWM4MzM2
MDg4MTIwZDA3ZDM4Yzk4NjA3NDdhODE4OWNkNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9HcmlkUmVzb2x2ZWRQb3NpdGlvbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL0dyaWRSZXNvbHZlZFBvc2l0aW9uLmNwcApAQCAtNDgsNiAr
NDgsMTYgQEAgc3RhdGljIGlubGluZSBib29sIGlzU3RhcnRTaWRlKEdyaWRQb3NpdGlvblNpZGUg
c2lkZSkKICAgICByZXR1cm4gc2lkZSA9PSBDb2x1bW5TdGFydFNpZGUgfHwgc2lkZSA9PSBSb3dT
dGFydFNpZGU7CiB9CiAKK3N0YXRpYyBpbmxpbmUgR3JpZFBvc2l0aW9uU2lkZSBpbml0aWFsUG9z
aXRpb25TaWRlKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgcmV0
dXJuIGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zID8gQ29sdW1uU3RhcnRTaWRlIDogUm93U3RhcnRT
aWRlOworfQorCitzdGF0aWMgaW5saW5lIEdyaWRQb3NpdGlvblNpZGUgZmluYWxQb3NpdGlvblNp
ZGUoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAgICByZXR1cm4gZGly
ZWN0aW9uID09IEZvckNvbHVtbnMgPyBDb2x1bW5FbmRTaWRlIDogUm93RW5kU2lkZTsKK30KKwog
c3RhdGljIGNvbnN0IE5hbWVkR3JpZExpbmVzTWFwJiBncmlkTGluZXNGb3JTaWRlKGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSwgR3JpZFBvc2l0aW9uU2lkZSBzaWRlKQogewogICAgIHJldHVybiBp
c0NvbHVtblNpZGUoc2lkZSkgPyBzdHlsZS5uYW1lZEdyaWRDb2x1bW5MaW5lcygpIDogc3R5bGUu
bmFtZWRHcmlkUm93TGluZXMoKTsKQEAgLTY0LDM0ICs3NCwzMSBAQCBib29sIEdyaWRSZXNvbHZl
ZFBvc2l0aW9uOjppc05vbkV4aXN0ZW50TmFtZWRMaW5lT3JBcmVhKGNvbnN0IFN0cmluZyYgbGlu
ZU5hbWUsCiAgICAgcmV0dXJuICFncmlkTGluZU5hbWVzLmNvbnRhaW5zKGltcGxpY2l0TmFtZWRH
cmlkTGluZUZvclNpZGUobGluZU5hbWUsIHNpZGUpKSAmJiAhZ3JpZExpbmVOYW1lcy5jb250YWlu
cyhsaW5lTmFtZSk7CiB9CiAKLWJvb2wgR3JpZFVucmVzb2x2ZWRTcGFuOjpyZXF1aXJlc0F1dG9Q
bGFjZW1lbnQoKSBjb25zdAorc3RhdGljIHZvaWQgYWRqdXN0R3JpZFBvc2l0aW9uc0Zyb21TdHls
ZShjb25zdCBSZW5kZXJTdHlsZSYgZ3JpZENvbnRhaW5lclN0eWxlLCBjb25zdCBSZW5kZXJCb3gm
IGdyaWRJdGVtLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uLCBHcmlkUG9zaXRp
b24mIGluaXRpYWxQb3NpdGlvbiwgR3JpZFBvc2l0aW9uJiBmaW5hbFBvc2l0aW9uKQogewotICAg
IHJldHVybiBtX2luaXRpYWxQb3NpdGlvbi5zaG91bGRCZVJlc29sdmVkQWdhaW5zdE9wcG9zaXRl
UG9zaXRpb24oKSAmJiBtX2ZpbmFsUG9zaXRpb24uc2hvdWxkQmVSZXNvbHZlZEFnYWluc3RPcHBv
c2l0ZVBvc2l0aW9uKCk7Ci19Ci0KLXZvaWQgR3JpZFVucmVzb2x2ZWRTcGFuOjphZGp1c3RHcmlk
UG9zaXRpb25zRnJvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBncmlkQ29udGFpbmVyU3R5bGUp
Ci17Ci0gICAgQVNTRVJUKGlzQ29sdW1uU2lkZShtX2luaXRpYWxQb3NpdGlvblNpZGUpID09IGlz
Q29sdW1uU2lkZShtX2ZpbmFsUG9zaXRpb25TaWRlKSk7CisgICAgYm9vbCBpc0ZvckNvbHVtbnMg
PSBkaXJlY3Rpb24gPT0gRm9yQ29sdW1uczsKKyAgICBpbml0aWFsUG9zaXRpb24gPSBpc0ZvckNv
bHVtbnMgPyBncmlkSXRlbS5zdHlsZSgpLmdyaWRJdGVtQ29sdW1uU3RhcnQoKSA6IGdyaWRJdGVt
LnN0eWxlKCkuZ3JpZEl0ZW1Sb3dTdGFydCgpOworICAgIGZpbmFsUG9zaXRpb24gPSBpc0ZvckNv
bHVtbnMgPyBncmlkSXRlbS5zdHlsZSgpLmdyaWRJdGVtQ29sdW1uRW5kKCkgOiBncmlkSXRlbS5z
dHlsZSgpLmdyaWRJdGVtUm93RW5kKCk7CiAKICAgICAvLyBXZSBtdXN0IGhhbmRsZSB0aGUgcGxh
Y2VtZW50IGVycm9yIGhhbmRsaW5nIGNvZGUgaGVyZSBpbnN0ZWFkIG9mIGluIHRoZSBTdHlsZUFk
anVzdGVyIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0bwogICAgIC8vIG92ZXJ3cml0ZSB0aGUgc3Bl
Y2lmaWVkIHZhbHVlcy4KLSAgICBpZiAobV9pbml0aWFsUG9zaXRpb24uaXNTcGFuKCkgJiYgbV9m
aW5hbFBvc2l0aW9uLmlzU3BhbigpKQotICAgICAgICBtX2ZpbmFsUG9zaXRpb24uc2V0QXV0b1Bv
c2l0aW9uKCk7CisgICAgaWYgKGluaXRpYWxQb3NpdGlvbi5pc1NwYW4oKSAmJiBmaW5hbFBvc2l0
aW9uLmlzU3BhbigpKQorICAgICAgICBmaW5hbFBvc2l0aW9uLnNldEF1dG9Qb3NpdGlvbigpOwog
CiAgICAgLy8gVHJ5IHRvIGVhcmx5IGRldGVjdCB0aGUgY2FzZSBvZiBub24gZXhpc3RpbmcgbmFt
ZWQgZ3JpZCBsaW5lcy4gVGhpcyB3YXkgd2UgY291bGQgYXNzdW1lIGxhdGVyIHRoYXQKICAgICAv
LyBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6cmVzb2x2ZUdyaXNQb3NpdGlvbkZyb21TdHlsZSgpIHdv
bid0IHJlcXVpcmUgdGhlIGF1dG9wbGFjZW1lbnQgdG8gcnVuLCBpLmUuLCBpdCdsbCBhbHdheXMg
cmV0dXJuIGEKICAgICAvLyB2YWxpZCByZXNvbHZlZCBwb3NpdGlvbi4KLSAgICBpZiAobV9pbml0
aWFsUG9zaXRpb24uaXNOYW1lZEdyaWRBcmVhKCkgJiYgR3JpZFJlc29sdmVkUG9zaXRpb246Omlz
Tm9uRXhpc3RlbnROYW1lZExpbmVPckFyZWEobV9pbml0aWFsUG9zaXRpb24ubmFtZWRHcmlkTGlu
ZSgpLCBncmlkQ29udGFpbmVyU3R5bGUsIG1faW5pdGlhbFBvc2l0aW9uU2lkZSkpCi0gICAgICAg
IG1faW5pdGlhbFBvc2l0aW9uLnNldEF1dG9Qb3NpdGlvbigpOworICAgIGlmIChpbml0aWFsUG9z
aXRpb24uaXNOYW1lZEdyaWRBcmVhKCkgJiYgR3JpZFJlc29sdmVkUG9zaXRpb246OmlzTm9uRXhp
c3RlbnROYW1lZExpbmVPckFyZWEoaW5pdGlhbFBvc2l0aW9uLm5hbWVkR3JpZExpbmUoKSwgZ3Jp
ZENvbnRhaW5lclN0eWxlLCBpbml0aWFsUG9zaXRpb25TaWRlKGRpcmVjdGlvbikpKQorICAgICAg
ICBpbml0aWFsUG9zaXRpb24uc2V0QXV0b1Bvc2l0aW9uKCk7CiAKLSAgICBpZiAobV9maW5hbFBv
c2l0aW9uLmlzTmFtZWRHcmlkQXJlYSgpICYmIEdyaWRSZXNvbHZlZFBvc2l0aW9uOjppc05vbkV4
aXN0ZW50TmFtZWRMaW5lT3JBcmVhKG1fZmluYWxQb3NpdGlvbi5uYW1lZEdyaWRMaW5lKCksIGdy
aWRDb250YWluZXJTdHlsZSwgbV9maW5hbFBvc2l0aW9uU2lkZSkpCi0gICAgICAgIG1fZmluYWxQ
b3NpdGlvbi5zZXRBdXRvUG9zaXRpb24oKTsKKyAgICBpZiAoZmluYWxQb3NpdGlvbi5pc05hbWVk
R3JpZEFyZWEoKSAmJiBHcmlkUmVzb2x2ZWRQb3NpdGlvbjo6aXNOb25FeGlzdGVudE5hbWVkTGlu
ZU9yQXJlYShmaW5hbFBvc2l0aW9uLm5hbWVkR3JpZExpbmUoKSwgZ3JpZENvbnRhaW5lclN0eWxl
LCBmaW5hbFBvc2l0aW9uU2lkZShkaXJlY3Rpb24pKSkKKyAgICAgICAgZmluYWxQb3NpdGlvbi5z
ZXRBdXRvUG9zaXRpb24oKTsKIAogICAgIC8vIElmIHRoZSBncmlkIGl0ZW0gaGFzIGFuIGF1dG9t
YXRpYyBwb3NpdGlvbiBhbmQgYSBncmlkIHNwYW4gZm9yIGEgbmFtZWQgbGluZSBpbiBhIGdpdmVu
IGRpbWVuc2lvbiwgaW5zdGVhZCB0cmVhdCB0aGUgZ3JpZCBzcGFuIGFzIG9uZS4KLSAgICBpZiAo
bV9pbml0aWFsUG9zaXRpb24uaXNBdXRvKCkgJiYgbV9maW5hbFBvc2l0aW9uLmlzU3BhbigpICYm
ICFtX2ZpbmFsUG9zaXRpb24ubmFtZWRHcmlkTGluZSgpLmlzTnVsbCgpKQotICAgICAgICBtX2Zp
bmFsUG9zaXRpb24uc2V0U3BhblBvc2l0aW9uKDEsIFN0cmluZygpKTsKLSAgICBpZiAobV9maW5h
bFBvc2l0aW9uLmlzQXV0bygpICYmIG1faW5pdGlhbFBvc2l0aW9uLmlzU3BhbigpICYmICFtX2lu
aXRpYWxQb3NpdGlvbi5uYW1lZEdyaWRMaW5lKCkuaXNOdWxsKCkpCi0gICAgICAgIG1faW5pdGlh
bFBvc2l0aW9uLnNldFNwYW5Qb3NpdGlvbigxLCBTdHJpbmcoKSk7CisgICAgaWYgKGluaXRpYWxQ
b3NpdGlvbi5pc0F1dG8oKSAmJiBmaW5hbFBvc2l0aW9uLmlzU3BhbigpICYmICFmaW5hbFBvc2l0
aW9uLm5hbWVkR3JpZExpbmUoKS5pc051bGwoKSkKKyAgICAgICAgZmluYWxQb3NpdGlvbi5zZXRT
cGFuUG9zaXRpb24oMSwgU3RyaW5nKCkpOworICAgIGlmIChmaW5hbFBvc2l0aW9uLmlzQXV0bygp
ICYmIGluaXRpYWxQb3NpdGlvbi5pc1NwYW4oKSAmJiAhaW5pdGlhbFBvc2l0aW9uLm5hbWVkR3Jp
ZExpbmUoKS5pc051bGwoKSkKKyAgICAgICAgaW5pdGlhbFBvc2l0aW9uLnNldFNwYW5Qb3NpdGlv
bigxLCBTdHJpbmcoKSk7CiB9CiAKIHVuc2lnbmVkIEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpleHBs
aWNpdEdyaWRDb2x1bW5Db3VudChjb25zdCBSZW5kZXJTdHlsZSYgZ3JpZENvbnRhaW5lclN0eWxl
KQpAQCAtMTMzLDcgKzE0MCw3IEBAIHN0YXRpYyBHcmlkUmVzb2x2ZWRQb3NpdGlvbiByZXNvbHZl
TmFtZWRHcmlkTGluZVBvc2l0aW9uRnJvbVN0eWxlKGNvbnN0IFJlbmRlclN0CiBzdGF0aWMgR3Jp
ZFNwYW4gcmVzb2x2ZVJvd1N0YXJ0Q29sdW1uU3RhcnROYW1lZEdyaWRMaW5lUG9zaXRpb25BZ2Fp
bnN0T3Bwb3NpdGVQb3NpdGlvbihjb25zdCBHcmlkUmVzb2x2ZWRQb3NpdGlvbiYgcmVzb2x2ZWRP
cHBvc2l0ZVBvc2l0aW9uLCBjb25zdCBHcmlkUG9zaXRpb24mIHBvc2l0aW9uLCBjb25zdCBWZWN0
b3I8dW5zaWduZWQ+JiBncmlkTGluZXMpCiB7CiAgICAgaWYgKCFyZXNvbHZlZE9wcG9zaXRlUG9z
aXRpb24udG9JbnQoKSkKLSAgICAgICAgcmV0dXJuIEdyaWRTcGFuKHJlc29sdmVkT3Bwb3NpdGVQ
b3NpdGlvbiwgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLm5leHQoKSk7CisgICAgICAgIHJldHVy
biBHcmlkU3Bhbjo6ZGVmaW5pdGVHcmlkU3BhbihyZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24sIHJl
c29sdmVkT3Bwb3NpdGVQb3NpdGlvbi5uZXh0KCkpOwogCiAgICAgdW5zaWduZWQgZmlyc3RMaW5l
QmVmb3JlUG9zaXRpb25JbmRleCA9IDA7CiAgICAgYXV0byBmaXJzdExpbmVCZWZvcmVQb3NpdGlv
biA9IHN0ZDo6bG93ZXJfYm91bmQoZ3JpZExpbmVzLmJlZ2luKCksIGdyaWRMaW5lcy5lbmQoKSwg
cmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLnRvSW50KCkpOwpAQCAtMTQ1LDcgKzE1Miw3IEBAIHN0
YXRpYyBHcmlkU3BhbiByZXNvbHZlUm93U3RhcnRDb2x1bW5TdGFydE5hbWVkR3JpZExpbmVQb3Np
dGlvbkFnYWluc3RPcHBvc2l0ZVBvCiAgICAgR3JpZFJlc29sdmVkUG9zaXRpb24gcmVzb2x2ZWRH
cmlkTGluZVBvc2l0aW9uID0gR3JpZFJlc29sdmVkUG9zaXRpb24oZ3JpZExpbmVzW2dyaWRMaW5l
SW5kZXhdKTsKICAgICBpZiAocmVzb2x2ZWRHcmlkTGluZVBvc2l0aW9uID49IHJlc29sdmVkT3Bw
b3NpdGVQb3NpdGlvbikKICAgICAgICAgcmVzb2x2ZWRHcmlkTGluZVBvc2l0aW9uID0gcmVzb2x2
ZWRPcHBvc2l0ZVBvc2l0aW9uLnByZXYoKTsKLSAgICByZXR1cm4gR3JpZFNwYW4oc3RkOjptaW48
R3JpZFJlc29sdmVkUG9zaXRpb24+KHJlc29sdmVkR3JpZExpbmVQb3NpdGlvbiwgcmVzb2x2ZWRP
cHBvc2l0ZVBvc2l0aW9uKSwgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uKTsKKyAgICByZXR1cm4g
R3JpZFNwYW46OmRlZmluaXRlR3JpZFNwYW4oc3RkOjptaW48R3JpZFJlc29sdmVkUG9zaXRpb24+
KHJlc29sdmVkR3JpZExpbmVQb3NpdGlvbiwgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uKSwgcmVz
b2x2ZWRPcHBvc2l0ZVBvc2l0aW9uKTsKIH0KIAogc3RhdGljIEdyaWRTcGFuIHJlc29sdmVSb3dF
bmRDb2x1bW5FbmROYW1lZEdyaWRMaW5lUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbihj
b25zdCBHcmlkUmVzb2x2ZWRQb3NpdGlvbiYgcmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCBjb25z
dCBHcmlkUG9zaXRpb24mIHBvc2l0aW9uLCBjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiBncmlkTGlu
ZXMpCkBAIC0xNjAsNyArMTY3LDcgQEAgc3RhdGljIEdyaWRTcGFuIHJlc29sdmVSb3dFbmRDb2x1
bW5FbmROYW1lZEdyaWRMaW5lUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGkKICAgICBHcmlk
UmVzb2x2ZWRQb3NpdGlvbiByZXNvbHZlZEdyaWRMaW5lUG9zaXRpb24gPSBncmlkTGluZXNbZ3Jp
ZExpbmVJbmRleF07CiAgICAgaWYgKHJlc29sdmVkR3JpZExpbmVQb3NpdGlvbiA8PSByZXNvbHZl
ZE9wcG9zaXRlUG9zaXRpb24pCiAgICAgICAgIHJlc29sdmVkR3JpZExpbmVQb3NpdGlvbiA9IHJl
c29sdmVkT3Bwb3NpdGVQb3NpdGlvbi5uZXh0KCk7Ci0gICAgcmV0dXJuIEdyaWRTcGFuKHJlc29s
dmVkT3Bwb3NpdGVQb3NpdGlvbiwgcmVzb2x2ZWRHcmlkTGluZVBvc2l0aW9uKTsKKyAgICByZXR1
cm4gR3JpZFNwYW46OmRlZmluaXRlR3JpZFNwYW4ocmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCBy
ZXNvbHZlZEdyaWRMaW5lUG9zaXRpb24pOwogfQogCiBzdGF0aWMgR3JpZFNwYW4gcmVzb2x2ZU5h
bWVkR3JpZExpbmVQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKGNvbnN0IFJlbmRlclN0
eWxlJiBncmlkQ29udGFpbmVyU3R5bGUsIGNvbnN0IEdyaWRSZXNvbHZlZFBvc2l0aW9uJiByZXNv
bHZlZE9wcG9zaXRlUG9zaXRpb24sIGNvbnN0IEdyaWRQb3NpdGlvbiYgcG9zaXRpb24sIEdyaWRQ
b3NpdGlvblNpZGUgc2lkZSkKQEAgLTE3Nyw4ICsxODQsOCBAQCBzdGF0aWMgR3JpZFNwYW4gcmVz
b2x2ZU5hbWVkR3JpZExpbmVQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKGNvbnN0IFJl
bmRlcgogICAgIC8vIFNlZSBodHRwOi8vbGlzdHMudzMub3JnL0FyY2hpdmVzL1B1YmxpYy93d3ct
c3R5bGUvMjAxM0p1bi8wMzk0Lmh0bWwuCiAgICAgaWYgKGl0ID09IGdyaWRMaW5lc05hbWVzLmVu
ZCgpKSB7CiAgICAgICAgIGlmIChpc1N0YXJ0U2lkZShzaWRlKSAmJiByZXNvbHZlZE9wcG9zaXRl
UG9zaXRpb24udG9JbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBHcmlkU3BhbihyZXNvbHZlZE9w
cG9zaXRlUG9zaXRpb24ucHJldigpLCByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24pOwotICAgICAg
ICByZXR1cm4gR3JpZFNwYW4ocmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCByZXNvbHZlZE9wcG9z
aXRlUG9zaXRpb24ubmV4dCgpKTsKKyAgICAgICAgICAgIHJldHVybiBHcmlkU3Bhbjo6ZGVmaW5p
dGVHcmlkU3BhbihyZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24ucHJldigpLCByZXNvbHZlZE9wcG9z
aXRlUG9zaXRpb24pOworICAgICAgICByZXR1cm4gR3JpZFNwYW46OmRlZmluaXRlR3JpZFNwYW4o
cmVzb2x2ZWRPcHBvc2l0ZVBvc2l0aW9uLCByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24ubmV4dCgp
KTsKICAgICB9CiAKICAgICBpZiAoc2lkZSA9PSBSb3dTdGFydFNpZGUgfHwgc2lkZSA9PSBDb2x1
bW5TdGFydFNpZGUpCkBAIC0xOTEsOCArMTk4LDggQEAgc3RhdGljIEdyaWRTcGFuIHJlc29sdmVH
cmlkUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbihjb25zdCBSZW5kZXJTdHlsZSYgZ3IK
IHsKICAgICBpZiAocG9zaXRpb24uaXNBdXRvKCkpIHsKICAgICAgICAgaWYgKGlzU3RhcnRTaWRl
KHNpZGUpICYmIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbi50b0ludCgpKQotICAgICAgICAgICAg
cmV0dXJuIEdyaWRTcGFuKHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbi5wcmV2KCksIHJlc29sdmVk
T3Bwb3NpdGVQb3NpdGlvbik7Ci0gICAgICAgIHJldHVybiBHcmlkU3BhbihyZXNvbHZlZE9wcG9z
aXRlUG9zaXRpb24sIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbi5uZXh0KCkpOworICAgICAgICAg
ICAgcmV0dXJuIEdyaWRTcGFuOjpkZWZpbml0ZUdyaWRTcGFuKHJlc29sdmVkT3Bwb3NpdGVQb3Np
dGlvbi5wcmV2KCksIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbik7CisgICAgICAgIHJldHVybiBH
cmlkU3Bhbjo6ZGVmaW5pdGVHcmlkU3BhbihyZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24sIHJlc29s
dmVkT3Bwb3NpdGVQb3NpdGlvbi5uZXh0KCkpOwogICAgIH0KIAogICAgIEFTU0VSVChwb3NpdGlv
bi5pc1NwYW4oKSk7CkBAIC0yMDgsMzAgKzIxNSwzMiBAQCBzdGF0aWMgR3JpZFNwYW4gcmVzb2x2
ZUdyaWRQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKGNvbnN0IFJlbmRlclN0eWxlJiBn
cgogICAgIHVuc2lnbmVkIHBvc2l0aW9uT2Zmc2V0ID0gcG9zaXRpb24uc3BhblBvc2l0aW9uKCk7
CiAgICAgaWYgKGlzU3RhcnRTaWRlKHNpZGUpKSB7CiAgICAgICAgIGlmICghcmVzb2x2ZWRPcHBv
c2l0ZVBvc2l0aW9uLnRvSW50KCkpCi0gICAgICAgICAgICByZXR1cm4gR3JpZFNwYW4ocmVzb2x2
ZWRPcHBvc2l0ZVBvc2l0aW9uLCByZXNvbHZlZE9wcG9zaXRlUG9zaXRpb24ubmV4dCgpKTsKKyAg
ICAgICAgICAgIHJldHVybiBHcmlkU3Bhbjo6ZGVmaW5pdGVHcmlkU3BhbihyZXNvbHZlZE9wcG9z
aXRlUG9zaXRpb24sIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbi5uZXh0KCkpOwogCiAgICAgICAg
IHVuc2lnbmVkIGluaXRpYWxSZXNvbHZlZFBvc2l0aW9uID0gc3RkOjptYXg8aW50PigwLCByZXNv
bHZlZE9wcG9zaXRlUG9zaXRpb24udG9JbnQoKSAtIHBvc2l0aW9uT2Zmc2V0KTsKLSAgICAgICAg
cmV0dXJuIEdyaWRTcGFuKGluaXRpYWxSZXNvbHZlZFBvc2l0aW9uLCByZXNvbHZlZE9wcG9zaXRl
UG9zaXRpb24pOworICAgICAgICByZXR1cm4gR3JpZFNwYW46OmRlZmluaXRlR3JpZFNwYW4oaW5p
dGlhbFJlc29sdmVkUG9zaXRpb24sIHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbik7CiAgICAgfQog
Ci0gICAgcmV0dXJuIEdyaWRTcGFuKHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbiwgcmVzb2x2ZWRP
cHBvc2l0ZVBvc2l0aW9uLnRvSW50KCkgKyBwb3NpdGlvbk9mZnNldCk7CisgICAgcmV0dXJuIEdy
aWRTcGFuOjpkZWZpbml0ZUdyaWRTcGFuKHJlc29sdmVkT3Bwb3NpdGVQb3NpdGlvbiwgcmVzb2x2
ZWRPcHBvc2l0ZVBvc2l0aW9uLnRvSW50KCkgKyBwb3NpdGlvbk9mZnNldCk7CiB9CiAKIEdyaWRT
cGFuIEdyaWRSZXNvbHZlZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21BdXRvUGxh
Y2VtZW50UG9zaXRpb24oY29uc3QgUmVuZGVyU3R5bGUmIGdyaWRDb250YWluZXJTdHlsZSwgY29u
c3QgUmVuZGVyQm94JiBncmlkSXRlbSwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlv
biwgY29uc3QgR3JpZFJlc29sdmVkUG9zaXRpb24mIHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uKQog
ewotICAgIEdyaWRVbnJlc29sdmVkU3BhbiB1bnJlc29sdmVkU3BhbiA9IHVucmVzb2x2ZWRTcGFu
RnJvbVN0eWxlKGdyaWRDb250YWluZXJTdHlsZSwgZ3JpZEl0ZW0sIGRpcmVjdGlvbik7CisgICAg
R3JpZFBvc2l0aW9uIGluaXRpYWxQb3NpdGlvbiwgZmluYWxQb3NpdGlvbjsKKyAgICBhZGp1c3RH
cmlkUG9zaXRpb25zRnJvbVN0eWxlKGdyaWRDb250YWluZXJTdHlsZSwgZ3JpZEl0ZW0sIGRpcmVj
dGlvbiwgaW5pdGlhbFBvc2l0aW9uLCBmaW5hbFBvc2l0aW9uKTsKIAorICAgIEdyaWRQb3NpdGlv
blNpZGUgZmluYWxTaWRlID0gZmluYWxQb3NpdGlvblNpZGUoZGlyZWN0aW9uKTsKICAgICAvLyBU
aGlzIG1ldGhvZCB3aWxsIG9ubHkgYmUgdXNlZCB3aGVuIGJvdGggcG9zaXRpb25zIG5lZWQgdG8g
YmUgcmVzb2x2ZWQgYWdhaW5zdCB0aGUgb3Bwb3NpdGUgb25lLgotICAgIEFTU0VSVCh1bnJlc29s
dmVkU3Bhbi5yZXF1aXJlc0F1dG9QbGFjZW1lbnQoKSk7CisgICAgQVNTRVJUKGluaXRpYWxQb3Np
dGlvbi5zaG91bGRCZVJlc29sdmVkQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24oKSAmJiBmaW5hbFBv
c2l0aW9uLnNob3VsZEJlUmVzb2x2ZWRBZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbigpKTsKIAogICAg
IEdyaWRSZXNvbHZlZFBvc2l0aW9uIHJlc29sdmVkRmluYWxQb3NpdGlvbiA9IHJlc29sdmVkSW5p
dGlhbFBvc2l0aW9uLm5leHQoKTsKIAotICAgIGlmICh1bnJlc29sdmVkU3Bhbi5pbml0aWFsUG9z
aXRpb24oKS5pc1NwYW4oKSkKLSAgICAgICAgcmV0dXJuIHJlc29sdmVHcmlkUG9zaXRpb25BZ2Fp
bnN0T3Bwb3NpdGVQb3NpdGlvbihncmlkQ29udGFpbmVyU3R5bGUsIHJlc29sdmVkSW5pdGlhbFBv
c2l0aW9uLCB1bnJlc29sdmVkU3Bhbi5pbml0aWFsUG9zaXRpb24oKSwgdW5yZXNvbHZlZFNwYW4u
ZmluYWxQb3NpdGlvblNpZGUoKSk7Ci0gICAgaWYgKHVucmVzb2x2ZWRTcGFuLmZpbmFsUG9zaXRp
b24oKS5pc1NwYW4oKSkKLSAgICAgICAgcmV0dXJuIHJlc29sdmVHcmlkUG9zaXRpb25BZ2FpbnN0
T3Bwb3NpdGVQb3NpdGlvbihncmlkQ29udGFpbmVyU3R5bGUsIHJlc29sdmVkSW5pdGlhbFBvc2l0
aW9uLCB1bnJlc29sdmVkU3Bhbi5maW5hbFBvc2l0aW9uKCksIHVucmVzb2x2ZWRTcGFuLmZpbmFs
UG9zaXRpb25TaWRlKCkpOworICAgIGlmIChpbml0aWFsUG9zaXRpb24uaXNTcGFuKCkpCisgICAg
ICAgIHJldHVybiByZXNvbHZlR3JpZFBvc2l0aW9uQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24oZ3Jp
ZENvbnRhaW5lclN0eWxlLCByZXNvbHZlZEluaXRpYWxQb3NpdGlvbiwgaW5pdGlhbFBvc2l0aW9u
LCBmaW5hbFNpZGUpOworICAgIGlmIChmaW5hbFBvc2l0aW9uLmlzU3BhbigpKQorICAgICAgICBy
ZXR1cm4gcmVzb2x2ZUdyaWRQb3NpdGlvbkFnYWluc3RPcHBvc2l0ZVBvc2l0aW9uKGdyaWRDb250
YWluZXJTdHlsZSwgcmVzb2x2ZWRJbml0aWFsUG9zaXRpb24sIGZpbmFsUG9zaXRpb24sIGZpbmFs
U2lkZSk7CiAKLSAgICByZXR1cm4gR3JpZFNwYW4ocmVzb2x2ZWRJbml0aWFsUG9zaXRpb24sIHJl
c29sdmVkRmluYWxQb3NpdGlvbik7CisgICAgcmV0dXJuIEdyaWRTcGFuOjpkZWZpbml0ZUdyaWRT
cGFuKHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uLCByZXNvbHZlZEZpbmFsUG9zaXRpb24pOwogfQog
CiBzdGF0aWMgR3JpZFJlc29sdmVkUG9zaXRpb24gcmVzb2x2ZUdyaWRQb3NpdGlvbkZyb21TdHls
ZShjb25zdCBSZW5kZXJTdHlsZSYgZ3JpZENvbnRhaW5lclN0eWxlLCBjb25zdCBHcmlkUG9zaXRp
b24mIHBvc2l0aW9uLCBHcmlkUG9zaXRpb25TaWRlIHNpZGUpCkBAIC0yOTEsNDcgKzMwMCwzOSBA
QCBzdGF0aWMgR3JpZFJlc29sdmVkUG9zaXRpb24gcmVzb2x2ZUdyaWRQb3NpdGlvbkZyb21TdHls
ZShjb25zdCBSZW5kZXJTdHlsZSYgZ3JpZAogICAgIHJldHVybiBHcmlkUmVzb2x2ZWRQb3NpdGlv
bigwKTsKIH0KIAotR3JpZFVucmVzb2x2ZWRTcGFuIEdyaWRSZXNvbHZlZFBvc2l0aW9uOjp1bnJl
c29sdmVkU3BhbkZyb21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgZ3JpZENvbnRhaW5lclN0eWxl
LCBjb25zdCBSZW5kZXJCb3gmIGdyaWRJdGVtLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGly
ZWN0aW9uKQorR3JpZFNwYW4gR3JpZFJlc29sdmVkUG9zaXRpb246OnJlc29sdmVHcmlkUG9zaXRp
b25zRnJvbVN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBncmlkQ29udGFpbmVyU3R5bGUsIGNvbnN0
IFJlbmRlckJveCYgZ3JpZEl0ZW0sIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24p
CiB7Ci0gICAgR3JpZFBvc2l0aW9uIGluaXRpYWxQb3NpdGlvbiA9IChkaXJlY3Rpb24gPT0gRm9y
Q29sdW1ucykgPyBncmlkSXRlbS5zdHlsZSgpLmdyaWRJdGVtQ29sdW1uU3RhcnQoKSA6IGdyaWRJ
dGVtLnN0eWxlKCkuZ3JpZEl0ZW1Sb3dTdGFydCgpOwotICAgIGF1dG8gaW5pdGlhbFBvc2l0aW9u
U2lkZSA9IChkaXJlY3Rpb24gPT0gRm9yQ29sdW1ucykgPyBDb2x1bW5TdGFydFNpZGUgOiBSb3dT
dGFydFNpZGU7Ci0gICAgR3JpZFBvc2l0aW9uIGZpbmFsUG9zaXRpb24gPSAoZGlyZWN0aW9uID09
IEZvckNvbHVtbnMpID8gZ3JpZEl0ZW0uc3R5bGUoKS5ncmlkSXRlbUNvbHVtbkVuZCgpIDogZ3Jp
ZEl0ZW0uc3R5bGUoKS5ncmlkSXRlbVJvd0VuZCgpOwotICAgIGF1dG8gZmluYWxQb3NpdGlvblNp
ZGUgPSAoZGlyZWN0aW9uID09IEZvckNvbHVtbnMpID8gQ29sdW1uRW5kU2lkZSA6IFJvd0VuZFNp
ZGU7Ci0KLSAgICBHcmlkVW5yZXNvbHZlZFNwYW4gdW5yZXNvbHZlZFNwYW4oaW5pdGlhbFBvc2l0
aW9uLCBpbml0aWFsUG9zaXRpb25TaWRlLCBmaW5hbFBvc2l0aW9uLCBmaW5hbFBvc2l0aW9uU2lk
ZSk7Ci0gICAgdW5yZXNvbHZlZFNwYW4uYWRqdXN0R3JpZFBvc2l0aW9uc0Zyb21TdHlsZShncmlk
Q29udGFpbmVyU3R5bGUpOworICAgIEdyaWRQb3NpdGlvbiBpbml0aWFsUG9zaXRpb24sIGZpbmFs
UG9zaXRpb247CisgICAgYWRqdXN0R3JpZFBvc2l0aW9uc0Zyb21TdHlsZShncmlkQ29udGFpbmVy
U3R5bGUsIGdyaWRJdGVtLCBkaXJlY3Rpb24sIGluaXRpYWxQb3NpdGlvbiwgZmluYWxQb3NpdGlv
bik7CiAKLSAgICByZXR1cm4gdW5yZXNvbHZlZFNwYW47Ci19Ci0KLUdyaWRTcGFuIEdyaWRSZXNv
bHZlZFBvc2l0aW9uOjpyZXNvbHZlR3JpZFBvc2l0aW9uc0Zyb21TdHlsZShjb25zdCBHcmlkVW5y
ZXNvbHZlZFNwYW4mIHVucmVzb2x2ZWRTcGFuLCBjb25zdCBSZW5kZXJTdHlsZSYgZ3JpZENvbnRh
aW5lclN0eWxlKQotewotICAgIEFTU0VSVCghdW5yZXNvbHZlZFNwYW4ucmVxdWlyZXNBdXRvUGxh
Y2VtZW50KCkpOworICAgIEdyaWRQb3NpdGlvblNpZGUgaW5pdGlhbFNpZGUgPSBpbml0aWFsUG9z
aXRpb25TaWRlKGRpcmVjdGlvbik7CisgICAgR3JpZFBvc2l0aW9uU2lkZSBmaW5hbFNpZGUgPSBm
aW5hbFBvc2l0aW9uU2lkZShkaXJlY3Rpb24pOwogCi0gICAgLy8gV2UgbXVzdCBjcmVhdGUgdGhl
IEdyaWRTcGFuIHVzaW5nIGZpbmFsUG9zaXRpb24ucHJldigpIGJlY2F1c2UgR3JpZFNwYW4gc3Rv
cmVzIGNlbGwgaW5kZXhlcyBhbmQKLSAgICAvLyBhbiBpdGVtIGZpbmlzaGluZyBvbiB0aGUgTi10
aCBsaW5lIGJlbG9uZ3MgdG8gdGhlIE4tMS10aCBjZWxsLgorICAgIC8vIFdlIGNhbid0IGdldCBv
dXIgZ3JpZCBwb3NpdGlvbnMgd2l0aG91dCBydW5uaW5nIHRoZSBhdXRvIHBsYWNlbWVudCBhbGdv
cml0aG0uCisgICAgaWYgKGluaXRpYWxQb3NpdGlvbi5zaG91bGRCZVJlc29sdmVkQWdhaW5zdE9w
cG9zaXRlUG9zaXRpb24oKSAmJiBmaW5hbFBvc2l0aW9uLnNob3VsZEJlUmVzb2x2ZWRBZ2FpbnN0
T3Bwb3NpdGVQb3NpdGlvbigpKQorICAgICAgICByZXR1cm4gR3JpZFNwYW46OmluZGVmaW5pdGVH
cmlkU3BhbigpOwogCi0gICAgaWYgKHVucmVzb2x2ZWRTcGFuLmluaXRpYWxQb3NpdGlvbigpLnNo
b3VsZEJlUmVzb2x2ZWRBZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbigpKSB7CisgICAgaWYgKGluaXRp
YWxQb3NpdGlvbi5zaG91bGRCZVJlc29sdmVkQWdhaW5zdE9wcG9zaXRlUG9zaXRpb24oKSkgewog
ICAgICAgICAvLyBJbmZlciB0aGUgcG9zaXRpb24gZnJvbSB0aGUgZmluYWwgcG9zaXRpb24gKCdh
dXRvIC8gMScgb3IgJ3NwYW4gMiAvIDMnIGNhc2UpLgotICAgICAgICBhdXRvIGZpbmFsUmVzb2x2
ZWRQb3NpdGlvbiA9IHJlc29sdmVHcmlkUG9zaXRpb25Gcm9tU3R5bGUoZ3JpZENvbnRhaW5lclN0
eWxlLCB1bnJlc29sdmVkU3Bhbi5maW5hbFBvc2l0aW9uKCksIHVucmVzb2x2ZWRTcGFuLmZpbmFs
UG9zaXRpb25TaWRlKCkpOwotICAgICAgICByZXR1cm4gcmVzb2x2ZUdyaWRQb3NpdGlvbkFnYWlu
c3RPcHBvc2l0ZVBvc2l0aW9uKGdyaWRDb250YWluZXJTdHlsZSwgZmluYWxSZXNvbHZlZFBvc2l0
aW9uLCB1bnJlc29sdmVkU3Bhbi5pbml0aWFsUG9zaXRpb24oKSwgdW5yZXNvbHZlZFNwYW4uaW5p
dGlhbFBvc2l0aW9uU2lkZSgpKTsKKyAgICAgICAgYXV0byBmaW5hbFJlc29sdmVkUG9zaXRpb24g
PSByZXNvbHZlR3JpZFBvc2l0aW9uRnJvbVN0eWxlKGdyaWRDb250YWluZXJTdHlsZSwgZmluYWxQ
b3NpdGlvbiwgZmluYWxTaWRlKTsKKyAgICAgICAgcmV0dXJuIHJlc29sdmVHcmlkUG9zaXRpb25B
Z2FpbnN0T3Bwb3NpdGVQb3NpdGlvbihncmlkQ29udGFpbmVyU3R5bGUsIGZpbmFsUmVzb2x2ZWRQ
b3NpdGlvbiwgaW5pdGlhbFBvc2l0aW9uLCBpbml0aWFsU2lkZSk7CiAgICAgfQogCi0gICAgaWYg
KHVucmVzb2x2ZWRTcGFuLmZpbmFsUG9zaXRpb24oKS5zaG91bGRCZVJlc29sdmVkQWdhaW5zdE9w
cG9zaXRlUG9zaXRpb24oKSkgeworICAgIGlmIChmaW5hbFBvc2l0aW9uLnNob3VsZEJlUmVzb2x2
ZWRBZ2FpbnN0T3Bwb3NpdGVQb3NpdGlvbigpKSB7CiAgICAgICAgIC8vIEluZmVyIG91ciBwb3Np
dGlvbiBmcm9tIHRoZSBpbml0aWFsIHBvc2l0aW9uICgnMSAvIGF1dG8nIG9yICczIC8gc3BhbiAy
JyBjYXNlKS4KLSAgICAgICAgYXV0byBpbml0aWFsUmVzb2x2ZWRQb3NpdGlvbiA9IHJlc29sdmVH
cmlkUG9zaXRpb25Gcm9tU3R5bGUoZ3JpZENvbnRhaW5lclN0eWxlLCB1bnJlc29sdmVkU3Bhbi5p
bml0aWFsUG9zaXRpb24oKSwgdW5yZXNvbHZlZFNwYW4uaW5pdGlhbFBvc2l0aW9uU2lkZSgpKTsK
LSAgICAgICAgcmV0dXJuIHJlc29sdmVHcmlkUG9zaXRpb25BZ2FpbnN0T3Bwb3NpdGVQb3NpdGlv
bihncmlkQ29udGFpbmVyU3R5bGUsIGluaXRpYWxSZXNvbHZlZFBvc2l0aW9uLCB1bnJlc29sdmVk
U3Bhbi5maW5hbFBvc2l0aW9uKCksIHVucmVzb2x2ZWRTcGFuLmZpbmFsUG9zaXRpb25TaWRlKCkp
OworICAgICAgICBhdXRvIGluaXRpYWxSZXNvbHZlZFBvc2l0aW9uID0gcmVzb2x2ZUdyaWRQb3Np
dGlvbkZyb21TdHlsZShncmlkQ29udGFpbmVyU3R5bGUsIGluaXRpYWxQb3NpdGlvbiwgaW5pdGlh
bFNpZGUpOworICAgICAgICByZXR1cm4gcmVzb2x2ZUdyaWRQb3NpdGlvbkFnYWluc3RPcHBvc2l0
ZVBvc2l0aW9uKGdyaWRDb250YWluZXJTdHlsZSwgaW5pdGlhbFJlc29sdmVkUG9zaXRpb24sIGZp
bmFsUG9zaXRpb24sIGZpbmFsU2lkZSk7CiAgICAgfQogCi0gICAgR3JpZFJlc29sdmVkUG9zaXRp
b24gcmVzb2x2ZWRJbml0aWFsUG9zaXRpb24gPSByZXNvbHZlR3JpZFBvc2l0aW9uRnJvbVN0eWxl
KGdyaWRDb250YWluZXJTdHlsZSwgdW5yZXNvbHZlZFNwYW4uaW5pdGlhbFBvc2l0aW9uKCksIHVu
cmVzb2x2ZWRTcGFuLmluaXRpYWxQb3NpdGlvblNpZGUoKSk7Ci0gICAgR3JpZFJlc29sdmVkUG9z
aXRpb24gcmVzb2x2ZWRGaW5hbFBvc2l0aW9uID0gcmVzb2x2ZUdyaWRQb3NpdGlvbkZyb21TdHls
ZShncmlkQ29udGFpbmVyU3R5bGUsIHVucmVzb2x2ZWRTcGFuLmZpbmFsUG9zaXRpb24oKSwgdW5y
ZXNvbHZlZFNwYW4uZmluYWxQb3NpdGlvblNpZGUoKSk7CisgICAgR3JpZFJlc29sdmVkUG9zaXRp
b24gcmVzb2x2ZWRJbml0aWFsUG9zaXRpb24gPSByZXNvbHZlR3JpZFBvc2l0aW9uRnJvbVN0eWxl
KGdyaWRDb250YWluZXJTdHlsZSwgaW5pdGlhbFBvc2l0aW9uLCBpbml0aWFsU2lkZSk7CisgICAg
R3JpZFJlc29sdmVkUG9zaXRpb24gcmVzb2x2ZWRGaW5hbFBvc2l0aW9uID0gcmVzb2x2ZUdyaWRQ
b3NpdGlvbkZyb21TdHlsZShncmlkQ29udGFpbmVyU3R5bGUsIGZpbmFsUG9zaXRpb24sIGZpbmFs
U2lkZSk7CiAKICAgICBpZiAocmVzb2x2ZWRJbml0aWFsUG9zaXRpb24gPiByZXNvbHZlZEZpbmFs
UG9zaXRpb24pCiAgICAgICAgIHN0ZDo6c3dhcChyZXNvbHZlZEluaXRpYWxQb3NpdGlvbiwgcmVz
b2x2ZWRGaW5hbFBvc2l0aW9uKTsKICAgICBlbHNlIGlmIChyZXNvbHZlZEluaXRpYWxQb3NpdGlv
biA9PSByZXNvbHZlZEZpbmFsUG9zaXRpb24pCiAgICAgICAgIHJlc29sdmVkRmluYWxQb3NpdGlv
biA9IHJlc29sdmVkSW5pdGlhbFBvc2l0aW9uLm5leHQoKTsKIAotICAgIHJldHVybiBHcmlkU3Bh
bihyZXNvbHZlZEluaXRpYWxQb3NpdGlvbiwgc3RkOjptYXgocmVzb2x2ZWRJbml0aWFsUG9zaXRp
b24sIHJlc29sdmVkRmluYWxQb3NpdGlvbikpOworICAgIHJldHVybiBHcmlkU3Bhbjo6ZGVmaW5p
dGVHcmlkU3BhbihyZXNvbHZlZEluaXRpYWxQb3NpdGlvbiwgc3RkOjptYXgocmVzb2x2ZWRJbml0
aWFsUG9zaXRpb24sIHJlc29sdmVkRmluYWxQb3NpdGlvbikpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvR3Jp
ZFJlc29sdmVkUG9zaXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9Hcmlk
UmVzb2x2ZWRQb3NpdGlvbi5oCmluZGV4IDJiZWIyYjJmMTlkN2M1NTg2NjU5NGM5NDU2NmUzMmZj
OWY3NDQ3NmUuLjNkOTFlZWNiMGJjZDUzZmQwZTIxMjJhNmZiNTBjYTVjMDZjMjMyMGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9HcmlkUmVzb2x2ZWRQb3NpdGlv
bi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9HcmlkUmVzb2x2ZWRQb3Np
dGlvbi5oCkBAIC00NiwzMSArNDYsNiBAQCBlbnVtIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiB7
CiAgICAgRm9yUm93cwogfTsKIAotY2xhc3MgR3JpZFVucmVzb2x2ZWRTcGFuIHsKLXB1YmxpYzoK
LSAgICBHcmlkVW5yZXNvbHZlZFNwYW4oR3JpZFBvc2l0aW9uIGluaXRpYWxQb3NpdGlvbiwgR3Jp
ZFBvc2l0aW9uU2lkZSBpbml0aWFsUG9zaXRpb25TaWRlLCBHcmlkUG9zaXRpb24gZmluYWxQb3Np
dGlvbiwgR3JpZFBvc2l0aW9uU2lkZSBmaW5hbFBvc2l0aW9uU2lkZSkKLSAgICAgICAgOiBtX2lu
aXRpYWxQb3NpdGlvbihpbml0aWFsUG9zaXRpb24pCi0gICAgICAgICwgbV9maW5hbFBvc2l0aW9u
KGZpbmFsUG9zaXRpb24pCi0gICAgICAgICwgbV9pbml0aWFsUG9zaXRpb25TaWRlKGluaXRpYWxQ
b3NpdGlvblNpZGUpCi0gICAgICAgICwgbV9maW5hbFBvc2l0aW9uU2lkZShmaW5hbFBvc2l0aW9u
U2lkZSkKLSAgICB7Ci0gICAgfQotCi0gICAgY29uc3QgR3JpZFBvc2l0aW9uJiBpbml0aWFsUG9z
aXRpb24oKSBjb25zdCB7IHJldHVybiBtX2luaXRpYWxQb3NpdGlvbjsgfQotICAgIGNvbnN0IEdy
aWRQb3NpdGlvbiYgZmluYWxQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZmluYWxQb3NpdGlv
bjsgfQotICAgIEdyaWRQb3NpdGlvblNpZGUgaW5pdGlhbFBvc2l0aW9uU2lkZSgpIGNvbnN0IHsg
cmV0dXJuIG1faW5pdGlhbFBvc2l0aW9uU2lkZTsgfQotICAgIEdyaWRQb3NpdGlvblNpZGUgZmlu
YWxQb3NpdGlvblNpZGUoKSBjb25zdCB7IHJldHVybiBtX2ZpbmFsUG9zaXRpb25TaWRlOyB9Ci0K
LSAgICBib29sIHJlcXVpcmVzQXV0b1BsYWNlbWVudCgpIGNvbnN0OwotICAgIHZvaWQgYWRqdXN0
R3JpZFBvc2l0aW9uc0Zyb21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgZ3JpZENvbnRhaW5lclN0
eWxlKTsKLQotcHJpdmF0ZToKLSAgICBHcmlkUG9zaXRpb24gbV9pbml0aWFsUG9zaXRpb247Ci0g
ICAgR3JpZFBvc2l0aW9uIG1fZmluYWxQb3NpdGlvbjsKLSAgICBHcmlkUG9zaXRpb25TaWRlIG1f
aW5pdGlhbFBvc2l0aW9uU2lkZTsKLSAgICBHcmlkUG9zaXRpb25TaWRlIG1fZmluYWxQb3NpdGlv
blNpZGU7Ci19OwotCiAvLyBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBsaW5lIGluZGV4IGludG8g
b25lIG9mIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBncmlkIGFycmF5LgogLy8gV3JhcHMgYW4gdW5z
aWduZWQgaW50ZWdlciBqdXN0IGZvciB0aGUgcHVycG9zZSBvZiBrbm93aW5nIHdoYXQgd2UgbWFu
aXB1bGF0ZSBpbiB0aGUgZ3JpZCBjb2RlLgogY2xhc3MgR3JpZFJlc29sdmVkUG9zaXRpb24gewpA
QCAtMTM3LDggKzExMiw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBzdGF0aWMgR3JpZFNwYW4g
cmVzb2x2ZUdyaWRQb3NpdGlvbnNGcm9tQXV0b1BsYWNlbWVudFBvc2l0aW9uKGNvbnN0IFJlbmRl
clN0eWxlJiwgY29uc3QgUmVuZGVyQm94JiwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uLCBjb25z
dCBHcmlkUmVzb2x2ZWRQb3NpdGlvbiYpOwotICAgIHN0YXRpYyBHcmlkU3BhbiByZXNvbHZlR3Jp
ZFBvc2l0aW9uc0Zyb21TdHlsZShjb25zdCBHcmlkVW5yZXNvbHZlZFNwYW4mLCBjb25zdCBSZW5k
ZXJTdHlsZSYpOwotICAgIHN0YXRpYyBHcmlkVW5yZXNvbHZlZFNwYW4gdW5yZXNvbHZlZFNwYW5G
cm9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBSZW5kZXJCb3gmLCBHcmlkVHJhY2tT
aXppbmdEaXJlY3Rpb24pOworICAgIHN0YXRpYyBHcmlkU3BhbiByZXNvbHZlR3JpZFBvc2l0aW9u
c0Zyb21TdHlsZShjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IFJlbmRlckJveCYsIEdyaWRUcmFj
a1NpemluZ0RpcmVjdGlvbik7CiAgICAgc3RhdGljIHVuc2lnbmVkIGV4cGxpY2l0R3JpZENvbHVt
bkNvdW50KGNvbnN0IFJlbmRlclN0eWxlJik7CiAgICAgc3RhdGljIHVuc2lnbmVkIGV4cGxpY2l0
R3JpZFJvd0NvdW50KGNvbnN0IFJlbmRlclN0eWxlJik7CiAgICAgc3RhdGljIGJvb2wgaXNOb25F
eGlzdGVudE5hbWVkTGluZU9yQXJlYShjb25zdCBTdHJpbmcmIGxpbmVOYW1lLCBjb25zdCBSZW5k
ZXJTdHlsZSYsIEdyaWRQb3NpdGlvblNpZGUpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>