<?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>75789</bug_id>
          
          <creation_ts>2012-01-07 22:53:54 -0800</creation_ts>
          <short_desc>defineOwnProperty not implemented for Array objects</short_desc>
          <delta_ts>2012-01-10 11:57:25 -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>JavaScriptCore</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="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>ggaren</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>531719</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-01-07 22:53:54 -0800</bug_when>
    <thetext>See ES5.1 15.4.5.1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531720</commentid>
    <comment_count>1</comment_count>
      <attachid>121567</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-01-07 22:54:43 -0800</bug_when>
    <thetext>Created attachment 121567
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532380</commentid>
    <comment_count>2</comment_count>
      <attachid>121704</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-01-09 11:45:04 -0800</bug_when>
    <thetext>Created attachment 121704
Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532392</commentid>
    <comment_count>3</comment_count>
      <attachid>121704</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-01-09 11:50:44 -0800</bug_when>
    <thetext>Comment on attachment 121704
Fix

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

&gt; Source/JavaScriptCore/runtime/JSArray.cpp:405
&gt; +        // FIXME: this call to attributes will make absent attributes 

Ooops, this comment is incomplete. The code is safe, put a little conservative in the case of reconfiguring existing properties.
I think the call to attributes will pessimistically assume that if attributes are missing then they&apos;ll default to false – however if the property currently exists missing attributes will override from their current &apos;true&apos; state (i.e. defineOwnProperty could be used to set a value without needing to entering &apos;SparseMode&apos;).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532393</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-09 11:51:03 -0800</bug_when>
    <thetext>Attachment 121704 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/fast...&quot; exit_code: 1

Source/JavaScriptCore/runtime/JSArray.cpp:219:  Missing space after ,  [whitespace/comma] [3]
Source/JavaScriptCore/runtime/JSArray.cpp:419:  Missing space after ,  [whitespace/comma] [3]
Source/JavaScriptCore/runtime/JSArray.cpp:433:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/runtime/JSArray.cpp:599:  Should have a space between // and comment  [whitespace/comments] [4]
Source/JavaScriptCore/ChangeLog:21:  Line contains tab character.  [whitespace/tab] [5]
Source/JavaScriptCore/ChangeLog:23:  Line contains tab character.  [whitespace/tab] [5]
Source/JavaScriptCore/ChangeLog:25:  Line contains tab character.  [whitespace/tab] [5]
Source/JavaScriptCore/ChangeLog:27:  Line contains tab character.  [whitespace/tab] [5]
Source/JavaScriptCore/ChangeLog:29:  Line contains tab character.  [whitespace/tab] [5]
Source/JavaScriptCore/ChangeLog:31:  Line contains tab character.  [whitespace/tab] [5]
Source/JavaScriptCore/ChangeLog:33:  Line contains tab character.  [whitespace/tab] [5]
Source/JavaScriptCore/ChangeLog:35:  Line contains tab character.  [whitespace/tab] [5]
Source/JavaScriptCore/ChangeLog:37:  Line contains tab character.  [whitespace/tab] [5]
Source/JavaScriptCore/ChangeLog:41:  Line contains tab character.  [whitespace/tab] [5]
Source/JavaScriptCore/ChangeLog:43:  Line contains tab character.  [whitespace/tab] [5]
Source/JavaScriptCore/ChangeLog:45:  Line contains tab character.  [whitespace/tab] [5]
Source/JavaScriptCore/ChangeLog:47:  Line contains tab character.  [whitespace/tab] [5]
Source/JavaScriptCore/ChangeLog:49:  Line contains tab character.  [whitespace/tab] [5]
Source/JavaScriptCore/ChangeLog:51:  Line contains tab character.  [whitespace/tab] [5]
Source/JavaScriptCore/ChangeLog:53:  Line contains tab character.  [whitespace/tab] [5]
Source/JavaScriptCore/ChangeLog:55:  Line contains tab character.  [whitespace/tab] [5]
Source/JavaScriptCore/ChangeLog:57:  Line contains tab character.  [whitespace/tab] [5]
Source/JavaScriptCore/ChangeLog:59:  Line contains tab character.  [whitespace/tab] [5]
Source/JavaScriptCore/ChangeLog:61:  Line contains tab character.  [whitespace/tab] [5]
Source/JavaScriptCore/ChangeLog:63:  Line contains tab character.  [whitespace/tab] [5]
Source/JavaScriptCore/ChangeLog:65:  Line contains tab character.  [whitespace/tab] [5]
Source/JavaScriptCore/ChangeLog:67:  Line contains tab character.  [whitespace/tab] [5]
Source/JavaScriptCore/ChangeLog:70:  Line contains tab character.  [whitespace/tab] [5]
Source/JavaScriptCore/ChangeLog:72:  Line contains tab character.  [whitespace/tab] [5]
Source/JavaScriptCore/ChangeLog:74:  Line contains tab character.  [whitespace/tab] [5]
Source/JavaScriptCore/ChangeLog:76:  Line contains tab character.  [whitespace/tab] [5]
Source/JavaScriptCore/runtime/JSArray.h:86:  Missing space after ,  [whitespace/comma] [3]
Total errors found: 32 in 17 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>532412</commentid>
    <comment_count>5</comment_count>
      <attachid>121704</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-01-09 12:17:56 -0800</bug_when>
    <thetext>Comment on attachment 121704
Fix

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

&gt; Source/JavaScriptCore/JavaScriptCore.exp:5
&gt; +__ZN3JSC7JSArray17defineOwnPropertyEPNS_8JSObjectEPNS_9ExecStateERKNS_10IdentifierERNS_18PropertyDescriptorEb
&gt; +__ZN3JSC7JSArray9setLengthEjb
&gt;  _JSCheckScriptSyntax
&gt;  _JSClassCreate
&gt;  _JSClassRelease

Please sort this.

&gt; Source/JavaScriptCore/runtime/JSArray.cpp:261
&gt; +    JSValue value = WriteBarrier&lt;Unknown&gt;::get();

Can you add a typedef of WriteBarrier&lt;Unknown&gt; to Base to make this cleaner.

&gt; Source/JavaScriptCore/runtime/JSArray.h:81
&gt; +            m_flags = (Flags)(m_flags | LengthIsReadOnly);

This should be a static cast.

&gt; Source/JavaScriptCore/runtime/PropertyDescriptor.h:70
&gt; +        unsigned attributesOverridingCurrent(const PropertyDescriptor&amp; current) const;
&gt;      private:

Please put a newline after this function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532428</commentid>
    <comment_count>6</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-01-09 12:32:57 -0800</bug_when>
    <thetext>I just threw up a little bit in my mouth.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532499</commentid>
    <comment_count>7</comment_count>
      <attachid>121704</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-09 13:44:25 -0800</bug_when>
    <thetext>Comment on attachment 121704
Fix

Attachment 121704 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11166645

New failing tests:
fast/js/array-defineOwnProperty.html
fast/js/mozilla/strict/15.4.4.6.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532506</commentid>
    <comment_count>8</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-01-09 13:57:16 -0800</bug_when>
    <thetext>Fixed in r104488</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533253</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-01-10 11:46:41 -0800</bug_when>
    <thetext>It seems that this patch broke Windows build:
http://build.webkit.org/builders/Windows%20Release%20%28Build%29/builds/25604
http://build.webkit.org/builders/Windows%20Release%20%28Build%29/builds/25605

Regression window: http://trac.webkit.org/log/?rev=104490&amp;stop_rev=104486</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533273</commentid>
    <comment_count>10</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-01-10 11:57:25 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; It seems that this patch broke Windows build:
&gt; http://build.webkit.org/builders/Windows%20Release%20%28Build%29/builds/25604
&gt; http://build.webkit.org/builders/Windows%20Release%20%28Build%29/builds/25605
&gt; 
&gt; Regression window: http://trac.webkit.org/log/?rev=104490&amp;stop_rev=104486

Ooops! - sorry! - build fixed in r104611.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121567</attachid>
            <date>2012-01-07 22:54:43 -0800</date>
            <delta_ts>2012-01-09 11:45:04 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>75789.1.patch</filename>
            <type>text/plain</type>
            <size>35880</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkocmV2aXNpb24g
