<?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>235271</bug_id>
          
          <creation_ts>2022-01-15 12:37:09 -0800</creation_ts>
          <short_desc>[JSC] Fix Date functions&apos; argument coercion</short_desc>
          <delta_ts>2022-01-22 16:21:50 -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>New Bugs</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>ashvayka</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1831234</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-01-15 12:37:09 -0800</bug_when>
    <thetext>[JSC] Fix Date functions&apos; argument coercion</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1831235</commentid>
    <comment_count>1</comment_count>
      <attachid>449265</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-01-15 12:39:17 -0800</bug_when>
    <thetext>Created attachment 449265
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1831237</commentid>
    <comment_count>2</comment_count>
      <attachid>449265</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2022-01-15 12:44:38 -0800</bug_when>
    <thetext>Comment on attachment 449265
Patch

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

Super neat!

&gt; Source/JavaScriptCore/ChangeLog:9
&gt; +        arguments to Number since it has observable side effect.

We might want to link spec PR: https://github.com/tc39/ecma262/pull/2136.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1831241</commentid>
    <comment_count>3</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-01-15 12:58:40 -0800</bug_when>
    <thetext>(In reply to Alexey Shvayka from comment #2)
&gt; Comment on attachment 449265 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=449265&amp;action=review
&gt; 
&gt; Super neat!
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:9
&gt; &gt; +        arguments to Number since it has observable side effect.
&gt; 
&gt; We might want to link spec PR: https://github.com/tc39/ecma262/pull/2136.

Nice, done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1831248</commentid>
    <comment_count>4</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-01-15 13:35:12 -0800</bug_when>
    <thetext>Committed r288066 (246086@trunk): &lt;https://commits.webkit.org/246086@trunk&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1831249</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-01-15 13:36:16 -0800</bug_when>
    <thetext>&lt;rdar://problem/87641688&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1831332</commentid>
    <comment_count>6</comment_count>
      <attachid>449265</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-01-16 13:53:49 -0800</bug_when>
    <thetext>Comment on attachment 449265
Patch

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

Love patches like this one, beautifully done.

&gt; Source/JavaScriptCore/runtime/DatePrototype.cpp:113
&gt; +static void applyToNumbersToTrashedArguments(JSGlobalObject* globalObject, CallFrame* callFrame, unsigned maxArgs)

Terminology nitpicks: I would have called these &quot;otherwise ignored&quot; arguments, not &quot;trashed&quot; arguments. Also, should be &quot;ToNumber&quot; not &quot;ToNumbers&quot;.

&gt; Source/JavaScriptCore/runtime/DatePrototype.cpp:118
&gt; +    unsigned numArgs = std::min&lt;unsigned&gt;(callFrame-&gt;argumentCount(), maxArgs);

Not a problem in practice, but a subtle point about what &lt;unsigned&gt; means here is that that we *chop* argumentCount from size_t to unsigned, ignoring the high bits. So if we had a colossal argument count (which I suppose is impossible?) we could overflow and not apply toNumber to some of the arguments (which I suppose is relatively harmless).

Not sure why size_t was the right type for argumentCount and yet unsigned is the right type for maxArgs, but this is the kind of thing that worries me when I see it, in principle.

&gt; Source/JavaScriptCore/runtime/DatePrototype.cpp:136
&gt; +    unsigned numArgs = std::min&lt;unsigned&gt;(callFrame-&gt;argumentCount(), maxArgs);

Same thing here.

&gt; Source/JavaScriptCore/runtime/DatePrototype.cpp:185
&gt; +    unsigned numArgs = std::min&lt;unsigned&gt;(callFrame-&gt;argumentCount(), maxArgs);

Here too.

&gt; Source/JavaScriptCore/runtime/DatePrototype.cpp:191
&gt; +        ok = (ok &amp;&amp; std::isfinite(years));

Not sure the parentheses add clarity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1832963</commentid>
    <comment_count>7</comment_count>
      <attachid>449265</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-01-21 18:59:55 -0800</bug_when>
    <thetext>Comment on attachment 449265
Patch

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

Thanks!

&gt;&gt; Source/JavaScriptCore/runtime/DatePrototype.cpp:113
&gt;&gt; +static void applyToNumbersToTrashedArguments(JSGlobalObject* globalObject, CallFrame* callFrame, unsigned maxArgs)
&gt; 
&gt; Terminology nitpicks: I would have called these &quot;otherwise ignored&quot; arguments, not &quot;trashed&quot; arguments. Also, should be &quot;ToNumber&quot; not &quot;ToNumbers&quot;.

Right, changed.

&gt;&gt; Source/JavaScriptCore/runtime/DatePrototype.cpp:118
&gt;&gt; +    unsigned numArgs = std::min&lt;unsigned&gt;(callFrame-&gt;argumentCount(), maxArgs);
&gt; 
&gt; Not a problem in practice, but a subtle point about what &lt;unsigned&gt; means here is that that we *chop* argumentCount from size_t to unsigned, ignoring the high bits. So if we had a colossal argument count (which I suppose is impossible?) we could overflow and not apply toNumber to some of the arguments (which I suppose is relatively harmless).
&gt; 
&gt; Not sure why size_t was the right type for argumentCount and yet unsigned is the right type for maxArgs, but this is the kind of thing that worries me when I see it, in principle.

Actually, argumentCount() is stored in 32bit field, so it is unsigned (since it is never negative) :)

&gt;&gt; Source/JavaScriptCore/runtime/DatePrototype.cpp:136
&gt;&gt; +    unsigned numArgs = std::min&lt;unsigned&gt;(callFrame-&gt;argumentCount(), maxArgs);
&gt; 
&gt; Same thing here.

Ditto.

