<?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>49647</bug_id>
          
          <creation_ts>2010-11-16 23:30:41 -0800</creation_ts>
          <short_desc>Merge ScriptElement and ScriptElementData</short_desc>
          <delta_ts>2010-11-17 18:32:11 -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>DOM</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>darin</cc>
    
    <cc>tonyg</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>310141</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-16 23:30:41 -0800</bug_when>
    <thetext>ScriptElementData and ScriptElement should be merged.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310143</commentid>
    <comment_count>1</comment_count>
      <attachid>74086</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-16 23:44:51 -0800</bug_when>
    <thetext>Created attachment 74086
cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310354</commentid>
    <comment_count>2</comment_count>
      <attachid>74086</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-11-17 10:00:30 -0800</bug_when>
    <thetext>Comment on attachment 74086
cleanup

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

Good next refactoring step. Might be worth one more pass after this, because some members may no longer be needed.

&gt; WebCore/dom/ScriptElement.cpp:54
&gt; +ScriptElement::ScriptElement(Element* element, bool createdByParser, bool isEvaluated)

It occurs to me that a clearer name for these arguments and data members is “was evaluated” rather than “is evaluated”.

&gt; WebCore/dom/ScriptElement.h:43
&gt;      // A charset for loading the script (may be overridden by HTTP headers or a BOM).
&gt;      String scriptCharset() const;
&gt;      String scriptContent() const;

It’s strange to have a comment about the first function before a paragraph with 5 functions in it, and the comment does not apply to any of these others. Adding a blank line is one way to solve that.

&gt; WebCore/dom/ScriptElement.h:46
&gt;      void executeScript(const ScriptSourceCode&amp;);
&gt; +    void execute(CachedScript*);

It’s unclear why one of these is named executeScript and the other is named execute. What’s the difference between these two?

&gt; WebCore/dom/ScriptElement.h:90
&gt; +    bool m_createdByParser; // HTML5: &quot;parser-inserted&quot;
&gt; +    bool m_requested;
&gt; +    bool m_isEvaluated; // HTML5: &quot;already started&quot;
&gt; +    bool m_firedLoad;

Better names for these data members, that would obviate the need for those HTML5 comments:

    m_wasInsertedByParser
    m_wasRequested (maybe, not sure what the flag means)
    m_wasAlreadyStarted
    m_hasFiredLoadEvent</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310384</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-17 10:56:59 -0800</bug_when>
    <thetext>Committed r72222: &lt;http://trac.webkit.org/changeset/72222&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310386</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-17 10:57:38 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; &gt; WebCore/dom/ScriptElement.h:43
&gt; &gt;      // A charset for loading the script (may be overridden by HTTP headers or a BOM).
&gt; &gt;      String scriptCharset() const;
&gt; &gt;      String scriptContent() const;
&gt; 
&gt; It’s strange to have a comment about the first function before a paragraph with 5 functions in it, and the comment does not apply to any of these others. Adding a blank line is one way to solve that.

Fixed.

&gt; &gt; WebCore/dom/ScriptElement.cpp:54
&gt; &gt; +ScriptElement::ScriptElement(Element* element, bool createdByParser, bool isEvaluated)
&gt; 
&gt; It occurs to me that a clearer name for these arguments and data members is “was evaluated” rather than “is evaluated”.

I think we should do all the renames in a separate patch.

&gt; &gt; WebCore/dom/ScriptElement.h:46
&gt; &gt;      void executeScript(const ScriptSourceCode&amp;);
&gt; &gt; +    void execute(CachedScript*);
&gt; 
&gt; It’s unclear why one of these is named executeScript and the other is named execute. What’s the difference between these two?

It&apos;s not clear to me either.  There&apos;s also evaluateScript and requestScript, which makes the matter worse.  I need to figure out what all of these functions are doing before I can give more appropriate names to them.

&gt; &gt; WebCore/dom/ScriptElement.h:90
&gt; &gt; +    bool m_createdByParser; // HTML5: &quot;parser-inserted&quot;
&gt; &gt; +    bool m_requested;
&gt; &gt; +    bool m_isEvaluated; // HTML5: &quot;already started&quot;
&gt; &gt; +    bool m_firedLoad;
&gt; 
&gt; Better names for these data members, that would obviate the need for those HTML5 comments:
&gt; 
&gt;     m_wasInsertedByParser
&gt;     m_wasRequested (maybe, not sure what the flag means)
&gt;     m_wasAlreadyStarted
&gt;     m_hasFiredLoadEvent

Right, will do in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310658</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-17 18:32:11 -0800</bug_when>
    <thetext>Follow up filed as https://bugs.webkit.org/show_bug.cgi?id=49705.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74086</attachid>
            <date>2010-11-16 23:44:51 -0800</date>
            <delta_ts>2010-11-17 10:00:30 -0800</delta_ts>
            <desc>cleanup</desc>
            <filename>bug-49647-20101116234449.patch</filename>
            <type>text/plain</type>
            <size>18855</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MjE3NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDUgQEAKKzIwMTAtMTEtMTYgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWVy
