<?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>108724</bug_id>
          
          <creation_ts>2013-02-01 16:33:51 -0800</creation_ts>
          <short_desc>webdatabase: Replace ExceptionCode with DatabaseError in the openDatabase() code path</short_desc>
          <delta_ts>2013-02-05 19:02:17 -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>WebCore Misc.</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>
          
          <blocked>107475</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>michaeln</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>823420</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-01 16:33:51 -0800</bug_when>
    <thetext>This is a sub-task of https://bugs.webkit.org/show_bug.cgi?id=107475.  Breaking out as a step for easier review.  Replacing ExceptionCode with DatabaseError because we may want to have other database specific errors later that don&apos;t make sense to propagate out of the webdatabase module.  Also cleaned up DatabaseBackend::performOpenAndVerify() so that it&apos;s a little more straightforward and less verbose.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823429</commentid>
    <comment_count>1</comment_count>
      <attachid>186186</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-01 16:46:02 -0800</bug_when>
    <thetext>Created attachment 186186
The patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823430</commentid>
    <comment_count>2</comment_count>
      <attachid>186186</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-01 16:47:50 -0800</bug_when>
    <thetext>Comment on attachment 186186
The patch.

Diff looks good.  May I have a review please?  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823434</commentid>
    <comment_count>3</comment_count>
      <attachid>186186</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-02-01 16:57:39 -0800</bug_when>
    <thetext>Comment on attachment 186186
The patch.

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

&gt; Source/WebCore/Modules/webdatabase/DOMWindowWebDatabase.cpp:57
&gt; +    if (error == DatabaseError::CannotOpenDatabase)
&gt; +        ec = INVALID_STATE_ERR;
&gt;      if (!database &amp;&amp; !ec)
&gt;          ec = SECURITY_ERR;

This code looks not very future-proof, as it&apos;s unclear what&apos;s expected if new errors are added.

&gt; Source/WebCore/Modules/webdatabase/DatabaseBackend.cpp:297
&gt; +    void openSucceeded() { m_openSucceeded = true; }

This name sounds a little like a getter, not a setter. It should probably have a verb.

&gt; Source/WebCore/Modules/webdatabase/DatabaseBackend.cpp:421
&gt; +    onExitCaller.openSucceeded();
&gt; +    error = DatabaseError::None; // Clear the presumed error from above.

Can these lines be swapped?

&gt; Source/WebCore/Modules/webdatabase/WorkerContextWebDatabase.cpp:-49
&gt; +    if (error == DatabaseError::CannotOpenDatabase)
&gt; +        ec = INVALID_STATE_ERR;
&gt; +    if (!database &amp;&amp; !ec)
&gt;          ec = SECURITY_ERR;
&gt; -        return 0;
&gt; -    }

Same comment about being future proof as above.

&gt; Source/WebCore/Modules/webdatabase/WorkerContextWebDatabase.cpp:-60
&gt; +    if (error == DatabaseError::CannotOpenDatabase)
&gt; +        ec = INVALID_STATE_ERR;
&gt; +    if (!database &amp;&amp; !ec)
&gt;          ec = SECURITY_ERR;
&gt; -        return 0;
&gt; -    }

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823439</commentid>
    <comment_count>4</comment_count>
      <attachid>186186</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-01 17:03:21 -0800</bug_when>
    <thetext>Comment on attachment 186186
The patch.

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

&gt;&gt; Source/WebCore/Modules/webdatabase/DOMWindowWebDatabase.cpp:57
&gt;&gt;          ec = SECURITY_ERR;
&gt; 
&gt; This code looks not very future-proof, as it&apos;s unclear what&apos;s expected if new errors are added.

Added an assertion that error should be either None or CannotOpenDatabase.  The assertion is placed before the if(error) statement.

&gt;&gt; Source/WebCore/Modules/webdatabase/DatabaseBackend.cpp:297
&gt;&gt; +    void openSucceeded() { m_openSucceeded = true; }
&gt; 
&gt; This name sounds a little like a getter, not a setter. It should probably have a verb.

Changed to setOpenSucceeded().

&gt;&gt; Source/WebCore/Modules/webdatabase/DatabaseBackend.cpp:421
&gt;&gt; +    error = DatabaseError::None; // Clear the presumed error from above.
&gt; 
&gt; Can these lines be swapped?

Swapped.

&gt;&gt; Source/WebCore/Modules/webdatabase/WorkerContextWebDatabase.cpp:-49
&gt;&gt; -    }
&gt; 
&gt; Same comment about being future proof as above.

Ditto on the adding an appropriate assertion.

&gt;&gt; Source/WebCore/Modules/webdatabase/WorkerContextWebDatabase.cpp:-60
&gt;&gt; -    }
&gt; 
&gt; Ditto.

Ditto on the adding an appropriate assertion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823440</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-02-01 17:06:49 -0800</bug_when>
    <thetext>Landed in r141668: &lt;http://trac.webkit.org/changeset/141668&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186186</attachid>
            <date>2013-02-01 16:46:02 -0800</date>
            <delta_ts>2013-02-01 17:03:21 -0800</delta_ts>
            <desc>The patch.</desc>
            <filename>bug-108724.patch</filename>
            <type>text/plain</type>
            <size>26067</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MTY2MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDEzLTAyLTAxICBNYXJrIExh
bSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBSZXBsYWNlIEV4Y2VwdGlvbkNvZGUg
d2l0aCBEYXRhYmFzZUVycm9yIGluIHRoZSBvcGVuRGF0YWJhc2UoKSBjb2RlIHBhdGguCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDg3MjQuCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWxzbyBtYWRlIERh
dGFiYXNlQmFja2VuZDo6cGVyZm9ybU9wZW5BbmRWZXJpZnkoKSBhIGxpdHRsZSBtb3JlCisgICAg
ICAgIHN0cmFpZ2h0Zm9yd2FyZCBhbmQgbGVzcyByZXBldGl0aXZlLgorCisgICAgICAgIE5vIG5l
dyB0ZXN0cy4KKworICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRE9NV2luZG93V2ViRGF0
YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93V2ViRGF0YWJhc2U6Om9wZW5E
YXRhYmFzZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6b3BlbkFuZFZlcmlmeVZlcnNpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6RGF0YWJhc2U6OnBlcmZvcm1PcGVuQW5kVmVyaWZ5KToKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlLmg6CisgICAgICAgIChEYXRhYmFzZSk6CisgICAg
ICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RG9uZUNyZWF0aW5nRGF0YWJhc2VPbkV4aXRDYWxsZXI6OkRvbmVDcmVhdGluZ0Rh
dGFiYXNlT25FeGl0Q2FsbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRvbmVDcmVhdGluZ0RhdGFi
YXNlT25FeGl0Q2FsbGVyOjp+RG9uZUNyZWF0aW5nRGF0YWJhc2VPbkV4aXRDYWxsZXIpOgorICAg
ICAgICAoRG9uZUNyZWF0aW5nRGF0YWJhc2VPbkV4aXRDYWxsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RG9uZUNyZWF0aW5nRGF0YWJhc2VPbkV4aXRDYWxsZXI6Om9wZW5TdWNjZWVkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6RGF0YWJhc2VCYWNrZW5kOjpwZXJmb3JtT3BlbkFuZFZlcmlmeSk6Cisg
ICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmQuaDoKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZU1hbmFnZXI6Om9wZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZU1hbmFnZXI6Om9wZW5EYXRhYmFzZVN5bmMpOgorICAgICAgICAqIE1vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmg6CisgICAgICAgIChEYXRhYmFzZU1hbmFnZXIpOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTeW5jLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlU3luYzo6b3BlbkFuZFZlcmlmeVZlcnNpb24pOgorICAgICAgICAq
IE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTeW5jLmg6CisgICAgICAgIChEYXRhYmFzZVN5
bmMpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUYXNrLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpEYXRhYmFzZU9wZW5UYXNrOjpEYXRhYmFzZU9wZW5U
YXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlOjpEYXRhYmFzZU9wZW5UYXNrOjpkb1Bl
cmZvcm1UYXNrKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGFzay5o
OgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OkRhdGFiYXNlT3BlblRhc2s6OmNyZWF0ZSk6
CisgICAgICAgIChEYXRhYmFzZTo6RGF0YWJhc2VPcGVuVGFzayk6CisgICAgICAgICogTW9kdWxl
cy93ZWJkYXRhYmFzZS9Xb3JrZXJDb250ZXh0V2ViRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V29ya2VyQ29udGV4dFdlYkRhdGFiYXNlOjpvcGVuRGF0YWJhc2UpOgorICAgICAgICAo
V2ViQ29yZTo6V29ya2VyQ29udGV4dFdlYkRhdGFiYXNlOjpvcGVuRGF0YWJhc2VTeW5jKToKKyAg
ICAgICAgKiBXZWJDb3JlLmd5cGk6CisKIDIwMTMtMDItMDEgIEJlbmphbWluIFBvdWxhaW4gIDxi
cG91bGFpbkBhcHBsZS5jb20+CiAKICAgICAgICAgQ2xlYW4gdGhlIFN0cmluZy0+QXRvbWljU3Ry
aW5nIGNvbnZlcnNpb24gZm9yIEFuaW1hdGlvbkNvbnRyb2xsZXI6OnBhdXNlQW5pbWF0aW9uQXRU
aW1lCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiAxNDE2NTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTk5OSw5ICs5OTksMTEgQEAKICAg
ICAgICAgICAgICdNb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQXV0aG9yaXplci5jcHAnLAog
ICAgICAgICAgICAgJ01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VBdXRob3JpemVyLmgnLAog
ICAgICAgICAgICAgJ01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kLmNwcCcsCisg
ICAgICAgICAgICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tlbmQuaCcsCiAgICAg
ICAgICAgICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUNhbGxiYWNrLmgnLAogICAgICAg
ICAgICAgJ01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VDb250ZXh0LmNwcCcsCiAgICAgICAg
ICAgICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUNvbnRleHQuaCcsCisgICAgICAgICAg
ICAnTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUVycm9yLmgnLAogICAgICAgICAgICAgJ01v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmNwcCcsCiAgICAgICAgICAgICAnTW9k
dWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVNlcnZlci5jcHAnLAogICAgICAgICAgICAgJ01vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTZXJ2ZXIuaCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL0RPTVdpbmRvd1dlYkRhdGFiYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RPTVdpbmRvd1dlYkRhdGFiYXNl
LmNwcAkocmV2aXNpb24gMTQxNjU3KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9ET01XaW5kb3dXZWJEYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDkgKzQ3
LDEyIEBAIFBhc3NSZWZQdHI8RGF0YWJhc2U+IERPTVdpbmRvd1dlYkRhdGFiYXMKIAogICAgIFJl
ZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2UgPSAwOwogICAgIERhdGFiYXNlTWFuYWdlciYgZGJNYW5h
Z2VyID0gRGF0YWJhc2VNYW5hZ2VyOjptYW5hZ2VyKCk7CisgICAgRGF0YWJhc2VFcnJvciBlcnJv
ciA9IERhdGFiYXNlRXJyb3I6Ok5vbmU7CiAgICAgaWYgKGRiTWFuYWdlci5pc0F2YWlsYWJsZSgp
ICYmIHdpbmRvdy0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNjZXNzRGF0YWJh
c2Uod2luZG93LT5kb2N1bWVudCgpLT50b3BPcmlnaW4oKSkpCi0gICAgICAgIGRhdGFiYXNlID0g
ZGJNYW5hZ2VyLm9wZW5EYXRhYmFzZSh3aW5kb3ctPmRvY3VtZW50KCksIG5hbWUsIHZlcnNpb24s
IGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBjcmVhdGlvbkNhbGxiYWNrLCBlYyk7CisgICAg
ICAgIGRhdGFiYXNlID0gZGJNYW5hZ2VyLm9wZW5EYXRhYmFzZSh3aW5kb3ctPmRvY3VtZW50KCks
IG5hbWUsIHZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBjcmVhdGlvbkNhbGxi
YWNrLCBlcnJvcik7CiAKKyAgICBpZiAoZXJyb3IgPT0gRGF0YWJhc2VFcnJvcjo6Q2Fubm90T3Bl
bkRhdGFiYXNlKQorICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwogICAgIGlmICghZGF0
YWJhc2UgJiYgIWVjKQogICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAJKHJldmlzaW9u
IDE0MTY1NykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNyArMTIxLDcgQEAgU3RyaW5nIERhdGFiYXNlOjp2
ZXJzaW9uKCkgY29uc3QKICAgICByZXR1cm4gRGF0YWJhc2VCYWNrZW5kOjp2ZXJzaW9uKCk7CiB9
CiAKLWJvb2wgRGF0YWJhc2U6Om9wZW5BbmRWZXJpZnlWZXJzaW9uKGJvb2wgc2V0VmVyc2lvbklu
TmV3RGF0YWJhc2UsIEV4Y2VwdGlvbkNvZGUmIGUsIFN0cmluZyYgZXJyb3JNZXNzYWdlKQorYm9v
bCBEYXRhYmFzZTo6b3BlbkFuZFZlcmlmeVZlcnNpb24oYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRh
YmFzZSwgRGF0YWJhc2VFcnJvciYgZXJyb3IsIFN0cmluZyYgZXJyb3JNZXNzYWdlKQogewogICAg
IERhdGFiYXNlVGFza1N5bmNocm9uaXplciBzeW5jaHJvbml6ZXI7CiAgICAgaWYgKCFkYXRhYmFz
ZUNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKSB8fCBkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJh
c2VUaHJlYWQoKS0+dGVybWluYXRpb25SZXF1ZXN0ZWQoJnN5bmNocm9uaXplcikpCkBAIC0xMzEs
NyArMTMxLDcgQEAgYm9vbCBEYXRhYmFzZTo6b3BlbkFuZFZlcmlmeVZlcnNpb24oYm9vbAogICAg
IERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnByZXBhcmVUb09wZW5EYXRhYmFzZSh0aGlzKTsK
ICNlbmRpZgogICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIE93blB0cjxEYXRhYmFzZU9w
ZW5UYXNrPiB0YXNrID0gRGF0YWJhc2VPcGVuVGFzazo6Y3JlYXRlKHRoaXMsIHNldFZlcnNpb25J
bk5ld0RhdGFiYXNlLCAmc3luY2hyb25pemVyLCBlLCBlcnJvck1lc3NhZ2UsIHN1Y2Nlc3MpOwor
ICAgIE93blB0cjxEYXRhYmFzZU9wZW5UYXNrPiB0YXNrID0gRGF0YWJhc2VPcGVuVGFzazo6Y3Jl
YXRlKHRoaXMsIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCAmc3luY2hyb25pemVyLCBlcnJvciwg
ZXJyb3JNZXNzYWdlLCBzdWNjZXNzKTsKICAgICBkYXRhYmFzZUNvbnRleHQoKS0+ZGF0YWJhc2VU
aHJlYWQoKS0+c2NoZWR1bGVJbW1lZGlhdGVUYXNrKHRhc2sucmVsZWFzZSgpKTsKICAgICBzeW5j
aHJvbml6ZXIud2FpdEZvclRhc2tDb21wbGV0aW9uKCk7CiAKQEAgLTE5Miw5ICsxOTIsOSBAQCB1
bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJhc2U6Om1heGltdW1TaXplCiAgICAgcmV0dXJuIERhdGFi
YXNlTWFuYWdlcjo6bWFuYWdlcigpLmdldE1heFNpemVGb3JEYXRhYmFzZSh0aGlzKTsKIH0KIAot
Ym9vbCBEYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRWZXJpZnkoYm9vbCBzZXRWZXJzaW9uSW5OZXdE
YXRhYmFzZSwgRXhjZXB0aW9uQ29kZSYgZSwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCitib29sIERh
dGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeShib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNl
LCBEYXRhYmFzZUVycm9yJiBlcnJvciwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCiB7Ci0gICAgaWYg
KERhdGFiYXNlQmFja2VuZDo6cGVyZm9ybU9wZW5BbmRWZXJpZnkoc2V0VmVyc2lvbkluTmV3RGF0
YWJhc2UsIGUsIGVycm9yTWVzc2FnZSkpIHsKKyAgICBpZiAoRGF0YWJhc2VCYWNrZW5kOjpwZXJm
b3JtT3BlbkFuZFZlcmlmeShzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgZXJyb3IsIGVycm9yTWVz
c2FnZSkpIHsKICAgICAgICAgaWYgKGRhdGFiYXNlQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgp
KQogICAgICAgICAgICAgZGF0YWJhc2VDb250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPnJlY29y
ZERhdGFiYXNlT3Blbih0aGlzKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJk
YXRhYmFzZS9EYXRhYmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2UuaAkocmV2aXNpb24gMTQxNjU3KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2
ICszMyw3IEBACiAKICNpbmNsdWRlICJEYXRhYmFzZUJhY2tlbmQuaCIKICNpbmNsdWRlICJEYXRh
YmFzZUJhc2ljVHlwZXMuaCIKKyNpbmNsdWRlICJEYXRhYmFzZUVycm9yLmgiCiAjaW5jbHVkZSA8
d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KQEAgLTkxLDggKzkyLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHJ1blRy
YW5zYWN0aW9uKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4sIFBhc3NSZWZQdHI8
U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiwKICAgICAgICAgICAgICAgICAgICAgICAgIFBh
c3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJh
bnNhY3Rpb25XcmFwcGVyPiwgYm9vbCByZWFkT25seSk7CiAKLSAgICBib29sIG9wZW5BbmRWZXJp
ZnlWZXJzaW9uKGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIEV4Y2VwdGlvbkNvZGUmLCBT
dHJpbmcmIGVycm9yTWVzc2FnZSk7Ci0gICAgdmlydHVhbCBib29sIHBlcmZvcm1PcGVuQW5kVmVy
aWZ5KGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIEV4Y2VwdGlvbkNvZGUmLCBTdHJpbmcm
IGVycm9yTWVzc2FnZSk7CisgICAgYm9vbCBvcGVuQW5kVmVyaWZ5VmVyc2lvbihib29sIHNldFZl
cnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZUVycm9yJiwgU3RyaW5nJiBlcnJvck1lc3NhZ2Up
OworICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtT3BlbkFuZFZlcmlmeShib29sIHNldFZlcnNpb25J
bk5ld0RhdGFiYXNlLCBEYXRhYmFzZUVycm9yJiwgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwogCiAg
ICAgdm9pZCBpblByb2dyZXNzVHJhbnNhY3Rpb25Db21wbGV0ZWQoKTsKICAgICB2b2lkIHNjaGVk
dWxlVHJhbnNhY3Rpb24oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2VCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlQmFja2VuZC5jcHAJKHJldmlzaW9uIDE0MTY1NykKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjc5LDQyICsyNzksNDAgQEAgU3RyaW5nIERhdGFiYXNlQmFja2Vu
ZDo6dmVyc2lvbigpIGNvbnN0CiAKIGNsYXNzIERvbmVDcmVhdGluZ0RhdGFiYXNlT25FeGl0Q2Fs
bGVyIHsKIHB1YmxpYzoKLSAgICBEb25lQ3JlYXRpbmdEYXRhYmFzZU9uRXhpdENhbGxlcihEYXRh
YmFzZUJhY2tlbmQqIGRhdGFiYXNlLCBFeGNlcHRpb25Db2RlJiBlYykKKyAgICBEb25lQ3JlYXRp
bmdEYXRhYmFzZU9uRXhpdENhbGxlcihEYXRhYmFzZUJhY2tlbmQqIGRhdGFiYXNlKQogICAgICAg
ICA6IG1fZGF0YWJhc2UoZGF0YWJhc2UpCi0gICAgICAgICwgbV9lYyhlYykKKyAgICAgICAgLCBt
X29wZW5TdWNjZWVkZWQoZmFsc2UpCiAgICAgewogICAgIH0KICAgICB+RG9uZUNyZWF0aW5nRGF0
YWJhc2VPbkV4aXRDYWxsZXIoKQogICAgIHsKICNpZiAhUExBVEZPUk0oQ0hST01JVU0pCi0gICAg
ICAgIC8vIG1fZWMgaXMgbm90IHVzZWQgaW4gY3Jvc3MtcGxhdGZvcm0gY29kZSBwYXRoLiBXZSBk
b24ndCBoYXZlIGEgbWFjcm8gZm9yIHVudXNlZCBtZW1iZXIgdmFyaWFibGVzLAotICAgICAgICAv
LyBzbyBqdXN0IHVzaW5nIFVOVVNFRF9QQVJBTS4KLSAgICAgICAgLy8gRklYTUU6IFJlZmFjdG9y
IHRoZSBjb2RlIHRvIGF2b2lkIHRoZSBuZWVkIGZvciBzdWNoIHdpbGRseSBkaWZmZXJlbnQgYmVo
YXZpb3JzLgotICAgICAgICBVTlVTRURfUEFSQU0obV9lYyk7CiAgICAgICAgIERhdGFiYXNlVHJh
Y2tlcjo6dHJhY2tlcigpLmRvbmVDcmVhdGluZ0RhdGFiYXNlKG1fZGF0YWJhc2UpOwogI2Vsc2UK
LSAgICAgICAgaWYgKG1fZWMgPT0gSU5WQUxJRF9TVEFURV9FUlIpCisgICAgICAgIGlmICghbV9v
cGVuU3VjY2VlZGVkKQogICAgICAgICAgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuZmFp
bGVkVG9PcGVuRGF0YWJhc2UobV9kYXRhYmFzZSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIAorI2Vu
ZGlmICAgICAgICAgICAgCiAgICAgfQorCisgICAgdm9pZCBvcGVuU3VjY2VlZGVkKCkgeyBtX29w
ZW5TdWNjZWVkZWQgPSB0cnVlOyB9CisKIHByaXZhdGU6CiAgICAgRGF0YWJhc2VCYWNrZW5kKiBt
X2RhdGFiYXNlOwotICAgIEV4Y2VwdGlvbkNvZGUmIG1fZWM7IC8vIFRoaXMgaXMgYSByZWZlcmVu
Y2UgdG8gYSBsb2NhbCB2YXJpYWJsZSBpbiBwZXJmb3JtT3BlbkFuZFZlcmlmeSgpLCBzbyBhcHBy
b3ByaWF0ZSBhY3Rpb24gY291bGQgYmUgdGFrZW4gYmFzZWQgb24gaXRzIHZhbHVlIGF0IGZ1bmN0
aW9uIGV4aXQgdGltZS4KKyAgICBib29sIG1fb3BlblN1Y2NlZWRlZDsKIH07CiAKLWJvb2wgRGF0
YWJhc2VCYWNrZW5kOjpwZXJmb3JtT3BlbkFuZFZlcmlmeShib29sIHNob3VsZFNldFZlcnNpb25J
bk5ld0RhdGFiYXNlLCBFeGNlcHRpb25Db2RlJiBlYywgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCiti
b29sIERhdGFiYXNlQmFja2VuZDo6cGVyZm9ybU9wZW5BbmRWZXJpZnkoYm9vbCBzaG91bGRTZXRW
ZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciYgZXJyb3IsIFN0cmluZyYgZXJyb3JN
ZXNzYWdlKQogewotICAgIERvbmVDcmVhdGluZ0RhdGFiYXNlT25FeGl0Q2FsbGVyIG9uRXhpdENh
bGxlcih0aGlzLCBlYyk7CisgICAgRG9uZUNyZWF0aW5nRGF0YWJhc2VPbkV4aXRDYWxsZXIgb25F
eGl0Q2FsbGVyKHRoaXMpOwogICAgIEFTU0VSVChlcnJvck1lc3NhZ2UuaXNFbXB0eSgpKTsKLSAg
ICBBU1NFUlQoIWVjKTsgLy8gQmV0dGVyIG5vdCBoYXZlIGFueSBleGNlcHRpb25zIGFscmVhZHku
CisgICAgQVNTRVJUKGVycm9yID09IERhdGFiYXNlRXJyb3I6Ok5vbmUpOyAvLyBCZXR0ZXIgbm90
IGhhdmUgYW55IGVycm9ycyBhbHJlYWR5LgorICAgIGVycm9yID0gRGF0YWJhc2VFcnJvcjo6Q2Fu
bm90T3BlbkRhdGFiYXNlOyAvLyBQcmVzdW1lZCBmYWlsdXJlLiBXZSdsbCBjbGVhciBpdCBpZiB3
ZSBzdWNjZWVkIGJlbG93LgogCiAgICAgY29uc3QgaW50IG1heFNxbGl0ZUJ1c3lXYWl0VGltZSA9
IDMwMDAwOwogCiAgICAgaWYgKCFtX3NxbGl0ZURhdGFiYXNlLm9wZW4obV9maWxlbmFtZSwgdHJ1
ZSkpIHsKICAgICAgICAgcmVwb3J0T3BlbkRhdGFiYXNlUmVzdWx0KDEsIElOVkFMSURfU1RBVEVf
RVJSLCBtX3NxbGl0ZURhdGFiYXNlLmxhc3RFcnJvcigpKTsKICAgICAgICAgZXJyb3JNZXNzYWdl
ID0gZm9ybWF0RXJyb3JNZXNzYWdlKCJ1bmFibGUgdG8gb3BlbiBkYXRhYmFzZSIsIG1fc3FsaXRl
RGF0YWJhc2UubGFzdEVycm9yKCksIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwot
ICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogICAgIGlmICghbV9zcWxpdGVEYXRhYmFzZS50dXJuT25JbmNyZW1lbnRhbEF1dG9WYWN1
dW0oKSkKQEAgLTM1Niw3ICszNTQsNiBAQCBib29sIERhdGFiYXNlQmFja2VuZDo6cGVyZm9ybU9w
ZW5BbmRWZXJpCiAgICAgICAgICAgICBpZiAoIXRyYW5zYWN0aW9uLmluUHJvZ3Jlc3MoKSkgewog
ICAgICAgICAgICAgICAgIHJlcG9ydE9wZW5EYXRhYmFzZVJlc3VsdCgyLCBJTlZBTElEX1NUQVRF
X0VSUiwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3IoKSk7CiAgICAgICAgICAgICAgICAgZXJy
b3JNZXNzYWdlID0gZm9ybWF0RXJyb3JNZXNzYWdlKCJ1bmFibGUgdG8gb3BlbiBkYXRhYmFzZSwg
ZmFpbGVkIHRvIHN0YXJ0IHRyYW5zYWN0aW9uIiwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3Io
KSwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICAgICAgZWMg
PSBJTlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgICAgICAgICBtX3NxbGl0ZURhdGFiYXNlLmNs
b3NlKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQpAQCAt
MzY4LDcgKzM2NSw2IEBAIGJvb2wgRGF0YWJhc2VCYWNrZW5kOjpwZXJmb3JtT3BlbkFuZFZlcmkK
ICAgICAgICAgICAgICAgICBpZiAoIW1fc3FsaXRlRGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoIkNS
RUFURSBUQUJMRSAiICsgdGFibGVOYW1lICsgIiAoa2V5IFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJ
Q1QgRkFJTCBVTklRVUUgT04gQ09ORkxJQ1QgUkVQTEFDRSx2YWx1ZSBURVhUIE5PVCBOVUxMIE9O
IENPTkZMSUNUIEZBSUwpOyIpKSB7CiAgICAgICAgICAgICAgICAgICAgIHJlcG9ydE9wZW5EYXRh
YmFzZVJlc3VsdCgzLCBJTlZBTElEX1NUQVRFX0VSUiwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJy
b3IoKSk7CiAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGZvcm1hdEVycm9yTWVz
c2FnZSgidW5hYmxlIHRvIG9wZW4gZGF0YWJhc2UsIGZhaWxlZCB0byBjcmVhdGUgJ2luZm8nIHRh
YmxlIiwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7
CiAgICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLnJvbGxiYWNrKCk7CiAgICAgICAgICAg
ICAgICAgICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMzc2LDcgKzM3Miw2IEBAIGJvb2wgRGF0YWJhc2VCYWNrZW5kOjpw
ZXJmb3JtT3BlbkFuZFZlcmkKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWdldFZlcnNpb25Gcm9t
RGF0YWJhc2UoY3VycmVudFZlcnNpb24sIGZhbHNlKSkgewogICAgICAgICAgICAgICAgIHJlcG9y
dE9wZW5EYXRhYmFzZVJlc3VsdCg0LCBJTlZBTElEX1NUQVRFX0VSUiwgbV9zcWxpdGVEYXRhYmFz
ZS5sYXN0RXJyb3IoKSk7CiAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZm9ybWF0RXJy
b3JNZXNzYWdlKCJ1bmFibGUgdG8gb3BlbiBkYXRhYmFzZSwgZmFpbGVkIHRvIHJlYWQgY3VycmVu
dCB2ZXJzaW9uIiwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VS
UjsKICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi5yb2xsYmFjaygpOwogICAgICAgICAgICAg
ICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CkBAIC0zODksNyArMzg0LDYgQEAgYm9vbCBEYXRhYmFzZUJhY2tlbmQ6OnBlcmZvcm1PcGVu
QW5kVmVyaQogICAgICAgICAgICAgICAgIGlmICghc2V0VmVyc2lvbkluRGF0YWJhc2UobV9leHBl
Y3RlZFZlcnNpb24sIGZhbHNlKSkgewogICAgICAgICAgICAgICAgICAgICByZXBvcnRPcGVuRGF0
YWJhc2VSZXN1bHQoNSwgSU5WQUxJRF9TVEFURV9FUlIsIG1fc3FsaXRlRGF0YWJhc2UubGFzdEVy
cm9yKCkpOwogICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBmb3JtYXRFcnJvck1l
c3NhZ2UoInVuYWJsZSB0byBvcGVuIGRhdGFiYXNlLCBmYWlsZWQgdG8gd3JpdGUgY3VycmVudCB2
ZXJzaW9uIiwgbV9zcWxpdGVEYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9F
UlI7CiAgICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLnJvbGxiYWNrKCk7CiAgICAgICAg
ICAgICAgICAgICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtNDExLDcgKzQwNSw2IEBAIGJvb2wgRGF0YWJhc2VCYWNrZW5k
OjpwZXJmb3JtT3BlbkFuZFZlcmkKICAgICBpZiAoKCFtX25ldyB8fCBzaG91bGRTZXRWZXJzaW9u
SW5OZXdEYXRhYmFzZSkgJiYgbV9leHBlY3RlZFZlcnNpb24ubGVuZ3RoKCkgJiYgbV9leHBlY3Rl
ZFZlcnNpb24gIT0gY3VycmVudFZlcnNpb24pIHsKICAgICAgICAgcmVwb3J0T3BlbkRhdGFiYXNl
UmVzdWx0KDYsIElOVkFMSURfU1RBVEVfRVJSLCAwKTsKICAgICAgICAgZXJyb3JNZXNzYWdlID0g
InVuYWJsZSB0byBvcGVuIGRhdGFiYXNlLCB2ZXJzaW9uIG1pc21hdGNoLCAnIiArIG1fZXhwZWN0
ZWRWZXJzaW9uICsgIicgZG9lcyBub3QgbWF0Y2ggdGhlIGN1cnJlbnRWZXJzaW9uIG9mICciICsg
Y3VycmVudFZlcnNpb24gKyAiJyI7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAg
ICAgICAgIG1fc3FsaXRlRGF0YWJhc2UuY2xvc2UoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KQEAgLTQyMyw2ICs0MTYsMTAgQEAgYm9vbCBEYXRhYmFzZUJhY2tlbmQ6OnBlcmZvcm1P
cGVuQW5kVmVyaQogICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLmFkZE9wZW5EYXRhYmFz
ZSh0aGlzKTsKICAgICBtX29wZW5lZCA9IHRydWU7CiAKKyAgICAvLyBEZWNsYXJlIHN1Y2Nlc3M6
CisgICAgb25FeGl0Q2FsbGVyLm9wZW5TdWNjZWVkZWQoKTsKKyAgICBlcnJvciA9IERhdGFiYXNl
RXJyb3I6Ok5vbmU7IC8vIENsZWFyIHRoZSBwcmVzdW1lZCBlcnJvciBmcm9tIGFib3ZlLgorCiAg
ICAgaWYgKG1fbmV3ICYmICFzaG91bGRTZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSkKICAgICAgICAg
bV9leHBlY3RlZFZlcnNpb24gPSAiIjsgLy8gVGhlIGNhbGxlciBwcm92aWRlZCBhIGNyZWF0aW9u
Q2FsbGJhY2sgd2hpY2ggd2lsbCBzZXQgdGhlIGV4cGVjdGVkIHZlcnNpb24uCiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VCYWNrZW5kLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZUJhY2tl
bmQuaAkocmV2aXNpb24gMTQxNjU3KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZUJhY2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAog
CiAjaW5jbHVkZSAiRGF0YWJhc2VCYXNpY1R5cGVzLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VEZXRh
aWxzLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VFcnJvci5oIgogI2luY2x1ZGUgIlNRTGl0ZURhdGFi
YXNlLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CkBAIC0xMDYsNyArMTA3LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgdm9pZCBjbG9zZURhdGFiYXNl
KCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybU9wZW5BbmRWZXJpZnkoYm9vbCBzaG91bGRT
ZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRXhjZXB0aW9uQ29kZSYsIFN0cmluZyYgZXJyb3JNZXNz
YWdlKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybU9wZW5BbmRWZXJpZnkoYm9vbCBzaG91bGRT
ZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciYsIFN0cmluZyYgZXJyb3JNZXNz
YWdlKTsKIAogICAgIGJvb2wgZ2V0VmVyc2lvbkZyb21EYXRhYmFzZShTdHJpbmcmIHZlcnNpb24s
IGJvb2wgc2hvdWxkQ2FjaGVWZXJzaW9uID0gdHJ1ZSk7CiAgICAgYm9vbCBzZXRWZXJzaW9uSW5E
YXRhYmFzZShjb25zdCBTdHJpbmcmIHZlcnNpb24sIGJvb2wgc2hvdWxkQ2FjaGVWZXJzaW9uID0g
dHJ1ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
TWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRh
YmFzZS9EYXRhYmFzZU1hbmFnZXIuY3BwCShyZXZpc2lvbiAxNDE2NTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE5OCw5ICsxOTgsMTEgQEAgdm9pZCBEYXRhYmFzZU1hbmFnZXI6OmRpZERlc3RydWN0
RGF0YWJhcwogCiBQYXNzUmVmUHRyPERhdGFiYXNlPiBEYXRhYmFzZU1hbmFnZXI6Om9wZW5EYXRh
YmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAogICAgIGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxh
eU5hbWUsCi0gICAgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFi
YXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGUpCisgICAgdW5z
aWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+IGNy
ZWF0aW9uQ2FsbGJhY2ssCisgICAgRGF0YWJhc2VFcnJvciYgZXJyb3IpCiB7CiAgICAgUmVmUHRy
PERhdGFiYXNlQ29udGV4dD4gZGF0YWJhc2VDb250ZXh0ID0gZGF0YWJhc2VDb250ZXh0Rm9yKGNv
bnRleHQpOworICAgIEFTU0VSVChlcnJvciA9PSBEYXRhYmFzZUVycm9yOjpOb25lKTsKIAogICAg
IGlmICghY2FuRXN0YWJsaXNoRGF0YWJhc2UoY29udGV4dCwgbmFtZSwgZGlzcGxheU5hbWUsIGVz
dGltYXRlZFNpemUpKSB7CiAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiRGF0YWJhc2UgJXMgZm9y
IG9yaWdpbiAlcyBub3QgYWxsb3dlZCB0byBiZSBlc3RhYmxpc2hlZCIsIG5hbWUuYXNjaWkoKS5k
YXRhKCksIGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRh
KCkpOwpAQCAtMjEwLDcgKzIxMiw3IEBAIFBhc3NSZWZQdHI8RGF0YWJhc2U+IERhdGFiYXNlTWFu
YWdlcjo6b3AKICAgICBSZWZQdHI8RGF0YWJhc2U+IGRhdGFiYXNlID0gYWRvcHRSZWYobmV3IERh
dGFiYXNlKGRhdGFiYXNlQ29udGV4dCwgbmFtZSwgZXhwZWN0ZWRWZXJzaW9uLCBkaXNwbGF5TmFt
ZSwgZXN0aW1hdGVkU2l6ZSkpOwogCiAgICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICBpZiAo
IWRhdGFiYXNlLT5vcGVuQW5kVmVyaWZ5VmVyc2lvbighY3JlYXRpb25DYWxsYmFjaywgZSwgZXJy
b3JNZXNzYWdlKSkgeworICAgIGlmICghZGF0YWJhc2UtPm9wZW5BbmRWZXJpZnlWZXJzaW9uKCFj
cmVhdGlvbkNhbGxiYWNrLCBlcnJvciwgZXJyb3JNZXNzYWdlKSkgewogICAgICAgICBkYXRhYmFz
ZS0+bG9nRXJyb3JNZXNzYWdlKGVycm9yTWVzc2FnZSk7CiAgICAgICAgIHJldHVybiAwOwogICAg
IH0KQEAgLTIzMCwxMCArMjMyLDExIEBAIFBhc3NSZWZQdHI8RGF0YWJhc2U+IERhdGFiYXNlTWFu
YWdlcjo6b3AKIAogUGFzc1JlZlB0cjxEYXRhYmFzZVN5bmM+IERhdGFiYXNlTWFuYWdlcjo6b3Bl
bkRhdGFiYXNlU3luYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LAogICAgIGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmlu
ZyYgZGlzcGxheU5hbWUsCi0gICAgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVm
UHRyPERhdGFiYXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVj
KQorICAgIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNh
bGxiYWNrPiBjcmVhdGlvbkNhbGxiYWNrLCBEYXRhYmFzZUVycm9yJiBlcnJvcikKIHsKICAgICBS
ZWZQdHI8RGF0YWJhc2VDb250ZXh0PiBkYXRhYmFzZUNvbnRleHQgPSBkYXRhYmFzZUNvbnRleHRG
b3IoY29udGV4dCk7CiAgICAgQVNTRVJUKGNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKKyAg
ICBBU1NFUlQoZXJyb3IgPT0gRGF0YWJhc2VFcnJvcjo6Tm9uZSk7CiAKICAgICBpZiAoIWNhbkVz
dGFibGlzaERhdGFiYXNlKGNvbnRleHQsIG5hbWUsIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXpl
KSkgewogICAgICAgICBMT0coU3RvcmFnZUFQSSwgIkRhdGFiYXNlICVzIGZvciBvcmlnaW4gJXMg
bm90IGFsbG93ZWQgdG8gYmUgZXN0YWJsaXNoZWQiLCBuYW1lLmFzY2lpKCkuZGF0YSgpLCBjb250
ZXh0LT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKQEAgLTI0
Myw3ICsyNDYsNyBAQCBQYXNzUmVmUHRyPERhdGFiYXNlU3luYz4gRGF0YWJhc2VNYW5hZ2VyCiAg
ICAgUmVmUHRyPERhdGFiYXNlU3luYz4gZGF0YWJhc2UgPSBhZG9wdFJlZihuZXcgRGF0YWJhc2VT
eW5jKGRhdGFiYXNlQ29udGV4dCwgbmFtZSwgZXhwZWN0ZWRWZXJzaW9uLCBkaXNwbGF5TmFtZSwg
ZXN0aW1hdGVkU2l6ZSkpOwogCiAgICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICBpZiAoIWRh
dGFiYXNlLT5vcGVuQW5kVmVyaWZ5VmVyc2lvbighY3JlYXRpb25DYWxsYmFjaywgZWMsIGVycm9y
TWVzc2FnZSkpIHsKKyAgICBpZiAoIWRhdGFiYXNlLT5vcGVuQW5kVmVyaWZ5VmVyc2lvbighY3Jl
YXRpb25DYWxsYmFjaywgZXJyb3IsIGVycm9yTWVzc2FnZSkpIHsKICAgICAgICAgZGF0YWJhc2Ut
PmxvZ0Vycm9yTWVzc2FnZShlcnJvck1lc3NhZ2UpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlTWFuYWdl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0
YWJhc2VNYW5hZ2VyLmgJKHJldmlzaW9uIDE0MTY1NykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYg
KzMwLDcgQEAKIAogI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2VTZXJ2ZXIuaCIKICNpbmNsdWRl
ICJEYXRhYmFzZUJhc2ljVHlwZXMuaCIKKyNpbmNsdWRlICJEYXRhYmFzZUVycm9yLmgiCiAjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CkBAIC03Nyw4ICs3OCw4IEBAIHB1YmxpYzoKICAgICB2b2lk
IGRpZERlc3RydWN0RGF0YWJhc2VDb250ZXh0KCkgeyB9CiAjZW5kaWYKIAotICAgIFBhc3NSZWZQ
dHI8RGF0YWJhc2U+IG9wZW5EYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5n
JiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERh
dGFiYXNlQ2FsbGJhY2s+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxEYXRhYmFz
ZVN5bmM+IG9wZW5EYXRhYmFzZVN5bmMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYg
ZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRh
YmFzZUNhbGxiYWNrPiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8RGF0YWJhc2U+
IG9wZW5EYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFt
ZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJh
Y2s+LCBEYXRhYmFzZUVycm9yJik7CisgICAgUGFzc1JlZlB0cjxEYXRhYmFzZVN5bmM+IG9wZW5E
YXRhYmFzZVN5bmMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUs
IHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNr
PiwgRGF0YWJhc2VFcnJvciYpOwogCiAgICAgYm9vbCBoYXNPcGVuRGF0YWJhc2VzKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqKTsKICAgICB2b2lkIHN0b3BEYXRhYmFzZXMoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIERhdGFiYXNlVGFza1N5bmNocm9uaXplciopOwpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVN5bmMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTeW5jLmNwcAkocmV2aXNp
b24gMTQxNjU3KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFz
ZVN5bmMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsMTIgKzE0OCwxMiBAQCB2b2lkIERhdGFi
YXNlU3luYzo6cnVuVHJhbnNhY3Rpb24oUGFzc1JlCiAgICAgc2V0TGFzdEVycm9yTWVzc2FnZSgi
Iik7CiB9CiAKLWJvb2wgRGF0YWJhc2VTeW5jOjpvcGVuQW5kVmVyaWZ5VmVyc2lvbihib29sIHNl
dFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBFeGNlcHRpb25Db2RlJiBlYywgU3RyaW5nJiBlcnJvck1l
c3NhZ2UpCitib29sIERhdGFiYXNlU3luYzo6b3BlbkFuZFZlcmlmeVZlcnNpb24oYm9vbCBzZXRW
ZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VFcnJvciYgZXJyb3IsIFN0cmluZyYgZXJyb3JN
ZXNzYWdlKQogewogI2lmIFBMQVRGT1JNKENIUk9NSVVNKQogICAgIERhdGFiYXNlVHJhY2tlcjo6
dHJhY2tlcigpLnByZXBhcmVUb09wZW5EYXRhYmFzZSh0aGlzKTsKICNlbmRpZgotICAgIHJldHVy
biBwZXJmb3JtT3BlbkFuZFZlcmlmeShzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgZWMsIGVycm9y
TWVzc2FnZSk7CisgICAgcmV0dXJuIHBlcmZvcm1PcGVuQW5kVmVyaWZ5KHNldFZlcnNpb25Jbk5l
d0RhdGFiYXNlLCBlcnJvciwgZXJyb3JNZXNzYWdlKTsKIH0KIAogdm9pZCBEYXRhYmFzZVN5bmM6
Om1hcmtBc0RlbGV0ZWRBbmRDbG9zZSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmRhdGFiYXNlL0RhdGFiYXNlU3luYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTeW5jLmgJKHJldmlzaW9uIDE0MTY1NykKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VTeW5jLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTc3LDcgKzc3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgY29uc3Qg
U3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKTsKICAgICB2
b2lkIHJ1blRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25TeW5jQ2FsbGJhY2s+
LCBib29sIHJlYWRPbmx5LCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICBib29sIG9wZW5BbmRWZXJp
ZnlWZXJzaW9uKGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIEV4Y2VwdGlvbkNvZGUmLCBT
dHJpbmcmIGVycm9yTWVzc2FnZSk7CisgICAgYm9vbCBvcGVuQW5kVmVyaWZ5VmVyc2lvbihib29s
IHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZUVycm9yJiwgU3RyaW5nJiBlcnJvck1l
c3NhZ2UpOwogCiAgICAgU3RyaW5nIG1fbGFzdEVycm9yTWVzc2FnZTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRhc2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUYXNrLmNwcAko
cmV2aXNpb24gMTQxNjU3KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9E
YXRhYmFzZVRhc2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCwxMCArOTgsMTAgQEAgdm9pZCBE
YXRhYmFzZVRhc2s6OnBlcmZvcm1UYXNrKCkKIC8vICoqKiBEYXRhYmFzZU9wZW5UYXNrICoqKgog
Ly8gT3BlbnMgdGhlIGRhdGFiYXNlIGZpbGUgYW5kIHZlcmlmaWVzIHRoZSB2ZXJzaW9uIG1hdGNo
ZXMgdGhlIGV4cGVjdGVkIHZlcnNpb24uCiAKLURhdGFiYXNlOjpEYXRhYmFzZU9wZW5UYXNrOjpE
YXRhYmFzZU9wZW5UYXNrKERhdGFiYXNlKiBkYXRhYmFzZSwgYm9vbCBzZXRWZXJzaW9uSW5OZXdE
YXRhYmFzZSwgRGF0YWJhc2VUYXNrU3luY2hyb25pemVyKiBzeW5jaHJvbml6ZXIsIEV4Y2VwdGlv
bkNvZGUmIGNvZGUsIFN0cmluZyYgZXJyb3JNZXNzYWdlLCBib29sJiBzdWNjZXNzKQorRGF0YWJh
c2U6OkRhdGFiYXNlT3BlblRhc2s6OkRhdGFiYXNlT3BlblRhc2soRGF0YWJhc2UqIGRhdGFiYXNl
LCBib29sIHNldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBEYXRhYmFzZVRhc2tTeW5jaHJvbml6ZXIq
IHN5bmNocm9uaXplciwgRGF0YWJhc2VFcnJvciYgZXJyb3IsIFN0cmluZyYgZXJyb3JNZXNzYWdl
LCBib29sJiBzdWNjZXNzKQogICAgIDogRGF0YWJhc2VUYXNrKGRhdGFiYXNlLCBzeW5jaHJvbml6
ZXIpCiAgICAgLCBtX3NldFZlcnNpb25Jbk5ld0RhdGFiYXNlKHNldFZlcnNpb25Jbk5ld0RhdGFi
YXNlKQotICAgICwgbV9jb2RlKGNvZGUpCisgICAgLCBtX2Vycm9yKGVycm9yKQogICAgICwgbV9l
cnJvck1lc3NhZ2UoZXJyb3JNZXNzYWdlKQogICAgICwgbV9zdWNjZXNzKHN1Y2Nlc3MpCiB7CkBA
IC0xMTEsNyArMTExLDcgQEAgRGF0YWJhc2U6OkRhdGFiYXNlT3BlblRhc2s6OkRhdGFiYXNlT3Bl
bgogdm9pZCBEYXRhYmFzZTo6RGF0YWJhc2VPcGVuVGFzazo6ZG9QZXJmb3JtVGFzaygpCiB7CiAg
ICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICBtX3N1Y2Nlc3MgPSBkYXRhYmFzZSgpLT5wZXJm
b3JtT3BlbkFuZFZlcmlmeShtX3NldFZlcnNpb25Jbk5ld0RhdGFiYXNlLCBtX2NvZGUsIGVycm9y
TWVzc2FnZSk7CisgICAgbV9zdWNjZXNzID0gZGF0YWJhc2UoKS0+cGVyZm9ybU9wZW5BbmRWZXJp
ZnkobV9zZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgbV9lcnJvciwgZXJyb3JNZXNzYWdlKTsKICAg
ICBpZiAoIW1fc3VjY2VzcykKICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2Uu
aXNvbGF0ZWRDb3B5KCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL0RhdGFiYXNlVGFzay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZGF0YWJhc2UvRGF0YWJhc2VUYXNrLmgJKHJldmlzaW9uIDE0MTY1NykKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUYXNrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDYgKzMyLDcgQEAKIAogI2luY2x1ZGUgIkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiRGF0
YWJhc2VCYXNpY1R5cGVzLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VFcnJvci5oIgogI2luY2x1ZGUg
IlNRTFRyYW5zYWN0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+CkBAIC05OSwxMyArMTAwLDEzIEBAIHByaXZhdGU6CiAKIGNsYXNzIERh
dGFiYXNlOjpEYXRhYmFzZU9wZW5UYXNrIDogcHVibGljIERhdGFiYXNlVGFzayB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8RGF0YWJhc2VPcGVuVGFzaz4gY3JlYXRlKERhdGFiYXNl
KiBkYiwgYm9vbCBzZXRWZXJzaW9uSW5OZXdEYXRhYmFzZSwgRGF0YWJhc2VUYXNrU3luY2hyb25p
emVyKiBzeW5jaHJvbml6ZXIsIEV4Y2VwdGlvbkNvZGUmIGNvZGUsIFN0cmluZyYgZXJyb3JNZXNz
YWdlLCBib29sJiBzdWNjZXNzKQorICAgIHN0YXRpYyBQYXNzT3duUHRyPERhdGFiYXNlT3BlblRh
c2s+IGNyZWF0ZShEYXRhYmFzZSogZGIsIGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERh
dGFiYXNlVGFza1N5bmNocm9uaXplciogc3luY2hyb25pemVyLCBEYXRhYmFzZUVycm9yJiBlcnJv
ciwgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGJvb2wmIHN1Y2Nlc3MpCiAgICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IERhdGFiYXNlT3BlblRhc2soZGIsIHNldFZlcnNpb25Jbk5ld0Rh
dGFiYXNlLCBzeW5jaHJvbml6ZXIsIGNvZGUsIGVycm9yTWVzc2FnZSwgc3VjY2VzcykpOworICAg
ICAgICByZXR1cm4gYWRvcHRQdHIobmV3IERhdGFiYXNlT3BlblRhc2soZGIsIHNldFZlcnNpb25J
bk5ld0RhdGFiYXNlLCBzeW5jaHJvbml6ZXIsIGVycm9yLCBlcnJvck1lc3NhZ2UsIHN1Y2Nlc3Mp
KTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgRGF0YWJhc2VPcGVuVGFzayhEYXRhYmFzZSosIGJv
b2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2UsIERhdGFiYXNlVGFza1N5bmNocm9uaXplciosIEV4
Y2VwdGlvbkNvZGUmLCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgYm9vbCYgc3VjY2Vzcyk7CisgICAg
RGF0YWJhc2VPcGVuVGFzayhEYXRhYmFzZSosIGJvb2wgc2V0VmVyc2lvbkluTmV3RGF0YWJhc2Us
IERhdGFiYXNlVGFza1N5bmNocm9uaXplciosIERhdGFiYXNlRXJyb3ImLCBTdHJpbmcmIGVycm9y
TWVzc2FnZSwgYm9vbCYgc3VjY2Vzcyk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZG9QZXJmb3JtVGFz
aygpOwogI2lmICFMT0dfRElTQUJMRUQKQEAgLTExMyw3ICsxMTQsNyBAQCBwcml2YXRlOgogI2Vu
ZGlmCiAKICAgICBib29sIG1fc2V0VmVyc2lvbkluTmV3RGF0YWJhc2U7Ci0gICAgRXhjZXB0aW9u
Q29kZSYgbV9jb2RlOworICAgIERhdGFiYXNlRXJyb3ImIG1fZXJyb3I7CiAgICAgU3RyaW5nJiBt
X2Vycm9yTWVzc2FnZTsKICAgICBib29sJiBtX3N1Y2Nlc3M7CiB9OwpJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9Xb3JrZXJDb250ZXh0V2ViRGF0YWJhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvV29ya2VyQ29u
dGV4dFdlYkRhdGFiYXNlLmNwcAkocmV2aXNpb24gMTQxNjU3KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9Xb3JrZXJDb250ZXh0V2ViRGF0YWJhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MywyMyArNDMsMzMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogUGFzc1JlZlB0
cjxEYXRhYmFzZT4gV29ya2VyQ29udGV4dFdlYkRhdGFiYXNlOjpvcGVuRGF0YWJhc2UoV29ya2Vy
Q29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNp
b24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6
ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBjcmVhdGlvbkNhbGxiYWNrLCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKICAgICBEYXRhYmFzZU1hbmFnZXImIGRiTWFuYWdlciA9IERhdGFiYXNl
TWFuYWdlcjo6bWFuYWdlcigpOwotICAgIGlmICghY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+
Y2FuQWNjZXNzRGF0YWJhc2UoY29udGV4dC0+dG9wT3JpZ2luKCkpIHx8ICFkYk1hbmFnZXIuaXNB
dmFpbGFibGUoKSkgeworICAgIFJlZlB0cjxEYXRhYmFzZT4gZGF0YWJhc2U7CisgICAgRGF0YWJh
c2VFcnJvciBlcnJvciA9IERhdGFiYXNlRXJyb3I6Ok5vbmU7CisgICAgaWYgKGRiTWFuYWdlci5p
c0F2YWlsYWJsZSgpICYmIGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzc0RhdGFi
YXNlKGNvbnRleHQtPnRvcE9yaWdpbigpKSkKKyAgICAgICAgZGF0YWJhc2UgPSBkYk1hbmFnZXIu
b3BlbkRhdGFiYXNlKGNvbnRleHQsIG5hbWUsIHZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0
ZWRTaXplLCBjcmVhdGlvbkNhbGxiYWNrLCBlcnJvcik7CisKKyAgICBpZiAoZXJyb3IgPT0gRGF0
YWJhc2VFcnJvcjo6Q2Fubm90T3BlbkRhdGFiYXNlKQorICAgICAgICBlYyA9IElOVkFMSURfU1RB
VEVfRVJSOworICAgIGlmICghZGF0YWJhc2UgJiYgIWVjKQogICAgICAgICBlYyA9IFNFQ1VSSVRZ
X0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQogCi0gICAgcmV0dXJuIGRiTWFuYWdlci5v
cGVuRGF0YWJhc2UoY29udGV4dCwgbmFtZSwgdmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRl
ZFNpemUsIGNyZWF0aW9uQ2FsbGJhY2ssIGVjKTsKKyAgICByZXR1cm4gZGF0YWJhc2UucmVsZWFz
ZSgpOwogfQogCiBQYXNzUmVmUHRyPERhdGFiYXNlU3luYz4gV29ya2VyQ29udGV4dFdlYkRhdGFi
YXNlOjpvcGVuRGF0YWJhc2VTeW5jKFdvcmtlckNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1l
LCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFj
az4gY3JlYXRpb25DYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgRGF0YWJhc2VN
YW5hZ2VyJiBkYk1hbmFnZXIgPSBEYXRhYmFzZU1hbmFnZXI6Om1hbmFnZXIoKTsKLSAgICBpZiAo
IWNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzc0RhdGFiYXNlKGNvbnRleHQtPnRv
cE9yaWdpbigpKSB8fCAhZGJNYW5hZ2VyLmlzQXZhaWxhYmxlKCkpIHsKKyAgICBSZWZQdHI8RGF0
YWJhc2VTeW5jPiBkYXRhYmFzZTsKKyAgICBEYXRhYmFzZUVycm9yIGVycm9yID0gIERhdGFiYXNl
RXJyb3I6Ok5vbmU7CisgICAgaWYgKGRiTWFuYWdlci5pc0F2YWlsYWJsZSgpICYmIGNvbnRleHQt
PnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzc0RhdGFiYXNlKGNvbnRleHQtPnRvcE9yaWdpbigp
KSkKKyAgICAgICAgZGF0YWJhc2UgPSBkYk1hbmFnZXIub3BlbkRhdGFiYXNlU3luYyhjb250ZXh0
LCBuYW1lLCB2ZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwgY3JlYXRpb25DYWxs
YmFjaywgZXJyb3IpOworCisgICAgaWYgKGVycm9yID09IERhdGFiYXNlRXJyb3I6OkNhbm5vdE9w
ZW5EYXRhYmFzZSkKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICBpZiAoIWRh
dGFiYXNlICYmICFlYykKICAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KIAotICAgIHJldHVybiBkYk1hbmFnZXIub3BlbkRhdGFiYXNlU3luYyhjb250
ZXh0LCBuYW1lLCB2ZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwgY3JlYXRpb25D
YWxsYmFjaywgZWMpOworICAgIHJldHVybiBkYXRhYmFzZS5yZWxlYXNlKCk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUK
</data>
<flag name="review"
          id="205523"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>