&gt;&gt; Source/JavaScriptCore/runtime/DatePrototype.cpp:185
&gt;&gt; +    unsigned numArgs = std::min&lt;unsigned&gt;(callFrame-&gt;argumentCount(), maxArgs);
&gt; 
&gt; Here too.

Ditto.

&gt;&gt; Source/JavaScriptCore/runtime/DatePrototype.cpp:191
&gt;&gt; +        ok = (ok &amp;&amp; std::isfinite(years));
&gt; 
&gt; Not sure the parentheses add clarity.

Removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1832964</commentid>
    <comment_count>8</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-01-21 19:03:12 -0800</bug_when>
    <thetext>Committed r288399 (246290@trunk): &lt;https://commits.webkit.org/246290@trunk&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1833028</commentid>
    <comment_count>9</comment_count>
      <attachid>449265</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-01-22 13:47:55 -0800</bug_when>
    <thetext>Comment on attachment 449265
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/runtime/DatePrototype.cpp:118
&gt;&gt;&gt; +    unsigned numArgs = std::min&lt;unsigned&gt;(callFrame-&gt;argumentCount(), maxArgs);
&gt;&gt; 
&gt;&gt; Not a problem in practice, but a subtle point about what &lt;unsigned&gt; means here is that that we *chop* argumentCount from size_t to unsigned, ignoring the high bits. So if we had a colossal argument count (which I suppose is impossible?) we could overflow and not apply toNumber to some of the arguments (which I suppose is relatively harmless).
&gt;&gt; 
&gt;&gt; Not sure why size_t was the right type for argumentCount and yet unsigned is the right type for maxArgs, but this is the kind of thing that worries me when I see it, in principle.
&gt; 
&gt; Actually, argumentCount() is stored in 32bit field, so it is unsigned (since it is never negative) :)

Maybe we should use unsigned or uint32_t instead of size_t for the return type for the argumentCount() function, then?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1833056</commentid>
    <comment_count>10</comment_count>
      <attachid>449265</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-01-22 16:21:50 -0800</bug_when>
    <thetext>Comment on attachment 449265
Patch

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

&gt;&gt;&gt;&gt; Source/JavaScriptCore/runtime/DatePrototype.cpp:118
&gt;&gt;&gt;&gt; +    unsigned numArgs = std::min&lt;unsigned&gt;(callFrame-&gt;argumentCount(), maxArgs);
&gt;&gt;&gt; 
&gt;&gt;&gt; Not a problem in practice, but a subtle point about what &lt;unsigned&gt; means here is that that we *chop* argumentCount from size_t to unsigned, ignoring the high bits. So if we had a colossal argument count (which I suppose is impossible?) we could overflow and not apply toNumber to some of the arguments (which I suppose is relatively harmless).
&gt;&gt;&gt; 
&gt;&gt;&gt; Not sure why size_t was the right type for argumentCount and yet unsigned is the right type for maxArgs, but this is the kind of thing that worries me when I see it, in principle.
&gt;&gt; 
&gt;&gt; Actually, argumentCount() is stored in 32bit field, so it is unsigned (since it is never negative) :)
&gt; 
&gt; Maybe we should use unsigned or uint32_t instead of size_t for the return type for the argumentCount() function, then?

Yeah, it should be. But we need to carefully review whether the existing code is effectively using size_t to handle some cases in that change :)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>449265</attachid>
            <date>2022-01-15 12:39:17 -0800</date>
            <delta_ts>2022-01-15 12:44:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-235271-20220115123916.patch</filename>
            <type>text/plain</type>
            <size>15043</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4MDYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