MTA0Mzg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkod29y
a2luZyBjb3B5KQpAQCAtMjg1LDcgKzI4NSw2IEBAIF9fWk4zSlNDN0pTQXJyYXkyNWdldE93blBy
b3BlcnR5U2xvdEJ5SW4KIF9fWk4zSlNDN0pTQXJyYXkzMHRyeUZpbmlzaENyZWF0aW9uVW5pbml0
aWFsaXplZEVSTlNfMTJKU0dsb2JhbERhdGFFagogX19aTjNKU0M3SlNBcnJheTZzX2luZm9FCiBf
X1pOM0pTQzdKU0FycmF5N2Rlc3Ryb3lFUE5TXzZKU0NlbGxFCi1fX1pOM0pTQzdKU0FycmF5OXNl
dExlbmd0aEVqCiBfX1pOM0pTQzdKU0FycmF5QzFFUk5TXzEySlNHbG9iYWxEYXRhRVBOU185U3Ry
dWN0dXJlRQogX19aTjNKU0M3SlNBcnJheUMyRVJOU18xMkpTR2xvYmFsRGF0YUVQTlNfOVN0cnVj
dHVyZUUKIF9fWk4zSlNDN0pTQXJyYXlEMkV2CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ29uZmlndXJhdGlvbnMvQmFzZS54Y2NvbmZpZwkocmV2aXNpb24gMTA0Mzg4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NvbmZpZ3VyYXRpb25zL0Jhc2UueGNjb25maWcJKHdv
cmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKICNpbmNsdWRlICJDb21waWxlclZlcnNpb24u
eGNjb25maWciCiAKIENPTVBJTEVSX1NQRUNJRklDX1dBUk5JTkdfQ0ZMQUdTID0gJChDT01QSUxF
Ul9TUEVDSUZJQ19XQVJOSU5HX0NGTEFHU18kKFRBUkdFVF9HQ0NfVkVSU0lPTikpOwotQ09NUElM
RVJfU1BFQ0lGSUNfV0FSTklOR19DRkxBR1NfTExWTV9DT01QSUxFUiA9IC1XZ2xvYmFsLWNvbnN0
cnVjdG9ycyAtV2V4aXQtdGltZS1kZXN0cnVjdG9yczsKK0NPTVBJTEVSX1NQRUNJRklDX1dBUk5J
TkdfQ0ZMQUdTX0xMVk1fQ09NUElMRVIgPSAtV2dsb2JhbC1jb25zdHJ1Y3RvcnM7CiAKIENMQU5H
X1dBUk5fQ1hYMFhfRVhURU5TSU9OUyA9IE5POwogREVCVUdfSU5GT1JNQVRJT05fRk9STUFUID0g
ZHdhcmY7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5j
cHAJKHJldmlzaW9uIDEwNDM4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMSw5ICs0MTEsOSBAQCBFbmNvZGVkSlNW
YWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFyCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc051bWJlcihhcnJheS0+bGVuZ3RoKCkpKTsKIH0KICAgICAgICAgCi1FbmNvZGVkSlNWYWx1
ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UG9wKEV4ZWNTdGF0ZSosIEpTQXJyYXkqIGFy
cmF5KQorRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVBvcChFeGVj
U3RhdGUqIGV4ZWMsIEpTQXJyYXkqIGFycmF5KQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoYXJyYXktPnBvcCgpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFycmF5LT5wb3Ao
ZXhlYykpOwogfQogICAgICAgICAKIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlk
U3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBKU0Nl
bGwqIGJhc2UsIElkZW50aWZpZXIqIHByb3BlcnR5TmFtZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDEwNDM4
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzg5LDcgKzM4OSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgYXJyYXlQcm90b0YKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlz
VmFsdWUoKTsKIAogICAgIGlmIChpc0pTQXJyYXkodGhpc1ZhbHVlKSkKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShhc0FycmF5KHRoaXNWYWx1ZSktPnBvcCgpKTsKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShhc0FycmF5KHRoaXNWYWx1ZSktPnBvcChleGVjKSk7CiAKICAg
ICBKU09iamVjdCogdGhpc09iaiA9IHRoaXNWYWx1ZS50b09iamVjdChleGVjKTsKICAgICB1bnNp
Z25lZCBsZW5ndGggPSB0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxl
bmd0aCkudG9VSW50MzIoZXhlYyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMTA0Mzg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNp
bmNsdWRlICJDYWNoZWRDYWxsLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFeGVj
dXRhYmxlLmgiCisjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlO
YW1lQXJyYXkuaCIKICNpbmNsdWRlIDx3dGYvQVZMVHJlZS5oPgogI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CkBAIC0yMTIsMjQgKzIxMyw4OSBAQCB2b2lkIEpTQXJyYXk6OmRlc3Ryb3koSlND
ZWxsKiBjZWxsKQogICAgIGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCktPkpTQXJyYXk6On5KU0FycmF5
KCk7CiB9CiAKLVNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIFNwYXJzZUFycmF5VmFsdWVN
YXA6OmZpbmQodW5zaWduZWQgaSkKK2lubGluZSBzdGQ6OnBhaXI8U3BhcnNlQXJyYXlWYWx1ZU1h
cDo6aXRlcmF0b3IsYm9vbD4gU3BhcnNlQXJyYXlWYWx1ZU1hcDo6YWRkKEpTQXJyYXkqIGFycmF5
LCB1bnNpZ25lZCBpKQogewotICAgIHJldHVybiBtX21hcC5maW5kKGkpOworICAgIFNwYXJzZUFy
cmF5RW50cnkgZW50cnk7CisgICAgc3RkOjpwYWlyPGl0ZXJhdG9yLGJvb2w+IHJlc3VsdCA9IG1f
bWFwLmFkZChpLCBlbnRyeSk7CisgICAgc2l6ZV90IGNhcGFjaXR5ID0gbV9tYXAuY2FwYWNpdHko
KTsKKyAgICBpZiAoY2FwYWNpdHkgIT0gbV9yZXBvcnRlZENhcGFjaXR5KSB7CisgICAgICAgIEhl
YXA6OmhlYXAoYXJyYXkpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3QoKGNhcGFjaXR5IC0gbV9yZXBv
cnRlZENhcGFjaXR5KSAqIChzaXplb2YodW5zaWduZWQpICsgc2l6ZW9mKFdyaXRlQmFycmllcjxV
bmtub3duPikpKTsKKyAgICAgICAgbV9yZXBvcnRlZENhcGFjaXR5ID0gY2FwYWNpdHk7CisgICAg
fQorICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWlubGluZSB2b2lkIFNwYXJzZUFycmF5VmFsdWVN
YXA6OnB1dChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQXJyYXkqIGFycmF5LCB1bnNpZ25l
ZCBpLCBKU1ZhbHVlIHZhbHVlKQoraW5saW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6cHV0
KEV4ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXksIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFs
dWUpCiB7Ci0gICAgU3BhcnNlQXJyYXlFbnRyeSB0ZW1wOwotICAgIHBhaXI8TWFwOjppdGVyYXRv
ciwgYm9vbD4gcmVzdWx0ID0gbV9tYXAuYWRkKGksIHRlbXApOwotICAgIHJlc3VsdC5maXJzdC0+
c2Vjb25kLnNldChnbG9iYWxEYXRhLCBhcnJheSwgdmFsdWUpOwotICAgIGlmICghcmVzdWx0LnNl
Y29uZCkgLy8gcHJlLWV4aXN0aW5nIGVudHJ5CisgICAgU3BhcnNlQXJyYXlFbnRyeSYgZW50cnkg
PSBhZGQoYXJyYXksIGkpLmZpcnN0LT5zZWNvbmQ7CisKKyAgICBpZiAoZW50cnkuYXR0cmlidXRl
cyAmIFJlYWRPbmx5KSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVS
ZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAg
ICBzaXplX3QgY2FwYWNpdHkgPSBtX21hcC5jYXBhY2l0eSgpOwotICAgIGlmIChjYXBhY2l0eSAh
PSBtX3JlcG9ydGVkQ2FwYWNpdHkpIHsKLSAgICAgICAgSGVhcDo6aGVhcChhcnJheSktPnJlcG9y
dEV4dHJhTWVtb3J5Q29zdCgoY2FwYWNpdHkgLSBtX3JlcG9ydGVkQ2FwYWNpdHkpICogKHNpemVv
Zih1bnNpZ25lZCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSkpOwotICAgICAgICBt
X3JlcG9ydGVkQ2FwYWNpdHkgPSBjYXBhY2l0eTsKKyAgICBpZiAoIShlbnRyeS5hdHRyaWJ1dGVz
ICYgKEdldHRlciB8IFNldHRlcikpKSB7CisgICAgICAgIGVudHJ5LnNldChleGVjLT5nbG9iYWxE
YXRhKCksIGFycmF5LCB2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBKU1Zh
bHVlIGFjY2Vzc29yID0gZW50cnkuV3JpdGVCYXJyaWVyPFVua25vd24+OjpnZXQoKTsKKyAgICBB
U1NFUlQoYWNjZXNzb3IuaXNHZXR0ZXJTZXR0ZXIoKSk7CisgICAgSlNPYmplY3QqIHNldHRlciA9
IGFzR2V0dGVyU2V0dGVyKGFjY2Vzc29yKS0+c2V0dGVyKCk7CisgICAgCisgICAgaWYgKCFzZXR0
ZXIpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgInNldHRpbmcgYSBwcm9wZXJ0eSB0
aGF0IGhhcyBvbmx5IGEgZ2V0dGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBD
YWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IHNldHRlci0+bWV0aG9k
VGFibGUoKS0+Z2V0Q2FsbERhdGEoc2V0dGVyLCBjYWxsRGF0YSk7CisgICAgTWFya2VkQXJndW1l
bnRCdWZmZXIgYXJnczsKKyAgICBhcmdzLmFwcGVuZCh2YWx1ZSk7CisgICAgY2FsbChleGVjLCBz
ZXR0ZXIsIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXJyYXksIGFyZ3MpOworfQorCitpbmxpbmUgdm9p
ZCBTcGFyc2VBcnJheUVudHJ5OjpnZXQoUHJvcGVydHlTbG90JiBzbG90KSBjb25zdAoreworICAg
IEpTVmFsdWUgdmFsdWUgPSBXcml0ZUJhcnJpZXI8VW5rbm93bj46OmdldCgpOworICAgIGlmIChM
SUtFTFkoIXZhbHVlLmlzR2V0dGVyU2V0dGVyKCkpKSB7CisgICAgICAgIHNsb3Quc2V0VmFsdWUo
dmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSlNPYmplY3QqIGdldHRlciA9
IGFzR2V0dGVyU2V0dGVyKHZhbHVlKS0+Z2V0dGVyKCk7CisgICAgaWYgKCFnZXR0ZXIpIHsKKyAg
ICAgICAgc2xvdC5zZXRVbmRlZmluZWQoKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAg
IHNsb3Quc2V0R2V0dGVyU2xvdChnZXR0ZXIpOworfQorCitpbmxpbmUgdm9pZCBTcGFyc2VBcnJh
eUVudHJ5OjpnZXQoUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKSBjb25zdAoreworICAg
IGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihXcml0ZUJhcnJpZXI8VW5rbm93bj46OmdldCgpLCBh
dHRyaWJ1dGVzKTsKK30KKworaW5saW5lIEpTVmFsdWUgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KEV4
ZWNTdGF0ZSogZXhlYywgSlNBcnJheSogYXJyYXkpIGNvbnN0Cit7CisgICAgSlNWYWx1ZSByZXN1
bHQgPSBXcml0ZUJhcnJpZXI8VW5rbm93bj46OmdldCgpOworICAgIGlmIChMSUtFTFkoIXJlc3Vs
dC5pc0dldHRlclNldHRlcigpKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIEpTT2Jq
ZWN0KiBnZXR0ZXIgPSBhc0dldHRlclNldHRlcihyZXN1bHQpLT5nZXR0ZXIoKTsKKyAgICBpZiAo
IWdldHRlcikKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBDYWxsRGF0YSBj
YWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldHRlci0+bWV0aG9kVGFibGUoKS0+
Z2V0Q2FsbERhdGEoZ2V0dGVyLCBjYWxsRGF0YSk7CisgICAgcmV0dXJuIGNhbGwoZXhlYywgZ2V0
dGVyLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFycmF5LCBleGVjLT5lbXB0eUxpc3QoKSk7Cit9CisK
K2lubGluZSBKU1ZhbHVlIFNwYXJzZUFycmF5RW50cnk6OmdldE5vblNwYXJzZU1vZGUoKSBjb25z
dAoreworICAgIEFTU0VSVCghYXR0cmlidXRlcyk7CisgICAgcmV0dXJuIFdyaXRlQmFycmllcjxV
bmtub3duPjo6Z2V0KCk7CiB9CiAKIGlubGluZSB2b2lkIFNwYXJzZUFycmF5VmFsdWVNYXA6OnZp
c2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC0yMzksNiArMzA1LDI5MiBAQCBp
bmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjp2aXNpdENoCiAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kKCZpdC0+c2Vjb25kKTsKIH0KIAordm9pZCBKU0FycmF5OjplbnRlclNwYXJzZU1vZGUo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9
IG1fc3RvcmFnZTsKKyAgICBTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3Nw
YXJzZVZhbHVlTWFwOworCisgICAgaWYgKCFtYXApCisgICAgICAgIG1hcCA9IHN0b3JhZ2UtPm1f
c3BhcnNlVmFsdWVNYXAgPSBuZXcgU3BhcnNlQXJyYXlWYWx1ZU1hcDsKKworICAgIGlmIChtYXAt
PnNwYXJzZU1vZGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWFwLT5zZXRTcGFyc2VNb2Rl
KCk7CisKKyAgICB1bnNpZ25lZCB1c2VkVmVjdG9yTGVuZ3RoID0gbWluKHN0b3JhZ2UtPm1fbGVu
Z3RoLCBtX3ZlY3Rvckxlbmd0aCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVzZWRW
ZWN0b3JMZW5ndGg7ICsraSkgeworICAgICAgICBKU1ZhbHVlIHZhbHVlID0gc3RvcmFnZS0+bV92
ZWN0b3JbaV0uZ2V0KCk7CisgICAgICAgIC8vIFRoaXMgd2lsbCBhbHdheXMgYmUgYSBuZXcgZW50
cnkgaW4gdGhlIG1hcCwgc28gbm8gbmVlZCB0byBjaGVjayB3ZSBjYW4gd3JpdGUsCisgICAgICAg
IC8vIGFuZCBhdHRyaWJ1dGVzIGFyZSBkZWZhdWx0IHNvIG5vIG5lZWQgdG8gc2V0IHRoZW0uCisg
ICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAgIG1hcC0+YWRkKHRoaXMsIGkpLmZpcnN0LT5z
ZWNvbmQuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHZhbHVlKTsKKyAgICB9CisKKyAgICBBcnJheVN0
b3JhZ2UqIG5ld1N0b3JhZ2UgPSBzdGF0aWNfY2FzdDxBcnJheVN0b3JhZ2UqPihmYXN0TWFsbG9j
KHN0b3JhZ2VTaXplKDApKSk7CisgICAgbWVtY3B5KG5ld1N0b3JhZ2UsIG1fc3RvcmFnZSwgc3Rv
cmFnZVNpemUoMCkpOworICAgIG5ld1N0b3JhZ2UtPm1fYWxsb2NCYXNlID0gbmV3U3RvcmFnZTsK
KyAgICBmYXN0RnJlZShtX3N0b3JhZ2UpOworICAgIG1fc3RvcmFnZSA9IG5ld1N0b3JhZ2U7Cisg
ICAgbV9pbmRleEJpYXMgPSAwOworICAgIG1fdmVjdG9yTGVuZ3RoID0gMDsKK30KKworYm9vbCBK
U0FycmF5OjpwdXREZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgU3BhcnNlQXJyYXlFbnRyeSog
ZW50cnlJbk1hcCwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBQcm9wZXJ0eURlc2Ny
aXB0b3ImIG9sZERlc2NyaXB0b3IpCit7CisgICAgaWYgKGRlc2NyaXB0b3IuaXNHZW5lcmljRGVz
Y3JpcHRvcigpKSB7CisgICAgICAgIGVudHJ5SW5NYXAtPmF0dHJpYnV0ZXMgPSBkZXNjcmlwdG9y
LmF0dHJpYnV0ZXNXaXRoT3ZlcnJpZGUob2xkRGVzY3JpcHRvcik7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIGlmIChkZXNjcmlwdG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgewor
ICAgICAgICBlbnRyeUluTWFwLT5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCBkZXNjcmlw
dG9yLnZhbHVlKCkpOworICAgICAgICBlbnRyeUluTWFwLT5hdHRyaWJ1dGVzID0gZGVzY3JpcHRv
ci5hdHRyaWJ1dGVzV2l0aE92ZXJyaWRlKG9sZERlc2NyaXB0b3IpICYgfihHZXR0ZXIgfCBTZXR0
ZXIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBHZXR0ZXJTZXR0ZXIqIGFj
Y2Vzc29yID0gR2V0dGVyU2V0dGVyOjpjcmVhdGUoZXhlYyk7CisgICAgaWYgKGRlc2NyaXB0b3Iu
Z2V0dGVyKCkpCisgICAgICAgIGFjY2Vzc29yLT5zZXRHZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBhc09iamVjdChvbGREZXNjcmlwdG9yLmdldHRlcigpKSk7CisgICAgaWYgKGRlc2NyaXB0b3Iu
c2V0dGVyKCkpCisgICAgICAgIGFjY2Vzc29yLT5zZXRTZXR0ZXIoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBhc09iamVjdChvbGREZXNjcmlwdG9yLnNldHRlcigpKSk7CisgICAgZW50cnlJbk1hcC0+c2V0
KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgYWNjZXNzb3IpOworICAgIGVudHJ5SW5NYXAtPmF0
dHJpYnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNXaXRoT3ZlcnJpZGUob2xkRGVzY3JpcHRv
cikgJiB+RG9udERlbGV0ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgc2Ft
ZVZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBhLCBKU1ZhbHVlIGIpCit7CisgICAgaWYg
KGEuaXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuIGIuaXNOdW1iZXIoKSAmJiBiaXR3aXNlX2Nh
c3Q8dWludDY0X3Q+KGEuYXNOdW1iZXIoKSkgPT0gYml0d2lzZV9jYXN0PHVpbnQ2NF90PihiLmFz
TnVtYmVyKCkpOworICAgIHJldHVybiBKU1ZhbHVlOjpzdHJpY3RFcXVhbChleGVjLCBhLCBiKTsK
K30KKworc3RhdGljIGJvb2wgcmVqZWN0KEV4ZWNTdGF0ZSogZXhlYywgYm9vbCB0aHJvd0V4Y2Vw
dGlvbiwgY29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBpZiAodGhyb3dFeGNlcHRpb24pCisg
ICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIG1lc3NhZ2UpOworICAgIHJldHVybiBmYWxzZTsK
K30KKworLy8gRGVmaW5lZCBpbiBFUzUuMSA4LjEyLjkKK2Jvb2wgSlNBcnJheTo6ZGVmaW5lT3du
TnVtZXJpY1Byb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5
RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKK3sKKyAgICBBU1NF
UlQoaW5kZXggIT0gMHhGRkZGRkZGRik7CisKKyAgICBpZiAoIWluU3BhcnNlTW9kZSgpKSB7Cisg
ICAgICAgIC8vIEZhc3QgY2FzZTogd2UncmUgcHV0dGluZyBhIHJlZ3VsYXIgcHJvcGVydHkgdG8g
YSByZWd1bGFyIGFycmF5CisgICAgICAgIGlmICghZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCkpIHsK
KyAgICAgICAgICAgIEFTU0VSVCghZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKTsK
KyAgICAgICAgICAgIHB1dEJ5SW5kZXgodGhpcywgZXhlYywgaW5kZXgsIGRlc2NyaXB0b3IudmFs
dWUoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGVu
dGVyU3BhcnNlTW9kZShleGVjLT5nbG9iYWxEYXRhKCkpOworICAgIH0KKworICAgIFNwYXJzZUFy
cmF5VmFsdWVNYXAqIG1hcCA9IG1fc3RvcmFnZS0+bV9zcGFyc2VWYWx1ZU1hcDsKKyAgICBBU1NF
UlQobWFwKTsKKworICAgIC8vIDEuIExldCBjdXJyZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGlu
ZyB0aGUgW1tHZXRPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggcHJvcGVy
dHkgbmFtZSBQLgorICAgIHN0ZDo6cGFpcjxTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvcixi
b29sPiByZXN1bHQgPSBtYXAtPmFkZCh0aGlzLCBpbmRleCk7CisgICAgU3BhcnNlQXJyYXlFbnRy
eSogZW50cnlJbk1hcCA9ICZyZXN1bHQuZmlyc3QtPnNlY29uZDsKKyAgICBQcm9wZXJ0eURlc2Ny
aXB0b3IgY3VycmVudDsKKworICAgIC8vIDIuIExldCBleHRlbnNpYmxlIGJlIHRoZSB2YWx1ZSBv
ZiB0aGUgW1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgTy4KKyAgICAvLyAzLiBJ
ZiBjdXJyZW50IGlzIHVuZGVmaW5lZCBhbmQgZXh0ZW5zaWJsZSBpcyBmYWxzZSwgdGhlbiBSZWpl
Y3QuCisgICAgLy8gNC4gSWYgY3VycmVudCBpcyB1bmRlZmluZWQgYW5kIGV4dGVuc2libGUgaXMg
dHJ1ZSwgdGhlbgorICAgIGlmIChyZXN1bHQuc2Vjb25kKSB7CisgICAgICAgIGlmICghaXNFeHRl
bnNpYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9u
LCAiQXR0ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4
dGVuc2libGUuIik7CisKKyAgICAgICAgLy8gNC5hLiBJZiBJc0dlbmVyaWNEZXNjcmlwdG9yKERl
c2MpIG9yIElzRGF0YURlc2NyaXB0b3IoRGVzYykgaXMgdHJ1ZSwgdGhlbiBjcmVhdGUgYW4gb3du
IGRhdGEgcHJvcGVydHkKKyAgICAgICAgLy8gbmFtZWQgUCBvZiAgb2JqZWN0IE8gd2hvc2UgW1tW
YWx1ZV1dLCBbW1dyaXRhYmxlXV0sIFtbRW51bWVyYWJsZV1dIGFuZCBbW0NvbmZpZ3VyYWJsZV1d
IGF0dHJpYnV0ZSB2YWx1ZXMKKyAgICAgICAgLy8gYXJlIGRlc2NyaWJlZCBieSBEZXNjLiAgSWYg
dGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIGlzIGFic2VudCwgdGhlIGF0
dHJpYnV0ZSBvZiB0aGUgbmV3bHkKKyAgICAgICAgLy8gY3JlYXRlZCBwcm9wZXJ0eSBpcyBzZXQg
dG8gaXRzIGRlZmF1bHQgdmFsdWUuCisgICAgICAgIC8vIDQuYi4gRWxzZSwgRGVzYyBtdXN0IGJl
IGFuIGFjY2Vzc29yIFByb3BlcnR5IERlc2NyaXB0b3Igc28sIGNyZWF0ZSBhbiBvd24gYWNjZXNz
b3IgcHJvcGVydHkgbmFtZWQgUCBvZgorICAgICAgICAvLyBvYmplY3QgTyB3aG9zZSBbW0dldF1d
LCBbW1NldF1dLCBbW0VudW1lcmFibGVdXSBhbmQgW1tDb25maWd1cmFibGVdXSBhdHRyaWJ1dGUg
dmFsdWVzIGFyZSBkZXNjcmliZWQgYnkKKyAgICAgICAgLy8gRGVzYy4gSWYgdGhlIHZhbHVlIG9m
IGFuIGF0dHJpYnV0ZSBmaWVsZCBvZiBEZXNjIGlzIGFic2VudCwgdGhlIGF0dHJpYnV0ZSBvZiB0
aGUgbmV3bHkgY3JlYXRlZCBwcm9wZXJ0eQorICAgICAgICAvLyBpcyBzZXQgdG8gaXRzIGRlZmF1
bHQgdmFsdWUuCisgICAgICAgIC8vIDQuYy4gUmV0dXJuIHRydWUuCisgICAgICAgIGlmICghcHV0
RGVzY3JpcHRvcihleGVjLCBlbnRyeUluTWFwLCBkZXNjcmlwdG9yLCBjdXJyZW50KSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGluZGV4ID49IG1fc3RvcmFnZS0+bV9s
ZW5ndGgpCisgICAgICAgICAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gaW5kZXggKyAxOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZW50cnlJbk1hcC0+Z2V0KGN1cnJlbnQpOwor
CisgICAgLy8gNS4gUmV0dXJuIHRydWUsIGlmIGV2ZXJ5IGZpZWxkIGluIERlc2MgaXMgYWJzZW50
LgorICAgIC8vIDYuIFJldHVybiB0cnVlLCBpZiBldmVyeSBmaWVsZCBpbiBEZXNjIGFsc28gb2Nj
dXJzIGluIGN1cnJlbnQgYW5kIHRoZSB2YWx1ZSBvZiBldmVyeSBmaWVsZCBpbiBEZXNjIGlzIHRo
ZSBzYW1lIHZhbHVlIGFzIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkIGluIGN1cnJlbnQgd2hlbiBj
b21wYXJlZCB1c2luZyB0aGUgU2FtZVZhbHVlIGFsZ29yaXRobSAoOS4xMikuCisgICAgaWYgKGRl
c2NyaXB0b3IuaXNFbXB0eSgpIHx8IGRlc2NyaXB0b3IuZXF1YWxUbyhleGVjLCBjdXJyZW50KSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyA3LiBJZiB0aGUgW1tDb25maWd1cmFibGVd
XSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlIHRoZW4KKyAgICBpZiAoIWN1cnJlbnQuY29uZmln
dXJhYmxlKCkpIHsKKyAgICAgICAgLy8gNy5hLiBSZWplY3QsIGlmIHRoZSBbW0NvbmZpZ3VyYWJs
ZV1dIGZpZWxkIG9mIERlc2MgaXMgdHJ1ZS4KKyAgICAgICAgaWYgKCFkZXNjcmlwdG9yLmNvbmZp
Z3VyYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyA3LmIuIFJl
amVjdCwgaWYgdGhlIFtbRW51bWVyYWJsZV1dIGZpZWxkIG9mIERlc2MgaXMgcHJlc2VudCBhbmQg
dGhlIFtbRW51bWVyYWJsZV1dIGZpZWxkcyBvZiBjdXJyZW50IGFuZCBEZXNjIGFyZSB0aGUgQm9v
bGVhbiBuZWdhdGlvbiBvZiBlYWNoIG90aGVyLgorICAgICAgICBpZiAoZGVzY3JpcHRvci5lbnVt
ZXJhYmxlUHJlc2VudCgpICYmIGN1cnJlbnQuZW51bWVyYWJsZSgpICE9IGRlc2NyaXB0b3IuZW51
bWVyYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIDgu
IElmIElzR2VuZXJpY0Rlc2NyaXB0b3IoRGVzYykgaXMgdHJ1ZSwgdGhlbiBubyBmdXJ0aGVyIHZh
bGlkYXRpb24gaXMgcmVxdWlyZWQuCisgICAgaWYgKCFkZXNjcmlwdG9yLmlzR2VuZXJpY0Rlc2Ny
aXB0b3IoKSkgeworICAgICAgICAvLyA5LiBFbHNlLCBpZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJl
bnQpIGFuZCBJc0RhdGFEZXNjcmlwdG9yKERlc2MpIGhhdmUgZGlmZmVyZW50IHJlc3VsdHMsIHRo
ZW4KKyAgICAgICAgaWYgKGN1cnJlbnQuaXNEYXRhRGVzY3JpcHRvcigpICE9IGRlc2NyaXB0b3Iu
aXNEYXRhRGVzY3JpcHRvcigpKSB7CisgICAgICAgICAgICAvLyA5LmEuIFJlamVjdCwgaWYgdGhl
IFtbQ29uZmlndXJhYmxlXV0gZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZS4KKyAgICAgICAgICAg
IGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAvLyA5LmIuIElmIElzRGF0YURlc2NyaXB0b3IoY3VycmVudCkgaXMg
dHJ1ZSwgdGhlbiBjb252ZXJ0IHRoZSBwcm9wZXJ0eSBuYW1lZCBQIG9mIG9iamVjdCBPIGZyb20g
YQorICAgICAgICAgICAgLy8gZGF0YSBwcm9wZXJ0eSB0byBhbiBhY2Nlc3NvciBwcm9wZXJ0eS4g
UHJlc2VydmUgdGhlIGV4aXN0aW5nIHZhbHVlcyBvZiB0aGUgY29udmVydGVkIHByb3BlcnR54oCY
cworICAgICAgICAgICAgLy8gW1tDb25maWd1cmFibGVdXSBhbmQgW1tFbnVtZXJhYmxlXV0gYXR0
cmlidXRlcyBhbmQgc2V0IHRoZSByZXN0IG9mIHRoZSBwcm9wZXJ0eeKAmHMgYXR0cmlidXRlcyB0
bworICAgICAgICAgICAgLy8gdGhlaXIgZGVmYXVsdCB2YWx1ZXMuCisgICAgICAgICAgICAvLyA5
LmMuIEVsc2UsIGNvbnZlcnQgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8gZnJvbSBh
biBhY2Nlc3NvciBwcm9wZXJ0eSB0byBhIGRhdGEgcHJvcGVydHkuCisgICAgICAgICAgICAvLyBQ
cmVzZXJ2ZSB0aGUgZXhpc3RpbmcgdmFsdWVzIG9mIHRoZSBjb252ZXJ0ZWQgcHJvcGVydHnigJhz
IFtbQ29uZmlndXJhYmxlXV0gYW5kIFtbRW51bWVyYWJsZV1dCisgICAgICAgICAgICAvLyBhdHRy
aWJ1dGVzIGFuZCBzZXQgdGhlIHJlc3Qgb2YgdGhlIHByb3BlcnR54oCYcyBhdHRyaWJ1dGVzIHRv
IHRoZWlyIGRlZmF1bHQgdmFsdWVzLgorICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnQuaXNEYXRh
RGVzY3JpcHRvcigpICYmIGRlc2NyaXB0b3IuaXNEYXRhRGVzY3JpcHRvcigpKSB7CisgICAgICAg
ICAgICAvLyAxMC4gRWxzZSwgaWYgSXNEYXRhRGVzY3JpcHRvcihjdXJyZW50KSBhbmQgSXNEYXRh
RGVzY3JpcHRvcihEZXNjKSBhcmUgYm90aCB0cnVlLCB0aGVuCisgICAgICAgICAgICAvLyAxMC5h
LiBJZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLCB0aGVu
CisgICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkgJiYgIWN1cnJlbnQud3Jp
dGFibGUoKSkgeworICAgICAgICAgICAgICAgIC8vIDEwLmEuaS4gUmVqZWN0LCBpZiB0aGUgW1tX
cml0YWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UgYW5kIHRoZSBbW1dyaXRhYmxlXV0g
ZmllbGQgb2YgRGVzYyBpcyB0cnVlLgorICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLndy
aXRhYmxlKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAvLyAxMC5hLmlpLiBJZiB0aGUgW1tXcml0YWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMg
ZmFsc2UsIHRoZW4KKyAgICAgICAgICAgICAgICAvLyAxMC5hLmlpLjEuIFJlamVjdCwgaWYgdGhl
IFtbVmFsdWVdXSBmaWVsZCBvZiBEZXNjIGlzIHByZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltb
VmFsdWVdXSwgY3VycmVudC5bW1ZhbHVlXV0pIGlzIGZhbHNlLgorICAgICAgICAgICAgICAgIGlm
IChkZXNjcmlwdG9yLnZhbHVlKCkgJiYgIXNhbWVWYWx1ZShleGVjLCBkZXNjcmlwdG9yLnZhbHVl
KCksIGN1cnJlbnQudmFsdWUoKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIDEwLmIuIGVsc2UsIHRoZSBbW0NvbmZpZ3Vy
YWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgdHJ1ZSwgc28gYW55IGNoYW5nZSBpcyBhY2NlcHRh
YmxlLgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gMTEuIEVsc2UsIElzQWNjZXNz
b3JEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0FjY2Vzc29yRGVzY3JpcHRvcihEZXNjKSBhcmUg
Ym90aCB0cnVlIHNvLCBpZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlz
IGZhbHNlLCB0aGVuCisgICAgICAgICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsK
KyAgICAgICAgICAgICAgICAvLyAxMS5pLiBSZWplY3QsIGlmIHRoZSBbW1NldF1dIGZpZWxkIG9m
IERlc2MgaXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tTZXRdXSwgY3VycmVudC5bW1Nl
dF1dKSBpcyBmYWxzZS4KKyAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVz
ZW50KCkgJiYgZGVzY3JpcHRvci5zZXR0ZXIoKSAhPSBjdXJyZW50LnNldHRlcigpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgLy8gMTEuaWkuIFJl
amVjdCwgaWYgdGhlIFtbR2V0XV0gZmllbGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCBTYW1lVmFs
dWUoRGVzYy5bW0dldF1dLCBjdXJyZW50LltbR2V0XV0pIGlzIGZhbHNlLgorICAgICAgICAgICAg
ICAgIGlmIChkZXNjcmlwdG9yLmdldHRlclByZXNlbnQoKSAmJiBkZXNjcmlwdG9yLmdldHRlcigp
ICE9IGN1cnJlbnQuZ2V0dGVyKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIDEyLiBGb3IgZWFjaCBh
dHRyaWJ1dGUgZmllbGQgb2YgRGVzYyB0aGF0IGlzIHByZXNlbnQsIHNldCB0aGUgY29ycmVzcG9u
ZGluZ2x5IG5hbWVkIGF0dHJpYnV0ZSBvZiB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3Qg
TyB0byB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkLgorICAgIC8vIDEzLiBSZXR1cm4gdHJ1ZS4KKyAg
ICByZXR1cm4gcHV0RGVzY3JpcHRvcihleGVjLCBlbnRyeUluTWFwLCBkZXNjcmlwdG9yLCBjdXJy
ZW50KTsKK30KKwordm9pZCBKU0FycmF5OjpzZXRMZW5ndGhXcml0YWJsZShFeGVjU3RhdGUqIGV4
ZWMsIGJvb2wgd3JpdGFibGUpCit7CisgICAgQVNTRVJUKCFpc0xlbmd0aFdyaXRhYmxlKCkgJiYg
d3JpdGFibGUpOworICAgIGlmICghaXNMZW5ndGhXcml0YWJsZSgpIHx8IHdyaXRhYmxlKQorICAg
ICAgICByZXR1cm47CisKKyAgICBlbnRlclNwYXJzZU1vZGUoZXhlYy0+Z2xvYmFsRGF0YSgpKTsK
KworICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3RvcmFnZS0+bV9zcGFyc2VWYWx1
ZU1hcDsKKyAgICBBU1NFUlQobWFwKTsKKyAgICBtYXAtPnNldExlbmd0aElzUmVhZE9ubHkoKTsK
K30KKworLy8gRGVmaW5lZCBpbiBFUzUuMSAxNS40LjUuMQorYm9vbCBKU0FycmF5OjpkZWZpbmVP
d25Qcm9wZXJ0eShKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBib29s
IHRocm93RXhjZXB0aW9uKQoreworICAgIEpTQXJyYXkqIGFycmF5ID0gc3RhdGljX2Nhc3Q8SlNB
cnJheSo+KG9iamVjdCk7CisKKyAgICAvLyAzLiBJZiBQIGlzICJsZW5ndGgiLCB0aGVuCisgICAg
aWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CisgICAg
ICAgIC8vIEFsbCBwYXRocyB0aHJvdWdoIGxlbmd0aCBkZWZpbml0aW9uIGNhbGwgdGhlIGRlZmF1
bHQgW1tEZWZpbmVPd25Qcm9wZXJ0eV1dLCBoZW5jZToKKyAgICAgICAgLy8gZnJvbSBFUzUuMSA4
LjEyLjkgNy5hLgorICAgICAgICBpZiAoIWRlc2NyaXB0b3IuY29uZmlndXJhYmxlKCkpCisgICAg
ICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0
byBjb25maWd1cmFibGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwor
ICAgICAgICAvLyBmcm9tIEVTNS4xIDguMTIuOSA3LmIuCisgICAgICAgIGlmIChkZXNjcmlwdG9y
LmVudW1lcmFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNl
cHRpb24sICJBdHRlbXB0aW5nIHRvIGVudW1lcmFibGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJh
YmxlIHByb3BlcnR5LiIpOworCisgICAgICAgIC8vIGEuIElmIHRoZSBbW1ZhbHVlXV0gZmllbGQg
b2YgRGVzYyBpcyBhYnNlbnQsIHRoZW4KKyAgICAgICAgLy8gYS5pLiBSZXR1cm4gdGhlIHJlc3Vs
dCBvZiBjYWxsaW5nIHRoZSBkZWZhdWx0IFtbRGVmaW5lT3duUHJvcGVydHldXSBpbnRlcm5hbCBt
ZXRob2QgKDguMTIuOSkgb24gQSBwYXNzaW5nICJsZW5ndGgiLCBEZXNjLCBhbmQgVGhyb3cgYXMg
YXJndW1lbnRzLgorICAgICAgICBpZiAoZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigp
KQorICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVt
cHRpbmcgdG8gY2hhbmdlIGFjY2VzcyBtZWNoYW5pc20gZm9yIGFuIHVuY29uZmlndXJhYmxlIHBy
b3BlcnR5LiIpOworICAgICAgICAvLyBmcm9tIEVTNS4xIDguMTIuOSAxMC5hLgorICAgICAgICBp
ZiAoIWFycmF5LT5pc0xlbmd0aFdyaXRhYmxlKCkgJiYgZGVzY3JpcHRvci53cml0YWJsZSgpKQor
ICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRp
bmcgdG8gd3JpdGFibGUgYXR0cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOwor
ICAgICAgICAvLyBUaGlzIGRlc2NyaXB0b3IgaXMgZWl0aGVyIGp1c3QgbWFraW5nIGxlbmd0aCBy
ZWFkLW9ubHksIG9yIGNoYW5naW5nIG5vdGhpbmchCisgICAgICAgIGlmICghZGVzY3JpcHRvci52
YWx1ZSgpKSB7CisgICAgICAgICAgICBhcnJheS0+c2V0TGVuZ3RoV3JpdGFibGUoZXhlYywgZGVz
Y3JpcHRvci53cml0YWJsZSgpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICAvLyBiLiBMZXQgbmV3TGVuRGVzYyBiZSBhIGNvcHkgb2YgRGVz
Yy4KKyAgICAgICAgLy8gYy4gTGV0IG5ld0xlbiBiZSBUb1VpbnQzMihEZXNjLltbVmFsdWVdXSku
CisgICAgICAgIHVuc2lnbmVkIG5ld0xlbiA9IGRlc2NyaXB0b3IudmFsdWUoKS50b1VJbnQzMihl
eGVjKTsKKyAgICAgICAgLy8gZC4gSWYgbmV3TGVuIGlzIG5vdCBlcXVhbCB0byBUb051bWJlcigg
RGVzYy5bW1ZhbHVlXV0pLCB0aHJvdyBhIFJhbmdlRXJyb3IgZXhjZXB0aW9uLgorICAgICAgICBp
ZiAobmV3TGVuICE9IGRlc2NyaXB0b3IudmFsdWUoKS50b051bWJlcihleGVjKSkgeworICAgICAg
ICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJJbnZhbGlkIGFy
cmF5IGxlbmd0aCIpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIEJhc2VkIG9uIFNhbWVWYWx1ZSBjaGVjayBpbiA4LjEyLjksIHRoaXMgaXMgYWx3
YXlzIG9rYXkuCisgICAgICAgIGlmIChuZXdMZW4gPT0gYXJyYXktPmxlbmd0aCgpKSB7CisgICAg
ICAgICAgICBhcnJheS0+c2V0TGVuZ3RoV3JpdGFibGUoZXhlYywgZGVzY3JpcHRvci53cml0YWJs
ZSgpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8g
ZS4gU2V0IG5ld0xlbkRlc2MuW1tWYWx1ZV0gdG8gbmV3TGVuLgorICAgICAgICAvLyBmLiBJZiBu
ZXdMZW4gPj0gb2xkTGVuLCB0aGVuCisgICAgICAgIC8vIGYuaS4gUmV0dXJuIHRoZSByZXN1bHQg
b2YgY2FsbGluZyB0aGUgZGVmYXVsdCBbW0RlZmluZU93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0
aG9kICg4LjEyLjkpIG9uIEEgcGFzc2luZyAibGVuZ3RoIiwgbmV3TGVuRGVzYywgYW5kIFRocm93
IGFzIGFyZ3VtZW50cy4KKyAgICAgICAgLy8gZy4gUmVqZWN0IGlmIG9sZExlbkRlc2MuW1tXcml0
YWJsZV1dIGlzIGZhbHNlLgorICAgICAgICBpZiAoIWFycmF5LT5pc0xlbmd0aFdyaXRhYmxlKCkp
CisgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1w
dGluZyB0byBjaGFuZ2UgdmFsdWUgb2YgYSByZWFkb25seSBwcm9wZXJ0eS4iKTsKKyAgICAgICAg
CisgICAgICAgIC8vIGguIElmIG5ld0xlbkRlc2MuW1tXcml0YWJsZV1dIGlzIGFic2VudCBvciBo
YXMgdGhlIHZhbHVlIHRydWUsIGxldCBuZXdXcml0YWJsZSBiZSB0cnVlLgorICAgICAgICAvLyBp
LiBFbHNlLAorICAgICAgICAvLyBpLmkuIE5lZWQgdG8gZGVmZXIgc2V0dGluZyB0aGUgW1tXcml0
YWJsZV1dIGF0dHJpYnV0ZSB0byBmYWxzZSBpbiBjYXNlIGFueSBlbGVtZW50cyBjYW5ub3QgYmUg
ZGVsZXRlZC4KKyAgICAgICAgLy8gaS5paS4gTGV0IG5ld1dyaXRhYmxlIGJlIGZhbHNlLgorICAg
ICAgICAvLyBpLmlpaS4gU2V0IG5ld0xlbkRlc2MuW1tXcml0YWJsZV0gdG8gdHJ1ZS4KKyAgICAg
ICAgLy8gai4gTGV0IHN1Y2NlZWRlZCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIGRlZmF1
bHQgW1tEZWZpbmVPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCAoOC4xMi45KSBvbiBBIHBh
c3NpbmcgImxlbmd0aCIsIG5ld0xlbkRlc2MsIGFuZCBUaHJvdyBhcyBhcmd1bWVudHMuCisgICAg
ICAgIC8vIGsuIElmIHN1Y2NlZWRlZCBpcyBmYWxzZSwgcmV0dXJuIGZhbHNlLgorICAgICAgICAv
LyBsLiBXaGlsZSBuZXdMZW4gPCBvbGRMZW4gcmVwZWF0LAorICAgICAgICAvLyBsLmkuIFNldCBv
bGRMZW4gdG8gb2xkTGVuIOKAkyAxLgorICAgICAgICAvLyBsLmlpLiBMZXQgZGVsZXRlU3VjY2Vl
ZGVkIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tEZWxldGVdXSBpbnRlcm5hbCBtZXRo
b2Qgb2YgQSBwYXNzaW5nIFRvU3RyaW5nKG9sZExlbikgYW5kIGZhbHNlIGFzIGFyZ3VtZW50cy4K
KyAgICAgICAgLy8gbC5paWkuIElmIGRlbGV0ZVN1Y2NlZWRlZCBpcyBmYWxzZSwgdGhlbgorICAg
ICAgICBpZiAoIWFycmF5LT5zZXRMZW5ndGgobmV3TGVuLCB0aHJvd0V4Y2VwdGlvbikpIHsKKyAg
ICAgICAgICAgIC8vIDEuIFNldCBuZXdMZW5EZXNjLltbVmFsdWVdIHRvIG9sZExlbisxLgorICAg
ICAgICAgICAgLy8gMi4gSWYgbmV3V3JpdGFibGUgaXMgZmFsc2UsIHNldCBuZXdMZW5EZXNjLltb
V3JpdGFibGVdIHRvIGZhbHNlLgorICAgICAgICAgICAgLy8gMy4gQ2FsbCB0aGUgZGVmYXVsdCBb
W0RlZmluZU93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kICg4LjEyLjkpIG9uIEEgcGFzc2lu
ZyAibGVuZ3RoIiwgbmV3TGVuRGVzYywgYW5kIGZhbHNlIGFzIGFyZ3VtZW50cy4KKyAgICAgICAg
ICAgIC8vIDQuIFJlamVjdC4KKyAgICAgICAgICAgIGFycmF5LT5zZXRMZW5ndGhXcml0YWJsZShl
eGVjLCBkZXNjcmlwdG9yLndyaXRhYmxlKCkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gbS4gSWYgbmV3V3JpdGFibGUgaXMgZmFsc2UsIHRoZW4K
KyAgICAgICAgLy9pLiBDYWxsIHRoZSBkZWZhdWx0IFtbRGVmaW5lT3duUHJvcGVydHldXSBpbnRl
cm5hbCBtZXRob2QgKDguMTIuOSkgb24gQSBwYXNzaW5nICJsZW5ndGgiLCBQcm9wZXJ0eSBEZXNj
cmlwdG9ye1tbV3JpdGFibGVdXTogZmFsc2V9LCBhbmQgZmFsc2UgYXMgYXJndW1lbnRzLiBUaGlz
IGNhbGwgd2lsbCBhbHdheXMgcmV0dXJuIHRydWUuCisgICAgICAgIGFycmF5LT5zZXRMZW5ndGhX
cml0YWJsZShleGVjLCBkZXNjcmlwdG9yLndyaXRhYmxlKCkpOworICAgICAgICAvLyBuLiBSZXR1
cm4gdHJ1ZS4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gNC4gRWxzZSBp
ZiBQIGlzIGFuIGFycmF5IGluZGV4ICgxNS40KSwgdGhlbgorICAgIGJvb2wgaXNBcnJheUluZGV4
OworICAgIC8vIGEuIExldCBpbmRleCBiZSBUb1VpbnQzMihQKS4KKyAgICB1bnNpZ25lZCBpbmRl
eCA9IHByb3BlcnR5TmFtZS50b0FycmF5SW5kZXgoaXNBcnJheUluZGV4KTsKKyAgICBpZiAoaXNB
cnJheUluZGV4KSB7CisgICAgICAgIC8vIGIuIFJlamVjdCBpZiBpbmRleCA+PSBvbGRMZW4gYW5k
IG9sZExlbkRlc2MuW1tXcml0YWJsZV1dIGlzIGZhbHNlLgorICAgICAgICBpZiAoaW5kZXggPj0g
YXJyYXktPmxlbmd0aCgpICYmICFhcnJheS0+aXNMZW5ndGhXcml0YWJsZSgpKQorICAgICAgICAg
ICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gZGVm
aW5lIG51bWVyaWMgcHJvcGVydHkgb24gYXJyYXkgd2l0aCBub24td3JpdGFibGUgbGVuZ3RoIHBy
b3BlcnR5LiIpOworICAgICAgICAvLyBjLiBMZXQgc3VjY2VlZGVkIGJlIHRoZSByZXN1bHQgb2Yg
Y2FsbGluZyB0aGUgZGVmYXVsdCBbW0RlZmluZU93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9k
ICg4LjEyLjkpIG9uIEEgcGFzc2luZyBQLCBEZXNjLCBhbmQgZmFsc2UgYXMgYXJndW1lbnRzLgor
ICAgICAgICAvLyBkLiBSZWplY3QgaWYgc3VjY2VlZGVkIGlzIGZhbHNlLgorICAgICAgICAvLyBl
LiBJZiBpbmRleCA+PSBvbGRMZW4KKyAgICAgICAgLy8gZS5pLiBTZXQgb2xkTGVuRGVzYy5bW1Zh
bHVlXV0gdG8gaW5kZXggKyAxLgorICAgICAgICAvLyBlLmlpLiBDYWxsIHRoZSBkZWZhdWx0IFtb
RGVmaW5lT3duUHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2QgKDguMTIuOSkgb24gQSBwYXNzaW5n
ICJsZW5ndGgiLCBvbGRMZW5EZXNjLCBhbmQgZmFsc2UgYXMgYXJndW1lbnRzLiBUaGlzIGNhbGwg
d2lsbCBhbHdheXMgcmV0dXJuIHRydWUuCisgICAgICAgIC8vIGYuIFJldHVybiB0cnVlLgorICAg
ICAgICByZXR1cm4gYXJyYXktPmRlZmluZU93bk51bWVyaWNQcm9wZXJ0eShleGVjLCBpbmRleCwg
ZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOworICAgIH0KKworICAgIHJldHVybiBKU09iamVj
dDo6ZGVmaW5lT3duUHJvcGVydHkob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0
b3IsIHRocm93RXhjZXB0aW9uKTsKK30KKwogYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Fy
cmF5Kj4oY2VsbCk7CkBAIC0yNTksNyArNjExLDcgQEAgYm9vbCBKU0FycmF5OjpnZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4KAogICAgIH0gZWxzZSBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFw
ID0gc3RvcmFnZS0+bV9zcGFyc2VWYWx1ZU1hcCkgewogICAgICAgICBTcGFyc2VBcnJheVZhbHVl
TWFwOjppdGVyYXRvciBpdCA9IG1hcC0+ZmluZChpKTsKICAgICAgICAgaWYgKGl0ICE9IG1hcC0+
bm90Rm91bmQoKSkgewotICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZShpdC0+c2Vjb25kLmdldCgp
KTsKKyAgICAgICAgICAgIGl0LT5zZWNvbmQuZ2V0KHNsb3QpOwogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC0zMDcsNyArNjU5LDcgQEAgYm9vbCBKU0FycmF5
OjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSgogICAgICAgICB9IGVsc2UgaWYgKFNwYXJzZUFy
cmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlVmFsdWVNYXApIHsKICAgICAgICAg
ICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGkpOwogICAg
ICAgICAgICAgaWYgKGl0ICE9IG1hcC0+bm90Rm91bmQoKSkgewotICAgICAgICAgICAgICAgIGRl
c2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihpdC0+c2Vjb25kLmdldCgpLCAwKTsKKyAgICAgICAgICAg
ICAgICBpdC0+c2Vjb25kLmdldChkZXNjcmlwdG9yKTsKICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMzMyLDcgKzY4NCw3IEBAIHZvaWQg
SlNBcnJheTo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXQKICAgICAgICAgICAgIHRocm93RXJy
b3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiSW52YWxpZCBhcnJheSBsZW5ndGgiKSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgdGhpc09iamVjdC0+c2V0
TGVuZ3RoKG5ld0xlbmd0aCk7CisgICAgICAgIHRoaXNPYmplY3QtPnNldExlbmd0aChuZXdMZW5n
dGgsIHNsb3QuaXNTdHJpY3RNb2RlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0z
NzIsMTIgKzcyNCwxNCBAQCB2b2lkIEpTQXJyYXk6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBF
CiAgICAgfQogCiAgICAgLy8gRm9yIGFsbCBvdGhlciBjYXNlcywgY2FsbCBwdXRCeUluZGV4QmV5
b25kVmVjdG9yTGVuZ3RoLgotICAgIHRoaXNPYmplY3QtPnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JM
ZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBpLCB2YWx1ZSk7CisgICAgdGhpc09iamVjdC0+cHV0
QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChleGVjLCBpLCB2YWx1ZSk7CiAgICAgdGhpc09iamVj
dC0+Y2hlY2tDb25zaXN0ZW5jeSgpOwogfQogCi1ORVZFUl9JTkxJTkUgdm9pZCBKU0FycmF5Ojpw
dXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5z
aWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSkKK05FVkVSX0lOTElORSB2b2lkIEpTQXJyYXk6OnB1dEJ5
SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1Zh
bHVlIHZhbHVlKQogeworICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2Jh
bERhdGEoKTsKKwogICAgIC8vIGkgc2hvdWxkIGJlIGEgdmFsaWQgYXJyYXkgaW5kZXggdGhhdCBp
cyBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHZlY3Rvci4KICAgICBBU1NFUlQoaSA+PSBtX3ZlY3Rv
ckxlbmd0aCk7CiAgICAgQVNTRVJUKGkgPD0gTUFYX0FSUkFZX0lOREVYKTsKQEAgLTQwNSw3ICs3
NTksNyBAQCBORVZFUl9JTkxJTkUgdm9pZCBKU0FycmF5OjpwdXRCeUluZGV4QmV5CiAgICAgICAg
IC8vIFdlIGRvbid0IHdhbnQgdG8sIG9yIGNhbid0IHVzZSBhIHZlY3RvciB0byBob2xkIHRoaXMg
cHJvcGVydHkgLSBhbGxvY2F0ZSBhIHNwYXJzZSBtYXAgJiBhZGQgdGhlIHZhbHVlLgogICAgICAg
ICBtYXAgPSBuZXcgU3BhcnNlQXJyYXlWYWx1ZU1hcDsKICAgICAgICAgc3RvcmFnZS0+bV9zcGFy
c2VWYWx1ZU1hcCA9IG1hcDsKLSAgICAgICAgbWFwLT5wdXQoZ2xvYmFsRGF0YSwgdGhpcywgaSwg
dmFsdWUpOworICAgICAgICBtYXAtPnB1dChleGVjLCB0aGlzLCBpLCB2YWx1ZSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTQxMyw3ICs3NjcsNyBAQCBORVZFUl9JTkxJTkUgdm9pZCBK
U0FycmF5OjpwdXRCeUluZGV4QmV5CiAgICAgLy8gV2Ugd2lsbCBjb250aW51ZSAgdG8gdXNlIGEg
c3BhcnNlIG1hcCBpZiBTcGFyc2VNb2RlIGlzIHNldCwgYSB2ZWN0b3Igd291bGQgYmUgdG9vIHNw
YXJzZSwgb3IgaWYgYWxsb2NhdGlvbiBmYWlscy4KICAgICB1bnNpZ25lZCBudW1WYWx1ZXNJbkFy
cmF5ID0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciArIG1hcC0+c2l6ZSgpOwogICAgIGlm
IChtYXAtPnNwYXJzZU1vZGUoKSB8fCAhaXNEZW5zZUVub3VnaEZvclZlY3RvcihsZW5ndGgsIG51
bVZhbHVlc0luQXJyYXkpIHx8ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChsZW5ndGgpKSB7Ci0gICAg
ICAgIG1hcC0+cHV0KGdsb2JhbERhdGEsIHRoaXMsIGksIHZhbHVlKTsKKyAgICAgICAgbWFwLT5w
dXQoZXhlYywgdGhpcywgaSwgdmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC00
MjUsNyArNzc5LDcgQEAgTkVWRVJfSU5MSU5FIHZvaWQgSlNBcnJheTo6cHV0QnlJbmRleEJleQog
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CiAg
ICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsK
ICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHZlY3RvcltpdC0+Zmlyc3RdLnNldChn
bG9iYWxEYXRhLCB0aGlzLCBpdC0+c2Vjb25kLmdldCgpKTsKKyAgICAgICAgdmVjdG9yW2l0LT5m
aXJzdF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgp
KTsKICAgICBkZWxldGUgbWFwOwogICAgIHN0b3JhZ2UtPm1fc3BhcnNlVmFsdWVNYXAgPSAwOwog
CkBAIC00NTUsMzUgKzgwOSwyOCBAQCBib29sIEpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5QnlJbmRl
eChKU0NlCiAgICAgSlNBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7
CiAgICAgdGhpc09iamVjdC0+Y2hlY2tDb25zaXN0ZW5jeSgpOwogCisgICAgaWYgKGkgPiBNQVhf
QVJSQVlfSU5ERVgpCisgICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5k
ZWxldGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkp
KTsKKwogICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fc3RvcmFnZTsK
ICAgICAKICAgICBpZiAoaSA8IHRoaXNPYmplY3QtPm1fdmVjdG9yTGVuZ3RoKSB7CiAgICAgICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07
Ci0gICAgICAgIGlmICghdmFsdWVTbG90KSB7Ci0gICAgICAgICAgICB0aGlzT2JqZWN0LT5jaGVj
a0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICh2
YWx1ZVNsb3QpIHsKKyAgICAgICAgICAgIHZhbHVlU2xvdC5jbGVhcigpOworICAgICAgICAgICAg
LS1zdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yOwogICAgICAgICB9Ci0gICAgICAgIHZhbHVl
U2xvdC5jbGVhcigpOwotICAgICAgICAtLXN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0g
ICAgICAgIHRoaXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotCi0gICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2Ut
Pm1fc3BhcnNlVmFsdWVNYXApIHsKKyAgICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAq
IG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlVmFsdWVNYXApIHsKICAgICAgICAgU3BhcnNlQXJyYXlW
YWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQoaSk7CiAgICAgICAgIGlmIChpdCAhPSBt
YXAtPm5vdEZvdW5kKCkpIHsKKyAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLmF0dHJpYnV0ZXMg
JiBEb250RGVsZXRlKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAg
IG1hcC0+cmVtb3ZlKGl0KTsKLSAgICAgICAgICAgIHRoaXNPYmplY3QtPmNoZWNrQ29uc2lzdGVu
Y3koKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQogCiAgICAg
dGhpc09iamVjdC0+Y2hlY2tDb25zaXN0ZW5jeSgpOwotCi0gICAgaWYgKGkgPiBNQVhfQVJSQVlf
SU5ERVgpCi0gICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQ
cm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKLQot
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBKU0FycmF5Ojpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQpAQCAt
NTAzLDggKzg1MCwxMCBAQCB2b2lkIEpTQXJyYXk6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmpl
CiAKICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VW
YWx1ZU1hcCkgewogICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBtYXAtPmVuZCgpOwotICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAg
ICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGl0LT5maXJzdCkpOwor
ICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFw
LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIGlmIChtb2RlID09IElu
Y2x1ZGVEb250RW51bVByb3BlcnRpZXMgfHwgIShpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250
RW51bSkpCisgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJv
bShleGVjLCBpdC0+Zmlyc3QpKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChtb2RlID09
IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMpCkBAIC02OTMsOCArMTA0Miw5IEBAIGJvb2wgSlNB
cnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UodW5zaWcKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
dm9pZCBKU0FycmF5OjpzZXRMZW5ndGgodW5zaWduZWQgbmV3TGVuZ3RoKQorYm9vbCBKU0FycmF5
OjpzZXRMZW5ndGgodW5zaWduZWQgbmV3TGVuZ3RoLCBib29sIHRocm93RXhjZXB0aW9uKQogewor
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd0V4Y2VwdGlvbik7CiAgICAgY2hlY2tDb25zaXN0ZW5jeSgp
OwogCiAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9yYWdlOwpAQCAtNzEwLDYgKzEw
NjAsOSBAQCB2b2lkIEpTQXJyYXk6OnNldExlbmd0aCh1bnNpZ25lZCBuZXdMZW5nCiAgICAgICAg
ICAgICBzdG9yYWdlLT5tX251bVZhbHVlc0luVmVjdG9yIC09IGhhZFZhbHVlOwogICAgICAgICB9
CiAKKyAgICAgICAgLy8gRklYTUU6IHByb3BlcnRpZXMgc2hvdWxkIGJlIHJlbW92ZWQgaW4gcmV2
ZXJzZSBudW1lcmljIG9yZGVyLCBpZiBhbnkgY2Fubm90IGJlCisgICAgICAgIC8vIHJlbW92ZWQg
dGhpcyBtZXRob2Qgc2hvdWxkIHJlamVjdCAocG9zc2libHkgdGhyb3cgLyByZXR1cm4gZmFsc2Up
LCBhbmQgbGVuZ3RoCisgICAgICAgIC8vIHNob3VsZCBiZSBzZXQgdGhlIGFmdGVyIHRoZSBsYXN0
IHByb3BlcnR5IHRoYXQgY291bGQgbm90IGJlIHJlbW92ZWQuCiAgICAgICAgIGlmIChTcGFyc2VB
cnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5tX3NwYXJzZVZhbHVlTWFwKSB7CiAgICAgICAg
ICAgICBTcGFyc2VBcnJheVZhbHVlTWFwIGNvcHkgPSAqbWFwOwogICAgICAgICAgICAgU3BhcnNl
QXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY29weS5lbmQoKTsKQEAgLTcyNywx
NyArMTA4MCwyMSBAQCB2b2lkIEpTQXJyYXk6OnNldExlbmd0aCh1bnNpZ25lZCBuZXdMZW5nCiAg
ICAgc3RvcmFnZS0+bV9sZW5ndGggPSBuZXdMZW5ndGg7CiAKICAgICBjaGVja0NvbnNpc3RlbmN5
KCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLUpTVmFsdWUgSlNBcnJheTo6cG9wKCkKK0pTVmFs
dWUgSlNBcnJheTo6cG9wKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBjaGVja0NvbnNpc3RlbmN5
KCk7CiAKICAgICBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CiAgICAgCiAgICAg
dW5zaWduZWQgbGVuZ3RoID0gc3RvcmFnZS0+bV9sZW5ndGg7Ci0gICAgaWYgKCFsZW5ndGgpCisg
ICAgaWYgKCFsZW5ndGgpIHsKKyAgICAgICAgaWYgKCFpc0xlbmd0aFdyaXRhYmxlKCkpCisgICAg
ICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdy
aXRlRXJyb3IpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CiAKICAgICAt
LWxlbmd0aDsKIApAQCAtNzU2LDcgKzExMTMsMTggQEAgSlNWYWx1ZSBKU0FycmF5Ojpwb3AoKQog
ICAgICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VW
YWx1ZU1hcCkgewogICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQg
PSBtYXAtPmZpbmQobGVuZ3RoKTsKICAgICAgICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5k
KCkpIHsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBpdC0+c2Vjb25kLmdldCgpOworICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXMgPSBpdC0+c2Vjb25kLmF0dHJpYnV0ZXM7CisK
KyAgICAgICAgICAgICAgICByZXN1bHQgPSBpdC0+c2Vjb25kLmdldChleGVjLCB0aGlzKTsKKyAg
ICAgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGlmIChhdHRyaWJ1dGVzICYgRG9udERlbGV0ZSkgeworICAgICAgICAgICAgICAgICAgICB0
aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiVW5hYmxlIHRvIGRlbGV0ZSBw
cm9wZXJ0eS4iKSk7CisgICAgICAgICAgICAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbWFwLT5yZW1vdmUoaXQpOwogICAgICAgICAg
ICAgICAgIGlmIChtYXAtPmlzRW1wdHkoKSAmJiAhbWFwLT5zcGFyc2VNb2RlKCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgZGVsZXRlIG1hcDsKQEAgLTc2OSw3ICsxMTM3LDYgQEAgSlNWYWx1ZSBK
U0FycmF5Ojpwb3AoKQogICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gbGVuZ3RoOwogCiAgICAgY2hl
Y2tDb25zaXN0ZW5jeSgpOwotCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtODAwLDcgKzEx
NjcsNyBAQCB2b2lkIEpTQXJyYXk6OnB1c2goRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAgICAgfQog
CiAgICAgLy8gSGFuZGxlZCB0aGUgc2FtZSBhcyBwdXRJbmRleC4KLSAgICBwdXRCeUluZGV4QmV5
b25kVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgc3RvcmFnZS0+bV9sZW5ndGgsIHZh
bHVlKTsKKyAgICBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKGV4ZWMsIHN0b3JhZ2UtPm1f
bGVuZ3RoLCB2YWx1ZSk7CiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogfQogCkBAIC0xMTg5LDcg
KzE1NTYsNyBAQCB2b2lkIEpTQXJyYXk6OnNvcnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiAKICAg
ICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQo
KTsKICAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICB0cmVlLmFic3Ry
YWN0b3IoKS5tX25vZGVzW251bURlZmluZWRdLnZhbHVlID0gaXQtPnNlY29uZC5nZXQoKTsKKyAg
ICAgICAgICAgIHRyZWUuYWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSBp
dC0+c2Vjb25kLmdldE5vblNwYXJzZU1vZGUoKTsKICAgICAgICAgICAgIHRyZWUuaW5zZXJ0KG51
bURlZmluZWQpOwogICAgICAgICAgICAgKytudW1EZWZpbmVkOwogICAgICAgICB9CkBAIC0xMzA1
LDcgKzE2NzIsNyBAQCB1bnNpZ25lZCBKU0FycmF5Ojpjb21wYWN0Rm9yU29ydGluZygpCiAKICAg
ICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQo
KTsKICAgICAgICAgZm9yIChTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1hcC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgc3RvcmFnZS0+bV92
ZWN0b3JbbnVtRGVmaW5lZCsrXS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGl0LT5zZWNvbmQuZ2V0
KCkpOworICAgICAgICAgICAgc3RvcmFnZS0+bV92ZWN0b3JbbnVtRGVmaW5lZCsrXS5zZXRXaXRo
b3V0V3JpdGVCYXJyaWVyKGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsKIAogICAgICAg
ICBkZWxldGUgbWFwOwogICAgICAgICBzdG9yYWdlLT5tX3NwYXJzZVZhbHVlTWFwID0gMDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDEwNDM4
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBj
b3B5KQpAQCAtMzIsNiArMzIsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgc3RydWN0IFNwYXJz
ZUFycmF5RW50cnkgOiBwdWJsaWMgV3JpdGVCYXJyaWVyPFVua25vd24+IHsKICAgICAgICAgU3Bh
cnNlQXJyYXlFbnRyeSgpIDogYXR0cmlidXRlcygwKSB7fQogICAgICAgICB1bnNpZ25lZCBhdHRy
aWJ1dGVzOworCisgICAgICAgIEpTVmFsdWUgZ2V0KEV4ZWNTdGF0ZSosIEpTQXJyYXkqKSBjb25z
dDsKKyAgICAgICAgdm9pZCBnZXQoUHJvcGVydHlTbG90JikgY29uc3Q7CisgICAgICAgIHZvaWQg
Z2V0KFByb3BlcnR5RGVzY3JpcHRvciYpIGNvbnN0OworICAgICAgICBKU1ZhbHVlIGdldE5vblNw
YXJzZU1vZGUoKSBjb25zdDsKICAgICB9OwogCiAgICAgY2xhc3MgU3BhcnNlQXJyYXlWYWx1ZU1h
cCB7CkBAIC0zOSw3ICs0NCw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGVudW0gRmxh
Z3MgewogICAgICAgICAgICAgTm9ybWFsID0gMCwKLSAgICAgICAgICAgIFNwYXJzZU1vZGUgPSAx
CisgICAgICAgICAgICBTcGFyc2VNb2RlID0gMSwKKyAgICAgICAgICAgIExlbmd0aElzUmVhZE9u
bHkgPSAyLAogICAgICAgICB9OwogCiAgICAgcHVibGljOgpAQCAtNjQsOSArNzAsMjAgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBtX2ZsYWdzID0gKEZsYWdzKShtX2ZsYWdzIHwgU3Bh
cnNlTW9kZSk7CiAgICAgICAgIH0KIAorICAgICAgICBib29sIGxlbmd0aElzUmVhZE9ubHkoKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9mbGFncyAmIExlbmd0aElzUmVhZE9ubHk7
CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHNldExlbmd0aElzUmVhZE9ubHkoKQorICAgICAg
ICB7CisgICAgICAgICAgICBtX2ZsYWdzID0gKEZsYWdzKShtX2ZsYWdzIHwgTGVuZ3RoSXNSZWFk
T25seSk7CisgICAgICAgIH0KKwogICAgICAgICAvLyBUaGVzZSBtZXRob2RzIG1heSBtdXRhdGUg
dGhlIGNvbnRlbnRzIG9mIHRoZSBtYXAKLSAgICAgICAgdm9pZCBwdXQoSlNHbG9iYWxEYXRhJiwg
SlNBcnJheSosIHVuc2lnbmVkLCBKU1ZhbHVlKTsKLSAgICAgICAgaXRlcmF0b3IgZmluZCh1bnNp
Z25lZCk7CisgICAgICAgIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCB1bnNpZ25lZCwg
SlNWYWx1ZSk7CisgICAgICAgIHN0ZDo6cGFpcjxpdGVyYXRvcixib29sPiBhZGQoSlNBcnJheSos
IHVuc2lnbmVkKTsKKyAgICAgICAgaXRlcmF0b3IgZmluZCh1bnNpZ25lZCBpKSB7IHJldHVybiBt
X21hcC5maW5kKGkpOyB9CiAgICAgICAgIC8vIFRoaXMgc2hvdWxkIEFTU0VSVCB0aGUgcmVtb3Zl
IGlzIHZhbGlkIChjaGVjayB0aGUgcmVzdWx0IG9mIHRoZSBmaW5kKS4KICAgICAgICAgdm9pZCBy
ZW1vdmUoaXRlcmF0b3IgaXQpIHsgbV9tYXAucmVtb3ZlKGl0KTsgfQogICAgICAgICB2b2lkIHJl
bW92ZSh1bnNpZ25lZCBpKSB7IG1fbWFwLnJlbW92ZShpKTsgfQpAQCAtMTM2LDcgKzE1Myw5IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIGFycmF5LT50cnlGaW5pc2hDcmVh
dGlvblVuaW5pdGlhbGl6ZWQoZ2xvYmFsRGF0YSwgaW5pdGlhbExlbmd0aCk7CiAgICAgICAgIH0K
IAotICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0
YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKKyAg
ICAgICAgc3RhdGljIGJvb2wgZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUq
LCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCB0aHJvd0V4Y2Vw
dGlvbik7CisKKyAgICAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCos
IEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAg
c3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwqLCBFeGVjU3RhdGUq
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICBzdGF0aWMg
Ym9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBjb25z
dCBJZGVudGlmaWVyJiwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAgICAgICAgIHN0YXRpYyB2b2lk
IHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlKTsKQEAgLTE0NCwxNCArMTYzLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBz
dGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwogICAgICAgICAKICAg
ICAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlLT5tX2xlbmd0
aDsgfQotICAgICAgICB2b2lkIHNldExlbmd0aCh1bnNpZ25lZCk7IC8vIE9LIHRvIHVzZSBvbiBu
ZXcgYXJyYXlzLCBidXQgbm90IGlmIGl0IG1pZ2h0IGJlIGEgUmVnRXhwTWF0Y2hBcnJheS4KKyAg
ICAgICAgYm9vbCBzZXRMZW5ndGgodW5zaWduZWQsIGJvb2wgdGhyb3dFeGNlcHRpb24gPSBmYWxz
ZSk7IC8vIE9LIHRvIHVzZSBvbiBuZXcgYXJyYXlzLCBidXQgbm90IGlmIGl0IG1pZ2h0IGJlIGEg
UmVnRXhwTWF0Y2hBcnJheS4KIAogICAgICAgICB2b2lkIHNvcnQoRXhlY1N0YXRlKik7CiAgICAg
ICAgIHZvaWQgc29ydChFeGVjU3RhdGUqLCBKU1ZhbHVlIGNvbXBhcmVGdW5jdGlvbiwgQ2FsbFR5
cGUsIGNvbnN0IENhbGxEYXRhJik7CiAgICAgICAgIHZvaWQgc29ydE51bWVyaWMoRXhlY1N0YXRl
KiwgSlNWYWx1ZSBjb21wYXJlRnVuY3Rpb24sIENhbGxUeXBlLCBjb25zdCBDYWxsRGF0YSYpOwog
CiAgICAgICAgIHZvaWQgcHVzaChFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKLSAgICAgICAgSlNWYWx1
ZSBwb3AoKTsKKyAgICAgICAgSlNWYWx1ZSBwb3AoRXhlY1N0YXRlKik7CiAKICAgICAgICAgdm9p
ZCBzaGlmdENvdW50KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGNvdW50KTsKICAgICAgICAgdm9pZCB1
bnNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zaWduZWQgY291bnQpOwpAQCAtMjQ1LDggKzI2NCwx
OSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBzZXRTdWJjbGFzc0RhdGEodm9pZCop
OwogCiAgICAgcHJpdmF0ZToKKyAgICAgICAgYm9vbCBpc0xlbmd0aFdyaXRhYmxlKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zdG9yYWdlLT5t
X3NwYXJzZVZhbHVlTWFwOworICAgICAgICAgICAgcmV0dXJuICFtYXAgfHwgIW1hcC0+bGVuZ3Ro
SXNSZWFkT25seSgpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBzZXRMZW5ndGhXcml0YWJs
ZShFeGVjU3RhdGUqLCBib29sIHdyaXRhYmxlKTsKKyAgICAgICAgYm9vbCBwdXREZXNjcmlwdG9y
KEV4ZWNTdGF0ZSosIFNwYXJzZUFycmF5RW50cnkqLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBQcm9w
ZXJ0eURlc2NyaXB0b3ImIG9sZCk7CisgICAgICAgIGJvb2wgZGVmaW5lT3duTnVtZXJpY1Byb3Bl
cnR5KEV4ZWNTdGF0ZSosIHVuc2lnbmVkLCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHRocm93
RXhjZXB0aW9uKTsKKyAgICAgICAgdm9pZCBlbnRlclNwYXJzZU1vZGUoSlNHbG9iYWxEYXRhJik7
CisKICAgICAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RTbG93Q2FzZShFeGVjU3RhdGUqLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgICAgICB2b2lkIHB1dEJ5
SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgcHJvcGVydHlO
YW1lLCBKU1ZhbHVlKTsKKyAgICAgICAgdm9pZCBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3Ro
KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSk7CiAKICAgICAgICAg
dW5zaWduZWQgZ2V0TmV3VmVjdG9yTGVuZ3RoKHVuc2lnbmVkIGRlc2lyZWRMZW5ndGgpOwogICAg
ICAgICBib29sIGluY3JlYXNlVmVjdG9yTGVuZ3RoKHVuc2lnbmVkIG5ld0xlbmd0aCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAx
MDQzODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc2MSw3ICs3NjEsNyBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Q
cm9wZXJ0eShKU09iamVjCiAgICAgaWYgKGRlc2NyaXB0b3IuaXNHZW5lcmljRGVzY3JpcHRvcigp
KSB7CiAgICAgICAgIGlmICghY3VycmVudC5hdHRyaWJ1dGVzRXF1YWwoZGVzY3JpcHRvcikpIHsK
ICAgICAgICAgICAgIG9iamVjdC0+bWV0aG9kVGFibGUoKS0+ZGVsZXRlUHJvcGVydHkob2JqZWN0
LCBleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgcHV0RGVzY3JpcHRvcihleGVjLCBv
YmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgY3VycmVudC5hdHRyaWJ1dGVzV2l0aE92
ZXJyaWRlKGRlc2NyaXB0b3IpLCBjdXJyZW50KTsKKyAgICAgICAgICAgIHJldHVybiBwdXREZXNj
cmlwdG9yKGV4ZWMsIG9iamVjdCwgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCBjdXJyZW50LmF0
dHJpYnV0ZXNXaXRoT3ZlcnJpZGUoZGVzY3JpcHRvciksIGN1cnJlbnQpOwogICAgICAgICB9CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121704</attachid>
            <date>2012-01-09 11:45:04 -0800</date>
            <delta_ts>2012-01-09 13:44:25 -0800</delta_ts>
            <desc>Fix</desc>
            <filename>75789.patch</filename>
            <type>text/plain</type>
            <size>54504</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTA0NDYyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg4IEBA