Z2UgU2NyaXB0RWxlbWVudCBhbmQgU2NyaXB0RWxlbWVudERhdGEKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5NjQ3CisKKyAgICAgICAgTWVyZ2VkIHR3
byBjbGFzc2VzLgorCisgICAgICAgICogZG9tL0FzeW5jU2NyaXB0UnVubmVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkFzeW5jU2NyaXB0UnVubmVyOjpleGVjdXRlU2NyaXB0U29vbik6IFRha2Vz
IFNjcmlwdEVsZW1lbnQqIGluc3RlYWQgb2YgU2NyaXB0RWxlbWVudERhdGEqLgorICAgICAgICAo
V2ViQ29yZTo6QXN5bmNTY3JpcHRSdW5uZXI6OnRpbWVyRmlyZWQpOiBVc2VzIFNjcmlwdEVsZW1l
bnQqIGluc3RlYWQgb2YgU2NyaXB0RWxlbWVudERhdGEqLgorICAgICAgICAqIGRvbS9Bc3luY1Nj
cmlwdFJ1bm5lci5oOgorICAgICAgICAqIGRvbS9TY3JpcHRFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OlNjcmlwdEVsZW1lbnQpOiBNZXJnZWQgd2l0aCBTY3Jp
cHRFbGVtZW50RGF0YTo6U2NyaXB0RWxlbWVudERhdGEuCisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHRFbGVtZW50Ojp+U2NyaXB0RWxlbWVudCk6IE1lcmdlZCB3aXRoIFNjcmlwdEVsZW1lbnREYXRh
Ojp+U2NyaXB0RWxlbWVudERhdGEuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50Ojpp
bnNlcnRlZEludG9Eb2N1bWVudCk6IENhbGxzIGNyZWF0ZWRCeVBhcnNlciwgaXNBc3luY2hyb25v
dXMsIHJlcXVlc3RTY3JpcHQsIGFuZCBzY3JpcHRDb250ZW50LgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0RWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCk6IENhbGxzIHN0b3BMb2FkUmVxdWVz
dC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZCk6IENh
bGxzIGNyZWF0ZWRCeVBhcnNlciBhbmQgYWNjZXNzZXMgbV9lbGVtZW50LgorICAgICAgICAoV2Vi
Q29yZTo6U2NyaXB0RWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKTogQ2FsbHMgc2NyaXB0
Q29udGVudC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OmhhbmRsZVNvdXJjZUF0
dHJpYnV0ZSk6IENhbGxzIGlnbm9yZXNMb2FkUmVxdWVzdCBhbmQgcmVxdWVzdFNjcmlwdC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OnJlcXVlc3RTY3JpcHQpOiBNb3ZlZCBmcm9t
IFNjcmlwdEVsZW1lbnREYXRhOyBjYWxscyBkaXNwYXRjaEVycm9yRXZlbnQuCisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpldmFsdWF0ZVNjcmlwdCk6IE1vdmVkIGZyb20gU2NyaXB0
RWxlbWVudERhdGEuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpleGVjdXRlU2Ny
aXB0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpzdG9wTG9hZFJl
cXVlc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OmV4ZWN1dGUp
OiBNb3ZlZCBmcm9tIFNjcmlwdEVsZW1lbnREYXRhOyBjYWxscyBkaXNwYXRjaEVycm9yRXZlbnQg
YW5kIGRpc3BhdGNoTG9hZEV2ZW50LgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6
bm90aWZ5RmluaXNoZWQpOiBNb3ZlZCBmcm9tIFNjcmlwdEVsZW1lbnREYXRhLgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6aWdub3Jlc0xvYWRSZXF1ZXN0KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpzaG91bGRFeGVjdXRlQXNKYXZhU2NyaXB0KTog
TW92ZWQgZnJvbSBTY3JpcHRFbGVtZW50RGF0YTsgY2FsbHMgdHlwZUF0dHJpYnV0ZVZhbHVlLCBs
YW5ndWFnZUF0dHJpYnV0ZVZhbHVlLAorICAgICAgICBmb3JBdHRyaWJ1dGVWYWx1ZSwgYW5kIGV2
ZW50QXR0cmlidXRlVmFsdWUuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpzY3Jp
cHRDaGFyc2V0KTogTW92ZWQgZnJvbSBTY3JpcHRFbGVtZW50RGF0YS4KKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdEVsZW1lbnQ6OnNjcmlwdENvbnRlbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdEVsZW1lbnQ6OmlzQXN5bmNocm9ub3VzKTogTW92ZWQgZnJvbSBTY3JpcHRFbGVt
ZW50RGF0YTsgY2FsbHMgc291cmNlQXR0cmlidXRlVmFsdWUgYW5kIGFzeW5jQXR0cmlidXRlVmFs
dWUuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50Ojppc0RlZmVycmVkKTogTW92ZWQg
ZnJvbSBTY3JpcHRFbGVtZW50RGF0YTsgY2FsbHMgc291cmNlQXR0cmlidXRlVmFsdWUsIGFzeW5j
QXR0cmlidXRlVmFsdWUsCisgICAgICAgIGFuZCBkZWZlckF0dHJpYnV0ZVZhbHVlLgorICAgICAg
ICAqIGRvbS9TY3JpcHRFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50
OjplbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OmhhdmVGaXJlZExv
YWRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpzZXRIYXZlRmlyZWRM
b2FkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RWxlbWVudDo6Y3JlYXRlZEJ5UGFy
c2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdEVsZW1lbnQ6OmlzRXZhbHVhdGVkKToKKwog
MjAxMC0xMS0xNiAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+CiAKICAgICAgICAgTW92
ZSBRVE1vdmllV2luJ3Mgc2V0dGluZ3MgaW50byBhIHZzcHJvcHMgZmlsZQpJbmRleDogV2ViQ29y
ZS9kb20vQXN5bmNTY3JpcHRSdW5uZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0Fz
eW5jU2NyaXB0UnVubmVyLmNwcAkocmV2aXNpb24gNzIxNzIpCisrKyBXZWJDb3JlL2RvbS9Bc3lu
Y1NjcmlwdFJ1bm5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgQXN5bmNT
Y3JpcHRSdW5uZXI6On5Bc3luY1NjcmlwdFJ1bm5lcigpCiAgICAgfQogfQogCi12b2lkIEFzeW5j
U2NyaXB0UnVubmVyOjpleGVjdXRlU2NyaXB0U29vbihTY3JpcHRFbGVtZW50RGF0YSogZGF0YSwg
Q2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkU2NyaXB0PiBjYWNoZWRTY3JpcHQpCit2b2lkIEFz
eW5jU2NyaXB0UnVubmVyOjpleGVjdXRlU2NyaXB0U29vbihTY3JpcHRFbGVtZW50KiBkYXRhLCBD
YWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+IGNhY2hlZFNjcmlwdCkKIHsKICAgICBB
U1NFUlRfQVJHKGRhdGEsIGRhdGEpOwogCkBAIC04MCw3ICs4MCw3IEBAIHZvaWQgQXN5bmNTY3Jp
cHRSdW5uZXI6OnRpbWVyRmlyZWQoVGltZXIKIAogICAgIFJlZlB0cjxEb2N1bWVudD4gcHJvdGVj
dChtX2RvY3VtZW50KTsKICAgICAKLSAgICBWZWN0b3I8cGFpcjxTY3JpcHRFbGVtZW50RGF0YSos
IENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4gPiA+IHNjcmlwdHM7CisgICAgVmVj
dG9yPHBhaXI8U2NyaXB0RWxlbWVudCosIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNjcmlw
dD4gPiA+IHNjcmlwdHM7CiAgICAgc2NyaXB0cy5zd2FwKG1fc2NyaXB0c1RvRXhlY3V0ZVNvb24p
OwogICAgIHNpemVfdCBzaXplID0gc2NyaXB0cy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKSW5kZXg6IFdlYkNvcmUvZG9tL0FzeW5jU2NyaXB0UnVubmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQXN5bmNTY3JpcHRSdW5uZXIuaAkocmV2aXNp
b24gNzIxNzIpCisrKyBXZWJDb3JlL2RvbS9Bc3luY1NjcmlwdFJ1bm5lci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiwxNCArMzYsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDYWNo
ZWRTY3JpcHQ7CiBjbGFzcyBEb2N1bWVudDsKLWNsYXNzIFNjcmlwdEVsZW1lbnREYXRhOworY2xh
c3MgU2NyaXB0RWxlbWVudDsKICAgICAKIGNsYXNzIEFzeW5jU2NyaXB0UnVubmVyIDogcHVibGlj
IE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxBc3luY1Njcmlw
dFJ1bm5lcj4gY3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCkgeyByZXR1cm4gbmV3IEFzeW5jU2Ny
aXB0UnVubmVyKGRvY3VtZW50KTsgfQogICAgIH5Bc3luY1NjcmlwdFJ1bm5lcigpOwogCi0gICAg
dm9pZCBleGVjdXRlU2NyaXB0U29vbihTY3JpcHRFbGVtZW50RGF0YSosIENhY2hlZFJlc291cmNl
SGFuZGxlPENhY2hlZFNjcmlwdD4pOworICAgIHZvaWQgZXhlY3V0ZVNjcmlwdFNvb24oU2NyaXB0
RWxlbWVudCosIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4pOwogICAgIGJvb2wg
aGFzUGVuZGluZ1NjcmlwdHMoKSBjb25zdCB7IHJldHVybiAhbV9zY3JpcHRzVG9FeGVjdXRlU29v
bi5pc0VtcHR5KCk7IH0KICAgICB2b2lkIHN1c3BlbmQoKTsKICAgICB2b2lkIHJlc3VtZSgpOwpA
QCAtNTQsNyArNTQsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgdGltZXJGaXJlZChUaW1lcjxBc3lu
Y1NjcmlwdFJ1bm5lcj4qKTsKIAogICAgIERvY3VtZW50KiBtX2RvY3VtZW50OwotICAgIFZlY3Rv
cjxzdGQ6OnBhaXI8U2NyaXB0RWxlbWVudERhdGEqLCBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNo
ZWRTY3JpcHQ+ID4gPiBtX3NjcmlwdHNUb0V4ZWN1dGVTb29uOworICAgIFZlY3RvcjxzdGQ6OnBh
aXI8U2NyaXB0RWxlbWVudCosIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4gPiA+
IG1fc2NyaXB0c1RvRXhlY3V0ZVNvb247CiAgICAgVGltZXI8QXN5bmNTY3JpcHRSdW5uZXI+IG1f
dGltZXI7CiB9OwogCkluZGV4OiBXZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcAkocmV2aXNpb24gNzIxNzIpCisr
KyBXZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNzgg
KzUxLDcyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU3RyaW5nIFNjcmlwdEVsZW1lbnQ6
OnNjcmlwdENoYXJzZXQoKSBjb25zdAotewotICAgIHJldHVybiBtX2RhdGEuc2NyaXB0Q2hhcnNl
dCgpOwotfQotCi1TdHJpbmcgU2NyaXB0RWxlbWVudDo6c2NyaXB0Q29udGVudCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fZGF0YS5zY3JpcHRDb250ZW50KCk7Ci19Ci0KLWJvb2wgU2NyaXB0RWxl
bWVudDo6c2hvdWxkRXhlY3V0ZUFzSmF2YVNjcmlwdCgpIGNvbnN0CitTY3JpcHRFbGVtZW50OjpT
Y3JpcHRFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyLCBib29s
IGlzRXZhbHVhdGVkKQorICAgIDogbV9lbGVtZW50KGVsZW1lbnQpCisgICAgLCBtX2NhY2hlZFNj
cmlwdCgwKQorICAgICwgbV9jcmVhdGVkQnlQYXJzZXIoY3JlYXRlZEJ5UGFyc2VyKQorICAgICwg
bV9yZXF1ZXN0ZWQoZmFsc2UpCisgICAgLCBtX2lzRXZhbHVhdGVkKGlzRXZhbHVhdGVkKQorICAg
ICwgbV9maXJlZExvYWQoZmFsc2UpCiB7Ci0gICAgcmV0dXJuIG1fZGF0YS5zaG91bGRFeGVjdXRl
QXNKYXZhU2NyaXB0KCk7CisgICAgQVNTRVJUKG1fZWxlbWVudCk7CiB9CiAKLXZvaWQgU2NyaXB0
RWxlbWVudDo6ZXhlY3V0ZVNjcmlwdChjb25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2Rl
KQorU2NyaXB0RWxlbWVudDo6flNjcmlwdEVsZW1lbnQoKQogewotICAgIG1fZGF0YS5leGVjdXRl
U2NyaXB0KHNvdXJjZUNvZGUpOworICAgIHN0b3BMb2FkUmVxdWVzdCgpOwogfQogCiB2b2lkIFNj
cmlwdEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KGNvbnN0IFN0cmluZyYgc291cmNlVXJs
KQogewotICAgIGlmIChtX2RhdGEuY3JlYXRlZEJ5UGFyc2VyKCkgJiYgIW1fZGF0YS5pc0FzeW5j
aHJvbm91cygpKQorICAgIGlmIChjcmVhdGVkQnlQYXJzZXIoKSAmJiAhaXNBc3luY2hyb25vdXMo
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNz
L3dlYi1hcHBzL2N1cnJlbnQtd29yay8jc2NyaXB0CiAKICAgICBpZiAoIXNvdXJjZVVybC5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgbV9kYXRhLnJlcXVlc3RTY3JpcHQoc291cmNlVXJsKTsKKyAgICAg
ICAgcmVxdWVzdFNjcmlwdChzb3VyY2VVcmwpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgLy8gSWYgdGhlcmUncyBhbiBlbXB0eSBzY3JpcHQgbm9kZSwgd2Ugc2hvdWxkbid0IGV2YWx1
YXRlIHRoZSBzY3JpcHQKICAgICAvLyBiZWNhdXNlIGlmIGEgc2NyaXB0IGlzIGluc2VydGVkIGFm
dGVyd2FyZHMgKGJ5IHNldHRpbmcgdGV4dCBvciBpbm5lclRleHQpCiAgICAgLy8gaXQgc2hvdWxk
IGJlIGV2YWx1YXRlZCwgYW5kIGV2YWx1YXRlU2NyaXB0IG9ubHkgZXZhbHVhdGVzIGEgc2NyaXB0
IG9uY2UuCi0gICAgbV9kYXRhLmV2YWx1YXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUobV9kYXRh
LnNjcmlwdENvbnRlbnQoKSwgbV9kYXRhLmVsZW1lbnQoKS0+ZG9jdW1lbnQoKS0+dXJsKCkpKTsg
Ly8gRklYTUU6IFByb3ZpZGUgYSByZWFsIHN0YXJ0aW5nIGxpbmUgbnVtYmVyIGhlcmUuCisgICAg
ZXZhbHVhdGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShzY3JpcHRDb250ZW50KCksIGVsZW1lbnQo
KS0+ZG9jdW1lbnQoKS0+dXJsKCkpKTsgLy8gRklYTUU6IFByb3ZpZGUgYSByZWFsIHN0YXJ0aW5n
IGxpbmUgbnVtYmVyIGhlcmUuCiB9CiAKIHZvaWQgU2NyaXB0RWxlbWVudDo6cmVtb3ZlZEZyb21E
b2N1bWVudCgpCiB7CiAgICAgLy8gRXZlbnR1YWxseSBzdG9wIGxvYWRpbmcgYW55IG5vdC15ZXQt
ZmluaXNoZWQgY29udGVudAotICAgIG1fZGF0YS5zdG9wTG9hZFJlcXVlc3QoKTsKKyAgICBzdG9w
TG9hZFJlcXVlc3QoKTsKIH0KIAogdm9pZCBTY3JpcHRFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQo
KQogewotICAgIGlmIChtX2RhdGEuY3JlYXRlZEJ5UGFyc2VyKCkpCisgICAgaWYgKGNyZWF0ZWRC
eVBhcnNlcigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gbV9k
YXRhLmVsZW1lbnQoKTsKLQogICAgIC8vIElmIGEgbm9kZSBpcyBpbnNlcnRlZCBhcyBhIGNoaWxk
IG9mIHRoZSBzY3JpcHQgZWxlbWVudAogICAgIC8vIGFuZCB0aGUgc2NyaXB0IGVsZW1lbnQgaGFz
IGJlZW4gaW5zZXJ0ZWQgaW4gdGhlIGRvY3VtZW50CiAgICAgLy8gd2UgZXZhbHVhdGUgdGhlIHNj
cmlwdC4KLSAgICBpZiAoZWxlbWVudC0+aW5Eb2N1bWVudCgpICYmIGVsZW1lbnQtPmZpcnN0Q2hp
bGQoKSkKLSAgICAgICAgbV9kYXRhLmV2YWx1YXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUobV9k
YXRhLnNjcmlwdENvbnRlbnQoKSwgZWxlbWVudC0+ZG9jdW1lbnQoKS0+dXJsKCkpKTsgLy8gRklY
TUU6IFByb3ZpZGUgYSByZWFsIHN0YXJ0aW5nIGxpbmUgbnVtYmVyIGhlcmUKKyAgICBpZiAobV9l
bGVtZW50LT5pbkRvY3VtZW50KCkgJiYgbV9lbGVtZW50LT5maXJzdENoaWxkKCkpCisgICAgICAg
IGV2YWx1YXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0Q29udGVudCgpLCBtX2VsZW1l
bnQtPmRvY3VtZW50KCktPnVybCgpKSk7IC8vIEZJWE1FOiBQcm92aWRlIGEgcmVhbCBzdGFydGlu
ZyBsaW5lIG51bWJlciBoZXJlCiB9CiAKIHZvaWQgU2NyaXB0RWxlbWVudDo6ZmluaXNoUGFyc2lu
Z0NoaWxkcmVuKGNvbnN0IFN0cmluZyYgc291cmNlVXJsKQogewogICAgIC8vIFRoZSBwYXJzZXIg
anVzdCByZWFjaGVkIDwvc2NyaXB0Pi4gSWYgd2UgaGF2ZSBubyBzcmMgYW5kIG5vIHRleHQsCiAg
ICAgLy8gYWxsb3cgZHluYW1pYyBsb2FkaW5nIGxhdGVyLgotICAgIGlmIChzb3VyY2VVcmwuaXNF
bXB0eSgpICYmIG1fZGF0YS5zY3JpcHRDb250ZW50KCkuaXNFbXB0eSgpKQotICAgICAgICBtX2Rh
dGEuc2V0Q3JlYXRlZEJ5UGFyc2VyKGZhbHNlKTsKKyAgICBpZiAoc291cmNlVXJsLmlzRW1wdHko
KSAmJiBzY3JpcHRDb250ZW50KCkuaXNFbXB0eSgpKQorICAgICAgICBtX2NyZWF0ZWRCeVBhcnNl
ciA9IGZhbHNlOwogfQogCiB2b2lkIFNjcmlwdEVsZW1lbnQ6OmhhbmRsZVNvdXJjZUF0dHJpYnV0
ZShjb25zdCBTdHJpbmcmIHNvdXJjZVVybCkKIHsKLSAgICBpZiAobV9kYXRhLmlnbm9yZXNMb2Fk
UmVxdWVzdCgpIHx8IHNvdXJjZVVybC5pc0VtcHR5KCkpCisgICAgaWYgKGlnbm9yZXNMb2FkUmVx
dWVzdCgpIHx8IHNvdXJjZVVybC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1f
ZGF0YS5yZXF1ZXN0U2NyaXB0KHNvdXJjZVVybCk7CisgICAgcmVxdWVzdFNjcmlwdChzb3VyY2VV
cmwpOwogfQogCiAvLyBIZWxwZXIgZnVuY3Rpb24KQEAgLTE0OSwyNiArMTQzLDcgQEAgc3RhdGlj
IGJvb2wgaXNTdXBwb3J0ZWRKYXZhU2NyaXB0TGFuZ3VhZwogICAgIHJldHVybiBsYW5ndWFnZXMu
Y29udGFpbnMobGFuZ3VhZ2UpOwogfQogCi0vLyBTY3JpcHRFbGVtZW50RGF0YQotU2NyaXB0RWxl
bWVudERhdGE6OlNjcmlwdEVsZW1lbnREYXRhKFNjcmlwdEVsZW1lbnQqIHNjcmlwdEVsZW1lbnQs
IEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgaXNFdmFsdWF0ZWQpCi0gICAgOiBtX3NjcmlwdEVsZW1l
bnQoc2NyaXB0RWxlbWVudCkKLSAgICAsIG1fZWxlbWVudChlbGVtZW50KQotICAgICwgbV9jYWNo
ZWRTY3JpcHQoMCkKLSAgICAsIG1fY3JlYXRlZEJ5UGFyc2VyKGZhbHNlKQotICAgICwgbV9yZXF1
ZXN0ZWQoZmFsc2UpCi0gICAgLCBtX2lzRXZhbHVhdGVkKGlzRXZhbHVhdGVkKQotICAgICwgbV9m
aXJlZExvYWQoZmFsc2UpCi17Ci0gICAgQVNTRVJUKG1fc2NyaXB0RWxlbWVudCk7Ci0gICAgQVNT
RVJUKG1fZWxlbWVudCk7Ci19Ci0KLVNjcmlwdEVsZW1lbnREYXRhOjp+U2NyaXB0RWxlbWVudERh
dGEoKQotewotICAgIHN0b3BMb2FkUmVxdWVzdCgpOwotfQotCi12b2lkIFNjcmlwdEVsZW1lbnRE
YXRhOjpyZXF1ZXN0U2NyaXB0KGNvbnN0IFN0cmluZyYgc291cmNlVXJsKQordm9pZCBTY3JpcHRF
bGVtZW50OjpyZXF1ZXN0U2NyaXB0KGNvbnN0IFN0cmluZyYgc291cmNlVXJsKQogewogICAgIERv
Y3VtZW50KiBkb2N1bWVudCA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKTsKIApAQCAtMTk1LDEwICsx
NzAsMTAgQEAgdm9pZCBTY3JpcHRFbGVtZW50RGF0YTo6cmVxdWVzdFNjcmlwdChjbwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgbV9zY3JpcHRFbGVtZW50LT5kaXNwYXRjaEVycm9yRXZl
bnQoKTsKKyAgICBkaXNwYXRjaEVycm9yRXZlbnQoKTsKIH0KIAotdm9pZCBTY3JpcHRFbGVtZW50
RGF0YTo6ZXZhbHVhdGVTY3JpcHQoY29uc3QgU2NyaXB0U291cmNlQ29kZSYgc291cmNlQ29kZSkK
K3ZvaWQgU2NyaXB0RWxlbWVudDo6ZXZhbHVhdGVTY3JpcHQoY29uc3QgU2NyaXB0U291cmNlQ29k
ZSYgc291cmNlQ29kZSkKIHsKICAgICBpZiAobV9pc0V2YWx1YXRlZCB8fCBzb3VyY2VDb2RlLmlz
RW1wdHkoKSB8fCAhc2hvdWxkRXhlY3V0ZUFzSmF2YVNjcmlwdCgpKQogICAgICAgICByZXR1cm47
CkBAIC0yMjUsNyArMjAwLDcgQEAgdm9pZCBTY3JpcHRFbGVtZW50RGF0YTo6ZXZhbHVhdGVTY3Jp
cHQoYwogICAgIH0KIH0KIAotdm9pZCBTY3JpcHRFbGVtZW50RGF0YTo6ZXhlY3V0ZVNjcmlwdChj
b25zdCBTY3JpcHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlKQordm9pZCBTY3JpcHRFbGVtZW50Ojpl
eGVjdXRlU2NyaXB0KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUpCiB7CiAgICAg
aWYgKG1faXNFdmFsdWF0ZWQgfHwgc291cmNlQ29kZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTI0MCw3ICsyMTUsNyBAQCB2b2lkIFNjcmlwdEVsZW1lbnREYXRhOjpleGVjdXRlU2Ny
aXB0KGNvCiAgICAgZnJhbWUtPnNjcmlwdCgpLT5leGVjdXRlU2NyaXB0KHNvdXJjZUNvZGUpOwog
fQogCi12b2lkIFNjcmlwdEVsZW1lbnREYXRhOjpzdG9wTG9hZFJlcXVlc3QoKQordm9pZCBTY3Jp
cHRFbGVtZW50OjpzdG9wTG9hZFJlcXVlc3QoKQogewogICAgIGlmIChtX2NhY2hlZFNjcmlwdCkg
ewogICAgICAgICBtX2NhY2hlZFNjcmlwdC0+cmVtb3ZlQ2xpZW50KHRoaXMpOwpAQCAtMjQ4LDMx
ICsyMjMsMzEgQEAgdm9pZCBTY3JpcHRFbGVtZW50RGF0YTo6c3RvcExvYWRSZXF1ZXN0KAogICAg
IH0KIH0KIAotdm9pZCBTY3JpcHRFbGVtZW50RGF0YTo6ZXhlY3V0ZShDYWNoZWRTY3JpcHQqIGNh
Y2hlZFNjcmlwdCkKK3ZvaWQgU2NyaXB0RWxlbWVudDo6ZXhlY3V0ZShDYWNoZWRTY3JpcHQqIGNh
Y2hlZFNjcmlwdCkKIHsKICAgICBBU1NFUlQoY2FjaGVkU2NyaXB0KTsKICAgICBpZiAoY2FjaGVk
U2NyaXB0LT5lcnJvck9jY3VycmVkKCkpCi0gICAgICAgIG1fc2NyaXB0RWxlbWVudC0+ZGlzcGF0
Y2hFcnJvckV2ZW50KCk7CisgICAgICAgIGRpc3BhdGNoRXJyb3JFdmVudCgpOwogICAgIGVsc2Ug
ewogICAgICAgICBldmFsdWF0ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKGNhY2hlZFNjcmlwdCkp
OwotICAgICAgICBtX3NjcmlwdEVsZW1lbnQtPmRpc3BhdGNoTG9hZEV2ZW50KCk7CisgICAgICAg
IGRpc3BhdGNoTG9hZEV2ZW50KCk7CiAgICAgfQogICAgIGNhY2hlZFNjcmlwdC0+cmVtb3ZlQ2xp
ZW50KHRoaXMpOwogfQogCi12b2lkIFNjcmlwdEVsZW1lbnREYXRhOjpub3RpZnlGaW5pc2hlZChD
YWNoZWRSZXNvdXJjZSogbykKK3ZvaWQgU2NyaXB0RWxlbWVudDo6bm90aWZ5RmluaXNoZWQoQ2Fj
aGVkUmVzb3VyY2UqIG8pCiB7CiAgICAgQVNTRVJUX1VOVVNFRChvLCBvID09IG1fY2FjaGVkU2Ny
aXB0KTsKICAgICBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmFzeW5jU2NyaXB0UnVubmVyKCktPmV4
ZWN1dGVTY3JpcHRTb29uKHRoaXMsIG1fY2FjaGVkU2NyaXB0KTsKICAgICBtX2NhY2hlZFNjcmlw
dCA9IDA7CiB9CiAKLWJvb2wgU2NyaXB0RWxlbWVudERhdGE6Omlnbm9yZXNMb2FkUmVxdWVzdCgp
IGNvbnN0Citib29sIFNjcmlwdEVsZW1lbnQ6Omlnbm9yZXNMb2FkUmVxdWVzdCgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG1faXNFdmFsdWF0ZWQgfHwgbV9yZXF1ZXN0ZWQgfHwgbV9jcmVhdGVkQnlQ
YXJzZXIgfHwgIW1fZWxlbWVudC0+aW5Eb2N1bWVudCgpOwogfQogCi1ib29sIFNjcmlwdEVsZW1l
bnREYXRhOjpzaG91bGRFeGVjdXRlQXNKYXZhU2NyaXB0KCkgY29uc3QKK2Jvb2wgU2NyaXB0RWxl
bWVudDo6c2hvdWxkRXhlY3V0ZUFzSmF2YVNjcmlwdCgpIGNvbnN0CiB7CiAgICAgLyoKICAgICAg
ICAgIE1vemlsbGEgMS44IGFjY2VwdHMgamF2YXNjcmlwdDEuMCAtIGphdmFzY3JpcHQxLjcsIGJ1
dCBXaW5JRSA3IGFjY2VwdHMgb25seSBqYXZhc2NyaXB0MS4xIC0gamF2YXNjcmlwdDEuMy4KQEAg
LTI4MywyMCArMjU4LDIwIEBAIGJvb2wgU2NyaXB0RWxlbWVudERhdGE6OnNob3VsZEV4ZWN1dGVB
c0oKICAgICAgCiAgICAgICAgICBGSVhNRTogSXMgdGhpcyBIVE1MNSBjb21wbGlhbnQ/CiAgICAg
ICovCi0gICAgU3RyaW5nIHR5cGUgPSBtX3NjcmlwdEVsZW1lbnQtPnR5cGVBdHRyaWJ1dGVWYWx1
ZSgpOworICAgIFN0cmluZyB0eXBlID0gdHlwZUF0dHJpYnV0ZVZhbHVlKCk7CiAgICAgaWYgKCF0
eXBlLmlzRW1wdHkoKSkgewogICAgICAgICBpZiAoIU1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9y
dGVkSmF2YVNjcmlwdE1JTUVUeXBlKHR5cGUuc3RyaXBXaGl0ZVNwYWNlKCkubG93ZXIoKSkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgU3RyaW5nIGxh
bmd1YWdlID0gbV9zY3JpcHRFbGVtZW50LT5sYW5ndWFnZUF0dHJpYnV0ZVZhbHVlKCk7CisgICAg
ICAgIFN0cmluZyBsYW5ndWFnZSA9IGxhbmd1YWdlQXR0cmlidXRlVmFsdWUoKTsKICAgICAgICAg
aWYgKCFsYW5ndWFnZS5pc0VtcHR5KCkgJiYgIWlzU3VwcG9ydGVkSmF2YVNjcmlwdExhbmd1YWdl
KGxhbmd1YWdlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9ICAgIAogCiAgICAg
Ly8gTm8gdHlwZSBvciBsYW5ndWFnZSBpcyBzcGVjaWZpZWQsIHNvIHdlIGFzc3VtZSB0aGUgc2Ny
aXB0IHRvIGJlIEphdmFTY3JpcHQuCiAKLSAgICBTdHJpbmcgZm9yQXR0cmlidXRlID0gbV9zY3Jp
cHRFbGVtZW50LT5mb3JBdHRyaWJ1dGVWYWx1ZSgpOwotICAgIFN0cmluZyBldmVudEF0dHJpYnV0
ZSA9IG1fc2NyaXB0RWxlbWVudC0+ZXZlbnRBdHRyaWJ1dGVWYWx1ZSgpOworICAgIFN0cmluZyBm
b3JBdHRyaWJ1dGUgPSBmb3JBdHRyaWJ1dGVWYWx1ZSgpOworICAgIFN0cmluZyBldmVudEF0dHJp
YnV0ZSA9IGV2ZW50QXR0cmlidXRlVmFsdWUoKTsKICAgICBpZiAoIWZvckF0dHJpYnV0ZS5pc0Vt
cHR5KCkgJiYgIWV2ZW50QXR0cmlidXRlLmlzRW1wdHkoKSkgewogICAgICAgICBmb3JBdHRyaWJ1
dGUgPSBmb3JBdHRyaWJ1dGUuc3RyaXBXaGl0ZVNwYWNlKCk7CiAgICAgICAgIGlmICghZXF1YWxJ
Z25vcmluZ0Nhc2UoZm9yQXR0cmlidXRlLCAid2luZG93IikpCkBAIC0zMTAsMTAgKzI4NSwxMCBA
QCBib29sIFNjcmlwdEVsZW1lbnREYXRhOjpzaG91bGRFeGVjdXRlQXNKCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLVN0cmluZyBTY3JpcHRFbGVtZW50RGF0YTo6c2NyaXB0Q2hhcnNldCgpIGNvbnN0
CitTdHJpbmcgU2NyaXB0RWxlbWVudDo6c2NyaXB0Q2hhcnNldCgpIGNvbnN0CiB7CiAgICAgLy8g
Rmlyc3Qgd2UgdHJ5IHRvIGdldCBlbmNvZGluZyBmcm9tIGNoYXJzZXQgYXR0cmlidXRlLgotICAg
IFN0cmluZyBjaGFyc2V0ID0gbV9zY3JpcHRFbGVtZW50LT5jaGFyc2V0QXR0cmlidXRlVmFsdWUo
KS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAgICBTdHJpbmcgY2hhcnNldCA9IGNoYXJzZXRBdHRyaWJ1
dGVWYWx1ZSgpLnN0cmlwV2hpdGVTcGFjZSgpOwogCiAgICAgLy8gSWYgY2hhcnNldCBoYXMgbm90
IGJlZW4gZGVjbGFyZWQgaW4gc2NyaXB0IHRhZywgZmFsbCBiYWNrIHRvIGZyYW1lIGVuY29kaW5n
LgogICAgIGlmIChjaGFyc2V0LmlzRW1wdHkoKSkgewpAQCAtMzI0LDcgKzI5OSw3IEBAIFN0cmlu
ZyBTY3JpcHRFbGVtZW50RGF0YTo6c2NyaXB0Q2hhcnNldCgKICAgICByZXR1cm4gY2hhcnNldDsK
IH0KIAotU3RyaW5nIFNjcmlwdEVsZW1lbnREYXRhOjpzY3JpcHRDb250ZW50KCkgY29uc3QKK1N0
cmluZyBTY3JpcHRFbGVtZW50OjpzY3JpcHRDb250ZW50KCkgY29uc3QKIHsKICAgICBWZWN0b3I8
VUNoYXI+IHZhbDsKICAgICBUZXh0KiBmaXJzdFRleHROb2RlID0gMDsKQEAgLTM1MSwxOCArMzI2
LDE4IEBAIFN0cmluZyBTY3JpcHRFbGVtZW50RGF0YTo6c2NyaXB0Q29udGVudCgKICAgICByZXR1
cm4gU3RyaW5nOjphZG9wdCh2YWwpOwogfQogCi1ib29sIFNjcmlwdEVsZW1lbnREYXRhOjppc0Fz
eW5jaHJvbm91cygpIGNvbnN0Citib29sIFNjcmlwdEVsZW1lbnQ6OmlzQXN5bmNocm9ub3VzKCkg
Y29uc3QKIHsKICAgICAvLyBPbmx5IGV4dGVybmFsIHNjcmlwdHMgbWF5IGJlIGFzeW5jaHJvbm91
cy4KICAgICAvLyBTZWU6IGh0dHA6Ly9kZXYudzMub3JnL2h0bWw1L3NwZWMvT3ZlcnZpZXcuaHRt
bCNhdHRyLXNjcmlwdC1hc3luYwotICAgIHJldHVybiAhbV9zY3JpcHRFbGVtZW50LT5zb3VyY2VB
dHRyaWJ1dGVWYWx1ZSgpLmlzRW1wdHkoKSAmJiBtX3NjcmlwdEVsZW1lbnQtPmFzeW5jQXR0cmli
dXRlVmFsdWUoKTsKKyAgICByZXR1cm4gIXNvdXJjZUF0dHJpYnV0ZVZhbHVlKCkuaXNFbXB0eSgp
ICYmIGFzeW5jQXR0cmlidXRlVmFsdWUoKTsKIH0KIAotYm9vbCBTY3JpcHRFbGVtZW50RGF0YTo6
aXNEZWZlcnJlZCgpIGNvbnN0Citib29sIFNjcmlwdEVsZW1lbnQ6OmlzRGVmZXJyZWQoKSBjb25z
dAogewogICAgIC8vIE9ubHkgZXh0ZXJuYWwgc2NyaXB0cyBtYXkgYmUgZGVmZXJyZWQgYW5kIGFz
eW5jIHRydW1wcyBkZWZlciB0byBhbGxvdyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KICAg
ICAvLyBTZWU6IGh0dHA6Ly9kZXYudzMub3JnL2h0bWw1L3NwZWMvT3ZlcnZpZXcuaHRtbCNhdHRy
LXNjcmlwdC1kZWZlcgotICAgIHJldHVybiAhbV9zY3JpcHRFbGVtZW50LT5zb3VyY2VBdHRyaWJ1
dGVWYWx1ZSgpLmlzRW1wdHkoKSAmJiAhbV9zY3JpcHRFbGVtZW50LT5hc3luY0F0dHJpYnV0ZVZh
bHVlKCkgJiYgbV9zY3JpcHRFbGVtZW50LT5kZWZlckF0dHJpYnV0ZVZhbHVlKCk7CisgICAgcmV0
dXJuICFzb3VyY2VBdHRyaWJ1dGVWYWx1ZSgpLmlzRW1wdHkoKSAmJiAhYXN5bmNBdHRyaWJ1dGVW
YWx1ZSgpICYmIGRlZmVyQXR0cmlidXRlVmFsdWUoKTsKIH0KIAogU2NyaXB0RWxlbWVudCogdG9T
Y3JpcHRFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCkluZGV4OiBXZWJDb3JlL2RvbS9TY3JpcHRF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vU2NyaXB0RWxlbWVudC5oCShyZXZp
c2lvbiA3MjE3MikKKysrIFdlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMzEsNjAgKzMxLDE5IEBAIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBTY3JpcHRFbGVtZW50
OwogY2xhc3MgU2NyaXB0U291cmNlQ29kZTsKIAotY2xhc3MgU2NyaXB0RWxlbWVudERhdGEgOiBw
cml2YXRlIENhY2hlZFJlc291cmNlQ2xpZW50IHsKK2NsYXNzIFNjcmlwdEVsZW1lbnQgOiBwcml2
YXRlIENhY2hlZFJlc291cmNlQ2xpZW50IHsKIHB1YmxpYzoKLSAgICBTY3JpcHRFbGVtZW50RGF0
YShTY3JpcHRFbGVtZW50KiwgRWxlbWVudCosIGJvb2wgaXNFdmFsdWF0ZWQpOwotICAgIHZpcnR1
YWwgflNjcmlwdEVsZW1lbnREYXRhKCk7Ci0KLSAgICBib29sIGlnbm9yZXNMb2FkUmVxdWVzdCgp
IGNvbnN0OwotICAgIGJvb2wgc2hvdWxkRXhlY3V0ZUFzSmF2YVNjcmlwdCgpIGNvbnN0OwotCi0g
ICAgU3RyaW5nIHNjcmlwdENvbnRlbnQoKSBjb25zdDsKLSAgICBTdHJpbmcgc2NyaXB0Q2hhcnNl
dCgpIGNvbnN0OwotICAgIGJvb2wgaXNBc3luY2hyb25vdXMoKSBjb25zdDsKLSAgICBib29sIGlz
RGVmZXJyZWQoKSBjb25zdDsKLSAgICBib29sIGlzRXZhbHVhdGVkKCkgY29uc3QgeyByZXR1cm4g
bV9pc0V2YWx1YXRlZDsgfQotCisgICAgU2NyaXB0RWxlbWVudChFbGVtZW50KiwgYm9vbCBjcmVh
dGVkQnlQYXJzZXIsIGJvb2wgaXNFdmFsdWF0ZWQpOworICAgIHZpcnR1YWwgflNjcmlwdEVsZW1l
bnQoKTsKKyAgICAKICAgICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVt
ZW50OyB9Ci0gICAgYm9vbCBjcmVhdGVkQnlQYXJzZXIoKSBjb25zdCB7IHJldHVybiBtX2NyZWF0
ZWRCeVBhcnNlcjsgfQotICAgIHZvaWQgc2V0Q3JlYXRlZEJ5UGFyc2VyKGJvb2wgdmFsdWUpIHsg
bV9jcmVhdGVkQnlQYXJzZXIgPSB2YWx1ZTsgfQotICAgIGJvb2wgaGF2ZUZpcmVkTG9hZEV2ZW50
KCkgY29uc3QgeyByZXR1cm4gbV9maXJlZExvYWQ7IH0KLSAgICB2b2lkIHNldEhhdmVGaXJlZExv
YWRFdmVudChib29sIGZpcmVkTG9hZCkgeyBtX2ZpcmVkTG9hZCA9IGZpcmVkTG9hZDsgfQotCi0g
ICAgdm9pZCByZXF1ZXN0U2NyaXB0KGNvbnN0IFN0cmluZyYgc291cmNlVXJsKTsKLSAgICB2b2lk
IGV2YWx1YXRlU2NyaXB0KGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmKTsKLSAgICB2b2lkIGV4ZWN1
dGVTY3JpcHQoY29uc3QgU2NyaXB0U291cmNlQ29kZSYpOwotICAgIHZvaWQgc3RvcExvYWRSZXF1
ZXN0KCk7Ci0KLSAgICB2b2lkIGV4ZWN1dGUoQ2FjaGVkU2NyaXB0Kik7Ci0KLXByaXZhdGU6Ci0g
ICAgdmlydHVhbCB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKik7Ci0KLXByaXZh
dGU6Ci0gICAgU2NyaXB0RWxlbWVudCogbV9zY3JpcHRFbGVtZW50OwotICAgIEVsZW1lbnQqIG1f
ZWxlbWVudDsKLSAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+IG1fY2FjaGVk
U2NyaXB0OwotICAgIGJvb2wgbV9jcmVhdGVkQnlQYXJzZXI7IC8vIEhUTUw1OiAicGFyc2VyLWlu
c2VydGVkIgotICAgIGJvb2wgbV9yZXF1ZXN0ZWQ7Ci0gICAgYm9vbCBtX2lzRXZhbHVhdGVkOyAv
LyBIVE1MNTogImFscmVhZHkgc3RhcnRlZCIKLSAgICBib29sIG1fZmlyZWRMb2FkOwotfTsKLQot
Y2xhc3MgU2NyaXB0RWxlbWVudCB7Ci1wdWJsaWM6Ci0gICAgU2NyaXB0RWxlbWVudChFbGVtZW50
KiBlbGVtZW50LCBib29sIGNyZWF0ZWRCeVBhcnNlciwgYm9vbCBpc0V2YWx1YXRlZCkKLSAgICAg
ICAgOiBtX2RhdGEodGhpcywgZWxlbWVudCwgaXNFdmFsdWF0ZWQpCi0gICAgewotICAgICAgICBt
X2RhdGEuc2V0Q3JlYXRlZEJ5UGFyc2VyKGNyZWF0ZWRCeVBhcnNlcik7Ci0gICAgfQotICAgIHZp
cnR1YWwgflNjcmlwdEVsZW1lbnQoKSB7IH0KIAogICAgIC8vIEEgY2hhcnNldCBmb3IgbG9hZGlu
ZyB0aGUgc2NyaXB0IChtYXkgYmUgb3ZlcnJpZGRlbiBieSBIVFRQIGhlYWRlcnMgb3IgYSBCT00p
LgogICAgIFN0cmluZyBzY3JpcHRDaGFyc2V0KCkgY29uc3Q7CiAgICAgU3RyaW5nIHNjcmlwdENv
bnRlbnQoKSBjb25zdDsKICAgICBib29sIHNob3VsZEV4ZWN1dGVBc0phdmFTY3JpcHQoKSBjb25z
dDsKICAgICB2b2lkIGV4ZWN1dGVTY3JpcHQoY29uc3QgU2NyaXB0U291cmNlQ29kZSYpOworICAg
IHZvaWQgZXhlY3V0ZShDYWNoZWRTY3JpcHQqKTsKIAogICAgIC8vIFhNTCBwYXJzZXIgY2FsbHMg
dGhlc2UKICAgICB2aXJ0dWFsIFN0cmluZyBzb3VyY2VBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0ID0g
MDsKQEAgLTkyLDEwICs1MSwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
RXJyb3JFdmVudCgpID0gMDsKIAogcHJvdGVjdGVkOgotICAgIGJvb2wgaGF2ZUZpcmVkTG9hZEV2
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmhhdmVGaXJlZExvYWRFdmVudCgpOyB9Ci0gICAg
dm9pZCBzZXRIYXZlRmlyZWRMb2FkRXZlbnQoYm9vbCBmaXJlZExvYWQpIHsgcmV0dXJuIG1fZGF0
YS5zZXRIYXZlRmlyZWRMb2FkRXZlbnQoZmlyZWRMb2FkKTsgfQotICAgIGJvb2wgY3JlYXRlZEJ5
UGFyc2VyKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmNyZWF0ZWRCeVBhcnNlcigpOyB9Ci0gICAg
Ym9vbCBpc0V2YWx1YXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5pc0V2YWx1YXRlZCgpOyB9
CisgICAgYm9vbCBoYXZlRmlyZWRMb2FkRXZlbnQoKSBjb25zdCB7IHJldHVybiBtX2ZpcmVkTG9h
ZDsgfQorICAgIHZvaWQgc2V0SGF2ZUZpcmVkTG9hZEV2ZW50KGJvb2wgZmlyZWRMb2FkKSB7IG1f
ZmlyZWRMb2FkID0gZmlyZWRMb2FkOyB9CisgICAgYm9vbCBjcmVhdGVkQnlQYXJzZXIoKSBjb25z
dCB7IHJldHVybiBtX2NyZWF0ZWRCeVBhcnNlcjsgfQorICAgIGJvb2wgaXNFdmFsdWF0ZWQoKSBj
b25zdCB7IHJldHVybiBtX2lzRXZhbHVhdGVkOyB9CiAKICAgICAvLyBIZWxwZXIgZnVuY3Rpb25z
IHVzZWQgYnkgb3VyIHBhcmVudCBjbGFzc2VzLgogICAgIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1l
bnQoY29uc3QgU3RyaW5nJiBzb3VyY2VVcmwpOwpAQCAtMTA1LDYgKzY0LDE2IEBAIHByb3RlY3Rl
ZDoKICAgICB2b2lkIGhhbmRsZVNvdXJjZUF0dHJpYnV0ZShjb25zdCBTdHJpbmcmIHNvdXJjZVVy
bCk7CiAKIHByaXZhdGU6CisgICAgYm9vbCBpZ25vcmVzTG9hZFJlcXVlc3QoKSBjb25zdDsKKyAg
ICBib29sIGlzQXN5bmNocm9ub3VzKCkgY29uc3Q7CisgICAgYm9vbCBpc0RlZmVycmVkKCkgY29u
c3Q7CisKKyAgICB2b2lkIHJlcXVlc3RTY3JpcHQoY29uc3QgU3RyaW5nJiBzb3VyY2VVcmwpOwor
ICAgIHZvaWQgZXZhbHVhdGVTY3JpcHQoY29uc3QgU2NyaXB0U291cmNlQ29kZSYpOworICAgIHZv
aWQgc3RvcExvYWRSZXF1ZXN0KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RmluaXNoZWQo
Q2FjaGVkUmVzb3VyY2UqKTsKKwogICAgIHZpcnR1YWwgU3RyaW5nIGNoYXJzZXRBdHRyaWJ1dGVW
YWx1ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIFN0cmluZyB0eXBlQXR0cmlidXRlVmFsdWUo
KSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBTdHJpbmcgbGFuZ3VhZ2VBdHRyaWJ1dGVWYWx1ZSgp
IGNvbnN0ID0gMDsKQEAgLTExMyw5ICs4MiwxMiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9v
bCBhc3luY0F0dHJpYnV0ZVZhbHVlKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBkZWZl
ckF0dHJpYnV0ZVZhbHVlKCkgY29uc3QgPSAwOwogCi0gICAgZnJpZW5kIGNsYXNzIFNjcmlwdEVs
ZW1lbnREYXRhOwotCi0gICAgU2NyaXB0RWxlbWVudERhdGEgbV9kYXRhOworICAgIEVsZW1lbnQq
IG1fZWxlbWVudDsKKyAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+IG1fY2Fj
aGVkU2NyaXB0OworICAgIGJvb2wgbV9jcmVhdGVkQnlQYXJzZXI7IC8vIEhUTUw1OiAicGFyc2Vy
LWluc2VydGVkIgorICAgIGJvb2wgbV9yZXF1ZXN0ZWQ7CisgICAgYm9vbCBtX2lzRXZhbHVhdGVk
OyAvLyBIVE1MNTogImFscmVhZHkgc3RhcnRlZCIKKyAgICBib29sIG1fZmlyZWRMb2FkOwogfTsK
IAogU2NyaXB0RWxlbWVudCogdG9TY3JpcHRFbGVtZW50KEVsZW1lbnQqKTsK
</data>
<flag name="review"
          id="64626"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>