<?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>106192</bug_id>
          
          <creation_ts>2013-01-05 20:10:59 -0800</creation_ts>
          <short_desc>Merge child process main functions as much as possible</short_desc>
          <delta_ts>2013-01-07 13:27:16 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>801028</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-01-05 20:10:59 -0800</bug_when>
    <thetext>Merge child process main functions as much as possible</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>801029</commentid>
    <comment_count>1</comment_count>
      <attachid>181451</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-01-05 20:34:13 -0800</bug_when>
    <thetext>Created attachment 181451
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>801030</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-05 20:36:03 -0800</bug_when>
    <thetext>Attachment 181451 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1
Source/WebKit2/Shared/mac/ChildProcessMain.h:37:  Extra space before ( in function call  [whitespace/parens] [4]
Source/WebKit2/Shared/mac/ChildProcessMain.h:56:  The parameter name &quot;identifier&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>801595</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-01-07 13:27:16 -0800</bug_when>
    <thetext>Committed r138981: &lt;http://trac.webkit.org/changeset/138981&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>181451</attachid>
            <date>2013-01-05 20:34:13 -0800</date>
            <delta_ts>2013-01-07 12:46:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-106192-20130105203119.patch</filename>
            <type>text/plain</type>
            <size>42491</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4OTEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggY2U0ZjBlMzQ5NTg3MmFh
ODdjNjk1ZThmZTRiNmMzYTVhM2U4MTRjMi4uMzZhN2IwZTQyNzgzN2Q4YjQ5ODRmZDkzZWE1MGZm
MDg3MTRiMWEzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg1IEBACisyMDEzLTAxLTA1ICBTYW0g
V2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTWVyZ2UgY2hpbGQgcHJvY2VzcyBt
YWluIGZ1bmN0aW9ucyBhcyBtdWNoIGFzIHBvc3NpYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDYxOTIKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUbyByZWR1Y2UgY29waWVkIGNvZGUsIHRoaXMgbWVy
Z2VzIHRoZSBNYWMgbWFpbiBmdW5jdGlvbnMgZm9yIHRoZSBXZWJQcm9jZXNzLAorICAgICAgICBO
ZXR3b3JrUHJvY2VzcywgUGx1Z2luUHJvY2VzcywgYW5kIFNoYXJlZFdvcmtlclByb2Nlc3MuIFNp
bmNlIHNsaWdodCB2YXJpYXRpb25zCisgICAgICAgIGFyZSBuZWVkZWQsIGl0IGFkZHMgYSBkZWxl
Z2F0ZSBjbGFzcyBmb3IgaG9va3MgaW50byB0aGUgbWFpbiBmdW5jdGlvbiB0aGF0IGVhY2gKKyAg
ICAgICAgcHJvY2VzcyBjYW4gb3ZlcnJpZGUgaWYgbmVjZXNzYXJ5LgorCisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtQcm9jZXNzTWFpbk1hYy5tbToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Byb2Nlc3NNYWluKToKKyAgICAgICAgUmVtb3ZlIGFsbW9zdCBldmVyeXRoaW5n
IHdpdGggYSBjYWxsIHRvIENoaWxkUHJvY2Vzc01haW4gd2l0aCB0aGUgZGVmYXVsdCBkZWxlZ2F0
ZS4KKworICAgICAgICAqIFBsdWdpblByb2Nlc3MvbWFjL1BsdWdpblByb2Nlc3NNYWMubW06Cisg
ICAgICAgIChXZWJLaXQ6OlBsdWdpblByb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZVByb2Nlc3Mp
OgorICAgICAgICBNb3ZlIGRlZmF1bHRzIHJlZ2lzdHJhdGlvbiBoZXJlIGZyb20gUGx1Z2luUHJv
Y2Vzc01haW5NYWMuCisKKyAgICAgICAgKiBQbHVnaW5Qcm9jZXNzL21hYy9QbHVnaW5Qcm9jZXNz
TWFpbk1hYy5tbToKKyAgICAgICAgKFBsdWdpblByb2Nlc3NNYWluRGVsZWdhdGUpOgorICAgICAg
ICBBZGQgYSBkZWxlZ2F0ZSBmb3IgdGhlIG5ldyBzaGFyZWQgbWFpbiBmdW5jdGlvbiB0aGF0IGRv
ZXMgZG9lcyBQbHVnaW5Qcm9jZXNzCisgICAgICAgIHNwZWNpZmljIHdvcmsuCisKKyAgICAgICAg
KFdlYktpdDo6UGx1Z2luUHJvY2Vzc01haW5EZWxlZ2F0ZTo6ZG9QcmVJbml0aWFsaXphdGlvbldv
cmspOgorICAgICAgICBNb3ZlIERZTERfSU5TRVJUX0xJQlJBUklFUyByZW1vdmFsIGFuZCBjcmVh
dGVQbHVnaW5NSU1FVHlwZXNQcmVmZXJlbmNlcyBzcGVjaWFsIG1vZGUKKyAgICAgICAgdG8gdGhp
cyBwcmUtaW5pdGlhbGl6YXRpb24gaG9vay4KKworICAgICAgICAoV2ViS2l0OjpQbHVnaW5Qcm9j
ZXNzTWFpbkRlbGVnYXRlOjpkb1Bvc3RSdW5Xb3JrKToKKyAgICAgICAgTW92ZSBwcml2YXRlIHRl
bXBvcmFyeSBhbmQgY2FjaGUgZGlyZWN0b3JpZXMgY2xlYW4gdXAgdG8gdGhpcyBwb3N0IHJ1biBo
b29rLgorCisgICAgICAgIChXZWJLaXQ6OlBsdWdpblByb2Nlc3NNYWluKToKKyAgICAgICAgQ2Fs
bCB0aGUgQ2hpbGRQcm9jZXNzTWFpbiBzaGFyZWQgbWFpbiBmdW5jdGlvbiB3aXRoIHRoZSBQbHVn
aW5Qcm9jZXNzIGFzIHRoZSBwcm9jZXNzCisgICAgICAgIHRvIGluaXRpYWxpemUgYW5kIFBsdWdp
blByb2Nlc3NNYWluRGVsZWdhdGUgYXMgdGhlIG1haW4gZGVsZWdhdGUuCisKKyAgICAgICAgKiBT
aGFyZWQvbWFjL0NoaWxkUHJvY2Vzc01haW4uaDogQWRkZWQuCisgICAgICAgIChDaGlsZFByb2Nl
c3NNYWluRGVsZWdhdGUpOgorICAgICAgICBDaGlsZFByb2Nlc3NNYWluRGVsZWdhdGUgaXMgYSBo
ZWxwZXIgY2xhc3MgdGhhdCBwcm9jZXNzIGNhbiBzdWJjbGFzcyB0byBob29rIGludG8KKyAgICAg
ICAgdGhlIG1haW4gZnVuY3Rpb24uCisKKyAgICAgICAgKFdlYktpdDo6Q2hpbGRQcm9jZXNzTWFp
bik6CisgICAgICAgIEFkZCBhIHNpbmdsZSB2ZXJzaW9uIG9mIHRoZSAibWFpbiIgZnVuY3Rpb24g
dGhhdCB1c2VzIHRoZSBDaGlsZFByb2Nlc3NNYWluRGVsZWdhdGUgdG8KKyAgICAgICAgYWxsb3cg
cHJvY2Vzc2VzIHRvIGhvb2sgaW50byBpdC4KKworICAgICAgICAqIFNoYXJlZC9tYWMvQ2hpbGRQ
cm9jZXNzTWFpbi5tbToKKyAgICAgICAgKFdlYktpdDo6Q2hpbGRQcm9jZXNzTWFpbkRlbGVnYXRl
Ojp+Q2hpbGRQcm9jZXNzTWFpbkRlbGVnYXRlKToKKyAgICAgICAgKFdlYktpdDo6Q2hpbGRQcm9j
ZXNzTWFpbkRlbGVnYXRlOjppbnN0YWxsU2lnbmFsSGFuZGxlcnMpOgorICAgICAgICAoV2ViS2l0
OjpDaGlsZFByb2Nlc3NNYWluRGVsZWdhdGU6OmRvUHJlSW5pdGlhbGl6YXRpb25Xb3JrKToKKyAg
ICAgICAgKFdlYktpdDo6Q2hpbGRQcm9jZXNzTWFpbkRlbGVnYXRlOjpnZXRDb25uZWN0aW9uSWRl
bnRpZmllcik6CisgICAgICAgIChXZWJLaXQ6OkNoaWxkUHJvY2Vzc01haW5EZWxlZ2F0ZTo6Z2V0
Q2xpZW50SWRlbnRpZmllcik6CisgICAgICAgIChXZWJLaXQ6OkNoaWxkUHJvY2Vzc01haW5EZWxl
Z2F0ZTo6Z2V0Q2xpZW50UHJvY2Vzc05hbWUpOgorICAgICAgICAoV2ViS2l0OjpDaGlsZFByb2Nl
c3NNYWluRGVsZWdhdGU6OmRvUG9zdFJ1bldvcmspOgorICAgICAgICBBZGQgZGVmYXVsdCBpbXBs
ZW1lbnRhdGlvbnMgb2YgdGhlIGRlbGVnYXRlIGhvb2tzLCBtb3N0IHByb2Nlc3NlcyBzaG91bGQg
YmUgYWJsZSB0bworICAgICAgICB1c2UgdGhlIGRlZmF1bHRzLgorCisgICAgICAgICogU2hhcmVk
V29ya2VyUHJvY2Vzcy9tYWMvU2hhcmVkV29ya2VyUHJvY2Vzc01haW5NYWMubW06CisgICAgICAg
IChXZWJLaXQ6OlNoYXJlZFdvcmtlclByb2Nlc3NNYWluKToKKyAgICAgICAgUmVtb3ZlIGFsbW9z
dCBldmVyeXRoaW5nIHdpdGggYSBjYWxsIHRvIENoaWxkUHJvY2Vzc01haW4gd2l0aCB0aGUgZGVm
YXVsdCBkZWxlZ2F0ZS4KKworICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgQWRkIG5ldyBmaWxlcy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvbWFj
L1dlYlByb2Nlc3NNYWluTWFjLm1tOgorICAgICAgICAoV2ViUHJvY2Vzc01haW5EZWxlZ2F0ZSk6
CisgICAgICAgIEFkZCBhIGRlbGVnYXRlIGZvciB0aGUgbmV3IHNoYXJlZCBtYWluIGZ1bmN0aW9u
IHRoYXQgZG9lcyBkb2VzIFdlYlByb2Nlc3MKKyAgICAgICAgc3BlY2lmaWMgd29yay4KKworICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzTWFpbkRlbGVnYXRlOjpkb1ByZUluaXRpYWxpemF0aW9u
V29yayk6CisgICAgICAgIE1vdmUgRFlMRF9JTlNFUlRfTElCUkFSSUVTIHJlbW92YWwgdG8gdGhp
cyB0aGlzIHByZS1pbml0aWFsaXphdGlvbiBob29rLgorCisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NNYWluRGVsZWdhdGU6OmdldENvbm5lY3Rpb25JZGVudGlmaWVyKToKKyAgICAgICAgQSBj
dXN0b20gZ2V0Q29ubmVjdGlvbklkZW50aWZpZXIgaXMgbmVjZXNzYXJ5IGZvciB0aGUgV2ViUHJv
Y2VzcyB0byBrZWVwIHN1cHBvcnQgZm9yIGhhdmluZyB0aGUgV2ViUHJvY2VzcworICAgICAgICBi
ZSBhYmxlIHRvIGxhdW5jaCB0aGUgVUlQcm9jZXNzIChmb3IgZGVidWdnaW5nIHB1cnBvc2VzKS4K
KworICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzTWFpbkRlbGVnYXRlOjpnZXRDbGllbnRJZGVu
dGlmaWVyKToKKyAgICAgICAgRm9yIHRoZSBzYW1lIHJlYXNvbnMgYXMgYWJvdXQsIGEgY3VzdG9t
IGdldENsaWVudElkZW50aWZpZXIgaXMgbmVlZGVkLgorCisgICAgICAgIChXZWJLaXQ6OldlYlBy
b2Nlc3NNYWluKToKKyAgICAgICAgQ2FsbCB0aGUgQ2hpbGRQcm9jZXNzTWFpbiBzaGFyZWQgbWFp
biBmdW5jdGlvbiB3aXRoIHRoZSBXZWJQcm9jZXNzIGFzIHRoZSBwcm9jZXNzCisgICAgICAgIHRv
IGluaXRpYWxpemUgYW5kIFdlYlByb2Nlc3NNYWluRGVsZWdhdGUgYXMgdGhlIG1haW4gZGVsZWdh
dGUuCisKIDIwMTMtMDEtMDQgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAg
ICBSZW1vdmUgV2ViUHJvY2Vzc0luaXRpYWxpemF0aW9uIGFuZCBOZXR3b3JrUHJvY2Vzc0luaXRp
YWxpemF0aW9uIGJ5IHB1dHRpbmcgdGhlIHJlc3Qgb2YgaW5pdGlhbGl6YXRpb24gaW4gQ2hpbGRQ
cm9jZXNzIGRlcml2ZWQgY2xhc3NlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvbWFjL05ldHdvcmtQcm9jZXNzTWFpbk1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL21hYy9OZXR3b3JrUHJvY2Vzc01haW5NYWMubW0KaW5kZXggNTJhYzNiZGRi
NWNkZDA2YmI5YzRjNjU3ZjlkOTk4YzFmMzk0MTY2MS4uOTkwZTkyZWFjMTczYjRiODZmZGJmZGU0
MTVmMzQzYTMwZTBlN2M4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvbWFjL05ldHdvcmtQcm9jZXNzTWFpbk1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9tYWMvTmV0d29ya1Byb2Nlc3NNYWluTWFjLm1tCkBAIC0yOCw3MyArMjgsMTQg
QEAKIAogI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCiAKLSNpbXBvcnQgIkNvbW1hbmRMaW5l
LmgiCisjaW1wb3J0ICJDaGlsZFByb2Nlc3NNYWluLmgiCiAjaW1wb3J0ICJOZXR3b3JrUHJvY2Vz
cy5oIgotI2ltcG9ydCAiV2ViS2l0MkluaXRpYWxpemUuaCIKLSNpbXBvcnQgPFdlYkNvcmUvUnVu
TG9vcC5oPgotI2ltcG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+Ci0jaW1wb3J0IDxtYWNo
L21hY2hfZXJyb3IuaD4KLSNpbXBvcnQgPHNlcnZlcnMvYm9vdHN0cmFwLmg+Ci0jaW1wb3J0IDxz
dGRpby5oPgotI2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4KLSNpbXBvcnQgPHd0Zi9SZXRhaW5Q
dHIuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgotCi0jZGVmaW5lIFNIT1dfQ1JBU0hfUkVQT1JURVIgMQotCi11c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLS8vIEZJWE1FOiBUaGVyZSBp
cyBtdWNoIGNvZGUgaGVyZSB0aGF0IGlzIGR1cGxpY2F0ZWQgaW4gV2ViUHJvY2Vzc01haW5NYWMu
bW0sIHdlIHNob3VsZCBhZGQgYSBzaGFyZWQgYmFzZSBjbGFzcyB3aGVyZQotLy8gd2UgY2FuIHB1
dCBldmVyeXRoaW5nLgotCiBpbnQgTmV0d29ya1Byb2Nlc3NNYWluKGNvbnN0IENvbW1hbmRMaW5l
JiBjb21tYW5kTGluZSkKIHsKLSAgICBTdHJpbmcgc2VydmljZU5hbWUgPSBjb21tYW5kTGluZVsi
c2VydmljZW5hbWUiXTsKLSAgICBpZiAoc2VydmljZU5hbWUuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm4gRVhJVF9GQUlMVVJFOwotICAgIAotICAgIC8vIEdldCB0aGUgc2VydmVyIHBvcnQuCi0g
ICAgbWFjaF9wb3J0X3Qgc2VydmVyUG9ydDsKLSAgICBrZXJuX3JldHVybl90IGtyID0gYm9vdHN0
cmFwX2xvb2tfdXAoYm9vdHN0cmFwX3BvcnQsIHNlcnZpY2VOYW1lLnV0ZjgoKS5kYXRhKCksICZz
ZXJ2ZXJQb3J0KTsKLSAgICBpZiAoa3IpIHsKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJib290c3Ry
YXBfbG9va191cCByZXN1bHQ6ICVzICgleClcbiIsIG1hY2hfZXJyb3Jfc3RyaW5nKGtyKSwga3Ip
OwotICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwotICAgIH0KLQotICAgIFN0cmluZyBsb2Nh
bGl6YXRpb24gPSBjb21tYW5kTGluZVsibG9jYWxpemF0aW9uIl07Ci0gICAgUmV0YWluUHRyPENG
U3RyaW5nUmVmPiBjZkxvY2FsaXphdGlvbihBZG9wdENGLCBDRlN0cmluZ0NyZWF0ZVdpdGhDaGFy
YWN0ZXJzKDAsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVW5pQ2hhcio+KGxvY2FsaXphdGlvbi5j
aGFyYWN0ZXJzKCkpLCBsb2NhbGl6YXRpb24ubGVuZ3RoKCkpKTsKLSAgICBpZiAoY2ZMb2NhbGl6
YXRpb24pCi0gICAgICAgIFdLU2V0RGVmYXVsdExvY2FsaXphdGlvbihjZkxvY2FsaXphdGlvbi5n
ZXQoKSk7Ci0KLSNpZiAhU0hPV19DUkFTSF9SRVBPUlRFUgotICAgIC8vIEluc3RhbGxzIHNpZ25h
bCBoYW5kbGVycyB0aGF0IGV4aXQgb24gYSBjcmFzaCBzbyB0aGF0IENyYXNoUmVwb3J0ZXIgZG9l
cyBub3Qgc2hvdyB1cC4KLSAgICBzaWduYWwoU0lHSUxMLCBfZXhpdCk7Ci0gICAgc2lnbmFsKFNJ
R0ZQRSwgX2V4aXQpOwotICAgIHNpZ25hbChTSUdCVVMsIF9leGl0KTsKLSAgICBzaWduYWwoU0lH
U0VHViwgX2V4aXQpOwotI2VuZGlmCi0KLSAgICBAYXV0b3JlbGVhc2Vwb29sIHsKLSAgICAgICAg
Ly8gRklYTUU6IFRoZSBOZXR3b3JrIHByb2Nlc3Mgc2hvdWxkIG5vdCBuZWVkIHRvIHVzZSBBcHBL
aXQsIGJ1dCByaWdodCBub3csIFdlYkNvcmU6OlJ1bkxvb3AgZGVwZW5kcwotICAgICAgICAvLyBv
biB0aGUgb3V0ZXIgbW9zdCBydW5sb29wIGJlaW5nIGFuIEFwcEtpdCBydW5sb29wLgotICAgICAg
ICBbTlNBcHBsaWNhdGlvbiBzaGFyZWRBcHBsaWNhdGlvbl07Ci0KLSAgICAgICAgSW5pdGlhbGl6
ZVdlYktpdDIoKTsKLQotICAgICAgICBDaGlsZFByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRl
cnMgcGFyYW1ldGVyczsKLSAgICAgICAgcGFyYW1ldGVycy51aVByb2Nlc3NOYW1lID0gY29tbWFu
ZExpbmVbInVpLXByb2Nlc3MtbmFtZSJdOwotICAgICAgICBwYXJhbWV0ZXJzLmNsaWVudElkZW50
aWZpZXIgPSBjb21tYW5kTGluZVsiY2xpZW50LWlkZW50aWZpZXIiXTsKLSAgICAgICAgcGFyYW1l
dGVycy5jb25uZWN0aW9uSWRlbnRpZmllciA9IHNlcnZlclBvcnQ7Ci0KLSAgICAgICAgTmV0d29y
a1Byb2Nlc3M6OnNoYXJlZCgpLmluaXRpYWxpemUocGFyYW1ldGVycyk7Ci0gICAgfQotCi0gICAg
UnVuTG9vcDo6cnVuKCk7Ci0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gQ2hpbGRQcm9jZXNz
TWFpbjxOZXR3b3JrUHJvY2VzcywgQ2hpbGRQcm9jZXNzTWFpbkRlbGVnYXRlPihjb21tYW5kTGlu
ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvUGx1Z2luUHJvY2Vzcy9tYWMvUGx1Z2luUHJvY2Vzc01hYy5tbSBiL1NvdXJjZS9XZWJLaXQy
L1BsdWdpblByb2Nlc3MvbWFjL1BsdWdpblByb2Nlc3NNYWMubW0KaW5kZXggOTg1OTA0NjM5MDYz
ODVjYjM4OTRlOGI0NmQ3MzQ3NDQ2NjczNzg2YS4uOWMxOGRmZmYzNjc1MTBkODc0ODAyMjY1NTE2
NzhkM2RiNTkyNjc0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9t
YWMvUGx1Z2luUHJvY2Vzc01hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNz
L21hYy9QbHVnaW5Qcm9jZXNzTWFjLm1tCkBAIC0yODEsNiArMjgxLDEyIEBAIHZvaWQgUGx1Z2lu
UHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplUHJvY2Vzcyhjb25zdCBDaGlsZFByb2Nlc3NJbml0
aWFsaXphdGlvblBhCiAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIGJldHRlciB0byBwcm94eSBT
ZXRDdXJzb3IgY2FsbHMgb3ZlciB0byB0aGUgVUkgcHJvY2VzcyBpbnN0ZWFkIG9mCiAgICAgLy8g
YWxsb3dpbmcgcGx1Zy1pbnMgdG8gY2hhbmdlIHRoZSBtb3VzZSBjdXJzb3IgYXQgYW55IHRpbWUu
CiAgICAgV0tFbmFibGVTZXR0aW5nQ3Vyc29yV2hlbkluQmFja2dyb3VuZCgpOworCisjaWYgZGVm
aW5lZChfX2kzODZfXykKKyAgICBOU0RpY3Rpb25hcnkgKmRlZmF1bHRzID0gW1tOU0RpY3Rpb25h
cnkgYWxsb2NdIGluaXRXaXRoT2JqZWN0c0FuZEtleXM6W05TTnVtYmVyIG51bWJlcldpdGhCb29s
OllFU10sIEAiQXBwbGVNYWduaWZpZWRNb2RlIiwgbmlsXTsKKyAgICBbW05TVXNlckRlZmF1bHRz
IHN0YW5kYXJkVXNlckRlZmF1bHRzXSByZWdpc3RlckRlZmF1bHRzOmRlZmF1bHRzXTsKKyAgICBb
ZGVmYXVsdHMgcmVsZWFzZV07CisjZW5kaWYKIH0KIAogdm9pZCBQbHVnaW5Qcm9jZXNzOjpzZXRN
b2RhbFdpbmRvd0lzU2hvd2luZyhib29sIG1vZGFsV2luZG93SXNTaG93aW5nKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9tYWMvUGx1Z2luUHJvY2Vzc01haW5NYWMu
bW0gYi9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL21hYy9QbHVnaW5Qcm9jZXNzTWFpbk1h
Yy5tbQppbmRleCAzMTg1YmEyMDg3MDU4ZTA0ZTZkNzhmNmMwMTBkZGNiMjI5YzcwNzU3Li40NjIx
NzFjOWE2NzczNWFjYjI5NjVhN2RjYWMwN2E2ZTc2NjI1MmExIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL21hYy9QbHVnaW5Qcm9jZXNzTWFpbk1hYy5tbQorKysgYi9T
b3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL21hYy9QbHVnaW5Qcm9jZXNzTWFpbk1hYy5tbQpA
QCAtMjgsMTEyICsyOCw1MyBAQAogCiAjaWYgRU5BQkxFKFBMVUdJTl9QUk9DRVNTKQogCi0jaW1w
b3J0ICJDb21tYW5kTGluZS5oIgorI2ltcG9ydCAiQ2hpbGRQcm9jZXNzTWFpbi5oIgogI2ltcG9y
dCAiRW52aXJvbm1lbnRVdGlsaXRpZXMuaCIKICNpbXBvcnQgIk5ldHNjYXBlUGx1Z2luTW9kdWxl
LmgiCiAjaW1wb3J0ICJQbHVnaW5Qcm9jZXNzLmgiCi0jaW1wb3J0ICJXZWJLaXQySW5pdGlhbGl6
ZS5oIgotI2ltcG9ydCA8Rm91bmRhdGlvbi9OU1VzZXJEZWZhdWx0cy5oPgotI2ltcG9ydCA8V2Vi
Q29yZS9SdW5Mb29wLmg+Ci0jaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KLSNpbXBv
cnQgPG1hY2gvbWFjaF9lcnJvci5oPgotI2ltcG9ydCA8c2VydmVycy9ib290c3RyYXAuaD4KLSNp
bXBvcnQgPHN0ZGlvLmg+Ci0jaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+Ci0jaW1wb3J0IDx3dGYv
dGV4dC9DU3RyaW5nLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2RlZmlu
ZSBTSE9XX0NSQVNIX1JFUE9SVEVSIDEKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCi0vLyBGSVhNRTogVGhlcmUgaXMgbXVjaCBjb2RlIGhlcmUgdGhh
dCBpcyBkdXBsaWNhdGVkIGluIFdlYlByb2Nlc3NNYWluTWFjLm1tLCB3ZSBzaG91bGQgYWRkIGEg
c2hhcmVkIGJhc2UgY2xhc3Mgd2hlcmUKLS8vIHdlIGNhbiBwdXQgZXZlcnl0aGluZy4KLQotaW50
IFBsdWdpblByb2Nlc3NNYWluKGNvbnN0IENvbW1hbmRMaW5lJiBjb21tYW5kTGluZSkKLXsKLSAg
ICAvLyBSZW1vdmUgdGhlIFBsdWdpblByb2Nlc3Mgc2hpbSBmcm9tIHRoZSBEWUxEX0lOU0VSVF9M
SUJSQVJJRVMgZW52aXJvbm1lbnQgdmFyaWFibGUgc28gYW55IHByb2Nlc3NlcyAKLSAgICAvLyBz
cGF3bmVkIGJ5IHRoZSBQbHVnaW5Qcm9jZXNzIGRvbid0IHRyeSB0byBpbnNlcnQgdGhlIHNoaW0g
YW5kIGNyYXNoLgotICAgIEVudmlyb25tZW50VXRpbGl0aWVzOjpzdHJpcFZhbHVlc0VuZGluZ1dp
dGhTdHJpbmcoIkRZTERfSU5TRVJUX0xJQlJBUklFUyIsICIvUGx1Z2luUHJvY2Vzc1NoaW0uZHls
aWIiKTsKLQotICAgIC8vIENoZWNrIGlmIHdlJ3JlIGJlaW5nIHNwYXduZWQgdG8gd3JpdGUgYSBN
SU1FIHR5cGUgcHJlZmVyZW5jZXMgZmlsZS4KLSAgICBTdHJpbmcgcGx1Z2luUGF0aCA9IGNvbW1h
bmRMaW5lWyJjcmVhdGVQbHVnaW5NSU1FVHlwZXNQcmVmZXJlbmNlcyJdOwotICAgIGlmICghcGx1
Z2luUGF0aC5pc0VtcHR5KCkpIHsKLSAgICAgICAgSW5pdGlhbGl6ZVdlYktpdDIoKTsKLQotICAg
ICAgICBpZiAoIU5ldHNjYXBlUGx1Z2luTW9kdWxlOjpjcmVhdGVQbHVnaW5NSU1FVHlwZXNQcmVm
ZXJlbmNlcyhwbHVnaW5QYXRoKSkKLSAgICAgICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Ci0K
LSAgICAgICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKLSAgICB9Ci0KLSAgICBTdHJpbmcgc2Vydmlj
ZU5hbWUgPSBjb21tYW5kTGluZVsic2VydmljZW5hbWUiXTsKLSAgICBpZiAoc2VydmljZU5hbWUu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwotICAgIAotICAgIC8vIEdl
dCB0aGUgc2VydmVyIHBvcnQuCi0gICAgbWFjaF9wb3J0X3Qgc2VydmVyUG9ydDsKLSAgICBrZXJu
X3JldHVybl90IGtyID0gYm9vdHN0cmFwX2xvb2tfdXAoYm9vdHN0cmFwX3BvcnQsIHNlcnZpY2VO
YW1lLnV0ZjgoKS5kYXRhKCksICZzZXJ2ZXJQb3J0KTsKLSAgICBpZiAoa3IpIHsKLSAgICAgICAg
V1RGTG9nQWx3YXlzKCJib290c3RyYXBfbG9va191cCByZXN1bHQ6ICVzICgleClcbiIsIG1hY2hf
ZXJyb3Jfc3RyaW5nKGtyKSwga3IpOwotICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwotICAg
IH0KLQotICAgIFN0cmluZyBsb2NhbGl6YXRpb24gPSBjb21tYW5kTGluZVsibG9jYWxpemF0aW9u
Il07Ci0gICAgaWYgKCFsb2NhbGl6YXRpb24uaXNFbXB0eSgpKSB7Ci0gICAgICAgIFJldGFpblB0
cjxDRlN0cmluZ1JlZj4gY2ZMb2NhbGl6YXRpb24oQWRvcHRDRiwgQ0ZTdHJpbmdDcmVhdGVXaXRo
Q2hhcmFjdGVycygwLCByZWludGVycHJldF9jYXN0PGNvbnN0IFVuaUNoYXIqPihsb2NhbGl6YXRp
b24uY2hhcmFjdGVycygpKSwgbG9jYWxpemF0aW9uLmxlbmd0aCgpKSk7Ci0gICAgICAgIFdLU2V0
RGVmYXVsdExvY2FsaXphdGlvbihjZkxvY2FsaXphdGlvbi5nZXQoKSk7Ci0gICAgfQotCi0jaWYg
ZGVmaW5lZChfX2kzODZfXykKK2NsYXNzIFBsdWdpblByb2Nlc3NNYWluRGVsZWdhdGUgOiBwdWJs
aWMgQ2hpbGRQcm9jZXNzTWFpbkRlbGVnYXRlIHsKK3B1YmxpYzoKKyAgICBQbHVnaW5Qcm9jZXNz
TWFpbkRlbGVnYXRlKGNvbnN0IENvbW1hbmRMaW5lJiBjb21tYW5kTGluZSkKKyAgICAgICAgOiBD
aGlsZFByb2Nlc3NNYWluRGVsZWdhdGUoY29tbWFuZExpbmUpCiAgICAgewotICAgICAgICBOU0F1
dG9yZWxlYXNlUG9vbCAqcG9vbCA9IFtbTlNBdXRvcmVsZWFzZVBvb2wgYWxsb2NdIGluaXRdOwot
Ci0gICAgICAgIE5TRGljdGlvbmFyeSAqZGVmYXVsdHMgPSBbW05TRGljdGlvbmFyeSBhbGxvY10g
aW5pdFdpdGhPYmplY3RzQW5kS2V5czpbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6WUVTXSwgQCJB
cHBsZU1hZ25pZmllZE1vZGUiLCBuaWxdOwotICAgICAgICBbW05TVXNlckRlZmF1bHRzIHN0YW5k
YXJkVXNlckRlZmF1bHRzXSByZWdpc3RlckRlZmF1bHRzOmRlZmF1bHRzXTsKLSAgICAgICAgW2Rl
ZmF1bHRzIHJlbGVhc2VdOwotCi0gICAgICAgIFtwb29sIGRyYWluXTsKICAgICB9Ci0jZW5kaWYK
LQotI2lmICFTSE9XX0NSQVNIX1JFUE9SVEVSCi0gICAgLy8gSW5zdGFsbHMgc2lnbmFsIGhhbmRs
ZXJzIHRoYXQgZXhpdCBvbiBhIGNyYXNoIHNvIHRoYXQgQ3Jhc2hSZXBvcnRlciBkb2VzIG5vdCBz
aG93IHVwLgotICAgIHNpZ25hbChTSUdJTEwsIF9leGl0KTsKLSAgICBzaWduYWwoU0lHRlBFLCBf
ZXhpdCk7Ci0gICAgc2lnbmFsKFNJR0JVUywgX2V4aXQpOwotICAgIHNpZ25hbChTSUdTRUdWLCBf
ZXhpdCk7Ci0jZW5kaWYKLQotICAgIEBhdXRvcmVsZWFzZXBvb2wgewotICAgICAgICBJbml0aWFs
aXplV2ViS2l0MigpOwotCi0gICAgICAgIENoaWxkUHJvY2Vzc0luaXRpYWxpemF0aW9uUGFyYW1l
dGVycyBwYXJhbWV0ZXJzOwotICAgICAgICBwYXJhbWV0ZXJzLnVpUHJvY2Vzc05hbWUgPSBjb21t
YW5kTGluZVsidWktcHJvY2Vzcy1uYW1lIl07Ci0gICAgICAgIHBhcmFtZXRlcnMuY2xpZW50SWRl
bnRpZmllciA9IGNvbW1hbmRMaW5lWyJjbGllbnQtaWRlbnRpZmllciJdOwotICAgICAgICBwYXJh
bWV0ZXJzLmNvbm5lY3Rpb25JZGVudGlmaWVyID0gQ29yZUlQQzo6Q29ubmVjdGlvbjo6SWRlbnRp
ZmllcihzZXJ2ZXJQb3J0KTsKIAotICAgICAgICBQbHVnaW5Qcm9jZXNzOjpzaGFyZWQoKS5pbml0
aWFsaXplKHBhcmFtZXRlcnMpOwotCi0gICAgICAgIFtOU0FwcGxpY2F0aW9uIHNoYXJlZEFwcGxp
Y2F0aW9uXTsKKyAgICB2aXJ0dWFsIHZvaWQgZG9QcmVJbml0aWFsaXphdGlvbldvcmsoKQorICAg
IHsKKyAgICAgICAgLy8gUmVtb3ZlIHRoZSBQbHVnaW5Qcm9jZXNzIHNoaW0gZnJvbSB0aGUgRFlM
RF9JTlNFUlRfTElCUkFSSUVTIGVudmlyb25tZW50IHZhcmlhYmxlIHNvIGFueSBwcm9jZXNzZXMK
KyAgICAgICAgLy8gc3Bhd25lZCBieSB0aGUgUGx1Z2luUHJvY2VzcyBkb24ndCB0cnkgdG8gaW5z
ZXJ0IHRoZSBzaGltIGFuZCBjcmFzaC4KKyAgICAgICAgRW52aXJvbm1lbnRVdGlsaXRpZXM6OnN0
cmlwVmFsdWVzRW5kaW5nV2l0aFN0cmluZygiRFlMRF9JTlNFUlRfTElCUkFSSUVTIiwgIi9QbHVn
aW5Qcm9jZXNzU2hpbS5keWxpYiIpOworCisgICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIGJlaW5n
IHNwYXduZWQgdG8gd3JpdGUgYSBNSU1FIHR5cGUgcHJlZmVyZW5jZXMgZmlsZS4KKyAgICAgICAg
U3RyaW5nIHBsdWdpblBhdGggPSBtX2NvbW1hbmRMaW5lWyJjcmVhdGVQbHVnaW5NSU1FVHlwZXNQ
cmVmZXJlbmNlcyJdOworICAgICAgICBpZiAoIXBsdWdpblBhdGguaXNFbXB0eSgpKSB7CisgICAg
ICAgICAgICBpZiAoIU5ldHNjYXBlUGx1Z2luTW9kdWxlOjpjcmVhdGVQbHVnaW5NSU1FVHlwZXNQ
cmVmZXJlbmNlcyhwbHVnaW5QYXRoKSkKKyAgICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVS
RSk7CisgICAgICAgICAgICBleGl0KEVYSVRfU1VDQ0VTUyk7CisgICAgICAgIH0KICAgICB9CiAK
LSAgICBSdW5Mb29wOjpydW4oKTsKLSAgICAKKyAgICB2aXJ0dWFsIHZvaWQgZG9Qb3N0UnVuV29y
aygpCisgICAgewogI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA4MAot
ICAgIC8vIElmIHdlIGhhdmUgcHJpdmF0ZSB0ZW1wb3JhcnkgYW5kIGNhY2hlIGRpcmVjdG9yaWVz
LCBjbGVhbiB0aGVtIHVwLgotICAgIGlmIChnZXRlbnYoIkRJUkhFTFBFUl9VU0VSX0RJUl9TVUZG
SVgiKSkgewotICAgICAgICBjaGFyIGRhcndpbkRpcmVjdG9yeVtQQVRIX01BWF07Ci0gICAgICAg
IGlmIChjb25mc3RyKF9DU19EQVJXSU5fVVNFUl9URU1QX0RJUiwgZGFyd2luRGlyZWN0b3J5LCBz
aXplb2YoZGFyd2luRGlyZWN0b3J5KSkpCi0gICAgICAgICAgICBbW05TRmlsZU1hbmFnZXIgZGVm
YXVsdE1hbmFnZXJdIHJlbW92ZUl0ZW1BdFBhdGg6W1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5h
Z2VyXSBzdHJpbmdXaXRoRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uOmRhcndpbkRpcmVjdG9yeSBs
ZW5ndGg6c3RybGVuKGRhcndpbkRpcmVjdG9yeSldIGVycm9yOm5pbF07Ci0gICAgICAgIGlmIChj
b25mc3RyKF9DU19EQVJXSU5fVVNFUl9DQUNIRV9ESVIsIGRhcndpbkRpcmVjdG9yeSwgc2l6ZW9m
KGRhcndpbkRpcmVjdG9yeSkpKQotICAgICAgICAgICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRN
YW5hZ2VyXSByZW1vdmVJdGVtQXRQYXRoOltbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0g
c3RyaW5nV2l0aEZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbjpkYXJ3aW5EaXJlY3RvcnkgbGVuZ3Ro
OnN0cmxlbihkYXJ3aW5EaXJlY3RvcnkpXSBlcnJvcjpuaWxdOwotICAgIH0KKyAgICAgICAgLy8g
SWYgd2UgaGF2ZSBwcml2YXRlIHRlbXBvcmFyeSBhbmQgY2FjaGUgZGlyZWN0b3JpZXMsIGNsZWFu
IHRoZW0gdXAuCisgICAgICAgIGlmIChnZXRlbnYoIkRJUkhFTFBFUl9VU0VSX0RJUl9TVUZGSVgi
KSkgeworICAgICAgICAgICAgY2hhciBkYXJ3aW5EaXJlY3RvcnlbUEFUSF9NQVhdOworICAgICAg
ICAgICAgaWYgKGNvbmZzdHIoX0NTX0RBUldJTl9VU0VSX1RFTVBfRElSLCBkYXJ3aW5EaXJlY3Rv
cnksIHNpemVvZihkYXJ3aW5EaXJlY3RvcnkpKSkKKyAgICAgICAgICAgICAgICBbW05TRmlsZU1h
bmFnZXIgZGVmYXVsdE1hbmFnZXJdIHJlbW92ZUl0ZW1BdFBhdGg6W1tOU0ZpbGVNYW5hZ2VyIGRl
ZmF1bHRNYW5hZ2VyXSBzdHJpbmdXaXRoRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uOmRhcndpbkRp
cmVjdG9yeSBsZW5ndGg6c3RybGVuKGRhcndpbkRpcmVjdG9yeSldIGVycm9yOm5pbF07CisgICAg
ICAgICAgICBpZiAoY29uZnN0cihfQ1NfREFSV0lOX1VTRVJfQ0FDSEVfRElSLCBkYXJ3aW5EaXJl
Y3RvcnksIHNpemVvZihkYXJ3aW5EaXJlY3RvcnkpKSkKKyAgICAgICAgICAgICAgICBbW05TRmls
ZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIHJlbW92ZUl0ZW1BdFBhdGg6W1tOU0ZpbGVNYW5hZ2Vy
IGRlZmF1bHRNYW5hZ2VyXSBzdHJpbmdXaXRoRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uOmRhcndp
bkRpcmVjdG9yeSBsZW5ndGg6c3RybGVuKGRhcndpbkRpcmVjdG9yeSldIGVycm9yOm5pbF07Cisg
ICAgICAgIH0KICNlbmRpZgorICAgIH0KK307CiAKLSAgICByZXR1cm4gMDsKK2ludCBQbHVnaW5Q
cm9jZXNzTWFpbihjb25zdCBDb21tYW5kTGluZSYgY29tbWFuZExpbmUpCit7CisgICAgcmV0dXJu
IENoaWxkUHJvY2Vzc01haW48UGx1Z2luUHJvY2VzcywgUGx1Z2luUHJvY2Vzc01haW5EZWxlZ2F0
ZT4oY29tbWFuZExpbmUpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvbWFjL0NoaWxkUHJvY2Vzc01haW4uaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQ2hp
bGRQcm9jZXNzTWFpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNkYjVhYzcyOTQxNjY3NzliODFhZjZiZTVjNGNi
OTllNzc4NDE4NDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFj
L0NoaWxkUHJvY2Vzc01haW4uaApAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgQ2hpbGRQcm9jZXNzTWFpbl9oCisjZGVmaW5lIENoaWxkUHJvY2Vzc01haW5faAorCisjaW1w
b3J0ICJDaGlsZFByb2Nlc3MuaCIKKyNpbXBvcnQgIkNvbW1hbmRMaW5lLmgiCisjaW1wb3J0ICJX
ZWJLaXQySW5pdGlhbGl6ZS5oIgorI2ltcG9ydCA8V2ViQ29yZS9SdW5Mb29wLmg+CisjaW1wb3J0
IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KKyNpbXBvcnQgPHN5c2V4aXRzLmg+CisKKyNpZiBV
U0UoQVBQS0lUKQorQGludGVyZmFjZSBOU0FwcGxpY2F0aW9uIChXZWJOU0FwcGxpY2F0aW9uRGV0
YWlscykKKy0odm9pZClfaW5zdGFsbEF1dG9yZWxlYXNlUG9vbHNPbkN1cnJlbnRUaHJlYWRJZk5l
Y2Vzc2FyeTsKK0BlbmQKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgQ2hp
bGRQcm9jZXNzTWFpbkRlbGVnYXRlIHsKK3B1YmxpYzoKKyAgICBDaGlsZFByb2Nlc3NNYWluRGVs
ZWdhdGUoY29uc3QgQ29tbWFuZExpbmUmIGNvbW1hbmRMaW5lKQorICAgICAgICA6IG1fY29tbWFu
ZExpbmUoY29tbWFuZExpbmUpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgfkNoaWxkUHJv
Y2Vzc01haW5EZWxlZ2F0ZSgpOworCisgICAgdmlydHVhbCB2b2lkIGluc3RhbGxTaWduYWxIYW5k
bGVycygpOworICAgIHZpcnR1YWwgdm9pZCBkb1ByZUluaXRpYWxpemF0aW9uV29yaygpOworCisg
ICAgdmlydHVhbCBib29sIGdldENvbm5lY3Rpb25JZGVudGlmaWVyKENvcmVJUEM6OkNvbm5lY3Rp
b246OklkZW50aWZpZXImIGlkZW50aWZpZXIpOworICAgIHZpcnR1YWwgYm9vbCBnZXRDbGllbnRJ
ZGVudGlmaWVyKFN0cmluZyYgY2xpZW50SWRlbnRpZmllcik7CisgICAgdmlydHVhbCBib29sIGdl
dENsaWVudFByb2Nlc3NOYW1lKFN0cmluZyYgY2xpZW50UHJvY2Vzc05hbWUpOworCisgICAgdmly
dHVhbCB2b2lkIGRvUG9zdFJ1bldvcmsoKTsKKworcHJvdGVjdGVkOgorICAgIGNvbnN0IENvbW1h
bmRMaW5lJiBtX2NvbW1hbmRMaW5lOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQ2hpbGRQcm9j
ZXNzVHlwZSwgdHlwZW5hbWUgQ2hpbGRQcm9jZXNzTWFpbkRlbGVnYXRlVHlwZT4KK2ludCBDaGls
ZFByb2Nlc3NNYWluKGNvbnN0IENvbW1hbmRMaW5lJiBjb21tYW5kTGluZSkKK3sKKyAgICBDaGls
ZFByb2Nlc3NNYWluRGVsZWdhdGVUeXBlIGRlbGVnYXRlKGNvbW1hbmRMaW5lKTsKKworICAgIEBh
dXRvcmVsZWFzZXBvb2wgeworICAgICAgICBJbml0aWFsaXplV2ViS2l0MigpOworCisgICAgICAg
IGRlbGVnYXRlLmluc3RhbGxTaWduYWxIYW5kbGVycygpOworICAgICAgICBkZWxlZ2F0ZS5kb1By
ZUluaXRpYWxpemF0aW9uV29yaygpOworCisgICAgICAgIENoaWxkUHJvY2Vzc0luaXRpYWxpemF0
aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOworICAgICAgICBpZiAoIWRlbGVnYXRlLmdldENvbm5l
Y3Rpb25JZGVudGlmaWVyKHBhcmFtZXRlcnMuY29ubmVjdGlvbklkZW50aWZpZXIpKQorICAgICAg
ICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKworICAgICAgICBpZiAoIWRlbGVnYXRlLmdldENs
aWVudElkZW50aWZpZXIocGFyYW1ldGVycy5jbGllbnRJZGVudGlmaWVyKSkKKyAgICAgICAgICAg
IHJldHVybiBFWElUX0ZBSUxVUkU7CisKKyAgICAgICAgaWYgKCFkZWxlZ2F0ZS5nZXRDbGllbnRQ
cm9jZXNzTmFtZShwYXJhbWV0ZXJzLnVpUHJvY2Vzc05hbWUpKQorICAgICAgICAgICAgcmV0dXJu
IEVYSVRfRkFJTFVSRTsKKworICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgbW92ZWQg
dG8gQ2hpbGRQcm9jZXNzTWFjIGlmIGl0IGlzIHN0aWxsIG5lY2Vzc2FyeS4KKyAgICAgICAgU3Ry
aW5nIGxvY2FsaXphdGlvbiA9IGNvbW1hbmRMaW5lWyJsb2NhbGl6YXRpb24iXTsKKyAgICAgICAg
UmV0YWluUHRyPENGU3RyaW5nUmVmPiBjZkxvY2FsaXphdGlvbihBZG9wdENGLCBDRlN0cmluZ0Ny
ZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVW5pQ2hhcio+KGxv
Y2FsaXphdGlvbi5jaGFyYWN0ZXJzKCkpLCBsb2NhbGl6YXRpb24ubGVuZ3RoKCkpKTsKKyAgICAg
ICAgaWYgKGNmTG9jYWxpemF0aW9uKQorICAgICAgICAgICAgV0tTZXREZWZhdWx0TG9jYWxpemF0
aW9uKGNmTG9jYWxpemF0aW9uLmdldCgpKTsKKworI2lmIFVTRShBUFBLSVQpCisgICAgICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgbm90IG5lZWQgdG8gdXNlIEFwcEtpdCBpbiBldmVyeSBwcm9jZXNz
LCBidXQgcmlnaHQgbm93LCBXZWJDb3JlOjpSdW5Mb29wIGRlcGVuZHMKKyAgICAgICAgLy8gb24g
dGhlIG91dGVyIG1vc3QgcnVubG9vcCBiZWluZyBhbiBBcHBLaXQgcnVubG9vcC4KKyAgICAgICAg
W05TQXBwbGljYXRpb24gc2hhcmVkQXBwbGljYXRpb25dOworCisgICAgICAgIC8vIEluc3RhbGxz
IGF1dG9yZWxlYXNlIHBvb2xzIG9uIHRoZSBjdXJyZW50IENGUnVuTG9vcCB3aGljaCBwcmV2ZW50
cyBtZW1vcnkgZnJvbSBhY2N1bXVsYXRpbmcgYmV0d2VlbiB1c2VyIGV2ZW50cy4KKyAgICAgICAg
Ly8gRklYTUU6IFJlbW92ZSB3aGVuIDxyZGFyOi8vcHJvYmxlbS84OTI5NDI2PiBpcyBmaXhlZC4K
KyAgICAgICAgW1tOU0FwcGxpY2F0aW9uIHNoYXJlZEFwcGxpY2F0aW9uXSBfaW5zdGFsbEF1dG9y
ZWxlYXNlUG9vbHNPbkN1cnJlbnRUaHJlYWRJZk5lY2Vzc2FyeV07CisjZW5kaWYKKworICAgICAg
ICBDaGlsZFByb2Nlc3NUeXBlOjpzaGFyZWQoKS5pbml0aWFsaXplKHBhcmFtZXRlcnMpOworICAg
IH0KKworICAgIFdlYkNvcmU6OlJ1bkxvb3A6OnJ1bigpOworCisgICAgQGF1dG9yZWxlYXNlcG9v
bCB7CisgICAgICAgIGRlbGVnYXRlLmRvUG9zdFJ1bldvcmsoKTsKKyAgICB9CisKKyAgICByZXR1
cm4gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBDaGlsZFByb2Nl
c3NNYWluX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQ2hpbGRQcm9j
ZXNzTWFpbi5tbSBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQ2hpbGRQcm9jZXNzTWFpbi5t
bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi40Y2YwOWMzMGIwMDlmMDYyOWRhMjc5MWM1ZmQ2MDQzN2E0ZWE5OTkyCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9DaGlsZFByb2Nlc3NN
YWluLm1tCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQ2hpbGRQcm9jZXNzTWFpbi5oIgorCisjaW1wb3J0IDxtYWNoL21hY2hfZXJy
b3IuaD4KKyNpbXBvcnQgPHNlcnZlcnMvYm9vdHN0cmFwLmg+CisjaW1wb3J0IDxzdGRpby5oPgor
I2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgor
CisjZGVmaW5lIFNIT1dfQ1JBU0hfUkVQT1JURVIgMQorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
Q2hpbGRQcm9jZXNzTWFpbkRlbGVnYXRlOjp+Q2hpbGRQcm9jZXNzTWFpbkRlbGVnYXRlKCkKK3sK
K30KKwordm9pZCBDaGlsZFByb2Nlc3NNYWluRGVsZWdhdGU6Omluc3RhbGxTaWduYWxIYW5kbGVy
cygpCit7CisjaWYgIVNIT1dfQ1JBU0hfUkVQT1JURVIKKyAgICAvLyBJbnN0YWxscyBzaWduYWwg
aGFuZGxlcnMgdGhhdCBleGl0IG9uIGEgY3Jhc2ggc28gdGhhdCBDcmFzaFJlcG9ydGVyIGRvZXMg
bm90IHNob3cgdXAuCisgICAgc2lnbmFsKFNJR0lMTCwgX2V4aXQpOworICAgIHNpZ25hbChTSUdG
UEUsIF9leGl0KTsKKyAgICBzaWduYWwoU0lHQlVTLCBfZXhpdCk7CisgICAgc2lnbmFsKFNJR1NF
R1YsIF9leGl0KTsKKyNlbmRpZgorfQorCit2b2lkIENoaWxkUHJvY2Vzc01haW5EZWxlZ2F0ZTo6
ZG9QcmVJbml0aWFsaXphdGlvbldvcmsoKQoreworfQorCitib29sIENoaWxkUHJvY2Vzc01haW5E
ZWxlZ2F0ZTo6Z2V0Q29ubmVjdGlvbklkZW50aWZpZXIoQ29yZUlQQzo6Q29ubmVjdGlvbjo6SWRl
bnRpZmllciYgaWRlbnRpZmllcikKK3sKKyAgICBTdHJpbmcgc2VydmljZU5hbWUgPSBtX2NvbW1h
bmRMaW5lWyJzZXJ2aWNlbmFtZSJdOworICAgIGlmIChzZXJ2aWNlTmFtZS5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBtYWNoX3BvcnRfdCBzZXJ2ZXJQb3J0Owor
ICAgIGtlcm5fcmV0dXJuX3Qga3IgPSBib290c3RyYXBfbG9va191cChib290c3RyYXBfcG9ydCwg
c2VydmljZU5hbWUudXRmOCgpLmRhdGEoKSwgJnNlcnZlclBvcnQpOworICAgIGlmIChrcikgewor
ICAgICAgICBXVEZMb2dBbHdheXMoImJvb3RzdHJhcF9sb29rX3VwIHJlc3VsdDogJXMgKCV4KVxu
IiwgbWFjaF9lcnJvcl9zdHJpbmcoa3IpLCBrcik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBpZGVudGlmaWVyID0gc2VydmVyUG9ydDsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBDaGlsZFByb2Nlc3NNYWluRGVsZWdhdGU6OmdldENsaWVudElkZW50aWZpZXIoU3Ry
aW5nJiBjbGllbnRJZGVudGlmaWVyKQoreworICAgIGNsaWVudElkZW50aWZpZXIgPSBtX2NvbW1h
bmRMaW5lWyJjbGllbnQtaWRlbnRpZmllciJdOworICAgIGlmIChjbGllbnRJZGVudGlmaWVyLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIENoaWxkUHJvY2Vzc01haW5EZWxlZ2F0ZTo6Z2V0Q2xpZW50UHJvY2Vzc05hbWUoU3RyaW5n
JiBjbGllbnRQcm9jZXNzTmFtZSkKK3sKKyAgICBjbGllbnRQcm9jZXNzTmFtZSA9IG1fY29tbWFu
ZExpbmVbInVpLXByb2Nlc3MtbmFtZSJdOworICAgIGlmIChjbGllbnRQcm9jZXNzTmFtZS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBDaGlsZFByb2Nlc3NNYWluRGVsZWdhdGU6OmRvUG9zdFJ1bldvcmsoKQoreworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZFdvcmtl
clByb2Nlc3MvbWFjL1NoYXJlZFdvcmtlclByb2Nlc3NNYWluTWFjLm1tIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkV29ya2VyUHJvY2Vzcy9tYWMvU2hhcmVkV29ya2VyUHJvY2Vzc01haW5NYWMubW0K
aW5kZXggYmU2N2EyMjM4MjczZmIzMWMwNGNkNWY3YTI2ZjgzYTdiOWY1ODgwOS4uYjhjMGY2ZTNm
ODQ2OGEwNzA3MjY5NjBiNzU2MDIyZThhMDRhMzMyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvU2hhcmVkV29ya2VyUHJvY2Vzcy9tYWMvU2hhcmVkV29ya2VyUHJvY2Vzc01haW5NYWMubW0K
KysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkV29ya2VyUHJvY2Vzcy9tYWMvU2hhcmVkV29ya2Vy
UHJvY2Vzc01haW5NYWMubW0KQEAgLTI4LDg3ICsyOCwxNiBAQAogCiAjaWYgRU5BQkxFKFNIQVJF
RF9XT1JLRVJfUFJPQ0VTUykKIAotI2ltcG9ydCAiQ29tbWFuZExpbmUuaCIKLSNpbXBvcnQgIkVu
dmlyb25tZW50VXRpbGl0aWVzLmgiCisjaW1wb3J0ICJDaGlsZFByb2Nlc3NNYWluLmgiCiAjaW1w
b3J0ICJTaGFyZWRXb3JrZXJQcm9jZXNzLmgiCi0jaW1wb3J0ICJXZWJLaXQySW5pdGlhbGl6ZS5o
IgotI2ltcG9ydCA8Rm91bmRhdGlvbi9OU1VzZXJEZWZhdWx0cy5oPgotI2ltcG9ydCA8V2ViQ29y
ZS9SdW5Mb29wLmg+Ci0jaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KLSNpbXBvcnQg
PG1hY2gvbWFjaF9lcnJvci5oPgotI2ltcG9ydCA8c2VydmVycy9ib290c3RyYXAuaD4KLSNpbXBv
cnQgPHN0ZGlvLmg+Ci0jaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+Ci0jaW1wb3J0IDx3dGYvdGV4
dC9DU3RyaW5nLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2RlZmluZSBT
SE9XX0NSQVNIX1JFUE9SVEVSIDEKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewogCi0vLyBGSVhNRTogVGhlcmUgaXMgbXVjaCBjb2RlIGhlcmUgdGhhdCBp
cyBkdXBsaWNhdGVkIGluIFdlYlByb2Nlc3NNYWluTWFjLm1tLCB3ZSBzaG91bGQgYWRkIGEgc2hh
cmVkIGJhc2UgY2xhc3Mgd2hlcmUKLS8vIHdlIGNhbiBwdXQgZXZlcnl0aGluZy4KLQogaW50IFNo
YXJlZFdvcmtlclByb2Nlc3NNYWluKGNvbnN0IENvbW1hbmRMaW5lJiBjb21tYW5kTGluZSkKIHsK
LSAgICBTdHJpbmcgc2VydmljZU5hbWUgPSBjb21tYW5kTGluZVsic2VydmljZW5hbWUiXTsKLSAg
ICBpZiAoc2VydmljZU5hbWUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJF
OwotICAgIAotICAgIC8vIEdldCB0aGUgc2VydmVyIHBvcnQuCi0gICAgbWFjaF9wb3J0X3Qgc2Vy
dmVyUG9ydDsKLSAgICBrZXJuX3JldHVybl90IGtyID0gYm9vdHN0cmFwX2xvb2tfdXAoYm9vdHN0
cmFwX3BvcnQsIHNlcnZpY2VOYW1lLnV0ZjgoKS5kYXRhKCksICZzZXJ2ZXJQb3J0KTsKLSAgICBp
ZiAoa3IpIHsKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJib290c3RyYXBfbG9va191cCByZXN1bHQ6
ICVzICgleClcbiIsIG1hY2hfZXJyb3Jfc3RyaW5nKGtyKSwga3IpOwotICAgICAgICByZXR1cm4g
RVhJVF9GQUlMVVJFOwotICAgIH0KLQotICAgIFN0cmluZyBsb2NhbGl6YXRpb24gPSBjb21tYW5k
TGluZVsibG9jYWxpemF0aW9uIl07Ci0gICAgaWYgKCFsb2NhbGl6YXRpb24uaXNFbXB0eSgpKSB7
Ci0gICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZMb2NhbGl6YXRpb24oQWRvcHRDRiwg
Q0ZTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCByZWludGVycHJldF9jYXN0PGNvbnN0IFVu
aUNoYXIqPihsb2NhbGl6YXRpb24uY2hhcmFjdGVycygpKSwgbG9jYWxpemF0aW9uLmxlbmd0aCgp
KSk7Ci0gICAgICAgIFdLU2V0RGVmYXVsdExvY2FsaXphdGlvbihjZkxvY2FsaXphdGlvbi5nZXQo
KSk7Ci0gICAgfQotCi0jaWYgZGVmaW5lZChfX2kzODZfXykKLSAgICB7Ci0gICAgICAgIE5TQXV0
b3JlbGVhc2VQb29sICpwb29sID0gW1tOU0F1dG9yZWxlYXNlUG9vbCBhbGxvY10gaW5pdF07Ci0K
LSAgICAgICAgTlNEaWN0aW9uYXJ5ICpkZWZhdWx0cyA9IFtbTlNEaWN0aW9uYXJ5IGFsbG9jXSBp
bml0V2l0aE9iamVjdHNBbmRLZXlzOltOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdLCBAIkFw
cGxlTWFnbmlmaWVkTW9kZSIsIG5pbF07Ci0gICAgICAgIFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRh
cmRVc2VyRGVmYXVsdHNdIHJlZ2lzdGVyRGVmYXVsdHM6ZGVmYXVsdHNdOwotICAgICAgICBbZGVm
YXVsdHMgcmVsZWFzZV07Ci0KLSAgICAgICAgW3Bvb2wgZHJhaW5dOwotICAgIH0KLSNlbmRpZgot
Ci0jaWYgIVNIT1dfQ1JBU0hfUkVQT1JURVIKLSAgICAvLyBJbnN0YWxscyBzaWduYWwgaGFuZGxl
cnMgdGhhdCBleGl0IG9uIGEgY3Jhc2ggc28gdGhhdCBDcmFzaFJlcG9ydGVyIGRvZXMgbm90IHNo
b3cgdXAuCi0gICAgc2lnbmFsKFNJR0lMTCwgX2V4aXQpOwotICAgIHNpZ25hbChTSUdGUEUsIF9l
eGl0KTsKLSAgICBzaWduYWwoU0lHQlVTLCBfZXhpdCk7Ci0gICAgc2lnbmFsKFNJR1NFR1YsIF9l
eGl0KTsKLSNlbmRpZgotCi0gICAgQGF1dG9yZWxlYXNlcG9vbCB7Ci0gICAgICAgIEluaXRpYWxp
emVXZWJLaXQyKCk7Ci0KLSAgICAgICAgQ2hpbGRQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbWV0
ZXJzIHBhcmFtZXRlcnM7Ci0gICAgICAgIHBhcmFtZXRlcnMudWlQcm9jZXNzTmFtZSA9IGNvbW1h
bmRMaW5lWyJ1aS1wcm9jZXNzLW5hbWUiXTsKLSAgICAgICAgcGFyYW1ldGVycy5jbGllbnRJZGVu
dGlmaWVyID0gY29tbWFuZExpbmVbImNsaWVudC1pZGVudGlmaWVyIl07Ci0gICAgICAgIHBhcmFt
ZXRlcnMuY29ubmVjdGlvbklkZW50aWZpZXIgPSBDb3JlSVBDOjpDb25uZWN0aW9uOjpJZGVudGlm
aWVyKHNlcnZlclBvcnQpOwotCi0gICAgICAgIFNoYXJlZFdvcmtlclByb2Nlc3M6OnNoYXJlZCgp
LmluaXRpYWxpemUocGFyYW1ldGVycyk7Ci0KLSAgICAgICAgW05TQXBwbGljYXRpb24gc2hhcmVk
QXBwbGljYXRpb25dOwotICAgIH0KLQotICAgIFJ1bkxvb3A6OnJ1bigpOwotICAgIAotICAgIHJl
dHVybiAwOworICAgIHJldHVybiBDaGlsZFByb2Nlc3NNYWluPFNoYXJlZFdvcmtlclByb2Nlc3Ms
IENoaWxkUHJvY2Vzc01haW5EZWxlZ2F0ZT4oY29tbWFuZExpbmUpOwogfQogCi19Cit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIEVOQUJMRShTSEFSRURfV09SS0VSX1BST0NFU1Mp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggYjU5NmZhNDk0MzAzNzIzNDA0NjE0OWIxNmEzODk3MWVkZDk4OGM0My4uMWMxNTFiNmVk
MjA0OTM4ZTdiZjY3YTkwMjJmZGNmYjNiZTM5MmM3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtODMwLDYgKzgzMCw4IEBACiAJ
CUJDOUIzOEExMTBGNTM4QkUwMDQ0M0ExNSAvKiBXZWJGcmFtZVByb3h5LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzlCMzg5RjEwRjUzOEJFMDA0NDNB
MTUgLyogV2ViRnJhbWVQcm94eS5oICovOyB9OwogCQlCQzlCQTUwNDE2OTdDNDUzMDBFNDQ2MTYg
LyogV2ViS2l0MkluaXRpYWxpemUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkM5QkE1MDIxNjk3QzQ1MzAwRTQ0NjE2IC8qIFdlYktpdDJJbml0aWFs
aXplLmNwcCAqLzsgfTsKIAkJQkM5QkE1MDUxNjk3QzQ1MzAwRTQ0NjE2IC8qIFdlYktpdDJJbml0
aWFsaXplLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
QzlCQTUwMzE2OTdDNDUzMDBFNDQ2MTYgLyogV2ViS2l0MkluaXRpYWxpemUuaCAqLzsgfTsKKwkJ
QkM5QkE1MDgxNjk5MUMzQzAwRTQ0NjE2IC8qIENoaWxkUHJvY2Vzc01haW4ubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzlCQTUwNjE2OTkxQzNDMDBF
NDQ2MTYgLyogQ2hpbGRQcm9jZXNzTWFpbi5tbSAqLzsgfTsKKwkJQkM5QkE1MDkxNjk5MUMzQzAw
RTQ0NjE2IC8qIENoaWxkUHJvY2Vzc01haW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDOUJBNTA3MTY5OTFDM0MwMEU0NDYxNiAvKiBDaGlsZFByb2Nl
c3NNYWluLmggKi87IH07CiAJCUJDOUZBNTIwMTYwRDNCNDMwMDU0REY5QSAvKiBGb3VuZGF0aW9u
LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDM0RFNDY4MTVBOTE3NjMwMDhEMjZGQyAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayAqLzsg
fTsKIAkJQkM5RkE1MjIxNjBENEEwQzAwNTRERjlBIC8qIGNvbS5hcHBsZS5XZWJLaXQuUGx1Z2lu
UHJvY2Vzcy5zYiBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTE5NjdFMzUxNTBBQjVENTAwQzczMTY5IC8qIGNvbS5hcHBsZS5XZWJLaXQuUGx1Z2luUHJv
Y2Vzcy5zYiAqLzsgfTsKIAkJQkM5RkE1MjMxNjBENEEwRjAwNTRERjlBIC8qIGNvbS5hcHBsZS5X
ZWJQcm9jZXNzLnNiIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMTk2N0UzNzE1MEFCNUUyMDBDNzMxNjkgLyogY29tLmFwcGxlLldlYlByb2Nlc3Muc2Ig
Ki87IH07CkBAIC0yMTAyLDYgKzIxMDQsOCBAQAogCQlCQzlCMzg5RjEwRjUzOEJFMDA0NDNBMTUg
LyogV2ViRnJhbWVQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJG
cmFtZVByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDOUJBNTAyMTY5N0M0
NTMwMEU0NDYxNiAvKiBXZWJLaXQySW5pdGlhbGl6ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXZWJLaXQySW5pdGlhbGl6ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUJDOUJBNTAzMTY5N0M0NTMwMEU0NDYxNiAvKiBXZWJLaXQySW5pdGlhbGl6
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXQySW5pdGlhbGl6ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzlCQTUwNjE2OTkxQzNDMDBFNDQ2MTYg
LyogQ2hpbGRQcm9jZXNzTWFpbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IENoaWxkUHJvY2Vzc01haW4ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUJDOUJBNTA3MTY5OTFDM0MwMEU0NDYxNiAvKiBDaGlsZFByb2Nlc3NNYWluLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENoaWxkUHJvY2Vzc01haW4uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQkNBMEVGN0QxMjMzMUU3ODAwN0QzQ0ZCIC8qIFdlYlVuZG9TdGVw
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlVuZG9TdGVwLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQTBFRjdFMTIzMzFFNzgwMDdEM0NGQiAvKiBXZWJV
bmRvU3RlcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJVbmRv
U3RlcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQTBFRjlEMTIzMzI2NDIw
MDdEM0NGQiAvKiBXZWJFZGl0Q29tbWFuZFByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYkVkaXRDb21tYW5kUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTM4MzcsNiArMzg0MSw4IEBACiAJCQkJOTA1NjIwRTUxMkJDMjQ3NjAwMDc5OUI2IC8q
IFdlYk1lbW9yeVNhbXBsZXIubWFjLm1tICovLAogCQkJCUJDRTIzMUMwMTIyQzQ2NkUwMEQ1QzM1
QSAvKiBXZWJVUkxSZXF1ZXN0TWFjLm1tICovLAogCQkJCUJDOTBBMUQ1MTIyREQ2NkEwMENDOEM1
MCAvKiBXZWJVUkxSZXNwb25zZU1hYy5tbSAqLywKKwkJCQlCQzlCQTUwNjE2OTkxQzNDMDBFNDQ2
MTYgLyogQ2hpbGRQcm9jZXNzTWFpbi5tbSAqLywKKwkJCQlCQzlCQTUwNzE2OTkxQzNDMDBFNDQ2
MTYgLyogQ2hpbGRQcm9jZXNzTWFpbi5oICovLAogCQkJKTsKIAkJCXBhdGggPSBtYWM7CiAJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtNTAzMiw2ICs1MDM4LDcgQEAKIAkJCQlCQ0Y0REUy
MzE2OEU0QkQ1MDBDOTRBRkMgLyogTmV0d29ya1Byb2Nlc3NTdXBwbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQ0Y0REUyNTE2OEZBNDQ4MDBDOTRBRkMgLyogV2ViQ29udGV4dFN1cHBsZW1l
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOUJBNTA1MTY5N0M0NTMwMEU0NDYxNiAvKiBXZWJL
aXQySW5pdGlhbGl6ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkM5QkE1MDkxNjk5MUMzQzAwRTQ0
NjE2IC8qIENoaWxkUHJvY2Vzc01haW4uaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtNjAwNiw2ICs2MDEz
LDcgQEAKIAkJCQkyOTg5QTQxMTE2N0QxODM0MDA0Rjk2RDIgLyogQ3VzdG9tUHJvdG9jb2xNYW5h
Z2VyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMzFBNTA1RjkxNjgwMDI1NTAwQTkzMEVCIC8q
IFdlYkNvbnRleHRDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM5QkE1MDQxNjk3QzQ1
MzAwRTQ0NjE2IC8qIFdlYktpdDJJbml0aWFsaXplLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUJD
OUJBNTA4MTY5OTFDM0MwMEU0NDYxNiAvKiBDaGlsZFByb2Nlc3NNYWluLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJ
CX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL21hYy9XZWJQcm9jZXNz
TWFpbk1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvbWFjL1dlYlByb2Nlc3NNYWlu
TWFjLm1tCmluZGV4IDBlMjUwNDFlNDI0NTM0NTQwMzhmODYzMTdjZjA2Y2JmMmIwM2Y2ZGMuLjI3
ZjlmZGVjZGIyYWViMTgyOWFlZDQ0MWNiZjc5ODE1YzVmODk5NjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvbWFjL1dlYlByb2Nlc3NNYWluTWFjLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvbWFjL1dlYlByb2Nlc3NNYWluTWFjLm1tCkBAIC0yNywxNzMg
KzI3LDEyOSBAQAogI2ltcG9ydCAiV2ViUHJvY2Vzc01haW4uaCIKIAogI2ltcG9ydCAiQ29tbWFu
ZExpbmUuaCIKKyNpbXBvcnQgIkNoaWxkUHJvY2Vzc01haW4uaCIKICNpbXBvcnQgIkVudmlyb25t
ZW50VXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJFbnZpcm9ubWVudFZhcmlhYmxlcy5oIgogI2ltcG9y
dCAiU3RyaW5nVXRpbGl0aWVzLmgiCi0jaW1wb3J0ICJXZWJLaXQySW5pdGlhbGl6ZS5oIgogI2lt
cG9ydCAiV2ViUHJvY2Vzcy5oIgotI2ltcG9ydCA8V2ViQ29yZS9SdW5Mb29wLmg+Ci0jaW1wb3J0
IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KICNpbXBvcnQgPG1hY2gvbWFjaF9lcnJvci5oPgot
I2ltcG9ydCA8b2JqYy9vYmpjLWF1dG8uaD4KICNpbXBvcnQgPHNlcnZlcnMvYm9vdHN0cmFwLmg+
Ci0jaW1wb3J0IDxzaWduYWwuaD4KICNpbXBvcnQgPHNwYXduLmg+CiAjaW1wb3J0IDxzdGRpby5o
PgotI2ltcG9ydCA8c3lzZXhpdHMuaD4KLSNpbXBvcnQgPHVuaXN0ZC5oPgogI2ltcG9ydCA8d3Rm
L1JldGFpblB0ci5oPgogI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2ltcG9ydCA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKIGV4dGVybiAiQyIga2Vybl9yZXR1cm5fdCBib290c3RyYXBf
cmVnaXN0ZXIyKG1hY2hfcG9ydF90LCBuYW1lX3QsIG1hY2hfcG9ydF90LCB1aW50NjRfdCk7CiAK
LSNpZiBVU0UoQVBQS0lUKQotQGludGVyZmFjZSBOU0FwcGxpY2F0aW9uIChXZWJOU0FwcGxpY2F0
aW9uRGV0YWlscykKLS0odm9pZClfaW5zdGFsbEF1dG9yZWxlYXNlUG9vbHNPbkN1cnJlbnRUaHJl
YWRJZk5lY2Vzc2FyeTsKLUBlbmQKLSNlbmRpZgotCi0jZGVmaW5lIFNIT1dfQ1JBU0hfUkVQT1JU
RVIgMQotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQogbmFtZXNwYWNlIFdlYktpdCB7CiAK
LWludCBXZWJQcm9jZXNzTWFpbihjb25zdCBDb21tYW5kTGluZSYgY29tbWFuZExpbmUpCi17Ci0g
ICAgLy8gUmVtb3ZlIHRoZSBXZWJQcm9jZXNzIHNoaW0gZnJvbSB0aGUgRFlMRF9JTlNFUlRfTElC
UkFSSUVTIGVudmlyb25tZW50IHZhcmlhYmxlIHNvIGFueSBwcm9jZXNzZXMgc3Bhd25lZCBieQot
ICAgIC8vIHRoZSBXZWJQcm9jZXNzIGRvbid0IHRyeSB0byBpbnNlcnQgdGhlIHNoaW0gYW5kIGNy
YXNoLgotICAgIEVudmlyb25tZW50VXRpbGl0aWVzOjpzdHJpcFZhbHVlc0VuZGluZ1dpdGhTdHJp
bmcoIkRZTERfSU5TRVJUX0xJQlJBUklFUyIsICIvV2ViUHJvY2Vzc1NoaW0uZHlsaWIiKTsKLQot
ICAgIE5TQXV0b3JlbGVhc2VQb29sICpwb29sID0gW1tOU0F1dG9yZWxlYXNlUG9vbCBhbGxvY10g
aW5pdF07Ci0KLSAgICBTdHJpbmcgc2VydmljZU5hbWUgPSBjb21tYW5kTGluZVsic2VydmljZW5h
bWUiXTsKLSAgICBTdHJpbmcgY2xpZW50RXhlY3V0YWJsZTsKLSAgICBjbGllbnRFeGVjdXRhYmxl
ID0gY29tbWFuZExpbmVbImNsaWVudC1leGVjdXRhYmxlIl07Ci0KLSAgICBpZiAoc2VydmljZU5h
bWUuaXNFbXB0eSgpICYmIGNsaWVudEV4ZWN1dGFibGUuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm4gRVhJVF9GQUlMVVJFOwotCi0gICAgU3RyaW5nIGNsaWVudElkZW50aWZpZXI7Ci0KLSAgICAv
LyBHZXQgdGhlIHNlcnZlciBwb3J0LgotICAgIG1hY2hfcG9ydF90IHNlcnZlclBvcnQ7Ci0gICAg
aWYgKGNsaWVudEV4ZWN1dGFibGUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGtlcm5fcmV0dXJuX3Qg
a3IgPSBib290c3RyYXBfbG9va191cChib290c3RyYXBfcG9ydCwgc2VydmljZU5hbWUudXRmOCgp
LmRhdGEoKSwgJnNlcnZlclBvcnQpOwotICAgICAgICBpZiAoa3IpIHsKLSAgICAgICAgICAgIFdU
RkxvZ0Fsd2F5cygiYm9vdHN0cmFwX2xvb2tfdXAgcmVzdWx0OiAlcyAoJXgpXG4iLCBtYWNoX2Vy
cm9yX3N0cmluZyhrciksIGtyKTsKLSAgICAgICAgICAgIHJldHVybiAyOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBjbGllbnRJZGVudGlmaWVyID0gY29tbWFuZExpbmVbImNsaWVudC1p
ZGVudGlmaWVyIl07Ci0gICAgICAgIGlmICghY2xpZW50SWRlbnRpZmllcikgewotICAgICAgICAg
ICAgV1RGTG9nQWx3YXlzKCJObyBjbGllbnQgaWRlbnRpZmllciBwYXNzZWQgdG8gdGhlIFdlYlBy
b2Nlc3MiKTsKLSAgICAgICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Ci0gICAgICAgIH0KLSAg
ICB9IGVsc2UgewotICAgICAgICBtYWNoX3BvcnRfbmFtZV90IHB1Ymxpc2hlZFNlcnZpY2U7Ci0g
ICAgICAgIG1hY2hfcG9ydF9hbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBNQUNIX1BPUlRfUklH
SFRfUkVDRUlWRSwgJnB1Ymxpc2hlZFNlcnZpY2UpOwotICAgICAgICBtYWNoX3BvcnRfaW5zZXJ0
X3JpZ2h0KG1hY2hfdGFza19zZWxmKCksIHB1Ymxpc2hlZFNlcnZpY2UsIHB1Ymxpc2hlZFNlcnZp
Y2UsIE1BQ0hfTVNHX1RZUEVfTUFLRV9TRU5EKTsKLSAgICAgICAgLy8gTWFrZSBpdCBwb3NzaWJs
ZSB0byBsb29rIHVwLgotICAgICAgICBzZXJ2aWNlTmFtZSA9IFN0cmluZzo6Zm9ybWF0KCJjb20u
YXBwbGUuV2ViS2l0LldlYlByb2Nlc3MtJWQiLCBnZXRwaWQoKSk7Ci0gICAgICAgIGlmIChrZXJu
X3JldHVybl90IGtyID0gYm9vdHN0cmFwX3JlZ2lzdGVyMihib290c3RyYXBfcG9ydCwgY29uc3Rf
Y2FzdDxjaGFyKj4oc2VydmljZU5hbWUudXRmOCgpLmRhdGEoKSksIHB1Ymxpc2hlZFNlcnZpY2Us
IDApKSB7Ci0gICAgICAgICAgICBXVEZMb2dBbHdheXMoIkZhaWxlZCB0byByZWdpc3RlciBzZXJ2
aWNlIG5hbWUgXCIlc1wiLiAlcyAoJXgpXG4iLCBzZXJ2aWNlTmFtZS51dGY4KCkuZGF0YSgpLCBt
YWNoX2Vycm9yX3N0cmluZyhrciksIGtyKTsKLSAgICAgICAgICAgIHJldHVybiBFWElUX0ZBSUxV
UkU7Ci0gICAgICAgIH0KLQotICAgICAgICBDU3RyaW5nIGNvbW1hbmQgPSBjbGllbnRFeGVjdXRh
YmxlLnV0ZjgoKTsKLSAgICAgICAgY29uc3QgY2hhciogYXJnc1tdID0geyBjb21tYW5kLmRhdGEo
KSwgMCB9OwotCi0gICAgICAgIEVudmlyb25tZW50VmFyaWFibGVzIGVudmlyb25tZW50VmFyaWFi
bGVzOwotICAgICAgICBlbnZpcm9ubWVudFZhcmlhYmxlcy5zZXQoRW52aXJvbm1lbnRWYXJpYWJs
ZXM6OnByZWV4aXN0aW5nUHJvY2Vzc1NlcnZpY2VOYW1lS2V5KCksIHNlcnZpY2VOYW1lLnV0Zjgo
KS5kYXRhKCkpOwotICAgICAgICBlbnZpcm9ubWVudFZhcmlhYmxlcy5zZXQoRW52aXJvbm1lbnRW
YXJpYWJsZXM6OnByZWV4aXN0aW5nUHJvY2Vzc1R5cGVLZXkoKSwgY29tbWFuZExpbmVbInR5cGUi
XS51dGY4KCkuZGF0YSgpKTsKLQotICAgICAgICBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfdCBm
aWxlQWN0aW9uczsKLSAgICAgICAgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2luaXQoJmZpbGVB
Y3Rpb25zKTsKLSAgICAgICAgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGluaGVyaXRfbnAo
JmZpbGVBY3Rpb25zLCBTVERJTl9GSUxFTk8pOwotICAgICAgICBwb3NpeF9zcGF3bl9maWxlX2Fj
dGlvbnNfYWRkaW5oZXJpdF9ucCgmZmlsZUFjdGlvbnMsIFNURE9VVF9GSUxFTk8pOwotICAgICAg
ICBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkaW5oZXJpdF9ucCgmZmlsZUFjdGlvbnMsIFNU
REVSUl9GSUxFTk8pOwotCi0gICAgICAgIHBvc2l4X3NwYXduYXR0cl90IGF0dHJpYnV0ZXM7Ci0g
ICAgICAgIHBvc2l4X3NwYXduYXR0cl9pbml0KCZhdHRyaWJ1dGVzKTsKLSAgICAgICAgcG9zaXhf
c3Bhd25hdHRyX3NldGZsYWdzKCZhdHRyaWJ1dGVzLCBQT1NJWF9TUEFXTl9DTE9FWEVDX0RFRkFV
TFQgfCBQT1NJWF9TUEFXTl9TRVRQR1JPVVApOwotCi0gICAgICAgIGludCBzcGF3blJlc3VsdCA9
IHBvc2l4X3NwYXduKDAsIGNvbW1hbmQuZGF0YSgpLCAmZmlsZUFjdGlvbnMsICZhdHRyaWJ1dGVz
LCBjb25zdF9jYXN0PGNoYXIqKj4oYXJncyksIGVudmlyb25tZW50VmFyaWFibGVzLmVudmlyb25t
ZW50UG9pbnRlcigpKTsKLQotICAgICAgICBwb3NpeF9zcGF3bmF0dHJfZGVzdHJveSgmYXR0cmli
dXRlcyk7Ci0gICAgICAgIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19kZXN0cm95KCZmaWxlQWN0
aW9ucyk7Ci0KLSAgICAgICAgaWYgKHNwYXduUmVzdWx0KQotICAgICAgICAgICAgcmV0dXJuIDI7
Ci0KLSAgICAgICAgbWFjaF9tc2dfZW1wdHlfcmN2X3QgbWVzc2FnZTsKLSAgICAgICAgaWYgKGtl
cm5fcmV0dXJuX3Qga3IgPSBtYWNoX21zZygmbWVzc2FnZS5oZWFkZXIsIE1BQ0hfUkNWX01TRywg
MCwgc2l6ZW9mKG1lc3NhZ2UpLCBwdWJsaXNoZWRTZXJ2aWNlLCBNQUNIX01TR19USU1FT1VUX05P
TkUsIE1BQ0hfUE9SVF9OVUxMKSkgewotICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJGYWlsZWQg
dG8gcmVjZWl2ZSBwb3J0IGZyb20gdGhlIFVJIHByb2Nlc3MuICVzICgleClcbiIsIG1hY2hfZXJy
b3Jfc3RyaW5nKGtyKSwga3IpOwotICAgICAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKLSAg
ICAgICAgfQotCi0gICAgICAgIG1hY2hfcG9ydF9tb2RfcmVmcyhtYWNoX3Rhc2tfc2VsZigpLCBw
dWJsaXNoZWRTZXJ2aWNlLCBNQUNIX1BPUlRfUklHSFRfUkVDRUlWRSwgLTEpOwotICAgICAgICBz
ZXJ2ZXJQb3J0ID0gbWVzc2FnZS5oZWFkZXIubXNnaF9yZW1vdGVfcG9ydDsKLSAgICAgICAgbWFj
aF9wb3J0X3R5cGVfdCBwb3J0VHlwZTsKLSAgICAgICAga2Vybl9yZXR1cm5fdCBrciA9IG1hY2hf
cG9ydF90eXBlKG1hY2hfdGFza19zZWxmKCksIHNlcnZlclBvcnQsICZwb3J0VHlwZSk7Ci0gICAg
ICAgIGlmIChrciB8fCAhKHBvcnRUeXBlICYgTUFDSF9QT1JUX1RZUEVfU0VORCkpIHsKLSAgICAg
ICAgICAgIFdURkxvZ0Fsd2F5cygiRmFpbGVkIHRvIG9idGFpbiBzZW5kIHJpZ2h0IGZvciBwb3J0
IHJlY2VpdmVkIGZyb20gdGhlIFVJIHByb2Nlc3MuXG4iKTsKLSAgICAgICAgICAgIHJldHVybiBF
WElUX0ZBSUxVUkU7Ci0gICAgICAgIH0KLQotICAgICAgICBSZXRhaW5QdHI8TlNVUkw+IGNsaWVu
dEV4ZWN1dGFibGVVUkwgPSBhZG9wdE5TKFtbTlNVUkwgYWxsb2NdIGluaXRGaWxlVVJMV2l0aFBh
dGg6bnNTdHJpbmdGcm9tV2ViQ29yZVN0cmluZyhjbGllbnRFeGVjdXRhYmxlKV0pOwotICAgICAg
ICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGNsaWVudEJ1bmRsZVVSTCA9IGFkb3B0Q0YoV0tDb3B5QnVu
ZGxlVVJMRm9yRXhlY3V0YWJsZVVSTCgoQ0ZVUkxSZWYpY2xpZW50RXhlY3V0YWJsZVVSTC5nZXQo
KSkpOwotICAgICAgICBSZXRhaW5QdHI8TlNCdW5kbGU+IGNsaWVudEJ1bmRsZSA9IGFkb3B0TlMo
W1tOU0J1bmRsZSBhbGxvY10gaW5pdFdpdGhVUkw6KE5TVVJMICopY2xpZW50QnVuZGxlVVJMLmdl
dCgpXSk7Ci0gICAgICAgIAotICAgICAgICBjbGllbnRJZGVudGlmaWVyID0gW2NsaWVudEJ1bmRs
ZS5nZXQoKSBidW5kbGVJZGVudGlmaWVyXTsKLSAgICAgICAgaWYgKCFjbGllbnRJZGVudGlmaWVy
KSB7Ci0gICAgICAgICAgICBXVEZMb2dBbHdheXMoIkZhaWxlZCB0byBvYnRhaW4gYnVuZGxlIGlk
ZW50aWZpZXIgZnJvbSB0aGUgY2xpZW50IGV4ZWN1dGFibGUuIC5cbiIpOwotICAgICAgICAgICAg
cmV0dXJuIEVYSVRfRkFJTFVSRTsKLSAgICAgICAgfQorY2xhc3MgV2ViUHJvY2Vzc01haW5EZWxl
Z2F0ZSA6IHB1YmxpYyBDaGlsZFByb2Nlc3NNYWluRGVsZWdhdGUgeworcHVibGljOgorICAgIFdl
YlByb2Nlc3NNYWluRGVsZWdhdGUoY29uc3QgQ29tbWFuZExpbmUmIGNvbW1hbmRMaW5lKQorICAg
ICAgICA6IENoaWxkUHJvY2Vzc01haW5EZWxlZ2F0ZShjb21tYW5kTGluZSkKKyAgICB7CiAgICAg
fQogCi0gICAgU3RyaW5nIGxvY2FsaXphdGlvbiA9IGNvbW1hbmRMaW5lWyJsb2NhbGl6YXRpb24i
XTsKLSAgICBpZiAoIWxvY2FsaXphdGlvbi5pc0VtcHR5KCkpIHsKLSAgICAgICAgUmV0YWluUHRy
PENGU3RyaW5nUmVmPiBjZkxvY2FsaXphdGlvbihBZG9wdENGLCBDRlN0cmluZ0NyZWF0ZVdpdGhD
aGFyYWN0ZXJzKDAsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVW5pQ2hhcio+KGxvY2FsaXphdGlv
bi5jaGFyYWN0ZXJzKCkpLCBsb2NhbGl6YXRpb24ubGVuZ3RoKCkpKTsKLSAgICAgICAgV0tTZXRE
ZWZhdWx0TG9jYWxpemF0aW9uKGNmTG9jYWxpemF0aW9uLmdldCgpKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZG9QcmVJbml0aWFsaXphdGlvbldvcmsoKQorICAgIHsKKyAgICAgICAgLy8gUmVtb3ZlIHRo
ZSBXZWJQcm9jZXNzIHNoaW0gZnJvbSB0aGUgRFlMRF9JTlNFUlRfTElCUkFSSUVTIGVudmlyb25t
ZW50IHZhcmlhYmxlIHNvIGFueSBwcm9jZXNzZXMgc3Bhd25lZCBieQorICAgICAgICAvLyB0aGUg
V2ViUHJvY2VzcyBkb24ndCB0cnkgdG8gaW5zZXJ0IHRoZSBzaGltIGFuZCBjcmFzaC4KKyAgICAg
ICAgRW52aXJvbm1lbnRVdGlsaXRpZXM6OnN0cmlwVmFsdWVzRW5kaW5nV2l0aFN0cmluZygiRFlM
RF9JTlNFUlRfTElCUkFSSUVTIiwgIi9XZWJQcm9jZXNzU2hpbS5keWxpYiIpOwogICAgIH0KIAot
ICAgIFtwb29sIGRyYWluXTsKLQotI2lmICFTSE9XX0NSQVNIX1JFUE9SVEVSCi0gICAgLy8gSW5z
dGFsbHMgc2lnbmFsIGhhbmRsZXJzIHRoYXQgZXhpdCBvbiBhIGNyYXNoIHNvIHRoYXQgQ3Jhc2hS
ZXBvcnRlciBkb2VzIG5vdCBzaG93IHVwLgotICAgIHNpZ25hbChTSUdJTEwsIF9leGl0KTsKLSAg
ICBzaWduYWwoU0lHRlBFLCBfZXhpdCk7Ci0gICAgc2lnbmFsKFNJR0JVUywgX2V4aXQpOwotICAg
IHNpZ25hbChTSUdTRUdWLCBfZXhpdCk7Ci0jZW5kaWYKLQotI2lmIFVTRShBUFBLSVQpCi0gICAg
IC8vIEluaXRpYWxpemUgQXBwS2l0LgotICAgIFtOU0FwcGxpY2F0aW9uIHNoYXJlZEFwcGxpY2F0
aW9uXTsKLQotICAgIC8vIEluc3RhbGxzIGF1dG9yZWxlYXNlIHBvb2xzIG9uIHRoZSBjdXJyZW50
IENGUnVuTG9vcCB3aGljaCBwcmV2ZW50cyBtZW1vcnkgZnJvbSBhY2N1bXVsYXRpbmcgYmV0d2Vl
biB1c2VyIGV2ZW50cy4KLSAgICAvLyBGSVhNRTogUmVtb3ZlIHdoZW4gPHJkYXI6Ly9wcm9ibGVt
Lzg5Mjk0MjY+IGlzIGZpeGVkLgotICAgIFtbTlNBcHBsaWNhdGlvbiBzaGFyZWRBcHBsaWNhdGlv
bl0gX2luc3RhbGxBdXRvcmVsZWFzZVBvb2xzT25DdXJyZW50VGhyZWFkSWZOZWNlc3NhcnldOwot
I2VuZGlmCi0KLSAgICBAYXV0b3JlbGVhc2Vwb29sIHsKLSAgICAgICAgSW5pdGlhbGl6ZVdlYktp
dDIoKTsKLQotICAgICAgICBDaGlsZFByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMgcGFy
YW1ldGVyczsKLSAgICAgICAgcGFyYW1ldGVycy51aVByb2Nlc3NOYW1lID0gY29tbWFuZExpbmVb
InVpLXByb2Nlc3MtbmFtZSJdOwotICAgICAgICBwYXJhbWV0ZXJzLmNsaWVudElkZW50aWZpZXIg
PSBjbGllbnRJZGVudGlmaWVyOwotICAgICAgICBwYXJhbWV0ZXJzLmNvbm5lY3Rpb25JZGVudGlm
aWVyID0gc2VydmVyUG9ydDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0Q29ubmVjdGlvbklkZW50aWZp
ZXIoQ29yZUlQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKKyAgICB7Cisg
ICAgICAgIFN0cmluZyBzZXJ2aWNlTmFtZSA9IG1fY29tbWFuZExpbmVbInNlcnZpY2VuYW1lIl07
CisgICAgICAgIFN0cmluZyBjbGllbnRFeGVjdXRhYmxlID0gbV9jb21tYW5kTGluZVsiY2xpZW50
LWV4ZWN1dGFibGUiXTsKKyAgICAgICAgaWYgKHNlcnZpY2VOYW1lLmlzRW1wdHkoKSAmJiBjbGll
bnRFeGVjdXRhYmxlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICBtYWNoX3BvcnRfdCBzZXJ2ZXJQb3J0OworICAgICAgICBpZiAoY2xpZW50RXhlY3V0YWJs
ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGtlcm5fcmV0dXJuX3Qga3IgPSBib290c3RyYXBf
bG9va191cChib290c3RyYXBfcG9ydCwgc2VydmljZU5hbWUudXRmOCgpLmRhdGEoKSwgJnNlcnZl
clBvcnQpOworICAgICAgICAgICAgaWYgKGtyKSB7CisgICAgICAgICAgICAgICAgV1RGTG9nQWx3
YXlzKCJib290c3RyYXBfbG9va191cCByZXN1bHQ6ICVzICgleClcbiIsIG1hY2hfZXJyb3Jfc3Ry
aW5nKGtyKSwga3IpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1hY2hfcG9ydF9uYW1lX3QgcHVibGlz
aGVkU2VydmljZTsKKyAgICAgICAgICAgIG1hY2hfcG9ydF9hbGxvY2F0ZShtYWNoX3Rhc2tfc2Vs
ZigpLCBNQUNIX1BPUlRfUklHSFRfUkVDRUlWRSwgJnB1Ymxpc2hlZFNlcnZpY2UpOworICAgICAg
ICAgICAgbWFjaF9wb3J0X2luc2VydF9yaWdodChtYWNoX3Rhc2tfc2VsZigpLCBwdWJsaXNoZWRT
ZXJ2aWNlLCBwdWJsaXNoZWRTZXJ2aWNlLCBNQUNIX01TR19UWVBFX01BS0VfU0VORCk7CisgICAg
ICAgICAgICAvLyBNYWtlIGl0IHBvc3NpYmxlIHRvIGxvb2sgdXAuCisgICAgICAgICAgICBzZXJ2
aWNlTmFtZSA9IFN0cmluZzo6Zm9ybWF0KCJjb20uYXBwbGUuV2ViS2l0LldlYlByb2Nlc3MtJWQi
LCBnZXRwaWQoKSk7CisgICAgICAgICAgICBpZiAoa2Vybl9yZXR1cm5fdCBrciA9IGJvb3RzdHJh
cF9yZWdpc3RlcjIoYm9vdHN0cmFwX3BvcnQsIGNvbnN0X2Nhc3Q8Y2hhcio+KHNlcnZpY2VOYW1l
LnV0ZjgoKS5kYXRhKCkpLCBwdWJsaXNoZWRTZXJ2aWNlLCAwKSkgeworICAgICAgICAgICAgICAg
IFdURkxvZ0Fsd2F5cygiRmFpbGVkIHRvIHJlZ2lzdGVyIHNlcnZpY2UgbmFtZSBcIiVzXCIuICVz
ICgleClcbiIsIHNlcnZpY2VOYW1lLnV0ZjgoKS5kYXRhKCksIG1hY2hfZXJyb3Jfc3RyaW5nKGty
KSwga3IpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgQ1N0cmluZyBjb21tYW5kID0gY2xpZW50RXhlY3V0YWJsZS51dGY4KCk7Cisg
ICAgICAgICAgICBjb25zdCBjaGFyKiBhcmdzW10gPSB7IGNvbW1hbmQuZGF0YSgpLCAwIH07CisK
KyAgICAgICAgICAgIEVudmlyb25tZW50VmFyaWFibGVzIGVudmlyb25tZW50VmFyaWFibGVzOwor
ICAgICAgICAgICAgZW52aXJvbm1lbnRWYXJpYWJsZXMuc2V0KEVudmlyb25tZW50VmFyaWFibGVz
OjpwcmVleGlzdGluZ1Byb2Nlc3NTZXJ2aWNlTmFtZUtleSgpLCBzZXJ2aWNlTmFtZS51dGY4KCku
ZGF0YSgpKTsKKyAgICAgICAgICAgIGVudmlyb25tZW50VmFyaWFibGVzLnNldChFbnZpcm9ubWVu
dFZhcmlhYmxlczo6cHJlZXhpc3RpbmdQcm9jZXNzVHlwZUtleSgpLCBtX2NvbW1hbmRMaW5lWyJ0
eXBlIl0udXRmOCgpLmRhdGEoKSk7CisKKyAgICAgICAgICAgIHBvc2l4X3NwYXduX2ZpbGVfYWN0
aW9uc190IGZpbGVBY3Rpb25zOworICAgICAgICAgICAgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25z
X2luaXQoJmZpbGVBY3Rpb25zKTsKKyAgICAgICAgICAgIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9u
c19hZGRpbmhlcml0X25wKCZmaWxlQWN0aW9ucywgU1RESU5fRklMRU5PKTsKKyAgICAgICAgICAg
IHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19hZGRpbmhlcml0X25wKCZmaWxlQWN0aW9ucywgU1RE
T1VUX0ZJTEVOTyk7CisgICAgICAgICAgICBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkaW5o
ZXJpdF9ucCgmZmlsZUFjdGlvbnMsIFNUREVSUl9GSUxFTk8pOworCisgICAgICAgICAgICBwb3Np
eF9zcGF3bmF0dHJfdCBhdHRyaWJ1dGVzOworICAgICAgICAgICAgcG9zaXhfc3Bhd25hdHRyX2lu
aXQoJmF0dHJpYnV0ZXMpOworICAgICAgICAgICAgcG9zaXhfc3Bhd25hdHRyX3NldGZsYWdzKCZh
dHRyaWJ1dGVzLCBQT1NJWF9TUEFXTl9DTE9FWEVDX0RFRkFVTFQgfCBQT1NJWF9TUEFXTl9TRVRQ
R1JPVVApOworCisgICAgICAgICAgICBpbnQgc3Bhd25SZXN1bHQgPSBwb3NpeF9zcGF3bigwLCBj
b21tYW5kLmRhdGEoKSwgJmZpbGVBY3Rpb25zLCAmYXR0cmlidXRlcywgY29uc3RfY2FzdDxjaGFy
Kio+KGFyZ3MpLCBlbnZpcm9ubWVudFZhcmlhYmxlcy5lbnZpcm9ubWVudFBvaW50ZXIoKSk7CisK
KyAgICAgICAgICAgIHBvc2l4X3NwYXduYXR0cl9kZXN0cm95KCZhdHRyaWJ1dGVzKTsKKyAgICAg
ICAgICAgIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19kZXN0cm95KCZmaWxlQWN0aW9ucyk7CisK
KyAgICAgICAgICAgIGlmIChzcGF3blJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgICAgIG1hY2hfbXNnX2VtcHR5X3Jjdl90IG1lc3NhZ2U7CisgICAgICAg
ICAgICBpZiAoa2Vybl9yZXR1cm5fdCBrciA9IG1hY2hfbXNnKCZtZXNzYWdlLmhlYWRlciwgTUFD
SF9SQ1ZfTVNHLCAwLCBzaXplb2YobWVzc2FnZSksIHB1Ymxpc2hlZFNlcnZpY2UsIE1BQ0hfTVNH
X1RJTUVPVVRfTk9ORSwgTUFDSF9QT1JUX05VTEwpKSB7CisgICAgICAgICAgICAgICAgV1RGTG9n
QWx3YXlzKCJGYWlsZWQgdG8gcmVjZWl2ZSBwb3J0IGZyb20gdGhlIFVJIHByb2Nlc3MuICVzICgl
eClcbiIsIG1hY2hfZXJyb3Jfc3RyaW5nKGtyKSwga3IpOworICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbWFjaF9wb3J0X21vZF9yZWZz
KG1hY2hfdGFza19zZWxmKCksIHB1Ymxpc2hlZFNlcnZpY2UsIE1BQ0hfUE9SVF9SSUdIVF9SRUNF
SVZFLCAtMSk7CisgICAgICAgICAgICBzZXJ2ZXJQb3J0ID0gbWVzc2FnZS5oZWFkZXIubXNnaF9y
ZW1vdGVfcG9ydDsKKyAgICAgICAgICAgIG1hY2hfcG9ydF90eXBlX3QgcG9ydFR5cGU7CisgICAg
ICAgICAgICBrZXJuX3JldHVybl90IGtyID0gbWFjaF9wb3J0X3R5cGUobWFjaF90YXNrX3NlbGYo
KSwgc2VydmVyUG9ydCwgJnBvcnRUeXBlKTsKKyAgICAgICAgICAgIGlmIChrciB8fCAhKHBvcnRU
eXBlICYgTUFDSF9QT1JUX1RZUEVfU0VORCkpIHsKKyAgICAgICAgICAgICAgICBXVEZMb2dBbHdh
eXMoIkZhaWxlZCB0byBvYnRhaW4gc2VuZCByaWdodCBmb3IgcG9ydCByZWNlaXZlZCBmcm9tIHRo
ZSBVSSBwcm9jZXNzLlxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgfQorICAgICAgICB9CiAKLSAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuaW5pdGlh
bGl6ZShwYXJhbWV0ZXJzKTsKKyAgICAgICAgaWRlbnRpZmllciA9IHNlcnZlclBvcnQ7CisgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIFJ1bkxvb3A6OnJ1bigpOworICAgIHZpcnR1
YWwgYm9vbCBnZXRDbGllbnRJZGVudGlmaWVyKFN0cmluZyYgY2xpZW50SWRlbnRpZmllcikKKyAg
ICB7CisgICAgICAgIFN0cmluZyBjbGllbnRFeGVjdXRhYmxlID0gbV9jb21tYW5kTGluZVsiY2xp
ZW50LWV4ZWN1dGFibGUiXTsKKworICAgICAgICBpZiAoY2xpZW50RXhlY3V0YWJsZS5pc0VtcHR5
KCkpCisgICAgICAgICAgICBjbGllbnRJZGVudGlmaWVyID0gbV9jb21tYW5kTGluZVsiY2xpZW50
LWlkZW50aWZpZXIiXTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBSZXRhaW5QdHI8TlNV
Ukw+IGNsaWVudEV4ZWN1dGFibGVVUkwgPSBhZG9wdE5TKFtbTlNVUkwgYWxsb2NdIGluaXRGaWxl
VVJMV2l0aFBhdGg6bnNTdHJpbmdGcm9tV2ViQ29yZVN0cmluZyhjbGllbnRFeGVjdXRhYmxlKV0p
OworICAgICAgICAgICAgUmV0YWluUHRyPENGVVJMUmVmPiBjbGllbnRCdW5kbGVVUkwgPSBhZG9w
dENGKFdLQ29weUJ1bmRsZVVSTEZvckV4ZWN1dGFibGVVUkwoKENGVVJMUmVmKWNsaWVudEV4ZWN1
dGFibGVVUkwuZ2V0KCkpKTsKKyAgICAgICAgICAgIFJldGFpblB0cjxOU0J1bmRsZT4gY2xpZW50
QnVuZGxlID0gYWRvcHROUyhbW05TQnVuZGxlIGFsbG9jXSBpbml0V2l0aFVSTDooTlNVUkwgKilj
bGllbnRCdW5kbGVVUkwuZ2V0KCldKTsKKyAgICAgICAgICAgIGNsaWVudElkZW50aWZpZXIgPSBb
Y2xpZW50QnVuZGxlLmdldCgpIGJ1bmRsZUlkZW50aWZpZXJdOworICAgICAgICB9CiAKLSAgICAv
LyBGSVhNRTogRG8gbW9yZSBjbGVhbnVwIGhlcmUuCisgICAgICAgIGlmIChjbGllbnRJZGVudGlm
aWVyLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorfTsKIAotICAgIHJldHVybiAwOworaW50IFdlYlByb2Nlc3NNYWluKGNv
bnN0IENvbW1hbmRMaW5lJiBjb21tYW5kTGluZSkKK3sKKyAgICByZXR1cm4gQ2hpbGRQcm9jZXNz
TWFpbjxXZWJQcm9jZXNzLCBXZWJQcm9jZXNzTWFpbkRlbGVnYXRlPihjb21tYW5kTGluZSk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>
<flag name="review"
          id="199083"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>