<?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>107074</bug_id>
          
          <creation_ts>2013-01-16 17:48:41 -0800</creation_ts>
          <short_desc>Remove NodeListsNodeData when it&apos;s no longer needed</short_desc>
          <delta_ts>2013-01-18 01:53:31 -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>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>106586</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>abarth</cc>
    
    <cc>andersca</cc>
    
    <cc>benjamin</cc>
    
    <cc>darin</cc>
    
    <cc>dpranke</cc>
    
    <cc>eric</cc>
    
    <cc>esprehn</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>808901</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-16 17:48:41 -0800</bug_when>
    <thetext>Don&apos;t keep NodeListsNodeData forever.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808926</commentid>
    <comment_count>1</comment_count>
      <attachid>183081</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-16 18:14:08 -0800</bug_when>
    <thetext>Created attachment 183081
Fixes the bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808928</commentid>
    <comment_count>2</comment_count>
      <attachid>183082</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-16 18:15:20 -0800</bug_when>
    <thetext>Created attachment 183082
Perf. test results (open Memory tab) and look at Malloc values</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808931</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-16 18:16:25 -0800</bug_when>
    <thetext>This simple patch reduces the memory usage of the micro benchmark by 3%. Given that NodeListsNodeData is much smaller than NodeRareData, removing NodeRareData may reduce the overall memory consumption by as much as 6%-8%.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>809386</commentid>
    <comment_count>4</comment_count>
      <attachid>183081</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-01-17 09:22:11 -0800</bug_when>
    <thetext>Comment on attachment 183081
Fixes the bug

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

Seems OK, although I have a few substantive thoughts below.

Somewhere there should be a comment about how we decided to delete these when no longer needed rather than keeping them around to optimize re-using them later. It’s the performance test, but something in the code should talk about how we made the tradeoff, if possible.

&gt; Source/WebCore/ChangeLog:10
&gt; +        If we detect that we have only one node lists left in the data structure,

Should be “node list” instead of “node lists”.

&gt; Source/WebCore/ChangeLog:20
&gt; +        (Node):

Bogus line should be removed. Or fix the script so it doesn’t add these.

&gt; Source/WebCore/ChangeLog:26
&gt; +        (NodeListsNodeData):

Bogus line should be removed. Or fix the script so it doesn’t add these.

&gt; Source/WebCore/dom/NodeRareData.h:74
&gt; +        if (!removeThisIfOnlyOneListIsLeft(list-&gt;ownerNode()))
&gt; +            m_childNodeList = 0;

I think I’d like these better if they used an early return statement instead of nesting the remaining code. The logic is “if I can do this just by self destructing, then do that and return, otherwise do it the normal way”.

&gt; Source/WebCore/dom/NodeRareData.h:225
&gt; +    bool removeThisIfOnlyOneListIsLeft(Node*);

This function is confusing for a few reasons. The idea of this function is that we call it just before removing a list, which is why it checks for one remaining list rather than zero. That was completely non-obvious to me and I had to read the patch over and over again to figure that out. So I think that either the function name or a comment needs to explain that.

The trickiness and danger of using this function without looking at the boolean result would be clearer if it used the word “delete” instead of “remove”. On the other hand, “delete” does make it sound like this just deletes the object rather than cleanly removing it from the node.

Maybe a better name is deleteThisIfAboutToRemoveLastList? Or maybe selfDestructIfAboutToRemoveLastList? Maybe you can come up with an even better name.

I’m also not sure the factoring is quite right. It seems awkward to call this class to remove a list, then have this class recover the node pointer so it can do work on the node’s rare data. It’s kind of a messy relationship between the node, rare data, and lists classes. I understand that this is an easy place to correctly make the change, so I see the attraction of doing it this way, but the need to recover the owner node pointer is a factoring danger sign.

&gt; Tools/Scripts/webkitpy/performance_tests/perftest.py:209
&gt;          # Following is for Parser/html-parser.html
&gt; -        re.compile(re.escape(&quot;&quot;&quot;CONSOLE MESSAGE: Blocked script execution in &apos;html-parser.html&apos; because the document&apos;s frame is sandboxed and the &apos;allow-scripts&apos; permission is not set.&quot;&quot;&quot;)),
&gt; +        re.compile(r&quot;CONSOLE MESSAGE: Blocked script execution in &apos;[A-Za-z0-9\-\.]+&apos; because the document&apos;s frame is sandboxed and the &apos;allow-scripts&apos; permission is not set.&quot;),

Comment now seems wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>809622</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-17 12:28:19 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 183081 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=183081&amp;action=review
&gt; 
&gt; Seems OK, although I have a few substantive thoughts below.
&gt; 
&gt; Somewhere there should be a comment about how we decided to delete these when no longer needed rather than keeping them around to optimize re-using them later. It’s the performance test, but something in the code should talk about how we made the tradeoff, if possible.

I forgot to mention this but this was the intended design back in the days although it never worked. I removed the code in http://trac.webkit.org/changeset/120367/trunk/Source/WebCore/dom/Node.cpp but the intent had always been to remove this data structure when we no longer need them. I&apos;ll clarify it in the change log.

&gt; &gt; Source/WebCore/ChangeLog:10
&gt; &gt; +        If we detect that we have only one node lists left in the data structure,
&gt; 
&gt; Should be “node list” instead of “node lists”.
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:20
&gt; &gt; +        (Node):
&gt; 
&gt; Bogus line should be removed. Or fix the script so it doesn’t add these.
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:26
&gt; &gt; +        (NodeListsNodeData):
&gt; 
&gt; Bogus line should be removed. Or fix the script so it doesn’t add these.

Fixed.

&gt; &gt; Source/WebCore/dom/NodeRareData.h:74
&gt; &gt; +        if (!removeThisIfOnlyOneListIsLeft(list-&gt;ownerNode()))
&gt; &gt; +            m_childNodeList = 0;
&gt; 
&gt; I think I’d like these better if they used an early return statement instead of nesting the remaining code. The logic is “if I can do this just by self destructing, then do that and return, otherwise do it the normal way”.
&gt; 
&gt; &gt; Source/WebCore/dom/NodeRareData.h:225
&gt; &gt; +    bool removeThisIfOnlyOneListIsLeft(Node*);
&gt; 
&gt; This function is confusing for a few reasons. The idea of this function is that we call it just before removing a list, which is why it checks for one remaining list rather than zero. That was completely non-obvious to me and I had to read the patch over and over again to figure that out. So I think that either the function name or a comment needs to explain that.

The original design was to let each function delete the last time, and then removeThisIfPossible to check whether all hash maps &amp; m_childNodes has been cleared or not That&apos;s definitely a much simpler design but incurs a runtime cost when we&apos;re deleting the last time.

&gt; The trickiness and danger of using this function without looking at the boolean result would be clearer if it used the word “delete” instead of “remove”. On the other hand, “delete” does make it sound like this just deletes the object rather than cleanly removing it from the node.
&gt; 
&gt; Maybe a better name is deleteThisIfAboutToRemoveLastList? Or maybe selfDestructIfAboutToRemoveLastList? Maybe you can come up with an even better name.

I&apos;m gonna go extra verbose and call it deleteThisAndUpdateNodeRareDataIfAboutToRemoveLastList.

&gt; I’m also not sure the factoring is quite right. It seems awkward to call this class to remove a list, then have this class recover the node pointer so it can do work on the node’s rare data. It’s kind of a messy relationship between the node, rare data, and lists classes. I understand that this is an easy place to correctly make the change, so I see the attraction of doing it this way, but the need to recover the owner node pointer is a factoring danger sign.

Yeah, it&apos;s quite messy. On the other hand, making each node list calling clearNodeLists looked fragile. It&apos;s also important that we assert the list we&apos;re removing to be in the node lists because we&apos;ve had quite few bugs where we had a mismatch in the past.

&gt; 
&gt; &gt; Tools/Scripts/webkitpy/performance_tests/perftest.py:209
&gt; &gt;          # Following is for Parser/html-parser.html
&gt; &gt; -        re.compile(re.escape(&quot;&quot;&quot;CONSOLE MESSAGE: Blocked script execution in &apos;html-parser.html&apos; because the document&apos;s frame is sandboxed and the &apos;allow-scripts&apos; permission is not set.&quot;&quot;&quot;)),
&gt; &gt; +        re.compile(r&quot;CONSOLE MESSAGE: Blocked script execution in &apos;[A-Za-z0-9\-\.]+&apos; because the document&apos;s frame is sandboxed and the &apos;allow-scripts&apos; permission is not set.&quot;),
&gt; 
&gt; Comment now seems wrong.

Oops, you&apos;re right. Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>809955</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-17 16:37:13 -0800</bug_when>
    <thetext>Committed r140070: &lt;http://trac.webkit.org/changeset/140070&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>810375</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-18 01:53:31 -0800</bug_when>
    <thetext>The bug 107239 tracks an unrelated crash.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183081</attachid>
            <date>2013-01-16 18:14:08 -0800</date>
            <delta_ts>2013-01-17 09:22:10 -0800</delta_ts>
            <desc>Fixes the bug</desc>
            <filename>bug-107074-20130116181115.patch</filename>
            <type>text/plain</type>
            <size>12332</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzk5NDIpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBACisyMDEzLTAxLTE2ICBS
