<?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>176336</bug_id>
          
          <creation_ts>2017-09-04 14:49:13 -0700</creation_ts>
          <short_desc>Make the distinction between entrypoints and CFG roots more clear by naming things better</short_desc>
          <delta_ts>2017-09-27 12:37:40 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>175396</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1345259</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-09-04 14:49:13 -0700</bug_when>
    <thetext>I think this will make the code easier cleaner, instead of just having comments stating that a particular field is only used in SSA.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345574</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-09-05 12:40:21 -0700</bug_when>
    <thetext>The vector called m_entrypoints now I&apos;m going to rename to m_roots. This represents the CFG roots. I&apos;ll also rename m_entrypointToArguments to m_rootToArguments. Similarly, I&apos;ll rename Graph::isEntrypoint to Graph::isRoot

m_numberOfEntrypoints is only used in SSA, and I&apos;ll keep the same name. That field represents the number of logical entrypoints this compilation is making. It&apos;s not necessarily the number of CFG roots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345605</commentid>
    <comment_count>2</comment_count>
      <attachid>319930</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-09-05 13:10:45 -0700</bug_when>
    <thetext>Created attachment 319930
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345611</commentid>
    <comment_count>3</comment_count>
      <attachid>319930</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-09-05 13:13:34 -0700</bug_when>
    <thetext>Comment on attachment 319930
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345617</commentid>
    <comment_count>4</comment_count>
      <attachid>319930</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-09-05 13:16:14 -0700</bug_when>
    <thetext>Comment on attachment 319930
patch

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

r=me too.

&gt; Source/JavaScriptCore/ChangeLog:17
&gt; +

You should probably say that you renamed m_entrypoints to m_roots in the changelog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345624</commentid>
    <comment_count>5</comment_count>
      <attachid>319930</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2017-09-05 13:20:48 -0700</bug_when>
    <thetext>Comment on attachment 319930
patch

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

r=me.  The code changes seem fine.  Please update the ChangeLog.

&gt; Source/JavaScriptCore/ChangeLog:16
&gt; +        Graph::m_numberOfEntrypoints is only used in SSA when compiling with
&gt; +        EntrySwitch. It represents the logical number of entrypoints the compilation
&gt; +        will end up with. Crucially, Graph::m_numberOfEntrypoints != Graph::m_roots.size().
&gt; +        This is the main reason I&apos;ve renamed the fields and related methods.

I don&apos;t find changes to m_numberOfEntrypoints in the patch.  It would be good to discuss the reasoning behind the change of m_entrypointToArguments to m_rootToArguments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345629</commentid>
    <comment_count>6</comment_count>
      <attachid>319930</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-09-05 13:34:11 -0700</bug_when>
    <thetext>Comment on attachment 319930
patch

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

&gt;&gt; Source/JavaScriptCore/ChangeLog:16
&gt;&gt; +        This is the main reason I&apos;ve renamed the fields and related methods.
&gt; 
&gt; I don&apos;t find changes to m_numberOfEntrypoints in the patch.  It would be good to discuss the reasoning behind the change of m_entrypointToArguments to m_rootToArguments.

This patch doesn&apos;t change m_numberOfEntrypoints on purpose. That field is retaining its name because it describes its purpose.

Also, this patch renames m_entrypointToArguments to m_rootToArguments to be consistent with the change of m_entrypoints to m_roots.

&gt;&gt; Source/JavaScriptCore/ChangeLog:17
&gt;&gt; +
&gt; 
&gt; You should probably say that you renamed m_entrypoints to m_roots in the changelog.

It says this above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345630</commentid>
    <comment_count>7</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-09-05 13:40:41 -0700</bug_when>
    <thetext>New changelog:

This patch does renaming to make the distinction between Graph::m_entrypoints
and Graph::m_numberOfEntrypoints more clear. The source of confusion is that
Graph::m_entrypoints.size() is not equivalent to Graph::m_numberOfEntrypoints.
Graph::m_entrypoints is really just the CFG roots. In CPS, this vector has
size &gt;= 1. In SSA, the size is always 1. This patch renames Graph::m_entrypoints
to Graph::m_roots. To be consistent, this patch also renames Graph&apos;s m_entrypointToArguments
field to m_rootToArguments.

Graph::m_numberOfEntrypoints retains its name. This field is only used in SSA
when compiling with EntrySwitch. It represents the logical number of entrypoints
the compilation will end up with. Each EntrySwitch has m_numberOfEntrypoints
cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345633</commentid>
    <comment_count>8</comment_count>
      <attachid>319932</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-09-05 13:47:52 -0700</bug_when>
    <thetext>Created attachment 319932
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345646</commentid>
    <comment_count>9</comment_count>
      <attachid>319932</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-05 14:30:09 -0700</bug_when>
    <thetext>Comment on attachment 319932
patch for landing

Clearing flags on attachment: 319932

Committed r221637: &lt;http://trac.webkit.org/changeset/221637&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345647</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-05 14:30:11 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353542</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-27 12:37:40 -0700</bug_when>
    <thetext>&lt;rdar://problem/34693633&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319930</attachid>
            <date>2017-09-05 13:10:45 -0700</date>
            <delta_ts>2017-09-05 13:47:52 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>25966</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjIxNjMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBA
CisyMDE3LTA5LTA1ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IE1ha2UgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gZW50cnlwb2ludHMgYW5kIENGRyByb290cyBt
b3JlIGNsZWFyIGJ5IG5hbWluZyB0aGluZ3MgYmV0dGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzYzMzYKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGRvZXMgcmVuYW1pbmcgdG8gbWFr
ZSB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBHcmFwaDo6bV9lbnRyeXBvaW50cworICAgICAgICBh
bmQgR3JhcGg6Om1fbnVtYmVyT2ZFbnRyeXBvaW50cyBtb3JlIGNsZWFyLiBHcmFwaDo6bV9lbnRy
eXBvaW50cyBpcyByZWFsbHkKKyAgICAgICAganVzdCB0aGUgQ0ZHIHJvb3RzLiBJbiBDUFMsIHRo
aXMgbWF5IGhhdmUgc2l6ZSA+IDEuIEluIFNTQSwgdGhlIHNpemUgaXMgYWx3YXlzCisgICAgICAg
IDEuIFRoaXMgcGF0Y2ggcmVuYW1lcyBHcmFwaDo6bV9lbnRyeXBvaW50cyB0byBHcmFwaDo6bV9y
b290cy4KKyAgICAgICAgCisgICAgICAgIEdyYXBoOjptX251bWJlck9mRW50cnlwb2ludHMgaXMg
b25seSB1c2VkIGluIFNTQSB3aGVuIGNvbXBpbGluZyB3aXRoCisgICAgICAgIEVudHJ5U3dpdGNo
LiBJdCByZXByZXNlbnRzIHRoZSBsb2dpY2FsIG51bWJlciBvZiBlbnRyeXBvaW50cyB0aGUgY29t
cGlsYXRpb24KKyAgICAgICAgd2lsbCBlbmQgdXAgd2l0aC4gQ3J1Y2lhbGx5LCBHcmFwaDo6bV9u
dW1iZXJPZkVudHJ5cG9pbnRzICE9IEdyYXBoOjptX3Jvb3RzLnNpemUoKS4KKyAgICAgICAgVGhp
cyBpcyB0aGUgbWFpbiByZWFzb24gSSd2ZSByZW5hbWVkIHRoZSBmaWVsZHMgYW5kIHJlbGF0ZWQg
bWV0aG9kcy4KKworICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUNvZGVCbG9jayk6CisgICAgICAgICogZGZnL0RGR0NG
Ry5oOgorICAgICAgICAoSlNDOjpERkc6OkNGRzo6cm9vdHMpOgorICAgICAgICAoSlNDOjpERkc6
OkNQU0NGRzo6Q1BTQ0ZHKToKKyAgICAgICAgKiBkZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQaGFzZTo6c3BlY2lhbENhc2VB
cmd1bWVudHMpOgorICAgICAgICAqIGRmZy9ERkdEQ0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6RENFUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmRl
dGVybWluZVJlYWNoYWJpbGl0eSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmJsb2Nrc0lu
UHJlT3JkZXIpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpibG9ja3NJblBvc3RPcmRlcik6
CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Om1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVG
b3IpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
Ojppc1Jvb3QpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppc0VudHJ5cG9pbnQpOiBEZWxl
dGVkLgorICAgICAgICAqIGRmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUpOgorICAgICAgICAq
IGRmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6Y3JlYXRlUHJlSGVhZGVyKToKKyAgICAgICAgKiBkZmcvREZHTWF4aW1hbEZsdXNoSW5zZXJ0
aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok1heGltYWxGbHVzaEluc2VydGlvblBo
YXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6Ok1heGltYWxGbHVzaEluc2VydGlvblBoYXNl
Ojp0cmVhdFJlZ3VsYXJCbG9jayk6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVh
dGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFbnRyeXBvaW50Q3JlYXRpb25Q
aGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2U6OnJ1bik6Cisg
ICAgICAgICogZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6U1NBQ29udmVyc2lvblBoYXNlOjpydW4pOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1l
bnRUeXBlcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmxpbmtPU1JFbnRy
aWVzKToKKyAgICAgICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKiBk
ZmcvREZHVmFsaWRhdGUuY3BwOgorCiAyMDE3LTA5LTA1ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNv
cmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgdGVzdDI2MjogQ29tcGxldGlvbiB2YWx1ZXMgZm9y
IGNvbnRyb2wgZmxvdyBkbyBub3QgbWF0Y2ggdGhlIHNwZWMKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAyMjE2Mjgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDE2OCw3ICs0MTY4LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZAogICAgIC8vIHVzIHRvIHRyYWNrIGlmIGEgdXNlIG9mIGFuIGFyZ3Vt
ZW50IG1heSB1c2UgdGhlIGFjdHVhbCBhcmd1bWVudCBwYXNzZWQsIGFzCiAgICAgLy8gb3Bwb3Nl
ZCB0byB1c2luZyBhIHZhbHVlIHdlIHNldCBleHBsaWNpdGx5LgogICAgIGlmIChtX2N1cnJlbnRC
bG9jayA9PSBtX2dyYXBoLmJsb2NrKDApICYmICFpbmxpbmVDYWxsRnJhbWUoKSkgewotICAgICAg
ICBhdXRvIGFkZFJlc3VsdCA9IG1fZ3JhcGgubV9lbnRyeXBvaW50VG9Bcmd1bWVudHMuYWRkKG1f
Y3VycmVudEJsb2NrLCBBcmd1bWVudHNWZWN0b3IoKSk7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0
ID0gbV9ncmFwaC5tX3Jvb3RUb0FyZ3VtZW50cy5hZGQobV9jdXJyZW50QmxvY2ssIEFyZ3VtZW50
c1ZlY3RvcigpKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYWRkUmVzdWx0LmlzTmV3RW50cnkp
OwogICAgICAgICBBcmd1bWVudHNWZWN0b3ImIGVudHJ5cG9pbnRBcmd1bWVudHMgPSBhZGRSZXN1
bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICBlbnRyeXBvaW50QXJndW1lbnRzLnJlc2l6ZSht
X251bUFyZ3VtZW50cyk7CkBAIC01Mjc2LDcgKzUyNzYsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgICAgIC8vIFdlJ3JlIG5vdyBjb21taXR0
ZWQgdG8gY29tcGlsaW5nIHRoaXMgYXMgYW4gZW50cnlwb2ludC4KICAgICAgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5pc0NhdGNoRW50cnlwb2ludCA9IHRydWU7Ci0gICAgICAgICAgICBtX2dyYXBo
Lm1fZW50cnlwb2ludHMuYXBwZW5kKG1fY3VycmVudEJsb2NrKTsKKyAgICAgICAgICAgIG1fZ3Jh
cGgubV9yb290cy5hcHBlbmQobV9jdXJyZW50QmxvY2spOwogCiAgICAgICAgICAgICBWZWN0b3I8
U3BlY3VsYXRlZFR5cGU+IGFyZ3VtZW50UHJlZGljdGlvbnMobV9udW1Bcmd1bWVudHMpOwogICAg
ICAgICAgICAgVmVjdG9yPFNwZWN1bGF0ZWRUeXBlPiBsb2NhbFByZWRpY3Rpb25zOwpAQCAtNTM0
MSw3ICs1MzQxLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAog
ICAgICAgICAgICAgYWRkVG9HcmFwaChFeGl0T0spOwogCiAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2dyYXBoLm1fZW50cnlwb2ludFRvQXJndW1lbnRz
LmFkZChtX2N1cnJlbnRCbG9jaywgQXJndW1lbnRzVmVjdG9yKCkpOworICAgICAgICAgICAgICAg
IGF1dG8gYWRkUmVzdWx0ID0gbV9ncmFwaC5tX3Jvb3RUb0FyZ3VtZW50cy5hZGQobV9jdXJyZW50
QmxvY2ssIEFyZ3VtZW50c1ZlY3RvcigpKTsKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgICAgICAgICAgICAgQXJndW1lbnRzVmVjdG9y
JiBlbnRyeXBvaW50QXJndW1lbnRzID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAg
ICAgICAgICAgICBlbnRyeXBvaW50QXJndW1lbnRzLnJlc2l6ZShtX251bUFyZ3VtZW50cyk7CkBA
IC02NDAwLDcgKzY0MDAsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUNvZGVCbG9jaygp
CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBmaXJzdCBibG9jayBpcyBkZWZpbml0ZWx5IGFu
IE9TUiB0YXJnZXQuCiAgICAgICAgICAgICAgICAgICAgIGlmICghbV9ncmFwaC5udW1CbG9ja3Mo
KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPmlzT1NSVGFyZ2V0ID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9lbnRyeXBvaW50cy5hcHBlbmQoYmxv
Y2sucHRyKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3Jvb3RzLmFwcGVu
ZChibG9jay5wdHIoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaC5hcHBlbmRCbG9jayhXVEZNb3ZlKGJsb2NrKSk7CiAgICAgICAgICAgICAgICAg
ICAgIHByZXBhcmVUb1BhcnNlQmxvY2soKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ0ZHLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
RkcuaAkocmV2aXNpb24gMjIxNjI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
RkcuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBwdWJsaWM6CiAgICAgTGlzdCBy
b290cygpCiAgICAgewogICAgICAgICBMaXN0IHJlc3VsdDsKLSAgICAgICAgZm9yIChCYXNpY0Js
b2NrKiByb290IDogbV9ncmFwaC5tX2VudHJ5cG9pbnRzKQorICAgICAgICBmb3IgKEJhc2ljQmxv
Y2sqIHJvb3QgOiBtX2dyYXBoLm1fcm9vdHMpCiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHJv
b3QpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTg5LDcgKzg5LDcgQEAgcHVi
bGljOgogICAgIENQU0NGRyhHcmFwaCYgZ3JhcGgpCiAgICAgICAgIDogU2luZ2xlUm9vdEdyYXBo
PENGRz4oKmdyYXBoLm1fc3NhQ0ZHKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGdyYXBoLm1fZW50
cnlwb2ludHMuc2l6ZSgpKTsKKyAgICAgICAgQVNTRVJUKGdyYXBoLm1fcm9vdHMuc2l6ZSgpKTsK
ICAgICB9CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhy
ZWFkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDIyMTYyOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM3MCw3ICszNzAsNyBAQCBwcml2YXRlOgogICAgICAgICAvLyBzcGVjaWFsLWNhc2Vk
LiBXZSBjb3VsZCBoYXZlIGluc3RlYWQgdXNlZCB0d28gZGlmZmVyZW50IG5vZGUgdHlwZXMgLSBv
bmUgZm9yIHRoZSBhcmd1bWVudHMKICAgICAgICAgLy8gYXQgdGhlIHByb2xvZ3VlIGNhc2UsIGFu
ZCBhbm90aGVyIGZvciB0aGUgb3RoZXIgdXNlcy4gQnV0IHRoaXMgc2VlbWVkIGxpa2UgSVIgb3Zl
cmtpbGwuCiAKLSAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9ncmFwaC5tX2VudHJ5cG9pbnRU
b0FyZ3VtZW50cykgeworICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX2dyYXBoLm1fcm9vdFRv
QXJndW1lbnRzKSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBlbnRyeXBvaW50ID0gcGFpci5r
ZXk7CiAgICAgICAgICAgICBjb25zdCBBcmd1bWVudHNWZWN0b3ImIGFyZ3VtZW50cyA9IHBhaXIu
dmFsdWU7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBhcmd1bWVudHMuc2l6ZSgpOyBp
LS07KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAJKHJl
dmlzaW9uIDIyMTYyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICAgICAgZm9y
IChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5QcmVPcmRlcigpKQogICAgICAg
ICAgICAgZml4dXBCbG9jayhibG9jayk7CiAgICAgICAgIAotICAgICAgICBmb3IgKGF1dG8mIGFy
Z3VtZW50c1ZlY3RvciA6IG1fZ3JhcGgubV9lbnRyeXBvaW50VG9Bcmd1bWVudHMudmFsdWVzKCkp
CisgICAgICAgIGZvciAoYXV0byYgYXJndW1lbnRzVmVjdG9yIDogbV9ncmFwaC5tX3Jvb3RUb0Fy
Z3VtZW50cy52YWx1ZXMoKSkKICAgICAgICAgICAgIGNsZWFuVmFyaWFibGVzKGFyZ3VtZW50c1Zl
Y3Rvcik7CiAKICAgICAgICAgLy8gSnVzdCBkbyBhIGJhc2ljIFBoYW50b20vQ2hlY2sgY2xlYW4t
dXAuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24g
MjIxNjI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUyNSw3ICs1MjUsNyBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQsIER1bXBDCiAgICAgICAgICAgICBvdXQucHJpbnQoIiAgQXJndW1lbnQgZm9ybWF0cyBm
b3IgZW50cnlwb2ludCBpbmRleDogIiwgZW50cnlwb2ludEluZGV4LCAiIDogIiwgbGlzdER1bXAo
bV9hcmd1bWVudEZvcm1hdHNbZW50cnlwb2ludEluZGV4XSksICJcbiIpOwogICAgIH0KICAgICBl
bHNlIHsKLSAgICAgICAgZm9yIChhdXRvIHBhaXIgOiBtX2VudHJ5cG9pbnRUb0FyZ3VtZW50cykK
KyAgICAgICAgZm9yIChhdXRvIHBhaXIgOiBtX3Jvb3RUb0FyZ3VtZW50cykKICAgICAgICAgICAg
IG91dC5wcmludCgiICBBcmd1bWVudHMgZm9yIGJsb2NrIyIsIHBhaXIua2V5LT5pbmRleCwgIjog
IiwgbGlzdER1bXAocGFpci52YWx1ZSksICJcbiIpOwogICAgIH0KICAgICBvdXQucHJpbnQoIlxu
Iik7CkBAIC02NjQsNyArNjY0LDcgQEAgdm9pZCBHcmFwaDo6aGFuZGxlU3VjY2Vzc29yKFZlY3Rv
cjxCYXNpYwogdm9pZCBHcmFwaDo6ZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCkKIHsKICAgICBWZWN0
b3I8QmFzaWNCbG9jayosIDE2PiB3b3JrbGlzdDsKLSAgICBmb3IgKEJhc2ljQmxvY2sqIGVudHJ5
cG9pbnQgOiBtX2VudHJ5cG9pbnRzKSB7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBlbnRyeXBvaW50
IDogbV9yb290cykgewogICAgICAgICBlbnRyeXBvaW50LT5pc1JlYWNoYWJsZSA9IHRydWU7CiAg
ICAgICAgIHdvcmtsaXN0LmFwcGVuZChlbnRyeXBvaW50KTsKICAgICB9CkBAIC04NzgsNyArODc4
LDcgQEAgQmxvY2tMaXN0IEdyYXBoOjpibG9ja3NJblByZU9yZGVyKCkKIHsKICAgICBCbG9ja0xp
c3QgcmVzdWx0OwogICAgIEJsb2NrV29ya2xpc3Qgd29ya2xpc3Q7Ci0gICAgZm9yIChCYXNpY0Js
b2NrKiBlbnRyeXBvaW50IDogbV9lbnRyeXBvaW50cykKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGVu
dHJ5cG9pbnQgOiBtX3Jvb3RzKQogICAgICAgICB3b3JrbGlzdC5wdXNoKGVudHJ5cG9pbnQpOwog
ICAgIHdoaWxlIChCYXNpY0Jsb2NrKiBibG9jayA9IHdvcmtsaXN0LnBvcCgpKSB7CiAgICAgICAg
IHJlc3VsdC5hcHBlbmQoYmxvY2spOwpAQCAtOTE2LDcgKzkxNiw3IEBAIEJsb2NrTGlzdCBHcmFw
aDo6YmxvY2tzSW5Qb3N0T3JkZXIoKQogewogICAgIEJsb2NrTGlzdCByZXN1bHQ7CiAgICAgUG9z
dE9yZGVyQmxvY2tXb3JrbGlzdCB3b3JrbGlzdDsKLSAgICBmb3IgKEJhc2ljQmxvY2sqIGVudHJ5
cG9pbnQgOiBtX2VudHJ5cG9pbnRzKQorICAgIGZvciAoQmFzaWNCbG9jayogZW50cnlwb2ludCA6
IG1fcm9vdHMpCiAgICAgICAgIHdvcmtsaXN0LnB1c2goZW50cnlwb2ludCk7CiAgICAgd2hpbGUg
KEJsb2NrV2l0aE9yZGVyIGl0ZW0gPSB3b3JrbGlzdC5wb3AoKSkgewogICAgICAgICBzd2l0Y2gg
KGl0ZW0ub3JkZXIpIHsKQEAgLTE2MjgsNyArMTYyOCw3IEBAIE1ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGUgR3JhcGg6Om1ldGgKICAgICAgICAgICAgIGlmIChub2RlLT5hY2Nlc3Nlc1N0YWNr
KCp0aGlzKSkgewogICAgICAgICAgICAgICAgIGlmIChtX2Zvcm0gIT0gU1NBICYmIG5vZGUtPmxv
Y2FsKCkuaXNBcmd1bWVudCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGludCBhcmd1bWVudCA9
IG5vZGUtPmxvY2FsKCkudG9Bcmd1bWVudCgpOwotICAgICAgICAgICAgICAgICAgICBOb2RlKiBh
cmd1bWVudE5vZGUgPSBtX2VudHJ5cG9pbnRUb0FyZ3VtZW50cy5maW5kKGJsb2NrKDApKS0+dmFs
dWVbYXJndW1lbnRdOworICAgICAgICAgICAgICAgICAgICBOb2RlKiBhcmd1bWVudE5vZGUgPSBt
X3Jvb3RUb0FyZ3VtZW50cy5maW5kKGJsb2NrKDApKS0+dmFsdWVbYXJndW1lbnRdOwogICAgICAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG1hdGNoIFNldEFyZ3VtZW50IG5vZGVz
IGF0IG90aGVyIGVudHJ5cG9pbnRzIGFzIHdlbGw6CiAgICAgICAgICAgICAgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU4NDEKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGFyZ3VtZW50Tm9kZSAmJiBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9
PSBhcmd1bWVudE5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMjIxNjI4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC05NDksMjMgKzk0OSwyMyBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGNsZWFyQ1BTQ0ZHRGF0YSgpOwogCi0gICAgYm9vbCBpc0Vu
dHJ5cG9pbnQoQmFzaWNCbG9jayogYmxvY2spIGNvbnN0CisgICAgYm9vbCBpc1Jvb3QoQmFzaWNC
bG9jayogYmxvY2spIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFt
X2lzSW5TU0FDb252ZXJzaW9uLCAiVGhpcyBpcyBub3Qgd3JpdHRlbiB0byB3b3JrIGR1cmluZyBT
U0EgY29udmVyc2lvbi4iKTsKIAogICAgICAgICBpZiAobV9mb3JtID09IFNTQSkgewotICAgICAg
ICAgICAgQVNTRVJUKG1fZW50cnlwb2ludHMuc2l6ZSgpID09IDEpOwotICAgICAgICAgICAgQVNT
RVJUKG1fZW50cnlwb2ludHMuY29udGFpbnModGhpcy0+YmxvY2soMCkpKTsKKyAgICAgICAgICAg
IEFTU0VSVChtX3Jvb3RzLnNpemUoKSA9PSAxKTsKKyAgICAgICAgICAgIEFTU0VSVChtX3Jvb3Rz
LmNvbnRhaW5zKHRoaXMtPmJsb2NrKDApKSk7CiAgICAgICAgICAgICByZXR1cm4gYmxvY2sgPT0g
dGhpcy0+YmxvY2soMCk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobV9lbnRyeXBvaW50cy5z
aXplKCkgPD0gNCkgewotICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBtX2VudHJ5cG9pbnRzLmNv
bnRhaW5zKGJsb2NrKTsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gbV9lbnRyeXBvaW50
VG9Bcmd1bWVudHMuY29udGFpbnMoYmxvY2spKTsKKyAgICAgICAgaWYgKG1fcm9vdHMuc2l6ZSgp
IDw9IDQpIHsKKyAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gbV9yb290cy5jb250YWlucyhibG9j
ayk7CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IG1fcm9vdFRvQXJndW1lbnRzLmNvbnRh
aW5zKGJsb2NrKSk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9Ci0gICAg
ICAgIGJvb2wgcmVzdWx0ID0gbV9lbnRyeXBvaW50VG9Bcmd1bWVudHMuY29udGFpbnMoYmxvY2sp
OwotICAgICAgICBBU1NFUlQocmVzdWx0ID09IG1fZW50cnlwb2ludHMuY29udGFpbnMoYmxvY2sp
KTsKKyAgICAgICAgYm9vbCByZXN1bHQgPSBtX3Jvb3RUb0FyZ3VtZW50cy5jb250YWlucyhibG9j
ayk7CisgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gbV9yb290cy5jb250YWlucyhibG9jaykpOwog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtOTc1LDcgKzk3NSw3IEBAIHB1Ymxp
YzoKICAgICBDb2RlQmxvY2sqIG1fcHJvZmlsZWRCbG9jazsKICAgICAKICAgICBWZWN0b3I8UmVm
UHRyPEJhc2ljQmxvY2s+LCA4PiBtX2Jsb2NrczsKLSAgICBWZWN0b3I8QmFzaWNCbG9jayosIDE+
IG1fZW50cnlwb2ludHM7CisgICAgVmVjdG9yPEJhc2ljQmxvY2sqLCAxPiBtX3Jvb3RzOwogICAg
IFZlY3RvcjxFZGdlLCAxNj4gbV92YXJBcmdDaGlsZHJlbjsKIAogICAgIEhhc2hNYXA8RW5jb2Rl
ZEpTVmFsdWUsIEZyb3plblZhbHVlKiwgRW5jb2RlZEpTVmFsdWVIYXNoLCBFbmNvZGVkSlNWYWx1
ZUhhc2hUcmFpdHM+IG1fZnJvemVuVmFsdWVNYXA7CkBAIC05ODgsNyArOTg4LDcgQEAgcHVibGlj
OgogICAgIC8vIEluIENQUywgdGhpcyBpcyBhbGwgb2YgdGhlIFNldEFyZ3VtZW50IG5vZGVzIGZv
ciB0aGUgYXJndW1lbnRzIGluIHRoZSBtYWNoaW5lIGNvZGUgYmxvY2sKICAgICAvLyB0aGF0IHN1
cnZpdmVkIERDRS4gQWxsIG9mIHRoZW0gZXhjZXB0IG1heWJlICJ0aGlzIiB3aWxsIHN1cnZpdmUg
RENFLCBiZWNhdXNlIG9mIHRoZSBGbHVzaAogICAgIC8vIG5vZGVzLiBJbiBTU0EsIHRoaXMgaGFz
IG5vIG1lYW5pbmcuIEl0J3MgZW1wdHkuCi0gICAgSGFzaE1hcDxCYXNpY0Jsb2NrKiwgQXJndW1l
bnRzVmVjdG9yPiBtX2VudHJ5cG9pbnRUb0FyZ3VtZW50czsKKyAgICBIYXNoTWFwPEJhc2ljQmxv
Y2sqLCBBcmd1bWVudHNWZWN0b3I+IG1fcm9vdFRvQXJndW1lbnRzOwogCiAgICAgLy8gSW4gU1NB
LCB0aGlzIGlzIHRoZSBhcmd1bWVudCBzcGVjdWxhdGlvbiB0aGF0IHdlJ3ZlIGxvY2tlZCBpbiBm
b3IgYW4gZW50cnlwb2ludCBibG9jay4KICAgICAvLwpAQCAtMTAyMSw5ICsxMDIxLDkgQEAgcHVi
bGljOgogICAgIEhhc2hNYXA8dW5zaWduZWQsIHVuc2lnbmVkPiBtX2VudHJ5cG9pbnRJbmRleFRv
Q2F0Y2hCeXRlY29kZU9mZnNldDsKIAogICAgIC8vIFRoaXMgaXMgdGhlIG51bWJlciBvZiBsb2dp
Y2FsIGVudHJ5cG9pbnRzIHRoYXQgd2UncmUgY29tcGlsaW5nLiBUaGlzIGlzIG9ubHkgdXNlZAot
ICAgIC8vIGluIFNTQS4gRWFjaCBFbnRyeVN3aXRjaCBub2RlIG11c3QgaGF2ZSBudW1iZXJPZkVu
dHJ5cG9pbnRzIGNhc2VzLiBOb3RlLCB0aGlzIGlzCi0gICAgLy8gbm90IHRoZSBzYW1lIGFzIG1f
ZW50cnlwb2ludHMuc2l6ZSgpLiBtX2VudHJ5cG9pbnRzLnNpemUoKSByZXByZXNlbnRzIHRoZSBu
dW1iZXIKLSAgICAvLyBvZiByb290cyBpbiB0aGUgQ0ZHLiBJbiBTU0EsIG1fZW50cnlwb2ludHMu
c2l6ZSgpID09IDEuCisgICAgLy8gaW4gU1NBLiBFYWNoIEVudHJ5U3dpdGNoIG5vZGUgbXVzdCBo
YXZlIG1fbnVtYmVyT2ZFbnRyeXBvaW50cyBjYXNlcy4gTm90ZSwgdGhpcyBpcworICAgIC8vIG5v
dCB0aGUgc2FtZSBhcyBtX3Jvb3RzLnNpemUoKS4gbV9yb290cy5zaXplKCkgcmVwcmVzZW50cyB0
aGUgbnVtYmVyIG9mIHJvb3RzIGluCisgICAgLy8gdGhlIENGRy4gSW4gU1NBLCBtX3Jvb3RzLnNp
emUoKSA9PSAxIGV2ZW4gaWYgd2UncmUgY29tcGlsaW5nIG1vcmUgdGhhbiBvbmUgZW50cnlwb2lu
dC4KICAgICB1bnNpZ25lZCBtX251bWJlck9mRW50cnlwb2ludHMgeyBVSU5UX01BWCB9OwogCiAg
ICAgU2VnbWVudGVkVmVjdG9yPFZhcmlhYmxlQWNjZXNzRGF0YSwgMTY+IG1fdmFyaWFibGVBY2Nl
c3NEYXRhOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJh
Y3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJ
blBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDIyMTYyOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05Myw3ICs5Myw3IEBAIHN0YXRpYyB2b2lkIHNldExpdmVWYWx1ZXMoVmVjdG9yPE5vZGVB
YnMKIAogdm9pZCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZSgpCiB7Ci0gICAgZm9y
IChCYXNpY0Jsb2NrKiBlbnRyeXBvaW50IDogbV9ncmFwaC5tX2VudHJ5cG9pbnRzKSB7CisgICAg
Zm9yIChCYXNpY0Jsb2NrKiBlbnRyeXBvaW50IDogbV9ncmFwaC5tX3Jvb3RzKSB7CiAgICAgICAg
IGVudHJ5cG9pbnQtPmNmYVNob3VsZFJldmlzaXQgPSB0cnVlOwogICAgICAgICBlbnRyeXBvaW50
LT5jZmFIYXNWaXNpdGVkID0gZmFsc2U7CiAgICAgICAgIGVudHJ5cG9pbnQtPmNmYUZvdW5kQ29u
c3RhbnRzID0gZmFsc2U7CkBAIC0xMDYsNyArMTA2LDcgQEAgdm9pZCBJblBsYWNlQWJzdHJhY3RT
dGF0ZTo6aW5pdGlhbGl6ZSgpCiAgICAgICAgICAgICAgICAgZW50cnlwb2ludC0+dmFsdWVzQXRU
YWlsLmFyZ3VtZW50KGkpLmNsZWFyKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBjb25zdCBBcmd1bWVudHNWZWN0b3ImIGFyZ3VtZW50cyA9IG1fZ3JhcGgu
bV9lbnRyeXBvaW50VG9Bcmd1bWVudHMuZmluZChlbnRyeXBvaW50KS0+dmFsdWU7CisgICAgICAg
ICAgICBjb25zdCBBcmd1bWVudHNWZWN0b3ImIGFyZ3VtZW50cyA9IG1fZ3JhcGgubV9yb290VG9B
cmd1bWVudHMuZmluZChlbnRyeXBvaW50KS0+dmFsdWU7CiAgICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGVudHJ5cG9pbnQtPnZhbHVlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygp
OyArK2kpIHsKICAgICAgICAgICAgICAgICBlbnRyeXBvaW50LT52YWx1ZXNBdFRhaWwuYXJndW1l
bnQoaSkuY2xlYXIoKTsKIApAQCAtMTQ2LDggKzE0Niw4IEBAIHZvaWQgSW5QbGFjZUFic3RyYWN0
U3RhdGU6OmluaXRpYWxpemUoKQogICAgIH0KIAogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sg
OiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKLSAgICAgICAgaWYgKG1fZ3JhcGgu
aXNFbnRyeXBvaW50KGJsb2NrKSkgewotICAgICAgICAgICAgLy8gV2UgYm9vdHN0cmFwcGVkIHRo
ZSBlbnRyeXBvaW50cyBhYm92ZS4KKyAgICAgICAgaWYgKG1fZ3JhcGguaXNSb290KGJsb2NrKSkg
eworICAgICAgICAgICAgLy8gV2UgYm9vdHN0cmFwcGVkIHRoZSBDRkcgcm9vdHMgYWJvdmUuCiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNl
LmNwcAkocmV2aXNpb24gMjIxNjI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdM
b29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQx
LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBCYXNpY0Jsb2NrKiBjcmVh
dGVQcmVIZWFkZXIoR3JhcGgmIGdyYXBoLCBCbG9ja0luc2VydGlvblNldCYgaW5zZXJ0aW9uU2V0
LCBCYXNpY0Jsb2NrKiBibG9jaykKIHsKLSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFncmFwaC5p
c0VudHJ5cG9pbnQoYmxvY2spLCAiQW4gZW50cnlwb2ludCBzaG91bGQgbm90IGJlIGluIGEgbG9v
cCIpOworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIWdyYXBoLmlzUm9vdChibG9jayksICJBIENG
RyByb290IHNob3VsZCBub3QgYmUgaW4gYSBsb29wIik7CiAKICAgICAvLyBGSVhNRTogSWYgd2Ug
cnVuIHRoaXMgdXRpbGl0eSBvbiBTU0EgSVIsIHRoZW4gd2UgbWF5IGVuZCB1cCB3aXRoIGEgYml6
YXJyZSBhcnJhbmdlbWVudCBvZgogICAgIC8vIFVwc2lsb25zIGFuZCBQaGlzLCBsaWtlOgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXhpbWFs
Rmx1c2hJbnNlcnRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDIyMTYyOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGluc2VydGlvblNl
dC5leGVjdXRlKGJsb2NrKTsKICAgICAgICAgfQogCi0gICAgICAgIGZvciAoQmFzaWNCbG9jayog
ZW50cnlwb2ludCA6IG1fZ3JhcGgubV9lbnRyeXBvaW50cykgeworICAgICAgICBmb3IgKEJhc2lj
QmxvY2sqIGVudHJ5cG9pbnQgOiBtX2dyYXBoLm1fcm9vdHMpIHsKICAgICAgICAgICAgIHRyZWF0
Um9vdEJsb2NrKGVudHJ5cG9pbnQsIGluc2VydGlvblNldCk7CiAgICAgICAgICAgICBpbnNlcnRp
b25TZXQuZXhlY3V0ZShlbnRyeXBvaW50KTsKICAgICAgICAgfQpAQCAtNzEsOCArNzEsOCBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpKTsKICAgICAg
ICAgICAgICAgICBib29sIGlzUHJpbW9yZGlhbFNldEFyZ3VtZW50ID0gZmFsc2U7CiAgICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQgJiYgbm9kZS0+bG9jYWwoKS5p
c0FyZ3VtZW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBpdGVyID0gbV9ncmFwaC5t
X2VudHJ5cG9pbnRUb0FyZ3VtZW50cy5maW5kKGJsb2NrKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGl0ZXIgIT0gbV9ncmFwaC5tX2VudHJ5cG9pbnRUb0FyZ3VtZW50cy5lbmQoKSkKKyAgICAg
ICAgICAgICAgICAgICAgYXV0byBpdGVyID0gbV9ncmFwaC5tX3Jvb3RUb0FyZ3VtZW50cy5maW5k
KGJsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXIgIT0gbV9ncmFwaC5tX3Jvb3RU
b0FyZ3VtZW50cy5lbmQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGlzUHJpbW9yZGlhbFNl
dEFyZ3VtZW50ID0gbm9kZSA9PSBpdGVyLT52YWx1ZVtub2RlLT5sb2NhbCgpLnRvQXJndW1lbnQo
KV07CiAgICAgICAgICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAkocmV2
aXNpb24gMjIxNjI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBv
aW50Q3JlYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMyw3ICsxMTMsNyBAQCBw
dWJsaWM6CiAgICAgICAgIC8vIHR5cGUgY2hlY2tzIHRvIGhlcmUuCiAgICAgICAgIG9yaWdpbiA9
IHRhcmdldC0+YXQoMCktPm9yaWdpbjsKICAgICAgICAgCi0gICAgICAgIEFyZ3VtZW50c1ZlY3Rv
ciBuZXdBcmd1bWVudHMgPSBtX2dyYXBoLm1fZW50cnlwb2ludFRvQXJndW1lbnRzLmZpbmQobV9n
cmFwaC5ibG9jaygwKSktPnZhbHVlOworICAgICAgICBBcmd1bWVudHNWZWN0b3IgbmV3QXJndW1l
bnRzID0gbV9ncmFwaC5tX3Jvb3RUb0FyZ3VtZW50cy5maW5kKG1fZ3JhcGguYmxvY2soMCkpLT52
YWx1ZTsKICAgICAgICAgZm9yIChpbnQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IGJhc2VsaW5l
LT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKICAgICAgICAgICAgIE5vZGUqIG9sZE5v
ZGUgPSB0YXJnZXQtPnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChhcmd1bWVudCk7CiAgICAgICAg
ICAgICBpZiAoIW9sZE5vZGUpIHsKQEAgLTE0MiwxMCArMTQyLDEwIEBAIHB1YmxpYzoKICAgICAg
ICAgCiAgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKCk7CiAKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlQobV9ncmFwaC5tX2VudHJ5cG9pbnRzLnNpemUoKSA9PSAxKTsKLSAgICAgICAgbV9ncmFw
aC5tX2VudHJ5cG9pbnRzWzBdID0gbmV3Um9vdDsKLSAgICAgICAgbV9ncmFwaC5tX2VudHJ5cG9p
bnRUb0FyZ3VtZW50cy5jbGVhcigpOwotICAgICAgICBtX2dyYXBoLm1fZW50cnlwb2ludFRvQXJn
dW1lbnRzLmFkZChuZXdSb290LCBuZXdBcmd1bWVudHMpOworICAgICAgICBSRUxFQVNFX0FTU0VS
VChtX2dyYXBoLm1fcm9vdHMuc2l6ZSgpID09IDEpOworICAgICAgICBtX2dyYXBoLm1fcm9vdHNb
MF0gPSBuZXdSb290OworICAgICAgICBtX2dyYXBoLm1fcm9vdFRvQXJndW1lbnRzLmNsZWFyKCk7
CisgICAgICAgIG1fZ3JhcGgubV9yb290VG9Bcmd1bWVudHMuYWRkKG5ld1Jvb3QsIG5ld0FyZ3Vt
ZW50cyk7CiAKICAgICAgICAgbV9ncmFwaC5pbnZhbGlkYXRlQ0ZHKCk7CiAgICAgICAgIG1fZ3Jh
cGgucmVzZXRSZWFjaGFiaWxpdHkoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAJKHJldmlzaW9u
IDIyMTYyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvbkluamVj
dGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFdlIG9ubHkgZG8gdGhpcyBmb3IgdGhlIGFyZ3Vt
ZW50cyBhdCB0aGUgZmlyc3QgYmxvY2suIFRoZSBhcmd1bWVudHMgZnJvbQogICAgICAgICAgICAg
Ly8gb3RoZXIgZW50cnlwb2ludHMgaGF2ZSBhbHJlYWR5IGJlZW4gcG9wdWxhdGVkIHdpdGggdGhl
aXIgcHJlZGljdGlvbnMuCi0gICAgICAgICAgICBhdXRvJiBhcmd1bWVudHMgPSBtX2dyYXBoLm1f
ZW50cnlwb2ludFRvQXJndW1lbnRzLmZpbmQobV9ncmFwaC5ibG9jaygwKSktPnZhbHVlOworICAg
ICAgICAgICAgYXV0byYgYXJndW1lbnRzID0gbV9ncmFwaC5tX3Jvb3RUb0FyZ3VtZW50cy5maW5k
KG1fZ3JhcGguYmxvY2soMCkpLT52YWx1ZTsKIAogICAgICAgICAgICAgZm9yIChzaXplX3QgYXJn
ID0gMDsgYXJnIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpKTsgKythcmcpIHsKICAgICAgICAgICAgICAgICBWYWx1ZVByb2ZpbGUmIHByb2ZpbGUgPSBw
cm9maWxlZEJsb2NrKCktPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZyk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3Bw
CShyZXZpc2lvbiAyMjE2MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNv
bnZlcnNpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDE0ICs2MSwxNCBAQCBwdWJs
aWM6CiAgICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIEJhc2ljQmxvY2sqLCBXVEY6OkludEhhc2g8
dW5zaWduZWQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPj4g
ZW50cnlwb2ludEluZGV4VG9Bcmd1bWVudHNCbG9jazsKIAogICAgICAgICB7Ci0gICAgICAgICAg
ICBtX2dyYXBoLm1fbnVtYmVyT2ZFbnRyeXBvaW50cyA9IG1fZ3JhcGgubV9lbnRyeXBvaW50cy5z
aXplKCk7CisgICAgICAgICAgICBtX2dyYXBoLm1fbnVtYmVyT2ZFbnRyeXBvaW50cyA9IG1fZ3Jh
cGgubV9yb290cy5zaXplKCk7CiAKICAgICAgICAgICAgIEJsb2NrSW5zZXJ0aW9uU2V0IGJsb2Nr
SW5zZXJ0aW9uU2V0KG1fZ3JhcGgpOwogICAgICAgICAgICAgQmFzaWNCbG9jayogbmV3Um9vdCA9
IGJsb2NrSW5zZXJ0aW9uU2V0Lmluc2VydCgwLCAxLjBmKTsKIAogICAgICAgICAgICAgRW50cnlT
d2l0Y2hEYXRhKiBlbnRyeVN3aXRjaERhdGEgPSBtX2dyYXBoLm1fZW50cnlTd2l0Y2hEYXRhLmFk
ZCgpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBlbnRyeXBvaW50SW5kZXggPSAwOyBlbnRy
eXBvaW50SW5kZXggPCBtX2dyYXBoLm1fbnVtYmVyT2ZFbnRyeXBvaW50czsgKytlbnRyeXBvaW50
SW5kZXgpIHsKLSAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBvbGRSb290ID0gbV9ncmFwaC5t
X2VudHJ5cG9pbnRzW2VudHJ5cG9pbnRJbmRleF07CisgICAgICAgICAgICAgICAgQmFzaWNCbG9j
ayogb2xkUm9vdCA9IG1fZ3JhcGgubV9yb290c1tlbnRyeXBvaW50SW5kZXhdOwogICAgICAgICAg
ICAgICAgIGVudHJ5cG9pbnRJbmRleFRvQXJndW1lbnRzQmxvY2suYWRkKGVudHJ5cG9pbnRJbmRl
eCwgb2xkUm9vdCk7CiAgICAgICAgICAgICAgICAgZW50cnlTd2l0Y2hEYXRhLT5jYXNlcy5hcHBl
bmQob2xkUm9vdCk7CiAKQEAgLTk3LDggKzk3LDggQEAgcHVibGljOgogICAgICAgICAgICAgbmV3
Um9vdC0+YXBwZW5kTm9kZSgKICAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgRW50
cnlTd2l0Y2gsIG9yaWdpbiwgT3BJbmZvKGVudHJ5U3dpdGNoRGF0YSkpOwogCi0gICAgICAgICAg
ICBtX2dyYXBoLm1fZW50cnlwb2ludHMuY2xlYXIoKTsKLSAgICAgICAgICAgIG1fZ3JhcGgubV9l
bnRyeXBvaW50cy5hcHBlbmQobmV3Um9vdCk7CisgICAgICAgICAgICBtX2dyYXBoLm1fcm9vdHMu
Y2xlYXIoKTsKKyAgICAgICAgICAgIG1fZ3JhcGgubV9yb290cy5hcHBlbmQobmV3Um9vdCk7CiAK
ICAgICAgICAgICAgIGJsb2NrSW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKTsKICAgICAgICAgfQpAQCAt
NDM2LDcgKzQzNiw3IEBAIHB1YmxpYzoKICAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogZW50cnlw
b2ludEluZGV4VG9Bcmd1bWVudHNCbG9jaykgewogICAgICAgICAgICAgdW5zaWduZWQgZW50cnlw
b2ludEluZGV4ID0gcGFpci5rZXk7CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBvbGRSb290ID0g
cGFpci52YWx1ZTsKLSAgICAgICAgICAgIEFyZ3VtZW50c1ZlY3RvciYgYXJndW1lbnRzID0gbV9n
cmFwaC5tX2VudHJ5cG9pbnRUb0FyZ3VtZW50cy5maW5kKG9sZFJvb3QpLT52YWx1ZTsKKyAgICAg
ICAgICAgIEFyZ3VtZW50c1ZlY3RvciYgYXJndW1lbnRzID0gbV9ncmFwaC5tX3Jvb3RUb0FyZ3Vt
ZW50cy5maW5kKG9sZFJvb3QpLT52YWx1ZTsKICAgICAgICAgICAgIFZlY3RvcjxGbHVzaEZvcm1h
dD4gYXJndW1lbnRGb3JtYXRzOwogICAgICAgICAgICAgYXJndW1lbnRGb3JtYXRzLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoYXJndW1lbnRzLnNpemUoKSk7CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgYXJndW1lbnRzLnNpemUoKTsgKytpKSB7CkBAIC00NDcsNyArNDQ3LDcg
QEAgcHVibGljOgogICAgICAgICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50Rm9ybWF0c1tlbnRyeXBv
aW50SW5kZXhdID0gV1RGTW92ZShhcmd1bWVudEZvcm1hdHMpOwogICAgICAgICB9CiAKLSAgICAg
ICAgbV9ncmFwaC5tX2VudHJ5cG9pbnRUb0FyZ3VtZW50cy5jbGVhcigpOworICAgICAgICBtX2dy
YXBoLm1fcm9vdFRvQXJndW1lbnRzLmNsZWFyKCk7CiAKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bV9ncmFwaC5tX2lzSW5TU0FDb252ZXJzaW9uKTsKICAgICAgICAgbV9ncmFwaC5tX2lzSW5TU0FD
b252ZXJzaW9uID0gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjIxNjI4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4
MDgsNyArMTgwOCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcygK
ICAgICBBU1NFUlQoIW1fY3VycmVudE5vZGUpOwogICAgIG1fb3JpZ2luID0gTm9kZU9yaWdpbihD
b2RlT3JpZ2luKDApLCBDb2RlT3JpZ2luKDApLCB0cnVlKTsKIAotICAgIGF1dG8mIGFyZ3VtZW50
cyA9IG1faml0LmdyYXBoKCkubV9lbnRyeXBvaW50VG9Bcmd1bWVudHMuZmluZChtX2ppdC5ncmFw
aCgpLmJsb2NrKDApKS0+dmFsdWU7CisgICAgYXV0byYgYXJndW1lbnRzID0gbV9qaXQuZ3JhcGgo
KS5tX3Jvb3RUb0FyZ3VtZW50cy5maW5kKG1faml0LmdyYXBoKCkuYmxvY2soMCkpLT52YWx1ZTsK
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1faml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJz
KCk7ICsraSkgewogICAgICAgICBOb2RlKiBub2RlID0gYXJndW1lbnRzW2ldOwogICAgICAgICBp
ZiAoIW5vZGUpIHsKQEAgLTE5MTIsNyArMTkxMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Omxp
bmtPU1JFbnRyaWVzKExpbmsKICAgICAgICAgaWYgKCFibG9jay0+aXNPU1JUYXJnZXQgJiYgIWJs
b2NrLT5pc0NhdGNoRW50cnlwb2ludCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBp
ZiAoYmxvY2stPmlzQ2F0Y2hFbnRyeXBvaW50KSB7Ci0gICAgICAgICAgICBhdXRvJiBhcmd1bWVu
dHNWZWN0b3IgPSBtX2ppdC5ncmFwaCgpLm1fZW50cnlwb2ludFRvQXJndW1lbnRzLmZpbmQoYmxv
Y2spLT52YWx1ZTsKKyAgICAgICAgICAgIGF1dG8mIGFyZ3VtZW50c1ZlY3RvciA9IG1faml0Lmdy
YXBoKCkubV9yb290VG9Bcmd1bWVudHMuZmluZChibG9jayktPnZhbHVlOwogICAgICAgICAgICAg
VmVjdG9yPEZsdXNoRm9ybWF0PiBhcmd1bWVudEZvcm1hdHM7CiAgICAgICAgICAgICBhcmd1bWVu
dEZvcm1hdHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShhcmd1bWVudHNWZWN0b3Iuc2l6ZSgpKTsK
ICAgICAgICAgICAgIGZvciAoTm9kZSogc2V0QXJndW1lbnQgOiBhcmd1bWVudHNWZWN0b3IpIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hl
Y2tIb2lzdGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMjIxNjI4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTM0LDggKzEzNCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpdGVy
LT52YWx1ZS5tX3N0cnVjdHVyZSAmJiAhaXRlci0+dmFsdWUubV9hcnJheU1vZGVJc1ZhbGlkKQog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICAgICAgLy8g
Q3VycmVudGx5IHdlIHNob3VsZCBvbmx5IGJlIGRvaW5nIHRoaXMgaG9pc3RpbmcgZm9yIFNldEFy
Z3VtZW50cyBhdCBhbiBlbnRyeXBvaW50LgotICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9n
cmFwaC5pc0VudHJ5cG9pbnQoYmxvY2spKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ3VycmVu
dGx5IHdlIHNob3VsZCBvbmx5IGJlIGRvaW5nIHRoaXMgaG9pc3RpbmcgZm9yIFNldEFyZ3VtZW50
cyBhdCBhIENGRyByb290LgorICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9ncmFwaC5pc1Jv
b3QoYmxvY2spKTsKIAogICAgICAgICAgICAgICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IG5v
ZGUtPm9yaWdpbjsKICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQob3JpZ2luLmV4
aXRPSyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAko
cmV2aXNpb24gMjIxNjI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDE0ICs4MywxNCBAQCBwdWJsaWM6CiAgICAgICAg
IC8vIE5CLiBUaGlzIGNvZGUgaXMgbm90IHdyaXR0ZW4gZm9yIHBlcmZvcm1hbmNlLCBzaW5jZSBp
dCBpcyBub3QgaW50ZW5kZWQgdG8gcnVuCiAgICAgICAgIC8vIGluIHJlbGVhc2UgYnVpbGRzLgog
Ci0gICAgICAgIFZBTElEQVRFKChtX2dyYXBoLmJsb2NrKDApKSwgbV9ncmFwaC5pc0VudHJ5cG9p
bnQobV9ncmFwaC5ibG9jaygwKSkpOwotICAgICAgICBWQUxJREFURSgobV9ncmFwaC5ibG9jaygw
KSksIG1fZ3JhcGguYmxvY2soMCkgPT0gbV9ncmFwaC5tX2VudHJ5cG9pbnRzWzBdKTsKKyAgICAg
ICAgVkFMSURBVEUoKG1fZ3JhcGguYmxvY2soMCkpLCBtX2dyYXBoLmlzUm9vdChtX2dyYXBoLmJs
b2NrKDApKSk7CisgICAgICAgIFZBTElEQVRFKChtX2dyYXBoLmJsb2NrKDApKSwgbV9ncmFwaC5i
bG9jaygwKSA9PSBtX2dyYXBoLm1fcm9vdHNbMF0pOwogCi0gICAgICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBtX2dyYXBoLm1fZW50cnlwb2ludHMpCisgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBtX2dyYXBoLm1fcm9vdHMpCiAgICAgICAgICAgICBWQUxJREFURSgoYmxvY2sp
LCBibG9jay0+cHJlZGVjZXNzb3JzLmlzRW1wdHkoKSk7CiAKICAgICAgICAgLy8gVmFsaWRhdGUg
dGhhdCBhbGwgbG9jYWwgdmFyaWFibGVzIGF0IHRoZSBoZWFkIG9mIGFsbCBlbnRyeXBvaW50cyBh
cmUgZGVhZC4KLSAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBlbnRyeXBvaW50IDogbV9ncmFwaC5t
X2VudHJ5cG9pbnRzKSB7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogZW50cnlwb2ludCA6IG1f
Z3JhcGgubV9yb290cykgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVu
dHJ5cG9pbnQtPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyArK2kpCiAgICAgICAg
ICAgICAgICAgVl9FUVVBTCgodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSksIGVudHJ5cG9pbnQp
LCBzdGF0aWNfY2FzdDxOb2RlKj4obnVsbHB0ciksIGVudHJ5cG9pbnQtPnZhcmlhYmxlc0F0SGVh
ZC5sb2NhbChpKSk7CiAgICAgICAgIH0KQEAgLTQwMCw2ICs0MDAsMTEgQEAgcHJpdmF0ZToKICAg
ICAKICAgICB2b2lkIHZhbGlkYXRlQ1BTKCkKICAgICB7CisgICAgICAgIFZBTElEQVRFKCgpLCAh
bV9ncmFwaC5tX3Jvb3RUb0FyZ3VtZW50cy5pc0VtcHR5KCkpOyAvLyBXZSBzaG91bGQgaGF2ZSBh
dCBsZWFzdCBvbmUgcm9vdC4KKyAgICAgICAgVkFMSURBVEUoKCksIG1fZ3JhcGgubV9yb290VG9B
cmd1bWVudHMuc2l6ZSgpID09IG1fZ3JhcGgubV9yb290cy5zaXplKCkpOworICAgICAgICBmb3Ig
KEJhc2ljQmxvY2sqIHJvb3QgOiBtX2dyYXBoLm1fcm9vdFRvQXJndW1lbnRzLmtleXMoKSkKKyAg
ICAgICAgICAgIFZBTElEQVRFKCgpLCBtX2dyYXBoLm1fcm9vdHMuY29udGFpbnMocm9vdCkpOwor
CiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1f
Z3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewogICAgICAgICAgICAgQmFzaWNCbG9j
ayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaWYgKCFi
bG9jaykKQEAgLTY1MCw5ICs2NTUsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gRklYTUU6IEFk
ZCBtb3JlIHRoaW5ncyBoZXJlLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTIzNDcxCiAgICAgICAgIAotICAgICAgICBWQUxJREFURSgoKSwgbV9n
cmFwaC5tX2VudHJ5cG9pbnRzLnNpemUoKSA9PSAxKTsKLSAgICAgICAgVkFMSURBVEUoKCksIG1f
Z3JhcGgubV9lbnRyeXBvaW50c1swXSA9PSBtX2dyYXBoLmJsb2NrKDApKTsKKyAgICAgICAgVkFM
SURBVEUoKCksIG1fZ3JhcGgubV9yb290cy5zaXplKCkgPT0gMSk7CisgICAgICAgIFZBTElEQVRF
KCgpLCBtX2dyYXBoLm1fcm9vdHNbMF0gPT0gbV9ncmFwaC5ibG9jaygwKSk7CiAgICAgICAgIFZB
TElEQVRFKCgpLCAhbV9ncmFwaC5tX2FyZ3VtZW50Rm9ybWF0cy5pc0VtcHR5KCkpOyAvLyBXZSBh
bHdheXMgaGF2ZSBhdCBsZWFzdCBvbmUgZW50cnlwb2ludC4KKyAgICAgICAgVkFMSURBVEUoKCks
IG1fZ3JhcGgubV9yb290VG9Bcmd1bWVudHMuaXNFbXB0eSgpKTsgLy8gVGhpcyBpcyBvbmx5IHVz
ZWQgaW4gQ1BTLgogCiAgICAgICAgIGZvciAodW5zaWduZWQgZW50cnlwb2ludEluZGV4IDogbV9n
cmFwaC5tX2VudHJ5cG9pbnRJbmRleFRvQ2F0Y2hCeXRlY29kZU9mZnNldC5rZXlzKCkpCiAgICAg
ICAgICAgICBWQUxJREFURSgoKSwgZW50cnlwb2ludEluZGV4ID4gMCk7IC8vIEJ5IGNvbnZlbnRp
b24sIDAgaXMgdGhlIGVudHJ5cG9pbnQgaW5kZXggZm9yIHRoZSBvcF9lbnRlciBlbnRyeXBvaW50
LCB3aGljaCBjYW4gbm90IGJlIGluIGEgY2F0Y2guCg==
</data>
<flag name="review"
          id="340101"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319932</attachid>
            <date>2017-09-05 13:47:52 -0700</date>
            <delta_ts>2017-09-05 14:30:09 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>26183</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjIxNjMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBA
CisyMDE3LTA5LTA1ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IE1ha2UgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gZW50cnlwb2ludHMgYW5kIENGRyByb290cyBt
b3JlIGNsZWFyIGJ5IG5hbWluZyB0aGluZ3MgYmV0dGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzYzMzYKKworICAgICAgICBSZXZpZXdlZCBieSBN
YXJrIExhbSBhbmQgS2VpdGggTWlsbGVyIGFuZCBNaWNoYWVsIFNhYm9mZi4KKworICAgICAgICBU
aGlzIHBhdGNoIGRvZXMgcmVuYW1pbmcgdG8gbWFrZSB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBH
cmFwaDo6bV9lbnRyeXBvaW50cworICAgICAgICBhbmQgR3JhcGg6Om1fbnVtYmVyT2ZFbnRyeXBv
aW50cyBtb3JlIGNsZWFyLiBUaGUgc291cmNlIG9mIGNvbmZ1c2lvbiBpcyB0aGF0CisgICAgICAg
IEdyYXBoOjptX2VudHJ5cG9pbnRzLnNpemUoKSBpcyBub3QgZXF1aXZhbGVudCB0byBHcmFwaDo6
bV9udW1iZXJPZkVudHJ5cG9pbnRzLgorICAgICAgICBHcmFwaDo6bV9lbnRyeXBvaW50cyBpcyBy
ZWFsbHkganVzdCB0aGUgQ0ZHIHJvb3RzLiBJbiBDUFMsIHRoaXMgdmVjdG9yIGhhcworICAgICAg
ICBzaXplID49IDEuIEluIFNTQSwgdGhlIHNpemUgaXMgYWx3YXlzIDEuIFRoaXMgcGF0Y2ggcmVu
YW1lcyBHcmFwaDo6bV9lbnRyeXBvaW50cworICAgICAgICB0byBHcmFwaDo6bV9yb290cy4gVG8g
YmUgY29uc2lzdGVudCwgdGhpcyBwYXRjaCBhbHNvIHJlbmFtZXMgR3JhcGgncyBtX2VudHJ5cG9p
bnRUb0FyZ3VtZW50cworICAgICAgICBmaWVsZCB0byBtX3Jvb3RUb0FyZ3VtZW50cy4KKyAgICAg
ICAgCisgICAgICAgIEdyYXBoOjptX251bWJlck9mRW50cnlwb2ludHMgcmV0YWlucyBpdHMgbmFt
ZS4gVGhpcyBmaWVsZCBpcyBvbmx5IHVzZWQgaW4gU1NBCisgICAgICAgIHdoZW4gY29tcGlsaW5n
IHdpdGggRW50cnlTd2l0Y2guIEl0IHJlcHJlc2VudHMgdGhlIGxvZ2ljYWwgbnVtYmVyIG9mIGVu
dHJ5cG9pbnRzCisgICAgICAgIHRoZSBjb21waWxhdGlvbiB3aWxsIGVuZCB1cCB3aXRoLiBFYWNo
IEVudHJ5U3dpdGNoIGhhcyBtX251bWJlck9mRW50cnlwb2ludHMKKyAgICAgICAgY2FzZXMuCisK
KyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdDRkcuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpDRkc6OnJvb3RzKToKKyAgICAgICAgKEpTQzo6REZHOjpDUFNDRkc6OkNQ
U0NGRyk6CisgICAgICAgICogZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkNQU1JldGhyZWFkaW5nUGhhc2U6OnNwZWNpYWxDYXNlQXJndW1lbnRzKToK
KyAgICAgICAgKiBkZmcvREZHRENFUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkRDRVBo
YXNlOjpydW4pOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6R3JhcGg6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkZXRlcm1pbmVSZWFj
aGFiaWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpibG9ja3NJblByZU9yZGVyKToK
KyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6YmxvY2tzSW5Qb3N0T3JkZXIpOgorICAgICAgICAo
SlNDOjpERkc6OkdyYXBoOjptZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKToKKyAgICAg
ICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aXNSb290KToK
KyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aXNFbnRyeXBvaW50KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBkZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkluUGxhY2VBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKToKKyAgICAgICAgKiBkZmcvREZHTG9v
cFByZUhlYWRlckNyZWF0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNyZWF0ZVBy
ZUhlYWRlcik6CisgICAgICAgICogZGZnL0RGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZTo6cnVuKToK
KyAgICAgICAgKEpTQzo6REZHOjpNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZTo6dHJlYXRSZWd1
bGFyQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2U6OnJ1bik6
CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6UHJlZGljdGlvbkluamVjdGlvblBoYXNlOjpydW4pOgorICAgICAgICAqIGRm
Zy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNTQUNvbnZl
cnNpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpsaW5rT1NSRW50cmllcyk6CisgICAg
ICAgICogZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlR5cGVDaGVja0hvaXN0aW5nUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR1ZhbGlk
YXRlLmNwcDoKKwogMjAxNy0wOS0wNSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUu
Y29tPgogCiAgICAgICAgIHRlc3QyNjI6IENvbXBsZXRpb24gdmFsdWVzIGZvciBjb250cm9sIGZs
b3cgZG8gbm90IG1hdGNoIHRoZSBzcGVjCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMjIxNjI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQxNjgsNyArNDE2OCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5z
aWduZWQKICAgICAvLyB1cyB0byB0cmFjayBpZiBhIHVzZSBvZiBhbiBhcmd1bWVudCBtYXkgdXNl
IHRoZSBhY3R1YWwgYXJndW1lbnQgcGFzc2VkLCBhcwogICAgIC8vIG9wcG9zZWQgdG8gdXNpbmcg
YSB2YWx1ZSB3ZSBzZXQgZXhwbGljaXRseS4KICAgICBpZiAobV9jdXJyZW50QmxvY2sgPT0gbV9n
cmFwaC5ibG9jaygwKSAmJiAhaW5saW5lQ2FsbEZyYW1lKCkpIHsKLSAgICAgICAgYXV0byBhZGRS
ZXN1bHQgPSBtX2dyYXBoLm1fZW50cnlwb2ludFRvQXJndW1lbnRzLmFkZChtX2N1cnJlbnRCbG9j
aywgQXJndW1lbnRzVmVjdG9yKCkpOworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fZ3JhcGgu
bV9yb290VG9Bcmd1bWVudHMuYWRkKG1fY3VycmVudEJsb2NrLCBBcmd1bWVudHNWZWN0b3IoKSk7
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKICAgICAgICAg
QXJndW1lbnRzVmVjdG9yJiBlbnRyeXBvaW50QXJndW1lbnRzID0gYWRkUmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZTsKICAgICAgICAgZW50cnlwb2ludEFyZ3VtZW50cy5yZXNpemUobV9udW1Bcmd1bWVu
dHMpOwpAQCAtNTI3Niw3ICs1Mjc2LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZAogCiAgICAgICAgICAgICAvLyBXZSdyZSBub3cgY29tbWl0dGVkIHRvIGNvbXBp
bGluZyB0aGlzIGFzIGFuIGVudHJ5cG9pbnQuCiAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+
aXNDYXRjaEVudHJ5cG9pbnQgPSB0cnVlOwotICAgICAgICAgICAgbV9ncmFwaC5tX2VudHJ5cG9p
bnRzLmFwcGVuZChtX2N1cnJlbnRCbG9jayk7CisgICAgICAgICAgICBtX2dyYXBoLm1fcm9vdHMu
YXBwZW5kKG1fY3VycmVudEJsb2NrKTsKIAogICAgICAgICAgICAgVmVjdG9yPFNwZWN1bGF0ZWRU
eXBlPiBhcmd1bWVudFByZWRpY3Rpb25zKG1fbnVtQXJndW1lbnRzKTsKICAgICAgICAgICAgIFZl
Y3RvcjxTcGVjdWxhdGVkVHlwZT4gbG9jYWxQcmVkaWN0aW9uczsKQEAgLTUzNDEsNyArNTM0MSw3
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAg
IGFkZFRvR3JhcGgoRXhpdE9LKTsKIAogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGF1
dG8gYWRkUmVzdWx0ID0gbV9ncmFwaC5tX2VudHJ5cG9pbnRUb0FyZ3VtZW50cy5hZGQobV9jdXJy
ZW50QmxvY2ssIEFyZ3VtZW50c1ZlY3RvcigpKTsKKyAgICAgICAgICAgICAgICBhdXRvIGFkZFJl
c3VsdCA9IG1fZ3JhcGgubV9yb290VG9Bcmd1bWVudHMuYWRkKG1fY3VycmVudEJsb2NrLCBBcmd1
bWVudHNWZWN0b3IoKSk7CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYWRkUmVzdWx0
LmlzTmV3RW50cnkpOwogICAgICAgICAgICAgICAgIEFyZ3VtZW50c1ZlY3RvciYgZW50cnlwb2lu
dEFyZ3VtZW50cyA9IGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgICAgICAgICAg
ZW50cnlwb2ludEFyZ3VtZW50cy5yZXNpemUobV9udW1Bcmd1bWVudHMpOwpAQCAtNjQwMCw3ICs2
NDAwLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2soKQogICAgICAgICAg
ICAgICAgICAgICAvLyBUaGUgZmlyc3QgYmxvY2sgaXMgZGVmaW5pdGVseSBhbiBPU1IgdGFyZ2V0
LgogICAgICAgICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGgubnVtQmxvY2tzKCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJsb2NrLT5pc09TUlRhcmdldCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoLm1fZW50cnlwb2ludHMuYXBwZW5kKGJsb2NrLnB0cigpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9yb290cy5hcHBlbmQoYmxvY2sucHRy
KCkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
YXBwZW5kQmxvY2soV1RGTW92ZShibG9jaykpOwogICAgICAgICAgICAgICAgICAgICBwcmVwYXJl
VG9QYXJzZUJsb2NrKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGRy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHLmgJKHJldmlz
aW9uIDIyMTYyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgogICAgIExpc3Qgcm9vdHMoKQogICAg
IHsKICAgICAgICAgTGlzdCByZXN1bHQ7Ci0gICAgICAgIGZvciAoQmFzaWNCbG9jayogcm9vdCA6
IG1fZ3JhcGgubV9lbnRyeXBvaW50cykKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiByb290IDog
bV9ncmFwaC5tX3Jvb3RzKQogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChyb290KTsKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC04OSw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICBD
UFNDRkcoR3JhcGgmIGdyYXBoKQogICAgICAgICA6IFNpbmdsZVJvb3RHcmFwaDxDRkc+KCpncmFw
aC5tX3NzYUNGRykKICAgICB7Ci0gICAgICAgIEFTU0VSVChncmFwaC5tX2VudHJ5cG9pbnRzLnNp
emUoKSk7CisgICAgICAgIEFTU0VSVChncmFwaC5tX3Jvb3RzLnNpemUoKSk7CiAgICAgfQogfTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhy
ZWFkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAyMjE2MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzAs
NyArMzcwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gc3BlY2lhbC1jYXNlZC4gV2UgY291bGQg
aGF2ZSBpbnN0ZWFkIHVzZWQgdHdvIGRpZmZlcmVudCBub2RlIHR5cGVzIC0gb25lIGZvciB0aGUg
YXJndW1lbnRzCiAgICAgICAgIC8vIGF0IHRoZSBwcm9sb2d1ZSBjYXNlLCBhbmQgYW5vdGhlciBm
b3IgdGhlIG90aGVyIHVzZXMuIEJ1dCB0aGlzIHNlZW1lZCBsaWtlIElSIG92ZXJraWxsLgogCi0g
ICAgICAgIGZvciAoYXV0byYgcGFpciA6IG1fZ3JhcGgubV9lbnRyeXBvaW50VG9Bcmd1bWVudHMp
IHsKKyAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9ncmFwaC5tX3Jvb3RUb0FyZ3VtZW50cykg
ewogICAgICAgICAgICAgQmFzaWNCbG9jayogZW50cnlwb2ludCA9IHBhaXIua2V5OwogICAgICAg
ICAgICAgY29uc3QgQXJndW1lbnRzVmVjdG9yJiBhcmd1bWVudHMgPSBwYWlyLnZhbHVlOwogICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYXJndW1lbnRzLnNpemUoKTsgaS0tOykKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3BwCShyZXZpc2lvbiAyMjE2
MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luUHJlT3JkZXIoKSkKICAgICAgICAgICAgIGZpeHVw
QmxvY2soYmxvY2spOwogICAgICAgICAKLSAgICAgICAgZm9yIChhdXRvJiBhcmd1bWVudHNWZWN0
b3IgOiBtX2dyYXBoLm1fZW50cnlwb2ludFRvQXJndW1lbnRzLnZhbHVlcygpKQorICAgICAgICBm
b3IgKGF1dG8mIGFyZ3VtZW50c1ZlY3RvciA6IG1fZ3JhcGgubV9yb290VG9Bcmd1bWVudHMudmFs
dWVzKCkpCiAgICAgICAgICAgICBjbGVhblZhcmlhYmxlcyhhcmd1bWVudHNWZWN0b3IpOwogCiAg
ICAgICAgIC8vIEp1c3QgZG8gYSBiYXNpYyBQaGFudG9tL0NoZWNrIGNsZWFuLXVwLgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDIyMTYyOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MjUsNyArNTI1LDcgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBEdW1w
QwogICAgICAgICAgICAgb3V0LnByaW50KCIgIEFyZ3VtZW50IGZvcm1hdHMgZm9yIGVudHJ5cG9p
bnQgaW5kZXg6ICIsIGVudHJ5cG9pbnRJbmRleCwgIiA6ICIsIGxpc3REdW1wKG1fYXJndW1lbnRG
b3JtYXRzW2VudHJ5cG9pbnRJbmRleF0pLCAiXG4iKTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAg
ICAgIGZvciAoYXV0byBwYWlyIDogbV9lbnRyeXBvaW50VG9Bcmd1bWVudHMpCisgICAgICAgIGZv
ciAoYXV0byBwYWlyIDogbV9yb290VG9Bcmd1bWVudHMpCiAgICAgICAgICAgICBvdXQucHJpbnQo
IiAgQXJndW1lbnRzIGZvciBibG9jayMiLCBwYWlyLmtleS0+aW5kZXgsICI6ICIsIGxpc3REdW1w
KHBhaXIudmFsdWUpLCAiXG4iKTsKICAgICB9CiAgICAgb3V0LnByaW50KCJcbiIpOwpAQCAtNjY0
LDcgKzY2NCw3IEBAIHZvaWQgR3JhcGg6OmhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmFzaWMKIHZv
aWQgR3JhcGg6OmRldGVybWluZVJlYWNoYWJpbGl0eSgpCiB7CiAgICAgVmVjdG9yPEJhc2ljQmxv
Y2sqLCAxNj4gd29ya2xpc3Q7Ci0gICAgZm9yIChCYXNpY0Jsb2NrKiBlbnRyeXBvaW50IDogbV9l
bnRyeXBvaW50cykgeworICAgIGZvciAoQmFzaWNCbG9jayogZW50cnlwb2ludCA6IG1fcm9vdHMp
IHsKICAgICAgICAgZW50cnlwb2ludC0+aXNSZWFjaGFibGUgPSB0cnVlOwogICAgICAgICB3b3Jr
bGlzdC5hcHBlbmQoZW50cnlwb2ludCk7CiAgICAgfQpAQCAtODc4LDcgKzg3OCw3IEBAIEJsb2Nr
TGlzdCBHcmFwaDo6YmxvY2tzSW5QcmVPcmRlcigpCiB7CiAgICAgQmxvY2tMaXN0IHJlc3VsdDsK
ICAgICBCbG9ja1dvcmtsaXN0IHdvcmtsaXN0OwotICAgIGZvciAoQmFzaWNCbG9jayogZW50cnlw
b2ludCA6IG1fZW50cnlwb2ludHMpCisgICAgZm9yIChCYXNpY0Jsb2NrKiBlbnRyeXBvaW50IDog
bV9yb290cykKICAgICAgICAgd29ya2xpc3QucHVzaChlbnRyeXBvaW50KTsKICAgICB3aGlsZSAo
QmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlzdC5wb3AoKSkgewogICAgICAgICByZXN1bHQuYXBw
ZW5kKGJsb2NrKTsKQEAgLTkxNiw3ICs5MTYsNyBAQCBCbG9ja0xpc3QgR3JhcGg6OmJsb2Nrc0lu
UG9zdE9yZGVyKCkKIHsKICAgICBCbG9ja0xpc3QgcmVzdWx0OwogICAgIFBvc3RPcmRlckJsb2Nr
V29ya2xpc3Qgd29ya2xpc3Q7Ci0gICAgZm9yIChCYXNpY0Jsb2NrKiBlbnRyeXBvaW50IDogbV9l
bnRyeXBvaW50cykKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGVudHJ5cG9pbnQgOiBtX3Jvb3RzKQog
ICAgICAgICB3b3JrbGlzdC5wdXNoKGVudHJ5cG9pbnQpOwogICAgIHdoaWxlIChCbG9ja1dpdGhP
cmRlciBpdGVtID0gd29ya2xpc3QucG9wKCkpIHsKICAgICAgICAgc3dpdGNoIChpdGVtLm9yZGVy
KSB7CkBAIC0xNjI4LDcgKzE2MjgsNyBAQCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIEdy
YXBoOjptZXRoCiAgICAgICAgICAgICBpZiAobm9kZS0+YWNjZXNzZXNTdGFjaygqdGhpcykpIHsK
ICAgICAgICAgICAgICAgICBpZiAobV9mb3JtICE9IFNTQSAmJiBub2RlLT5sb2NhbCgpLmlzQXJn
dW1lbnQoKSkgewogICAgICAgICAgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBub2RlLT5sb2Nh
bCgpLnRvQXJndW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSogYXJndW1lbnROb2Rl
ID0gbV9lbnRyeXBvaW50VG9Bcmd1bWVudHMuZmluZChibG9jaygwKSktPnZhbHVlW2FyZ3VtZW50
XTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogYXJndW1lbnROb2RlID0gbV9yb290VG9Bcmd1
bWVudHMuZmluZChibG9jaygwKSktPnZhbHVlW2FyZ3VtZW50XTsKICAgICAgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBtYXRjaCBTZXRBcmd1bWVudCBub2RlcyBhdCBvdGhlciBl
bnRyeXBvaW50cyBhcyB3ZWxsOgogICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1ODQxCiAgICAgICAgICAgICAgICAgICAgIGlm
IChhcmd1bWVudE5vZGUgJiYgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gYXJndW1lbnRO
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmgJKHJldmlzaW9uIDIyMTYyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtOTQ5LDIzICs5NDksMjMgQEAgcHVibGljOgog
CiAgICAgdm9pZCBjbGVhckNQU0NGR0RhdGEoKTsKIAotICAgIGJvb2wgaXNFbnRyeXBvaW50KEJh
c2ljQmxvY2sqIGJsb2NrKSBjb25zdAorICAgIGJvb2wgaXNSb290KEJhc2ljQmxvY2sqIGJsb2Nr
KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghbV9pc0luU1NBQ29u
dmVyc2lvbiwgIlRoaXMgaXMgbm90IHdyaXR0ZW4gdG8gd29yayBkdXJpbmcgU1NBIGNvbnZlcnNp
b24uIik7CiAKICAgICAgICAgaWYgKG1fZm9ybSA9PSBTU0EpIHsKLSAgICAgICAgICAgIEFTU0VS
VChtX2VudHJ5cG9pbnRzLnNpemUoKSA9PSAxKTsKLSAgICAgICAgICAgIEFTU0VSVChtX2VudHJ5
cG9pbnRzLmNvbnRhaW5zKHRoaXMtPmJsb2NrKDApKSk7CisgICAgICAgICAgICBBU1NFUlQobV9y
b290cy5zaXplKCkgPT0gMSk7CisgICAgICAgICAgICBBU1NFUlQobV9yb290cy5jb250YWlucyh0
aGlzLT5ibG9jaygwKSkpOwogICAgICAgICAgICAgcmV0dXJuIGJsb2NrID09IHRoaXMtPmJsb2Nr
KDApOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1fZW50cnlwb2ludHMuc2l6ZSgpIDw9IDQp
IHsKLSAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gbV9lbnRyeXBvaW50cy5jb250YWlucyhibG9j
ayk7Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IG1fZW50cnlwb2ludFRvQXJndW1lbnRz
LmNvbnRhaW5zKGJsb2NrKSk7CisgICAgICAgIGlmIChtX3Jvb3RzLnNpemUoKSA8PSA0KSB7Cisg
ICAgICAgICAgICBib29sIHJlc3VsdCA9IG1fcm9vdHMuY29udGFpbnMoYmxvY2spOworICAgICAg
ICAgICAgQVNTRVJUKHJlc3VsdCA9PSBtX3Jvb3RUb0FyZ3VtZW50cy5jb250YWlucyhibG9jaykp
OwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQotICAgICAgICBib29sIHJl
c3VsdCA9IG1fZW50cnlwb2ludFRvQXJndW1lbnRzLmNvbnRhaW5zKGJsb2NrKTsKLSAgICAgICAg
QVNTRVJUKHJlc3VsdCA9PSBtX2VudHJ5cG9pbnRzLmNvbnRhaW5zKGJsb2NrKSk7CisgICAgICAg
IGJvb2wgcmVzdWx0ID0gbV9yb290VG9Bcmd1bWVudHMuY29udGFpbnMoYmxvY2spOworICAgICAg
ICBBU1NFUlQocmVzdWx0ID09IG1fcm9vdHMuY29udGFpbnMoYmxvY2spKTsKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9CiAKQEAgLTk3NSw3ICs5NzUsNyBAQCBwdWJsaWM6CiAgICAgQ29k
ZUJsb2NrKiBtX3Byb2ZpbGVkQmxvY2s7CiAgICAgCiAgICAgVmVjdG9yPFJlZlB0cjxCYXNpY0Js
b2NrPiwgOD4gbV9ibG9ja3M7Ci0gICAgVmVjdG9yPEJhc2ljQmxvY2sqLCAxPiBtX2VudHJ5cG9p
bnRzOworICAgIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMT4gbV9yb290czsKICAgICBWZWN0b3I8RWRn
ZSwgMTY+IG1fdmFyQXJnQ2hpbGRyZW47CiAKICAgICBIYXNoTWFwPEVuY29kZWRKU1ZhbHVlLCBG
cm96ZW5WYWx1ZSosIEVuY29kZWRKU1ZhbHVlSGFzaCwgRW5jb2RlZEpTVmFsdWVIYXNoVHJhaXRz
PiBtX2Zyb3plblZhbHVlTWFwOwpAQCAtOTg4LDcgKzk4OCw3IEBAIHB1YmxpYzoKICAgICAvLyBJ
biBDUFMsIHRoaXMgaXMgYWxsIG9mIHRoZSBTZXRBcmd1bWVudCBub2RlcyBmb3IgdGhlIGFyZ3Vt
ZW50cyBpbiB0aGUgbWFjaGluZSBjb2RlIGJsb2NrCiAgICAgLy8gdGhhdCBzdXJ2aXZlZCBEQ0Uu
IEFsbCBvZiB0aGVtIGV4Y2VwdCBtYXliZSAidGhpcyIgd2lsbCBzdXJ2aXZlIERDRSwgYmVjYXVz
ZSBvZiB0aGUgRmx1c2gKICAgICAvLyBub2Rlcy4gSW4gU1NBLCB0aGlzIGhhcyBubyBtZWFuaW5n
LiBJdCdzIGVtcHR5LgotICAgIEhhc2hNYXA8QmFzaWNCbG9jayosIEFyZ3VtZW50c1ZlY3Rvcj4g
bV9lbnRyeXBvaW50VG9Bcmd1bWVudHM7CisgICAgSGFzaE1hcDxCYXNpY0Jsb2NrKiwgQXJndW1l
bnRzVmVjdG9yPiBtX3Jvb3RUb0FyZ3VtZW50czsKIAogICAgIC8vIEluIFNTQSwgdGhpcyBpcyB0
aGUgYXJndW1lbnQgc3BlY3VsYXRpb24gdGhhdCB3ZSd2ZSBsb2NrZWQgaW4gZm9yIGFuIGVudHJ5
cG9pbnQgYmxvY2suCiAgICAgLy8KQEAgLTEwMjEsOSArMTAyMSw5IEBAIHB1YmxpYzoKICAgICBI
YXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4gbV9lbnRyeXBvaW50SW5kZXhUb0NhdGNoQnl0ZWNv
ZGVPZmZzZXQ7CiAKICAgICAvLyBUaGlzIGlzIHRoZSBudW1iZXIgb2YgbG9naWNhbCBlbnRyeXBv
aW50cyB0aGF0IHdlJ3JlIGNvbXBpbGluZy4gVGhpcyBpcyBvbmx5IHVzZWQKLSAgICAvLyBpbiBT
U0EuIEVhY2ggRW50cnlTd2l0Y2ggbm9kZSBtdXN0IGhhdmUgbnVtYmVyT2ZFbnRyeXBvaW50cyBj
YXNlcy4gTm90ZSwgdGhpcyBpcwotICAgIC8vIG5vdCB0aGUgc2FtZSBhcyBtX2VudHJ5cG9pbnRz
LnNpemUoKS4gbV9lbnRyeXBvaW50cy5zaXplKCkgcmVwcmVzZW50cyB0aGUgbnVtYmVyCi0gICAg
Ly8gb2Ygcm9vdHMgaW4gdGhlIENGRy4gSW4gU1NBLCBtX2VudHJ5cG9pbnRzLnNpemUoKSA9PSAx
LgorICAgIC8vIGluIFNTQS4gRWFjaCBFbnRyeVN3aXRjaCBub2RlIG11c3QgaGF2ZSBtX251bWJl
ck9mRW50cnlwb2ludHMgY2FzZXMuIE5vdGUsIHRoaXMgaXMKKyAgICAvLyBub3QgdGhlIHNhbWUg
YXMgbV9yb290cy5zaXplKCkuIG1fcm9vdHMuc2l6ZSgpIHJlcHJlc2VudHMgdGhlIG51bWJlciBv
ZiByb290cyBpbgorICAgIC8vIHRoZSBDRkcuIEluIFNTQSwgbV9yb290cy5zaXplKCkgPT0gMSBl
dmVuIGlmIHdlJ3JlIGNvbXBpbGluZyBtb3JlIHRoYW4gb25lIGVudHJ5cG9pbnQuCiAgICAgdW5z
aWduZWQgbV9udW1iZXJPZkVudHJ5cG9pbnRzIHsgVUlOVF9NQVggfTsKIAogICAgIFNlZ21lbnRl
ZFZlY3RvcjxWYXJpYWJsZUFjY2Vzc0RhdGEsIDE2PiBtX3ZhcmlhYmxlQWNjZXNzRGF0YTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3Ry
YWN0U3RhdGUuY3BwCShyZXZpc2lvbiAyMjE2MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMsNyAr
OTMsNyBAQCBzdGF0aWMgdm9pZCBzZXRMaXZlVmFsdWVzKFZlY3RvcjxOb2RlQWJzCiAKIHZvaWQg
SW5QbGFjZUFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoKQogewotICAgIGZvciAoQmFzaWNCbG9j
ayogZW50cnlwb2ludCA6IG1fZ3JhcGgubV9lbnRyeXBvaW50cykgeworICAgIGZvciAoQmFzaWNC
bG9jayogZW50cnlwb2ludCA6IG1fZ3JhcGgubV9yb290cykgewogICAgICAgICBlbnRyeXBvaW50
LT5jZmFTaG91bGRSZXZpc2l0ID0gdHJ1ZTsKICAgICAgICAgZW50cnlwb2ludC0+Y2ZhSGFzVmlz
aXRlZCA9IGZhbHNlOwogICAgICAgICBlbnRyeXBvaW50LT5jZmFGb3VuZENvbnN0YW50cyA9IGZh
bHNlOwpAQCAtMTA2LDcgKzEwNiw3IEBAIHZvaWQgSW5QbGFjZUFic3RyYWN0U3RhdGU6OmluaXRp
YWxpemUoKQogICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQtPnZhbHVlc0F0VGFpbC5hcmd1bWVu
dChpKS5jbGVhcigpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgY29uc3QgQXJndW1lbnRzVmVjdG9yJiBhcmd1bWVudHMgPSBtX2dyYXBoLm1fZW50cnlwb2lu
dFRvQXJndW1lbnRzLmZpbmQoZW50cnlwb2ludCktPnZhbHVlOworICAgICAgICAgICAgY29uc3Qg
QXJndW1lbnRzVmVjdG9yJiBhcmd1bWVudHMgPSBtX2dyYXBoLm1fcm9vdFRvQXJndW1lbnRzLmZp
bmQoZW50cnlwb2ludCktPnZhbHVlOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBlbnRyeXBvaW50LT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CiAg
ICAgICAgICAgICAgICAgZW50cnlwb2ludC0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGkpLmNsZWFy
KCk7CiAKQEAgLTE0Niw4ICsxNDYsOCBAQCB2b2lkIEluUGxhY2VBYnN0cmFjdFN0YXRlOjppbml0
aWFsaXplKCkKICAgICB9CiAKICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5i
bG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7Ci0gICAgICAgIGlmIChtX2dyYXBoLmlzRW50cnlwb2lu
dChibG9jaykpIHsKLSAgICAgICAgICAgIC8vIFdlIGJvb3RzdHJhcHBlZCB0aGUgZW50cnlwb2lu
dHMgYWJvdmUuCisgICAgICAgIGlmIChtX2dyYXBoLmlzUm9vdChibG9jaykpIHsKKyAgICAgICAg
ICAgIC8vIFdlIGJvb3RzdHJhcHBlZCB0aGUgQ0ZHIHJvb3RzIGFib3ZlLgogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHAJKHJldmlz
aW9uIDIyMTYyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTG9vcFByZUhlYWRl
ckNyZWF0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogQmFzaWNCbG9jayogY3JlYXRlUHJlSGVhZGVy
KEdyYXBoJiBncmFwaCwgQmxvY2tJbnNlcnRpb25TZXQmIGluc2VydGlvblNldCwgQmFzaWNCbG9j
ayogYmxvY2spCiB7Ci0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghZ3JhcGguaXNFbnRyeXBvaW50
KGJsb2NrKSwgIkFuIGVudHJ5cG9pbnQgc2hvdWxkIG5vdCBiZSBpbiBhIGxvb3AiKTsKKyAgICBB
U1NFUlRfV0lUSF9NRVNTQUdFKCFncmFwaC5pc1Jvb3QoYmxvY2spLCAiQSBDRkcgcm9vdCBzaG91
bGQgbm90IGJlIGluIGEgbG9vcCIpOwogCiAgICAgLy8gRklYTUU6IElmIHdlIHJ1biB0aGlzIHV0
aWxpdHkgb24gU1NBIElSLCB0aGVuIHdlIG1heSBlbmQgdXAgd2l0aCBhIGJpemFycmUgYXJyYW5n
ZW1lbnQgb2YKICAgICAvLyBVcHNpbG9ucyBhbmQgUGhpcywgbGlrZToKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF4aW1hbEZsdXNoSW5zZXJ0
aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMjE2MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR01heGltYWxGbHVzaEluc2VydGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShi
bG9jayk7CiAgICAgICAgIH0KIAotICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGVudHJ5cG9pbnQg
OiBtX2dyYXBoLm1fZW50cnlwb2ludHMpIHsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBlbnRy
eXBvaW50IDogbV9ncmFwaC5tX3Jvb3RzKSB7CiAgICAgICAgICAgICB0cmVhdFJvb3RCbG9jayhl
bnRyeXBvaW50LCBpbnNlcnRpb25TZXQpOwogICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1
dGUoZW50cnlwb2ludCk7CiAgICAgICAgIH0KQEAgLTcxLDggKzcxLDggQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaSk7CiAgICAgICAgICAgICAgICAg
Ym9vbCBpc1ByaW1vcmRpYWxTZXRBcmd1bWVudCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGlm
IChub2RlLT5vcCgpID09IFNldEFyZ3VtZW50ICYmIG5vZGUtPmxvY2FsKCkuaXNBcmd1bWVudCgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gaXRlciA9IG1fZ3JhcGgubV9lbnRyeXBvaW50
VG9Bcmd1bWVudHMuZmluZChibG9jayk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpdGVyICE9
IG1fZ3JhcGgubV9lbnRyeXBvaW50VG9Bcmd1bWVudHMuZW5kKCkpCisgICAgICAgICAgICAgICAg
ICAgIGF1dG8gaXRlciA9IG1fZ3JhcGgubV9yb290VG9Bcmd1bWVudHMuZmluZChibG9jayk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChpdGVyICE9IG1fZ3JhcGgubV9yb290VG9Bcmd1bWVudHMu
ZW5kKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBpc1ByaW1vcmRpYWxTZXRBcmd1bWVudCA9
IG5vZGUgPT0gaXRlci0+dmFsdWVbbm9kZS0+bG9jYWwoKS50b0FyZ3VtZW50KCldOwogICAgICAg
ICAgICAgICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRy
eXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDIyMTYy
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9u
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNyArMTEzLDcgQEAgcHVibGljOgogICAg
ICAgICAvLyB0eXBlIGNoZWNrcyB0byBoZXJlLgogICAgICAgICBvcmlnaW4gPSB0YXJnZXQtPmF0
KDApLT5vcmlnaW47CiAgICAgICAgIAotICAgICAgICBBcmd1bWVudHNWZWN0b3IgbmV3QXJndW1l
bnRzID0gbV9ncmFwaC5tX2VudHJ5cG9pbnRUb0FyZ3VtZW50cy5maW5kKG1fZ3JhcGguYmxvY2so
MCkpLT52YWx1ZTsKKyAgICAgICAgQXJndW1lbnRzVmVjdG9yIG5ld0FyZ3VtZW50cyA9IG1fZ3Jh
cGgubV9yb290VG9Bcmd1bWVudHMuZmluZChtX2dyYXBoLmJsb2NrKDApKS0+dmFsdWU7CiAgICAg
ICAgIGZvciAoaW50IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBiYXNlbGluZS0+bnVtUGFyYW1l
dGVycygpOyArK2FyZ3VtZW50KSB7CiAgICAgICAgICAgICBOb2RlKiBvbGROb2RlID0gdGFyZ2V0
LT52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoYXJndW1lbnQpOwogICAgICAgICAgICAgaWYgKCFv
bGROb2RlKSB7CkBAIC0xNDIsMTAgKzE0MiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAg
ICBpbnNlcnRpb25TZXQuZXhlY3V0ZSgpOwogCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3Jh
cGgubV9lbnRyeXBvaW50cy5zaXplKCkgPT0gMSk7Ci0gICAgICAgIG1fZ3JhcGgubV9lbnRyeXBv
aW50c1swXSA9IG5ld1Jvb3Q7Ci0gICAgICAgIG1fZ3JhcGgubV9lbnRyeXBvaW50VG9Bcmd1bWVu
dHMuY2xlYXIoKTsKLSAgICAgICAgbV9ncmFwaC5tX2VudHJ5cG9pbnRUb0FyZ3VtZW50cy5hZGQo
bmV3Um9vdCwgbmV3QXJndW1lbnRzKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC5t
X3Jvb3RzLnNpemUoKSA9PSAxKTsKKyAgICAgICAgbV9ncmFwaC5tX3Jvb3RzWzBdID0gbmV3Um9v
dDsKKyAgICAgICAgbV9ncmFwaC5tX3Jvb3RUb0FyZ3VtZW50cy5jbGVhcigpOworICAgICAgICBt
X2dyYXBoLm1fcm9vdFRvQXJndW1lbnRzLmFkZChuZXdSb290LCBuZXdBcmd1bWVudHMpOwogCiAg
ICAgICAgIG1fZ3JhcGguaW52YWxpZGF0ZUNGRygpOwogICAgICAgICBtX2dyYXBoLnJlc2V0UmVh
Y2hhYmlsaXR5KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25JbmplY3Rpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMjE2MjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogICAgICAgICAgICAg
CiAgICAgICAgICAgICAvLyBXZSBvbmx5IGRvIHRoaXMgZm9yIHRoZSBhcmd1bWVudHMgYXQgdGhl
IGZpcnN0IGJsb2NrLiBUaGUgYXJndW1lbnRzIGZyb20KICAgICAgICAgICAgIC8vIG90aGVyIGVu
dHJ5cG9pbnRzIGhhdmUgYWxyZWFkeSBiZWVuIHBvcHVsYXRlZCB3aXRoIHRoZWlyIHByZWRpY3Rp
b25zLgotICAgICAgICAgICAgYXV0byYgYXJndW1lbnRzID0gbV9ncmFwaC5tX2VudHJ5cG9pbnRU
b0FyZ3VtZW50cy5maW5kKG1fZ3JhcGguYmxvY2soMCkpLT52YWx1ZTsKKyAgICAgICAgICAgIGF1
dG8mIGFyZ3VtZW50cyA9IG1fZ3JhcGgubV9yb290VG9Bcmd1bWVudHMuZmluZChtX2dyYXBoLmJs
b2NrKDApKS0+dmFsdWU7CiAKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGFyZyA9IDA7IGFyZyA8
IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSk7ICsrYXJn
KSB7CiAgICAgICAgICAgICAgICAgVmFsdWVQcm9maWxlJiBwcm9maWxlID0gcHJvZmlsZWRCbG9j
aygpLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmcpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAkocmV2aXNpb24g
MjIxNjI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSwxNCArNjEsMTQgQEAgcHVibGljOgogICAgICAg
ICBIYXNoTWFwPHVuc2lnbmVkLCBCYXNpY0Jsb2NrKiwgV1RGOjpJbnRIYXNoPHVuc2lnbmVkPiwg
V1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25lZD4+IGVudHJ5cG9pbnRJ
bmRleFRvQXJndW1lbnRzQmxvY2s7CiAKICAgICAgICAgewotICAgICAgICAgICAgbV9ncmFwaC5t
X251bWJlck9mRW50cnlwb2ludHMgPSBtX2dyYXBoLm1fZW50cnlwb2ludHMuc2l6ZSgpOworICAg
ICAgICAgICAgbV9ncmFwaC5tX251bWJlck9mRW50cnlwb2ludHMgPSBtX2dyYXBoLm1fcm9vdHMu
c2l6ZSgpOwogCiAgICAgICAgICAgICBCbG9ja0luc2VydGlvblNldCBibG9ja0luc2VydGlvblNl
dChtX2dyYXBoKTsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIG5ld1Jvb3QgPSBibG9ja0luc2Vy
dGlvblNldC5pbnNlcnQoMCwgMS4wZik7CiAKICAgICAgICAgICAgIEVudHJ5U3dpdGNoRGF0YSog
ZW50cnlTd2l0Y2hEYXRhID0gbV9ncmFwaC5tX2VudHJ5U3dpdGNoRGF0YS5hZGQoKTsKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgZW50cnlwb2ludEluZGV4ID0gMDsgZW50cnlwb2ludEluZGV4
IDwgbV9ncmFwaC5tX251bWJlck9mRW50cnlwb2ludHM7ICsrZW50cnlwb2ludEluZGV4KSB7Ci0g
ICAgICAgICAgICAgICAgQmFzaWNCbG9jayogb2xkUm9vdCA9IG1fZ3JhcGgubV9lbnRyeXBvaW50
c1tlbnRyeXBvaW50SW5kZXhdOworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIG9sZFJvb3Qg
PSBtX2dyYXBoLm1fcm9vdHNbZW50cnlwb2ludEluZGV4XTsKICAgICAgICAgICAgICAgICBlbnRy
eXBvaW50SW5kZXhUb0FyZ3VtZW50c0Jsb2NrLmFkZChlbnRyeXBvaW50SW5kZXgsIG9sZFJvb3Qp
OwogICAgICAgICAgICAgICAgIGVudHJ5U3dpdGNoRGF0YS0+Y2FzZXMuYXBwZW5kKG9sZFJvb3Qp
OwogCkBAIC05Nyw4ICs5Nyw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG5ld1Jvb3QtPmFwcGVu
ZE5vZGUoCiAgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIEVudHJ5U3dpdGNoLCBv
cmlnaW4sIE9wSW5mbyhlbnRyeVN3aXRjaERhdGEpKTsKIAotICAgICAgICAgICAgbV9ncmFwaC5t
X2VudHJ5cG9pbnRzLmNsZWFyKCk7Ci0gICAgICAgICAgICBtX2dyYXBoLm1fZW50cnlwb2ludHMu
YXBwZW5kKG5ld1Jvb3QpOworICAgICAgICAgICAgbV9ncmFwaC5tX3Jvb3RzLmNsZWFyKCk7Cisg
ICAgICAgICAgICBtX2dyYXBoLm1fcm9vdHMuYXBwZW5kKG5ld1Jvb3QpOwogCiAgICAgICAgICAg
ICBibG9ja0luc2VydGlvblNldC5leGVjdXRlKCk7CiAgICAgICAgIH0KQEAgLTQzNiw3ICs0MzYs
NyBAQCBwdWJsaWM6CiAgICAgICAgIGZvciAoYXV0byYgcGFpciA6IGVudHJ5cG9pbnRJbmRleFRv
QXJndW1lbnRzQmxvY2spIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGVudHJ5cG9pbnRJbmRleCA9
IHBhaXIua2V5OwogICAgICAgICAgICAgQmFzaWNCbG9jayogb2xkUm9vdCA9IHBhaXIudmFsdWU7
Ci0gICAgICAgICAgICBBcmd1bWVudHNWZWN0b3ImIGFyZ3VtZW50cyA9IG1fZ3JhcGgubV9lbnRy
eXBvaW50VG9Bcmd1bWVudHMuZmluZChvbGRSb290KS0+dmFsdWU7CisgICAgICAgICAgICBBcmd1
bWVudHNWZWN0b3ImIGFyZ3VtZW50cyA9IG1fZ3JhcGgubV9yb290VG9Bcmd1bWVudHMuZmluZChv
bGRSb290KS0+dmFsdWU7CiAgICAgICAgICAgICBWZWN0b3I8Rmx1c2hGb3JtYXQ+IGFyZ3VtZW50
Rm9ybWF0czsKICAgICAgICAgICAgIGFyZ3VtZW50Rm9ybWF0cy5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KGFyZ3VtZW50cy5zaXplKCkpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGFyZ3VtZW50cy5zaXplKCk7ICsraSkgewpAQCAtNDQ3LDcgKzQ0Nyw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudEZvcm1hdHNbZW50cnlwb2ludEluZGV4XSA9
IFdURk1vdmUoYXJndW1lbnRGb3JtYXRzKTsKICAgICAgICAgfQogCi0gICAgICAgIG1fZ3JhcGgu
bV9lbnRyeXBvaW50VG9Bcmd1bWVudHMuY2xlYXIoKTsKKyAgICAgICAgbV9ncmFwaC5tX3Jvb3RU
b0FyZ3VtZW50cy5jbGVhcigpOwogCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9p
c0luU1NBQ29udmVyc2lvbik7CiAgICAgICAgIG1fZ3JhcGgubV9pc0luU1NBQ29udmVyc2lvbiA9
IGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIyMTYyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODA4LDcgKzE4MDgs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMoCiAgICAgQVNTRVJU
KCFtX2N1cnJlbnROb2RlKTsKICAgICBtX29yaWdpbiA9IE5vZGVPcmlnaW4oQ29kZU9yaWdpbigw
KSwgQ29kZU9yaWdpbigwKSwgdHJ1ZSk7CiAKLSAgICBhdXRvJiBhcmd1bWVudHMgPSBtX2ppdC5n
cmFwaCgpLm1fZW50cnlwb2ludFRvQXJndW1lbnRzLmZpbmQobV9qaXQuZ3JhcGgoKS5ibG9jaygw
KSktPnZhbHVlOworICAgIGF1dG8mIGFyZ3VtZW50cyA9IG1faml0LmdyYXBoKCkubV9yb290VG9B
cmd1bWVudHMuZmluZChtX2ppdC5ncmFwaCgpLmJsb2NrKDApKS0+dmFsdWU7CiAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBtX2ppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOyArK2kpIHsK
ICAgICAgICAgTm9kZSogbm9kZSA9IGFyZ3VtZW50c1tpXTsKICAgICAgICAgaWYgKCFub2RlKSB7
CkBAIC0xOTEyLDcgKzE5MTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpsaW5rT1NSRW50cmll
cyhMaW5rCiAgICAgICAgIGlmICghYmxvY2stPmlzT1NSVGFyZ2V0ICYmICFibG9jay0+aXNDYXRj
aEVudHJ5cG9pbnQpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKGJsb2NrLT5p
c0NhdGNoRW50cnlwb2ludCkgewotICAgICAgICAgICAgYXV0byYgYXJndW1lbnRzVmVjdG9yID0g
bV9qaXQuZ3JhcGgoKS5tX2VudHJ5cG9pbnRUb0FyZ3VtZW50cy5maW5kKGJsb2NrKS0+dmFsdWU7
CisgICAgICAgICAgICBhdXRvJiBhcmd1bWVudHNWZWN0b3IgPSBtX2ppdC5ncmFwaCgpLm1fcm9v
dFRvQXJndW1lbnRzLmZpbmQoYmxvY2spLT52YWx1ZTsKICAgICAgICAgICAgIFZlY3RvcjxGbHVz
aEZvcm1hdD4gYXJndW1lbnRGb3JtYXRzOwogICAgICAgICAgICAgYXJndW1lbnRGb3JtYXRzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoYXJndW1lbnRzVmVjdG9yLnNpemUoKSk7CiAgICAgICAgICAg
ICBmb3IgKE5vZGUqIHNldEFyZ3VtZW50IDogYXJndW1lbnRzVmVjdG9yKSB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQ
aGFzZS5jcHAJKHJldmlzaW9uIDIyMTYyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw4ICsx
MzQsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGlmICghaXRlci0+dmFsdWUubV9z
dHJ1Y3R1cmUgJiYgIWl0ZXItPnZhbHVlLm1fYXJyYXlNb2RlSXNWYWxpZCkKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgICAgIC8vIEN1cnJlbnRseSB3
ZSBzaG91bGQgb25seSBiZSBkb2luZyB0aGlzIGhvaXN0aW5nIGZvciBTZXRBcmd1bWVudHMgYXQg
YW4gZW50cnlwb2ludC4KLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGguaXNFbnRy
eXBvaW50KGJsb2NrKSk7CisgICAgICAgICAgICAgICAgICAgIC8vIEN1cnJlbnRseSB3ZSBzaG91
bGQgb25seSBiZSBkb2luZyB0aGlzIGhvaXN0aW5nIGZvciBTZXRBcmd1bWVudHMgYXQgYSBDRkcg
cm9vdC4KKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGguaXNSb290KGJsb2NrKSk7
CiAKICAgICAgICAgICAgICAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBub2RlLT5vcmlnaW47
CiAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG9yaWdpbi5leGl0T0spOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDIy
MTYyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MywxNCArODMsMTQgQEAgcHVibGljOgogICAgICAgICAvLyBOQi4gVGhp
cyBjb2RlIGlzIG5vdCB3cml0dGVuIGZvciBwZXJmb3JtYW5jZSwgc2luY2UgaXQgaXMgbm90IGlu
dGVuZGVkIHRvIHJ1bgogICAgICAgICAvLyBpbiByZWxlYXNlIGJ1aWxkcy4KIAotICAgICAgICBW
QUxJREFURSgobV9ncmFwaC5ibG9jaygwKSksIG1fZ3JhcGguaXNFbnRyeXBvaW50KG1fZ3JhcGgu
YmxvY2soMCkpKTsKLSAgICAgICAgVkFMSURBVEUoKG1fZ3JhcGguYmxvY2soMCkpLCBtX2dyYXBo
LmJsb2NrKDApID09IG1fZ3JhcGgubV9lbnRyeXBvaW50c1swXSk7CisgICAgICAgIFZBTElEQVRF
KChtX2dyYXBoLmJsb2NrKDApKSwgbV9ncmFwaC5pc1Jvb3QobV9ncmFwaC5ibG9jaygwKSkpOwor
ICAgICAgICBWQUxJREFURSgobV9ncmFwaC5ibG9jaygwKSksIG1fZ3JhcGguYmxvY2soMCkgPT0g
bV9ncmFwaC5tX3Jvb3RzWzBdKTsKIAotICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDog
bV9ncmFwaC5tX2VudHJ5cG9pbnRzKQorICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDog
bV9ncmFwaC5tX3Jvb3RzKQogICAgICAgICAgICAgVkFMSURBVEUoKGJsb2NrKSwgYmxvY2stPnBy
ZWRlY2Vzc29ycy5pc0VtcHR5KCkpOwogCiAgICAgICAgIC8vIFZhbGlkYXRlIHRoYXQgYWxsIGxv
Y2FsIHZhcmlhYmxlcyBhdCB0aGUgaGVhZCBvZiBhbGwgZW50cnlwb2ludHMgYXJlIGRlYWQuCi0g
ICAgICAgIGZvciAoQmFzaWNCbG9jayogZW50cnlwb2ludCA6IG1fZ3JhcGgubV9lbnRyeXBvaW50
cykgeworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGVudHJ5cG9pbnQgOiBtX2dyYXBoLm1fcm9v
dHMpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbnRyeXBvaW50LT52
YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytpKQogICAgICAgICAgICAgICAgIFZf
RVFVQUwoKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCBlbnRyeXBvaW50KSwgc3RhdGljX2Nh
c3Q8Tm9kZSo+KG51bGxwdHIpLCBlbnRyeXBvaW50LT52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSkp
OwogICAgICAgICB9CkBAIC00MDAsNiArNDAwLDExIEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9p
ZCB2YWxpZGF0ZUNQUygpCiAgICAgeworICAgICAgICBWQUxJREFURSgoKSwgIW1fZ3JhcGgubV9y
b290VG9Bcmd1bWVudHMuaXNFbXB0eSgpKTsgLy8gV2Ugc2hvdWxkIGhhdmUgYXQgbGVhc3Qgb25l
IHJvb3QuCisgICAgICAgIFZBTElEQVRFKCgpLCBtX2dyYXBoLm1fcm9vdFRvQXJndW1lbnRzLnNp
emUoKSA9PSBtX2dyYXBoLm1fcm9vdHMuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2Nr
KiByb290IDogbV9ncmFwaC5tX3Jvb3RUb0FyZ3VtZW50cy5rZXlzKCkpCisgICAgICAgICAgICBW
QUxJREFURSgoKSwgbV9ncmFwaC5tX3Jvb3RzLmNvbnRhaW5zKHJvb3QpKTsKKwogICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJs
b2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmICghYmxvY2spCkBAIC02
NTAsOSArNjU1LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIC8vIEZJWE1FOiBBZGQgbW9yZSB0aGlu
Z3MgaGVyZS4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEyMzQ3MQogICAgICAgICAKLSAgICAgICAgVkFMSURBVEUoKCksIG1fZ3JhcGgubV9lbnRy
eXBvaW50cy5zaXplKCkgPT0gMSk7Ci0gICAgICAgIFZBTElEQVRFKCgpLCBtX2dyYXBoLm1fZW50
cnlwb2ludHNbMF0gPT0gbV9ncmFwaC5ibG9jaygwKSk7CisgICAgICAgIFZBTElEQVRFKCgpLCBt
X2dyYXBoLm1fcm9vdHMuc2l6ZSgpID09IDEpOworICAgICAgICBWQUxJREFURSgoKSwgbV9ncmFw
aC5tX3Jvb3RzWzBdID09IG1fZ3JhcGguYmxvY2soMCkpOwogICAgICAgICBWQUxJREFURSgoKSwg
IW1fZ3JhcGgubV9hcmd1bWVudEZvcm1hdHMuaXNFbXB0eSgpKTsgLy8gV2UgYWx3YXlzIGhhdmUg
YXQgbGVhc3Qgb25lIGVudHJ5cG9pbnQuCisgICAgICAgIFZBTElEQVRFKCgpLCBtX2dyYXBoLm1f
cm9vdFRvQXJndW1lbnRzLmlzRW1wdHkoKSk7IC8vIFRoaXMgaXMgb25seSB1c2VkIGluIENQUy4K
IAogICAgICAgICBmb3IgKHVuc2lnbmVkIGVudHJ5cG9pbnRJbmRleCA6IG1fZ3JhcGgubV9lbnRy
eXBvaW50SW5kZXhUb0NhdGNoQnl0ZWNvZGVPZmZzZXQua2V5cygpKQogICAgICAgICAgICAgVkFM
SURBVEUoKCksIGVudHJ5cG9pbnRJbmRleCA+IDApOyAvLyBCeSBjb252ZW50aW9uLCAwIGlzIHRo
ZSBlbnRyeXBvaW50IGluZGV4IGZvciB0aGUgb3BfZW50ZXIgZW50cnlwb2ludCwgd2hpY2ggY2Fu
IG5vdCBiZSBpbiBhIGNhdGNoLgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>