<?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>25201</bug_id>
          
          <creation_ts>2009-04-14 20:26:07 -0700</creation_ts>
          <short_desc>Add ScriptFunctionCall/ScriptObject for V8</short_desc>
          <delta_ts>2009-04-15 20:33:53 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Dimitri Glazkov (Google)">dglazkov</reporter>
          <assigned_to name="Dimitri Glazkov (Google)">dglazkov</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>117559</commentid>
    <comment_count>0</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-04-14 20:26:07 -0700</bug_when>
    <thetext>This is all part of the unforking effort for InspectorController</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117560</commentid>
    <comment_count>1</comment_count>
      <attachid>29488</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-04-14 20:27:35 -0700</bug_when>
    <thetext>Created attachment 29488
Add ScriptFunctionCall/ScriptObject for V8, v1.

 WebCore/ChangeLog                              |   23 ++++
 WebCore/bindings/v8/ScriptFunctionCall.cpp     |  168 ++++++++++++++++++++++++
 WebCore/bindings/v8/ScriptFunctionCall.h       |   70 ++++++++++
 WebCore/bindings/v8/ScriptObject.cpp           |  139 ++++++++++++++++++++
 WebCore/bindings/v8/ScriptObject.h             |   72 ++++++++++
 WebCore/bindings/v8/ScriptObjectQuarantine.cpp |  102 ++++++++++++++
 WebCore/bindings/v8/ScriptObjectQuarantine.h   |   60 +++++++++
 WebCore/bindings/v8/ScriptScope.cpp            |   67 ++++++++++
 WebCore/bindings/v8/ScriptScope.h              |   57 ++++++++
 WebCore/bindings/v8/ScriptState.cpp            |   50 +++++++
 WebCore/bindings/v8/ScriptState.h              |   11 ++
 WebCore/bindings/v8/ScriptString.h             |    1 +
 WebCore/bindings/v8/ScriptValue.h              |    5 +
 13 files changed, 825 insertions(+), 0 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117561</commentid>
    <comment_count>2</comment_count>
      <attachid>29488</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-04-14 21:13:00 -0700</bug_when>
    <thetext>Comment on attachment 29488
Add ScriptFunctionCall/ScriptObject for V8, v1.

&gt; +++ b/WebCore/bindings/v8/ScriptObject.cpp
...
&gt; +#include &quot;config.h&quot;
&gt; +#include &quot;ScriptObject.h&quot;
&gt; +#include &quot;ScriptScope.h&quot;
&gt; +#include &quot;ScriptState.h&quot;

nit: insert newline after ScriptObject.h