eW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbW92ZSBOb2RlTGlz
dHNOb2RlRGF0YSB3aGVuIGl0J3Mgbm8gbG9uZ2VyIG5lZWRlZAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3MDc0CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgYSBtaWNybyBiZW5jaG1hcmsgdG8g
c2VlIHRoZSBiZW5lZml0IG9mIHJlbW92aW5nIE5vZGVMaXN0c05vZGVEYXRhLgorICAgICAgICBU
aGUgdGVzdCB0cmF2ZXJzZXMgYWxsIGVsZW1lbnRzIGluIHRoZSBodG1sNSBzcGVjaWZpY2F0aW9u
IHBhZ2UgYW5kIGFjY2Vzc2VzIGNoaWxkTm9kZXMuCisKKyAgICAgICAgRG9uJ3QgZW5hYmxlIHRo
aXMgdGVzdCBmb3Igbm93IHNpbmNlIGl0J3MgcmVhbGx5IGEgbWljcm8gYmVuY2htYXJrIHNwZWNp
ZmljYWxseQorICAgICAgICBkZXNpZ25lZCB0byB0ZXN0IHRoaXMgcGF0Y2guCisKKyAgICAgICAg
KiBET00vVHJhdmVyc2VDaGlsZE5vZGVzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIFNraXBwZWQ6
IERvbid0IGVuYWJsZSBuZXdseSBhZGRlZCB0ZXN0IGJ5IGRlZmF1bHQuCisgICAgICAgICogcmVz
b3VyY2VzL3Jlc3VsdHMtdGVtcGxhdGUuaHRtbDogQ29tcGFyZSBhZ2FpbnN0IHRoZSB1bnNjYWxl
ZCB1bml0IChlLmcuICJieXRlcyIpIGFzCisgICAgICAgIG9wcG9zZWQgdG8gc2NhbGVkIHVuaXRz
IHN1Y2ggYXMgIksgYnl0ZXMiLgorICAgICAgICAqIHJlc291cmNlcy9ydW5uZXIuanM6CisgICAg
ICAgICguc3RhcnQpOiBNb3ZlZCB0aGUgY29kZSB0byBjYWxsIGN1cnJlbnRUZXN0LnNldHVwIGZy
b20gbWVhc3VyZVJ1bnNQZXJTZWNvbmRPbmNlIHNvIHRoYXQKKyAgICAgICAgaXQnbGwgYmUgcmFu
IGZvciBhbGwgdGVzdCB0eXBlcywgbmFtZWx5IG9mIFBlcmZUZXN0UnVubmVyLm1lYXN1cmVUaW1l
LgorICAgICAgICAoLm1lYXN1cmVSdW5zUGVyU2Vjb25kT25jZSk6CisKIDIwMTMtMDEtMTYgIEFy
bmF1ZCBSZW5ldmllciAgPGEucmVuZXZpZXJAc2lzYS5zYW1zdW5nLmNvbT4KIAogICAgICAgICBp
bmNvbnNpc3RlbmN5IGluIGRyYXdJbWFnZSB3aXRoIHRhcmdldCByZWN0IG5lZ2F0aXZlIGRpbWVu
c2lvbnMuCkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL1NraXBwZWQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVy
Zm9ybWFuY2VUZXN0cy9Ta2lwcGVkCShyZXZpc2lvbiAxMzk5MDMpCisrKyBQZXJmb3JtYW5jZVRl
c3RzL1NraXBwZWQJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2IEBACisjIE1pY3JvIGJlbmNo
bWFya3Mgbm90IHdvcnRoIHJ1bm5pbmcgYXQgdGhlIG1vbWVudC4KK0RPTS9jaGlsZC1ub2RlLXRy
YXZlcnNhbC5odG1sCisKICMgTm90IGVuYWJsZWQgYnkgZGVmYXVsdCBvbiBzb21lIHBvcnRzCiBN
dXRhdGlvbgogCkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0RPTS9UcmF2ZXJzZUNoaWxkTm9kZXMu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0RPTS9UcmF2ZXJzZUNoaWxkTm9k
ZXMuaHRtbAkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRE9NL1RyYXZlcnNlQ2hp
bGROb2Rlcy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMyIEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3J1bm5lci5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0PgordmFyIHNwZWMgPSBQZXJmVGVzdFJ1bm5lci5sb2FkRmlsZSgi
Li4vUGFyc2VyL3Jlc291cmNlcy9odG1sNS5odG1sIik7Cit2YXIgaWZyYW1lOworCitQZXJmVGVz
dFJ1bm5lci5tZWFzdXJlVGltZSh7CisgICAgc2V0dXA6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
aWYgKGlmcmFtZSkKKyAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaWZyYW1l
KTsKKyAgICAgICAgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7Cisg
ICAgICAgIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOyAgLy8gUHJldmVudCBjcmVhdGlv
biBvZiB0aGUgcmVuZGVyaW5nIHRyZWUsIHNvIHdlIG9ubHkgdGVzdCBIVE1MIHBhcnNpbmcuCisg
ICAgICAgIGlmcmFtZS5zYW5kYm94ID0gJyc7ICAvLyBQcmV2ZW50IGV4dGVybmFsIHNjcmlwdCBs
b2FkcyB3aGljaCBjb3VsZCBjYXVzZSB3cml0ZSgpIHRvIHJldHVybiBiZWZvcmUgY29tcGxldGlu
ZyB0aGUgcGFyc2UuCisgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1lKTsK
KyAgICAgICAgaWZyYW1lLmNvbnRlbnREb2N1bWVudC5vcGVuKCk7CisgICAgICAgIGlmcmFtZS5j
b250ZW50RG9jdW1lbnQud3JpdGUoc3BlYyk7CisgICAgICAgIGlmcmFtZS5jb250ZW50RG9jdW1l
bnQuY2xvc2UoKTsKKyAgICB9LAorICAgIHJ1bjogZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBl
bGVtZW50cyA9IGlmcmFtZS5jb250ZW50RG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyon
KTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykgewor
ICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBlbGVtZW50c1tpXS5jaGlsZE5vZGVzLmxl
bmd0aDsgaisrKQorICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldLmNoaWxkTm9kZXNbal07Cisg
ICAgICAgIH0KKyAgICB9LAorICAgIGRvbmU6IGZ1bmN0aW9uICgpIHsgZG9jdW1lbnQuYm9keS5y
ZW1vdmVDaGlsZChpZnJhbWUpOyB9fSk7CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJ
bmRleDogUGVyZm9ybWFuY2VUZXN0cy9yZXNvdXJjZXMvcmVzdWx0cy10ZW1wbGF0ZS5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvcmVzb3VyY2VzL3Jlc3VsdHMtdGVtcGxhdGUu
aHRtbAkocmV2aXNpb24gMTM5OTAzKQorKysgUGVyZm9ybWFuY2VUZXN0cy9yZXNvdXJjZXMvcmVz
dWx0cy10ZW1wbGF0ZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0yNTUsNyArMjU1LDcgQEAgZnVu
Y3Rpb24gUGVyZlRlc3QobmFtZSkgewogICAgICAgICBjb21wdXRlU2NhbGluZ0ZhY3RvcklmTmVl
ZGVkKCk7CiAgICAgICAgIHJldHVybiBjYWNoZWRVbml0OwogICAgIH0KLSAgICB0aGlzLnNtYWxs
ZXJJc0JldHRlciA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMudW5pdCgpID09ICdtcycgfHwg
dGhpcy51bml0KCkgPT0gJ2J5dGVzJzsgfQorICAgIHRoaXMuc21hbGxlcklzQmV0dGVyID0gZnVu
Y3Rpb24gKCkgeyByZXR1cm4gdGVzdFJlc3VsdHNbMF0udW5pdCgpID09ICdtcycgfHwgdGVzdFJl
c3VsdHNbMF0udW5pdCgpID09ICdieXRlcyc7IH0KIH0KIAogdmFyIHBsb3RDb2xvciA9ICdyZ2Io
MjMwLDUwLDUwKSc7CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL3Jlc291cmNlcy9ydW5uZXIuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9yZXNvdXJjZXMvcnVubmVyLmpzCShyZXZp
c2lvbiAxMzk5MDMpCisrKyBQZXJmb3JtYW5jZVRlc3RzL3Jlc291cmNlcy9ydW5uZXIuanMJKHdv
cmtpbmcgY29weSkKQEAgLTE2Niw2ICsxNjYsOSBAQCBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsK
ICAgICAgICAgUGVyZlRlc3RSdW5uZXIuZ2MoKTsKICAgICAgICAgd2luZG93LnNldFRpbWVvdXQo
ZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBpZiAoY3Vy
cmVudFRlc3Quc2V0dXApCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXN0LnNldHVwKCk7
CisKICAgICAgICAgICAgICAgICB2YXIgbWVhc3VyZWRWYWx1ZSA9IHJ1bm5lcigpOwogICAgICAg
ICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7CiAgICAgICAgICAgICAgICAgbG9nRmF0YWxFcnJv
cigiR290IGFuIGV4Y2VwdGlvbiB3aGlsZSBydW5uaW5nIHRlc3QucnVuIHdpdGggbmFtZT0iICsg
ZXhjZXB0aW9uLm5hbWUgKyAiLCBtZXNzYWdlPSIgKyBleGNlcHRpb24ubWVzc2FnZSk7CkBAIC0y
NzUsOSArMjc4LDYgQEAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CiAgICAgICAgIHZhciB0b3Rh
bFRpbWUgPSAwOwogICAgICAgICB2YXIgbnVtYmVyT2ZSdW5zID0gMDsKIAotICAgICAgICBpZiAo
Y3VycmVudFRlc3Quc2V0dXApCi0gICAgICAgICAgICBjdXJyZW50VGVzdC5zZXR1cCgpOwotCiAg
ICAgICAgIHdoaWxlICh0b3RhbFRpbWUgPCB0aW1lVG9SdW4pIHsKICAgICAgICAgICAgIHRvdGFs
VGltZSArPSBjYWxsUnVuQW5kTWVhc3VyZVRpbWUoY2FsbHNQZXJJdGVyYXRpb24pOwogICAgICAg
ICAgICAgbnVtYmVyT2ZSdW5zICs9IGNhbGxzUGVySXRlcmF0aW9uOwpJbmRleDogU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwko
cmV2aXNpb24gMTM5OTQyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTMtMDEtMTYgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3ZlIE5vZGVMaXN0c05vZGVEYXRhIHdoZW4gaXQncyBu
byBsb25nZXIgbmVlZGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMDcwNzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBSZW1vdmUgTm9kZUxpc3RzTm9kZURhdGEgd2hlbiB0aGUgbGFzdCBub2RlIGxpc3Qg
aXMgcmVtb3ZlZCBmcm9tIGl0LgorCisgICAgICAgIElmIHdlIGRldGVjdCB0aGF0IHdlIGhhdmUg
b25seSBvbmUgbm9kZSBsaXN0cyBsZWZ0IGluIHRoZSBkYXRhIHN0cnVjdHVyZSwKKyAgICAgICAg
d2UnbGwgc2ltcGx5IGRlc3Ryb3kgdGhlIGVudGlyZSAidGhpcyIgb2JqZWN0IHRvIGZyZWUgdXAg
dGhlIG1lbW9yeSBzcGFjZS4KKworICAgICAgICBUaGlzIHJlZHVjZWQgdGhlIG1lbW9yeSB1c2Fn
ZSBvZiB0aGUgbWljcm8gYmVuY2htYXJrIGJ5IHJvdWdobHkgMyUuCisKKyAgICAgICAgUGVyZm9y
bWFuY2UgVGVzdHM6IERPTS9UcmF2ZXJzZUNoaWxkTm9kZXMuaHRtbAorCisgICAgICAgICogZG9t
L05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6Y2xlYXJOb2RlTGlzdHMpOiBBZGRl
ZC4KKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAgICAoTm9kZSk6CisgICAgICAgICogZG9t
L05vZGVSYXJlRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUxpc3RzTm9kZURhdGE6OnJl
bW92ZUNoaWxkTm9kZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUxpc3RzTm9kZURhdGE6
OnJlbW92ZUNhY2hlV2l0aEF0b21pY05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUxpc3Rz
Tm9kZURhdGE6OnJlbW92ZUNhY2hlV2l0aE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUxp
c3RzTm9kZURhdGE6OnJlbW92ZUNhY2hlV2l0aFF1YWxpZmllZE5hbWUpOgorICAgICAgICAoTm9k
ZUxpc3RzTm9kZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUxpc3RzTm9kZURhdGE6OnJl
bW92ZVRoaXNJZk9ubHlPbmVMaXN0SXNMZWZ0KTogQWRkZWQuIFJlbW92ZXMKKyAgICAgICAgInRo
aXMiIE5vZGVMaXN0c05vZGVEYXRhIGlmIHRoZXJlIGlzIG9ubHkgb25lIG5vZGUgbGlzdCBsZWZ0
LgorCiAyMDEzLTAxLTE2ICBNT1JJVEEgSGFqaW1lICA8bW9ycml0YUBnb29nbGUuY29tPgogCiAg
ICAgICAgIFdlYkNvcmU6OlNjcmlwdFJ1bm5lcjo6dGltZXJGaXJlZCgpIGlzIHJlcG9ydGVkIHRv
IGNyYXNoLgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMTM5OTAzKQorKysgU291cmNl
L1dlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05ODEsNiArOTgxLDExIEBA
IE5vZGVMaXN0c05vZGVEYXRhKiBOb2RlOjpub2RlTGlzdHMoKQogICAgIHJldHVybiBoYXNSYXJl
RGF0YSgpID8gcmFyZURhdGEoKS0+bm9kZUxpc3RzKCkgOiAwOwogfQogCit2b2lkIE5vZGU6OmNs
ZWFyTm9kZUxpc3RzKCkKK3sKKyAgICByYXJlRGF0YSgpLT5jbGVhck5vZGVMaXN0cygpOworfQor
CiB2b2lkIE5vZGU6OmNoZWNrU2V0UHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICAvLyBQZXJmb3JtIGVycm9yIGNoZWNraW5nIGFzIHJl
cXVpcmVkIGJ5IHNwZWMgZm9yIHNldHRpbmcgTm9kZS5wcmVmaXguIFVzZWQgYnkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L05vZGUuaAkocmV2aXNpb24gMTM5OTAzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNTgyLDYgKzU4Miw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgaW52
YWxpZGF0ZU5vZGVMaXN0Q2FjaGVzSW5BbmNlc3RvcnMoY29uc3QgUXVhbGlmaWVkTmFtZSogYXR0
ck5hbWUgPSAwLCBFbGVtZW50KiBhdHRyaWJ1dGVPd25lckVsZW1lbnQgPSAwKTsKICAgICBOb2Rl
TGlzdHNOb2RlRGF0YSogbm9kZUxpc3RzKCk7CisgICAgdm9pZCBjbGVhck5vZGVMaXN0cygpOwog
CiAgICAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gZ2V0RWxlbWVudHNCeVRhZ05hbWUoY29uc3QgQXRv
bWljU3RyaW5nJik7CiAgICAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gZ2V0RWxlbWVudHNCeVRhZ05h
bWVOUyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgQXRvbWljU3RyaW5n
JiBsb2NhbE5hbWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAkocmV2aXNpb24g
MTM5OTAzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCSh3b3JraW5nIGNv
cHkpCkBAIC02OSw4ICs2OSw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVtb3ZlQ2hpbGROb2Rl
TGlzdChDaGlsZE5vZGVMaXN0KiBsaXN0KQogICAgIHsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChs
aXN0LCBtX2NoaWxkTm9kZUxpc3QgPSBsaXN0KTsKLSAgICAgICAgbV9jaGlsZE5vZGVMaXN0ID0g
MDsKKyAgICAgICAgQVNTRVJUKG1fY2hpbGROb2RlTGlzdCA9IGxpc3QpOworICAgICAgICBpZiAo
IXJlbW92ZVRoaXNJZk9ubHlPbmVMaXN0SXNMZWZ0KGxpc3QtPm93bmVyTm9kZSgpKSkKKyAgICAg
ICAgICAgIG1fY2hpbGROb2RlTGlzdCA9IDA7CiAgICAgfQogCiAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFN0cmluZ1R5cGU+CkBAIC0xNDQsMjEgKzE0NSwyNCBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IHJlbW92ZUNhY2hlV2l0aEF0b21pY05hbWUoTGl2ZU5vZGVMaXN0QmFzZSogbGlzdCwgQ29sbGVj
dGlvblR5cGUgY29sbGVjdGlvblR5cGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSA9IHN0YXJB
dG9tKQogICAgIHsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChsaXN0LCBsaXN0ID09IG1fYXRvbWlj
TmFtZUNhY2hlcy5nZXQobmFtZWROb2RlTGlzdEtleShjb2xsZWN0aW9uVHlwZSwgbmFtZSkpKTsK
LSAgICAgICAgbV9hdG9taWNOYW1lQ2FjaGVzLnJlbW92ZShuYW1lZE5vZGVMaXN0S2V5KGNvbGxl
Y3Rpb25UeXBlLCBuYW1lKSk7CisgICAgICAgIEFTU0VSVChsaXN0ID09IG1fYXRvbWljTmFtZUNh
Y2hlcy5nZXQobmFtZWROb2RlTGlzdEtleShjb2xsZWN0aW9uVHlwZSwgbmFtZSkpKTsKKyAgICAg
ICAgaWYgKCFyZW1vdmVUaGlzSWZPbmx5T25lTGlzdElzTGVmdChsaXN0LT5vd25lck5vZGUoKSkp
CisgICAgICAgICAgICBtX2F0b21pY05hbWVDYWNoZXMucmVtb3ZlKG5hbWVkTm9kZUxpc3RLZXko
Y29sbGVjdGlvblR5cGUsIG5hbWUpKTsKICAgICB9CiAKICAgICB2b2lkIHJlbW92ZUNhY2hlV2l0
aE5hbWUoTGl2ZU5vZGVMaXN0QmFzZSogbGlzdCwgQ29sbGVjdGlvblR5cGUgY29sbGVjdGlvblR5
cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKICAgICB7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQobGlz
dCwgbGlzdCA9PSBtX25hbWVDYWNoZXMuZ2V0KG5hbWVkTm9kZUxpc3RLZXkoY29sbGVjdGlvblR5
cGUsIG5hbWUpKSk7Ci0gICAgICAgIG1fbmFtZUNhY2hlcy5yZW1vdmUobmFtZWROb2RlTGlzdEtl
eShjb2xsZWN0aW9uVHlwZSwgbmFtZSkpOworICAgICAgICBBU1NFUlQobGlzdCA9PSBtX25hbWVD
YWNoZXMuZ2V0KG5hbWVkTm9kZUxpc3RLZXkoY29sbGVjdGlvblR5cGUsIG5hbWUpKSk7CisgICAg
ICAgIGlmICghcmVtb3ZlVGhpc0lmT25seU9uZUxpc3RJc0xlZnQobGlzdC0+b3duZXJOb2RlKCkp
KQorICAgICAgICAgICAgbV9uYW1lQ2FjaGVzLnJlbW92ZShuYW1lZE5vZGVMaXN0S2V5KGNvbGxl
Y3Rpb25UeXBlLCBuYW1lKSk7CiAgICAgfQogCiAgICAgdm9pZCByZW1vdmVDYWNoZVdpdGhRdWFs
aWZpZWROYW1lKExpdmVOb2RlTGlzdCogbGlzdCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3Bh
Y2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKQogICAgIHsKICAgICAgICAgUXVh
bGlmaWVkTmFtZSBuYW1lKG51bGxBdG9tLCBsb2NhbE5hbWUsIG5hbWVzcGFjZVVSSSk7Ci0gICAg
ICAgIEFTU0VSVF9VTlVTRUQobGlzdCwgbGlzdCA9PSBtX3RhZ05vZGVMaXN0Q2FjaGVOUy5nZXQo
bmFtZSkpOwotICAgICAgICBtX3RhZ05vZGVMaXN0Q2FjaGVOUy5yZW1vdmUobmFtZSk7CisgICAg
ICAgIEFTU0VSVChsaXN0ID09IG1fdGFnTm9kZUxpc3RDYWNoZU5TLmdldChuYW1lKSk7CisgICAg
ICAgIGlmICghcmVtb3ZlVGhpc0lmT25seU9uZUxpc3RJc0xlZnQobGlzdC0+b3duZXJOb2RlKCkp
KQorICAgICAgICAgICAgbV90YWdOb2RlTGlzdENhY2hlTlMucmVtb3ZlKG5hbWUpOwogICAgIH0K
IAogICAgIHN0YXRpYyBQYXNzT3duUHRyPE5vZGVMaXN0c05vZGVEYXRhPiBjcmVhdGUoKQpAQCAt
MjE4LDYgKzIyMiw4IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBzdGQ6OnBhaXI8dW5zaWdu
ZWQgY2hhciwgU3RyaW5nPih0eXBlLCBuYW1lKTsKICAgICB9CiAKKyAgICBib29sIHJlbW92ZVRo
aXNJZk9ubHlPbmVMaXN0SXNMZWZ0KE5vZGUqKTsKKwogICAgIC8vIEZJWE1FOiBtX2NoaWxkTm9k
ZUxpc3Qgc2hvdWxkIGJlIG1lcmdlZCBpbnRvIG1fYXRvbWljTmFtZUNhY2hlcyBvciBhdCBsZWFz
dCBiZSBzaGFyZWQgd2l0aCBIVE1MQ29sbGVjdGlvbiByZXR1cm5lZCBieSBFbGVtZW50OjpjaGls
ZHJlbgogICAgIC8vIGJ1dCBpdCdzIHRyaWNreSBiZWNhdXNlIGludmFsaWRhdGVDYWNoZXMgc2hv
dWxkbid0IGludmFsaWRhdGUgdGhpcyBjYWNoZSBhbmQgYWRvcHRUcmVlU2NvcGUgc2hvdWxkbid0
IGNhbGwgcmVnaXN0ZXJOb2RlTGlzdCBvciB1bnJlZ2lzdGVyTm9kZUxpc3QuCiAgICAgQ2hpbGRO
b2RlTGlzdCogbV9jaGlsZE5vZGVMaXN0OwpAQCAtMzIyLDYgKzMyOCwxNiBAQCBwcml2YXRlOgog
I2VuZGlmCiB9OwogCitpbmxpbmUgYm9vbCBOb2RlTGlzdHNOb2RlRGF0YTo6cmVtb3ZlVGhpc0lm
T25seU9uZUxpc3RJc0xlZnQoTm9kZSogb3duZXJOb2RlKQoreworICAgIEFTU0VSVChvd25lck5v
ZGUpOworICAgIEFTU0VSVChvd25lck5vZGUtPm5vZGVMaXN0cygpID09IHRoaXMpOworICAgIGlm
ICgobV9jaGlsZE5vZGVMaXN0ID8gMSA6IDApICsgbV9hdG9taWNOYW1lQ2FjaGVzLnNpemUoKSAr
IG1fbmFtZUNhY2hlcy5zaXplKCkgKyBtX3RhZ05vZGVMaXN0Q2FjaGVOUy5zaXplKCkgIT0gMSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG93bmVyTm9kZS0+Y2xlYXJOb2RlTGlzdHMoKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYg
Ly8gTm9kZVJhcmVEYXRhX2gKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzOTk0MikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEzLTAxLTE2ICBSeW9zdWtlIE5pd2EgIDxy
bml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbW92ZSBOb2RlTGlzdHNOb2RlRGF0YSB3aGVu
IGl0J3Mgbm8gbG9uZ2VyIG5lZWRlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTA3MDc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgR2VuZXJhbGl6ZSB0aGUgd2FybmluZyBhIGxpdHRsZSBzbyB0aGF0IGl0
J3MgYWxzbyBpZ25vcmVkIG9uIFBlcmZvcm1hbmNlVGVzdHMvRE9NL1RyYXZlcnNlQ2hpbGROb2Rl
cy5odG1sCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3Bl
cmZ0ZXN0LnB5OgorICAgICAgICAoUGVyZlRlc3QpOgorCiAyMDEzLTAxLTE2ICBBbGFuIEN1dHRl
ciAgPGFsYW5jdXR0ZXJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIHN0YXJ0LXF1ZXVlLnNoIGRv
ZXMgbm90IHBhc3MgcmVtYWluaW5nIHBhcmFtZXRlcnMgY29ycmVjdGx5CkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3BlcmZvcm1hbmNlX3Rlc3RzL3BlcmZ0ZXN0LnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2VfdGVzdHMvcGVyZnRlc3QucHkJ
KHJldmlzaW9uIDEzOTkwMykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcGVyZm9ybWFuY2Vf
dGVzdHMvcGVyZnRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTIwNiw3ICsyMDYsNyBAQCBjbGFz
cyBQZXJmVGVzdChvYmplY3QpOgogICAgICAgICAjIEZvbGxvd2luZyBpcyBmb3IgaHRtbDUuaHRt
bAogICAgICAgICByZS5jb21waWxlKHJlLmVzY2FwZSgiIiJCbG9ja2VkIGFjY2VzcyB0byBleHRl
cm5hbCBVUkwgaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29y
ay8iIiIpKSwKICAgICAgICAgIyBGb2xsb3dpbmcgaXMgZm9yIFBhcnNlci9odG1sLXBhcnNlci5o
dG1sCi0gICAgICAgIHJlLmNvbXBpbGUocmUuZXNjYXBlKCIiIkNPTlNPTEUgTUVTU0FHRTogQmxv
Y2tlZCBzY3JpcHQgZXhlY3V0aW9uIGluICdodG1sLXBhcnNlci5odG1sJyBiZWNhdXNlIHRoZSBk
b2N1bWVudCdzIGZyYW1lIGlzIHNhbmRib3hlZCBhbmQgdGhlICdhbGxvdy1zY3JpcHRzJyBwZXJt
aXNzaW9uIGlzIG5vdCBzZXQuIiIiKSksCisgICAgICAgIHJlLmNvbXBpbGUociJDT05TT0xFIE1F
U1NBR0U6IEJsb2NrZWQgc2NyaXB0IGV4ZWN1dGlvbiBpbiAnW0EtWmEtejAtOVwtXC5dKycgYmVj
YXVzZSB0aGUgZG9jdW1lbnQncyBmcmFtZSBpcyBzYW5kYm94ZWQgYW5kIHRoZSAnYWxsb3ctc2Ny
aXB0cycgcGVybWlzc2lvbiBpcyBub3Qgc2V0LiIpLAogICAgICAgICAjIERyb21hZW8gcmVwb3J0
cyB2YWx1ZXMgZm9yIHN1YnRlc3RzLiBJZ25vcmUgdGhlbSBmb3Igbm93LgogICAgICAgICByZS5j
b21waWxlKHInKD9QPG5hbWU+LispOiBcWyg/UDx2YWx1ZXM+KFxkKyguXGQrKT8sXHMrKSpcZCso
LlxkKyk/KVxdJyksCiAgICAgXQo=
</data>
<flag name="review"
          id="201334"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>183082</attachid>
            <date>2013-01-16 18:15:20 -0800</date>
            <delta_ts>2013-01-16 18:15:20 -0800</delta_ts>
            <desc>Perf. test results (open Memory tab) and look at Malloc values</desc>
            <filename>PerformanceTestsResults.html</filename>
            <type>text/html</type>
            <size>27730</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sPgo8aGVhZD4KPHRpdGxlPldlYktpdCBQZXJmb3JtYW5jZSBU