CisyMDEyLTAxLTA5ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4K
KworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU3ODkK
KyAgICAgICAgZGVmaW5lT3duUHJvcGVydHkgbm90IGltcGxlbWVudGVkIGZvciBBcnJheSBvYmpl
Y3RzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1w
bGVtZW50cyBzdXBwb3J0IGZvciBnZXR0ZXIvc2V0dGVyICYgbm9uLWRlZmF1bHQgYXR0cmlidXRl
IHByb3BlcnRpZXMgb24gYXJyYXlzLAorICAgICAgICBieSBmb3JjaW5nIHRoZW0gaW50byBhIGRp
Y3Rpb25hcnktbGlrZSAnU3BhcnNlTW9kZScuIFRoaXMgZml4ZXMgfjMwMCB0ZXN0LTI2MgorICAg
ICAgICB0ZXN0IGZhaWx1cmVzLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAg
ICAgICAgICAgLSBVcGRhdGVkIGV4cG9ydHMuCisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMu
Y3BwOgorICAgICAgICAgICAgLSBKU0FycmF5Ojpwb3Agbm93IHJlcXVpcmVzIGFuIGV4ZWMgc3Rh
dGUuCisgICAgICAgICogcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6
OmFycmF5UHJvdG9GdW5jUG9wKToKKyAgICAgICAgICAgIC0gSlNBcnJheTo6cG9wIG5vdyByZXF1
aXJlcyBhbiBleGVjIHN0YXRlLgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAg
ICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVNYXA6OmFkZCk6CisJICAgIC0gQWRkIGEgcG90ZW50
aWFsbHkgZW1wdHkgZW50cnkgaW50byB0aGUgbWFwLgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJh
eVZhbHVlTWFwOjpwdXQpOgorCSAgICAtIENoYW5nZWQgdG8gY2FsbCBzZXR0ZXIuCisgICAgICAg
IChKU0M6OlNwYXJzZUFycmF5RW50cnk6OmdldCk6CisJICAgIC0gY2FsbHMgZ2V0dGVycy4KKyAg
ICAgICAgKEpTQzo6U3BhcnNlQXJyYXlFbnRyeTo6Z2V0Tm9uU3BhcnNlTW9kZSk6CisJICAgIC0g
ZG9lcyBub3QgY2FsbCBnZXR0ZXJzLgorICAgICAgICAoSlNDOjpKU0FycmF5OjplbnRlclNwYXJz
ZU1vZGUpOgorCSAgICAtIENvbnZlcnQgaW50byAnU3BhcnNlTW9kZScgLSByZW1vdmVzIHRoZSB2
ZWN0b3JzLCBkb24ndCBhbGxvdyBpdCB0byBiZSByZWNyZWF0ZWQuCisgICAgICAgIChKU0M6OkpT
QXJyYXk6OnB1dERlc2NyaXB0b3IpOgorCSAgICAtIENyZWF0ZSBhIG51bWVyaWMgcHJvcGVydHkg
YmFzZWQgb24gYSBkZXNjcmlwdG9yLgorICAgICAgICAoSlNDOjpzYW1lVmFsdWUpOgorCSAgICAt
IFNlZSBFUzUuMSA5LjEyLgorICAgICAgICAoSlNDOjpyZWplY3QpOgorCSAgICAtIEhlbHBlciBm
b3IgdGhlIFtbRGVmaW5lT3duUHJvcGVydHldXSBhbGdvcml0aG0uCisgICAgICAgIChKU0M6OkpT
QXJyYXk6OmRlZmluZU93bk51bWVyaWNQcm9wZXJ0eSk6CisJICAgIC0gRGVmaW5lIGFuIGluZGV4
ZWQgcHJvcGVydHkgb24gYW4gYXJyYXkgb2JqZWN0LgorICAgICAgICAoSlNDOjpKU0FycmF5Ojpz
ZXRMZW5ndGhXcml0YWJsZSk6CisgICAgICAgICAgICAtIE1hcmtzIHRoZSBsZW5ndGggcmVhZC1v
bmx5LCBlbnRlcnMgU3BhcnNlTW9kZSBhcyBuZWNlc3NhcnkuCisgICAgICAgIChKU0M6OkpTQXJy
YXk6OmRlZmluZU93blByb3BlcnR5KToKKwkgICAgLSBEZWZpbmVzIGVpdGhlciBhbiBpbmRleGVk
IHByb3BlcnR5IG9yICdsZW5ndGgnIG9uIGFuIGFycmF5IG9iamVjdC4KKyAgICAgICAgKEpTQzo6
SlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCk6CisJICAgIC0gVXBkYXRlZCB0byBj
b3JyZWN0bHkgaGFuZGxlIGFjY2Vzc29yIGRlc2NyaXB0b3JzICYgYXR0cmlidXRlcy4KKyAgICAg
ICAgKEpTQzo6SlNBcnJheTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKKwkgICAgLSBVcGRh
dGVkIHRvIGNvcnJlY3RseSBoYW5kbGUgYWNjZXNzb3IgZGVzY3JpcHRvcnMgJiBhdHRyaWJ1dGVz
LgorICAgICAgICAoSlNDOjpKU0FycmF5OjpwdXQpOgorCSAgICAtIFBhc3Mgc3RyaWN0IG1vZGUg
ZmxhZyB0byBzZXRMZW5ndGguCisgICAgICAgIChKU0M6OkpTQXJyYXk6OnB1dEJ5SW5kZXgpOgor
CSAgICAtIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGggcmVxdWlyZXMgYW4gRXhlY1N0YXRl
KiByYXRoZXIgdGhhbiBhIEpTR2xvYWJsRGF0YSYuCisgICAgICAgIChKU0M6OkpTQXJyYXk6OnB1
dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgpOgorCSAgICAtIFBhc3MgZXhlYyB0byBTcGFyc2VB
cnJheVZhbHVlTWFwOjpwdXQuCisgICAgICAgIChKU0M6OkpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5
QnlJbmRleCk6CisJICAgIC0gRG8gbm90IGFsbG93IGRlbGV0aW9uIG9mIG5vbi1jb25maWd1cmFi
bGUgcHJvcGVydGllcy4KKyAgICAgICAgKEpTQzo6Y29tcGFyZUtleXNGb3JRU29ydCk6CisJICAg
IC0gdXNlZCBpbiBpbXBsZW1lbnRhdGlvbiBvZiBnZXRPd25Qcm9wZXJ0eU5hbWVzLgorICAgICAg
ICAoSlNDOjpKU0FycmF5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKwkgICAgLSBQcm9wZXJ0aWVz
IGluIHRoZSBzcGFyc2UgbWFwIHNob3VsZCBiZSBpdGVyYXRlZCBpbiBvcmRlci4KKyAgICAgICAg
KEpTQzo6SlNBcnJheTo6c2V0TGVuZ3RoKToKKwkgICAgLSBVcGRhdGVkIHRvIHRha2UgYSAnc2hv
dWxkVGhyb3cnIGZsYWcsIHJldHVybiBhIHJlc3VsdCBpbmRpY2F0aW5nIGVycm9yLgorICAgICAg
ICAoSlNDOjpKU0FycmF5Ojpwb3ApOgorCSAgICAtIHBvcCBzaG91bGQgdGhyb3cgYW4gZXJyb3Ig
aWYgbGVuZ3RoIGlzIG5vdCB3cml0YWJsZSwgZXZlbiBpZiB0aGUgYXJyYXkgaXMgZW1wdHkuCisg
ICAgICAgIChKU0M6OkpTQXJyYXk6OnB1c2gpOgorCSAgICAtIHB1dEJ5SW5kZXhCZXlvbmRWZWN0
b3JMZW5ndGggcmVxdWlyZXMgYW4gRXhlY1N0YXRlKiByYXRoZXIgdGhhbiBhIEpTR2xvYWJsRGF0
YSYuCisgICAgICAgIChKU0M6OkpTQXJyYXk6OnNvcnQpOgorCSAgICAtIENoYW5nZWQgJ2dldCcg
dG8gJ2dldE5vblNwYXJzZU1vZGUnIChjYW4ndCBiZSBnZXR0ZXJzIHRvIGNhbGwpLgorICAgICAg
ICAoSlNDOjpKU0FycmF5Ojpjb21wYWN0Rm9yU29ydGluZyk6CisJICAgIC0gQ2hhbmdlZCAnZ2V0
JyB0byAnZ2V0Tm9uU3BhcnNlTW9kZScgKGNhbid0IGJlIGdldHRlcnMgdG8gY2FsbCkuCisgICAg
ICAgICogcnVudGltZS9KU0FycmF5Lmg6CisgICAgICAgIChKU0M6OlNwYXJzZUFycmF5VmFsdWVN
YXA6Omxlbmd0aElzUmVhZE9ubHkpOgorCSAgICAtIENoZWNrIGlmIHRoZSBsZW5ndGggaXMgcmVh
ZCBvbmx5LgorICAgICAgICAoSlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpzZXRMZW5ndGhJc1Jl
YWRPbmx5KToKKwkgICAgLSBNYXJrIHRoZSBsZW5ndGggYXMgcmVhZCBvbmx5LgorICAgICAgICAo
SlNDOjpTcGFyc2VBcnJheVZhbHVlTWFwOjpmaW5kKToKKwkgICAgLSBNb3ZlZCBpbnRvIGhlYWRl
ci4KKyAgICAgICAgKEpTQzo6SlNBcnJheTo6aXNMZW5ndGhXcml0YWJsZSk6CisJICAgIC0gV3Jh
cHMgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6bGVuZ3RoSXNSZWFkT25seS4KKyAgICAgICAgKiBydW50
aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlZmluZU93blByb3Bl
cnR5KToKKyAgICAgICAgICAgIC0gU2hvdWxkIGJlIHJldHVybmluZyB0aGUgcmVzdWx0IG9mIHB1
dERlc2NyaXB0b3IuCisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3I6OmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3Vy
cmVudCk6CisgICAgICAgICAgICAtIEFkZGVkIGF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudCAt
IHRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIG1lcmdlZCB3aXRoIGF0dHJpYnV0ZXNXaXRoT3ZlcnJp
ZGUuCisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuaDoKKyAgICAgICAgICAg
IC0gQWRkZWQgYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50LgorCiAyMDEyLTAxLTA4ICBYaWFu
emh1IFdhbmcgIDx3YW5neGlhbnpodUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgRml4IGNvbXBp
bGF0aW9uIGVycm9yIGFib3V0IExpc3RIYXNoU2V0UmV2ZXJzZUl0ZXJhdG9yCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJldmlzaW9uIDEwNDM5NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSw1IEBACitfX1pOM0pTQzdKU0FycmF5MTdkZWZpbmVPd25Qcm9wZXJ0eUVQTlNf
OEpTT2JqZWN0RVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRVJOU18xOFByb3BlcnR5
RGVzY3JpcHRvckViCitfX1pOM0pTQzdKU0FycmF5OXNldExlbmd0aEVqYgogX0pTQ2hlY2tTY3Jp
cHRTeW50YXgKIF9KU0NsYXNzQ3JlYXRlCiBfSlNDbGFzc1JlbGVhc2UKQEAgLTI4NSw3ICsyODcs
NiBAQCBfX1pOM0pTQzdKU0FycmF5MjVnZXRPd25Qcm9wZXJ0eVNsb3RCeUluCiBfX1pOM0pTQzdK
U0FycmF5MzB0cnlGaW5pc2hDcmVhdGlvblVuaW5pdGlhbGl6ZWRFUk5TXzEySlNHbG9iYWxEYXRh
RWoKIF9fWk4zSlNDN0pTQXJyYXk2c19pbmZvRQogX19aTjNKU0M3SlNBcnJheTdkZXN0cm95RVBO
U182SlNDZWxsRQotX19aTjNKU0M3SlNBcnJheTlzZXRMZW5ndGhFagogX19aTjNKU0M3SlNBcnJh
eUMxRVJOU18xMkpTR2xvYmFsRGF0YUVQTlNfOVN0cnVjdHVyZUUKIF9fWk4zSlNDN0pTQXJyYXlD
MkVSTlNfMTJKU0dsb2JhbERhdGFFUE5TXzlTdHJ1Y3R1cmVFCiBfX1pOM0pTQzdKU0FycmF5RDJF
dgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShy
ZXZpc2lvbiAxMDQzOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlv
bnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTEsOSArNDExLDkgQEAgRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiBvcGVyYXRpb25BcgogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNO
dW1iZXIoYXJyYXktPmxlbmd0aCgpKSk7CiB9CiAgICAgICAgIAotRW5jb2RlZEpTVmFsdWUgREZH
X09QRVJBVElPTiBvcGVyYXRpb25BcnJheVBvcChFeGVjU3RhdGUqLCBKU0FycmF5KiBhcnJheSkK
K0VuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQb3AoRXhlY1N0YXRl
KiBleGVjLCBKU0FycmF5KiBhcnJheSkKIHsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFy
cmF5LT5wb3AoKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhcnJheS0+cG9wKGV4ZWMp
KTsKIH0KICAgICAgICAgCiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmlj
dChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBi
YXNlLCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxMDQzOTcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM4OSw3ICszODksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5UHJvdG9GCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVl
KCk7CiAKICAgICBpZiAoaXNKU0FycmF5KHRoaXNWYWx1ZSkpCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoYXNBcnJheSh0aGlzVmFsdWUpLT5wb3AoKSk7CisgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoYXNBcnJheSh0aGlzVmFsdWUpLT5wb3AoZXhlYykpOwogCiAgICAgSlNP
YmplY3QqIHRoaXNPYmogPSB0aGlzVmFsdWUudG9PYmplY3QoZXhlYyk7CiAgICAgdW5zaWduZWQg
bGVuZ3RoID0gdGhpc09iai0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgp
LnRvVUludDMyKGV4ZWMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
cnJheS5jcHAJKHJldmlzaW9uIDEwNDM5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVk
ZSAiQ2FjaGVkQ2FsbC5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXhlY3V0YWJs
ZS5oIgorI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIlByb3BlcnR5TmFtZUFy
cmF5LmgiCiAjaW5jbHVkZSA8d3RmL0FWTFRyZWUuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgpAQCAtMjEyLDI0ICsyMTMsOTQgQEAgdm9pZCBKU0FycmF5OjpkZXN0cm95KEpTQ2VsbCog
Y2VsbCkKICAgICBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwpLT5KU0FycmF5Ojp+SlNBcnJheSgpOwog
fQogCi1TcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvciBTcGFyc2VBcnJheVZhbHVlTWFwOjpm
aW5kKHVuc2lnbmVkIGkpCitpbmxpbmUgc3RkOjpwYWlyPFNwYXJzZUFycmF5VmFsdWVNYXA6Oml0
ZXJhdG9yLCBib29sPiBTcGFyc2VBcnJheVZhbHVlTWFwOjphZGQoSlNBcnJheSogYXJyYXksIHVu
c2lnbmVkIGkpCiB7Ci0gICAgcmV0dXJuIG1fbWFwLmZpbmQoaSk7CisgICAgU3BhcnNlQXJyYXlF
bnRyeSBlbnRyeTsKKyAgICBzdGQ6OnBhaXI8aXRlcmF0b3IsYm9vbD4gcmVzdWx0ID0gbV9tYXAu
YWRkKGksIGVudHJ5KTsKKyAgICBzaXplX3QgY2FwYWNpdHkgPSBtX21hcC5jYXBhY2l0eSgpOwor
ICAgIGlmIChjYXBhY2l0eSAhPSBtX3JlcG9ydGVkQ2FwYWNpdHkpIHsKKyAgICAgICAgSGVhcDo6
aGVhcChhcnJheSktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdCgoY2FwYWNpdHkgLSBtX3JlcG9ydGVk
Q2FwYWNpdHkpICogKHNpemVvZih1bnNpZ25lZCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KSkpOworICAgICAgICBtX3JlcG9ydGVkQ2FwYWNpdHkgPSBjYXBhY2l0eTsKKyAgICB9Cisg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6
cHV0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNBcnJheSogYXJyYXksIHVuc2lnbmVkIGks
IEpTVmFsdWUgdmFsdWUpCitpbmxpbmUgdm9pZCBTcGFyc2VBcnJheVZhbHVlTWFwOjpwdXQoRXhl
Y1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSwgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSkK
IHsKLSAgICBTcGFyc2VBcnJheUVudHJ5IHRlbXA7Ci0gICAgcGFpcjxNYXA6Oml0ZXJhdG9yLCBi
b29sPiByZXN1bHQgPSBtX21hcC5hZGQoaSwgdGVtcCk7Ci0gICAgcmVzdWx0LmZpcnN0LT5zZWNv
bmQuc2V0KGdsb2JhbERhdGEsIGFycmF5LCB2YWx1ZSk7Ci0gICAgaWYgKCFyZXN1bHQuc2Vjb25k
KSAvLyBwcmUtZXhpc3RpbmcgZW50cnkKKyAgICBTcGFyc2VBcnJheUVudHJ5JiBlbnRyeSA9IGFk
ZChhcnJheSwgaSkuZmlyc3QtPnNlY29uZDsKKworICAgIGlmICghKGVudHJ5LmF0dHJpYnV0ZXMg
JiAoR2V0dGVyIHwgU2V0dGVyKSkpIHsKKyAgICAgICAgaWYgKGVudHJ5LmF0dHJpYnV0ZXMgJiBS
ZWFkT25seSkgeworICAgICAgICAgICAgLy8gRklYTUU6IHNob3VsZCB0aHJvdyBpZiBiZWluZyBj
YWxsZWQgZnJvbSBzdHJpY3QgbW9kZS4KKyAgICAgICAgICAgIC8vIHRocm93VHlwZUVycm9yKGV4
ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBlbnRyeS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgp
LCBhcnJheSwgdmFsdWUpOwogICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgc2l6ZV90IGNh
cGFjaXR5ID0gbV9tYXAuY2FwYWNpdHkoKTsKLSAgICBpZiAoY2FwYWNpdHkgIT0gbV9yZXBvcnRl
ZENhcGFjaXR5KSB7Ci0gICAgICAgIEhlYXA6OmhlYXAoYXJyYXkpLT5yZXBvcnRFeHRyYU1lbW9y
eUNvc3QoKGNhcGFjaXR5IC0gbV9yZXBvcnRlZENhcGFjaXR5KSAqIChzaXplb2YodW5zaWduZWQp
ICsgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpKTsKLSAgICAgICAgbV9yZXBvcnRlZENh
cGFjaXR5ID0gY2FwYWNpdHk7CisgICAgSlNWYWx1ZSBhY2Nlc3NvciA9IGVudHJ5LldyaXRlQmFy
cmllcjxVbmtub3duPjo6Z2V0KCk7CisgICAgQVNTRVJUKGFjY2Vzc29yLmlzR2V0dGVyU2V0dGVy
KCkpOworICAgIEpTT2JqZWN0KiBzZXR0ZXIgPSBhc0dldHRlclNldHRlcihhY2Nlc3NvciktPnNl
dHRlcigpOworICAgIAorICAgIGlmICghc2V0dGVyKSB7CisgICAgICAgIHRocm93VHlwZUVycm9y
KGV4ZWMsICJzZXR0aW5nIGEgcHJvcGVydHkgdGhhdCBoYXMgb25seSBhIGdldHRlciIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5
cGUgY2FsbFR5cGUgPSBzZXR0ZXItPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKHNldHRlciwg
Y2FsbERhdGEpOworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CisgICAgYXJncy5hcHBl
bmQodmFsdWUpOworICAgIGNhbGwoZXhlYywgc2V0dGVyLCBjYWxsVHlwZSwgY2FsbERhdGEsIGFy
cmF5LCBhcmdzKTsKK30KKworaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlFbnRyeTo6Z2V0KFByb3Bl
cnR5U2xvdCYgc2xvdCkgY29uc3QKK3sKKyAgICBKU1ZhbHVlIHZhbHVlID0gV3JpdGVCYXJyaWVy
PFVua25vd24+OjpnZXQoKTsKKyAgICBBU1NFUlQodmFsdWUpOworCisgICAgaWYgKExJS0VMWSgh
dmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSkpIHsKKyAgICAgICAgc2xvdC5zZXRWYWx1ZSh2YWx1ZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBKU09iamVjdCogZ2V0dGVyID0gYXNHZXR0
ZXJTZXR0ZXIodmFsdWUpLT5nZXR0ZXIoKTsKKyAgICBpZiAoIWdldHRlcikgeworICAgICAgICBz
bG90LnNldFVuZGVmaW5lZCgpOworICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgc2xvdC5z
ZXRHZXR0ZXJTbG90KGdldHRlcik7Cit9CisKK2lubGluZSB2b2lkIFNwYXJzZUFycmF5RW50cnk6
OmdldChQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpIGNvbnN0Cit7CisgICAgZGVzY3Jp
cHRvci5zZXREZXNjcmlwdG9yKFdyaXRlQmFycmllcjxVbmtub3duPjo6Z2V0KCksIGF0dHJpYnV0
ZXMpOworfQorCitpbmxpbmUgSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5OjpnZXQoRXhlY1N0YXRl
KiBleGVjLCBKU0FycmF5KiBhcnJheSkgY29uc3QKK3sKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IFdy
aXRlQmFycmllcjxVbmtub3duPjo6Z2V0KCk7CisgICAgQVNTRVJUKHJlc3VsdCk7CisKKyAgICBp
ZiAoTElLRUxZKCFyZXN1bHQuaXNHZXR0ZXJTZXR0ZXIoKSkpCisgICAgICAgIHJldHVybiByZXN1
bHQ7CisKKyAgICBKU09iamVjdCogZ2V0dGVyID0gYXNHZXR0ZXJTZXR0ZXIocmVzdWx0KS0+Z2V0
dGVyKCk7CisgICAgaWYgKCFnZXR0ZXIpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwor
CisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXR0ZXIt
Pm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKGdldHRlciwgY2FsbERhdGEpOworICAgIHJldHVy
biBjYWxsKGV4ZWMsIGdldHRlciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcnJheSwgZXhlYy0+ZW1w
dHlMaXN0KCkpOworfQorCitpbmxpbmUgSlNWYWx1ZSBTcGFyc2VBcnJheUVudHJ5OjpnZXROb25T
cGFyc2VNb2RlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWF0dHJpYnV0ZXMpOworICAgIHJldHVy
biBXcml0ZUJhcnJpZXI8VW5rbm93bj46OmdldCgpOwogfQogCiBpbmxpbmUgdm9pZCBTcGFyc2VB
cnJheVZhbHVlTWFwOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpAQCAtMjM5
LDYgKzMxMCwzMTggQEAgaW5saW5lIHZvaWQgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6dmlzaXRDaAog
ICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaXQtPnNlY29uZCk7CiB9CiAKK3ZvaWQgSlNBcnJheTo6
ZW50ZXJTcGFyc2VNb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBBcnJheVN0
b3JhZ2UqIHN0b3JhZ2UgPSBtX3N0b3JhZ2U7CisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFw
ID0gc3RvcmFnZS0+bV9zcGFyc2VWYWx1ZU1hcDsKKworICAgIGlmICghbWFwKQorICAgICAgICBt
YXAgPSBzdG9yYWdlLT5tX3NwYXJzZVZhbHVlTWFwID0gbmV3IFNwYXJzZUFycmF5VmFsdWVNYXA7
CisKKyAgICBpZiAobWFwLT5zcGFyc2VNb2RlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1h
cC0+c2V0U3BhcnNlTW9kZSgpOworCisgICAgdW5zaWduZWQgdXNlZFZlY3Rvckxlbmd0aCA9IG1p
bihzdG9yYWdlLT5tX2xlbmd0aCwgbV92ZWN0b3JMZW5ndGgpOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCB1c2VkVmVjdG9yTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IHN0b3JhZ2UtPm1fdmVjdG9yW2ldLmdldCgpOworICAgICAgICAvLyBUaGlzIHdpbGwgYWx3
YXlzIGJlIGEgbmV3IGVudHJ5IGluIHRoZSBtYXAsIHNvIG5vIG5lZWQgdG8gY2hlY2sgd2UgY2Fu
IHdyaXRlLAorICAgICAgICAvLyBhbmQgYXR0cmlidXRlcyBhcmUgZGVmYXVsdCBzbyBubyBuZWVk
IHRvIHNldCB0aGVtLgorICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICBtYXAtPmFkZCh0
aGlzLCBpKS5maXJzdC0+c2Vjb25kLnNldChnbG9iYWxEYXRhLCB0aGlzLCB2YWx1ZSk7CisgICAg
fQorCisgICAgQXJyYXlTdG9yYWdlKiBuZXdTdG9yYWdlID0gc3RhdGljX2Nhc3Q8QXJyYXlTdG9y
YWdlKj4oZmFzdE1hbGxvYyhzdG9yYWdlU2l6ZSgwKSkpOworICAgIG1lbWNweShuZXdTdG9yYWdl
LCBtX3N0b3JhZ2UsIHN0b3JhZ2VTaXplKDApKTsKKyAgICBuZXdTdG9yYWdlLT5tX2FsbG9jQmFz
ZSA9IG5ld1N0b3JhZ2U7CisgICAgZmFzdEZyZWUobV9zdG9yYWdlKTsKKyAgICBtX3N0b3JhZ2Ug
PSBuZXdTdG9yYWdlOworICAgIG1faW5kZXhCaWFzID0gMDsKKyAgICBtX3ZlY3Rvckxlbmd0aCA9
IDA7Cit9CisKK3ZvaWQgSlNBcnJheTo6cHV0RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIFNw
YXJzZUFycmF5RW50cnkqIGVudHJ5SW5NYXAsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRv
ciwgUHJvcGVydHlEZXNjcmlwdG9yJiBvbGREZXNjcmlwdG9yKQoreworICAgIGlmIChkZXNjcmlw
dG9yLmlzRGF0YURlc2NyaXB0b3IoKSkgeworICAgICAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSgp
KQorICAgICAgICAgICAgZW50cnlJbk1hcC0+c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywg
ZGVzY3JpcHRvci52YWx1ZSgpKTsKKyAgICAgICAgZW50cnlJbk1hcC0+YXR0cmlidXRlcyA9IGRl
c2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KG9sZERlc2NyaXB0b3IpICYgfihH
ZXR0ZXIgfCBTZXR0ZXIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGRlc2Ny
aXB0b3IuaXNBY2Nlc3NvckRlc2NyaXB0b3IoKSkgeworICAgICAgICBKU09iamVjdCogZ2V0dGVy
ID0gMDsKKyAgICAgICAgaWYgKGRlc2NyaXB0b3IuZ2V0dGVyKCkgJiYgZGVzY3JpcHRvci5nZXR0
ZXIoKS5pc09iamVjdCgpKQorICAgICAgICAgICAgZ2V0dGVyID0gYXNPYmplY3QoZGVzY3JpcHRv
ci5nZXR0ZXIoKSk7CisgICAgICAgIGlmICghZ2V0dGVyICYmIG9sZERlc2NyaXB0b3IuaXNBY2Nl
c3NvckRlc2NyaXB0b3IoKSkgeworICAgICAgICAgICAgaWYgKG9sZERlc2NyaXB0b3IuZ2V0dGVy
KCkgJiYgb2xkRGVzY3JpcHRvci5nZXR0ZXIoKS5pc09iamVjdCgpKQorICAgICAgICAgICAgICAg
IGdldHRlciA9IGFzT2JqZWN0KG9sZERlc2NyaXB0b3IuZ2V0dGVyKCkpOworICAgICAgICB9Cisg
ICAgICAgIEpTT2JqZWN0KiBzZXR0ZXIgPSAwOworICAgICAgICBpZiAoZGVzY3JpcHRvci5zZXR0
ZXIoKSAmJiBkZXNjcmlwdG9yLnNldHRlcigpLmlzT2JqZWN0KCkpCisgICAgICAgICAgICBzZXR0
ZXIgPSBhc09iamVjdChkZXNjcmlwdG9yLnNldHRlcigpKTsKKyAgICAgICAgaWYgKCFzZXR0ZXIg
JiYgb2xkRGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKSB7CisgICAgICAgICAgICBp
ZiAob2xkRGVzY3JpcHRvci5zZXR0ZXIoKSAmJiBvbGREZXNjcmlwdG9yLnNldHRlcigpLmlzT2Jq
ZWN0KCkpCisgICAgICAgICAgICAgICAgc2V0dGVyID0gYXNPYmplY3Qob2xkRGVzY3JpcHRvci5z
ZXR0ZXIoKSk7CisgICAgICAgIH0KKworICAgICAgICBHZXR0ZXJTZXR0ZXIqIGFjY2Vzc29yID0g
R2V0dGVyU2V0dGVyOjpjcmVhdGUoZXhlYyk7CisgICAgICAgIGlmIChnZXR0ZXIpCisgICAgICAg
ICAgICBhY2Nlc3Nvci0+c2V0R2V0dGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2V0dGVyKTsKKyAg
ICAgICAgaWYgKHNldHRlcikKKyAgICAgICAgICAgIGFjY2Vzc29yLT5zZXRTZXR0ZXIoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBzZXR0ZXIpOworCisgICAgICAgIGVudHJ5SW5NYXAtPnNldChleGVjLT5n
bG9iYWxEYXRhKCksIHRoaXMsIGFjY2Vzc29yKTsKKyAgICAgICAgZW50cnlJbk1hcC0+YXR0cmli
dXRlcyA9IGRlc2NyaXB0b3IuYXR0cmlidXRlc092ZXJyaWRpbmdDdXJyZW50KG9sZERlc2NyaXB0
b3IpICYgfkRvbnREZWxldGU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQo
ZGVzY3JpcHRvci5pc0dlbmVyaWNEZXNjcmlwdG9yKCkpOworICAgIGVudHJ5SW5NYXAtPmF0dHJp
YnV0ZXMgPSBkZXNjcmlwdG9yLmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChvbGREZXNjcmlw
dG9yKTsKK30KKworc3RhdGljIGJvb2wgc2FtZVZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSBhLCBKU1ZhbHVlIGIpCit7CisgICAgaWYgKGEuaXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJu
IGIuaXNOdW1iZXIoKSAmJiBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KGEuYXNOdW1iZXIoKSkgPT0g
Yml0d2lzZV9jYXN0PHVpbnQ2NF90PihiLmFzTnVtYmVyKCkpOworICAgIHJldHVybiBKU1ZhbHVl
OjpzdHJpY3RFcXVhbChleGVjLCBhLCBiKTsKK30KKworc3RhdGljIGJvb2wgcmVqZWN0KEV4ZWNT
dGF0ZSogZXhlYywgYm9vbCB0aHJvd0V4Y2VwdGlvbiwgY29uc3QgY2hhciogbWVzc2FnZSkKK3sK
KyAgICBpZiAodGhyb3dFeGNlcHRpb24pCisgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIG1l
c3NhZ2UpOworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gRGVmaW5lZCBpbiBFUzUuMSA4LjEy
LjkKK2Jvb2wgSlNBcnJheTo6ZGVmaW5lT3duTnVtZXJpY1Byb3BlcnR5KEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgaW5kZXgsIFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9vbCB0
aHJvd0V4Y2VwdGlvbikKK3sKKyAgICBBU1NFUlQoaW5kZXggIT0gMHhGRkZGRkZGRik7CisKKyAg
ICBpZiAoIWluU3BhcnNlTW9kZSgpKSB7CisgICAgICAgIC8vIEZhc3QgY2FzZTogd2UncmUgcHV0
dGluZyBhIHJlZ3VsYXIgcHJvcGVydHkgdG8gYSByZWd1bGFyIGFycmF5CisgICAgICAgIC8vIEZJ
WE1FOiB0aGlzIGNhbGwgdG8gYXR0cmlidXRlcyB3aWxsIG1ha2UgYWJzZW50IGF0dHJpYnV0ZXMg
CisgICAgICAgIGlmICghZGVzY3JpcHRvci5hdHRyaWJ1dGVzKCkpIHsKKyAgICAgICAgICAgIEFT
U0VSVCghZGVzY3JpcHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKTsKKyAgICAgICAgICAgIHB1
dEJ5SW5kZXgodGhpcywgZXhlYywgaW5kZXgsIGRlc2NyaXB0b3IudmFsdWUoKSk7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGVudGVyU3BhcnNlTW9kZShl
eGVjLT5nbG9iYWxEYXRhKCkpOworICAgIH0KKworICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1h
cCA9IG1fc3RvcmFnZS0+bV9zcGFyc2VWYWx1ZU1hcDsKKyAgICBBU1NFUlQobWFwKTsKKworICAg
IC8vIDEuIExldCBjdXJyZW50IGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tHZXRPd25Q
cm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggcHJvcGVydHkgbmFtZSBQLgorICAg
IHN0ZDo6cGFpcjxTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVyYXRvcixib29sPiByZXN1bHQgPSBt
YXAtPmFkZCh0aGlzLCBpbmRleCk7CisgICAgU3BhcnNlQXJyYXlFbnRyeSogZW50cnlJbk1hcCA9
ICZyZXN1bHQuZmlyc3QtPnNlY29uZDsKKworICAgIC8vIDIuIExldCBleHRlbnNpYmxlIGJlIHRo
ZSB2YWx1ZSBvZiB0aGUgW1tFeHRlbnNpYmxlXV0gaW50ZXJuYWwgcHJvcGVydHkgb2YgTy4KKyAg
ICAvLyAzLiBJZiBjdXJyZW50IGlzIHVuZGVmaW5lZCBhbmQgZXh0ZW5zaWJsZSBpcyBmYWxzZSwg
dGhlbiBSZWplY3QuCisgICAgLy8gNC4gSWYgY3VycmVudCBpcyB1bmRlZmluZWQgYW5kIGV4dGVu
c2libGUgaXMgdHJ1ZSwgdGhlbgorICAgIGlmIChyZXN1bHQuc2Vjb25kKSB7CisgICAgICAgIGlm
ICghaXNFeHRlbnNpYmxlKCkpIHsKKyAgICAgICAgICAgIG1hcC0+cmVtb3ZlKHJlc3VsdC5maXJz
dCk7CisgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0
ZW1wdGluZyB0byBkZWZpbmUgcHJvcGVydHkgb24gb2JqZWN0IHRoYXQgaXMgbm90IGV4dGVuc2li
bGUuIik7CisgICAgICAgIH0KKworICAgICAgICAvLyA0LmEuIElmIElzR2VuZXJpY0Rlc2NyaXB0
b3IoRGVzYykgb3IgSXNEYXRhRGVzY3JpcHRvcihEZXNjKSBpcyB0cnVlLCB0aGVuIGNyZWF0ZSBh
biBvd24gZGF0YSBwcm9wZXJ0eQorICAgICAgICAvLyBuYW1lZCBQIG9mICBvYmplY3QgTyB3aG9z
ZSBbW1ZhbHVlXV0sIFtbV3JpdGFibGVdXSwgW1tFbnVtZXJhYmxlXV0gYW5kIFtbQ29uZmlndXJh
YmxlXV0gYXR0cmlidXRlIHZhbHVlcworICAgICAgICAvLyBhcmUgZGVzY3JpYmVkIGJ5IERlc2Mu
ICBJZiB0aGUgdmFsdWUgb2YgYW4gYXR0cmlidXRlIGZpZWxkIG9mIERlc2MgaXMgYWJzZW50LCB0
aGUgYXR0cmlidXRlIG9mIHRoZSBuZXdseQorICAgICAgICAvLyBjcmVhdGVkIHByb3BlcnR5IGlz
IHNldCB0byBpdHMgZGVmYXVsdCB2YWx1ZS4KKyAgICAgICAgLy8gNC5iLiBFbHNlLCBEZXNjIG11
c3QgYmUgYW4gYWNjZXNzb3IgUHJvcGVydHkgRGVzY3JpcHRvciBzbywgY3JlYXRlIGFuIG93biBh
Y2Nlc3NvciBwcm9wZXJ0eSBuYW1lZCBQIG9mCisgICAgICAgIC8vIG9iamVjdCBPIHdob3NlIFtb
R2V0XV0sIFtbU2V0XV0sIFtbRW51bWVyYWJsZV1dIGFuZCBbW0NvbmZpZ3VyYWJsZV1dIGF0dHJp
YnV0ZSB2YWx1ZXMgYXJlIGRlc2NyaWJlZCBieQorICAgICAgICAvLyBEZXNjLiBJZiB0aGUgdmFs
dWUgb2YgYW4gYXR0cmlidXRlIGZpZWxkIG9mIERlc2MgaXMgYWJzZW50LCB0aGUgYXR0cmlidXRl
IG9mIHRoZSBuZXdseSBjcmVhdGVkIHByb3BlcnR5CisgICAgICAgIC8vIGlzIHNldCB0byBpdHMg
ZGVmYXVsdCB2YWx1ZS4KKyAgICAgICAgLy8gNC5jLiBSZXR1cm4gdHJ1ZS4KKworICAgICAgICBQ
cm9wZXJ0eURlc2NyaXB0b3IgZGVmYXVsdHM7CisgICAgICAgIGVudHJ5SW5NYXAtPnNldFdpdGhv
dXRXcml0ZUJhcnJpZXIoanNVbmRlZmluZWQoKSk7CisgICAgICAgIGVudHJ5SW5NYXAtPmF0dHJp
YnV0ZXMgPSBEb250RGVsZXRlIHwgRG9udEVudW0gfCBSZWFkT25seTsKKyAgICAgICAgZW50cnlJ
bk1hcC0+Z2V0KGRlZmF1bHRzKTsKKworICAgICAgICBwdXREZXNjcmlwdG9yKGV4ZWMsIGVudHJ5
SW5NYXAsIGRlc2NyaXB0b3IsIGRlZmF1bHRzKTsKKyAgICAgICAgaWYgKGluZGV4ID49IG1fc3Rv
cmFnZS0+bV9sZW5ndGgpCisgICAgICAgICAgICBtX3N0b3JhZ2UtPm1fbGVuZ3RoID0gaW5kZXgg
KyAxOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyA1LiBSZXR1cm4gdHJ1
ZSwgaWYgZXZlcnkgZmllbGQgaW4gRGVzYyBpcyBhYnNlbnQuCisgICAgLy8gNi4gUmV0dXJuIHRy
dWUsIGlmIGV2ZXJ5IGZpZWxkIGluIERlc2MgYWxzbyBvY2N1cnMgaW4gY3VycmVudCBhbmQgdGhl
IHZhbHVlIG9mIGV2ZXJ5IGZpZWxkIGluIERlc2MgaXMgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIGNv
cnJlc3BvbmRpbmcgZmllbGQgaW4gY3VycmVudCB3aGVuIGNvbXBhcmVkIHVzaW5nIHRoZSBTYW1l
VmFsdWUgYWxnb3JpdGhtICg5LjEyKS4KKyAgICBQcm9wZXJ0eURlc2NyaXB0b3IgY3VycmVudDsK
KyAgICBlbnRyeUluTWFwLT5nZXQoY3VycmVudCk7CisgICAgaWYgKGRlc2NyaXB0b3IuaXNFbXB0
eSgpIHx8IGRlc2NyaXB0b3IuZXF1YWxUbyhleGVjLCBjdXJyZW50KSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICAvLyA3LiBJZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJy
ZW50IGlzIGZhbHNlIHRoZW4KKyAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJhYmxlKCkpIHsKKyAg
ICAgICAgLy8gNy5hLiBSZWplY3QsIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIERl
c2MgaXMgdHJ1ZS4KKyAgICAgICAgaWYgKCFkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSgpKQorICAg
ICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcg
dG8gY2hhbmdlIGNvbmZpZ3VyYWJsZSBhdHRyaWJ1dGUgb2YgdW5jb25maWd1cmFibGUgcHJvcGVy
dHkuIik7CisgICAgICAgIC8vIDcuYi4gUmVqZWN0LCBpZiB0aGUgW1tFbnVtZXJhYmxlXV0gZmll
bGQgb2YgRGVzYyBpcyBwcmVzZW50IGFuZCB0aGUgW1tFbnVtZXJhYmxlXV0gZmllbGRzIG9mIGN1
cnJlbnQgYW5kIERlc2MgYXJlIHRoZSBCb29sZWFuIG5lZ2F0aW9uIG9mIGVhY2ggb3RoZXIuCisg
ICAgICAgIGlmIChkZXNjcmlwdG9yLmVudW1lcmFibGVQcmVzZW50KCkgJiYgY3VycmVudC5lbnVt
ZXJhYmxlKCkgIT0gZGVzY3JpcHRvci5lbnVtZXJhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4g
cmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgZW51bWVy
YWJsZSBhdHRyaWJ1dGUgb2YgdW5jb25maWd1cmFibGUgcHJvcGVydHkuIik7CisgICAgfQorCisg
ICAgLy8gOC4gSWYgSXNHZW5lcmljRGVzY3JpcHRvcihEZXNjKSBpcyB0cnVlLCB0aGVuIG5vIGZ1
cnRoZXIgdmFsaWRhdGlvbiBpcyByZXF1aXJlZC4KKyAgICBpZiAoIWRlc2NyaXB0b3IuaXNHZW5l
cmljRGVzY3JpcHRvcigpKSB7CisgICAgICAgIC8vIDkuIEVsc2UsIGlmIElzRGF0YURlc2NyaXB0
b3IoY3VycmVudCkgYW5kIElzRGF0YURlc2NyaXB0b3IoRGVzYykgaGF2ZSBkaWZmZXJlbnQgcmVz
dWx0cywgdGhlbgorICAgICAgICBpZiAoY3VycmVudC5pc0RhdGFEZXNjcmlwdG9yKCkgIT0gZGVz
Y3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAgICAgIC8vIDkuYS4gUmVqZWN0
LCBpZiB0aGUgW1tDb25maWd1cmFibGVdXSBmaWVsZCBvZiBjdXJyZW50IGlzIGZhbHNlLgorICAg
ICAgICAgICAgaWYgKCFjdXJyZW50LmNvbmZpZ3VyYWJsZSgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNoYW5nZSBh
Y2Nlc3MgbWVjaGFuaXNtIGZvciBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKKyAgICAg
ICAgICAgIC8vIDkuYi4gSWYgSXNEYXRhRGVzY3JpcHRvcihjdXJyZW50KSBpcyB0cnVlLCB0aGVu
IGNvbnZlcnQgdGhlIHByb3BlcnR5IG5hbWVkIFAgb2Ygb2JqZWN0IE8gZnJvbSBhCisgICAgICAg
ICAgICAvLyBkYXRhIHByb3BlcnR5IHRvIGFuIGFjY2Vzc29yIHByb3BlcnR5LiBQcmVzZXJ2ZSB0
aGUgZXhpc3RpbmcgdmFsdWVzIG9mIHRoZSBjb252ZXJ0ZWQgcHJvcGVydHnigJhzCisgICAgICAg
ICAgICAvLyBbW0NvbmZpZ3VyYWJsZV1dIGFuZCBbW0VudW1lcmFibGVdXSBhdHRyaWJ1dGVzIGFu
ZCBzZXQgdGhlIHJlc3Qgb2YgdGhlIHByb3BlcnR54oCYcyBhdHRyaWJ1dGVzIHRvCisgICAgICAg
ICAgICAvLyB0aGVpciBkZWZhdWx0IHZhbHVlcy4KKyAgICAgICAgICAgIC8vIDkuYy4gRWxzZSwg
Y29udmVydCB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3QgTyBmcm9tIGFuIGFjY2Vzc29y
IHByb3BlcnR5IHRvIGEgZGF0YSBwcm9wZXJ0eS4KKyAgICAgICAgICAgIC8vIFByZXNlcnZlIHRo
ZSBleGlzdGluZyB2YWx1ZXMgb2YgdGhlIGNvbnZlcnRlZCBwcm9wZXJ0eeKAmHMgW1tDb25maWd1
cmFibGVdXSBhbmQgW1tFbnVtZXJhYmxlXV0KKyAgICAgICAgICAgIC8vIGF0dHJpYnV0ZXMgYW5k
IHNldCB0aGUgcmVzdCBvZiB0aGUgcHJvcGVydHnigJhzIGF0dHJpYnV0ZXMgdG8gdGhlaXIgZGVm
YXVsdCB2YWx1ZXMuCisgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudC5pc0RhdGFEZXNjcmlwdG9y
KCkgJiYgZGVzY3JpcHRvci5pc0RhdGFEZXNjcmlwdG9yKCkpIHsKKyAgICAgICAgICAgIC8vIDEw
LiBFbHNlLCBpZiBJc0RhdGFEZXNjcmlwdG9yKGN1cnJlbnQpIGFuZCBJc0RhdGFEZXNjcmlwdG9y
KERlc2MpIGFyZSBib3RoIHRydWUsIHRoZW4KKyAgICAgICAgICAgIC8vIDEwLmEuIElmIHRoZSBb
W0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4KKyAgICAgICAg
ICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSAmJiAhY3VycmVudC53cml0YWJsZSgpKSB7
CisgICAgICAgICAgICAgICAgLy8gMTAuYS5pLiBSZWplY3QsIGlmIHRoZSBbW1dyaXRhYmxlXV0g
ZmllbGQgb2YgY3VycmVudCBpcyBmYWxzZSBhbmQgdGhlIFtbV3JpdGFibGVdXSBmaWVsZCBvZiBE
ZXNjIGlzIHRydWUuCisgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3Iud3JpdGFibGUoKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwg
IkF0dGVtcHRpbmcgdG8gY2hhbmdlIHdyaXRhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJs
ZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgICAgICAgICAvLyAxMC5hLmlpLiBJZiB0aGUgW1tXcml0
YWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRoZW4KKyAgICAgICAgICAgICAgICAv
LyAxMC5hLmlpLjEuIFJlamVjdCwgaWYgdGhlIFtbVmFsdWVdXSBmaWVsZCBvZiBEZXNjIGlzIHBy
ZXNlbnQgYW5kIFNhbWVWYWx1ZShEZXNjLltbVmFsdWVdXSwgY3VycmVudC5bW1ZhbHVlXV0pIGlz
IGZhbHNlLgorICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlKCkgJiYgIXNhbWVW
YWx1ZShleGVjLCBkZXNjcmlwdG9yLnZhbHVlKCksIGN1cnJlbnQudmFsdWUoKSkpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0
aW5nIHRvIGNoYW5nZSB2YWx1ZSBvZiBhIHJlYWRvbmx5IHByb3BlcnR5LiIpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgLy8gMTAuYi4gZWxzZSwgdGhlIFtbQ29uZmlndXJhYmxlXV0gZmll
bGQgb2YgY3VycmVudCBpcyB0cnVlLCBzbyBhbnkgY2hhbmdlIGlzIGFjY2VwdGFibGUuCisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyAxMS4gRWxzZSwgSXNBY2Nlc3NvckRlc2NyaXB0
b3IoY3VycmVudCkgYW5kIElzQWNjZXNzb3JEZXNjcmlwdG9yKERlc2MpIGFyZSBib3RoIHRydWUg
c28sIGlmIHRoZSBbW0NvbmZpZ3VyYWJsZV1dIGZpZWxkIG9mIGN1cnJlbnQgaXMgZmFsc2UsIHRo
ZW4KKyAgICAgICAgICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSkgeworICAgICAgICAg
ICAgICAgIC8vIDExLmkuIFJlamVjdCwgaWYgdGhlIFtbU2V0XV0gZmllbGQgb2YgRGVzYyBpcyBw
cmVzZW50IGFuZCBTYW1lVmFsdWUoRGVzYy5bW1NldF1dLCBjdXJyZW50LltbU2V0XV0pIGlzIGZh
bHNlLgorICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yLnNldHRlclByZXNlbnQoKSAmJiBk
ZXNjcmlwdG9yLnNldHRlcigpICE9IGN1cnJlbnQuc2V0dGVyKCkpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dFeGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGNo
YW5nZSB0aGUgc2V0dGVyIG9mIGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAgICAg
ICAgICAgICAgIC8vIDExLmlpLiBSZWplY3QsIGlmIHRoZSBbW0dldF1dIGZpZWxkIG9mIERlc2Mg
aXMgcHJlc2VudCBhbmQgU2FtZVZhbHVlKERlc2MuW1tHZXRdXSwgY3VycmVudC5bW0dldF1dKSBp
cyBmYWxzZS4KKyAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvci5nZXR0ZXJQcmVzZW50KCkg
JiYgZGVzY3JpcHRvci5nZXR0ZXIoKSAhPSBjdXJyZW50LmdldHRlcigpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gcmVqZWN0KGV4ZWMsIHRocm93RXhjZXB0aW9uLCAiQXR0ZW1wdGluZyB0
byBjaGFuZ2UgdGhlIGdldHRlciBvZiBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIDEyLiBGb3IgZWFjaCBhdHRy
aWJ1dGUgZmllbGQgb2YgRGVzYyB0aGF0IGlzIHByZXNlbnQsIHNldCB0aGUgY29ycmVzcG9uZGlu
Z2x5IG5hbWVkIGF0dHJpYnV0ZSBvZiB0aGUgcHJvcGVydHkgbmFtZWQgUCBvZiBvYmplY3QgTyB0
byB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkLgorICAgIHB1dERlc2NyaXB0b3IoZXhlYywgZW50cnlJ
bk1hcCwgZGVzY3JpcHRvciwgY3VycmVudCk7CisgICAgLy8gMTMuIFJldHVybiB0cnVlLgorICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIEpTQXJyYXk6OnNldExlbmd0aFdyaXRhYmxlKEV4ZWNT
dGF0ZSogZXhlYywgYm9vbCB3cml0YWJsZSkKK3sKKyAgICBBU1NFUlQoaXNMZW5ndGhXcml0YWJs
ZSgpIHx8ICF3cml0YWJsZSk7CisgICAgaWYgKCFpc0xlbmd0aFdyaXRhYmxlKCkgfHwgd3JpdGFi
bGUpCisgICAgICAgIHJldHVybjsKKworICAgIGVudGVyU3BhcnNlTW9kZShleGVjLT5nbG9iYWxE
YXRhKCkpOworCisgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gbV9zdG9yYWdlLT5tX3Nw
YXJzZVZhbHVlTWFwOworICAgIEFTU0VSVChtYXApOworICAgIG1hcC0+c2V0TGVuZ3RoSXNSZWFk
T25seSgpOworfQorCisvLyBEZWZpbmVkIGluIEVTNS4xIDE1LjQuNS4xCitib29sIEpTQXJyYXk6
OmRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0
b3IsIGJvb2wgdGhyb3dFeGNlcHRpb24pCit7CisgICAgSlNBcnJheSogYXJyYXkgPSBzdGF0aWNf
Y2FzdDxKU0FycmF5Kj4ob2JqZWN0KTsKKworICAgIC8vIDMuIElmIFAgaXMgImxlbmd0aCIsIHRo
ZW4KKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgp
IHsKKyAgICAgICAgLy8gQWxsIHBhdGhzIHRocm91Z2ggbGVuZ3RoIGRlZmluaXRpb24gY2FsbCB0
aGUgZGVmYXVsdCBbW0RlZmluZU93blByb3BlcnR5XV0sIGhlbmNlOgorICAgICAgICAvLyBmcm9t
IEVTNS4xIDguMTIuOSA3LmEuCisgICAgICAgIGlmIChkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSgp
KQorICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVt
cHRpbmcgdG8gY2hhbmdlIGNvbmZpZ3VyYWJsZSBhdHRyaWJ1dGUgb2YgdW5jb25maWd1cmFibGUg
cHJvcGVydHkuIik7CisgICAgICAgIC8vIGZyb20gRVM1LjEgOC4xMi45IDcuYi4KKyAgICAgICAg
aWYgKGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIHJlamVjdChl
eGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGVudW1lcmFibGUgYXR0
cmlidXRlIG9mIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOworCisgICAgICAgIC8vIGEuIElm
IHRoZSBbW1ZhbHVlXV0gZmllbGQgb2YgRGVzYyBpcyBhYnNlbnQsIHRoZW4KKyAgICAgICAgLy8g
YS5pLiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBkZWZhdWx0IFtbRGVmaW5lT3du
UHJvcGVydHldXSBpbnRlcm5hbCBtZXRob2QgKDguMTIuOSkgb24gQSBwYXNzaW5nICJsZW5ndGgi
LCBEZXNjLCBhbmQgVGhyb3cgYXMgYXJndW1lbnRzLgorICAgICAgICBpZiAoZGVzY3JpcHRvci5p
c0FjY2Vzc29yRGVzY3JpcHRvcigpKQorICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0
aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIGFjY2VzcyBtZWNoYW5pc20gZm9y
IGFuIHVuY29uZmlndXJhYmxlIHByb3BlcnR5LiIpOworICAgICAgICAvLyBmcm9tIEVTNS4xIDgu
MTIuOSAxMC5hLgorICAgICAgICBpZiAoIWFycmF5LT5pc0xlbmd0aFdyaXRhYmxlKCkgJiYgZGVz
Y3JpcHRvci53cml0YWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIHJlamVjdChleGVjLCB0aHJv
d0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHdyaXRhYmxlIGF0dHJpYnV0ZSBvZiB1
bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKKyAgICAgICAgLy8gVGhpcyBkZXNjcmlwdG9yIGlz
IGVpdGhlciBqdXN0IG1ha2luZyBsZW5ndGggcmVhZC1vbmx5LCBvciBjaGFuZ2luZyBub3RoaW5n
IQorICAgICAgICBpZiAoIWRlc2NyaXB0b3IudmFsdWUoKSkgeworICAgICAgICAgICAgYXJyYXkt
PnNldExlbmd0aFdyaXRhYmxlKGV4ZWMsIGRlc2NyaXB0b3Iud3JpdGFibGUoKSk7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gYi4gTGV0
IG5ld0xlbkRlc2MgYmUgYSBjb3B5IG9mIERlc2MuCisgICAgICAgIC8vIGMuIExldCBuZXdMZW4g
YmUgVG9VaW50MzIoRGVzYy5bW1ZhbHVlXV0pLgorICAgICAgICB1bnNpZ25lZCBuZXdMZW4gPSBk
ZXNjcmlwdG9yLnZhbHVlKCkudG9VSW50MzIoZXhlYyk7CisgICAgICAgIC8vIGQuIElmIG5ld0xl
biBpcyBub3QgZXF1YWwgdG8gVG9OdW1iZXIoIERlc2MuW1tWYWx1ZV1dKSwgdGhyb3cgYSBSYW5n
ZUVycm9yIGV4Y2VwdGlvbi4KKyAgICAgICAgaWYgKG5ld0xlbiAhPSBkZXNjcmlwdG9yLnZhbHVl
KCkudG9OdW1iZXIoZXhlYykpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRl
UmFuZ2VFcnJvcihleGVjLCAiSW52YWxpZCBhcnJheSBsZW5ndGgiKSk7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICAvLyBCYXNlZCBvbiBTYW1lVmFsdWUg
Y2hlY2sgaW4gOC4xMi45LCB0aGlzIGlzIGFsd2F5cyBva2F5LgorICAgICAgICBpZiAobmV3TGVu
ID09IGFycmF5LT5sZW5ndGgoKSkgeworICAgICAgICAgICAgYXJyYXktPnNldExlbmd0aFdyaXRh
YmxlKGV4ZWMsIGRlc2NyaXB0b3Iud3JpdGFibGUoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGUuIFNldCBuZXdMZW5EZXNjLltbVmFsdWVdIHRv
IG5ld0xlbi4KKyAgICAgICAgLy8gZi4gSWYgbmV3TGVuID49IG9sZExlbiwgdGhlbgorICAgICAg
ICAvLyBmLmkuIFJldHVybiB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIGRlZmF1bHQgW1tEZWZp
bmVPd25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCAoOC4xMi45KSBvbiBBIHBhc3NpbmcgImxl
bmd0aCIsIG5ld0xlbkRlc2MsIGFuZCBUaHJvdyBhcyBhcmd1bWVudHMuCisgICAgICAgIC8vIGcu
IFJlamVjdCBpZiBvbGRMZW5EZXNjLltbV3JpdGFibGVdXSBpcyBmYWxzZS4KKyAgICAgICAgaWYg
KCFhcnJheS0+aXNMZW5ndGhXcml0YWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIHJlamVjdChl
eGVjLCB0aHJvd0V4Y2VwdGlvbiwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHZhbHVlIG9mIGEgcmVh
ZG9ubHkgcHJvcGVydHkuIik7CisgICAgICAgIAorICAgICAgICAvLyBoLiBJZiBuZXdMZW5EZXNj
LltbV3JpdGFibGVdXSBpcyBhYnNlbnQgb3IgaGFzIHRoZSB2YWx1ZSB0cnVlLCBsZXQgbmV3V3Jp
dGFibGUgYmUgdHJ1ZS4KKyAgICAgICAgLy8gaS4gRWxzZSwKKyAgICAgICAgLy8gaS5pLiBOZWVk
IHRvIGRlZmVyIHNldHRpbmcgdGhlIFtbV3JpdGFibGVdXSBhdHRyaWJ1dGUgdG8gZmFsc2UgaW4g
Y2FzZSBhbnkgZWxlbWVudHMgY2Fubm90IGJlIGRlbGV0ZWQuCisgICAgICAgIC8vIGkuaWkuIExl
dCBuZXdXcml0YWJsZSBiZSBmYWxzZS4KKyAgICAgICAgLy8gaS5paWkuIFNldCBuZXdMZW5EZXNj
LltbV3JpdGFibGVdIHRvIHRydWUuCisgICAgICAgIC8vIGouIExldCBzdWNjZWVkZWQgYmUgdGhl
IHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBkZWZhdWx0IFtbRGVmaW5lT3duUHJvcGVydHldXSBpbnRl
cm5hbCBtZXRob2QgKDguMTIuOSkgb24gQSBwYXNzaW5nICJsZW5ndGgiLCBuZXdMZW5EZXNjLCBh
bmQgVGhyb3cgYXMgYXJndW1lbnRzLgorICAgICAgICAvLyBrLiBJZiBzdWNjZWVkZWQgaXMgZmFs
c2UsIHJldHVybiBmYWxzZS4KKyAgICAgICAgLy8gbC4gV2hpbGUgbmV3TGVuIDwgb2xkTGVuIHJl
cGVhdCwKKyAgICAgICAgLy8gbC5pLiBTZXQgb2xkTGVuIHRvIG9sZExlbiDigJMgMS4KKyAgICAg
ICAgLy8gbC5paS4gTGV0IGRlbGV0ZVN1Y2NlZWRlZCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcg
dGhlIFtbRGVsZXRlXV0gaW50ZXJuYWwgbWV0aG9kIG9mIEEgcGFzc2luZyBUb1N0cmluZyhvbGRM
ZW4pIGFuZCBmYWxzZSBhcyBhcmd1bWVudHMuCisgICAgICAgIC8vIGwuaWlpLiBJZiBkZWxldGVT
dWNjZWVkZWQgaXMgZmFsc2UsIHRoZW4KKyAgICAgICAgaWYgKCFhcnJheS0+c2V0TGVuZ3RoKG5l
d0xlbiwgdGhyb3dFeGNlcHRpb24pKSB7CisgICAgICAgICAgICAvLyAxLiBTZXQgbmV3TGVuRGVz
Yy5bW1ZhbHVlXSB0byBvbGRMZW4rMS4KKyAgICAgICAgICAgIC8vIDIuIElmIG5ld1dyaXRhYmxl
IGlzIGZhbHNlLCBzZXQgbmV3TGVuRGVzYy5bW1dyaXRhYmxlXSB0byBmYWxzZS4KKyAgICAgICAg
ICAgIC8vIDMuIENhbGwgdGhlIGRlZmF1bHQgW1tEZWZpbmVPd25Qcm9wZXJ0eV1dIGludGVybmFs
IG1ldGhvZCAoOC4xMi45KSBvbiBBIHBhc3NpbmcgImxlbmd0aCIsIG5ld0xlbkRlc2MsIGFuZCBm
YWxzZSBhcyBhcmd1bWVudHMuCisgICAgICAgICAgICAvLyA0LiBSZWplY3QuCisgICAgICAgICAg
ICBhcnJheS0+c2V0TGVuZ3RoV3JpdGFibGUoZXhlYywgZGVzY3JpcHRvci53cml0YWJsZSgpKTsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIG0uIElm
IG5ld1dyaXRhYmxlIGlzIGZhbHNlLCB0aGVuCisgICAgICAgIC8vaS4gQ2FsbCB0aGUgZGVmYXVs
dCBbW0RlZmluZU93blByb3BlcnR5XV0gaW50ZXJuYWwgbWV0aG9kICg4LjEyLjkpIG9uIEEgcGFz
c2luZyAibGVuZ3RoIiwgUHJvcGVydHkgRGVzY3JpcHRvcntbW1dyaXRhYmxlXV06IGZhbHNlfSwg
YW5kIGZhbHNlIGFzIGFyZ3VtZW50cy4gVGhpcyBjYWxsIHdpbGwgYWx3YXlzIHJldHVybiB0cnVl
LgorICAgICAgICBhcnJheS0+c2V0TGVuZ3RoV3JpdGFibGUoZXhlYywgZGVzY3JpcHRvci53cml0
YWJsZSgpKTsKKyAgICAgICAgLy8gbi4gUmV0dXJuIHRydWUuCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIC8vIDQuIEVsc2UgaWYgUCBpcyBhbiBhcnJheSBpbmRleCAoMTUuNCks
IHRoZW4KKyAgICBib29sIGlzQXJyYXlJbmRleDsKKyAgICAvLyBhLiBMZXQgaW5kZXggYmUgVG9V
aW50MzIoUCkuCisgICAgdW5zaWduZWQgaW5kZXggPSBwcm9wZXJ0eU5hbWUudG9BcnJheUluZGV4
KGlzQXJyYXlJbmRleCk7CisgICAgaWYgKGlzQXJyYXlJbmRleCkgeworICAgICAgICAvLyBiLiBS
ZWplY3QgaWYgaW5kZXggPj0gb2xkTGVuIGFuZCBvbGRMZW5EZXNjLltbV3JpdGFibGVdXSBpcyBm
YWxzZS4KKyAgICAgICAgaWYgKGluZGV4ID49IGFycmF5LT5sZW5ndGgoKSAmJiAhYXJyYXktPmlz
TGVuZ3RoV3JpdGFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiByZWplY3QoZXhlYywgdGhyb3dF
eGNlcHRpb24sICJBdHRlbXB0aW5nIHRvIGRlZmluZSBudW1lcmljIHByb3BlcnR5IG9uIGFycmF5
IHdpdGggbm9uLXdyaXRhYmxlIGxlbmd0aCBwcm9wZXJ0eS4iKTsKKyAgICAgICAgLy8gYy4gTGV0
IHN1Y2NlZWRlZCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIGRlZmF1bHQgW1tEZWZpbmVP
d25Qcm9wZXJ0eV1dIGludGVybmFsIG1ldGhvZCAoOC4xMi45KSBvbiBBIHBhc3NpbmcgUCwgRGVz
YywgYW5kIGZhbHNlIGFzIGFyZ3VtZW50cy4KKyAgICAgICAgLy8gZC4gUmVqZWN0IGlmIHN1Y2Nl
ZWRlZCBpcyBmYWxzZS4KKyAgICAgICAgLy8gZS4gSWYgaW5kZXggPj0gb2xkTGVuCisgICAgICAg
IC8vIGUuaS4gU2V0IG9sZExlbkRlc2MuW1tWYWx1ZV1dIHRvIGluZGV4ICsgMS4KKyAgICAgICAg
Ly8gZS5paS4gQ2FsbCB0aGUgZGVmYXVsdCBbW0RlZmluZU93blByb3BlcnR5XV0gaW50ZXJuYWwg
bWV0aG9kICg4LjEyLjkpIG9uIEEgcGFzc2luZyAibGVuZ3RoIiwgb2xkTGVuRGVzYywgYW5kIGZh
bHNlIGFzIGFyZ3VtZW50cy4gVGhpcyBjYWxsIHdpbGwgYWx3YXlzIHJldHVybiB0cnVlLgorICAg
ICAgICAvLyBmLiBSZXR1cm4gdHJ1ZS4KKyAgICAgICAgcmV0dXJuIGFycmF5LT5kZWZpbmVPd25O
dW1lcmljUHJvcGVydHkoZXhlYywgaW5kZXgsIGRlc2NyaXB0b3IsIHRocm93RXhjZXB0aW9uKTsK
KyAgICB9CisKKyAgICByZXR1cm4gSlNPYmplY3Q6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7Cit9CisKIGJv
b2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgaSwgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEpTQXJy
YXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheSo+KGNlbGwpOwpAQCAtMjU5LDcgKzY0Miw3
IEBAIGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCgKICAgICB9IGVsc2Ug
aWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlVmFsdWVNYXAp
IHsKICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3IgaXQgPSBtYXAtPmZpbmQo
aSk7CiAgICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsKLSAgICAgICAgICAgIHNs
b3Quc2V0VmFsdWUoaXQtPnNlY29uZC5nZXQoKSk7CisgICAgICAgICAgICBpdC0+c2Vjb25kLmdl
dChzbG90KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAt
MzA3LDcgKzY5MCw3IEBAIGJvb2wgSlNBcnJheTo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEoK
ICAgICAgICAgfSBlbHNlIGlmIChTcGFyc2VBcnJheVZhbHVlTWFwKiBtYXAgPSBzdG9yYWdlLT5t
X3NwYXJzZVZhbHVlTWFwKSB7CiAgICAgICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjppdGVy
YXRvciBpdCA9IG1hcC0+ZmluZChpKTsKICAgICAgICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZv
dW5kKCkpIHsKLSAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoaXQtPnNl
Y29uZC5nZXQoKSwgMCk7CisgICAgICAgICAgICAgICAgaXQtPnNlY29uZC5nZXQoZGVzY3JpcHRv
cik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KQEAgLTMzMiw3ICs3MTUsNyBAQCB2b2lkIEpTQXJyYXk6OnB1dChKU0NlbGwqIGNlbGwsIEV4
ZWNTdGF0CiAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhl
YywgIkludmFsaWQgYXJyYXkgbGVuZ3RoIikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9Ci0gICAgICAgIHRoaXNPYmplY3QtPnNldExlbmd0aChuZXdMZW5ndGgpOworICAgICAgICB0
aGlzT2JqZWN0LT5zZXRMZW5ndGgobmV3TGVuZ3RoLCBzbG90LmlzU3RyaWN0TW9kZSgpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzcyLDEyICs3NTUsMTQgQEAgdm9pZCBKU0FycmF5
OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRQogICAgIH0KIAogICAgIC8vIEZvciBhbGwgb3Ro
ZXIgY2FzZXMsIGNhbGwgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aC4KLSAgICB0aGlzT2Jq
ZWN0LT5wdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKGV4ZWMtPmdsb2JhbERhdGEoKSwgaSwg
dmFsdWUpOworICAgIHRoaXNPYmplY3QtPnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhl
YywgaSwgdmFsdWUpOwogICAgIHRoaXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3koKTsKIH0KIAot
TkVWRVJfSU5MSU5FIHZvaWQgSlNBcnJheTo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUpCitORVZF
Ul9JTkxJTkUgdm9pZCBKU0FycmF5OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSkKIHsKKyAgICBKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CisKICAgICAvLyBpIHNob3VsZCBi
ZSBhIHZhbGlkIGFycmF5IGluZGV4IHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgY3VycmVudCB2ZWN0
b3IuCiAgICAgQVNTRVJUKGkgPj0gbV92ZWN0b3JMZW5ndGgpOwogICAgIEFTU0VSVChpIDw9IE1B
WF9BUlJBWV9JTkRFWCk7CkBAIC0zODUsMTUgKzc3MCwxMiBAQCBORVZFUl9JTkxJTkUgdm9pZCBK
U0FycmF5OjpwdXRCeUluZGV4QmV5CiAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0gbV9zdG9y
YWdlOwogICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlVmFs
dWVNYXA7CiAKLSAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgotICAgIHVuc2ln
bmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOwotICAgIGlmIChpID49IGxlbmd0aCkgewot
ICAgICAgICBsZW5ndGggPSBpICsgMTsKLSAgICAgICAgc3RvcmFnZS0+bV9sZW5ndGggPSBsZW5n
dGg7Ci0gICAgfQotCiAgICAgLy8gRmlyc3QsIGhhbmRsZSBjYXNlcyB3aGVyZSB3ZSBkb24ndCBj
dXJyZW50bHkgaGF2ZSBhIHNwYXJzZSBtYXAuCiAgICAgaWYgKExJS0VMWSghbWFwKSkgeworICAg
ICAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgorICAgICAgICBpZiAoaSA+PSBz
dG9yYWdlLT5tX2xlbmd0aCkKKyAgICAgICAgICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gaSArIDE7
CisKICAgICAgICAgLy8gQ2hlY2sgdGhhdCBpdCBpcyBzZW5zaWJsZSB0byBzdGlsbCBiZSB1c2lu
ZyBhIHZlY3RvciwgYW5kIHRoZW4gdHJ5IHRvIGdyb3cgdGhlIHZlY3Rvci4KICAgICAgICAgaWYg
KExJS0VMWSgoaXNEZW5zZUVub3VnaEZvclZlY3RvcihpLCBzdG9yYWdlLT5tX251bVZhbHVlc0lu
VmVjdG9yKSkgJiYgaW5jcmVhc2VWZWN0b3JMZW5ndGgoaSArIDEpKSkgewogICAgICAgICAgICAg
Ly8gc3VjY2VzcyEgLSByZXJlYWQgbV9zdG9yYWdlIHNpbmNlIGl0IGhhcyBsaWtlbHkgYmVlbiBy
ZWFsbG9jYXRlZCwgYW5kIHN0b3JlIHRvIHRoZSB2ZWN0b3IuCkBAIC00MDUsMTUgKzc4NywyNyBA
QCBORVZFUl9JTkxJTkUgdm9pZCBKU0FycmF5OjpwdXRCeUluZGV4QmV5CiAgICAgICAgIC8vIFdl
IGRvbid0IHdhbnQgdG8sIG9yIGNhbid0IHVzZSBhIHZlY3RvciB0byBob2xkIHRoaXMgcHJvcGVy
dHkgLSBhbGxvY2F0ZSBhIHNwYXJzZSBtYXAgJiBhZGQgdGhlIHZhbHVlLgogICAgICAgICBtYXAg
PSBuZXcgU3BhcnNlQXJyYXlWYWx1ZU1hcDsKICAgICAgICAgc3RvcmFnZS0+bV9zcGFyc2VWYWx1
ZU1hcCA9IG1hcDsKLSAgICAgICAgbWFwLT5wdXQoZ2xvYmFsRGF0YSwgdGhpcywgaSwgdmFsdWUp
OworICAgICAgICBtYXAtPnB1dChleGVjLCB0aGlzLCBpLCB2YWx1ZSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKKyAgICAvLyBVcGRhdGUgbV9sZW5ndGggaWYgbmVjZXNzYXJ5LgorICAgIHVu
c2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3RoOworICAgIGlmIChpID49IGxlbmd0aCkg
eworICAgICAgICAvLyBQcm9oaWJpdCBncm93aW5nIHRoZSBhcnJheSBpZiBsZW5ndGggaXMgbm90
IHdyaXRhYmxlLgorICAgICAgICBpZiAobWFwLT5sZW5ndGhJc1JlYWRPbmx5KCkpIHsKKyAgICAg
ICAgICAgIC8vIEZJWE1FOiBzaG91bGQgdGhyb3cgaW4gc3RyaWN0IG1vZGUuCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbGVuZ3RoID0gaSArIDE7CisgICAgICAgIHN0
b3JhZ2UtPm1fbGVuZ3RoID0gbGVuZ3RoOworICAgIH0KKwogICAgIC8vIFdlIGFyZSBjdXJyZW50
bHkgdXNpbmcgYSBtYXAgLSBjaGVjayB3aGV0aGVyIHdlIHN0aWxsIHdhbnQgdG8gYmUgZG9pbmcg
c28uCiAgICAgLy8gV2Ugd2lsbCBjb250aW51ZSAgdG8gdXNlIGEgc3BhcnNlIG1hcCBpZiBTcGFy
c2VNb2RlIGlzIHNldCwgYSB2ZWN0b3Igd291bGQgYmUgdG9vIHNwYXJzZSwgb3IgaWYgYWxsb2Nh
dGlvbiBmYWlscy4KICAgICB1bnNpZ25lZCBudW1WYWx1ZXNJbkFycmF5ID0gc3RvcmFnZS0+bV9u
dW1WYWx1ZXNJblZlY3RvciArIG1hcC0+c2l6ZSgpOwogICAgIGlmIChtYXAtPnNwYXJzZU1vZGUo
KSB8fCAhaXNEZW5zZUVub3VnaEZvclZlY3RvcihsZW5ndGgsIG51bVZhbHVlc0luQXJyYXkpIHx8
ICFpbmNyZWFzZVZlY3Rvckxlbmd0aChsZW5ndGgpKSB7Ci0gICAgICAgIG1hcC0+cHV0KGdsb2Jh
bERhdGEsIHRoaXMsIGksIHZhbHVlKTsKKyAgICAgICAgbWFwLT5wdXQoZXhlYywgdGhpcywgaSwg
dmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC00MjUsNyArODE5LDcgQEAgTkVW
RVJfSU5MSU5FIHZvaWQgSlNBcnJheTo6cHV0QnlJbmRleEJleQogICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiogdmVjdG9yID0gc3RvcmFnZS0+bV92ZWN0b3I7CiAgICAgU3BhcnNlQXJyYXlWYWx1
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFwLT5lbmQoKTsKICAgICBmb3IgKFNwYXJzZUFy
cmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCi0gICAgICAgIHZlY3RvcltpdC0+Zmlyc3RdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBp
dC0+c2Vjb25kLmdldCgpKTsKKyAgICAgICAgdmVjdG9yW2l0LT5maXJzdF0uc2V0KGdsb2JhbERh
dGEsIHRoaXMsIGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpKTsKICAgICBkZWxldGUgbWFw
OwogICAgIHN0b3JhZ2UtPm1fc3BhcnNlVmFsdWVNYXAgPSAwOwogCkBAIC00NTUsMzUgKzg0OSwz
NSBAQCBib29sIEpTQXJyYXk6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0NlCiAgICAgSlNBcnJh
eSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0FycmF5Kj4oY2VsbCk7CiAgICAgdGhpc09iamVjdC0+
Y2hlY2tDb25zaXN0ZW5jeSgpOwogCisgICAgaWYgKGkgPiBNQVhfQVJSQVlfSU5ERVgpCisgICAg
ICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0eSh0aGlz
T2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsKKwogICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IHRoaXNPYmplY3QtPm1fc3RvcmFnZTsKICAgICAKICAgICBpZiAoaSA8
IHRoaXNPYmplY3QtPm1fdmVjdG9yTGVuZ3RoKSB7CiAgICAgICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiYgdmFsdWVTbG90ID0gc3RvcmFnZS0+bV92ZWN0b3JbaV07Ci0gICAgICAgIGlmICghdmFs
dWVTbG90KSB7Ci0gICAgICAgICAgICB0aGlzT2JqZWN0LT5jaGVja0NvbnNpc3RlbmN5KCk7Ci0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICh2YWx1ZVNsb3QpIHsKKyAgICAg
ICAgICAgIHZhbHVlU2xvdC5jbGVhcigpOworICAgICAgICAgICAgLS1zdG9yYWdlLT5tX251bVZh
bHVlc0luVmVjdG9yOwogICAgICAgICB9Ci0gICAgICAgIHZhbHVlU2xvdC5jbGVhcigpOwotICAg
ICAgICAtLXN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7Ci0gICAgICAgIHRoaXNPYmplY3Qt
PmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAg
aWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1fc3BhcnNlVmFsdWVNYXAp
IHsKKyAgICB9IGVsc2UgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IHN0b3JhZ2UtPm1f
c3BhcnNlVmFsdWVNYXApIHsKICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcDo6aXRlcmF0b3Ig
aXQgPSBtYXAtPmZpbmQoaSk7CiAgICAgICAgIGlmIChpdCAhPSBtYXAtPm5vdEZvdW5kKCkpIHsK
KyAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLmF0dHJpYnV0ZXMgJiBEb250RGVsZXRlKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIG1hcC0+cmVtb3ZlKGl0KTsK
LSAgICAgICAgICAgIHRoaXNPYmplY3QtPmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQogCiAgICAgdGhpc09iamVjdC0+Y2hlY2tD
b25zaXN0ZW5jeSgpOworICAgIHJldHVybiB0cnVlOworfQogCi0gICAgaWYgKGkgPiBNQVhfQVJS
QVlfSU5ERVgpCi0gICAgICAgIHJldHVybiB0aGlzT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5kZWxl
dGVQcm9wZXJ0eSh0aGlzT2JqZWN0LCBleGVjLCBJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIGkpKTsK
LQotICAgIHJldHVybiBmYWxzZTsKK3N0YXRpYyBpbnQgY29tcGFyZUtleXNGb3JRU29ydChjb25z
dCB2b2lkKiBhLCBjb25zdCB2b2lkKiBiKQoreworICAgIHVpbnQ2NF90IGRhID0gKnN0YXRpY19j
YXN0PGNvbnN0IHVpbnQ2NF90Kj4oYSk7CisgICAgdWludDY0X3QgZGIgPSAqc3RhdGljX2Nhc3Q8
Y29uc3QgdWludDY0X3QqPihiKTsKKyAgICByZXR1cm4gKGRhID4gZGIpIC0gKGRhIDwgZGIpOwog
fQogCiB2b2lkIEpTQXJyYXk6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVy
YXRpb25Nb2RlIG1vZGUpCkBAIC01MDIsOSArODk2LDE4IEBAIHZvaWQgSlNBcnJheTo6Z2V0T3du
UHJvcGVydHlOYW1lcyhKU09iamUKICAgICB9CiAKICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1h
cCogbWFwID0gc3RvcmFnZS0+bV9zcGFyc2VWYWx1ZU1hcCkgeworICAgICAgICBWZWN0b3I8dWlu
dDY0X3Q+IGtleXM7CisgICAgICAgIGtleXMucmVzZXJ2ZUNhcGFjaXR5KG1hcC0+c2l6ZSgpKTsK
KyAgICAgICAgCiAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1hcC0+ZW5kKCk7Ci0gICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAg
IHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgaXQtPmZpcnN0KSk7Cisg
ICAgICAgIGZvciAoU3BhcnNlQXJyYXlWYWx1ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXAt
PmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgaWYgKG1vZGUgPT0gSW5j
bHVkZURvbnRFbnVtUHJvcGVydGllcyB8fCAhKGl0LT5zZWNvbmQuYXR0cmlidXRlcyAmIERvbnRF
bnVtKSkKKyAgICAgICAgICAgICAgICBrZXlzLmFwcGVuZChpdC0+Zmlyc3QpOworICAgICAgICB9
CisKKyAgICAgICAgcXNvcnQoa2V5cy5iZWdpbigpLCBrZXlzLnNpemUoKSwgc2l6ZW9mKHVpbnQ2
NF90KSwgY29tcGFyZUtleXNGb3JRU29ydCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBrZXlzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRl
bnRpZmllcjo6ZnJvbShleGVjLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oa2V5c1tpXSkpKTsKICAg
ICB9CiAKICAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQpAQCAtNjkz
LDggKzEwOTYsOSBAQCBib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKHVuc2lnCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSlNBcnJheTo6c2V0TGVuZ3RoKHVuc2lnbmVkIG5l
d0xlbmd0aCkKK2Jvb2wgSlNBcnJheTo6c2V0TGVuZ3RoKHVuc2lnbmVkIG5ld0xlbmd0aCwgYm9v
bCB0aHJvd0V4Y2VwdGlvbikKIHsKKyAgICBVTlVTRURfUEFSQU0odGhyb3dFeGNlcHRpb24pOwog
ICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKIAogICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IG1f
c3RvcmFnZTsKQEAgLTcxMCw2ICsxMTE0LDkgQEAgdm9pZCBKU0FycmF5OjpzZXRMZW5ndGgodW5z
aWduZWQgbmV3TGVuZwogICAgICAgICAgICAgc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciAt
PSBoYWRWYWx1ZTsKICAgICAgICAgfQogCisgICAgICAgIC8vIEZJWE1FOiBwcm9wZXJ0aWVzIHNo
b3VsZCBiZSByZW1vdmVkIGluIHJldmVyc2UgbnVtZXJpYyBvcmRlciwgaWYgYW55IGNhbm5vdCBi
ZQorICAgICAgICAvLyByZW1vdmVkIHRoaXMgbWV0aG9kIHNob3VsZCByZWplY3QgKHBvc3NpYmx5
IHRocm93IC8gcmV0dXJuIGZhbHNlKSwgYW5kIGxlbmd0aAorICAgICAgICAvLyBzaG91bGQgYmUg
c2V0IHRoZSBhZnRlciB0aGUgbGFzdCBwcm9wZXJ0eSB0aGF0IGNvdWxkIG5vdCBiZSByZW1vdmVk
LgogICAgICAgICBpZiAoU3BhcnNlQXJyYXlWYWx1ZU1hcCogbWFwID0gc3RvcmFnZS0+bV9zcGFy
c2VWYWx1ZU1hcCkgewogICAgICAgICAgICAgU3BhcnNlQXJyYXlWYWx1ZU1hcCBjb3B5ID0gKm1h
cDsKICAgICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IGNvcHkuZW5kKCk7CkBAIC03MjcsMTcgKzExMzQsMjEgQEAgdm9pZCBKU0FycmF5OjpzZXRMZW5n
dGgodW5zaWduZWQgbmV3TGVuZwogICAgIHN0b3JhZ2UtPm1fbGVuZ3RoID0gbmV3TGVuZ3RoOwog
CiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgIHJldHVybiB0cnVlOwogfQogCi1KU1ZhbHVl
IEpTQXJyYXk6OnBvcCgpCitKU1ZhbHVlIEpTQXJyYXk6OnBvcChFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogCiAgICAgQXJyYXlTdG9yYWdlKiBzdG9yYWdlID0g
bV9zdG9yYWdlOwogICAgIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPm1fbGVuZ3Ro
OwotICAgIGlmICghbGVuZ3RoKQorICAgIGlmICghbGVuZ3RoKSB7CisgICAgICAgIGlmICghaXNM
ZW5ndGhXcml0YWJsZSgpKQorICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0
TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisgICAgfQogCiAgICAgLS1sZW5ndGg7CiAKQEAgLTc1Niw3ICsxMTY3LDE4IEBAIEpT
VmFsdWUgSlNBcnJheTo6cG9wKCkKICAgICAgICAgaWYgKFNwYXJzZUFycmF5VmFsdWVNYXAqIG1h
cCA9IHN0b3JhZ2UtPm1fc3BhcnNlVmFsdWVNYXApIHsKICAgICAgICAgICAgIFNwYXJzZUFycmF5
VmFsdWVNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLT5maW5kKGxlbmd0aCk7CiAgICAgICAgICAgICBp
ZiAoaXQgIT0gbWFwLT5ub3RGb3VuZCgpKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gaXQt
PnNlY29uZC5nZXQoKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gaXQt
PnNlY29uZC5hdHRyaWJ1dGVzOworCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gaXQtPnNlY29u
ZC5nZXQoZXhlYywgdGhpcyk7CisgICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIERvbnREZWxldGUpIHsK
KyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhl
YywgIlVuYWJsZSB0byBkZWxldGUgcHJvcGVydHkuIikpOworICAgICAgICAgICAgICAgICAgICBj
aGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1hcC0+
cmVtb3ZlKGl0KTsKICAgICAgICAgICAgICAgICBpZiAobWFwLT5pc0VtcHR5KCkgJiYgIW1hcC0+
c3BhcnNlTW9kZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBtYXA7CkBAIC04MDAs
NyArMTIyMiw3IEBAIHZvaWQgSlNBcnJheTo6cHVzaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAg
ICB9CiAKICAgICAvLyBIYW5kbGVkIHRoZSBzYW1lIGFzIHB1dEluZGV4LgotICAgIHB1dEJ5SW5k
ZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdG9yYWdlLT5tX2xlbmd0
aCwgdmFsdWUpOworICAgIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoZXhlYywgc3RvcmFn
ZS0+bV9sZW5ndGgsIHZhbHVlKTsKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiB9CiAKQEAgLTEx
ODksNyArMTYxMSw3IEBAIHZvaWQgSlNBcnJheTo6c29ydChFeGVjU3RhdGUqIGV4ZWMsIEpTVmEK
IAogICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAt
PmVuZCgpOwogICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIHRyZWUu
YWJzdHJhY3RvcigpLm1fbm9kZXNbbnVtRGVmaW5lZF0udmFsdWUgPSBpdC0+c2Vjb25kLmdldCgp
OworICAgICAgICAgICAgdHJlZS5hYnN0cmFjdG9yKCkubV9ub2Rlc1tudW1EZWZpbmVkXS52YWx1
ZSA9IGl0LT5zZWNvbmQuZ2V0Tm9uU3BhcnNlTW9kZSgpOwogICAgICAgICAgICAgdHJlZS5pbnNl
cnQobnVtRGVmaW5lZCk7CiAgICAgICAgICAgICArK251bURlZmluZWQ7CiAgICAgICAgIH0KQEAg
LTEzMDUsNyArMTcyNyw3IEBAIHVuc2lnbmVkIEpTQXJyYXk6OmNvbXBhY3RGb3JTb3J0aW5nKCkK
IAogICAgICAgICBTcGFyc2VBcnJheVZhbHVlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAt
PmVuZCgpOwogICAgICAgICBmb3IgKFNwYXJzZUFycmF5VmFsdWVNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBzdG9yYWdl
LT5tX3ZlY3RvcltudW1EZWZpbmVkKytdLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoaXQtPnNlY29u
ZC5nZXQoKSk7CisgICAgICAgICAgICBzdG9yYWdlLT5tX3ZlY3RvcltudW1EZWZpbmVkKytdLnNl
dFdpdGhvdXRXcml0ZUJhcnJpZXIoaXQtPnNlY29uZC5nZXROb25TcGFyc2VNb2RlKCkpOwogCiAg
ICAgICAgIGRlbGV0ZSBtYXA7CiAgICAgICAgIHN0b3JhZ2UtPm1fc3BhcnNlVmFsdWVNYXAgPSAw
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24g
MTA0Mzk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSwxNSArMzEsMjIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBzdHJ1
Y3QgU3BhcnNlQXJyYXlFbnRyeSA6IHB1YmxpYyBXcml0ZUJhcnJpZXI8VW5rbm93bj4gewogICAg
ICAgICBTcGFyc2VBcnJheUVudHJ5KCkgOiBhdHRyaWJ1dGVzKDApIHt9CisKKyAgICAgICAgSlNW
YWx1ZSBnZXQoRXhlY1N0YXRlKiwgSlNBcnJheSopIGNvbnN0OworICAgICAgICB2b2lkIGdldChQ
cm9wZXJ0eVNsb3QmKSBjb25zdDsKKyAgICAgICAgdm9pZCBnZXQoUHJvcGVydHlEZXNjcmlwdG9y
JikgY29uc3Q7CisgICAgICAgIEpTVmFsdWUgZ2V0Tm9uU3BhcnNlTW9kZSgpIGNvbnN0OworCiAg
ICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CiAgICAgfTsKIAogICAgIGNsYXNzIFNwYXJzZUFy
cmF5VmFsdWVNYXAgewotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQsIFNwYXJzZUFy
cmF5RW50cnk+IE1hcDsKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBTcGFyc2VB
cnJheUVudHJ5LCBXVEY6OkludEhhc2g8dWludDY0X3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9L
ZXlIYXNoVHJhaXRzPHVpbnQ2NF90PiA+IE1hcDsKIAogICAgICAgICBlbnVtIEZsYWdzIHsKICAg
ICAgICAgICAgIE5vcm1hbCA9IDAsCi0gICAgICAgICAgICBTcGFyc2VNb2RlID0gMQorICAgICAg
ICAgICAgU3BhcnNlTW9kZSA9IDEsCisgICAgICAgICAgICBMZW5ndGhJc1JlYWRPbmx5ID0gMiwK
ICAgICAgICAgfTsKIAogICAgIHB1YmxpYzoKQEAgLTY0LDkgKzcxLDIwIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAgICAgbV9mbGFncyA9IChGbGFncykobV9mbGFncyB8IFNwYXJzZU1vZGUp
OwogICAgICAgICB9CiAKKyAgICAgICAgYm9vbCBsZW5ndGhJc1JlYWRPbmx5KCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIG1fZmxhZ3MgJiBMZW5ndGhJc1JlYWRPbmx5OworICAgICAg
ICB9CisKKyAgICAgICAgdm9pZCBzZXRMZW5ndGhJc1JlYWRPbmx5KCkKKyAgICAgICAgeworICAg
ICAgICAgICAgbV9mbGFncyA9IChGbGFncykobV9mbGFncyB8IExlbmd0aElzUmVhZE9ubHkpOwor
ICAgICAgICB9CisKICAgICAgICAgLy8gVGhlc2UgbWV0aG9kcyBtYXkgbXV0YXRlIHRoZSBjb250
ZW50cyBvZiB0aGUgbWFwCi0gICAgICAgIHZvaWQgcHV0KEpTR2xvYmFsRGF0YSYsIEpTQXJyYXkq
LCB1bnNpZ25lZCwgSlNWYWx1ZSk7Ci0gICAgICAgIGl0ZXJhdG9yIGZpbmQodW5zaWduZWQpOwor
ICAgICAgICB2b2lkIHB1dChFeGVjU3RhdGUqLCBKU0FycmF5KiwgdW5zaWduZWQsIEpTVmFsdWUp
OworICAgICAgICBzdGQ6OnBhaXI8aXRlcmF0b3IsYm9vbD4gYWRkKEpTQXJyYXkqLCB1bnNpZ25l
ZCk7CisgICAgICAgIGl0ZXJhdG9yIGZpbmQodW5zaWduZWQgaSkgeyByZXR1cm4gbV9tYXAuZmlu
ZChpKTsgfQogICAgICAgICAvLyBUaGlzIHNob3VsZCBBU1NFUlQgdGhlIHJlbW92ZSBpcyB2YWxp
ZCAoY2hlY2sgdGhlIHJlc3VsdCBvZiB0aGUgZmluZCkuCiAgICAgICAgIHZvaWQgcmVtb3ZlKGl0
ZXJhdG9yIGl0KSB7IG1fbWFwLnJlbW92ZShpdCk7IH0KICAgICAgICAgdm9pZCByZW1vdmUodW5z
aWduZWQgaSkgeyBtX21hcC5yZW1vdmUoaSk7IH0KQEAgLTEzNiw3ICsxNTQsOSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBhcnJheS0+dHJ5RmluaXNoQ3JlYXRpb25Vbmlu
aXRpYWxpemVkKGdsb2JhbERhdGEsIGluaXRpYWxMZW5ndGgpOwogICAgICAgICB9CiAKLSAgICAg
ICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CisgICAgICAgIHN0
YXRpYyBib29sIGRlZmluZU93blByb3BlcnR5KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgY29uc3Qg
SWRlbnRpZmllciYsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgdGhyb3dFeGNlcHRpb24pOwor
CisgICAgICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xvdChKU0NlbGwqLCBFeGVjU3Rh
dGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWdu
ZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgc3RhdGljIGJvb2wgZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRp
ZmllciYsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogICAgICAgICBzdGF0aWMgdm9pZCBwdXRCeUlu
ZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSk7
CkBAIC0xNDQsMTQgKzE2NCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIEpT
X0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKICAgICAgICAgCiAgICAgICAgIHVu
c2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZS0+bV9sZW5ndGg7IH0KLSAg
ICAgICAgdm9pZCBzZXRMZW5ndGgodW5zaWduZWQpOyAvLyBPSyB0byB1c2Ugb24gbmV3IGFycmF5
cywgYnV0IG5vdCBpZiBpdCBtaWdodCBiZSBhIFJlZ0V4cE1hdGNoQXJyYXkuCisgICAgICAgIGJv
b2wgc2V0TGVuZ3RoKHVuc2lnbmVkLCBib29sIHRocm93RXhjZXB0aW9uID0gZmFsc2UpOyAvLyBP
SyB0byB1c2Ugb24gbmV3IGFycmF5cywgYnV0IG5vdCBpZiBpdCBtaWdodCBiZSBhIFJlZ0V4cE1h
dGNoQXJyYXkuCiAKICAgICAgICAgdm9pZCBzb3J0KEV4ZWNTdGF0ZSopOwogICAgICAgICB2b2lk
IHNvcnQoRXhlY1N0YXRlKiwgSlNWYWx1ZSBjb21wYXJlRnVuY3Rpb24sIENhbGxUeXBlLCBjb25z
dCBDYWxsRGF0YSYpOwogICAgICAgICB2b2lkIHNvcnROdW1lcmljKEV4ZWNTdGF0ZSosIEpTVmFs
dWUgY29tcGFyZUZ1bmN0aW9uLCBDYWxsVHlwZSwgY29uc3QgQ2FsbERhdGEmKTsKIAogICAgICAg
ICB2b2lkIHB1c2goRXhlY1N0YXRlKiwgSlNWYWx1ZSk7Ci0gICAgICAgIEpTVmFsdWUgcG9wKCk7
CisgICAgICAgIEpTVmFsdWUgcG9wKEV4ZWNTdGF0ZSopOwogCiAgICAgICAgIHZvaWQgc2hpZnRD
b3VudChFeGVjU3RhdGUqLCB1bnNpZ25lZCBjb3VudCk7CiAgICAgICAgIHZvaWQgdW5zaGlmdENv
dW50KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGNvdW50KTsKQEAgLTI0NSw4ICsyNjUsMTkgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgc2V0U3ViY2xhc3NEYXRhKHZvaWQqKTsKIAogICAg
IHByaXZhdGU6CisgICAgICAgIGJvb2wgaXNMZW5ndGhXcml0YWJsZSgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIFNwYXJzZUFycmF5VmFsdWVNYXAqIG1hcCA9IG1fc3RvcmFnZS0+bV9zcGFyc2VW
YWx1ZU1hcDsKKyAgICAgICAgICAgIHJldHVybiAhbWFwIHx8ICFtYXAtPmxlbmd0aElzUmVhZE9u
bHkoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgc2V0TGVuZ3RoV3JpdGFibGUoRXhlY1N0
YXRlKiwgYm9vbCB3cml0YWJsZSk7CisgICAgICAgIHZvaWQgcHV0RGVzY3JpcHRvcihFeGVjU3Rh
dGUqLCBTcGFyc2VBcnJheUVudHJ5KiwgUHJvcGVydHlEZXNjcmlwdG9yJiwgUHJvcGVydHlEZXNj
cmlwdG9yJiBvbGQpOworICAgICAgICBib29sIGRlZmluZU93bk51bWVyaWNQcm9wZXJ0eShFeGVj
U3RhdGUqLCB1bnNpZ25lZCwgUHJvcGVydHlEZXNjcmlwdG9yJiwgYm9vbCB0aHJvd0V4Y2VwdGlv
bik7CisgICAgICAgIHZvaWQgZW50ZXJTcGFyc2VNb2RlKEpTR2xvYmFsRGF0YSYpOworCiAgICAg
ICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90U2xvd0Nhc2UoRXhlY1N0YXRlKiwgdW5zaWduZWQg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICAgICAgdm9pZCBwdXRCeUluZGV4QmV5
b25kVmVjdG9yTGVuZ3RoKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSk7CisgICAgICAgIHZvaWQgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3Rh
dGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUpOwogCiAgICAgICAgIHVuc2lnbmVk
IGdldE5ld1ZlY3Rvckxlbmd0aCh1bnNpZ25lZCBkZXNpcmVkTGVuZ3RoKTsKICAgICAgICAgYm9v
bCBpbmNyZWFzZVZlY3Rvckxlbmd0aCh1bnNpZ25lZCBuZXdMZW5ndGgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTA0Mzk3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03NjEsNyArNzYxLDcgQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHko
SlNPYmplYwogICAgIGlmIChkZXNjcmlwdG9yLmlzR2VuZXJpY0Rlc2NyaXB0b3IoKSkgewogICAg
ICAgICBpZiAoIWN1cnJlbnQuYXR0cmlidXRlc0VxdWFsKGRlc2NyaXB0b3IpKSB7CiAgICAgICAg
ICAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmRlbGV0ZVByb3BlcnR5KG9iamVjdCwgZXhlYywg
cHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgIHB1dERlc2NyaXB0b3IoZXhlYywgb2JqZWN0LCBw
cm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGN1cnJlbnQuYXR0cmlidXRlc1dpdGhPdmVycmlkZShk
ZXNjcmlwdG9yKSwgY3VycmVudCk7CisgICAgICAgICAgICByZXR1cm4gcHV0RGVzY3JpcHRvcihl
eGVjLCBvYmplY3QsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgY3VycmVudC5hdHRyaWJ1dGVz
V2l0aE92ZXJyaWRlKGRlc2NyaXB0b3IpLCBjdXJyZW50KTsKICAgICAgICAgfQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm9wZXJ0eURlc2NyaXB0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5jcHAJKHJldmlzaW9uIDEwNDM5NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIwMSw0ICsyMDEsMTggQEAgdW5zaWduZWQgUHJvcGVydHlEZXNjcmlwdG9y
OjphdHRyaWJ1dGVzVwogICAgIHJldHVybiBuZXdBdHRyaWJ1dGVzOwogfQogCit1bnNpZ25lZCBQ
cm9wZXJ0eURlc2NyaXB0b3I6OmF0dHJpYnV0ZXNPdmVycmlkaW5nQ3VycmVudChjb25zdCBQcm9w
ZXJ0eURlc2NyaXB0b3ImIGN1cnJlbnQpIGNvbnN0Cit7CisgICAgdW5zaWduZWQgb3ZlcnJpZGVN
YXNrID0gMDsKKyAgICBpZiAod3JpdGFibGVQcmVzZW50KCkpCisgICAgICAgIG92ZXJyaWRlTWFz
ayB8PSBSZWFkT25seTsKKyAgICBpZiAoZW51bWVyYWJsZVByZXNlbnQoKSkKKyAgICAgICAgb3Zl
cnJpZGVNYXNrIHw9IERvbnRFbnVtOworICAgIGlmIChjb25maWd1cmFibGVQcmVzZW50KCkpCisg
ICAgICAgIG92ZXJyaWRlTWFzayB8PSBEb250RGVsZXRlOworICAgIGlmIChpc0FjY2Vzc29yRGVz
Y3JpcHRvcigpKQorICAgICAgICBvdmVycmlkZU1hc2sgfD0gKEdldHRlciB8IFNldHRlcik7Cisg
ICAgcmV0dXJuIChtX2F0dHJpYnV0ZXMgJiBvdmVycmlkZU1hc2spIHwgKGN1cnJlbnQubV9hdHRy
aWJ1dGVzICYgfm92ZXJyaWRlTWFzayk7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5oCShyZXZpc2lvbiAxMDQz
OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgYm9vbCBlcXVhbFRvKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9y
JiBvdGhlcikgY29uc3Q7CiAgICAgICAgIGJvb2wgYXR0cmlidXRlc0VxdWFsKGNvbnN0IFByb3Bl
cnR5RGVzY3JpcHRvciYgb3RoZXIpIGNvbnN0OwogICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVz
V2l0aE92ZXJyaWRlKGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgb3RoZXIpIGNvbnN0OworICAg
ICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzT3ZlcnJpZGluZ0N1cnJlbnQoY29uc3QgUHJvcGVydHlE
ZXNjcmlwdG9yJiBjdXJyZW50KSBjb25zdDsKICAgICBwcml2YXRlOgogICAgICAgICBzdGF0aWMg
dW5zaWduZWQgZGVmYXVsdEF0dHJpYnV0ZXM7CiAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBQcm9wZXJ0eURlc2NyaXB0b3ImKXsgcmV0dXJuIGZhbHNlOyB9CkluZGV4OiBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lv
biAxMDQ0NjIpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwyMCBAQAorMjAxMi0wMS0wOSAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBh
cHBsZS5jb20+CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTc1Nzg5CisgICAgICAgIGRlZmluZU93blByb3BlcnR5IG5vdCBpbXBsZW1lbnRlZCBmb3Ig
QXJyYXkgb2JqZWN0cworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogZmFzdC9qcy9hcnJheS1kZWZpbmVPd25Qcm9wZXJ0eS1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvanMvYXJyYXktZGVmaW5lT3duUHJvcGVydHkuaHRtbDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9qcy9zY3JpcHQtdGVzdHMvYXJyYXktZGVmaW5lT3duUHJvcGVy
dHkuanM6IEFkZGVkLgorICAgICAgICAgICAgLSBBZGRlZCB0ZXN0cyBmb3IgYXJyYXkgcHJvcGVy
dGllcyB3aXRoIGFjY2Vzc29ycyAmIG5vbi1kZWZ1bGF0IGF0dHJpYnV0ZXMuCisgICAgICAgICog
ZmFzdC9qcy9tb3ppbGxhL3N0cmljdC8xNS40LjQuNi1leHBlY3RlZC50eHQ6CisgICAgICAgICog
ZmFzdC9qcy9tb3ppbGxhL3N0cmljdC84LjEyLjUtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGll
dGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjQuNC4xNC05LWEtMTItZXhwZWN0ZWQudHh0OgorICAg
ICAgICAqIGlldGVzdGNlbnRlci9KYXZhc2NyaXB0LzE1LjQuNC4xNS04LWEtMTItZXhwZWN0ZWQu
dHh0OgorICAgICAgICAgICAgLSBDaGVjayBpbiBwYXNzaW5nIHJlc3VsdHMuCisKIDIwMTItMDEt
MDkgIEpvaG4gS25vdHRlbmJlbHQgIDxqa25vdHRlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
W0Nocm9taXVtXSBVcGRhdGUgdGVzdCBleHBlY3RhdGlvbnMuCkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L2pzL2FycmF5LWRlZmluZU93blByb3BlcnR5LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2pzL2FycmF5LWRlZmluZU93blByb3BlcnR5LWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvYXJyYXktZGVmaW5lT3duUHJv
cGVydHktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI0IEBACitUaGlzIHRl
c3QgY2hlY2tzIHRoZSBiZWhhdmlvciBvZiBbW0RlZmluZU93blByb3BlcnR5XV0gYXBwbGllZCB0
byBBcnJheSBvYmplY3RzIChzZWUgRVM1LjEgMTUuNC41LjEpLgorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKKworUEFTUyBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICd4JywgeyBnZXQ6
ZnVuY3Rpb24oKXtyZXR1cm4gdHJ1ZTt9IH0pLnggaXMgdHJ1ZQorUEFTUyBPYmplY3QuZGVmaW5l
UHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHZhbHVlOiAxIH0pLmxlbmd0aCBpcyAxCitQQVNTIHZh
ciBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB3cml0YWJsZTogZmFs
c2UgfSk7IGFbMV0gPSAxOyBhLmxlbmd0aCBpcyAwCitQQVNTIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShbXSwgJ2xlbmd0aCcsIHsgZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRydWU7fSB9KSB0aHJldyBl
eGNlcHRpb24gVHlwZUVycm9yOiBBdHRlbXB0aW5nIHRvIGNoYW5nZSBhY2Nlc3MgbWVjaGFuaXNt
IGZvciBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4uCitQQVNTIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShbXSwgJ2xlbmd0aCcsIHsgZW51bWVyYWJsZTogdHJ1ZSB9KSB0aHJldyBleGNlcHRpb24g
VHlwZUVycm9yOiBBdHRlbXB0aW5nIHRvIGNoYW5nZSBlbnVtZXJhYmxlIGF0dHJpYnV0ZSBvZiB1
bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4uCitQQVNTIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwg
J2xlbmd0aCcsIHsgY29uZmlndXJhYmxlOiB0cnVlIH0pIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJy
b3I6IEF0dGVtcHRpbmcgdG8gY2hhbmdlIGNvbmZpZ3VyYWJsZSBhdHRyaWJ1dGUgb2YgdW5jb25m
aWd1cmFibGUgcHJvcGVydHkuLgorUEFTUyBPYmplY3QuZGVmaW5lUHJvcGVydHkoT2JqZWN0LmRl
ZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB3cml0YWJsZTogZmFsc2UgfSksICdsZW5ndGgn
LCB7IHdyaXRhYmxlOiB0cnVlIH0pIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEF0dGVtcHRp
bmcgdG8gY2hhbmdlIHdyaXRhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0
eS4uCitQQVNTIHZhciBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnMCcsIHsgdmFsdWU6
IDQyIH0pOyBhWzBdIGlzIDQyCitQQVNTIHZhciBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5KFs0
Ml0sICcwJywgeyB3cml0YWJsZTogZmFsc2UgfSk7IGFbMF0gPSAxOyBhWzBdIGlzIDQyCitQQVNT
IHZhciBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5KFs0Ml0sICcwJywgeyBlbnVtZXJhYmxlOiBm
YWxzZSB9KTsgYVswXSArIE9iamVjdC5rZXlzKGEpLmxlbmd0aCBpcyA0MgorRkFJTCB2YXIgYSA9
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShbNDJdLCAnMCcsIHsgY29uZmlndXJhYmxlOiBmYWxzZSB9
KTsgYS5sZW5ndGggPSAwOyBhWzBdIHNob3VsZCBiZSA0MiAob2YgdHlwZSBudW1iZXIpLiBXYXMg
dW5kZWZpbmVkIChvZiB0eXBlIHVuZGVmaW5lZCkuCitQQVNTIHZhciBmb28gPSAwOyBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoW10sICcwJywgeyBzZXQ6ZnVuY3Rpb24oeCl7Zm9vID0geDt9IH0pWzBd
ID0gNDI7IGZvbyBpcyA0MgorUEFTUyBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICcwJywgeyBn
ZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdHJ1ZTt9IH0pWzBdIGlzIHRydWUKK1BBU1MgT2JqZWN0LmRl
ZmluZVByb3BlcnR5KE9iamVjdC5kZWZpbmVQcm9wZXJ0eShbdHJ1ZV0sICcwJywgeyBjb25maWd1
cmFibGU6dHJ1ZSwgd3JpdGFibGU6IGZhbHNlIH0pLCAnMCcsIHsgd3JpdGFibGU6IHRydWUgfSlb
MF0gaXMgdHJ1ZQorUEFTUyBPYmplY3QuZGVmaW5lUHJvcGVydHkoT2JqZWN0LmRlZmluZVByb3Bl
cnR5KFt0cnVlXSwgJzAnLCB7IGNvbmZpZ3VyYWJsZTpmYWxzZSwgd3JpdGFibGU6IGZhbHNlIH0p
LCAnMCcsIHsgd3JpdGFibGU6IHRydWUgfSlbMF0gdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjog
QXR0ZW1wdGluZyB0byBjaGFuZ2UgY29uZmlndXJhYmxlIGF0dHJpYnV0ZSBvZiB1bmNvbmZpZ3Vy
YWJsZSBwcm9wZXJ0eS4uCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9hcnJheS1kZWZpbmVPd25Qcm9w
ZXJ0eS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvYXJyYXktZGVmaW5l
T3duUHJvcGVydHkuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvYXJy
YXktZGVmaW5lT3duUHJvcGVydHkuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMCBAQAor
PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8
aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2FycmF5LWRlZmluZU93
blByb3BlcnR5LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvanMvbW96aWxsYS9zdHJpY3QvOC4xMi41LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2pzL21vemlsbGEvc3RyaWN0LzguMTIuNS1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDEwNDM5NykKKysrIExheW91dFRlc3RzL2Zhc3QvanMvbW96aWxsYS9zdHJpY3QvOC4x
Mi41LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTMgKzI2LDEzIEBAIFBBU1Mg
J3VzZSBzdHJpY3QnOyB2YXIgYSA9IGFycigpOyBhWzBdID0KIFBBU1MgdmFyIGEgPSBhcnIoKTsg
YVswXSA9IDI7IGFbMF0gaXMgMgogUEFTUyB0cnVlID09PSB0cnVlCiBGQUlMICd1c2Ugc3RyaWN0
JzsgdmFyIGEgPSBhcnIoKTsgYVsxXSA9IDI7IGFbMV0gc2hvdWxkIHRocm93IGFuIGluc3RhbmNl
IG9mIFR5cGVFcnJvcgotRkFJTCB2YXIgYSA9IGFycigpOyBhWzFdID0gMjsgYVsxXSBzaG91bGQg
YmUgMS4gV2FzIDIuCitQQVNTIHZhciBhID0gYXJyKCk7IGFbMV0gPSAyOyBhWzFdIGlzIDEKIFBB
U1MgdHJ1ZSA9PT0gdHJ1ZQogUEFTUyAndXNlIHN0cmljdCc7IHZhciBhID0gYXJyKCk7IGFbMl0g
PSAyOyBhWzJdIGlzIDIKIFBBU1MgdmFyIGEgPSBhcnIoKTsgYVsyXSA9IDI7IGFbMl0gaXMgMgog
UEFTUyB0cnVlID09PSB0cnVlCiBGQUlMICd1c2Ugc3RyaWN0JzsgdmFyIGEgPSBhcnIoKTsgYVsz
XSA9IDI7IGFbM10gc2hvdWxkIHRocm93IGFuIGluc3RhbmNlIG9mIFR5cGVFcnJvcgotRkFJTCB2
YXIgYSA9IGFycigpOyBhWzNdID0gMjsgYVszXSBzaG91bGQgYmUgMS4gV2FzIDIuCitQQVNTIHZh
ciBhID0gYXJyKCk7IGFbM10gPSAyOyBhWzNdIGlzIDEKIFBBU1MgdHJ1ZSA9PT0gdHJ1ZQogRkFJ
TCAndXNlIHN0cmljdCc7IGFycigpWzFdKysgc2hvdWxkIHRocm93IGFuIGluc3RhbmNlIG9mIFR5
cGVFcnJvcgogUEFTUyBhcnIoKVsxXSsrIGlzIDEKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMv
bW96aWxsYS9zdHJpY3QvMTUuNC40LjYtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvanMvbW96aWxsYS9zdHJpY3QvMTUuNC40LjYtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAxMDQzOTcpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL21vemlsbGEvc3RyaWN0LzE1LjQu
NC42LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKLUZBSUwgJ3Vz
ZSBzdHJpY3QnOyB2YXIgYSA9IGFycigpOyBbYS5wb3AoKSwgYV0gc2hvdWxkIHRocm93IGFuIGlu
c3RhbmNlIG9mIFR5cGVFcnJvcgotRkFJTCB2YXIgYSA9IGFycigpOyBbYS5wb3AoKSwgYV0gc2hv
dWxkIHRocm93IGFuIGluc3RhbmNlIG9mIFR5cGVFcnJvcgorUEFTUyAndXNlIHN0cmljdCc7IHZh
ciBhID0gYXJyKCk7IFthLnBvcCgpLCBhXSB0aHJldyBleGNlcHRpb24gb2YgdHlwZSBUeXBlRXJy
b3IuCitQQVNTIHZhciBhID0gYXJyKCk7IFthLnBvcCgpLCBhXSB0aHJldyBleGNlcHRpb24gb2Yg
dHlwZSBUeXBlRXJyb3IuCiBQQVNTIHRydWUgPT09IHRydWUKIEZBSUwgJ3VzZSBzdHJpY3QnOyB2
YXIgbyA9IG9iaigpOyBbQXJyYXkucHJvdG90eXBlLnBvcC5jYWxsKG8pLCBvXSBzaG91bGQgdGhy
b3cgYW4gaW5zdGFuY2Ugb2YgVHlwZUVycm9yCiBGQUlMIHZhciBvID0gb2JqKCk7IFtBcnJheS5w
cm90b3R5cGUucG9wLmNhbGwobyksIG9dIHNob3VsZCB0aHJvdyBhbiBpbnN0YW5jZSBvZiBUeXBl
RXJyb3IKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRlc3RzL2FycmF5LWRlZmlu
ZU93blByb3BlcnR5LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvc2NyaXB0
LXRlc3RzL2FycmF5LWRlZmluZU93blByb3BlcnR5LmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZmFzdC9qcy9zY3JpcHQtdGVzdHMvYXJyYXktZGVmaW5lT3duUHJvcGVydHkuanMJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMzQgQEAKK2Rlc2NyaXB0aW9uKCJUaGlzIHRlc3QgY2hlY2tz
IHRoZSBiZWhhdmlvciBvZiBbW0RlZmluZU93blByb3BlcnR5XV0gYXBwbGllZCB0byBBcnJheSBv
YmplY3RzIChzZWUgRVM1LjEgMTUuNC41LjEpLiIpOworCisvLyBUZXN0IHRoYXQgcHJvcGVydGll
cyBvdGhlciB0aGFuIGxlbmd0aCwgYXJyYXkgaW5kaWNlcyBhcmUgaGFuZGxlZCBhcyBub3JtYWwu
CitzaG91bGRCZVRydWUoIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwgJ3gnLCB7IGdldDpmdW5j
dGlvbigpe3JldHVybiB0cnVlO30gfSkueCIpOworCisvLyBUaGUgbGVuZ3RoIHByb3BlcnR5IGNh
biBiZSBzZXQsIGFuZCBjYW4gYmUgbWFkZSByZWFkLW9ubHkuCitzaG91bGRCZSgiT2JqZWN0LmRl
ZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB2YWx1ZTogMSB9KS5sZW5ndGgiLCAnMScpOwor
c2hvdWxkQmUoInZhciBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB3
cml0YWJsZTogZmFsc2UgfSk7IGFbMV0gPSAxOyBhLmxlbmd0aCIsICcwJyk7CisKKy8vIFRoZSBs
ZW5ndGggcHJvcGVydHkgY2FuIGJlIHJlcGxhY2VkIHdpdGggYW4gYWNjZXNzb3IsIG9yIG1hZGUg
ZWl0aGVyIGVudW1lcmFibGUgb3IgY29uZmlndXJhYmxlLgorc2hvdWxkVGhyb3coIk9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShbXSwgJ2xlbmd0aCcsIHsgZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRydWU7
fSB9KSIpOworc2hvdWxkVGhyb3coIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwgJ2xlbmd0aCcs
IHsgZW51bWVyYWJsZTogdHJ1ZSB9KSIpOworc2hvdWxkVGhyb3coIk9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShbXSwgJ2xlbmd0aCcsIHsgY29uZmlndXJhYmxlOiB0cnVlIH0pIik7CitzaG91bGRUaHJv
dygiT2JqZWN0LmRlZmluZVByb3BlcnR5KE9iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwgJ2xlbmd0
aCcsIHsgd3JpdGFibGU6IGZhbHNlIH0pLCAnbGVuZ3RoJywgeyB3cml0YWJsZTogdHJ1ZSB9KSIp
OworCisvLyAKK3Nob3VsZEJlKCJ2YXIgYSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwgJzAn
LCB7IHZhbHVlOiA0MiB9KTsgYVswXSIsICc0MicpOworLy8KK3Nob3VsZEJlKCJ2YXIgYSA9IE9i
amVjdC5kZWZpbmVQcm9wZXJ0eShbNDJdLCAnMCcsIHsgd3JpdGFibGU6IGZhbHNlIH0pOyBhWzBd
ID0gMTsgYVswXSIsICc0MicpOworLy8KK3Nob3VsZEJlKCJ2YXIgYSA9IE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShbNDJdLCAnMCcsIHsgZW51bWVyYWJsZTogZmFsc2UgfSk7IGFbMF0gKyBPYmplY3Qu
a2V5cyhhKS5sZW5ndGgiLCAnNDInKTsKKy8vIEZJWE1FOiB0aGlzIGRvZXNuJ3QgeWV0IHdvcmsu
IFJlZHVjaW5nIHRoZSBsZW5ndGggc2hvdWxkIG5vdCB3b3JrIGlmIGl0IGNvbnRhaW5zIG5vbi1j
b25maWd1cmFibGUgcHJvcGVydGllcy4KK3Nob3VsZEJlKCJ2YXIgYSA9IE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShbNDJdLCAnMCcsIHsgY29uZmlndXJhYmxlOiBmYWxzZSB9KTsgYS5sZW5ndGggPSAw
OyBhWzBdIiwgJzQyJyk7CisvLworc2hvdWxkQmUoInZhciBmb28gPSAwOyBPYmplY3QuZGVmaW5l
UHJvcGVydHkoW10sICcwJywgeyBzZXQ6ZnVuY3Rpb24oeCl7Zm9vID0geDt9IH0pWzBdID0gNDI7
IGZvbyIsICc0MicpOworLy8KK3Nob3VsZEJlVHJ1ZSgiT2JqZWN0LmRlZmluZVByb3BlcnR5KFtd
LCAnMCcsIHsgZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRydWU7fSB9KVswXSIpCisvLworc2hvdWxk
QmVUcnVlKCJPYmplY3QuZGVmaW5lUHJvcGVydHkoT2JqZWN0LmRlZmluZVByb3BlcnR5KFt0cnVl
XSwgJzAnLCB7IGNvbmZpZ3VyYWJsZTp0cnVlLCB3cml0YWJsZTogZmFsc2UgfSksICcwJywgeyB3
cml0YWJsZTogdHJ1ZSB9KVswXSIpOworLy8KK3Nob3VsZFRocm93KCJPYmplY3QuZGVmaW5lUHJv
cGVydHkoT2JqZWN0LmRlZmluZVByb3BlcnR5KFt0cnVlXSwgJzAnLCB7IGNvbmZpZ3VyYWJsZTpm
YWxzZSwgd3JpdGFibGU6IGZhbHNlIH0pLCAnMCcsIHsgd3JpdGFibGU6IHRydWUgfSlbMF0iKTsK
KworCitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpJbmRleDogTGF5b3V0VGVzdHMvaWV0ZXN0
Y2VudGVyL0phdmFzY3JpcHQvMTUuNC40LjE0LTktYS0xMi1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFzY3JpcHQvMTUuNC40LjE0LTktYS0x
Mi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDEwNDM5NykKKysrIExheW91dFRlc3RzL2lldGVzdGNl
bnRlci9KYXZhc2NyaXB0LzE1LjQuNC4xNC05LWEtMTItZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC00LDcgKzQsNyBAQCBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBCiAKIAogUEFTUyBFUzVIYXJuZXNzLnByZWNvbmRpdGlvblBhc3NlZCBpcyB0cnVlCi1GQUlM
IEVTNUhhcm5lc3MudGVzdFBhc3NlZCBzaG91bGQgYmUgdHJ1ZS4gV2FzIGZhbHNlLgorUEFTUyBF
UzVIYXJuZXNzLnRlc3RQYXNzZWQgaXMgdHJ1ZQogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQogCiBURVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2
YXNjcmlwdC8xNS40LjQuMTUtOC1hLTEyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9pZXRlc3RjZW50ZXIvSmF2YXNjcmlwdC8xNS40LjQuMTUtOC1hLTEyLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMTA0Mzk3KQorKysgTGF5b3V0VGVzdHMvaWV0ZXN0Y2VudGVyL0phdmFz
Y3JpcHQvMTUuNC40LjE1LTgtYS0xMi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTQs
NyArNCw3IEBAIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEEKIAogCiBQ
QVNTIEVTNUhhcm5lc3MucHJlY29uZGl0aW9uUGFzc2VkIGlzIHRydWUKLUZBSUwgRVM1SGFybmVz
cy50ZXN0UGFzc2VkIHNob3VsZCBiZSB0cnVlLiBXYXMgZmFsc2UuCitQQVNTIEVTNUhhcm5lc3Mu
dGVzdFBhc3NlZCBpcyB0cnVlCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRF
U1QgQ09NUExFVEUK
</data>
<flag name="review"
          id="122282"
          type_id="1"
          status="+"
          setter="sam"
    />
    <flag name="commit-queue"
          id="122311"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>