&gt; +++ b/WebCore/bindings/v8/ScriptObject.h
...
&gt; +    class ScriptObject : public ScriptValue {
...
&gt; +        static ScriptObject createNew(ScriptState*);

nit: isn&apos;t it more common to just call a function like this &quot;create&quot; instead?


&gt; +++ b/WebCore/bindings/v8/ScriptObjectQuarantine.cpp
...
&gt; +bool getQuarantinedScriptObject(Database* database, ScriptObject&amp; quarantinedObject)
&gt; +{
&gt; +    ASSERT(database);
&gt; +
&gt; +    // FIXME: Implement when Database V8 bindings are enabled

nit: maybe add an ASSERT_NOT_REACHED?


&gt; +    // FIXME: Implement when DOM Storage V8 bindings are enabled

ditto


LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117711</commentid>
    <comment_count>3</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-04-15 20:33:53 -0700</bug_when>
    <thetext>Comments addressed, landed as http://trac.webkit.org/changeset/42568.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29488</attachid>
            <date>2009-04-14 20:27:35 -0700</date>
            <delta_ts>2009-04-14 21:13:00 -0700</delta_ts>
            <desc>Add ScriptFunctionCall/ScriptObject for V8, v1.</desc>
            <filename>Add-ScriptFunctionCall-ScriptObject-for-V8-v1..patch</filename>
            <type>text/plain</type>
            <size>33852</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">OGQyOTZkM2ZmNzYyM2Y2ZDY4ZTY4ZWIxZGU4OTgxNGEzMDk3NzQ4NwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBmN2QxMmNjLi45ZTU5NWU1
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDI2IEBACisyMDA5LTA0LTE0ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1MjAxCisgICAg
ICAgIEFkZCBTY3JpcHRGdW5jdGlvbkNhbGwvU2NyaXB0T2JqZWN0IGZvciBWOC4KKworICAgICAg
ICAqIGJpbmRpbmdzL3Y4L1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHA6IEFkZGVkLgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L1NjcmlwdEZ1bmN0aW9uQ2FsbC5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5k
aW5ncy92OC9TY3JpcHRPYmplY3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9T
Y3JpcHRPYmplY3QuaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0T2JqZWN0
UXVhcmFudGluZS5jcHA6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdE9iamVj
dFF1YXJhbnRpbmUuaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0U2NvcGUu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRTY29wZS5oOiBBZGRlZC4K
KyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRTdGF0ZS5oOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0U3RhdGU6OlNjcmlwdFN0YXRlKTogQWRkZWQgbmV3IGNvbnN0cnVjdG9ycy4KKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdFN0YXRlOjpmcmFtZSk6IEFkZGVkIEZyYW1lIHB0ciBhY2Nlc3Nv
ci4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRTdHJpbmcuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdFN0cmluZzo6U2NyaXB0U3RyaW5nKTogQWRkZWQgZGVmYXVsdCBjb25zdHJ1Y3Rv
ci4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRWYWx1ZS5oOgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0VmFsdWU6OmlzRXF1YWwpOiBBZGRlZC4KKwogMjAwOS0wNC0xNCAgR2VvZmZyZXkg
R2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFVzZWQgc3ZuIG1lcmdlIC1yNDI1
Mjk6NDI1MjggdG8gcm9sbCBvdXQgbXkgbGFzdCBwYXRjaCBiZWNhdXNlIGl0IGJyb2tlCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAgYi9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNThiYWRiZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcApAQCAtMCwwICsxLDE2OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JpcHRGdW5jdGlvbkNhbGwuaCIKKworI2luY2x1ZGUg
IkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJTY3JpcHRTY29wZS5o
IgorI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCisjaW5jbHVkZSAiU2NyaXB0U3RyaW5nLmgiCisj
aW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKKworI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1
ZGUgIlY4UHJveHkuaCIKKworI2luY2x1ZGUgPHY4Lmg+CisjaW5jbHVkZSA8d3RmL093bkFycmF5
UHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHZvaWQgcmVwb3J0RXhjZXB0
aW9uKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgdjg6OlRyeUNhdGNoICZleGNlcHRpb25DYXRj
aGVyKQoreworICAgIHY4OjpMb2NhbDx2ODo6TWVzc2FnZT4gbWVzc2FnZSA9IGV4Y2VwdGlvbkNh
dGNoZXIuTWVzc2FnZSgpOworICAgIHNjcmlwdFN0YXRlLT5mcmFtZSgpLT5kb2N1bWVudCgpLT5y
ZXBvcnRFeGNlcHRpb24odG9XZWJDb3JlU3RyaW5nKG1lc3NhZ2UtPkdldCgpKSwgbWVzc2FnZS0+
R2V0TGluZU51bWJlcigpLCB0b1dlYkNvcmVTdHJpbmcobWVzc2FnZS0+R2V0U2NyaXB0UmVzb3Vy
Y2VOYW1lKCkpKTsKKyAgICBleGNlcHRpb25DYXRjaGVyLlJlc2V0KCk7Cit9CisKK1NjcmlwdEZ1
bmN0aW9uQ2FsbDo6U2NyaXB0RnVuY3Rpb25DYWxsKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwg
Y29uc3QgU2NyaXB0T2JqZWN0JiB0aGlzT2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUpCisgICAg
OiBtX3NjcmlwdFN0YXRlKHNjcmlwdFN0YXRlKQorICAgICwgbV90aGlzT2JqZWN0KHRoaXNPYmpl
Y3QpCisgICAgLCBtX25hbWUobmFtZSkKK3sKK30KKwordm9pZCBTY3JpcHRGdW5jdGlvbkNhbGw6
OmFwcGVuZEFyZ3VtZW50KGNvbnN0IFNjcmlwdE9iamVjdCYgYXJndW1lbnQpCit7CisgICAgbV9h
cmd1bWVudHMuYXBwZW5kKGFyZ3VtZW50KTsKK30KKwordm9pZCBTY3JpcHRGdW5jdGlvbkNhbGw6
OmFwcGVuZEFyZ3VtZW50KGNvbnN0IFNjcmlwdFN0cmluZyYgYXJndW1lbnQpCit7CisgICAgU2Ny
aXB0U2NvcGUgc2NvcGUobV9zY3JpcHRTdGF0ZSk7CisgICAgbV9hcmd1bWVudHMuYXBwZW5kKHY4
U3RyaW5nKGFyZ3VtZW50KSk7Cit9CisKK3ZvaWQgU2NyaXB0RnVuY3Rpb25DYWxsOjphcHBlbmRB
cmd1bWVudChjb25zdCBTY3JpcHRWYWx1ZSYgYXJndW1lbnQpCit7CisgICAgbV9hcmd1bWVudHMu
YXBwZW5kKGFyZ3VtZW50KTsKK30KKwordm9pZCBTY3JpcHRGdW5jdGlvbkNhbGw6OmFwcGVuZEFy
Z3VtZW50KGNvbnN0IFN0cmluZyYgYXJndW1lbnQpCit7CisgICAgU2NyaXB0U2NvcGUgc2NvcGUo
bV9zY3JpcHRTdGF0ZSk7CisgICAgbV9hcmd1bWVudHMuYXBwZW5kKHY4U3RyaW5nKGFyZ3VtZW50
KSk7Cit9CisKK3ZvaWQgU2NyaXB0RnVuY3Rpb25DYWxsOjphcHBlbmRBcmd1bWVudChsb25nIGxv
bmcgYXJndW1lbnQpCit7CisgICAgU2NyaXB0U2NvcGUgc2NvcGUobV9zY3JpcHRTdGF0ZSk7Cisg
ICAgbV9hcmd1bWVudHMuYXBwZW5kKHY4OjpOdW1iZXI6Ok5ldyhhcmd1bWVudCkpOworfQorCit2
b2lkIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6YXBwZW5kQXJndW1lbnQodW5zaWduZWQgaW50IGFyZ3Vt
ZW50KQoreworICAgIFNjcmlwdFNjb3BlIHNjb3BlKG1fc2NyaXB0U3RhdGUpOworICAgIG1fYXJn
dW1lbnRzLmFwcGVuZCh2ODo6TnVtYmVyOjpOZXcoYXJndW1lbnQpKTsKK30KKwordm9pZCBTY3Jp
cHRGdW5jdGlvbkNhbGw6OmFwcGVuZEFyZ3VtZW50KGludCBhcmd1bWVudCkKK3sKKyAgICBTY3Jp
cHRTY29wZSBzY29wZShtX3NjcmlwdFN0YXRlKTsKKyAgICBtX2FyZ3VtZW50cy5hcHBlbmQodjg6
Ok51bWJlcjo6TmV3KGFyZ3VtZW50KSk7Cit9CisKK3ZvaWQgU2NyaXB0RnVuY3Rpb25DYWxsOjph
cHBlbmRBcmd1bWVudChib29sIGFyZ3VtZW50KQoreworICAgIG1fYXJndW1lbnRzLmFwcGVuZCh2
OEJvb2xlYW4oYXJndW1lbnQpKTsKK30KKworU2NyaXB0VmFsdWUgU2NyaXB0RnVuY3Rpb25DYWxs
OjpjYWxsKGJvb2wmIGhhZEV4Y2VwdGlvbiwgYm9vbCByZXBvcnRFeGNlcHRpb25zKQoreworICAg
IFNjcmlwdFNjb3BlIHNjb3BlKG1fc2NyaXB0U3RhdGUsIHJlcG9ydEV4Y2VwdGlvbnMpOworCisg
ICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHRoaXNPYmplY3QgPSBtX3RoaXNPYmplY3QudjhPYmpl
Y3QoKTsKKyAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSA9IHRoaXNPYmplY3QtPkdldCh2
OFN0cmluZyhtX25hbWUpKTsKKyAgICBpZiAoIXNjb3BlLnN1Y2Nlc3MoKSkgeworICAgICAgICBo
YWRFeGNlcHRpb24gPSB0cnVlOworICAgICAgICByZXR1cm4gU2NyaXB0VmFsdWUoKTsKKyAgICB9
CisKKyAgICBBU1NFUlQodmFsdWUtPklzRnVuY3Rpb24oKSk7CisKKyAgICB2ODo6TG9jYWw8djg6
OkZ1bmN0aW9uPiBmdW5jdGlvbih2ODo6RnVuY3Rpb246OkNhc3QoKnZhbHVlKSk7CisgICAgT3du
QXJyYXlQdHI8djg6OkhhbmRsZTx2ODo6VmFsdWU+ID4gYXJncyhuZXcgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+W21fYXJndW1lbnRzLnNpemUoKV0pOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpCisgICAgICAgIGFyZ3NbaV0gPSBtX2FyZ3VtZW50c1tp
XS52OFZhbHVlKCk7CisKKyAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiByZXN1bHQgPSBmdW5jdGlv
bi0+Q2FsbCh0aGlzT2JqZWN0LCBtX2FyZ3VtZW50cy5zaXplKCksIGFyZ3MuZ2V0KCkpOworICAg
IGlmICghc2NvcGUuc3VjY2VzcygpKSB7CisgICAgICAgIGhhZEV4Y2VwdGlvbiA9IHRydWU7Cisg
ICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZSgpOworICAgIH0KKworICAgIHJldHVybiBTY3JpcHRW
YWx1ZShyZXN1bHQpOworfQorCitTY3JpcHRWYWx1ZSBTY3JpcHRGdW5jdGlvbkNhbGw6OmNhbGwo
KQoreworICAgIGJvb2wgaGFkRXhjZXB0aW9uID0gZmFsc2U7CisgICAgcmV0dXJuIGNhbGwoaGFk
RXhjZXB0aW9uKTsKK30KKworU2NyaXB0T2JqZWN0IFNjcmlwdEZ1bmN0aW9uQ2FsbDo6Y29uc3Ry
dWN0KGJvb2wmIGhhZEV4Y2VwdGlvbiwgYm9vbCByZXBvcnRFeGNlcHRpb25zKQoreworICAgIFNj
cmlwdFNjb3BlIHNjb3BlKG1fc2NyaXB0U3RhdGUsIHJlcG9ydEV4Y2VwdGlvbnMpOworCisgICAg
djg6OkxvY2FsPHY4OjpPYmplY3Q+IHRoaXNPYmplY3QgPSBtX3RoaXNPYmplY3QudjhPYmplY3Qo
KTsKKyAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSA9IHRoaXNPYmplY3QtPkdldCh2OFN0
cmluZyhtX25hbWUpKTsKKyAgICBpZiAoIXNjb3BlLnN1Y2Nlc3MoKSkgeworICAgICAgICBoYWRF
eGNlcHRpb24gPSB0cnVlOworICAgICAgICByZXR1cm4gU2NyaXB0T2JqZWN0KCk7CisgICAgfQor
CisgICAgQVNTRVJUKHZhbHVlLT5Jc0Z1bmN0aW9uKCkpOworCisgICAgdjg6OkxvY2FsPHY4OjpG
dW5jdGlvbj4gY29uc3RydWN0b3Iodjg6OkZ1bmN0aW9uOjpDYXN0KCp2YWx1ZSkpOworICAgIE93
bkFycmF5UHRyPHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+IGFyZ3MobmV3IHY4OjpIYW5kbGU8djg6
OlZhbHVlPlttX2FyZ3VtZW50cy5zaXplKCldKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKQorICAgICAgICBhcmdzW2ldID0gbV9hcmd1bWVudHNb
aV0udjhWYWx1ZSgpOworCisgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHJlc3VsdCA9IFNhZmVB
bGxvY2F0aW9uOjpOZXdJbnN0YW5jZShjb25zdHJ1Y3RvciwgbV9hcmd1bWVudHMuc2l6ZSgpLCBh
cmdzLmdldCgpKTsKKyAgICBpZiAoIXNjb3BlLnN1Y2Nlc3MoKSkgeworICAgICAgICBoYWRFeGNl
cHRpb24gPSB0cnVlOworICAgICAgICByZXR1cm4gU2NyaXB0T2JqZWN0KCk7CisgICAgfQorCisg
ICAgcmV0dXJuIFNjcmlwdE9iamVjdChyZXN1bHQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEZ1bmN0aW9uQ2FsbC5o
IGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRGdW5jdGlvbkNhbGwuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzY1YTRlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9iaW5kaW5ncy92OC9TY3JpcHRGdW5jdGlvbkNhbGwuaApAQCAtMCwwICsxLDcwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBTY3JpcHRGdW5jdGlvbkNhbGxfaAorI2RlZmluZSBTY3JpcHRGdW5jdGlvbkNhbGxfaAorCisj
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTY3JpcHRPYmplY3QuaCIKKwor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNz
IFNjcmlwdFZhbHVlOworICAgIGNsYXNzIFNjcmlwdFN0YXRlOworICAgIGNsYXNzIFNjcmlwdFN0
cmluZzsKKworICAgIGNsYXNzIFNjcmlwdEZ1bmN0aW9uQ2FsbCB7CisgICAgcHVibGljOgorICAg
ICAgICBTY3JpcHRGdW5jdGlvbkNhbGwoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBjb25zdCBT
Y3JpcHRPYmplY3QmIHRoaXNPYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgICAgIHZp
cnR1YWwgflNjcmlwdEZ1bmN0aW9uQ2FsbCgpIHt9OworCisgICAgICAgIHZvaWQgYXBwZW5kQXJn
dW1lbnQoY29uc3QgU2NyaXB0T2JqZWN0Jik7CisgICAgICAgIHZvaWQgYXBwZW5kQXJndW1lbnQo
Y29uc3QgU2NyaXB0U3RyaW5nJik7CisgICAgICAgIHZvaWQgYXBwZW5kQXJndW1lbnQoY29uc3Qg
U2NyaXB0VmFsdWUmKTsKKyAgICAgICAgdm9pZCBhcHBlbmRBcmd1bWVudChjb25zdCBTdHJpbmcm
KTsKKyAgICAgICAgdm9pZCBhcHBlbmRBcmd1bWVudChsb25nIGxvbmcpOworICAgICAgICB2b2lk
IGFwcGVuZEFyZ3VtZW50KHVuc2lnbmVkIGludCk7CisgICAgICAgIHZvaWQgYXBwZW5kQXJndW1l
bnQoaW50KTsKKyAgICAgICAgdm9pZCBhcHBlbmRBcmd1bWVudChib29sKTsKKyAgICAgICAgU2Ny
aXB0VmFsdWUgY2FsbChib29sJiBoYWRFeGNlcHRpb24sIGJvb2wgcmVwb3J0RXhjZXB0aW9ucyA9
IHRydWUpOworICAgICAgICBTY3JpcHRWYWx1ZSBjYWxsKCk7CisgICAgICAgIFNjcmlwdE9iamVj
dCBjb25zdHJ1Y3QoYm9vbCYgaGFkRXhjZXB0aW9uLCBib29sIHJlcG9ydEV4Y2VwdGlvbnMgPSB0
cnVlKTsKKworICAgIHByb3RlY3RlZDoKKyAgICAgICAgU2NyaXB0U3RhdGUqIG1fc2NyaXB0U3Rh
dGU7CisgICAgICAgIFNjcmlwdE9iamVjdCBtX3RoaXNPYmplY3Q7CisgICAgICAgIFN0cmluZyBt
X25hbWU7CisgICAgICAgIFZlY3RvcjxTY3JpcHRWYWx1ZT4gbV9hcmd1bWVudHM7CisgICAgfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2NyaXB0RnVuY3Rpb25DYWxs
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdE9iamVjdC5jcHAgYi9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1NjcmlwdE9iamVjdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNzIxNTBiZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0T2JqZWN0LmNwcApAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJTY3JpcHRPYmplY3QuaCIKKyNpbmNsdWRlICJTY3JpcHRTY29wZS5oIgorI2lu
Y2x1ZGUgIlNjcmlwdFN0YXRlLmgiCisKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRl
ICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiVjhQcm94eS5oIgor
CisjaW5jbHVkZSA8djguaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTY3JpcHRPYmplY3Q6
OlNjcmlwdE9iamVjdCh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHY4T2JqZWN0KQorICAgIDogU2Ny
aXB0VmFsdWUodjhPYmplY3QpCit7Cit9CisKK3Y4OjpMb2NhbDx2ODo6T2JqZWN0PiBTY3JpcHRP
YmplY3Q6OnY4T2JqZWN0KCkgY29uc3QKK3sKKyAgICBBU1NFUlQodjhWYWx1ZSgpLT5Jc09iamVj
dCgpKTsKKyAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpPYmplY3Q+KHY4OjpPYmplY3Q6OkNhc3Qo
KnY4VmFsdWUoKSkpOworfQorCitib29sIFNjcmlwdE9iamVjdDo6c2V0KFNjcmlwdFN0YXRlKiBz
Y3JpcHRTdGF0ZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorewor
ICAgIFNjcmlwdFNjb3BlIHNjb3BlKHNjcmlwdFN0YXRlKTsKKyAgICB2OE9iamVjdCgpLT5TZXQo
djhTdHJpbmcobmFtZSksIHY4U3RyaW5nKHZhbHVlKSk7CisgICAgcmV0dXJuIHNjb3BlLnN1Y2Nl
c3MoKTsKK30KKworYm9vbCBTY3JpcHRPYmplY3Q6OnNldChTY3JpcHRTdGF0ZSogc2NyaXB0U3Rh
dGUsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFNjcmlwdE9iamVjdCYgdmFsdWUpCit7CisgICAg
U2NyaXB0U2NvcGUgc2NvcGUoc2NyaXB0U3RhdGUpOworICAgIHY4T2JqZWN0KCktPlNldCh2ODo6
U3RyaW5nOjpOZXcobmFtZSksIHZhbHVlLnY4VmFsdWUoKSk7CisgICAgcmV0dXJuIHNjb3BlLnN1
Y2Nlc3MoKTsKK30KKworYm9vbCBTY3JpcHRPYmplY3Q6OnNldChTY3JpcHRTdGF0ZSogc2NyaXB0
U3RhdGUsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgU2Ny
aXB0U2NvcGUgc2NvcGUoc2NyaXB0U3RhdGUpOworICAgIHY4T2JqZWN0KCktPlNldCh2ODo6U3Ry
aW5nOjpOZXcobmFtZSksIHY4U3RyaW5nKHZhbHVlKSk7CisgICAgcmV0dXJuIHNjb3BlLnN1Y2Nl
c3MoKTsKK30KKworYm9vbCBTY3JpcHRPYmplY3Q6OnNldChTY3JpcHRTdGF0ZSogc2NyaXB0U3Rh
dGUsIGNvbnN0IGNoYXIqIG5hbWUsIGRvdWJsZSB2YWx1ZSkKK3sKKyAgICBTY3JpcHRTY29wZSBz
Y29wZShzY3JpcHRTdGF0ZSk7CisgICAgdjhPYmplY3QoKS0+U2V0KHY4OjpTdHJpbmc6Ok5ldyhu
YW1lKSwgdjg6Ok51bWJlcjo6TmV3KHZhbHVlKSk7CisgICAgcmV0dXJuIHNjb3BlLnN1Y2Nlc3Mo
KTsKK30KKworYm9vbCBTY3JpcHRPYmplY3Q6OnNldChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUs
IGNvbnN0IGNoYXIqIG5hbWUsIGxvbmcgbG9uZyB2YWx1ZSkKK3sKKyAgICBTY3JpcHRTY29wZSBz
Y29wZShzY3JpcHRTdGF0ZSk7CisgICAgdjhPYmplY3QoKS0+U2V0KHY4OjpTdHJpbmc6Ok5ldyhu
YW1lKSwgdjg6Ok51bWJlcjo6TmV3KHZhbHVlKSk7CisgICAgcmV0dXJuIHNjb3BlLnN1Y2Nlc3Mo
KTsKK30KKworYm9vbCBTY3JpcHRPYmplY3Q6OnNldChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUs
IGNvbnN0IGNoYXIqIG5hbWUsIGludCB2YWx1ZSkKK3sKKyAgICBTY3JpcHRTY29wZSBzY29wZShz
Y3JpcHRTdGF0ZSk7CisgICAgdjhPYmplY3QoKS0+U2V0KHY4OjpTdHJpbmc6Ok5ldyhuYW1lKSwg
djg6Ok51bWJlcjo6TmV3KHZhbHVlKSk7CisgICAgcmV0dXJuIHNjb3BlLnN1Y2Nlc3MoKTsKK30K
KworYm9vbCBTY3JpcHRPYmplY3Q6OnNldChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0
IGNoYXIqIG5hbWUsIGJvb2wgdmFsdWUpCit7CisgICAgU2NyaXB0U2NvcGUgc2NvcGUoc2NyaXB0
U3RhdGUpOworICAgIHY4T2JqZWN0KCktPlNldCh2ODo6U3RyaW5nOjpOZXcobmFtZSksIHY4Qm9v
bGVhbih2YWx1ZSkpOworICAgIHJldHVybiBzY29wZS5zdWNjZXNzKCk7Cit9CisKK1NjcmlwdE9i
amVjdCBTY3JpcHRPYmplY3Q6OmNyZWF0ZU5ldyhTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUpCit7
CisgICAgU2NyaXB0U2NvcGUgc2NvcGUoc2NyaXB0U3RhdGUpOworICAgIHJldHVybiBTY3JpcHRP
YmplY3Qodjg6Ok9iamVjdDo6TmV3KCkpOworfQorCitib29sIFNjcmlwdEdsb2JhbE9iamVjdDo6
c2V0KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgU2Ny
aXB0T2JqZWN0JiB2YWx1ZSkKK3sKKyAgICBTY3JpcHRTY29wZSBzY29wZShzY3JpcHRTdGF0ZSk7
CisgICAgc2NvcGUuZ2xvYmFsKCktPlNldCh2ODo6U3RyaW5nOjpOZXcobmFtZSksIHZhbHVlLnY4
VmFsdWUoKSk7CisgICAgcmV0dXJuIHNjb3BlLnN1Y2Nlc3MoKTsKK30KKworYm9vbCBTY3JpcHRH
bG9iYWxPYmplY3Q6OnNldChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IGNoYXIqIG5h
bWUsIEluc3BlY3RvckNvbnRyb2xsZXIqIHZhbHVlKQoreworICAgIFNjcmlwdFNjb3BlIHNjb3Bl
KHNjcmlwdFN0YXRlKTsKKyAgICBzY29wZS5nbG9iYWwoKS0+U2V0KHY4OjpTdHJpbmc6Ok5ldyhu
YW1lKSwgVjhQcm94eTo6VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OklOU1BFQ1RPUkNPTlRST0xM
RVIsIHZhbHVlKSk7CisgICAgcmV0dXJuIHNjb3BlLnN1Y2Nlc3MoKTsKK30KKworYm9vbCBTY3Jp
cHRHbG9iYWxPYmplY3Q6OmdldE9iamVjdChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0
IGNoYXIqIG5hbWUsIFNjcmlwdE9iamVjdCYgdmFsdWUpCit7CisgICAgU2NyaXB0U2NvcGUgc2Nv
cGUoc2NyaXB0U3RhdGUpOworICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHY4VmFsdWUgPSBzY29w
ZS5nbG9iYWwoKS0+R2V0KHY4OjpTdHJpbmc6Ok5ldyhuYW1lKSk7CisgICAgaWYgKHY4VmFsdWUu
SXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIXY4VmFsdWUtPklz
T2JqZWN0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHZhbHVlID0gU2NyaXB0T2Jq
ZWN0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4odjg6Ok9iamVjdDo6Q2FzdCgqdjhWYWx1ZSkpKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRPYmplY3QuaCBiL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0T2JqZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVk
MWI4NwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0T2JqZWN0
LmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2NyaXB0T2JqZWN0X2gKKyNkZWZpbmUgU2NyaXB0
T2JqZWN0X2gKKworI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCisKKyNpbmNsdWRlIDx2OC5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgSW5zcGVjdG9yQ29udHJvbGxlcjsKKyAg
ICBjbGFzcyBTY3JpcHRTdGF0ZTsKKworICAgIGNsYXNzIFNjcmlwdE9iamVjdCA6IHB1YmxpYyBT
Y3JpcHRWYWx1ZSB7CisgICAgcHVibGljOgorICAgICAgICBTY3JpcHRPYmplY3Qodjg6OkhhbmRs
ZTx2ODo6T2JqZWN0Pik7CisgICAgICAgIFNjcmlwdE9iamVjdCgpIHt9CisgICAgICAgIHZpcnR1
YWwgflNjcmlwdE9iamVjdCgpIHt9CisKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHY4
T2JqZWN0KCkgY29uc3Q7CisKKyAgICAgICAgYm9vbCBzZXQoU2NyaXB0U3RhdGUqLCBjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYpOworICAgICAgICBib29sIHNldChTY3JpcHRTdGF0
ZSosIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFNjcmlwdE9iamVjdCYpOworICAgICAgICBib29s
IHNldChTY3JpcHRTdGF0ZSosIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFN0cmluZyYpOworICAg
ICAgICBib29sIHNldChTY3JpcHRTdGF0ZSosIGNvbnN0IGNoYXIqIG5hbWUsIGRvdWJsZSk7Cisg
ICAgICAgIGJvb2wgc2V0KFNjcmlwdFN0YXRlKiwgY29uc3QgY2hhciogbmFtZSwgbG9uZyBsb25n
KTsKKyAgICAgICAgYm9vbCBzZXQoU2NyaXB0U3RhdGUqLCBjb25zdCBjaGFyKiBuYW1lLCBpbnQp
OworICAgICAgICBib29sIHNldChTY3JpcHRTdGF0ZSosIGNvbnN0IGNoYXIqIG5hbWUsIGJvb2wp
OworCisgICAgICAgIHN0YXRpYyBTY3JpcHRPYmplY3QgY3JlYXRlTmV3KFNjcmlwdFN0YXRlKik7
CisgICAgfTsKKworICAgIGNsYXNzIFNjcmlwdEdsb2JhbE9iamVjdCB7CisgICAgcHVibGljOgor
ICAgICAgICBzdGF0aWMgYm9vbCBzZXQoU2NyaXB0U3RhdGUqLCBjb25zdCBjaGFyKiBuYW1lLCBj
b25zdCBTY3JpcHRPYmplY3QmKTsKKyAgICAgICAgc3RhdGljIGJvb2wgc2V0KFNjcmlwdFN0YXRl
KiwgY29uc3QgY2hhciogbmFtZSwgSW5zcGVjdG9yQ29udHJvbGxlciopOworICAgICAgICBzdGF0
aWMgYm9vbCBnZXRPYmplY3QoU2NyaXB0U3RhdGUqLCBjb25zdCBjaGFyKiBuYW1lLCBTY3JpcHRP
YmplY3QmKTsKKyAgICBwcml2YXRlOgorICAgICAgICBTY3JpcHRHbG9iYWxPYmplY3QoKSB7IH0K
KyAgICB9OworCit9CisKKyNlbmRpZiAvLyBTY3JpcHRPYmplY3RfaApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TY3JpcHRPYmplY3RRdWFyYW50aW5lLmNwcCBiL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvU2NyaXB0T2JqZWN0UXVhcmFudGluZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZWI2NGM2YwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGlu
Z3MvdjgvU2NyaXB0T2JqZWN0UXVhcmFudGluZS5jcHAKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2NyaXB0T2JqZWN0UXVhcmFudGluZS5oIgorCisjaW5j
bHVkZSAiRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRPTVdp
bmRvdy5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUg
IlNjcmlwdE9iamVjdC5oIgorI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCisKKyNpbmNsdWRlICJW
OEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOFByb3h5LmgiCisKKyNpbmNsdWRlIDx2OC5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1NjcmlwdFZhbHVlIHF1YXJhbnRpbmVWYWx1ZShTY3JpcHRT
dGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IFNjcmlwdFZhbHVlJiB2YWx1ZSkKK3sKKyAgICByZXR1
cm4gdmFsdWU7Cit9CisKK2Jvb2wgZ2V0UXVhcmFudGluZWRTY3JpcHRPYmplY3QoRGF0YWJhc2Uq
IGRhdGFiYXNlLCBTY3JpcHRPYmplY3QmIHF1YXJhbnRpbmVkT2JqZWN0KQoreworICAgIEFTU0VS
VChkYXRhYmFzZSk7CisKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHdoZW4gRGF0YWJhc2UgVjgg
YmluZGluZ3MgYXJlIGVuYWJsZWQKKyAgICBxdWFyYW50aW5lZE9iamVjdCA9IFNjcmlwdE9iamVj
dCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBnZXRRdWFyYW50aW5lZFNjcmlwdE9i
amVjdChGcmFtZSogZnJhbWUsIFN0b3JhZ2UqIHN0b3JhZ2UsIFNjcmlwdE9iamVjdCYgcXVhcmFu
dGluZWRPYmplY3QpCit7CisgICAgQVNTRVJUKGZyYW1lKTsKKyAgICBBU1NFUlQoc3RvcmFnZSk7
CisKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHdoZW4gRE9NIFN0b3JhZ2UgVjggYmluZGluZ3Mg
YXJlIGVuYWJsZWQKKyAgICBxdWFyYW50aW5lZE9iamVjdCA9IFNjcmlwdE9iamVjdCgpOworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIGdldFF1YXJhbnRpbmVkU2NyaXB0T2JqZWN0KE5vZGUq
IG5vZGUsIFNjcmlwdE9iamVjdCYgcXVhcmFudGluZWRPYmplY3QpCit7CisgICAgQVNTRVJUKG5v
ZGUpOworCisgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOworICAgIHY4OjpMb2NhbDx2
ODo6Q29udGV4dD4gY29udGV4dCA9IFY4UHJveHk6OkdldENvbnRleHQobm9kZS0+ZG9jdW1lbnQo
KS0+cGFnZSgpLT5tYWluRnJhbWUoKSk7CisgICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKGNv
bnRleHQpOworCisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4Tm9kZSA9IFY4UHJveHk6Ok5v
ZGVUb1Y4T2JqZWN0KG5vZGUpOworICAgIHF1YXJhbnRpbmVkT2JqZWN0ID0gU2NyaXB0T2JqZWN0
KHY4OjpMb2NhbDx2ODo6T2JqZWN0Pih2ODo6T2JqZWN0OjpDYXN0KCp2OE5vZGUpKSk7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBnZXRRdWFyYW50aW5lZFNjcmlwdE9iamVjdChET01X
aW5kb3cqIGRvbVdpbmRvdywgU2NyaXB0T2JqZWN0JiBxdWFyYW50aW5lZE9iamVjdCkKK3sKKyAg
ICBBU1NFUlQoZG9tV2luZG93KTsKKworICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsK
KyAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGNvbnRleHQgPSBWOFByb3h5OjpHZXRDb250ZXh0
KGRvbVdpbmRvdy0+ZnJhbWUoKSk7CisgICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKGNvbnRl
eHQpOworCisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4RG9tV2luZG93ID0gVjhQcm94eTo6
VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgZG9tV2luZG93KTsKKyAgICBxdWFy
YW50aW5lZE9iamVjdCA9IFNjcmlwdE9iamVjdCh2ODo6TG9jYWw8djg6Ok9iamVjdD4odjg6Ok9i
amVjdDo6Q2FzdCgqdjhEb21XaW5kb3cpKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nj
cmlwdE9iamVjdFF1YXJhbnRpbmUuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0T2JqZWN0
UXVhcmFudGluZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiN2NjZmYK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdE9iamVjdFF1YXJh
bnRpbmUuaApAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gU2NyaXB0T2JqZWN0UXVhcmFudGluZSBpcyB1c2Vk
IGluIEpTQyBmb3Igd3JhcHBpbmcgRE9NIG9iamVjdHMgb2YgdGhlIHBhZ2UKKy8vIGJlZm9yZSB0
aGV5IGFyZSBwYXNzZWQgdG8gSW5zcGVjdG9yJ3MgZnJvbnQtZW5kLiBUaGUgd3JhcHBpbmcgcHJl
dmVudHMKKy8vIG1hbGljaW91cyBzY3JpcHRzIGZyb20gZ2FpbmluZyBwcml2aWxlZ2VzLiBGb3Ig
VjgsIHdlIGFyZSBjdXJyZW50bHkganVzdAorLy8gcGFzc2luZyB0aGUgb2JqZWN0IGl0c2VsZiwg
d2l0aG91dCBhbnkgd3JhcHBpbmcuCisKKyNpZm5kZWYgU2NyaXB0T2JqZWN0UXVhcmFudGluZV9o
CisjZGVmaW5lIFNjcmlwdE9iamVjdFF1YXJhbnRpbmVfaAorCisjaW5jbHVkZSAiU2NyaXB0U3Rh
dGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgRGF0YWJhc2U7CisgICAg
Y2xhc3MgRE9NV2luZG93OworICAgIGNsYXNzIEZyYW1lOworICAgIGNsYXNzIE5vZGU7CisgICAg
Y2xhc3MgU2NyaXB0T2JqZWN0OworICAgIGNsYXNzIFNjcmlwdFZhbHVlOworICAgIGNsYXNzIFN0
b3JhZ2U7CisKKyAgICBTY3JpcHRWYWx1ZSBxdWFyYW50aW5lVmFsdWUoU2NyaXB0U3RhdGUqLCBj
b25zdCBTY3JpcHRWYWx1ZSYpOworCisgICAgYm9vbCBnZXRRdWFyYW50aW5lZFNjcmlwdE9iamVj
dChEYXRhYmFzZSogZGF0YWJhc2UsIFNjcmlwdE9iamVjdCYgcXVhcmFudGluZWRPYmplY3QpOwor
ICAgIGJvb2wgZ2V0UXVhcmFudGluZWRTY3JpcHRPYmplY3QoRnJhbWUqIGZyYW1lLCBTdG9yYWdl
KiBzdG9yYWdlLCBTY3JpcHRPYmplY3QmIHF1YXJhbnRpbmVkT2JqZWN0KTsKKyAgICBib29sIGdl
dFF1YXJhbnRpbmVkU2NyaXB0T2JqZWN0KE5vZGUqIG5vZGUsIFNjcmlwdE9iamVjdCYgcXVhcmFu
dGluZWRPYmplY3QpOworICAgIGJvb2wgZ2V0UXVhcmFudGluZWRTY3JpcHRPYmplY3QoRE9NV2lu
ZG93KiBkb21XaW5kb3csIFNjcmlwdE9iamVjdCYgcXVhcmFudGluZWRPYmplY3QpOworCit9CisK
KyNlbmRpZiAvLyBTY3JpcHRPYmplY3RRdWFyYW50aW5lX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YmluZGluZ3MvdjgvU2NyaXB0U2NvcGUuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRT
Y29wZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM3ZjY2NAotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U2NvcGUuY3BwCkBAIC0w
LDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2NyaXB0U2NvcGUuaCIK
KworI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2lu
Y2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhQcm94
eS5oIgorCisjaW5jbHVkZSA8djguaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTY3JpcHRT
Y29wZTo6U2NyaXB0U2NvcGUoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBib29sIHJlcG9ydEV4
Y2VwdGlvbnMpCisgICAgOiBtX2NvbnRleHQoVjhQcm94eTo6R2V0Q29udGV4dChzY3JpcHRTdGF0
ZS0+ZnJhbWUoKSkpCisgICAgLCBtX3Njb3BlKG1fY29udGV4dCkKKyAgICAsIG1fc2NyaXB0U3Rh
dGUoc2NyaXB0U3RhdGUpCisgICAgLCBtX3JlcG9ydEV4Y2VwdGlvbnMocmVwb3J0RXhjZXB0aW9u
cykKK3sKKyAgICBBU1NFUlQoIW1fY29udGV4dC5Jc0VtcHR5KCkpOworfQorCitib29sIFNjcmlw
dFNjb3BlOjpzdWNjZXNzKCkKK3sKKyAgICBpZiAoIW1fZXhjZXB0aW9uQ2F0Y2hlci5IYXNDYXVn
aHQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICB2ODo6TG9jYWw8djg6Ok1lc3NhZ2U+
IG1lc3NhZ2UgPSBtX2V4Y2VwdGlvbkNhdGNoZXIuTWVzc2FnZSgpOworICAgIGlmIChtX3JlcG9y
dEV4Y2VwdGlvbnMpCisgICAgICAgIG1fc2NyaXB0U3RhdGUtPmZyYW1lKCktPmRvY3VtZW50KCkt
PnJlcG9ydEV4Y2VwdGlvbih0b1dlYkNvcmVTdHJpbmcobWVzc2FnZS0+R2V0KCkpLCBtZXNzYWdl
LT5HZXRMaW5lTnVtYmVyKCksIHRvV2ViQ29yZVN0cmluZyhtZXNzYWdlLT5HZXRTY3JpcHRSZXNv
dXJjZU5hbWUoKSkpOworCisgICAgbV9leGNlcHRpb25DYXRjaGVyLlJlc2V0KCk7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFNjb3BlLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Njcmlw
dFNjb3BlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZlZTQ1OAotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U2NvcGUuaApAQCAtMCww
ICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBTY3JpcHRTY29wZV9oCisjZGVmaW5lIFNjcmlwdFNjb3BlX2gKKwor
I2luY2x1ZGUgPHY4Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBTY3JpcHRT
dGF0ZTsKKworICAgIGNsYXNzIFNjcmlwdFNjb3BlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNj
cmlwdFNjb3BlKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgYm9vbCByZXBvcnRFeGNlcHRpb25z
ID0gdHJ1ZSk7CisgICAgICAgIGJvb2wgc3VjY2VzcygpOworCisgICAgICAgIHY4OjpMb2NhbDx2
ODo6T2JqZWN0PiBnbG9iYWwoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQtPkdsb2JhbCgpOyB9
CisKKyAgICBwcml2YXRlOgorICAgICAgICB2ODo6SGFuZGxlU2NvcGUgbV9oYW5kbGVTY29wZTsK
KyAgICAgICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBtX2NvbnRleHQ7CisgICAgICAgIHY4OjpD
b250ZXh0OjpTY29wZSBtX3Njb3BlOworICAgICAgICB2ODo6VHJ5Q2F0Y2ggbV9leGNlcHRpb25D
YXRjaGVyOworICAgICAgICBTY3JpcHRTdGF0ZSogbV9zY3JpcHRTdGF0ZTsKKyAgICAgICAgYm9v
bCBtX3JlcG9ydEV4Y2VwdGlvbnM7CisgICAgfTsKKworfQorCisjZW5kaWYgLy8gU2NyaXB0U2Nv
cGVfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRTdGF0ZS5jcHAgYi9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFN0YXRlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5jYmNiN2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy92OC9TY3JpcHRTdGF0ZS5jcHAKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgorCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRl
ICJQYWdlLmgiCisjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK1NjcmlwdFN0YXRlOjpTY3JpcHRTdGF0ZShGcmFtZSogZnJhbWUpCisgICAgOiBt
X2ZyYW1lKGZyYW1lKQoreworfQorCitTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGVGcm9tUGFnZShQ
YWdlKiBwYWdlKQoreworICAgIHJldHVybiBwYWdlLT5tYWluRnJhbWUoKS0+c2NyaXB0KCktPnN0
YXRlKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U3Rh
dGUuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U3RhdGUuaAppbmRleCBiNWE5NTc4Li5i
Y2I2MzRkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFN0YXRlLmgKKysr
IGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRTdGF0ZS5oCkBAIC0zNCw4ICszNCwxNCBAQAog
I2luY2x1ZGUgPHY4Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBQYWdlOwor
ICAgIGNsYXNzIEZyYW1lOworCiAgICAgY2xhc3MgU2NyaXB0U3RhdGUgewogICAgIHB1YmxpYzoK
KyAgICAgICAgU2NyaXB0U3RhdGUoKSB7IH0KKyAgICAgICAgU2NyaXB0U3RhdGUoRnJhbWUqIGZy
YW1lKTsKKwogICAgICAgICBib29sIGhhZEV4Y2VwdGlvbigpIHsgcmV0dXJuICFtX2V4Y2VwdGlv
bi5Jc0VtcHR5KCk7IH0KICAgICAgICAgdm9pZCBzZXRFeGNlcHRpb24odjg6OkxvY2FsPHY4OjpW
YWx1ZT4gZXhjZXB0aW9uKQogICAgICAgICB7CkBAIC00Myw5ICs0OSwxNCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIH0KICAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gZXhjZXB0
aW9uKCkgeyByZXR1cm4gbV9leGNlcHRpb247IH0KIAorICAgICAgICBGcmFtZSogZnJhbWUoKSBj
b25zdCB7IHJldHVybiBtX2ZyYW1lOyB9CisKICAgICBwcml2YXRlOgogICAgICAgICB2ODo6TG9j
YWw8djg6OlZhbHVlPiBtX2V4Y2VwdGlvbjsKKyAgICAgICAgRnJhbWUqIG1fZnJhbWU7CiAgICAg
fTsKKworICAgIFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZUZyb21QYWdlKFBhZ2UqIHBhZ2UpOwog
fQogCiAjZW5kaWYgLy8gU2NyaXB0U3RhdGVfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5n
cy92OC9TY3JpcHRTdHJpbmcuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U3RyaW5nLmgK
aW5kZXggNjZhNTc1Zi4uZmUyNTRhNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9T
Y3JpcHRTdHJpbmcuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFN0cmluZy5oCkBA
IC0zNyw2ICszNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2NyaXB0U3RyaW5n
IHsKIHB1YmxpYzoKKyAgICBTY3JpcHRTdHJpbmcoKSB7fQogICAgIFNjcmlwdFN0cmluZyhjb25z
dCBTdHJpbmcmIHMpIDogbV9zdHIocykge30KICAgICBTY3JpcHRTdHJpbmcoY29uc3QgY2hhciog
cykgOiBtX3N0cihzKSB7fQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Njcmlw
dFZhbHVlLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFZhbHVlLmgKaW5kZXggYmZiMTFj
Mi4uMDRlODgxOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRWYWx1ZS5o
CisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0VmFsdWUuaApAQCAtOTEsNiArOTEsMTEg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV92YWx1ZSA9PSB2YWx1ZS5tX3ZhbHVlOwogICAg
IH0KIAorICAgIGJvb2wgaXNFcXVhbChTY3JpcHRTdGF0ZSosIGNvbnN0IFNjcmlwdFZhbHVlJiB2
YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlID09IHZhbHVlLm1fdmFs
dWU7CisgICAgfQorCiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFNjcmlwdFZhbHVlIHZhbHVl
KSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuICFvcGVyYXRvcj09KHZhbHVlKTsK
</data>
<flag name="review"
          id="14696"
          type_id="1"
          status="+"
          setter="fishd"
    />
          </attachment>
      

    </bug>

</bugzilla>