ZXN0IFJlc3VsdHM8L3RpdGxlPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoKc2VjdGlvbiB7CiAg
ICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgIHBhZGRpbmc6IDEwcHg7CiAgICBwb3NpdGlvbjogcmVs
YXRpdmU7Cn0KCi50aW1lLXBsb3RzIHsKICAgIHBhZGRpbmctbGVmdDogMjVweDsKfQoKLnRpbWUt
cGxvdHMgPiBkaXYgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgd2lkdGg6IDkwcHg7
CiAgICBoZWlnaHQ6IDQwcHg7CiAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7Cn0KCnNlY3Rpb24gaDEg
ewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgZm9udC1zaXplOiAxZW07Cn0KCnNlY3Rpb24g
LnRvb2x0aXAgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdGV4dC1hbGlnbjogY2VudGVy
OwogICAgYmFja2dyb3VuZDogI2ZmY2M2NjsKICAgIGJvcmRlci1yYWRpdXM6IDVweDsKICAgIHBh
ZGRpbmc6IDBweCA1cHg7Cn0KCmJvZHkgewogICAgcGFkZGluZzogMHB4OwogICAgbWFyZ2luOiAw
cHg7CiAgICBmb250LWZhbWlseTogc2Fucy1zZXJpZjsKfQoKdGFibGUgewogICAgYmFja2dyb3Vu
ZDogd2hpdGU7CiAgICB3aWR0aDogMTAwJTsKfQoKdGFibGUsIHRkLCB0aCB7CiAgICBib3JkZXIt
Y29sbGFwc2U6IGNvbGxhcHNlOwogICAgcGFkZGluZzogNXB4Owp9Cgp0ci5ldmVuIHsKICAgIGJh
Y2tncm91bmQ6ICNmNmY2ZjY7Cn0KCnRhYmxlIHRkIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsK
ICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7Cn0KCnRoLCB0ZCB7CiAgICBjdXJzb3I6IHBvaW50
ZXI7CiAgICBjdXJzb3I6IGhhbmQ7Cn0KCnRoIHsKICAgIGJhY2tncm91bmQ6ICNlNmVlZWU7CiAg
ICBiYWNrZ3JvdW5kOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90
dG9tLCBmcm9tKHJnYigyNDQsIDI0NCwgMjQ0KSksIHRvKHJnYigyMTcsIDIxNywgMjE3KSkpOwog
ICAgYm9yZGVyOiAxcHggc29saWQgI2NjYzsKfQoKdGg6YWZ0ZXIgewogICAgY29udGVudDogJyBc
MjVCOCc7Cn0KCnRoLmhlYWRlclNvcnRVcDphZnRlciB7CiAgICBjb250ZW50OiAnIFwyNUJFJzsK
fQoKdGguaGVhZGVyU29ydERvd246YWZ0ZXIgewogICAgY29udGVudDogJyBcMjVCNCc7Cn0KCnRk
LmNvbXBhcmlzb24sIHRkLnJlc3VsdCB7CiAgICB0ZXh0LWFsaWduOiByaWdodDsKfQoKdGQuYmV0
dGVyIHsKICAgIGNvbG9yOiAjNmM2Owp9Cgp0ZC53b3JzZSB7CiAgICBjb2xvcjogI2M2NjsKfQoK
dGQubWlzc2luZyB7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCi5jaGVja2JveCB7CiAgICBk
aXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICBiYWNrZ3JvdW5kOiAjZWVlOwogICAgYmFja2dyb3Vu
ZDogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgYm90dG9tLCBsZWZ0IHRvcCwgZnJvbShy
Z2IoMjIwLCAyMjAsIDIyMCkpLCB0byhyZ2IoMjAwLCAyMDAsIDIwMCkpKTsKICAgIGJvcmRlcjog
aW5zZXQgMXB4ICNkZGQ7CiAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgICBtYXJnaW46IDEwcHg7
CiAgICBmb250LXNpemU6IHNtYWxsOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgY3Vyc29yOiBo
YW5kOwogICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgIGZvbnQtd2VpZ2h0OiBib2xk
Owp9CgouY2hlY2tib3ggc3BhbiB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICBsaW5l
LWhlaWdodDogMTAwJTsKICAgIHBhZGRpbmc6IDVweCA4cHg7CiAgICBib3JkZXI6IG91dHNldCAx
cHggdHJhbnNwYXJlbnQ7Cn0KCi5jaGVja2JveCAuY2hlY2tlZCB7CiAgICBiYWNrZ3JvdW5kOiAj
ZTZlZWVlOwogICAgYmFja2dyb3VuZDogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9w
LCBsZWZ0IGJvdHRvbSwgZnJvbShyZ2IoMjU1LCAyNTUsIDI1NSkpLCB0byhyZ2IoMjM1LCAyMzUs
IDIzNSkpKTsKICAgIGJvcmRlcjogb3V0c2V0IDFweCAjZWVlOwogICAgYm9yZGVyLXJhZGl1czog
NXB4Owp9Cgo8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5Pgo8ZGl2IHN0eWxlPSJwYWRkaW5nOiAwIDEw
cHg7Ij4KUmVzdWx0IDxzcGFuIGlkPSJ0aW1lLW1lbW9yeSIgY2xhc3M9ImNoZWNrYm94Ij48c3Bh
biBjbGFzcz0iY2hlY2tlZCI+VGltZTwvc3Bhbj48c3Bhbj5NZW1vcnk8L3NwYW4+PC9zcGFuPgpS
ZWZlcmVuY2UgPHNwYW4gaWQ9InJlZmVyZW5jZSIgY2xhc3M9ImNoZWNrYm94Ij48L3NwYW4+Cjwv
ZGl2Pgo8dGFibGUgaWQ9ImNvbnRhaW5lciI+PC90YWJsZT4KPHNjcmlwdD4KCihmdW5jdGlvbiAo
KSB7CiAgICB2YXIgalF1ZXJ5ID0gWydQZXJmb3JtYW5jZVRlc3RzL0Ryb21hZW8vcmVzb3VyY2Vz
L2Ryb21hZW8vd2ViL2xpYi9qcXVlcnktMS42LjQuanMnXTsKICAgIHZhciBwbHVnaW5zID0gWydQ
ZXJmb3JtYW5jZVRlc3RzL3Jlc291cmNlcy9qcXVlcnkuZmxvdC5taW4uanMnLCAnUGVyZm9ybWFu
Y2VUZXN0cy9yZXNvdXJjZXMvanF1ZXJ5LnRhYmxlc29ydGVyLm1pbi5qcyddOwogICAgdmFyIGxv
Y2FsUGF0aCA9ICcvVm9sdW1lcy9EYXRhL3dlYmtpdDMnOwogICAgdmFyIHJlbW90ZVBhdGggPSAn
aHR0cHM6Ly9zdm4ud2Via2l0Lm9yZy9yZXBvc2l0b3J5L3dlYmtpdC90cnVuayc7CiAgICB2YXIg
bnVtYmVyT2ZGYWlsdXJlcyA9IDA7CiAgICB2YXIgc3RhcnRlZExvYWRpbmdQbHVnaW5zID0gZmFs
c2U7CiAgICB2YXIgbnVtYmVyT2ZMb2FkZWRQbHVnaW5zID0gMDsKCiAgICBmdW5jdGlvbiBsb2Fk
U2NyaXB0KHNyYywgbG9hZGVkLCBmYWlsZWQpIHsKICAgICAgICB2YXIgc2NyaXB0ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CiAgICAgICAgc2NyaXB0LmFzeW5jID0gdHJ1ZTsK
ICAgICAgICBzY3JpcHQuc3JjID0gc3JjOwogICAgICAgIHNjcmlwdC5vbmxvYWQgPSBsb2FkZWQ7
CiAgICAgICAgaWYgKGZhaWxlZCkKICAgICAgICAgICAgc2NyaXB0Lm9uZXJyb3IgPSBmYWlsZWQ7
CiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JpcHQpOwogICAgfQoKICAgIGZ1
bmN0aW9uIGxvYWRQbHVnaW5zKHRydW5rUGF0aCkgewogICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgcGx1Z2lucy5sZW5ndGg7IGkrKykKICAgICAgICAgICAgbG9hZFNjcmlwdCh0cnVua1BhdGgg
KyAnLycgKyBwbHVnaW5zW2ldLCBsb2FkZWRQbHVnaW4sIGNyZWF0ZUZhaWxlZFRvTG9hZFBsdWdp
bihwbHVnaW5zW2ldKSk7CiAgICB9CgogICAgZnVuY3Rpb24gbG9hZGVkUGx1Z2luKCkgewogICAg
ICAgIG51bWJlck9mTG9hZGVkUGx1Z2lucysrOwogICAgICAgIGlmIChudW1iZXJPZkxvYWRlZFBs
dWdpbnMgPT0gcGx1Z2lucy5sZW5ndGgpCiAgICAgICAgICAgIHNldFRpbWVvdXQoaW5pdCwgMCk7
ICAgICAgICAgICAgCiAgICB9CgogICAgZnVuY3Rpb24gY3JlYXRlRmFpbGVkVG9Mb2FkUGx1Z2lu
KHBsdWdpbikgewogICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IGFsZXJ0KCJGYWlsZWQgdG8g
bG9hZCAiICsgcGx1Z2luKTsgfQogICAgfQoKICAgIGZ1bmN0aW9uIGNyZWF0ZUxvYWRlZEpRdWVy
eSh0cnVua1BhdGgpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyBsb2FkUGx1Z2lucyh0
cnVua1BhdGgpOyB9CiAgICB9CgogICAgbG9hZFNjcmlwdChsb2NhbFBhdGggKyAnLycgKyBqUXVl
cnksCiAgICAgICAgY3JlYXRlTG9hZGVkSlF1ZXJ5KGxvY2FsUGF0aCksCiAgICAgICAgZnVuY3Rp
b24gKCkgewogICAgICAgICAgICBsb2FkU2NyaXB0KHJlbW90ZVBhdGggKyAnLycgKyBqUXVlcnks
CiAgICAgICAgICAgICAgICBjcmVhdGVMb2FkZWRKUXVlcnkocmVtb3RlUGF0aCksCiAgICAgICAg
ICAgICAgICBmdW5jdGlvbiAoKSB7IGFsZXJ0KCJGYWlsZWQgdG8gbG9hZCBqUXVlcnkuIik7IH0p
OwogICAgICAgIH0pOwp9KSgpOwoKZnVuY3Rpb24gVGVzdFJlc3VsdChhc3NvY2lhdGVkVGVzdCwg
cmVzdWx0LCBhc3NvY2lhdGVkUnVuKSB7CiAgICB0aGlzLnVuaXQgPSBmdW5jdGlvbiAoKSB7IHJl
dHVybiByZXN1bHQudW5pdDsgfQogICAgdGhpcy50ZXN0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4g
YXNzb2NpYXRlZFRlc3Q7IH0KICAgIHRoaXMudmFsdWVzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4g
cmVzdWx0LnZhbHVlcyA/IHJlc3VsdC52YWx1ZXMubWFwKGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1
cm4gYXNzb2NpYXRlZFRlc3Quc2NhbGluZ0ZhY3RvcigpICogdmFsdWU7IH0pIDogdW5kZWZpbmVk
OyB9CiAgICB0aGlzLnVuc2NhbGVkTWVhbiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlc3VsdC5h
dmc7IH0KICAgIHRoaXMubWVhbiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFzc29jaWF0ZWRUZXN0
LnNjYWxpbmdGYWN0b3IoKSAqIHJlc3VsdC5hdmc7IH0KICAgIHRoaXMubWluID0gZnVuY3Rpb24g
KCkgeyByZXR1cm4gYXNzb2NpYXRlZFRlc3Quc2NhbGluZ0ZhY3RvcigpICogcmVzdWx0Lm1pbjsg
fQogICAgdGhpcy5tYXggPSBmdW5jdGlvbiAoKSB7IHJldHVybiBhc3NvY2lhdGVkVGVzdC5zY2Fs
aW5nRmFjdG9yKCkgKiByZXN1bHQubWF4OyB9CiAgICB0aGlzLnN0ZGV2ID0gZnVuY3Rpb24gKCkg
eyByZXR1cm4gYXNzb2NpYXRlZFRlc3Quc2NhbGluZ0ZhY3RvcigpICogcmVzdWx0LnN0ZGV2OyB9
CiAgICB0aGlzLnN0ZGV2UmF0aW8gPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZXN1bHQuc3RkZXYg
LyByZXN1bHQuYXZnOyB9CiAgICB0aGlzLnBlcmNlbnREaWZmZXJlbmNlID0gZnVuY3Rpb24ob3Ro
ZXIpIHsgcmV0dXJuIChvdGhlci5tZWFuKCkgLSB0aGlzLm1lYW4oKSkgLyB0aGlzLm1lYW4oKTsg
fQogICAgdGhpcy5pc1N0YXRpc3RpY2FsbHlTaWduaWZpY2FudCA9IGZ1bmN0aW9uIChvdGhlcikg
ewogICAgICAgIHZhciBkaWZmID0gTWF0aC5hYnMob3RoZXIubWVhbigpIC0gdGhpcy5tZWFuKCkp
OwogICAgICAgIHJldHVybiBkaWZmID4gdGhpcy5zdGRldigpICYmIGRpZmYgPiBvdGhlci5zdGRl
digpOwogICAgfQogICAgdGhpcy5ydW4gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBhc3NvY2lhdGVk
UnVuOyB9Cn0KCmZ1bmN0aW9uIFRlc3RSdW4oZW50cnkpIHsKICAgIHRoaXMuZGVzY3JpcHRpb24g
PSBmdW5jdGlvbiAoKSB7IHJldHVybiBlbnRyeVsnZGVzY3JpcHRpb24nXTsgfQogICAgdGhpcy53
ZWJraXRSZXZpc2lvbiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVudHJ5Wyd3ZWJraXQtcmV2aXNp
b24nXTsgfQogICAgdGhpcy5sYWJlbCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgbGFiZWwg
PSAncicgKyB0aGlzLndlYmtpdFJldmlzaW9uKCk7CiAgICAgICAgaWYgKHRoaXMuZGVzY3JpcHRp
b24oKSkKICAgICAgICAgICAgbGFiZWwgKz0gJyAmZGFzaDsgJyArIHRoaXMuZGVzY3JpcHRpb24o
KTsKICAgICAgICByZXR1cm4gbGFiZWw7CiAgICB9Cn0KCmZ1bmN0aW9uIFBlcmZUZXN0KG5hbWUp
IHsKICAgIHZhciB0ZXN0UmVzdWx0cyA9IFtdOwogICAgdmFyIGNhY2hlZFVuaXQgPSBudWxsOwog
ICAgdmFyIGNhY2hlZFNjYWxpbmdGYWN0b3IgPSBudWxsOwoKICAgIC8vIFdlIGNhbid0IGRvIHRo
aXMgaW4gVGVzdFJlc3VsdCBiZWNhdXNlIGFsbCByZXN1bHRzIGZvciBlYWNoIHRlc3QgbmVlZCB0
byBzaGFyZSB0aGUgc2FtZSB1bml0IGFuZCB0aGUgc2FtZSBzY2FsaW5nIGZhY3Rvci4KICAgIGZ1
bmN0aW9uIGNvbXB1dGVTY2FsaW5nRmFjdG9ySWZOZWVkZWQoKSB7CiAgICAgICAgLy8gRklYTUU6
IFdlIHNob3VsZG4ndCBiZSBhZGp1c3RpbmcgdW5pdHMgb24gZXZlcnkgdGVzdCByZXN1bHQuCiAg
ICAgICAgLy8gV2UgY2FuIG9ubHkgZG8gdGhpcyBvbiB0aGUgZmlyc3QgdGVzdC4KICAgICAgICBp
ZiAoIXRlc3RSZXN1bHRzLmxlbmd0aCB8fCBjYWNoZWRVbml0KQogICAgICAgICAgICByZXR1cm47
CgogICAgICAgIHZhciB1bml0ID0gdGVzdFJlc3VsdHNbMF0udW5pdCgpOyAvLyBGSVhNRTogV2Ug
c2hvdWxkIHZlcmlmeSB0aGF0IGFsbCByZXN1bHRzIGhhdmUgdGhlIHNhbWUgdW5pdC4KICAgICAg
ICB2YXIgbWVhbiA9IHRlc3RSZXN1bHRzWzBdLnVuc2NhbGVkTWVhbigpOyAvLyBGSVhNRTogV2Ug
c2hvdWxkIGxvb2sgYXQgYWxsIHZhbHVlcy4KICAgICAgICB2YXIga2lsbyA9IHVuaXQgPT0gJ2J5
dGVzJyA/IDEwMjQgOiAxMDAwOwogICAgICAgIGlmIChtZWFuID4gMTAgKiBraWxvICoga2lsbyAm
JiB1bml0ICE9ICdtcycpIHsKICAgICAgICAgICAgY2FjaGVkU2NhbGluZ0ZhY3RvciA9IDEgLyBr
aWxvIC8ga2lsbzsKICAgICAgICAgICAgY2FjaGVkVW5pdCA9ICdNICcgKyB1bml0OwogICAgICAg
IH0gZWxzZSBpZiAobWVhbiA+IDEwICoga2lsbykgewogICAgICAgICAgICBjYWNoZWRTY2FsaW5n
RmFjdG9yID0gMSAvIGtpbG87CiAgICAgICAgICAgIGNhY2hlZFVuaXQgPSB1bml0ID09ICdtcycg
PyAncycgOiAoJ0sgJyArIHVuaXQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNhY2hl
ZFNjYWxpbmdGYWN0b3IgPSAxOwogICAgICAgICAgICBjYWNoZWRVbml0ID0gdW5pdDsKICAgICAg
ICB9CiAgICB9CgogICAgdGhpcy5uYW1lID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmFtZTsgfQog
ICAgdGhpcy5pc01lbW9yeVRlc3QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBuYW1lLmluZGV4T2Yo
JzonKSA+PSAwOyB9CiAgICB0aGlzLmFkZFJlc3VsdCA9IGZ1bmN0aW9uIChuZXdSZXN1bHQpIHsK
ICAgICAgICB0ZXN0UmVzdWx0cy5wdXNoKG5ld1Jlc3VsdCk7CiAgICAgICAgY2FjaGVkVW5pdCA9
IG51bGw7CiAgICAgICAgY2FjaGVkU2NhbGluZ0ZhY3RvciA9IG51bGw7CiAgICB9CiAgICB0aGlz
LnJlc3VsdHMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0ZXN0UmVzdWx0czsgfQogICAgdGhpcy5z
Y2FsaW5nRmFjdG9yID0gZnVuY3Rpb24oKSB7CiAgICAgICAgY29tcHV0ZVNjYWxpbmdGYWN0b3JJ
Zk5lZWRlZCgpOwogICAgICAgIHJldHVybiBjYWNoZWRTY2FsaW5nRmFjdG9yOwogICAgfQogICAg
dGhpcy51bml0ID0gZnVuY3Rpb24gKCkgewogICAgICAgIGNvbXB1dGVTY2FsaW5nRmFjdG9ySWZO
ZWVkZWQoKTsKICAgICAgICByZXR1cm4gY2FjaGVkVW5pdDsKICAgIH0KICAgIHRoaXMuc21hbGxl
cklzQmV0dGVyID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGVzdFJlc3VsdHNbMF0udW5pdCgpID09
ICdtcycgfHwgdGVzdFJlc3VsdHNbMF0udW5pdCgpID09ICdieXRlcyc7IH0KfQoKdmFyIHBsb3RD
b2xvciA9ICdyZ2IoMjMwLDUwLDUwKSc7CnZhciBzdWJwb2ludHNQbG90T3B0aW9ucyA9IHsKICAg
IGxpbmVzOiB7c2hvdzp0cnVlLCBsaW5lV2lkdGg6IDB9LAogICAgY29sb3I6IHBsb3RDb2xvciwK
ICAgIHBvaW50czoge3Nob3c6IHRydWUsIHJhZGl1czogMX0sCiAgICBiYXJzOiB7c2hvdzogZmFs
c2V9fTsKCnZhciBtYWluUGxvdE9wdGlvbnMgPSB7CiAgICB4YXhpczogewogICAgICAgIG1pbjog
LTAuNSwKICAgICAgICB0aWNrU2l6ZTogMSwKICAgIH0sCiAgICBjcm9zc2hhaXI6IHsgbW9kZTog
J3knIH0sCiAgICBzZXJpZXM6IHsgc2hhZG93U2l6ZTogMCB9LAogICAgYmFyczoge3Nob3c6IHRy
dWUsIGFsaWduOiAnY2VudGVyJywgYmFyV2lkdGg6IDAuNX0sCiAgICBsaW5lczogeyBzaG93OiBm
YWxzZSB9LAogICAgcG9pbnRzOiB7IHNob3c6IHRydWUgfSwKICAgIGdyaWQ6IHsKICAgICAgICBi
b3JkZXJXaWR0aDogMSwKICAgICAgICBib3JkZXJDb2xvcjogJyNjY2MnLAogICAgICAgIGJhY2tn
cm91bmRDb2xvcjogJyNmZmYnLAogICAgICAgIGhvdmVyYWJsZTogdHJ1ZSwKICAgICAgICBhdXRv
SGlnaGxpZ2h0OiBmYWxzZSwKICAgIH0KfTsKCnZhciB0aW1lUGxvdE9wdGlvbnMgPSB7CiAgICB5
YXhpczogeyBzaG93OiBmYWxzZSB9LAogICAgeGF4aXM6IHsgc2hvdzogZmFsc2UgfSwKICAgIGxp
bmVzOiB7IHNob3c6IHRydWUgfSwKICAgIGdyaWQ6IHsgYm9yZGVyV2lkdGg6IDEsIGJvcmRlckNv
bG9yOiAnI2NjYycgfSwKICAgIGNvbG9yczogWyBwbG90Q29sb3IgXQp9OwoKZnVuY3Rpb24gY3Jl
YXRlUGxvdChjb250YWluZXIsIHRlc3QpIHsKICAgIHZhciBzZWN0aW9uID0gJCgnPHNlY3Rpb24+
PGRpdiBjbGFzcz0icGxvdCI+PC9kaXY+PGRpdiBjbGFzcz0idGltZS1wbG90cyI+PC9kaXY+Jwog
ICAgICAgICsgJzxzcGFuIGNsYXNzPSJ0b29sdGlwIj48L3NwYW4+PC9zZWN0aW9uPicpOwogICAg
c2VjdGlvbi5jaGlsZHJlbignLnBsb3QnKS5jc3Moeyd3aWR0aCc6ICgxMDAgKiB0ZXN0LnJlc3Vs
dHMoKS5sZW5ndGggKyAyNSkgKyAncHgnLCAnaGVpZ2h0JzogJzMwMHB4J30pOwogICAgJChjb250
YWluZXIpLmFwcGVuZChzZWN0aW9uKTsKCiAgICB2YXIgcGxvdENvbnRhaW5lciA9IHNlY3Rpb24u
Y2hpbGRyZW4oJy5wbG90Jyk7CiAgICB2YXIgbWluSXNaZXJvID0gdHJ1ZTsKICAgIGF0dGFjaFBs
b3QodGVzdCwgcGxvdENvbnRhaW5lciwgbWluSXNaZXJvKTsKCiAgICBhdHRhY2hUaW1lUGxvdHMo
dGVzdCwgc2VjdGlvbi5jaGlsZHJlbignLnRpbWUtcGxvdHMnKSk7CgogICAgdmFyIHRvb2x0aXAg
PSBzZWN0aW9uLmNoaWxkcmVuKCcudG9vbHRpcCcpOwogICAgcGxvdENvbnRhaW5lci5iaW5kKCdw
bG90aG92ZXInLCBmdW5jdGlvbiAoZXZlbnQsIHBvc2l0aW9uLCBpdGVtKSB7CiAgICAgICAgaWYg
KGl0ZW0pIHsKICAgICAgICAgICAgdmFyIHBvc3RmaXggPSBpdGVtLnNlcmllcy5pZCA/ICcgKCcg
KyBpdGVtLnNlcmllcy5pZCArICcpJyA6ICcnOwogICAgICAgICAgICB0b29sdGlwLmh0bWwoaXRl
bS5kYXRhcG9pbnRbMV0udG9QcmVjaXNpb24oNCkgKyBwb3N0Zml4KTsKICAgICAgICAgICAgdmFy
IHNlY3Rpb25PZmZzZXQgPSAkKHNlY3Rpb24pLm9mZnNldCgpOwogICAgICAgICAgICB0b29sdGlw
LmNzcyh7bGVmdDogaXRlbS5wYWdlWCAtIHNlY3Rpb25PZmZzZXQubGVmdCAtIHRvb2x0aXAub3V0
ZXJXaWR0aCgpIC8gMiwgdG9wOiBpdGVtLnBhZ2VZIC0gc2VjdGlvbk9mZnNldC50b3AgKyAxMH0p
OwogICAgICAgICAgICB0b29sdGlwLmZhZGVJbigyMDApOwogICAgICAgIH0gZWxzZQogICAgICAg
ICAgICB0b29sdGlwLmhpZGUoKTsKICAgIH0pOwogICAgcGxvdENvbnRhaW5lci5tb3VzZW91dChm
dW5jdGlvbiAoKSB7CiAgICAgICAgdG9vbHRpcC5oaWRlKCk7CiAgICB9KTsKICAgIHBsb3RDb250
YWluZXIuY2xpY2soZnVuY3Rpb24gKGV2ZW50KSB7CiAgICAgICAgZXZlbnQucHJldmVudERlZmF1
bHQoKTsKICAgICAgICBtaW5Jc1plcm8gPSAhbWluSXNaZXJvOwogICAgICAgIGF0dGFjaFBsb3Qo
dGVzdCwgcGxvdENvbnRhaW5lciwgbWluSXNaZXJvKTsKICAgIH0pOwoKICAgIHJldHVybiBzZWN0
aW9uOwp9CgpmdW5jdGlvbiBhdHRhY2hUaW1lUGxvdHModGVzdCwgY29udGFpbmVyKSB7CiAgICB2
YXIgcmVzdWx0cyA9IHRlc3QucmVzdWx0cygpOwogICAgdmFyIGF0dGFjaGVkUGxvdCA9IGZhbHNl
OwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAg
Y29udGFpbmVyLmFwcGVuZCgnPGRpdj48L2Rpdj4nKTsKICAgICAgICB2YXIgdmFsdWVzID0gcmVz
dWx0c1tpXS52YWx1ZXMoKTsKICAgICAgICBpZiAoIXZhbHVlcykKICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgYXR0YWNoZWRQbG90ID0gdHJ1ZTsKCiAgICAgICAgJC5wbG90KGNvbnRhaW5l
ci5jaGlsZHJlbigpLmxhc3QoKSwgW3ZhbHVlcy5tYXAoZnVuY3Rpb24gKHZhbHVlLCBpbmRleCkg
eyByZXR1cm4gW2luZGV4LCB2YWx1ZV07IH0pXSwKICAgICAgICAgICAgJC5leHRlbmQodHJ1ZSwg
e30sIHRpbWVQbG90T3B0aW9ucywge3lheGlzOiB7bWluOiBNYXRoLm1pbi5hcHBseShNYXRoLCB2
YWx1ZXMpICogMC45LCBtYXg6IE1hdGgubWF4LmFwcGx5KE1hdGgsIHZhbHVlcykgKiAxLjF9LAog
ICAgICAgICAgICAgICAgeGF4aXM6IHttaW46IC0wLjUsIG1heDogdmFsdWVzLmxlbmd0aCAtIDAu
NX19KSk7CiAgICB9CiAgICBpZiAoIWF0dGFjaGVkUGxvdCkKICAgICAgICBjb250YWluZXIuY2hp
bGRyZW4oKS5yZW1vdmUoKTsKfQoKZnVuY3Rpb24gYXR0YWNoUGxvdCh0ZXN0LCBwbG90Q29udGFp
bmVyLCBtaW5Jc1plcm8pIHsKICAgIHZhciByZXN1bHRzID0gdGVzdC5yZXN1bHRzKCk7CgogICAg
dmFyIHZhbHVlcyA9IHJlc3VsdHMucmVkdWNlKGZ1bmN0aW9uICh2YWx1ZXMsIHJlc3VsdCwgaW5k
ZXgpIHsKICAgICAgICB2YXIgbmV3VmFsdWVzID0gcmVzdWx0LnZhbHVlcygpOwogICAgICAgIHJl
dHVybiBuZXdWYWx1ZXMgPyB2YWx1ZXMuY29uY2F0KG5ld1ZhbHVlcy5tYXAoZnVuY3Rpb24gKHZh
bHVlKSB7IHJldHVybiBbaW5kZXgsIHZhbHVlXTsgfSkpIDogdmFsdWVzOwogICAgfSwgW10pOwoK
ICAgIHZhciBwbG90RGF0YSA9IFtdOwogICAgaWYgKHZhbHVlcy5sZW5ndGgpCiAgICAgICAgcGxv
dERhdGEgPSBbJC5leHRlbmQodHJ1ZSwge30sIHN1YnBvaW50c1Bsb3RPcHRpb25zLCB7ZGF0YTog
dmFsdWVzfSldOwogICAgZWxzZSB7CiAgICAgICAgZnVuY3Rpb24gbWFrZVN1YnBvaW50cyhpZCwg
Y2FsbGJhY2spIHsgcmV0dXJuICQuZXh0ZW5kKHRydWUsIHt9LCBzdWJwb2ludHNQbG90T3B0aW9u
cywge2lkOiBpZCwgZGF0YTogcmVzdWx0cy5tYXAoY2FsbGJhY2spfSk7IH0KICAgICAgICBwbG90
RGF0YSA9IFttYWtlU3VicG9pbnRzKCdtaW4nLCBmdW5jdGlvbiAocmVzdWx0LCBpbmRleCkgeyBy
ZXR1cm4gW2luZGV4LCByZXN1bHQubWluKCldOyB9KSwKICAgICAgICBtYWtlU3VicG9pbnRzKCdt
YXgnLCBmdW5jdGlvbiAocmVzdWx0LCBpbmRleCkgeyByZXR1cm4gW2luZGV4LCByZXN1bHQubWF4
KCldOyB9KSwKICAgICAgICBtYWtlU3VicG9pbnRzKCctJiM5NjM7JywgZnVuY3Rpb24gKHJlc3Vs
dCwgaW5kZXgpIHsgcmV0dXJuIFtpbmRleCwgcmVzdWx0Lm1lYW4oKSAtIHJlc3VsdC5zdGRldigp
XTsgfSksCiAgICAgICAgbWFrZVN1YnBvaW50cygnKyYjOTYzOycsIGZ1bmN0aW9uIChyZXN1bHQs
IGluZGV4KSB7IHJldHVybiBbaW5kZXgsIHJlc3VsdC5tZWFuKCkgKyByZXN1bHQuc3RkZXYoKV07
IH0pXTsKICAgIH0KCiAgICBwbG90RGF0YS5wdXNoKHtpZDogJyZtdTsnLCBkYXRhOiByZXN1bHRz
Lm1hcChmdW5jdGlvbiAocmVzdWx0LCBpbmRleCkgeyByZXR1cm4gW2luZGV4LCByZXN1bHQubWVh
bigpXTsgfSksIGNvbG9yOiBwbG90Q29sb3J9KTsKCiAgICB2YXIgY3VycmVudFBsb3RPcHRpb25z
ID0gJC5leHRlbmQodHJ1ZSwge30sIG1haW5QbG90T3B0aW9ucywge3lheGlzOiB7CiAgICAgICAg
bWluOiBtaW5Jc1plcm8gPyAwIDogTWF0aC5taW4uYXBwbHkoTWF0aCwgcmVzdWx0cy5tYXAoZnVu
Y3Rpb24gKHJlc3VsdCwgaW5kZXgpIHsgcmV0dXJuIHJlc3VsdC5taW4oKTsgfSkpICogMC45OCwK
ICAgICAgICBtYXg6IE1hdGgubWF4LmFwcGx5KE1hdGgsIHJlc3VsdHMubWFwKGZ1bmN0aW9uIChy
ZXN1bHQsIGluZGV4KSB7IHJldHVybiByZXN1bHQubWF4KCk7IH0pKSAqIChtaW5Jc1plcm8gPyAx
LjEgOiAxLjAxKX19KTsKCiAgICBjdXJyZW50UGxvdE9wdGlvbnMueGF4aXMubWF4ID0gcmVzdWx0
cy5sZW5ndGggLSAwLjU7CiAgICBjdXJyZW50UGxvdE9wdGlvbnMueGF4aXMudGlja3MgPSByZXN1
bHRzLm1hcChmdW5jdGlvbiAocmVzdWx0LCBpbmRleCkgeyByZXR1cm4gW2luZGV4LCByZXN1bHQu
cnVuKCkubGFiZWwoKV07IH0pOwoKICAgICQucGxvdChwbG90Q29udGFpbmVyLCBwbG90RGF0YSwg
Y3VycmVudFBsb3RPcHRpb25zKTsKfQoKZnVuY3Rpb24gdG9GaXhlZFdpZHRoUHJlY2lzaW9uKHZh
bHVlKSB7CiAgICB2YXIgZGVjaW1hbCA9IHZhbHVlLnRvRml4ZWQoMik7CiAgICByZXR1cm4gZGVj
aW1hbDsKfQoKZnVuY3Rpb24gZm9ybWF0UGVyY2VudGFnZShmcmFjdGlvbikgewogICAgdmFyIHBl
cmNlbnRhZ2UgPSBmcmFjdGlvbiAqIDEwMDsKICAgIHJldHVybiAoZnJhY3Rpb24gKiAxMDApLnRv
Rml4ZWQoMikgKyAnJSc7Cn0KCmZ1bmN0aW9uIGNyZWF0ZVRhYmxlKHRlc3RzLCBydW5zLCBzaG91
bGRJZ25vcmVNZW1vcnksIHJlZmVyZW5jZUluZGV4KSB7CiAgICAkKCcjY29udGFpbmVyJykuaHRt
bCgnPHRoZWFkPjx0cj48dGg+VGVzdDwvdGg+PHRoPlVuaXQ8L3RoPicgKyBydW5zLm1hcChmdW5j
dGlvbiAocnVuLCBpbmRleCkgewogICAgICAgIHJldHVybiAnPHRoIGNvbHNwYW49IicgKyAoaW5k
ZXggPT0gcmVmZXJlbmNlSW5kZXggPyAyIDogMykgKyAnIiBjbGFzcz0ie3NvcnRlcjogXCdjb21w
YXJpc29uXCd9Ij4nICsgcnVuLmxhYmVsKCkgKyAnPC90aD4nOwogICAgfSkucmVkdWNlKGZ1bmN0
aW9uIChtYXJrdXAsIGNlbGwpIHsgcmV0dXJuIG1hcmt1cCArIGNlbGw7IH0sICcnKSArICc8L3Ry
PjwvaGVhZD48dGJvZHk+PC90Ym9keT4nKTsKCiAgICB2YXIgdGVzdE5hbWVzID0gW107CiAgICBm
b3IgKHRlc3ROYW1lIGluIHRlc3RzKQogICAgICAgIHRlc3ROYW1lcy5wdXNoKHRlc3ROYW1lKTsK
CiAgICB0ZXN0TmFtZXMuc29ydCgpLm1hcChmdW5jdGlvbiAodGVzdE5hbWUpIHsKICAgICAgICB2
YXIgdGVzdCA9IHRlc3RzW3Rlc3ROYW1lXTsKICAgICAgICBpZiAodGVzdC5pc01lbW9yeVRlc3Qo
KSAhPSBzaG91bGRJZ25vcmVNZW1vcnkpCiAgICAgICAgICAgIGNyZWF0ZVRhYmxlUm93KHJ1bnMs
IHRlc3QsIHJlZmVyZW5jZUluZGV4KTsKICAgIH0pOwoKICAgICQoJyNjb250YWluZXInKS50YWJs
ZXNvcnRlcih7d2lkZ2V0czogWyd6ZWJyYSddfSk7Cn0KCmZ1bmN0aW9uIGxpbmVhclJlZ3Jlc3Np
b24ocG9pbnRzKSB7CiAgICAvLyBJbXBsZW1lbnQgaHR0cDovL3d3dy5lYXN5Y2FsY3VsYXRpb24u
Y29tL3N0YXRpc3RpY3MvbGVhcm4tY29ycmVsYXRpb24ucGhwLgogICAgLy8geCA9IG1hZ25pdHVk
ZQogICAgLy8geSA9IGl0ZXJhdGlvbnMKICAgIHZhciBzdW1YID0gMDsKICAgIHZhciBzdW1ZID0g
MDsKICAgIHZhciBzdW1YU3F1YXJlZCA9IDA7CiAgICB2YXIgc3VtWVNxdWFyZWQgPSAwOwogICAg
dmFyIHN1bVhUaW1lc1kgPSAwOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0
aDsgaSsrKSB7CiAgICAgICAgdmFyIHggPSBpOwogICAgICAgIHZhciB5ID0gcG9pbnRzW2ldOwog
ICAgICAgIHN1bVggKz0geDsKICAgICAgICBzdW1ZICs9IHk7CiAgICAgICAgc3VtWFNxdWFyZWQg
Kz0geCAqIHg7CiAgICAgICAgc3VtWVNxdWFyZWQgKz0geSAqIHk7CiAgICAgICAgc3VtWFRpbWVz
WSArPSB4ICogeTsKICAgIH0KCiAgICB2YXIgciA9IChwb2ludHMubGVuZ3RoICogc3VtWFRpbWVz
WSAtIHN1bVggKiBzdW1ZKSAvCiAgICAgICAgTWF0aC5zcXJ0KChwb2ludHMubGVuZ3RoICogc3Vt
WFNxdWFyZWQgLSBzdW1YICogc3VtWCkgKgogICAgICAgICAgICAgICAgICAocG9pbnRzLmxlbmd0
aCAqIHN1bVlTcXVhcmVkIC0gc3VtWSAqIHN1bVkpKTsKCiAgICBpZiAoaXNOYU4ocikgfHwgciA9
PSBNYXRoLkluZmluaXR5KQogICAgICAgIHIgPSAwOwoKICAgIHZhciBzbG9wZSA9IChwb2ludHMu
bGVuZ3RoICogc3VtWFRpbWVzWSAtIHN1bVggKiBzdW1ZKSAvIChwb2ludHMubGVuZ3RoICogc3Vt
WFNxdWFyZWQgLSBzdW1YICogc3VtWCk7CiAgICB2YXIgaW50ZXJjZXB0ID0gc3VtWSAvIHBvaW50
cy5sZW5ndGggLSBzbG9wZSAqIHN1bVggLyBwb2ludHMubGVuZ3RoOwogICAgcmV0dXJuIHtzbG9w
ZTogc2xvcGUsIGludGVyY2VwdDogaW50ZXJjZXB0LCByU3F1YXJlZDogciAqIHJ9Owp9Cgp2YXIg
d2FybmluZ1NpZ24gPSAnPHN2ZyB2aWV3Qm94PSIwIDAgMTAwIDEwMCIgc3R5bGU9IndpZHRoOiAx
OHB4OyBoZWlnaHQ6IDE4cHg7IHZlcnRpY2FsLWFsaWduOiBib3R0b207IiB2ZXJzaW9uPSIxLjEi
PicKICAgICsgJzxwb2x5Z29uIGZpbGw9InJlZCIgcG9pbnRzPSI1MCwxMCA5MCw4MCAxMCw4MCA1
MCwxMCIgc3Ryb2tlPSJyZWQiIHN0cm9rZS13aWR0aD0iMTAiIHN0cm9rZS1saW5lam9pbj0icm91
bmQiIC8+JwogICAgKyAnPHBvbHlnb24gZmlsbD0id2hpdGUiIHBvaW50cz0iNDcsMzAgNDgsMjks
IDUwLCAyOC43LCA1MiwyOSA1MywzMCA1MCw2MCIgc3Ryb2tlPSJ3aGl0ZSIgc3Ryb2tlLXdpZHRo
PSIxMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgLz4nCiAgICArICc8Y2lyY2xlIGN4PSI1MCIg
Y3k9IjczIiByPSI2IiBmaWxsPSJ3aGl0ZSIgLz4nCiAgICArICc8L3N2Zz4nOwoKZnVuY3Rpb24g
Y3JlYXRlVGFibGVSb3cocnVucywgdGVzdCwgcmVmZXJlbmNlSW5kZXgpIHsKICAgIHZhciB0YWJs
ZVJvdyA9ICQoJzx0cj48dGQgY2xhc3M9InRlc3QiPicgKyB0ZXN0Lm5hbWUoKSArICc8L3RkPjx0
ZCBjbGFzcz0idW5pdCI+JyArIHRlc3QudW5pdCgpICsgJzwvdGQ+PC90cj4nKTsKCiAgICBmdW5j
dGlvbiBtYXJrdXBGb3JSdW4ocmVzdWx0LCByZWZlcmVuY2VSZXN1bHQpIHsKICAgICAgICB2YXIg
Y29tcGFyaXNvbkNlbGwgPSAnJzsKICAgICAgICB2YXIgaGlkZGVuVmFsdWUgPSAnJzsKICAgICAg
ICB2YXIgc2hvdWxkQ29tcGFyZSA9IHJlc3VsdCAhPT0gcmVmZXJlbmNlUmVzdWx0OwogICAgICAg
IGlmIChzaG91bGRDb21wYXJlICYmIHJlZmVyZW5jZVJlc3VsdCkgewogICAgICAgICAgICB2YXIg
cGVyY2VudERpZmZlcmVuY2UgPSByZWZlcmVuY2VSZXN1bHQucGVyY2VudERpZmZlcmVuY2UocmVz
dWx0KTsKICAgICAgICAgICAgdmFyIGJldHRlciA9IHRlc3Quc21hbGxlcklzQmV0dGVyKCkgPyBw
ZXJjZW50RGlmZmVyZW5jZSA8IDAgOiBwZXJjZW50RGlmZmVyZW5jZSA+IDA7CiAgICAgICAgICAg
IHZhciBjb21wYXJpc29uID0gJyc7CiAgICAgICAgICAgIHZhciBjbGFzc05hbWUgPSAnY29tcGFy
aXNvbic7CiAgICAgICAgICAgIGlmIChyZWZlcmVuY2VSZXN1bHQuaXNTdGF0aXN0aWNhbGx5U2ln
bmlmaWNhbnQocmVzdWx0KSkgewogICAgICAgICAgICAgICAgY29tcGFyaXNvbiA9IGZvcm1hdFBl
cmNlbnRhZ2UoTWF0aC5hYnMocGVyY2VudERpZmZlcmVuY2UpKSArIChiZXR0ZXIgPyAnIEJldHRl
cicgOiAnIFdvcnNlJm5ic3A7Jyk7CiAgICAgICAgICAgICAgICBjbGFzc05hbWUgKz0gYmV0dGVy
ID8gJyBiZXR0ZXInIDogJyB3b3JzZSc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaGlkZGVu
VmFsdWUgPSAnPHNwYW4gc3R5bGU9ImRpc3BsYXk6IG5vbmUiPnwnICsgY29tcGFyaXNvbiArICc8
L3NwYW4+JzsKICAgICAgICAgICAgY29tcGFyaXNvbkNlbGwgPSAnPHRkIGNsYXNzPSInICsgY2xh
c3NOYW1lICsgJyI+JyArIGNvbXBhcmlzb24gKyAnPC90ZD4nOwogICAgICAgIH0gZWxzZSBpZiAo
c2hvdWxkQ29tcGFyZSkKICAgICAgICAgICAgY29tcGFyaXNvbkNlbGwgPSAnPHRkIGNsYXNzPSJj
b21wYXJpc29uIj48L3RkPic7CgogICAgICAgIHZhciB2YWx1ZXMgPSByZXN1bHQudmFsdWVzKCk7
CiAgICAgICAgdmFyIHdhcm5pbmcgPSAnJzsKICAgICAgICB2YXIgcmVncmVzc2lvbkFuYWx5c2lz
ID0gJyc7CiAgICAgICAgaWYgKHZhbHVlcyAmJiB2YWx1ZXMubGVuZ3RoID4gMykgewogICAgICAg
ICAgICByZWdyZXNzaW9uUmVzdWx0ID0gbGluZWFyUmVncmVzc2lvbih2YWx1ZXMpOwogICAgICAg
ICAgICByZWdyZXNzaW9uQW5hbHlzaXMgPSAnc2xvcGU9JyArIHRvRml4ZWRXaWR0aFByZWNpc2lv
bihyZWdyZXNzaW9uUmVzdWx0LnNsb3BlKQogICAgICAgICAgICAgICAgKyAnLCBSXjI9JyArIHRv
Rml4ZWRXaWR0aFByZWNpc2lvbihyZWdyZXNzaW9uUmVzdWx0LnJTcXVhcmVkKTsKICAgICAgICAg
ICAgaWYgKHJlZ3Jlc3Npb25SZXN1bHQuclNxdWFyZWQgPiAwLjYgJiYgTWF0aC5hYnMocmVncmVz
c2lvblJlc3VsdC5zbG9wZSkgPiAwLjAxKSB7CiAgICAgICAgICAgICAgICB3YXJuaW5nID0gJyA8
c3BhbiBjbGFzcz0icmVncmVzc2lvbi13YXJuaW5nIiB0aXRsZT0iRGV0ZWN0ZWQgYSB0aW1lIGRl
cGVuZGVuY3kgd2l0aCAnICsgcmVncmVzc2lvbkFuYWx5c2lzICsgJyI+JyArIHdhcm5pbmdTaWdu
ICsgJyA8L3NwYW4+JzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdmFyIHN0YXRp
c3RpY3MgPSAnJnNpZ21hOz0nICsgdG9GaXhlZFdpZHRoUHJlY2lzaW9uKHJlc3VsdC5zdGRldigp
KSArICcsIG1pbj0nICsgdG9GaXhlZFdpZHRoUHJlY2lzaW9uKHJlc3VsdC5taW4oKSkKICAgICAg
ICAgICAgKyAnLCBtYXg9JyArIHRvRml4ZWRXaWR0aFByZWNpc2lvbihyZXN1bHQubWF4KCkpICsg
J1xuJyArIHJlZ3Jlc3Npb25BbmFseXNpczsKCiAgICAgICAgLy8gVGFibGVzb3J0ZXIgZG9lc24n
dCBrbm93IGFib3V0IHRoZSBzZWNvbmQgY2VsbCBzbyBwdXQgdGhlIGNvbXBhcmlzb24gaW4gdGhl
IGludmlzaWJsZSBlbGVtZW50LgogICAgICAgIHJldHVybiAnPHRkIGNsYXNzPSJyZXN1bHQiIHRp
dGxlPSInICsgc3RhdGlzdGljcyArICciPicgKyB0b0ZpeGVkV2lkdGhQcmVjaXNpb24ocmVzdWx0
Lm1lYW4oKSkgKyBoaWRkZW5WYWx1ZQogICAgICAgICAgICArICc8L3RkPjx0ZCBjbGFzcz0ic3Rk
ZXYiIHRpdGxlPSInICsgc3RhdGlzdGljcyArICciPiZwbHVzbW47ICcKICAgICAgICAgICAgKyBm
b3JtYXRQZXJjZW50YWdlKHJlc3VsdC5zdGRldlJhdGlvKCkpICsgd2FybmluZyArICc8L3RkPicg
KyBjb21wYXJpc29uQ2VsbDsKICAgIH0KCiAgICBmdW5jdGlvbiBtYXJrdXBGb3JNaXNzaW5nUnVu
KGlzUmVmZXJlbmNlKSB7CiAgICAgICAgcmV0dXJuICc8dGQgY29sc3Bhbj0iJyArIChpc1JlZmVy
ZW5jZSA/IDIgOiAzKSArICciIGNsYXNzPSJtaXNzaW5nIj5NaXNzaW5nPC90ZD4nOwogICAgfQoK
ICAgIHZhciBydW5JbmRleCA9IDA7CiAgICB2YXIgcmVzdWx0cyA9IHRlc3QucmVzdWx0cygpOwog
ICAgdmFyIHJlZmVyZW5jZVJlc3VsdCA9IHVuZGVmaW5lZDsKICAgIHZhciByZXN1bHRJbmRleE1h
cCA9IHt9OwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7CiAg
ICAgICAgd2hpbGUgKHJ1bnNbcnVuSW5kZXhdICE9PSByZXN1bHRzW2ldLnJ1bigpKQogICAgICAg
ICAgICBydW5JbmRleCsrOwogICAgICAgIGlmIChydW5JbmRleCA9PSByZWZlcmVuY2VJbmRleCkK
ICAgICAgICAgICAgcmVmZXJlbmNlUmVzdWx0ID0gcmVzdWx0c1tpXTsKICAgICAgICByZXN1bHRJ
bmRleE1hcFtydW5JbmRleF0gPSBpOwogICAgfQogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBydW5z
Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIHJlc3VsdEluZGV4ID0gcmVzdWx0SW5kZXhNYXBb
aV07CiAgICAgICAgaWYgKHJlc3VsdEluZGV4ID09IHVuZGVmaW5lZCkKICAgICAgICAgICAgdGFi
bGVSb3cuYXBwZW5kKG1hcmt1cEZvck1pc3NpbmdSdW4oaSA9PSByZWZlcmVuY2VJbmRleCkpOwog
ICAgICAgIGVsc2UKICAgICAgICAgICAgdGFibGVSb3cuYXBwZW5kKG1hcmt1cEZvclJ1bihyZXN1
bHRzW3Jlc3VsdEluZGV4XSwgcmVmZXJlbmNlUmVzdWx0KSk7CiAgICB9CgogICAgJCgnI2NvbnRh
aW5lcicpLmNoaWxkcmVuKCd0Ym9keScpLmxhc3QoKS5hcHBlbmQodGFibGVSb3cpOwoKICAgIHRh
YmxlUm93LmNsaWNrKGZ1bmN0aW9uIChldmVudCkgewogICAgICAgIGlmIChldmVudC50YXJnZXQg
IT0gdGFibGVSb3dbMF0gJiYgZXZlbnQudGFyZ2V0LnBhcmVudE5vZGUgIT0gdGFibGVSb3dbMF0p
CiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKCiAg
ICAgICAgdmFyIGZpcnN0Q2VsbCA9IHRhYmxlUm93LmNoaWxkcmVuKCd0ZCcpLmZpcnN0KCk7CiAg
ICAgICAgaWYgKGZpcnN0Q2VsbC5jaGlsZHJlbignc2VjdGlvbicpLmxlbmd0aCkgewogICAgICAg
ICAgICBmaXJzdENlbGwuY2hpbGRyZW4oJ3NlY3Rpb24nKS5yZW1vdmUoKTsKICAgICAgICAgICAg
dGFibGVSb3cuY2hpbGRyZW4oJ3RkJykuY3NzKHsncGFkZGluZy1ib3R0b20nOiAnJ30pOwogICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhciBwbG90ID0gY3JlYXRlUGxvdChmaXJzdENlbGws
IHRlc3QpOwogICAgICAgICAgICBwbG90LmNzcyh7J3Bvc2l0aW9uJzogJ2Fic29sdXRlJywgJ3ot
aW5kZXgnOiAyfSk7CiAgICAgICAgICAgIHZhciBvZmZzZXQgPSB0YWJsZVJvdy5vZmZzZXQoKTsK
ICAgICAgICAgICAgb2Zmc2V0LmxlZnQgKz0gMTsKICAgICAgICAgICAgb2Zmc2V0LnRvcCArPSB0
YWJsZVJvdy5vdXRlckhlaWdodCgpOwogICAgICAgICAgICBwbG90Lm9mZnNldChvZmZzZXQpOwog
ICAgICAgICAgICB0YWJsZVJvdy5jaGlsZHJlbigndGQnKS5jc3MoeydwYWRkaW5nLWJvdHRvbSc6
IHBsb3Qub3V0ZXJIZWlnaHQoKSArIDV9KTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBmYWxz
ZTsKICAgIH0pOwp9CgpmdW5jdGlvbiBpbml0KCkgewogICAgJC50YWJsZXNvcnRlci5hZGRQYXJz
ZXIoewogICAgICAgIGlkOiAnY29tcGFyaXNvbicsCiAgICAgICAgaXM6IGZ1bmN0aW9uKHMpIHsK
ICAgICAgICAgICAgcmV0dXJuIHMuaW5kZXhPZignfCcpID49IDA7CiAgICAgICAgfSwKICAgICAg
ICBmb3JtYXQ6IGZ1bmN0aW9uKHMpIHsKICAgICAgICAgICAgdmFyIHBhcnNlZCA9IHBhcnNlRmxv
YXQocy5zdWJzdHJpbmcocy5pbmRleE9mKCd8JykgKyAxKSk7CiAgICAgICAgICAgIHJldHVybiBp
c05hTihwYXJzZWQpID8gMCA6IHBhcnNlZDsKICAgICAgICB9LAogICAgICAgIHR5cGU6ICdudW1l
cmljJywKICAgIH0pOwoKICAgIHZhciBydW5zID0gW107CiAgICB2YXIgdGVzdHMgPSB7fTsKICAg
ICQuZWFjaChKU09OLnBhcnNlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdqc29uJykudGV4dENv
bnRlbnQpLCBmdW5jdGlvbiAoaW5kZXgsIGVudHJ5KSB7CiAgICAgICAgdmFyIHJ1biA9IG5ldyBU
ZXN0UnVuKGVudHJ5KTsKICAgICAgICBydW5zLnB1c2gocnVuKTsKICAgICAgICAkLmVhY2goZW50
cnkucmVzdWx0cywgZnVuY3Rpb24gKHRlc3QsIHJlc3VsdCkgewogICAgICAgICAgICBpZiAoIXRl
c3RzW3Rlc3RdKQogICAgICAgICAgICAgICAgdGVzdHNbdGVzdF0gPSBuZXcgUGVyZlRlc3QodGVz
dCk7CiAgICAgICAgICAgIHRlc3RzW3Rlc3RdLmFkZFJlc3VsdChuZXcgVGVzdFJlc3VsdCh0ZXN0
c1t0ZXN0XSwgcmVzdWx0LCBydW4pKTsKICAgICAgICB9KTsKICAgIH0pOwoKICAgIHZhciBzaG91
bGRJZ25vcmVNZW1vcnk9IHRydWU7CiAgICB2YXIgcmVmZXJlbmNlSW5kZXggPSAwOwogICAgY3Jl
YXRlVGFibGUodGVzdHMsIHJ1bnMsIHNob3VsZElnbm9yZU1lbW9yeSwgcmVmZXJlbmNlSW5kZXgp
OwoKICAgICQoJyN0aW1lLW1lbW9yeScpLmJpbmQoJ2NoYW5nZScsIGZ1bmN0aW9uIChldmVudCwg
Y2hlY2tlZEVsZW1lbnQpIHsKICAgICAgICBzaG91bGRJZ25vcmVNZW1vcnkgPSBjaGVja2VkRWxl
bWVudC50ZXh0Q29udGVudCA9PSAnVGltZSc7CiAgICAgICAgY3JlYXRlVGFibGUodGVzdHMsIHJ1
bnMsIHNob3VsZElnbm9yZU1lbW9yeSwgcmVmZXJlbmNlSW5kZXgpOwogICAgfSk7CgogICAgcnVu
cy5tYXAoZnVuY3Rpb24gKHJ1biwgaW5kZXgpIHsKICAgICAgICAkKCcjcmVmZXJlbmNlJykuYXBw
ZW5kKCc8c3BhbiB2YWx1ZT0iJyArIGluZGV4ICsgJyInICsgKGluZGV4ID09IHJlZmVyZW5jZUlu
ZGV4ID8gJyBjbGFzcz0iY2hlY2tlZCInIDogJycpICsgJz4nICsgcnVuLmxhYmVsKCkgKyAnPC9z
cGFuPicpOwogICAgfSkKCiAgICAkKCcjcmVmZXJlbmNlJykuYmluZCgnY2hhbmdlJywgZnVuY3Rp
b24gKGV2ZW50LCBjaGVja2VkRWxlbWVudCkgewogICAgICAgIHJlZmVyZW5jZUluZGV4ID0gcGFy
c2VJbnQoY2hlY2tlZEVsZW1lbnQuZ2V0QXR0cmlidXRlKCd2YWx1ZScpKTsKICAgICAgICBjcmVh
dGVUYWJsZSh0ZXN0cywgcnVucywgc2hvdWxkSWdub3JlTWVtb3J5LCByZWZlcmVuY2VJbmRleCk7
CiAgICB9KTsKCiAgICAkKCcuY2hlY2tib3gnKS5lYWNoKGZ1bmN0aW9uIChpbmRleCwgY2hlY2ti
b3gpIHsKICAgICAgICAkKGNoZWNrYm94KS5jaGlsZHJlbignc3BhbicpLmNsaWNrKGZ1bmN0aW9u
IChldmVudCkgewogICAgICAgICAgICBpZiAoJCh0aGlzKS5oYXNDbGFzcygnY2hlY2tlZCcpKQog
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAkKGNoZWNrYm94KS5jaGlsZHJlbign
c3BhbicpLnJlbW92ZUNsYXNzKCdjaGVja2VkJyk7CiAgICAgICAgICAgICQodGhpcykuYWRkQ2xh
c3MoJ2NoZWNrZWQnKTsKICAgICAgICAgICAgJChjaGVja2JveCkudHJpZ2dlcignY2hhbmdlJywg
JCh0aGlzKSk7CiAgICAgICAgfSk7CiAgICB9KTsKfQoKPC9zY3JpcHQ+CjxzY3JpcHQgaWQ9Impz
b24iIHR5cGU9ImFwcGxpY2F0aW9uL2pzb24iPlt7InRpbWVzdGFtcCI6IDEzNTgzODM4OTcsICJk
ZXNjcmlwdGlvbiI6ICJXaXRoIHBhdGNoIiwgInJlc3VsdHMiOiB7Ik1lbW9yeS9jaGlsZC1ub2Rl
LXRyYXZlcnNhbDpKU0hlYXAiOiB7Im1pbiI6IDkwMTEyLjAsICJtYXgiOiAxMjQyMjQuMCwgIm1l
ZGlhbiI6IDExNDM0NC4wLCAidmFsdWVzIjogWzkwMTEyLjAsIDk1MDA4LjAsIDk3MjE2LjAsIDk5
NTEyLjAsIDEwMTcyMC4wLCAxMDQxOTIuMCwgMTA2NDAwLjAsIDEwODYwOC4wLCAxMTA4NDguMCwg
MTEzMjQwLjAsIDExNTQ0OC4wLCAxMTgyMDguMCwgMTIxNDQwLjAsIDEyMjYyNC4wLCAxMjM3NDQu
MCwgMTIzODQwLjAsIDEyMzkzNi4wLCAxMjQwMzIuMCwgMTI0MTI4LjAsIDEyNDIyNC4wXSwgInN0
ZGV2IjogMTEzOTEuMDc5Nzk3MjUyMjUsICJhdmciOiAxMTI0MjQuMCwgInVuaXQiOiAiYnl0ZXMi
fSwgIk1lbW9yeS9jaGlsZC1ub2RlLXRyYXZlcnNhbCI6IHsibWluIjogMjg2Ni4wLCAibWF4Ijog
MzM2Mi4wLCAibWVkaWFuIjogMzE0NC4wLCAidmFsdWVzIjogWzI5NzUuMCwgMzMyMy4wLCAyODkw
LjAsIDMzMTAuMCwgMjg2Ni4wLCAzMzA0LjAsIDI4NzQuMCwgMzMwNS4wLCAyODg5LjAsIDMzMjIu
MCwgMjg5NC4wLCAzMzI3LjAsIDMwMDEuMCwgMzM1NC4wLCAyOTE5LjAsIDMyODcuMCwgMjg3Ny4w
LCAzMzYyLjAsIDI4OTUuMCwgMzM1MS4wXSwgInN0ZGV2IjogMjE2LjU0NzI3ODE3MzE3NTI0LCAi
YXZnIjogMzExNi4yNSwgInVuaXQiOiAibXMifSwgIk1lbW9yeS9jaGlsZC1ub2RlLXRyYXZlcnNh
bDpNYWxsb2MiOiB7Im1pbiI6IDMwNjAwMTYyNC4wLCAibWF4IjogMzEwODgzMDQwLjAsICJtZWRp
YW4iOiAzMDY3MTg1MTYuMCwgInZhbHVlcyI6IFszMDY4NDg5MzYuMCwgMzA2NzY2Njg4LjAsIDMw
NjgxMzU3Ni4wLCAzMDY2ODE5ODQuMCwgMzA2NzMyNTA0LjAsIDMwNjczMDI0MC4wLCAzMDYwMDE2
MjQuMCwgMzA2NjE5MzM2LjAsIDMwNjA1NDkxMi4wLCAzMDY3MDY3OTIuMCwgMzA2MDkzMzc2LjAs
IDMwNjYyMzIxNi4wLCAzMDYyMTYxNjAuMCwgMzA2NTg2MDE2LjAsIDMxMDg2MjMyOC4wLCAzMTA4
MDE2NjQuMCwgMzEwODgzMDQwLjAsIDMxMDc5NDI0MC4wLCAzMTA3NzI2NjQuMCwgMzA2NTc4NjQw
LjBdLCAic3RkZXYiOiAxOTIwNTI3LjU5Njg4MzQ1LCAiYXZnIjogMzA3NjA4Mzk2LjgsICJ1bml0
IjogImJ5dGVzIn19LCAiYnJhbmNoIjogIndlYmtpdC10cnVuayIsICJ3ZWJraXQtcmV2aXNpb24i
OiAiMTM5OTAzIn0sIHsidGltZXN0YW1wIjogMTM1ODM4NDA0NCwgIndlYmtpdC1yZXZpc2lvbiI6
ICIxMzk5MDMiLCAicmVzdWx0cyI6IHsiTWVtb3J5L2NoaWxkLW5vZGUtdHJhdmVyc2FsOkpTSGVh
cCI6IHsibWluIjogOTAxMTIuMCwgIm1heCI6IDEyNDIyNC4wLCAibWVkaWFuIjogMTE0MzQ0LjAs
ICJ2YWx1ZXMiOiBbOTAxMTIuMCwgOTUwMDguMCwgOTcyMTYuMCwgOTk1MTIuMCwgMTAxNzIwLjAs
IDEwNDE5Mi4wLCAxMDY0MDAuMCwgMTA4NjA4LjAsIDExMDg0OC4wLCAxMTMyNDAuMCwgMTE1NDQ4
LjAsIDExODIwOC4wLCAxMjE0NDAuMCwgMTIyNjI0LjAsIDEyMzc0NC4wLCAxMjM4NDAuMCwgMTIz
OTM2LjAsIDEyNDAzMi4wLCAxMjQxMjguMCwgMTI0MjI0LjBdLCAic3RkZXYiOiAxMTM5MS4wNzk3
OTcyNTIyNSwgImF2ZyI6IDExMjQyNC4wLCAidW5pdCI6ICJieXRlcyJ9LCAiTWVtb3J5L2NoaWxk
LW5vZGUtdHJhdmVyc2FsIjogeyJtaW4iOiAyODY2LjAsICJtYXgiOiAzMzU4LjAsICJtZWRpYW4i
OiAzMTE4LjAsICJ2YWx1ZXMiOiBbMjkxMC4wLCAzMzAxLjAsIDI4NzkuMCwgMzMxNy4wLCAyODk0
LjAsIDMzMjEuMCwgMjg4Mi4wLCAzMzMzLjAsIDI4OTcuMCwgMzI5MS4wLCAyOTI5LjAsIDMzNDEu
MCwgMjk0My4wLCAzMzU4LjAsIDI5NTUuMCwgMzM1Mi4wLCAyODY2LjAsIDMzMzMuMCwgMjkxMC4w
LCAzMjgxLjBdLCAic3RkZXYiOiAyMTUuMTk3NDA2MzEzODU1NDgsICJhdmciOiAzMTE0LjY1LCAi
dW5pdCI6ICJtcyJ9LCAiTWVtb3J5L2NoaWxkLW5vZGUtdHJhdmVyc2FsOk1hbGxvYyI6IHsibWlu
IjogMzA2MDYyMDQ4LjAsICJtYXgiOiAzMTA4NDEwNzIuMCwgIm1lZGlhbiI6IDMwNjc2MzAyOC4w
LCAidmFsdWVzIjogWzMwNjg1MzMzNi4wLCAzMDY4NzYzMDQuMCwgMzA2OTA3ODk2LjAsIDMwNjg1
MDIyNC4wLCAzMDY5OTk5NzYuMCwgMzA2Nzc5MTEyLjAsIDMwNjA4MTY4MC4wLCAzMDY3NDY5NDQu
MCwgMzA2MDc3MDQwLjAsIDMwNjA2MjA0OC4wLCAzMDYwOTQyODAuMCwgMzA2Njg2NTg0LjAsIDMw
NjE2Mjg1Ni4wLCAzMDY1OTE0NjQuMCwgMzEwODA4OTYwLjAsIDMwNjY5NjY4OC4wLCAzMDY4NjM3
NTIuMCwgMzA2NjEzNDcyLjAsIDMxMDg0MTA3Mi4wLCAzMTA3ODE0NDguMF0sICJzdGRldiI6IDE1
Nzk1NzMuMjQxMTQyNzEsICJhdmciOiAzMDcyMTg3NTYuOCwgInVuaXQiOiAiYnl0ZXMifX0sICJi
cmFuY2giOiAid2Via2l0LXRydW5rIiwgImRlc2NyaXB0aW9uIjogIldpdGggcGF0Y2gifSwgeyJ0
aW1lc3RhbXAiOiAxMzU4Mzg0MjIyLCAicmVzdWx0cyI6IHsiTWVtb3J5L2NoaWxkLW5vZGUtdHJh
dmVyc2FsOkpTSGVhcCI6IHsibWluIjogOTAxMTIuMCwgIm1heCI6IDEyNDIyNC4wLCAibWVkaWFu
IjogMTE0MzQ0LjAsICJ2YWx1ZXMiOiBbOTAxMTIuMCwgOTUwMDguMCwgOTcyMTYuMCwgOTk1MTIu
MCwgMTAxNzIwLjAsIDEwNDE5Mi4wLCAxMDY0MDAuMCwgMTA4NjA4LjAsIDExMDg0OC4wLCAxMTMy
NDAuMCwgMTE1NDQ4LjAsIDExODIwOC4wLCAxMjE0NDAuMCwgMTIyNjI0LjAsIDEyMzc0NC4wLCAx
MjM4NDAuMCwgMTIzOTM2LjAsIDEyNDAzMi4wLCAxMjQxMjguMCwgMTI0MjI0LjBdLCAic3RkZXYi
OiAxMTM5MS4wNzk3OTcyNTIyNSwgImF2ZyI6IDExMjQyNC4wLCAidW5pdCI6ICJieXRlcyJ9LCAi
TWVtb3J5L2NoaWxkLW5vZGUtdHJhdmVyc2FsIjogeyJtaW4iOiAyODcwLjAsICJtYXgiOiAzMzU5
LjAsICJtZWRpYW4iOiAzMTE0LjUsICJ2YWx1ZXMiOiBbMjkwNC4wLCAzMzU5LjAsIDI5MTYuMCwg
MzMxNi4wLCAyODcwLjAsIDMzMjEuMCwgMjg3OC4wLCAzMzI4LjAsIDI4NzguMCwgMzMxNi4wLCAy
ODkxLjAsIDMzMTMuMCwgMjg5My4wLCAzMzE4LjAsIDI4OTMuMCwgMzMyNC4wLCAyODkzLjAsIDMz
MjcuMCwgMjg5Ni4wLCAzMzI2LjBdLCAic3RkZXYiOiAyMjIuODA0NjExMTIxMTM5MjMsICJhdmci
OiAzMTA4LjAsICJ1bml0IjogIm1zIn0sICJNZW1vcnkvY2hpbGQtbm9kZS10cmF2ZXJzYWw6TWFs
bG9jIjogeyJtaW4iOiAzMDYwNTE4MDAuMCwgIm1heCI6IDMxMDgxNjYxNi4wLCAibWVkaWFuIjog
MzA2Njg4MDM2LjAsICJ2YWx1ZXMiOiBbMzA2ODUyODQwLjAsIDMwNjg3NTgwOC4wLCAzMDY5MzA0
NDAuMCwgMzA2ODA3NTUyLjAsIDMwNjk4MDI4MC4wLCAzMDY4Njk5NjAuMCwgMzA2ODQwNjU2LjAs
IDMwNjcyMjI0MC4wLCAzMDYxMzI1NjguMCwgMzA2NzQ2MDE2LjAsIDMwNjEyNjM5Mi4wLCAzMDY2
NTA5MzYuMCwgMzA2MjIzNTkyLjAsIDMwNjA1MTgwMC4wLCAzMDYyMzM2MDguMCwgMzA2NjUzODMy
LjAsIDMwNjI0NDYwMC4wLCAzMTA4MTY2MTYuMCwgMzA2MDg0OTc2LjAsIDMwNjU2MDY0OC4wXSwg
InN0ZGV2IjogMTAwNTgyMC4xNTMyNTQxNDM0LCAiYXZnIjogMzA2NzcwMjY4LjAsICJ1bml0Ijog
ImJ5dGVzIn19LCAiZGVzY3JpcHRpb24iOiAiV2l0aCBwYXRjaCIsICJicmFuY2giOiAid2Via2l0
LXRydW5rIiwgIndlYmtpdC1yZXZpc2lvbiI6ICIxMzk5MDMifSwgeyJ0aW1lc3RhbXAiOiAxMzU4
Mzg0NDg1LCAid2Via2l0LXJldmlzaW9uIjogIjEzOTkwMyIsICJkZXNjcmlwdGlvbiI6ICJXaXRo
b3V0IHBhdGNoIiwgImJyYW5jaCI6ICJ3ZWJraXQtdHJ1bmsiLCAicmVzdWx0cyI6IHsiTWVtb3J5
L2NoaWxkLW5vZGUtdHJhdmVyc2FsOkpTSGVhcCI6IHsibWluIjogOTAxMTIuMCwgIm1heCI6IDEy
NDIyNC4wLCAibWVkaWFuIjogMTE0MzQ0LjAsICJ2YWx1ZXMiOiBbOTAxMTIuMCwgOTUwMDguMCwg
OTcyMTYuMCwgOTk1MTIuMCwgMTAxNzIwLjAsIDEwNDE5Mi4wLCAxMDY0MDAuMCwgMTA4NjA4LjAs
IDExMDg0OC4wLCAxMTMyNDAuMCwgMTE1NDQ4LjAsIDExODIwOC4wLCAxMjE0NDAuMCwgMTIyNjI0
LjAsIDEyMzc0NC4wLCAxMjM4NDAuMCwgMTIzOTM2LjAsIDEyNDAzMi4wLCAxMjQxMjguMCwgMTI0
MjI0LjBdLCAic3RkZXYiOiAxMTM5MS4wNzk3OTcyNTIyNSwgImF2ZyI6IDExMjQyNC4wLCAidW5p
dCI6ICJieXRlcyJ9LCAiTWVtb3J5L2NoaWxkLW5vZGUtdHJhdmVyc2FsIjogeyJtaW4iOiAyODgy
LjAsICJtYXgiOiAzMzcwLjAsICJtZWRpYW4iOiAzMTMxLjUsICJ2YWx1ZXMiOiBbMjkzNC4wLCAz
MzIwLjAsIDI4ODUuMCwgMzM1NS4wLCAyOTMzLjAsIDMzNDIuMCwgMjg5Ni4wLCAzMzI5LjAsIDI5
MjAuMCwgMzM3MC4wLCAyODgyLjAsIDMyOTEuMCwgMjkzOS4wLCAzMjkzLjAsIDI4ODMuMCwgMzI5
Ni4wLCAyOTQyLjAsIDMzMzAuMCwgMjk3Mi4wLCAzMzYzLjBdLCAic3RkZXYiOiAyMTIuNDgzMDMz
Mzc4Mzk1MzYsICJhdmciOiAzMTIzLjc1LCAidW5pdCI6ICJtcyJ9LCAiTWVtb3J5L2NoaWxkLW5v
ZGUtdHJhdmVyc2FsOk1hbGxvYyI6IHsibWluIjogMzE1NDM1MzQ0LjAsICJtYXgiOiAzMjAzNzYy
NjQuMCwgIm1lZGlhbiI6IDMxNjIxNDIyMC4wLCAidmFsdWVzIjogWzMxNjI4OTQwMC4wLCAzMTYz
MTIzODQuMCwgMzE2MzAxNDgwLjAsIDMxNjI2NjY4OC4wLCAzMTU0NDUwNzIuMCwgMzE2MjY0MDQ4
LjAsIDMxNTQ2ODY4MC4wLCAzMTYxNjY1MzYuMCwgMzE1NDM1MzQ0LjAsIDMxNjE5MDEzNi4wLCAz
MTYzMTI2NTYuMCwgMzE2MTYwNTkyLjAsIDMxNjI1NDAxNi4wLCAzMTU5OTYwOTYuMCwgMzIwMzc2
MjY0LjAsIDMxNjEzNTE3Ni4wLCAzMTYyMzgzMDQuMCwgMzE2MTE0MzM2LjAsIDMyMDI5NzU2MC4w
LCAzMTU5MjM0ODguMF0sICJzdGRldiI6IDEzNDQzOTIuNDEzNzU2MjAxNSwgImF2ZyI6IDMxNjQ5
NzQxMi44LCAidW5pdCI6ICJieXRlcyJ9fX0sIHsidGltZXN0YW1wIjogMTM1ODM4NDY1NSwgImRl
c2NyaXB0aW9uIjogIldpdGhvdXQgcGF0Y2giLCAicmVzdWx0cyI6IHsiTWVtb3J5L2NoaWxkLW5v
ZGUtdHJhdmVyc2FsOkpTSGVhcCI6IHsibWluIjogOTAxMTIuMCwgIm1heCI6IDEyNDIyNC4wLCAi
bWVkaWFuIjogMTE0MzQ0LjAsICJ2YWx1ZXMiOiBbOTAxMTIuMCwgOTUwMDguMCwgOTcyMTYuMCwg
OTk1MTIuMCwgMTAxNzIwLjAsIDEwNDE5Mi4wLCAxMDY0MDAuMCwgMTA4NjA4LjAsIDExMDg0OC4w
LCAxMTMyNDAuMCwgMTE1NDQ4LjAsIDExODIwOC4wLCAxMjE0NDAuMCwgMTIyNjI0LjAsIDEyMzc0
NC4wLCAxMjM4NDAuMCwgMTIzOTM2LjAsIDEyNDAzMi4wLCAxMjQxMjguMCwgMTI0MjI0LjBdLCAi
c3RkZXYiOiAxMTM5MS4wNzk3OTcyNTIyNSwgImF2ZyI6IDExMjQyNC4wLCAidW5pdCI6ICJieXRl
cyJ9LCAiTWVtb3J5L2NoaWxkLW5vZGUtdHJhdmVyc2FsIjogeyJtaW4iOiAyODU2LjAsICJtYXgi
OiAzMzE1LjAsICJtZWRpYW4iOiAzMDk5LjAsICJ2YWx1ZXMiOiBbMjkwOS4wLCAzMzE1LjAsIDI4
NTYuMCwgMzI4OS4wLCAyODU4LjAsIDMyOTkuMCwgMjg2Mi4wLCAzMjg5LjAsIDI4NjYuMCwgMzI5
OC4wLCAyODYzLjAsIDMzMDAuMCwgMjg2Ni4wLCAzMzAxLjAsIDI4NjQuMCwgMzI5My4wLCAyODYz
LjAsIDMyOTcuMCwgMjg2Ni4wLCAzMjk4LjBdLCAic3RkZXYiOiAyMjEuMTkzNzQ2OTM3NDA5MSwg
ImF2ZyI6IDMwODIuNiwgInVuaXQiOiAibXMifSwgIk1lbW9yeS9jaGlsZC1ub2RlLXRyYXZlcnNh
bDpNYWxsb2MiOiB7Im1pbiI6IDMxNTQ1MTQyNC4wLCAibWF4IjogMzIwNDY5NzM2LjAsICJtZWRp
YW4iOiAzMTYyODExNjguMCwgInZhbHVlcyI6IFszMTYyODU2NDAuMCwgMzE2MzAwMzY4LjAsIDMx
ODQ2MDQwOC4wLCAzMTYyMTUxMjguMCwgMzE3NDgyMDk2LjAsIDMxNjIyMjczNi4wLCAzMTc2Njcz
MDQuMCwgMzE2MTQyMzIwLjAsIDMxNjI3NjY5Ni4wLCAzMTYxMDQ3NjguMCwgMzIwNDI4NDU2LjAs
IDMxNjE3ODQ1Ni4wLCAzMjA0MzUxNjguMCwgMzE1NDUxNDI0LjAsIDMyMDM1OTE2MC4wLCAzMTU0
Njg3OTIuMCwgMzIwNDY5NzM2LjAsIDMxNjA1MjEzNi4wLCAzMjAyNjA4NTYuMCwgMzE1OTYwNDI0
LjBdLCAic3RkZXYiOiAxOTAwMzkxLjExOTg5MDU3NDQsICJhdmciOiAzMTc0MTExMDMuNiwgInVu
aXQiOiAiYnl0ZXMifX0sICJicmFuY2giOiAid2Via2l0LXRydW5rIiwgIndlYmtpdC1yZXZpc2lv
biI6ICIxMzk5MDMifSwgeyJ0aW1lc3RhbXAiOiAxMzU4Mzg1MzY2LCAid2Via2l0LXJldmlzaW9u
IjogIjEzOTkwMyIsICJyZXN1bHRzIjogeyJNZW1vcnkvY2hpbGQtbm9kZS10cmF2ZXJzYWw6SlNI
ZWFwIjogeyJtaW4iOiA5MDExMi4wLCAibWF4IjogMTI0MjI0LjAsICJtZWRpYW4iOiAxMTQzNDQu
MCwgInZhbHVlcyI6IFs5MDExMi4wLCA5NTAwOC4wLCA5NzIxNi4wLCA5OTUxMi4wLCAxMDE3MjAu
MCwgMTA0MTkyLjAsIDEwNjQwMC4wLCAxMDg2MDguMCwgMTEwODQ4LjAsIDExMzI0MC4wLCAxMTU0
NDguMCwgMTE4MjA4LjAsIDEyMTQ0MC4wLCAxMjI2MjQuMCwgMTIzNzQ0LjAsIDEyMzg0MC4wLCAx
MjM5MzYuMCwgMTI0MDMyLjAsIDEyNDEyOC4wLCAxMjQyMjQuMF0sICJzdGRldiI6IDExMzkxLjA3
OTc5NzI1MjI1LCAiYXZnIjogMTEyNDI0LjAsICJ1bml0IjogImJ5dGVzIn0sICJNZW1vcnkvY2hp
bGQtbm9kZS10cmF2ZXJzYWwiOiB7Im1pbiI6IDI4NTguMCwgIm1heCI6IDMzNDEuMCwgIm1lZGlh
biI6IDMwOTIuMCwgInZhbHVlcyI6IFsyOTE0LjAsIDMzNDEuMCwgMjg4OC4wLCAzMjcwLjAsIDI5
MDEuMCwgMzI4MS4wLCAyODk4LjAsIDMzMDAuMCwgMjkwMi4wLCAzMjk3LjAsIDI4NTguMCwgMzI4
NC4wLCAyOTAyLjAsIDMzMDMuMCwgMjg3Mi4wLCAzMzAyLjAsIDI4ODEuMCwgMzMyNi4wLCAyODcx
LjAsIDMzMzIuMF0sICJzdGRldiI6IDIxMy43Nzg4NTE1NDYyMjA4LCAiYXZnIjogMzA5Ni4xNSwg
InVuaXQiOiAibXMifSwgIk1lbW9yeS9jaGlsZC1ub2RlLXRyYXZlcnNhbDpNYWxsb2MiOiB7Im1p
biI6IDMxNTQ0OTA1Ni4wLCAibWF4IjogMzIwMjIyMzkyLjAsICJtZWRpYW4iOiAzMTYxOTMwNDgu
MCwgInZhbHVlcyI6IFszMTYyODkzNTIuMCwgMzE2MjkzMzc2LjAsIDMxNjI5NzMyMC4wLCAzMTYz
NDgwMDAuMCwgMzE2MzcwNzEyLjAsIDMxNjI0NDkwNC4wLCAzMTU1NTc2MTYuMCwgMzE2MjA3NjY0
LjAsIDMxNjI0NTE2OC4wLCAzMTU0NDkwNTYuMCwgMzE1NDc5OTkyLjAsIDMxNjE4MTczNi4wLCAz
MTU2MDgyNDAuMCwgMzE2MDk2MTc2LjAsIDMxNTYyOTE5Mi4wLCAzMTU1MDg3NDQuMCwgMzE1NjI3
OTg0LjAsIDMxNjEyMzM2MC4wLCAzMTYyMDQzNjAuMCwgMzIwMjIyMzkyLjBdLCAic3RkZXYiOiAx
MDA2NjYxLjgyODA2MjY2MDEsICJhdmciOiAzMTYxOTkyNjcuMiwgInVuaXQiOiAiYnl0ZXMifX0s
ICJicmFuY2giOiAid2Via2l0LXRydW5rIiwgImRlc2NyaXB0aW9uIjogIldpdGhvdXQgcGF0Y2gi
fV08L3NjcmlwdD4KPC9ib2R5Pgo8L2h0bWw+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>