MGNjNWUzNTZlZGU4NGFjZTcyYTYyYzUyZTJjMGRlYjdiOTllZmJhLi4xMDlkZDBhOTg2MzcwNjk1
NzBhMWEwY2Q3MmY2YTllNDNiNzc1MzI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMCBAQAorMjAyMi0wMS0xNSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIEZpeCBEYXRlIGZ1bmN0aW9ucycgYXJndW1lbnQgY29lcmNpb24K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNTI3MQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV2ZW4gaWYg
dGhlIGlucHV0IERhdGUgaXMgTmFOIG9yIHRoZSByZXN1bHQgbG9va3MgbGlrZSBOYU4sIHdlIG5l
ZWQgdG8gY29lcmNlIHBhc3NlZAorICAgICAgICBhcmd1bWVudHMgdG8gTnVtYmVyIHNpbmNlIGl0
IGhhcyBvYnNlcnZhYmxlIHNpZGUgZWZmZWN0LgorCisgICAgICAgICogcnVudGltZS9EYXRlUHJv
dG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6YXBwbHlUb051bWJlcnNUb1RyYXNoZWRBcmd1bWVu
dHMpOgorICAgICAgICAoSlNDOjpmaWxsU3RydWN0dXJlc1VzaW5nVGltZUFyZ3MpOgorICAgICAg
ICAoSlNDOjpmaWxsU3RydWN0dXJlc1VzaW5nRGF0ZUFyZ3MpOgorICAgICAgICAoSlNDOjpzZXRO
ZXdWYWx1ZUZyb21UaW1lQXJncyk6CisgICAgICAgIChKU0M6OnNldE5ld1ZhbHVlRnJvbURhdGVB
cmdzKToKKwogMjAyMi0wMS0xNCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPiBh
bmQgTWlraGFpbCBSLiBHYWRlbGhhICA8bWlraGFpbEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtK
U0NdIEZpeCBMaW51eCA2NGJpdCBjb21waWxhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmNwcAppbmRleCAzZTkzMTU0ZTJhMmUxZmUzN2ViNzU5
YTQ0YmY3MDc3NTYzY2RiN2U0Li5mYTMyM2FkMDJmYmMwMzgzNjBmN2U3YTU4Y2ZlYjFjZTQ5NzBh
MzEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90
eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBl
LmNwcApAQCAtMTA5LDEwMyArMTA5LDEwMCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgZm9ybWF0
ZURhdGVJbnN0YW5jZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbQogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOb250cml2aWFsU3RyaW5nKHZtLCBmb3JtYXREYXRl
VGltZSgqZ3JlZ29yaWFuRGF0ZVRpbWUsIGZvcm1hdCwgYXNVVENWYXJpYW50KSkpOwogfQogCisK
K3N0YXRpYyB2b2lkIGFwcGx5VG9OdW1iZXJzVG9UcmFzaGVkQXJndW1lbnRzKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCB1bnNpZ25lZCBtYXhBcmdz
KQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICB1bnNpZ25lZCBudW1BcmdzID0gc3RkOjpt
aW48dW5zaWduZWQ+KGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpLCBtYXhBcmdzKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBudW1BcmdzOyArK2luZGV4KSB7CisgICAg
ICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoaW5kZXgpLnRvTnVtYmVyKGdsb2JhbE9i
amVjdCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CisgICAg
fQorfQorCiAvLyBDb252ZXJ0cyBhIGxpc3Qgb2YgYXJndW1lbnRzIHNlbnQgdG8gYSBEYXRlIG1l
bWJlciBmdW5jdGlvbiBpbnRvIG1pbGxpc2Vjb25kcywgdXBkYXRpbmcKIC8vIG1zIChyZXByZXNl
bnRpbmcgbWlsbGlzZWNvbmRzKSBhbmQgdCAocmVwcmVzZW50aW5nIHRoZSByZXN0IG9mIHRoZSBk
YXRlIHN0cnVjdHVyZSkgYXBwcm9wcmlhdGVseS4KIC8vCiAvLyBGb3JtYXQgb2YgbWVtYmVyIGZ1
bmN0aW9uOiBmKFtob3VyLF0gW21pbixdIFtzZWMsXSBbbXNdKQotc3RhdGljIGJvb2wgZmlsbFN0
cnVjdHVyZXNVc2luZ1RpbWVBcmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxG
cmFtZSogY2FsbEZyYW1lLCBpbnQgbWF4QXJncywgZG91YmxlKiBtcywgR3JlZ29yaWFuRGF0ZVRp
bWUqIHQpCitzdGF0aWMgYm9vbCBmaWxsU3RydWN0dXJlc1VzaW5nVGltZUFyZ3MoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIHVuc2lnbmVkIG1heEFy
Z3MsIGRvdWJsZSogbXMsIEdyZWdvcmlhbkRhdGVUaW1lKiB0KQogewogICAgIFZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAKICAgICBkb3VibGUgbWlsbGlzZWNvbmRzID0gMDsKLSAgICBib29sIG9rID0gdHJ1ZTsK
LSAgICBpbnQgaWR4ID0gMDsKLSAgICBpbnQgbnVtQXJncyA9IGNhbGxGcmFtZS0+YXJndW1lbnRD
b3VudCgpOwotICAgIAotICAgIC8vIEpTIGFsbG93cyBleHRyYSB0cmFpbGluZyBhcmd1bWVudHMg
LS0gaWdub3JlIHRoZW0KLSAgICBpZiAobnVtQXJncyA+IG1heEFyZ3MpCi0gICAgICAgIG51bUFy
Z3MgPSBtYXhBcmdzOworICAgIHVuc2lnbmVkIGlkeCA9IDA7CisgICAgdW5zaWduZWQgbnVtQXJn
cyA9IHN0ZDo6bWluPHVuc2lnbmVkPihjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSwgbWF4QXJn
cyk7CiAKICAgICAvLyBob3VycwogICAgIGlmIChtYXhBcmdzID49IDQgJiYgaWR4IDwgbnVtQXJn
cykgewogICAgICAgICB0LT5zZXRIb3VyKDApOwogICAgICAgICBkb3VibGUgaG91cnMgPSBjYWxs
RnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KGlkeCsrKS50b0ludGVnZXJQcmVzZXJ2ZU5hTihnbG9i
YWxPYmplY3QpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0g
ICAgICAgIG9rID0gc3RkOjppc2Zpbml0ZShob3Vycyk7CiAgICAgICAgIG1pbGxpc2Vjb25kcyAr
PSBob3VycyAqIG1zUGVySG91cjsKICAgICB9CiAKICAgICAvLyBtaW51dGVzCi0gICAgaWYgKG1h
eEFyZ3MgPj0gMyAmJiBpZHggPCBudW1BcmdzICYmIG9rKSB7CisgICAgaWYgKG1heEFyZ3MgPj0g
MyAmJiBpZHggPCBudW1BcmdzKSB7CiAgICAgICAgIHQtPnNldE1pbnV0ZSgwKTsKICAgICAgICAg
ZG91YmxlIG1pbnV0ZXMgPSBjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KGlkeCsrKS50b0lu
dGVnZXJQcmVzZXJ2ZU5hTihnbG9iYWxPYmplY3QpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBmYWxzZSk7Ci0gICAgICAgIG9rID0gc3RkOjppc2Zpbml0ZShtaW51dGVzKTsK
ICAgICAgICAgbWlsbGlzZWNvbmRzICs9IG1pbnV0ZXMgKiBtc1Blck1pbnV0ZTsKICAgICB9Ci0g
ICAgCisKICAgICAvLyBzZWNvbmRzCi0gICAgaWYgKG1heEFyZ3MgPj0gMiAmJiBpZHggPCBudW1B
cmdzICYmIG9rKSB7CisgICAgaWYgKG1heEFyZ3MgPj0gMiAmJiBpZHggPCBudW1BcmdzKSB7CiAg
ICAgICAgIHQtPnNldFNlY29uZCgwKTsKICAgICAgICAgZG91YmxlIHNlY29uZHMgPSBjYWxsRnJh
bWUtPnVuY2hlY2tlZEFyZ3VtZW50KGlkeCsrKS50b0ludGVnZXJQcmVzZXJ2ZU5hTihnbG9iYWxP
YmplY3QpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0gICAg
ICAgIG9rID0gc3RkOjppc2Zpbml0ZShzZWNvbmRzKTsKICAgICAgICAgbWlsbGlzZWNvbmRzICs9
IHNlY29uZHMgKiBtc1BlclNlY29uZDsKICAgICB9Ci0gICAgCi0gICAgaWYgKCFvaykKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKKwogICAgIC8vIG1pbGxpc2Vjb25kcwogICAgIGlm
IChpZHggPCBudW1BcmdzKSB7CiAgICAgICAgIGRvdWJsZSBtaWxsaXMgPSBjYWxsRnJhbWUtPnVu
Y2hlY2tlZEFyZ3VtZW50KGlkeCkudG9JbnRlZ2VyUHJlc2VydmVOYU4oZ2xvYmFsT2JqZWN0KTsK
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwotICAgICAgICBvayA9
IHN0ZDo6aXNmaW5pdGUobWlsbGlzKTsKICAgICAgICAgbWlsbGlzZWNvbmRzICs9IG1pbGxpczsK
ICAgICB9IGVsc2UKICAgICAgICAgbWlsbGlzZWNvbmRzICs9ICptczsKLSAgICAKKwogICAgICpt
cyA9IG1pbGxpc2Vjb25kczsKLSAgICByZXR1cm4gb2s7CisgICAgcmV0dXJuIHN0ZDo6aXNmaW5p
dGUobWlsbGlzZWNvbmRzKTsKIH0KIAogLy8gQ29udmVydHMgYSBsaXN0IG9mIGFyZ3VtZW50cyBz
ZW50IHRvIGEgRGF0ZSBtZW1iZXIgZnVuY3Rpb24gaW50byB5ZWFycywgbW9udGhzLCBhbmQgbWls
bGlzZWNvbmRzLCB1cGRhdGluZwogLy8gbXMgKHJlcHJlc2VudGluZyBtaWxsaXNlY29uZHMpIGFu
ZCB0IChyZXByZXNlbnRpbmcgdGhlIHJlc3Qgb2YgdGhlIGRhdGUgc3RydWN0dXJlKSBhcHByb3By
aWF0ZWx5LgogLy8KIC8vIEZvcm1hdCBvZiBtZW1iZXIgZnVuY3Rpb246IGYoW3llYXJzLF0gW21v
bnRocyxdIFtkYXlzXSkKLXN0YXRpYyBib29sIGZpbGxTdHJ1Y3R1cmVzVXNpbmdEYXRlQXJncyhK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgaW50IG1h
eEFyZ3MsIGRvdWJsZSAqbXMsIEdyZWdvcmlhbkRhdGVUaW1lICp0KQorc3RhdGljIGJvb2wgZmls
bFN0cnVjdHVyZXNVc2luZ0RhdGVBcmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bGxGcmFtZSogY2FsbEZyYW1lLCB1bnNpZ25lZCBtYXhBcmdzLCBkb3VibGUgKm1zLCBHcmVnb3Jp
YW5EYXRlVGltZSAqdCkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgaW50IGlkeCA9IDA7
CiAgICAgYm9vbCBvayA9IHRydWU7Ci0gICAgaW50IG51bUFyZ3MgPSBjYWxsRnJhbWUtPmFyZ3Vt
ZW50Q291bnQoKTsKLSAgCi0gICAgLy8gSlMgYWxsb3dzIGV4dHJhIHRyYWlsaW5nIGFyZ3VtZW50
cyAtLSBpZ25vcmUgdGhlbQotICAgIGlmIChudW1BcmdzID4gbWF4QXJncykKLSAgICAgICAgbnVt
QXJncyA9IG1heEFyZ3M7CisgICAgdW5zaWduZWQgaWR4ID0gMDsKKyAgICB1bnNpZ25lZCBudW1B
cmdzID0gc3RkOjptaW48dW5zaWduZWQ+KGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpLCBtYXhB
cmdzKTsKICAgCiAgICAgLy8geWVhcnMKICAgICBpZiAobWF4QXJncyA+PSAzICYmIGlkeCA8IG51
bUFyZ3MpIHsKICAgICAgICAgZG91YmxlIHllYXJzID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1
bWVudChpZHgrKykudG9JbnRlZ2VyUHJlc2VydmVOYU4oZ2xvYmFsT2JqZWN0KTsKICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwotICAgICAgICBvayA9IHN0ZDo6aXNm
aW5pdGUoeWVhcnMpOworICAgICAgICBvayA9IChvayAmJiBzdGQ6OmlzZmluaXRlKHllYXJzKSk7
CiAgICAgICAgIHQtPnNldFllYXIodG9JbnQzMih5ZWFycykpOwogICAgIH0KICAgICAvLyBtb250
aHMKLSAgICBpZiAobWF4QXJncyA+PSAyICYmIGlkeCA8IG51bUFyZ3MgJiYgb2spIHsKKyAgICBp
ZiAobWF4QXJncyA+PSAyICYmIGlkeCA8IG51bUFyZ3MpIHsKICAgICAgICAgZG91YmxlIG1vbnRo
cyA9IGNhbGxGcmFtZS0+dW5jaGVja2VkQXJndW1lbnQoaWR4KyspLnRvSW50ZWdlclByZXNlcnZl
TmFOKGdsb2JhbE9iamVjdCk7CiAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZh
bHNlKTsKLSAgICAgICAgb2sgPSBzdGQ6OmlzZmluaXRlKG1vbnRocyk7CisgICAgICAgIG9rID0g
KG9rICYmIHN0ZDo6aXNmaW5pdGUobW9udGhzKSk7CiAgICAgICAgIHQtPnNldE1vbnRoKHRvSW50
MzIobW9udGhzKSk7CiAgICAgfQogICAgIC8vIGRheXMKLSAgICBpZiAoaWR4IDwgbnVtQXJncyAm
JiBvaykgeworICAgIGlmIChpZHggPCBudW1BcmdzKSB7CiAgICAgICAgIGRvdWJsZSBkYXlzID0g
Y2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVudChpZHgrKykudG9JbnRlZ2VyUHJlc2VydmVOYU4o
Z2xvYmFsT2JqZWN0KTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2Up
OwotICAgICAgICBvayA9IHN0ZDo6aXNmaW5pdGUoZGF5cyk7CisgICAgICAgIG9rID0gKG9rICYm
IHN0ZDo6aXNmaW5pdGUoZGF5cykpOwogICAgICAgICB0LT5zZXRNb250aERheSgwKTsKICAgICAg
ICAgKm1zICs9IGRheXMgKiBtc1BlckRheTsKICAgICB9CkBAIC02NjgsNyArNjY1LDcgQEAgSlND
X0RFRklORV9IT1NUX0ZVTkNUSU9OKGRhdGVQcm90b0Z1bmNTZXRUaW1lLCAoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ2EKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVy
KG1pbGxpKSk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBzZXROZXdWYWx1ZUZyb21UaW1l
QXJncyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
aW50IG51bUFyZ3NUb1VzZSwgV1RGOjpUaW1lVHlwZSBpbnB1dFRpbWVUeXBlKQorc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIHNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCB1bnNpZ25lZCBudW1BcmdzVG9Vc2UsIFdU
Rjo6VGltZVR5cGUgaW5wdXRUaW1lVHlwZSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpAQCAtNjgy
LDYgKzY3OSw4IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBzZXROZXdWYWx1ZUZyb21UaW1lQXJn
cyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsCiAgICAgZG91YmxlIG1pbGxpID0g
dGhpc0RhdGVPYmotPmludGVybmFsTnVtYmVyKCk7CiAKICAgICBpZiAoIWNhbGxGcmFtZS0+YXJn
dW1lbnRDb3VudCgpIHx8IHN0ZDo6aXNuYW4obWlsbGkpKSB7CisgICAgICAgIGFwcGx5VG9OdW1i
ZXJzVG9UcmFzaGVkQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBudW1BcmdzVG9V
c2UpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogICAgICAgICB0
aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxOdW1iZXIoUE5hTik7CiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNOYU4oKSk7CiAgICAgfQpAQCAtNjkyLDEyICs2OTEsMTUgQEAgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIHNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIENhbGwKICAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogb3RoZXIgPSBp
bnB1dFRpbWVUeXBlID09IFdURjo6VVRDVGltZQogICAgICAgICA/IHRoaXNEYXRlT2JqLT5ncmVn
b3JpYW5EYXRlVGltZVVUQyhjYWNoZSkKICAgICAgICAgOiB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFu
RGF0ZVRpbWUoY2FjaGUpOwotICAgIGlmICghb3RoZXIpCisgICAgaWYgKCFvdGhlcikgeworICAg
ICAgICBhcHBseVRvTnVtYmVyc1RvVHJhc2hlZEFyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGNhbGxG
cmFtZSwgbnVtQXJnc1RvVXNlKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05hTigpKTsKKyAgICB9CiAK
ICAgICBHcmVnb3JpYW5EYXRlVGltZSBncmVnb3JpYW5EYXRlVGltZSgqb3RoZXIpOwogICAgIGJv
b2wgc3VjY2VzcyA9IGZpbGxTdHJ1Y3R1cmVzVXNpbmdUaW1lQXJncyhnbG9iYWxPYmplY3QsIGNh
bGxGcmFtZSwgbnVtQXJnc1RvVXNlLCAmbXMsICZncmVnb3JpYW5EYXRlVGltZSk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKICAgICBpZiAoIXN1Y2Nlc3MpIHsKICAgICAgICAgdGhp
c0RhdGVPYmotPnNldEludGVybmFsTnVtYmVyKFBOYU4pOwogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzTmFOKCkpOwpAQCAtNzA5LDcgKzcxMSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBzZXROZXdWYWx1ZUZyb21UaW1lQXJncyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBDYWxsCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihyZXN1bHQpKTsKIH0K
IAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIHNldE5ld1ZhbHVlRnJvbURhdGVBcmdzKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBpbnQgbnVtQXJnc1Rv
VXNlLCBXVEY6OlRpbWVUeXBlIGlucHV0VGltZVR5cGUpCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
c2V0TmV3VmFsdWVGcm9tRGF0ZUFyZ3MoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIHVuc2lnbmVkIG51bUFyZ3NUb1VzZSwgV1RGOjpUaW1lVHlwZSBp
bnB1dFRpbWVUeXBlKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CkBAIC03MjEsNiArNzIzLDggQEAg
c3RhdGljIEVuY29kZWRKU1ZhbHVlIHNldE5ld1ZhbHVlRnJvbURhdGVBcmdzKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGwKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
Z2xvYmFsT2JqZWN0LCBzY29wZSk7CiAKICAgICBpZiAoIWNhbGxGcmFtZS0+YXJndW1lbnRDb3Vu
dCgpKSB7CisgICAgICAgIGFwcGx5VG9OdW1iZXJzVG9UcmFzaGVkQXJndW1lbnRzKGdsb2JhbE9i
amVjdCwgY2FsbEZyYW1lLCBudW1BcmdzVG9Vc2UpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwogICAgICAgICB0aGlzRGF0ZU9iai0+c2V0SW50ZXJuYWxOdW1iZXIo
UE5hTik7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOYU4oKSk7CiAgICAgfQpA
QCAtNzM2LDEzICs3NDAsMTYgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHNldE5ld1ZhbHVlRnJv
bURhdGVBcmdzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGwKICAgICAgICAgY29u
c3QgR3JlZ29yaWFuRGF0ZVRpbWUqIG90aGVyID0gaW5wdXRUaW1lVHlwZSA9PSBXVEY6OlVUQ1Rp
bWUKICAgICAgICAgICAgID8gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lVVRDKGNhY2hl
KQogICAgICAgICAgICAgOiB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWUoY2FjaGUpOwot
ICAgICAgICBpZiAoIW90aGVyKQorICAgICAgICBpZiAoIW90aGVyKSB7CisgICAgICAgICAgICBh
cHBseVRvTnVtYmVyc1RvVHJhc2hlZEFyZ3VtZW50cyhnbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwg
bnVtQXJnc1RvVXNlKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTmFOKCkpOworICAgICAg
ICB9CiAgICAgICAgIGdyZWdvcmlhbkRhdGVUaW1lID0gKm90aGVyOwogICAgIH0KICAgICAKICAg
ICBib29sIHN1Y2Nlc3MgPSBmaWxsU3RydWN0dXJlc1VzaW5nRGF0ZUFyZ3MoZ2xvYmFsT2JqZWN0
LCBjYWxsRnJhbWUsIG51bUFyZ3NUb1VzZSwgJm1zLCAmZ3JlZ29yaWFuRGF0ZVRpbWUpOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgaWYgKCFzdWNjZXNzKSB7CiAgICAgICAg
IHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbE51bWJlcihQTmFOKTsKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc05hTigpKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIv
SlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZmMzOGZjYzhmZWM1YzdhMDE5M2MwMTkzNjZmNWZkZWYz
ZTFjZWE2Yy4uNGY5ZGJhZTY1OWY4OTQwMDE2NTg3NTZlOGMxYTE1ZDExYTdjMWU5ZSAxMDA2NDQK
LS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxMiBAQAorMjAyMi0wMS0xNSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgor
CisgICAgICAgIFtKU0NdIEZpeCBEYXRlIGZ1bmN0aW9ucycgYXJndW1lbnQgY29lcmNpb24KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNTI3MQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogdGVzdDI2Mi9l
eHBlY3RhdGlvbnMueWFtbDoKKwogMjAyMi0wMS0xNSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lA
YXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIFVwZ3JhZGUgdGVzdDI2MgpkaWZmIC0tZ2l0IGEv
SlNUZXN0cy90ZXN0MjYyL2V4cGVjdGF0aW9ucy55YW1sIGIvSlNUZXN0cy90ZXN0MjYyL2V4cGVj
dGF0aW9ucy55YW1sCmluZGV4IDgzNjUyY2Q0NzgxYTc4MmNmYTc2ODY3YzliNmMxYmIxZTdiYzkw
MTkuLmRjZWJmNjZhNjg5NjIzY2I2YzAwMTBlZDE2NWIwNTJkOWUyMjU5ZTUgMTAwNjQ0Ci0tLSBh
L0pTVGVzdHMvdGVzdDI2Mi9leHBlY3RhdGlvbnMueWFtbAorKysgYi9KU1Rlc3RzL3Rlc3QyNjIv
ZXhwZWN0YXRpb25zLnlhbWwKQEAgLTYwNiw0MiArNjA2LDYgQEAgdGVzdC9hbm5leEIvbGFuZ3Vh
Z2UvZ2xvYmFsLWNvZGUvc3dpdGNoLWRmbHQtZ2xvYmFsLXNraXAtZWFybHktZXJyLmpzOgogdGVz
dC9idWlsdC1pbnMvRGF0ZS9VVEMvZnAtZXZhbHVhdGlvbi1vcmRlci5qczoKICAgZGVmYXVsdDog
J1Rlc3QyNjJFcnJvcjogb3JkZXIgb2Ygb3BlcmF0aW9ucyAvIHByZWNpc2lvbiBpbiBNYWtlVGlt
ZSBFeHBlY3RlZCBTYW1lVmFsdWUowqtOYU7CuywgwqsyOTMxMsK7KSB0byBiZSB0cnVlJwogICBz
dHJpY3QgbW9kZTogJ1Rlc3QyNjJFcnJvcjogb3JkZXIgb2Ygb3BlcmF0aW9ucyAvIHByZWNpc2lv
biBpbiBNYWtlVGltZSBFeHBlY3RlZCBTYW1lVmFsdWUowqtOYU7CuywgwqsyOTMxMsK7KSB0byBi
ZSB0cnVlJwotdGVzdC9idWlsdC1pbnMvRGF0ZS9wcm90b3R5cGUvc2V0RGF0ZS9hcmctY29lcmNp
b24tb3JkZXIuanM6Ci0gIGRlZmF1bHQ6ICdUZXN0MjYyRXJyb3I6IFRvTnVtYmVyIGludm9rZWQg
ZXhhY3RseSBvbmNlIEV4cGVjdGVkIFNhbWVWYWx1ZSjCqzDCuywgwqsxwrspIHRvIGJlIHRydWUn
Ci0gIHN0cmljdCBtb2RlOiAnVGVzdDI2MkVycm9yOiBUb051bWJlciBpbnZva2VkIGV4YWN0bHkg
b25jZSBFeHBlY3RlZCBTYW1lVmFsdWUowqswwrssIMKrMcK7KSB0byBiZSB0cnVlJwotdGVzdC9i
dWlsdC1pbnMvRGF0ZS9wcm90b3R5cGUvc2V0SG91cnMvYXJnLWNvZXJjaW9uLW9yZGVyLmpzOgot
ICBkZWZhdWx0OiAnVGVzdDI2MkVycm9yOiBFeHBlY3RlZCBbXSBhbmQgW3ZhbHVlT2YgaG91ciwg
dmFsdWVPZiBtaW4sIHZhbHVlT2Ygc2VjLCB2YWx1ZU9mIG1zXSB0byBoYXZlIHRoZSBzYW1lIGNv
bnRlbnRzLiAnCi0gIHN0cmljdCBtb2RlOiAnVGVzdDI2MkVycm9yOiBFeHBlY3RlZCBbXSBhbmQg
W3ZhbHVlT2YgaG91ciwgdmFsdWVPZiBtaW4sIHZhbHVlT2Ygc2VjLCB2YWx1ZU9mIG1zXSB0byBo
YXZlIHRoZSBzYW1lIGNvbnRlbnRzLiAnCi10ZXN0L2J1aWx0LWlucy9EYXRlL3Byb3RvdHlwZS9z
ZXRNaWxsaXNlY29uZHMvYXJnLWNvZXJjaW9uLW9yZGVyLmpzOgotICBkZWZhdWx0OiAnVGVzdDI2
MkVycm9yOiBUb051bWJlciBpbnZva2VkIGV4YWN0bHkgb25jZSBFeHBlY3RlZCBTYW1lVmFsdWUo
wqswwrssIMKrMcK7KSB0byBiZSB0cnVlJwotICBzdHJpY3QgbW9kZTogJ1Rlc3QyNjJFcnJvcjog
VG9OdW1iZXIgaW52b2tlZCBleGFjdGx5IG9uY2UgRXhwZWN0ZWQgU2FtZVZhbHVlKMKrMMK7LCDC
qzHCuykgdG8gYmUgdHJ1ZScKLXRlc3QvYnVpbHQtaW5zL0RhdGUvcHJvdG90eXBlL3NldE1pbnV0
ZXMvYXJnLWNvZXJjaW9uLW9yZGVyLmpzOgotICBkZWZhdWx0OiAnVGVzdDI2MkVycm9yOiBFeHBl
Y3RlZCBbXSBhbmQgW3ZhbHVlT2YgbWluLCB2YWx1ZU9mIHNlYywgdmFsdWVPZiBtc10gdG8gaGF2
ZSB0aGUgc2FtZSBjb250ZW50cy4gJwotICBzdHJpY3QgbW9kZTogJ1Rlc3QyNjJFcnJvcjogRXhw
ZWN0ZWQgW10gYW5kIFt2YWx1ZU9mIG1pbiwgdmFsdWVPZiBzZWMsIHZhbHVlT2YgbXNdIHRvIGhh
dmUgdGhlIHNhbWUgY29udGVudHMuICcKLXRlc3QvYnVpbHQtaW5zL0RhdGUvcHJvdG90eXBlL3Nl
dE1vbnRoL2FyZy1jb2VyY2lvbi1vcmRlci5qczoKLSAgZGVmYXVsdDogJ1Rlc3QyNjJFcnJvcjog
RXhwZWN0ZWQgW10gYW5kIFt2YWx1ZU9mIG1vbnRoLCB2YWx1ZU9mIGRhdGVdIHRvIGhhdmUgdGhl
IHNhbWUgY29udGVudHMuICcKLSAgc3RyaWN0IG1vZGU6ICdUZXN0MjYyRXJyb3I6IEV4cGVjdGVk
IFtdIGFuZCBbdmFsdWVPZiBtb250aCwgdmFsdWVPZiBkYXRlXSB0byBoYXZlIHRoZSBzYW1lIGNv
bnRlbnRzLiAnCi10ZXN0L2J1aWx0LWlucy9EYXRlL3Byb3RvdHlwZS9zZXRTZWNvbmRzL2FyZy1j
b2VyY2lvbi1vcmRlci5qczoKLSAgZGVmYXVsdDogJ1Rlc3QyNjJFcnJvcjogRXhwZWN0ZWQgW10g
YW5kIFt2YWx1ZU9mIHNlYywgdmFsdWVPZiBtc10gdG8gaGF2ZSB0aGUgc2FtZSBjb250ZW50cy4g
JwotICBzdHJpY3QgbW9kZTogJ1Rlc3QyNjJFcnJvcjogRXhwZWN0ZWQgW10gYW5kIFt2YWx1ZU9m
IHNlYywgdmFsdWVPZiBtc10gdG8gaGF2ZSB0aGUgc2FtZSBjb250ZW50cy4gJwotdGVzdC9idWls
dC1pbnMvRGF0ZS9wcm90b3R5cGUvc2V0VVRDRGF0ZS9hcmctY29lcmNpb24tb3JkZXIuanM6Ci0g
IGRlZmF1bHQ6ICdUZXN0MjYyRXJyb3I6IFRvTnVtYmVyIGludm9rZWQgZXhhY3RseSBvbmNlIEV4
cGVjdGVkIFNhbWVWYWx1ZSjCqzDCuywgwqsxwrspIHRvIGJlIHRydWUnCi0gIHN0cmljdCBtb2Rl
OiAnVGVzdDI2MkVycm9yOiBUb051bWJlciBpbnZva2VkIGV4YWN0bHkgb25jZSBFeHBlY3RlZCBT
YW1lVmFsdWUowqswwrssIMKrMcK7KSB0byBiZSB0cnVlJwotdGVzdC9idWlsdC1pbnMvRGF0ZS9w
cm90b3R5cGUvc2V0VVRDSG91cnMvYXJnLWNvZXJjaW9uLW9yZGVyLmpzOgotICBkZWZhdWx0OiAn
VGVzdDI2MkVycm9yOiBFeHBlY3RlZCBbXSBhbmQgW3ZhbHVlT2YgaG91ciwgdmFsdWVPZiBtaW4s
IHZhbHVlT2Ygc2VjLCB2YWx1ZU9mIG1zXSB0byBoYXZlIHRoZSBzYW1lIGNvbnRlbnRzLiAnCi0g
IHN0cmljdCBtb2RlOiAnVGVzdDI2MkVycm9yOiBFeHBlY3RlZCBbXSBhbmQgW3ZhbHVlT2YgaG91
ciwgdmFsdWVPZiBtaW4sIHZhbHVlT2Ygc2VjLCB2YWx1ZU9mIG1zXSB0byBoYXZlIHRoZSBzYW1l
IGNvbnRlbnRzLiAnCi10ZXN0L2J1aWx0LWlucy9EYXRlL3Byb3RvdHlwZS9zZXRVVENNaWxsaXNl
Y29uZHMvYXJnLWNvZXJjaW9uLW9yZGVyLmpzOgotICBkZWZhdWx0OiAnVGVzdDI2MkVycm9yOiBU
b051bWJlciBpbnZva2VkIGV4YWN0bHkgb25jZSBFeHBlY3RlZCBTYW1lVmFsdWUowqswwrssIMKr
McK7KSB0byBiZSB0cnVlJwotICBzdHJpY3QgbW9kZTogJ1Rlc3QyNjJFcnJvcjogVG9OdW1iZXIg
aW52b2tlZCBleGFjdGx5IG9uY2UgRXhwZWN0ZWQgU2FtZVZhbHVlKMKrMMK7LCDCqzHCuykgdG8g
YmUgdHJ1ZScKLXRlc3QvYnVpbHQtaW5zL0RhdGUvcHJvdG90eXBlL3NldFVUQ01pbnV0ZXMvYXJn
LWNvZXJjaW9uLW9yZGVyLmpzOgotICBkZWZhdWx0OiAnVGVzdDI2MkVycm9yOiBFeHBlY3RlZCBb
XSBhbmQgW3ZhbHVlT2YgbWluLCB2YWx1ZU9mIHNlYywgdmFsdWVPZiBtc10gdG8gaGF2ZSB0aGUg
c2FtZSBjb250ZW50cy4gJwotICBzdHJpY3QgbW9kZTogJ1Rlc3QyNjJFcnJvcjogRXhwZWN0ZWQg
W10gYW5kIFt2YWx1ZU9mIG1pbiwgdmFsdWVPZiBzZWMsIHZhbHVlT2YgbXNdIHRvIGhhdmUgdGhl
IHNhbWUgY29udGVudHMuICcKLXRlc3QvYnVpbHQtaW5zL0RhdGUvcHJvdG90eXBlL3NldFVUQ01v
bnRoL2FyZy1jb2VyY2lvbi1vcmRlci5qczoKLSAgZGVmYXVsdDogJ1Rlc3QyNjJFcnJvcjogRXhw
ZWN0ZWQgW10gYW5kIFt2YWx1ZU9mIG1vbnRoLCB2YWx1ZU9mIGRhdGVdIHRvIGhhdmUgdGhlIHNh
bWUgY29udGVudHMuICcKLSAgc3RyaWN0IG1vZGU6ICdUZXN0MjYyRXJyb3I6IEV4cGVjdGVkIFtd
IGFuZCBbdmFsdWVPZiBtb250aCwgdmFsdWVPZiBkYXRlXSB0byBoYXZlIHRoZSBzYW1lIGNvbnRl
bnRzLiAnCi10ZXN0L2J1aWx0LWlucy9EYXRlL3Byb3RvdHlwZS9zZXRVVENTZWNvbmRzL2FyZy1j
b2VyY2lvbi1vcmRlci5qczoKLSAgZGVmYXVsdDogJ1Rlc3QyNjJFcnJvcjogRXhwZWN0ZWQgW10g
YW5kIFt2YWx1ZU9mIHNlYywgdmFsdWVPZiBtc10gdG8gaGF2ZSB0aGUgc2FtZSBjb250ZW50cy4g
JwotICBzdHJpY3QgbW9kZTogJ1Rlc3QyNjJFcnJvcjogRXhwZWN0ZWQgW10gYW5kIFt2YWx1ZU9m
IHNlYywgdmFsdWVPZiBtc10gdG8gaGF2ZSB0aGUgc2FtZSBjb250ZW50cy4gJwogdGVzdC9idWls
dC1pbnMvRnVuY3Rpb24vaW50ZXJuYWxzL0NvbnN0cnVjdC9kZXJpdmVkLXJldHVybi12YWwtcmVh
bG0uanM6CiAgIGRlZmF1bHQ6ICdUZXN0MjYyRXJyb3I6IEV4cGVjdGVkIGEgVHlwZUVycm9yIGJ1
dCBnb3QgYSBkaWZmZXJlbnQgZXJyb3IgY29uc3RydWN0b3Igd2l0aCB0aGUgc2FtZSBuYW1lJwog
ICBzdHJpY3QgbW9kZTogJ1Rlc3QyNjJFcnJvcjogRXhwZWN0ZWQgYSBUeXBlRXJyb3IgYnV0IGdv
dCBhIGRpZmZlcmVudCBlcnJvciBjb25zdHJ1Y3RvciB3aXRoIHRoZSBzYW1lIG5hbWUnCg==
</data>
<flag name="review"
          id="475293"
          type_id="1"
          status="+"
          setter="ashvayka"
    />
          </attachment>
      

    </bug>

</bugzilla>