<?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>212645</bug_id>
          
          <creation_ts>2020-06-02 10:48:39 -0700</creation_ts>
          <short_desc>SpeculativeJIT::compileDateGet()&apos;s slow path does not need an exception check.</short_desc>
          <delta_ts>2020-06-04 07:42:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</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="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1658370</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-02 10:48:39 -0700</bug_when>
    <thetext>This issue was causing a false negative on the doesGC check.  For example, see https://build.webkit.org/builders/GTK%20Linux%2064-bit%20Debug%20%28Tests%29/builds/6382/steps/jscore-test/logs/stdio.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1658382</commentid>
    <comment_count>1</comment_count>
      <attachid>400842</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-02 11:05:00 -0700</bug_when>
    <thetext>Created attachment 400842
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1658996</commentid>
    <comment_count>2</comment_count>
      <attachid>400842</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-03 22:42:35 -0700</bug_when>
    <thetext>Comment on attachment 400842
proposed patch.

Yusuke pointed out to me that if the exception fuzzer only inserts throws where we emit exception checks.  And we only exception checks usually following something that can throw, and therefore can allocate memory.  Hence, this patch does not actually fix the true underlying issue.

After investigating further, I agree with Yusuke&apos;s insight.  I&apos;m obsoleting this patch and will upload a new fix soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1659002</commentid>
    <comment_count>3</comment_count>
      <attachid>401003</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-03 23:14:42 -0700</bug_when>
    <thetext>Created attachment 401003
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1659004</commentid>
    <comment_count>4</comment_count>
      <attachid>401003</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-06-03 23:54:16 -0700</bug_when>
    <thetext>Comment on attachment 401003
proposed patch.

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:3
&gt; +        SpeculativeJIT::compileDateGet()&apos;s slow path does need a exception check.

/does/does not/

&gt; Source/JavaScriptCore/ChangeLog:33
&gt; +        The patch also proves that all the operation functions cannot throw any exceptions.
&gt; +        Previously, the operations passes a VM&amp; to the Date functions.  The purpose for
&gt; +        doing this is so that the Date functions can work with a few date cache data
&gt; +        structures stored as VM fields.
&gt; +
&gt; +        This patch refactors those VM fields into a VM::DateCache struct, and changed all
&gt; +        those Date functions to take a VM::DateCache&amp; instead of a VM&amp;.  Since the Date
&gt; +        functions no longer take a VM&amp;, this proves that they cannot throw because they
&gt; +        would need a VM&amp; to make a ThrowScope in order to throw.

I think passing VM* is enough to represent that this function never throws an error. Because error requires error objects, error-throwing function requires JSGlobalObject* instead.
So, if the function does not take JSGlobalObject*, we can assume that it will not throw an error (and that&apos;s why I didn&apos;t pass JSGlobalObject* to these slowpath functions.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1659005</commentid>
    <comment_count>5</comment_count>
      <attachid>401003</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-06-03 23:56:21 -0700</bug_when>
    <thetext>Comment on attachment 401003
proposed patch.

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

&gt;&gt; Source/JavaScriptCore/ChangeLog:33
&gt;&gt; +        would need a VM&amp; to make a ThrowScope in order to throw.
&gt; 
&gt; I think passing VM* is enough to represent that this function never throws an error. Because error requires error objects, error-throwing function requires JSGlobalObject* instead.
&gt; So, if the function does not take JSGlobalObject*, we can assume that it will not throw an error (and that&apos;s why I didn&apos;t pass JSGlobalObject* to these slowpath functions.)

When doing ExecState* -&gt; JSGlobalObject* refactoring, I made a lot of operation functions taking only VM* instead of JSGlobalObject* if it does not throw an error.
I think it would be possible that we remove more exception checks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1659092</commentid>
    <comment_count>6</comment_count>
      <attachid>401003</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-04 07:33:58 -0700</bug_when>
    <thetext>Comment on attachment 401003
proposed patch.

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

&gt;&gt;&gt; Source/JavaScriptCore/ChangeLog:33
&gt;&gt;&gt; +        would need a VM&amp; to make a ThrowScope in order to throw.
&gt;&gt; 
&gt;&gt; I think passing VM* is enough to represent that this function never throws an error. Because error requires error objects, error-throwing function requires JSGlobalObject* instead.
&gt;&gt; So, if the function does not take JSGlobalObject*, we can assume that it will not throw an error (and that&apos;s why I didn&apos;t pass JSGlobalObject* to these slowpath functions.)
&gt; 
&gt; When doing ExecState* -&gt; JSGlobalObject* refactoring, I made a lot of operation functions taking only VM* instead of JSGlobalObject* if it does not throw an error.
&gt; I think it would be possible that we remove more exception checks.

I spoke to Yusuke offline.  I agree that the lack of a JSGlobalObject* is sufficient.  However, this refactoring into the VM::DateCache has additional benefits i.e. it also makes it clear that the Date functions are only operating on the DateCache fields and nothing else in the VM.  This helps makes clearer what the Date functions are not doing.  We&apos;ll keep the DateCache refactoring, and I&apos;ll add a comment about this reasoning in the ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1659097</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-04 07:41:34 -0700</bug_when>
    <thetext>Thanks for the review.  Landed in r262535: &lt;http://trac.webkit.org/r262535&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1659098</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-06-04 07:42:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/63978017&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400842</attachid>
            <date>2020-06-02 11:05:00 -0700</date>
            <delta_ts>2020-06-03 22:42:35 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-212645.patch</filename>
            <type>text/plain</type>
            <size>8778</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjYyNDI5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBA
CisyMDIwLTA2LTAyICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBG
aXggdGhlIGV4Y2VwdGlvbkZ1enogbWVjaGFuaXNtIHNvIHRoYXQgaXQgZG9lcyBub3QgYWxsb2Nh
dGUgYW4gRXJyb3IgYXQgZXhjZXB0aW9uIGNoZWNrIHNpdGVzLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyNjQ1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpc3N1ZSB3YXMgY2F1c2luZyBhIGZh
bHNlIG5lZ2F0aXZlIG9uIHRoZSBkb2VzR0MgY2hlY2suICBGb3IgZXhhbXBsZSwgc2VlCisgICAg
ICAgICBodHRwczovL2J1aWxkLndlYmtpdC5vcmcvYnVpbGRlcnMvR1RLJTIwTGludXglMjA2NC1i
aXQlMjBEZWJ1ZyUyMCUyOFRlc3RzJTI5L2J1aWxkcy82MzgyL3N0ZXBzL2pzY29yZS10ZXN0L2xv
Z3Mvc3RkaW8uCisKKyAgICAgICAgSW5zdGVhZCwgd2UnbGwgcHJlLWNyZWF0ZSB0aGUgZXhjZXB0
aW9uRnV6ekVycm9yIHdoZW4gd2UgY29uc3RydWN0IHRoZQorICAgICAgICBnbG9iYWxPYmplY3Qu
ICBUaGlzIGlzIGZpbmUgdG8gZG8gYmVjYXVzZToKKworICAgICAgICAxLiBXZSB3aWxsIG9ubHkg
Y3JlYXRlIHRoZSBleGNlcHRpb25GdXp6RXJyb3IgaWYgT3B0aW9uczo6dXNlRXhjZXB0aW9uRnV6
eigpIGlzCisgICAgICAgICAgIHRydWUuICBIZW5jZSwgdGhlIG9ubHkgbWVtb3J5IGNvc3Qgb2Yg
dGhpcyBmaXggaXMgMSBwb2ludGVyIHdvcnRoIG9mIG1lbW9yeQorICAgICAgICAgICBpbiB0aGUg
Z2xvYmFsT2JqZWN0ICsgc29tZSBleHRyYSBjb2RlIHRvIHN1cHBvcnQgdGhpcy4KKworICAgICAg
ICAyLiBUaGUgZXhjZXB0aW9uRnV6eiB0ZXN0IGRvZXMgbm90IGNhcmUgd2hlcmUgdGhlIEVycm9y
IHdhcyBjcmVhdGVkLCBvbmx5IHRoYXQKKyAgICAgICAgICAgaXQgd2FzIHNlZW4gdG8gaGF2ZSBi
ZWVuIHRocm93biBhdCBleGNlcHRpb24gY2hlY2sgc2l0ZXMuICBIZW5jZSwgdGhlcmUncyBubwor
ICAgICAgICAgICBpc3N1ZSB3aXRoIHVzaW5nIGEgcHJlLWNyZWF0ZWQgRXJyb3IuCisKKyAgICAg
ICAgMy4gVXNpbmcgYSBwcmUtY3JlYXRlZCBFcnJvciBlbnN1cmVzIHRoYXQgd2UgZG9uJ3QgZG8g
YW55IGFsbG9jYXRpb25zIGF0IGV4Y2VwdGlvbgorICAgICAgICAgICBjaGVjayBzaXRlcyB3aGVy
ZSBleGNlcHRpb25GdXp6IG1heSB3YW50IHRvIGluc2VydCBhIHRocm93LiAgVGhpcyBwcmVzZXJ2
ZXMKKyAgICAgICAgICAgdGhlIG9yaWdpbmFsIGJlaGF2aW9yIG9mIHN1Y2ggZXhjZXB0aW9uIGNo
ZWNrIHNpdGVzIGluIHRlcm1zIG9mIHdoYXQgZG9lc0dDCisgICAgICAgICAgIGV4cGVjdHMgaS5l
LiBubyBhbGxvY2F0aW9ucywgYW5kIHRoZXJlZm9yZSB3aWxsIG5vdCBHQy4KKworICAgICAgICBB
bHNvIHJlbW92ZWQgdGhlIHVudXNlZCBmdW5jdGlvbiBmYXN0RXhjZXB0aW9uQ2hlY2soKSBmcm9t
IERGR0pJVENvbXBpbGVyLmguCisKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6ZmFzdEV4Y2VwdGlvbkNoZWNrKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNz
ZW1ibHlIZWxwZXJzOjpjYWxsRXhjZXB0aW9uRnV6eik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5
SGVscGVyczo6ZW1pdEV4Y2VwdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxw
ZXJzOjplbWl0Tm9uUGF0Y2hhYmxlRXhjZXB0aW9uQ2hlY2spOgorICAgICAgICAqIHJ1bnRpbWUv
RXhjZXB0aW9uRnV6ei5jcHA6CisgICAgICAgIChKU0M6OmRvRXhjZXB0aW9uRnV6emluZyk6Cisg
ICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xv
YmFsT2JqZWN0Ojppbml0KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hp
bGRyZW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpT
Qzo6SlNHbG9iYWxPYmplY3Q6OmV4Y2VwdGlvbkZ1enpFcnJvciBjb25zdCk6CisKIDIwMjAtMDYt
MDIgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgTXVsdGlEZWxl
dGVCeU9mZnNldCBzaG91bGQgbm90IGFsd2F5cyBkZWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlzaW9uIDI2MjQyNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE1
MywxMyArMTUzLDYgQEAgcHVibGljOgogICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrc1dpdGhDYWxs
RnJhbWVSb2xsYmFjay5hcHBlbmQoZW1pdEV4Y2VwdGlvbkNoZWNrKHZtKCkpKTsKICAgICB9CiAK
LSAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRoIGEgZmFzdCBleGNlcHRp
b24gY2hlY2sgdGhhdCB0ZXN0cyBpZiB0aGUgcmV0dXJuIHZhbHVlIGlzIHplcm8uCi0gICAgdm9p
ZCBmYXN0RXhjZXB0aW9uQ2hlY2soKQotICAgIHsKLSAgICAgICAgY2FsbEV4Y2VwdGlvbkZ1enoo
dm0oKSk7Ci0gICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChicmFuY2hUZXN0UHRyKFpl
cm8sIEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7Ci0gICAgfQotICAgIAogICAgIE9TUkV4aXRD
b21waWxhdGlvbkluZm8mIGFwcGVuZEV4aXRJbmZvKE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBq
dW1wc1RvRmFpbCA9IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCgpKQogICAgIHsKICAgICAgICAg
T1NSRXhpdENvbXBpbGF0aW9uSW5mbyBpbmZvOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMjYyNDI0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMzMsOCArMjMzLDcgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmppdFJlbGVhc2VBc3NlcnRO
bwogCiB2b2lkIEFzc2VtYmx5SGVscGVyczo6Y2FsbEV4Y2VwdGlvbkZ1enooVk0mIHZtKQogewot
ICAgIGlmICghT3B0aW9uczo6dXNlRXhjZXB0aW9uRnV6eigpKQotICAgICAgICByZXR1cm47Cisg
ICAgQVNTRVJUKE9wdGlvbnM6OnVzZUV4Y2VwdGlvbkZ1enooKSk7CiAKICAgICBFbmNvZGVkSlNW
YWx1ZSogYnVmZmVyID0gdm0uZXhjZXB0aW9uRnV6emluZ0J1ZmZlcihzaXplb2YoRW5jb2RlZEpT
VmFsdWUpICogKEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzICsgRlBSSW5mbzo6bnVtYmVyT2ZS
ZWdpc3RlcnMpKTsKIApAQCAtMjc2LDcgKzI3NSw4IEBAIEFzc2VtYmx5SGVscGVyczo6SnVtcCBB
c3NlbWJseUhlbHBlcnM6OmUKIAogQXNzZW1ibHlIZWxwZXJzOjpKdW1wIEFzc2VtYmx5SGVscGVy
czo6ZW1pdEV4Y2VwdGlvbkNoZWNrKFZNJiB2bSwgRXhjZXB0aW9uQ2hlY2tLaW5kIGtpbmQsIEV4
Y2VwdGlvbkp1bXBXaWR0aCB3aWR0aCkKIHsKLSAgICBjYWxsRXhjZXB0aW9uRnV6eih2bSk7Cisg
ICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnVzZUV4Y2VwdGlvbkZ1enooKSkpCisgICAgICAgIGNh
bGxFeGNlcHRpb25GdXp6KHZtKTsKIAogICAgIGlmICh3aWR0aCA9PSBGYXJKdW1wV2lkdGgpCiAg
ICAgICAgIGtpbmQgPSAoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IEludmVydGVkRXhj
ZXB0aW9uQ2hlY2sgOiBOb3JtYWxFeGNlcHRpb25DaGVjayk7CkBAIC0yOTksNyArMjk5LDggQEAg
QXNzZW1ibHlIZWxwZXJzOjpKdW1wIEFzc2VtYmx5SGVscGVyczo6ZQogCiBBc3NlbWJseUhlbHBl
cnM6Okp1bXAgQXNzZW1ibHlIZWxwZXJzOjplbWl0Tm9uUGF0Y2hhYmxlRXhjZXB0aW9uQ2hlY2so
Vk0mIHZtKQogewotICAgIGNhbGxFeGNlcHRpb25GdXp6KHZtKTsKKyAgICBpZiAoVU5MSUtFTFko
T3B0aW9uczo6dXNlRXhjZXB0aW9uRnV6eigpKSkKKyAgICAgICAgY2FsbEV4Y2VwdGlvbkZ1enoo
dm0pOwogCiAgICAgSnVtcCByZXN1bHQ7CiAjaWYgVVNFKEpTVkFMVUU2NCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkZ1enouY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkZ1enouY3BwCShyZXZpc2lv
biAyNjI0MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25GdXp6
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw4ICsyNiw4IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uRnV6ei5oIgogCi0jaW5jbHVkZSAiRXJyb3IuaCIKICNp
bmNsdWRlICJIZWFwSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5j
bHVkZSAiVGVzdFJ1bm5lclV0aWxzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNTgsMTAgKzU4
LDggQEAgdm9pZCBkb0V4Y2VwdGlvbkZ1enppbmcoSlNHbG9iYWxPYmplY3QqIAogICAgICAgICAv
LyB0byBwbGFjYXRlIHRoZSBleGNlcHRpb24gY2hlY2sgdmVyaWZpZXIgaGVyZS4KICAgICAgICAg
RVhDRVBUSU9OX0FTU0VSVChzY29wZS5leGNlcHRpb24oKSB8fCAhc2NvcGUuZXhjZXB0aW9uKCkp
OwogCi0gICAgICAgIHRocm93RXhjZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZUVy
cm9yKGdsb2JhbE9iamVjdCwgIkV4Y2VwdGlvbiBGdXp6Il9zKSk7CisgICAgICAgIHRocm93RXhj
ZXB0aW9uKGdsb2JhbE9iamVjdCwgc2NvcGUsIGdsb2JhbE9iamVjdC0+ZXhjZXB0aW9uRnV6ekVy
cm9yKCkpOwogICAgIH0KIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCi0KLQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNp
b24gMjYyNDI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAwOCBDYW1lcm9uIFp3YXJpY2ggKGN3endhcmljaEB1d2F0ZXJsb28uY2EpCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CkBAIC0xMzQzLDYgKzEzNDMsOSBAQCBjYXBpdGFsTmFtZSAjIyBDb25z
dHJ1Y3RvciogbG93ZXJOYW1lICMjCiAgICAgfQogCiAgICAgZml4dXBQcm90b3R5cGVDaGFpbldp
dGhPYmplY3RQcm90b3R5cGUodm0pOworCisgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OnVzZUV4
Y2VwdGlvbkZ1enooKSkpCisgICAgICAgIG1fZXhjZXB0aW9uRnV6ekVycm9yLnNldCh2bSwgdGhp
cywgY3JlYXRlRXJyb3IodGhpcywgIkV4Y2VwdGlvbiBGdXp6Il9zKSk7CiB9CiAKIGJvb2wgSlNH
bG9iYWxPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5
U2xvdCYgc2xvdCkKQEAgLTE5NDksNiArMTk1Miw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnZp
c2l0Q2hpbGRyZW4oSlNDZWwKICAgICB0aGlzT2JqZWN0LT5tX3R5cGVkQXJyYXlQcm90by52aXNp
dCh2aXNpdG9yKTsKICAgICB0aGlzT2JqZWN0LT5tX3R5cGVkQXJyYXlTdXBlckNvbnN0cnVjdG9y
LnZpc2l0KHZpc2l0b3IpOwogICAgIHRoaXNPYmplY3QtPm1fcmVnRXhwR2xvYmFsRGF0YS52aXNp
dEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2V4
Y2VwdGlvbkZ1enpFcnJvcik7CiB9CiAKIENhbGxGcmFtZSogSlNHbG9iYWxPYmplY3Q6OmRlcHJl
Y2F0ZWRDYWxsRnJhbWVGb3JEZWJ1Z2dlcigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDI2MjQyNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgotICogIENvcHlyaWdodCAoQykgMjAwNy0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNDMwLDYg
KzQzMCw4IEBAIHB1YmxpYzoKICAgICBGT1JfRUFDSF9UWVBFRF9BUlJBWV9UWVBFKERFQ0xBUkVf
VFlQRURfQVJSQVlfVFlQRV9TVFJVQ1RVUkUpCiAjdW5kZWYgREVDTEFSRV9UWVBFRF9BUlJBWV9U
WVBFX1NUUlVDVFVSRQogCisgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PiBtX2V4Y2VwdGlvbkZ1
enpFcnJvcjsKKwogICAgIFZlY3RvcjxMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIEpTQ2Vs
bD4+IG1fbGlua1RpbWVDb25zdGFudHM7CiAKICAgICBTdHJpbmcgbV9uYW1lOwpAQCAtNjY1LDYg
KzY2Nyw4IEBAIHB1YmxpYzoKICAgICBBc3luY0dlbmVyYXRvclByb3RvdHlwZSogYXN5bmNHZW5l
cmF0b3JQcm90b3R5cGUoKSBjb25zdCB7IHJldHVybiBtX2FzeW5jR2VuZXJhdG9yUHJvdG90eXBl
LmdldCgpOyB9CiAgICAgQXN5bmNHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSogYXN5bmNHZW5l
cmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXN5bmNHZW5lcmF0b3JG
dW5jdGlvblByb3RvdHlwZS5nZXQoKTsgfQogCisgICAgSlNPYmplY3QqIGV4Y2VwdGlvbkZ1enpF
cnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fZXhjZXB0aW9uRnV6ekVycm9yLmdldCgpOyB9CisKICAg
ICBTdHJ1Y3R1cmUqIGRlYnVnZ2VyU2NvcGVTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX2Rl
YnVnZ2VyU2NvcGVTdHJ1Y3R1cmUuZ2V0KHRoaXMpOyB9CiAgICAgU3RydWN0dXJlKiB3aXRoU2Nv
cGVTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3dpdGhTY29wZVN0cnVjdHVyZS5nZXQodGhp
cyk7IH0KICAgICBTdHJ1Y3R1cmUqIHN0cmljdEV2YWxBY3RpdmF0aW9uU3RydWN0dXJlKCkgY29u
c3QgeyByZXR1cm4gbV9zdHJpY3RFdmFsQWN0aXZhdGlvblN0cnVjdHVyZS5nZXQodGhpcyk7IH0K
</data>
<flag name="review"
          id="416231"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401003</attachid>
            <date>2020-06-03 23:14:42 -0700</date>
            <delta_ts>2020-06-03 23:54:16 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-212645b.patch</filename>
            <type>text/plain</type>
            <size>41792</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjYyNTI5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg0IEBA
CisyMDIwLTA2LTAzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZURhdGVHZXQoKSdzIHNsb3cgcGF0aCBkb2VzIG5lZWQgYSBl
eGNlcHRpb24gY2hlY2suCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMTI2NDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZURhdGVHZXQoKSBpbXBsZW1lbnRzIGEgYnVu
Y2ggb2YgRGF0ZSBpbnRyaW5zaWNzIHdoaWNoIGNhbGwKKyAgICAgICAgaW50byBhIEMrKyBvcGVy
YXRpb24gZnVuY3Rpb24gZG8gdGhlaXIgd29yay4gIEhvd2V2ZXIsIHRoZSBjYWxsIHRvIHRoZXNl
IG9wZXJhdGlvbgorICAgICAgICBmdW5jdGlvbnMgd2VyZSBkb25lIHVzaW5nIGEgc2xvdyBwYXRo
IGdlbmVyYXRvciBjb25maWd1cmVkIHRvIGF1dG9tYXRpY2FsbHkKKyAgICAgICAgZW1pdCBleGNl
cHRpb24gY2hlY2tzIGFmdGVyIHRoZSBjYWxsLiAgVGhlc2UgZXhjZXB0aW9uIGNoZWNrcyBhcmUg
dW5uZWVkZWQgYmVjYXVzZQorICAgICAgICB0aG9zZSBmdW5jdGlvbnMgd2lsbCBub3QgdGhyb3cg
YW55IGV4Y2VwdGlvbnMuCisKKyAgICAgICAgVGhpcyBpc3N1ZSB3YXMgZm91bmQgd2l0aCBKU0Mg
c3RyZXNzIHRlc3QgcnVucyBvbiBhIGRlYnVnIGJ1aWxkLiAgVGhlIGRvZXNHQworICAgICAgICB2
ZXJpZmllciB3YXMgZmFpbGluZyBvbiB0aGUgZXhjZXB0aW9uRnV6ei9kYXRlLWZvcm1hdC14cGFy
Yi5qcyB0ZXN0LiAgVGhlIHJlYXNvbgorICAgICAgICBpcyBiZWNhdXNlIGRvZXNHQyBkb2VzIG5v
dCBleHBlY3QgYW55IHRoZXNlIERhdGUgaW50cmluc2ljcyB0byB0aHJvdyBhbnkgZXhjZXB0aW9u
cywKKyAgICAgICAgYnV0IFNwZWN1bGF0aXZlSklUIHdhcyBlbWl0dGluZyB0aGUgdW5uZWVkZWQg
ZXhjZXB0aW9uIGNoZWNrcyB0aGVyZS4gIFRoZXNlCisgICAgICAgIGV4Y2VwdGlvbiBjaGVjayBz
aXRlcyBnZXQgdHVybmVkIGludG8gdGhyb3cgc2l0ZXMgYnkgdGhlIGV4Y2VwdGlvbkZ1enplciwg
YW5kCisgICAgICAgIHRoZXkgYWxsb2NhdGUgYW4gRXJyb3Igb2JqZWN0IHRoZXJlLiAgVGhpcyBh
bGxvY2F0aW9uIG1hZGUgdGhlIGRvZXNHQyB2ZXJpZmllcgorICAgICAgICBub3QgaGFwcHkuCisK
KyAgICAgICAgVGhpcyBwYXRjaCBmaXhlcyB0aGlzIGlzc3VlIGJ5IGNoYW5naW5nIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlRGF0ZUdldCgpIHRvCisgICAgICAgIHBhc3MgRXhjZXB0aW9uQ2hlY2tS
ZXF1aXJlbWVudDo6Q2hlY2tOb3ROZWVkZWQgdG8gdGhlIHNsb3cgcGF0aCBnZW5lcmF0b3IuCisK
KyAgICAgICAgVGhlIHBhdGNoIGFsc28gcHJvdmVzIHRoYXQgYWxsIHRoZSBvcGVyYXRpb24gZnVu
Y3Rpb25zIGNhbm5vdCB0aHJvdyBhbnkgZXhjZXB0aW9ucy4KKyAgICAgICAgUHJldmlvdXNseSwg
dGhlIG9wZXJhdGlvbnMgcGFzc2VzIGEgVk0mIHRvIHRoZSBEYXRlIGZ1bmN0aW9ucy4gIFRoZSBw
dXJwb3NlIGZvcgorICAgICAgICBkb2luZyB0aGlzIGlzIHNvIHRoYXQgdGhlIERhdGUgZnVuY3Rp
b25zIGNhbiB3b3JrIHdpdGggYSBmZXcgZGF0ZSBjYWNoZSBkYXRhCisgICAgICAgIHN0cnVjdHVy
ZXMgc3RvcmVkIGFzIFZNIGZpZWxkcy4KKworICAgICAgICBUaGlzIHBhdGNoIHJlZmFjdG9ycyB0
aG9zZSBWTSBmaWVsZHMgaW50byBhIFZNOjpEYXRlQ2FjaGUgc3RydWN0LCBhbmQgY2hhbmdlZCBh
bGwKKyAgICAgICAgdGhvc2UgRGF0ZSBmdW5jdGlvbnMgdG8gdGFrZSBhIFZNOjpEYXRlQ2FjaGUm
IGluc3RlYWQgb2YgYSBWTSYuICBTaW5jZSB0aGUgRGF0ZQorICAgICAgICBmdW5jdGlvbnMgbm8g
bG9uZ2VyIHRha2UgYSBWTSYsIHRoaXMgcHJvdmVzIHRoYXQgdGhleSBjYW5ub3QgdGhyb3cgYmVj
YXVzZSB0aGV5CisgICAgICAgIHdvdWxkIG5lZWQgYSBWTSYgdG8gbWFrZSBhIFRocm93U2NvcGUg
aW4gb3JkZXIgdG8gdGhyb3cuCisKKyAgICAgICAgQWxzbyByZW1vdmVkIERGRzo6SklUQ29tcGls
ZSdzIGZhc3RFeGNlcHRpb25DaGVjaygpIHdoaWNoIGlzIHVudXNlZC4KKworICAgICAgICAqIGRm
Zy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpmYXN0
RXhjZXB0aW9uQ2hlY2spOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNw
cDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVEYXRlR2V0KToKKyAgICAgICAgKiBydW50aW1l
L0RhdGVDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6Om1pbGxpc2Vjb25kc0Zyb21Db21w
b25lbnRzKToKKyAgICAgICAgKEpTQzo6Y2FsbERhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvRGF0
ZUluc3RhbmNlLmNwcDoKKyAgICAgICAgKEpTQzo6RGF0ZUluc3RhbmNlOjpjYWxjdWxhdGVHcmVn
b3JpYW5EYXRlVGltZSBjb25zdCk6CisgICAgICAgIChKU0M6OkRhdGVJbnN0YW5jZTo6Y2FsY3Vs
YXRlR3JlZ29yaWFuRGF0ZVRpbWVVVEMgY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvRGF0ZUlu
c3RhbmNlLmg6CisgICAgICAgICogcnVudGltZS9EYXRlUHJvdG90eXBlLmNwcDoKKyAgICAgICAg
KEpTQzo6Zm9ybWF0TG9jYWxlRGF0ZSk6CisgICAgICAgIChKU0M6OmZvcm1hdGVEYXRlSW5zdGFu
Y2UpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jVG9JU09TdHJpbmcpOgorICAgICAgICAo
SlNDOjpkYXRlUHJvdG9GdW5jR2V0RnVsbFllYXIpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9G
dW5jR2V0VVRDRnVsbFllYXIpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0TW9udGgp
OgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0VVRDTW9udGgpOgorICAgICAgICAoSlND
OjpkYXRlUHJvdG9GdW5jR2V0RGF0ZSk6CisgICAgICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRV
VENEYXRlKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY0dldERheSk6CisgICAgICAgIChK
U0M6OmRhdGVQcm90b0Z1bmNHZXRVVENEYXkpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5j
R2V0SG91cnMpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0VVRDSG91cnMpOgorICAg
ICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0TWludXRlcyk6CisgICAgICAgIChKU0M6OmRhdGVQ
cm90b0Z1bmNHZXRVVENNaW51dGVzKToKKyAgICAgICAgKEpTQzo6ZGF0ZVByb3RvRnVuY0dldFNl
Y29uZHMpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jR2V0VVRDU2Vjb25kcyk6CisgICAg
ICAgIChKU0M6OmRhdGVQcm90b0Z1bmNHZXRUaW1lem9uZU9mZnNldCk6CisgICAgICAgIChKU0M6
OnNldE5ld1ZhbHVlRnJvbVRpbWVBcmdzKToKKyAgICAgICAgKEpTQzo6c2V0TmV3VmFsdWVGcm9t
RGF0ZUFyZ3MpOgorICAgICAgICAoSlNDOjpkYXRlUHJvdG9GdW5jU2V0WWVhcik6CisgICAgICAg
IChKU0M6OmRhdGVQcm90b0Z1bmNHZXRZZWFyKToKKyAgICAgICAgKiBydW50aW1lL0pTRGF0ZU1h
dGguY3BwOgorICAgICAgICAoSlNDOjpsb2NhbFRpbWVPZmZzZXQpOgorICAgICAgICAoSlNDOjpn
cmVnb3JpYW5EYXRlVGltZVRvTVMpOgorICAgICAgICAoSlNDOjptc1RvR3JlZ29yaWFuRGF0ZVRp
bWUpOgorICAgICAgICAoSlNDOjpwYXJzZURhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNEYXRl
TWF0aC5oOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6cmVz
ZXREYXRlQ2FjaGUpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAyMC0wNi0wMyAgVGFk
ZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNvbT4KIAogICAgICAgICBEaXNhYmxlIEIzIGhv
aXN0TG9vcEludmFyaWFudFZhbHVlcyBieSBkZWZhdWx0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiAyNjI1MTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
NTMsMTMgKzE1Myw2IEBAIHB1YmxpYzoKICAgICAgICAgbV9leGNlcHRpb25DaGVja3NXaXRoQ2Fs
bEZyYW1lUm9sbGJhY2suYXBwZW5kKGVtaXRFeGNlcHRpb25DaGVjayh2bSgpKSk7CiAgICAgfQog
Ci0gICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aCBhIGZhc3QgZXhjZXB0
aW9uIGNoZWNrIHRoYXQgdGVzdHMgaWYgdGhlIHJldHVybiB2YWx1ZSBpcyB6ZXJvLgotICAgIHZv
aWQgZmFzdEV4Y2VwdGlvbkNoZWNrKCkKLSAgICB7Ci0gICAgICAgIGNhbGxFeGNlcHRpb25GdXp6
KHZtKCkpOwotICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoYnJhbmNoVGVzdFB0ciha
ZXJvLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOwotICAgIH0KLSAgICAKICAgICBPU1JFeGl0
Q29tcGlsYXRpb25JbmZvJiBhcHBlbmRFeGl0SW5mbyhNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
anVtcHNUb0ZhaWwgPSBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QoKSkKICAgICB7CiAgICAgICAg
IE9TUkV4aXRDb21waWxhdGlvbkluZm8gaW5mbzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjYyNTE2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI5
Miw3ICszMjkyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25EYQog
ICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBK
SVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7
CiAKLSAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSBkYXRl
LT5ncmVnb3JpYW5EYXRlVGltZSh2bSk7CisgICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdy
ZWdvcmlhbkRhdGVUaW1lID0gZGF0ZS0+Z3JlZ29yaWFuRGF0ZVRpbWUodm0uZGF0ZUNhY2hlKTsK
ICAgICBpZiAoIWdyZWdvcmlhbkRhdGVUaW1lKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzTmFOKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZ3JlZ29y
aWFuRGF0ZVRpbWUtPnllYXIoKSkpOwpAQCAtMzMwNCw3ICszMzA0LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25EYQogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
REVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKLSAgICBjb25zdCBHcmVnb3JpYW5EYXRl
VGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSBkYXRlLT5ncmVnb3JpYW5EYXRlVGltZVVUQyh2bSk7
CisgICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gZGF0ZS0+
Z3JlZ29yaWFuRGF0ZVRpbWVVVEModm0uZGF0ZUNhY2hlKTsKICAgICBpZiAoIWdyZWdvcmlhbkRh
dGVUaW1lKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTmFOKCkpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZ3JlZ29yaWFuRGF0ZVRpbWUtPnllYXIoKSkp
OwpAQCAtMzMxNiw3ICszMzE2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25EYQogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZt
KTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNh
bGxGcmFtZSk7CiAKLSAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRp
bWUgPSBkYXRlLT5ncmVnb3JpYW5EYXRlVGltZSh2bSk7CisgICAgY29uc3QgR3JlZ29yaWFuRGF0
ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gZGF0ZS0+Z3JlZ29yaWFuRGF0ZVRpbWUodm0uZGF0
ZUNhY2hlKTsKICAgICBpZiAoIWdyZWdvcmlhbkRhdGVUaW1lKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzTmFOKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1i
ZXIoZ3JlZ29yaWFuRGF0ZVRpbWUtPm1vbnRoKCkpKTsKQEAgLTMzMjgsNyArMzMyOCw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGEKICAgICBDYWxsRnJhbWUqIGNh
bGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9n
dWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogCi0gICAgY29uc3QgR3Jl
Z29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gZGF0ZS0+Z3JlZ29yaWFuRGF0ZVRp
bWVVVEModm0pOworICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBncmVnb3JpYW5EYXRlVGlt
ZSA9IGRhdGUtPmdyZWdvcmlhbkRhdGVUaW1lVVRDKHZtLmRhdGVDYWNoZSk7CiAgICAgaWYgKCFn
cmVnb3JpYW5EYXRlVGltZSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05hTigp
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGdyZWdvcmlhbkRhdGVUaW1l
LT5tb250aCgpKSk7CkBAIC0zMzQwLDcgKzMzNDAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkRhCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NB
TExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgY2FsbEZyYW1lKTsKIAotICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBncmVn
b3JpYW5EYXRlVGltZSA9IGRhdGUtPmdyZWdvcmlhbkRhdGVUaW1lKHZtKTsKKyAgICBjb25zdCBH
cmVnb3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSBkYXRlLT5ncmVnb3JpYW5EYXRl
VGltZSh2bS5kYXRlQ2FjaGUpOwogICAgIGlmICghZ3JlZ29yaWFuRGF0ZVRpbWUpCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOYU4oKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc051bWJlcihncmVnb3JpYW5EYXRlVGltZS0+bW9udGhEYXkoKSkpOwpAQCAtMzM1Miw3
ICszMzUyLDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25EYQogICAg
IENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRP
cGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAK
LSAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSBkYXRlLT5n
cmVnb3JpYW5EYXRlVGltZVVUQyh2bSk7CisgICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdy
ZWdvcmlhbkRhdGVUaW1lID0gZGF0ZS0+Z3JlZ29yaWFuRGF0ZVRpbWVVVEModm0uZGF0ZUNhY2hl
KTsKICAgICBpZiAoIWdyZWdvcmlhbkRhdGVUaW1lKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzTmFOKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZ3Jl
Z29yaWFuRGF0ZVRpbWUtPm1vbnRoRGF5KCkpKTsKQEAgLTMzNjQsNyArMzM2NCw3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGEKICAgICBDYWxsRnJhbWUqIGNhbGxG
cmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogCi0gICAgY29uc3QgR3JlZ29y
aWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gZGF0ZS0+Z3JlZ29yaWFuRGF0ZVRpbWUo
dm0pOworICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBncmVnb3JpYW5EYXRlVGltZSA9IGRh
dGUtPmdyZWdvcmlhbkRhdGVUaW1lKHZtLmRhdGVDYWNoZSk7CiAgICAgaWYgKCFncmVnb3JpYW5E
YXRlVGltZSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05hTigpKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGdyZWdvcmlhbkRhdGVUaW1lLT53ZWVrRGF5
KCkpKTsKQEAgLTMzNzYsNyArMzM3Niw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uRGEKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFN
RSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBjYWxsRnJhbWUpOwogCi0gICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRh
dGVUaW1lID0gZGF0ZS0+Z3JlZ29yaWFuRGF0ZVRpbWVVVEModm0pOworICAgIGNvbnN0IEdyZWdv
cmlhbkRhdGVUaW1lKiBncmVnb3JpYW5EYXRlVGltZSA9IGRhdGUtPmdyZWdvcmlhbkRhdGVUaW1l
VVRDKHZtLmRhdGVDYWNoZSk7CiAgICAgaWYgKCFncmVnb3JpYW5EYXRlVGltZSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05hTigpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVtYmVyKGdyZWdvcmlhbkRhdGVUaW1lLT53ZWVrRGF5KCkpKTsKQEAgLTMzODgsNyAr
MzM4OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGEKICAgICBD
YWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3Bl
cmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogCi0g
ICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gZGF0ZS0+Z3Jl
Z29yaWFuRGF0ZVRpbWUodm0pOworICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBncmVnb3Jp
YW5EYXRlVGltZSA9IGRhdGUtPmdyZWdvcmlhbkRhdGVUaW1lKHZtLmRhdGVDYWNoZSk7CiAgICAg
aWYgKCFncmVnb3JpYW5EYXRlVGltZSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c05hTigpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGdyZWdvcmlhbkRh
dGVUaW1lLT5ob3VyKCkpKTsKQEAgLTM0MDAsNyArMzQwMCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uRGEKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xB
UkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogCi0gICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUq
IGdyZWdvcmlhbkRhdGVUaW1lID0gZGF0ZS0+Z3JlZ29yaWFuRGF0ZVRpbWVVVEModm0pOworICAg
IGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBncmVnb3JpYW5EYXRlVGltZSA9IGRhdGUtPmdyZWdv
cmlhbkRhdGVUaW1lVVRDKHZtLmRhdGVDYWNoZSk7CiAgICAgaWYgKCFncmVnb3JpYW5EYXRlVGlt
ZSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05hTigpKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGdyZWdvcmlhbkRhdGVUaW1lLT5ob3VyKCkpKTsKQEAg
LTM0MTIsNyArMzQxMiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
RGEKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAg
ICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJh
bWUpOwogCi0gICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0g
ZGF0ZS0+Z3JlZ29yaWFuRGF0ZVRpbWUodm0pOworICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1l
KiBncmVnb3JpYW5EYXRlVGltZSA9IGRhdGUtPmdyZWdvcmlhbkRhdGVUaW1lKHZtLmRhdGVDYWNo
ZSk7CiAgICAgaWYgKCFncmVnb3JpYW5EYXRlVGltZSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc05hTigpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGdy
ZWdvcmlhbkRhdGVUaW1lLT5taW51dGUoKSkpOwpAQCAtMzQyNCw3ICszNDI0LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25EYQogICAgIENhbGxGcmFtZSogY2FsbEZy
YW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKLSAgICBjb25zdCBHcmVnb3Jp
YW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSBkYXRlLT5ncmVnb3JpYW5EYXRlVGltZVVU
Qyh2bSk7CisgICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0g
ZGF0ZS0+Z3JlZ29yaWFuRGF0ZVRpbWVVVEModm0uZGF0ZUNhY2hlKTsKICAgICBpZiAoIWdyZWdv
cmlhbkRhdGVUaW1lKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTmFOKCkpOwog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZ3JlZ29yaWFuRGF0ZVRpbWUtPm1p
bnV0ZSgpKSk7CkBAIC0zNDM2LDcgKzM0MzYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkRhCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExf
RlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgY2FsbEZyYW1lKTsKIAotICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBncmVnb3Jp
YW5EYXRlVGltZSA9IGRhdGUtPmdyZWdvcmlhbkRhdGVUaW1lKHZtKTsKKyAgICBjb25zdCBHcmVn
b3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSBkYXRlLT5ncmVnb3JpYW5EYXRlVGlt
ZSh2bS5kYXRlQ2FjaGUpOwogICAgIGlmICghZ3JlZ29yaWFuRGF0ZVRpbWUpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNOYU4oKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc051bWJlcihncmVnb3JpYW5EYXRlVGltZS0+c2Vjb25kKCkpKTsKQEAgLTM0NDgsNyArMzQ0
OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGEKICAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0
aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwogCi0gICAg
Y29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gZGF0ZS0+Z3JlZ29y
aWFuRGF0ZVRpbWVVVEModm0pOworICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBncmVnb3Jp
YW5EYXRlVGltZSA9IGRhdGUtPmdyZWdvcmlhbkRhdGVUaW1lVVRDKHZtLmRhdGVDYWNoZSk7CiAg
ICAgaWYgKCFncmVnb3JpYW5EYXRlVGltZSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc05hTigpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGdyZWdvcmlh
bkRhdGVUaW1lLT5zZWNvbmQoKSkpOwpAQCAtMzQ2MCw3ICszNDYwLDcgQEAgRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25EYQogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0g
REVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKICAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFt
ZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CiAKLSAgICBjb25zdCBHcmVnb3JpYW5EYXRl
VGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSBkYXRlLT5ncmVnb3JpYW5EYXRlVGltZSh2bSk7Cisg
ICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gZGF0ZS0+Z3Jl
Z29yaWFuRGF0ZVRpbWUodm0uZGF0ZUNhY2hlKTsKICAgICBpZiAoIWdyZWdvcmlhbkRhdGVUaW1l
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTmFOKCkpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoLWdyZWdvcmlhbkRhdGVUaW1lLT51dGNPZmZzZXRJbk1p
bnV0ZSgpKSk7CkBAIC0zNDcyLDcgKzM0NzIsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkRhCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExf
RlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgY2FsbEZyYW1lKTsKIAotICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBncmVnb3Jp
YW5EYXRlVGltZSA9IGRhdGUtPmdyZWdvcmlhbkRhdGVUaW1lKHZtKTsKKyAgICBjb25zdCBHcmVn
b3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSBkYXRlLT5ncmVnb3JpYW5EYXRlVGlt
ZSh2bS5kYXRlQ2FjaGUpOwogICAgIGlmICghZ3JlZ29yaWFuRGF0ZVRpbWUpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNOYU4oKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc051bWJlcihncmVnb3JpYW5EYXRlVGltZS0+eWVhcigpIC0gMTkwMCkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShy
ZXZpc2lvbiAyNjI1MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NzM3LDcgKzU3MzcsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlRGF0ZUdldChOb2RlCiAgICAgICAgIGNhbGxiYWNrKHJlc3Vs
dFJlZ3MucGF5bG9hZEdQUigpKTsKICAgICAgICAgbV9qaXQuYm94SW50MzIocmVzdWx0UmVncy5w
YXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MpOwogCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbiwgcmVzdWx0UmVncywgJnZt
KCksIGJhc2VHUFIpKTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxs
KHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uLCBOZWVkVG9TcGlsbCwgRXhjZXB0aW9uQ2hlY2tS
ZXF1aXJlbWVudDo6Q2hlY2tOb3ROZWVkZWQsIHJlc3VsdFJlZ3MsICZ2bSgpLCBiYXNlR1BSKSk7
CiAKICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKICAgICB9OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3Iu
Y3BwCShyZXZpc2lvbiAyNjI1MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
YXRlQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
ICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQot
ICogIENvcHlyaWdodCAoQykgMjAwNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC05NSw3ICs5NSw3IEBAIHN0YXRpYyBkb3Vi
bGUgbWlsbGlzZWNvbmRzRnJvbUNvbXBvbmVudHMKICAgICB0LnNldE1pbnV0ZShKU0M6OnRvSW50
MzIoZG91YmxlQXJndW1lbnRzWzRdKSk7CiAgICAgdC5zZXRTZWNvbmQoSlNDOjp0b0ludDMyKGRv
dWJsZUFyZ3VtZW50c1s1XSkpOwogICAgIHQuc2V0SXNEU1QoLTEpOwotICAgIHJldHVybiBncmVn
b3JpYW5EYXRlVGltZVRvTVModm0sIHQsIGRvdWJsZUFyZ3VtZW50c1s2XSwgdGltZVR5cGUpOwor
ICAgIHJldHVybiBncmVnb3JpYW5EYXRlVGltZVRvTVModm0uZGF0ZUNhY2hlLCB0LCBkb3VibGVB
cmd1bWVudHNbNl0sIHRpbWVUeXBlKTsKIH0KIAogLy8gRUNNQSAxNS45LjMKQEAgLTE0Nyw3ICsx
NDcsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsCiB7CiAgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEdyZWdvcmlhbkRhdGVUaW1lIHRzOwot
ICAgIG1zVG9HcmVnb3JpYW5EYXRlVGltZSh2bSwgV2FsbFRpbWU6Om5vdygpLnNlY29uZHNTaW5j
ZUVwb2NoKCkubWlsbGlzZWNvbmRzKCksIFdURjo6TG9jYWxUaW1lLCB0cyk7CisgICAgbXNUb0dy
ZWdvcmlhbkRhdGVUaW1lKHZtLmRhdGVDYWNoZSwgV2FsbFRpbWU6Om5vdygpLnNlY29uZHNTaW5j
ZUVwb2NoKCkubWlsbGlzZWNvbmRzKCksIFdURjo6TG9jYWxUaW1lLCB0cyk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc05vbnRyaXZpYWxTdHJpbmcodm0sIGZvcm1hdERhdGVUaW1lKHRz
LCBEYXRlVGltZUZvcm1hdERhdGVBbmRUaW1lLCBmYWxzZSkpKTsKIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUluc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlSW5zdGFuY2UuY3BwCShyZXZpc2lvbiAy
NjI1MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlSW5zdGFuY2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5
OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNTIsMzMgKzUyLDMzIEBAIFN0cmluZyBE
YXRlSW5zdGFuY2U6OnRvU3RyaW5nTmFtZShjb25zdCAKICAgICByZXR1cm4gIkRhdGUiX3M7CiB9
CiAKLWNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBEYXRlSW5zdGFuY2U6OmNhbGN1bGF0ZUdyZWdv
cmlhbkRhdGVUaW1lKFZNJiB2bSkgY29uc3QKK2NvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBEYXRl
SW5zdGFuY2U6OmNhbGN1bGF0ZUdyZWdvcmlhbkRhdGVUaW1lKFZNOjpEYXRlQ2FjaGUmIGNhY2hl
KSBjb25zdAogewogICAgIGRvdWJsZSBtaWxsaSA9IGludGVybmFsTnVtYmVyKCk7CiAgICAgaWYg
KHN0ZDo6aXNuYW4obWlsbGkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmICgh
bV9kYXRhKQotICAgICAgICBtX2RhdGEgPSB2bS5kYXRlSW5zdGFuY2VDYWNoZS5hZGQobWlsbGkp
OworICAgICAgICBtX2RhdGEgPSBjYWNoZS5kYXRlSW5zdGFuY2VDYWNoZS5hZGQobWlsbGkpOwog
CiAgICAgaWYgKG1fZGF0YS0+bV9ncmVnb3JpYW5EYXRlVGltZUNhY2hlZEZvck1TICE9IG1pbGxp
KSB7Ci0gICAgICAgIG1zVG9HcmVnb3JpYW5EYXRlVGltZSh2bSwgbWlsbGksIFdURjo6TG9jYWxU
aW1lLCBtX2RhdGEtPm1fY2FjaGVkR3JlZ29yaWFuRGF0ZVRpbWUpOworICAgICAgICBtc1RvR3Jl
Z29yaWFuRGF0ZVRpbWUoY2FjaGUsIG1pbGxpLCBXVEY6OkxvY2FsVGltZSwgbV9kYXRhLT5tX2Nh
Y2hlZEdyZWdvcmlhbkRhdGVUaW1lKTsKICAgICAgICAgbV9kYXRhLT5tX2dyZWdvcmlhbkRhdGVU
aW1lQ2FjaGVkRm9yTVMgPSBtaWxsaTsKICAgICB9CiAgICAgcmV0dXJuICZtX2RhdGEtPm1fY2Fj
aGVkR3JlZ29yaWFuRGF0ZVRpbWU7CiB9CiAKLWNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBEYXRl
SW5zdGFuY2U6OmNhbGN1bGF0ZUdyZWdvcmlhbkRhdGVUaW1lVVRDKFZNJiB2bSkgY29uc3QKK2Nv
bnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBEYXRlSW5zdGFuY2U6OmNhbGN1bGF0ZUdyZWdvcmlhbkRh
dGVUaW1lVVRDKFZNOjpEYXRlQ2FjaGUmIGNhY2hlKSBjb25zdAogewogICAgIGRvdWJsZSBtaWxs
aSA9IGludGVybmFsTnVtYmVyKCk7CiAgICAgaWYgKHN0ZDo6aXNuYW4obWlsbGkpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmICghbV9kYXRhKQotICAgICAgICBtX2RhdGEgPSB2
bS5kYXRlSW5zdGFuY2VDYWNoZS5hZGQobWlsbGkpOworICAgICAgICBtX2RhdGEgPSBjYWNoZS5k
YXRlSW5zdGFuY2VDYWNoZS5hZGQobWlsbGkpOwogCiAgICAgaWYgKG1fZGF0YS0+bV9ncmVnb3Jp
YW5EYXRlVGltZVVUQ0NhY2hlZEZvck1TICE9IG1pbGxpKSB7Ci0gICAgICAgIG1zVG9HcmVnb3Jp
YW5EYXRlVGltZSh2bSwgbWlsbGksIFdURjo6VVRDVGltZSwgbV9kYXRhLT5tX2NhY2hlZEdyZWdv
cmlhbkRhdGVUaW1lVVRDKTsKKyAgICAgICAgbXNUb0dyZWdvcmlhbkRhdGVUaW1lKGNhY2hlLCBt
aWxsaSwgV1RGOjpVVENUaW1lLCBtX2RhdGEtPm1fY2FjaGVkR3JlZ29yaWFuRGF0ZVRpbWVVVEMp
OwogICAgICAgICBtX2RhdGEtPm1fZ3JlZ29yaWFuRGF0ZVRpbWVVVENDYWNoZWRGb3JNUyA9IG1p
bGxpOwogICAgIH0KICAgICByZXR1cm4gJm1fZGF0YS0+bV9jYWNoZWRHcmVnb3JpYW5EYXRlVGlt
ZVVUQzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVJbnN0YW5jZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVJbnN0YW5j
ZS5oCShyZXZpc2lvbiAyNjI1MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
YXRlSW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29w
eXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBD
b3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtNjAsMTggKzYwLDE4IEBAIHB1YmxpYzoKIAogICAg
IERFQ0xBUkVfRVhQT1JUX0lORk87CiAKLSAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3Jl
Z29yaWFuRGF0ZVRpbWUoVk0mIHZtKSBjb25zdAorICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1l
KiBncmVnb3JpYW5EYXRlVGltZShWTTo6RGF0ZUNhY2hlJiBjYWNoZSkgY29uc3QKICAgICB7CiAg
ICAgICAgIGlmIChtX2RhdGEgJiYgbV9kYXRhLT5tX2dyZWdvcmlhbkRhdGVUaW1lQ2FjaGVkRm9y
TVMgPT0gaW50ZXJuYWxOdW1iZXIoKSkKICAgICAgICAgICAgIHJldHVybiAmbV9kYXRhLT5tX2Nh
Y2hlZEdyZWdvcmlhbkRhdGVUaW1lOwotICAgICAgICByZXR1cm4gY2FsY3VsYXRlR3JlZ29yaWFu
RGF0ZVRpbWUodm0pOworICAgICAgICByZXR1cm4gY2FsY3VsYXRlR3JlZ29yaWFuRGF0ZVRpbWUo
Y2FjaGUpOwogICAgIH0KIAotICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBncmVnb3JpYW5E
YXRlVGltZVVUQyhWTSYgdm0pIGNvbnN0CisgICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdy
ZWdvcmlhbkRhdGVUaW1lVVRDKFZNOjpEYXRlQ2FjaGUmIGNhY2hlKSBjb25zdAogICAgIHsKICAg
ICAgICAgaWYgKG1fZGF0YSAmJiBtX2RhdGEtPm1fZ3JlZ29yaWFuRGF0ZVRpbWVVVENDYWNoZWRG
b3JNUyA9PSBpbnRlcm5hbE51bWJlcigpKQogICAgICAgICAgICAgcmV0dXJuICZtX2RhdGEtPm1f
Y2FjaGVkR3JlZ29yaWFuRGF0ZVRpbWVVVEM7Ci0gICAgICAgIHJldHVybiBjYWxjdWxhdGVHcmVn
b3JpYW5EYXRlVGltZVVUQyh2bSk7CisgICAgICAgIHJldHVybiBjYWxjdWxhdGVHcmVnb3JpYW5E
YXRlVGltZVVUQyhjYWNoZSk7CiAgICAgfQogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBw
cm90b3R5cGUpCkBAIC04Niw4ICs4Niw4IEBAIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgRGF0ZUluc3RhbmNlKFZNJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBk
b3VibGUpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBj
YWxjdWxhdGVHcmVnb3JpYW5EYXRlVGltZShWTSYpIGNvbnN0OwotICAgIEpTX0VYUE9SVF9QUklW
QVRFIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBjYWxjdWxhdGVHcmVnb3JpYW5EYXRlVGltZVVU
QyhWTSYpIGNvbnN0OworICAgIEpTX0VYUE9SVF9QUklWQVRFIGNvbnN0IEdyZWdvcmlhbkRhdGVU
aW1lKiBjYWxjdWxhdGVHcmVnb3JpYW5EYXRlVGltZShWTTo6RGF0ZUNhY2hlJikgY29uc3Q7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGNhbGN1bGF0ZUdy
ZWdvcmlhbkRhdGVUaW1lVVRDKFZNOjpEYXRlQ2FjaGUmKSBjb25zdDsKIAogICAgIGRvdWJsZSBt
X2ludGVybmFsTnVtYmVyIHsgUE5hTiB9OwogICAgIG11dGFibGUgUmVmUHRyPERhdGVJbnN0YW5j
ZURhdGE+IG1fZGF0YTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVQ
cm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0RhdGVQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyNjI1MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk0LDcg
KzI5NCw3IEBAIHN0YXRpYyBKU0NlbGwqIGZvcm1hdExvY2FsZURhdGUoSlNHbG9iYWwKICAgICBW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgSW50ZWdyaXR5OjphdWRpdFN0cnVjdHVy
ZUlEKHZtLCBkYXRlT2JqZWN0LT5zdHJ1Y3R1cmVJRCgpKTsKIAotICAgIGNvbnN0IEdyZWdvcmlh
bkRhdGVUaW1lKiBncmVnb3JpYW5EYXRlVGltZSA9IGRhdGVPYmplY3QtPmdyZWdvcmlhbkRhdGVU
aW1lKHZtKTsKKyAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUg
PSBkYXRlT2JqZWN0LT5ncmVnb3JpYW5EYXRlVGltZSh2bS5kYXRlQ2FjaGUpOwogICAgIGlmICgh
Z3JlZ29yaWFuRGF0ZVRpbWUpCiAgICAgICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcodm0s
ICJJbnZhbGlkIERhdGUiX3MpOwogICAgIHJldHVybiBmb3JtYXRMb2NhbGVEYXRlKGdsb2JhbE9i
amVjdCwgY2FsbEZyYW1lLCAqZ3JlZ29yaWFuRGF0ZVRpbWUsIGZvcm1hdCk7CkBAIC0zMDYsNiAr
MzA2LDggQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIGZvcm1hdGVEYXRlSW5zdGFuYwogewogICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgYXV0byYgY2FjaGUgPSB2bS5kYXRlQ2FjaGU7CisKICAgICBK
U1ZhbHVlIHRoaXNWYWx1ZSA9IGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCk7CiAgICAgYXV0byogdGhp
c0RhdGVPYmogPSBqc0R5bmFtaWNDYXN0PERhdGVJbnN0YW5jZSo+KHZtLCB0aGlzVmFsdWUpOwog
ICAgIGlmIChVTkxJS0VMWSghdGhpc0RhdGVPYmopKQpAQCAtMzEzLDggKzMxNSw4IEBAIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBmb3JtYXRlRGF0ZUluc3RhbmMKIAogICAgIEludGVncml0eTo6YXVk
aXRTdHJ1Y3R1cmVJRCh2bSwgdGhpc0RhdGVPYmotPnN0cnVjdHVyZUlEKCkpOwogICAgIGNvbnN0
IEdyZWdvcmlhbkRhdGVUaW1lKiBncmVnb3JpYW5EYXRlVGltZSA9IGFzVVRDVmFyaWFudAotICAg
ICAgICA/IHRoaXNEYXRlT2JqLT5ncmVnb3JpYW5EYXRlVGltZVVUQyh2bSkKLSAgICAgICAgOiB0
aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWUodm0pOworICAgICAgICA/IHRoaXNEYXRlT2Jq
LT5ncmVnb3JpYW5EYXRlVGltZVVUQyhjYWNoZSkKKyAgICAgICAgOiB0aGlzRGF0ZU9iai0+Z3Jl
Z29yaWFuRGF0ZVRpbWUoY2FjaGUpOwogICAgIGlmICghZ3JlZ29yaWFuRGF0ZVRpbWUpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOb250cml2aWFsU3RyaW5nKHZtLCBTdHJpbmco
IkludmFsaWQgRGF0ZSJfcykpKTsKIApAQCAtNTMwLDcgKzUzMiw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnUKICAgICBpZiAoIXN0ZDo6aXNmaW5pdGUodGhpc0Rh
dGVPYmotPmludGVybmFsTnVtYmVyKCkpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGds
b2JhbE9iamVjdCwgc2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZ2xvYmFsT2JqZWN0LCAiSW52YWxp
ZCBEYXRlIl9zKSk7CiAKLSAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0
ZVRpbWUgPSB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWVVVEModm0pOworICAgIGNvbnN0
IEdyZWdvcmlhbkRhdGVUaW1lKiBncmVnb3JpYW5EYXRlVGltZSA9IHRoaXNEYXRlT2JqLT5ncmVn
b3JpYW5EYXRlVGltZVVUQyh2bS5kYXRlQ2FjaGUpOwogICAgIGlmICghZ3JlZ29yaWFuRGF0ZVRp
bWUpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOb250cml2aWFsU3RyaW5nKHZt
LCBTdHJpbmcoIkludmFsaWQgRGF0ZSJfcykpKTsKICAgICAvLyBNYXhpbXVtIGFtb3VudCBvZiBz
cGFjZSB3ZSBuZWVkIGluIGJ1ZmZlcjogNyAobWF4LiBkaWdpdHMgaW4geWVhcikgKyAyICogNSAo
MiBjaGFyYWN0ZXJzIGVhY2ggZm9yIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kKSAr
IDQgKC4gKyAzIGRpZ2l0cyBmb3IgbWlsbGlzZWNvbmRzKQpAQCAtNjQ2LDcgKzY0OCw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnUKICAgICBpZiAoVU5MSUtFTFko
IXRoaXNEYXRlT2JqKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZ2xvYmFsT2Jq
ZWN0LCBzY29wZSk7CiAKLSAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0
ZVRpbWUgPSB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWUodm0pOworICAgIGNvbnN0IEdy
ZWdvcmlhbkRhdGVUaW1lKiBncmVnb3JpYW5EYXRlVGltZSA9IHRoaXNEYXRlT2JqLT5ncmVnb3Jp
YW5EYXRlVGltZSh2bS5kYXRlQ2FjaGUpOwogICAgIGlmICghZ3JlZ29yaWFuRGF0ZVRpbWUpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOYU4oKSk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc051bWJlcihncmVnb3JpYW5EYXRlVGltZS0+eWVhcigpKSk7CkBAIC02NjEs
NyArNjYzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQogICAg
IGlmIChVTkxJS0VMWSghdGhpc0RhdGVPYmopKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKIAotICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1l
KiBncmVnb3JpYW5EYXRlVGltZSA9IHRoaXNEYXRlT2JqLT5ncmVnb3JpYW5EYXRlVGltZVVUQyh2
bSk7CisgICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gdGhp
c0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lVVRDKHZtLmRhdGVDYWNoZSk7CiAgICAgaWYgKCFn
cmVnb3JpYW5EYXRlVGltZSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05hTigp
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGdyZWdvcmlhbkRhdGVUaW1l
LT55ZWFyKCkpKTsKQEAgLTY3Niw3ICs2NzgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGVQcm90b0Z1CiAgICAgaWYgKFVOTElLRUxZKCF0aGlzRGF0ZU9iaikpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogCi0gICAgY29u
c3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmotPmdy
ZWdvcmlhbkRhdGVUaW1lKHZtKTsKKyAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29y
aWFuRGF0ZVRpbWUgPSB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWUodm0uZGF0ZUNhY2hl
KTsKICAgICBpZiAoIWdyZWdvcmlhbkRhdGVUaW1lKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzTmFOKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZ3Jl
Z29yaWFuRGF0ZVRpbWUtPm1vbnRoKCkpKTsKQEAgLTY5MSw3ICs2OTMsNyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1CiAgICAgaWYgKFVOTElLRUxZKCF0aGlzRGF0
ZU9iaikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2Nv
cGUpOwogCi0gICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0g
dGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lVVRDKHZtKTsKKyAgICBjb25zdCBHcmVnb3Jp
YW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0
ZVRpbWVVVEModm0uZGF0ZUNhY2hlKTsKICAgICBpZiAoIWdyZWdvcmlhbkRhdGVUaW1lKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTmFOKCkpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNOdW1iZXIoZ3JlZ29yaWFuRGF0ZVRpbWUtPm1vbnRoKCkpKTsKQEAgLTcwNiw3
ICs3MDgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1CiAgICAg
aWYgKFVOTElLRUxZKCF0aGlzRGF0ZU9iaikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogCi0gICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUq
IGdyZWdvcmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lKHZtKTsK
KyAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSB0aGlzRGF0
ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWUodm0uZGF0ZUNhY2hlKTsKICAgICBpZiAoIWdyZWdvcmlh
bkRhdGVUaW1lKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTmFOKCkpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoZ3JlZ29yaWFuRGF0ZVRpbWUtPm1vbnRo
RGF5KCkpKTsKQEAgLTcyMSw3ICs3MjMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGRhdGVQcm90b0Z1CiAgICAgaWYgKFVOTElLRUxZKCF0aGlzRGF0ZU9iaikpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogCi0gICAgY29uc3Qg
R3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmotPmdyZWdv
cmlhbkRhdGVUaW1lVVRDKHZtKTsKKyAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29y
aWFuRGF0ZVRpbWUgPSB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWVVVEModm0uZGF0ZUNh
Y2hlKTsKICAgICBpZiAoIWdyZWdvcmlhbkRhdGVUaW1lKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzTmFOKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIo
Z3JlZ29yaWFuRGF0ZVRpbWUtPm1vbnRoRGF5KCkpKTsKQEAgLTczNiw3ICs3MzgsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1CiAgICAgaWYgKFVOTElLRUxZKCF0
aGlzRGF0ZU9iaikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVj
dCwgc2NvcGUpOwogCi0gICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVU
aW1lID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lKHZtKTsKKyAgICBjb25zdCBHcmVn
b3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFu
RGF0ZVRpbWUodm0uZGF0ZUNhY2hlKTsKICAgICBpZiAoIWdyZWdvcmlhbkRhdGVUaW1lKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTmFOKCkpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNOdW1iZXIoZ3JlZ29yaWFuRGF0ZVRpbWUtPndlZWtEYXkoKSkpOwpAQCAtNzUx
LDcgKzc1Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnUKICAg
ICBpZiAoVU5MSUtFTFkoIXRoaXNEYXRlT2JqKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAKLSAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGlt
ZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWVVVEMo
dm0pOworICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBncmVnb3JpYW5EYXRlVGltZSA9IHRo
aXNEYXRlT2JqLT5ncmVnb3JpYW5EYXRlVGltZVVUQyh2bS5kYXRlQ2FjaGUpOwogICAgIGlmICgh
Z3JlZ29yaWFuRGF0ZVRpbWUpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOYU4o
KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihncmVnb3JpYW5EYXRlVGlt
ZS0+d2Vla0RheSgpKSk7CkBAIC03NjYsNyArNzY4LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBkYXRlUHJvdG9GdQogICAgIGlmIChVTkxJS0VMWSghdGhpc0RhdGVPYmopKQogICAg
ICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKIAotICAg
IGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBncmVnb3JpYW5EYXRlVGltZSA9IHRoaXNEYXRlT2Jq
LT5ncmVnb3JpYW5EYXRlVGltZSh2bSk7CisgICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdy
ZWdvcmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lKHZtLmRhdGVD
YWNoZSk7CiAgICAgaWYgKCFncmVnb3JpYW5EYXRlVGltZSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc05hTigpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVy
KGdyZWdvcmlhbkRhdGVUaW1lLT5ob3VyKCkpKTsKQEAgLTc4MSw3ICs3ODMsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGRhdGVQcm90b0Z1CiAgICAgaWYgKFVOTElLRUxZKCF0aGlz
RGF0ZU9iaikpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUpOwogCi0gICAgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1l
ID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lVVRDKHZtKTsKKyAgICBjb25zdCBHcmVn
b3JpYW5EYXRlVGltZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFu
RGF0ZVRpbWVVVEModm0uZGF0ZUNhY2hlKTsKICAgICBpZiAoIWdyZWdvcmlhbkRhdGVUaW1lKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTmFOKCkpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNOdW1iZXIoZ3JlZ29yaWFuRGF0ZVRpbWUtPmhvdXIoKSkpOwpAQCAtNzk2
LDcgKzc5OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnUKICAg
ICBpZiAoVU5MSUtFTFkoIXRoaXNEYXRlT2JqKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAKLSAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGlt
ZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWUodm0p
OworICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBncmVnb3JpYW5EYXRlVGltZSA9IHRoaXNE
YXRlT2JqLT5ncmVnb3JpYW5EYXRlVGltZSh2bS5kYXRlQ2FjaGUpOwogICAgIGlmICghZ3JlZ29y
aWFuRGF0ZVRpbWUpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOYU4oKSk7CiAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihncmVnb3JpYW5EYXRlVGltZS0+bWlu
dXRlKCkpKTsKQEAgLTgxMSw3ICs4MTMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGRhdGVQcm90b0Z1CiAgICAgaWYgKFVOTElLRUxZKCF0aGlzRGF0ZU9iaikpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogCi0gICAgY29uc3Qg
R3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmotPmdyZWdv
cmlhbkRhdGVUaW1lVVRDKHZtKTsKKyAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29y
aWFuRGF0ZVRpbWUgPSB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWVVVEModm0uZGF0ZUNh
Y2hlKTsKICAgICBpZiAoIWdyZWdvcmlhbkRhdGVUaW1lKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzTmFOKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIo
Z3JlZ29yaWFuRGF0ZVRpbWUtPm1pbnV0ZSgpKSk7CkBAIC04MjYsNyArODI4LDcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQogICAgIGlmIChVTkxJS0VMWSghdGhp
c0RhdGVPYmopKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihnbG9iYWxPYmplY3Qs
IHNjb3BlKTsKIAotICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBncmVnb3JpYW5EYXRlVGlt
ZSA9IHRoaXNEYXRlT2JqLT5ncmVnb3JpYW5EYXRlVGltZSh2bSk7CisgICAgY29uc3QgR3JlZ29y
aWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRh
dGVUaW1lKHZtLmRhdGVDYWNoZSk7CiAgICAgaWYgKCFncmVnb3JpYW5EYXRlVGltZSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05hTigpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVtYmVyKGdyZWdvcmlhbkRhdGVUaW1lLT5zZWNvbmQoKSkpOwpAQCAtODQxLDcg
Kzg0Myw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnUKICAgICBp
ZiAoVU5MSUtFTFkoIXRoaXNEYXRlT2JqKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAKLSAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSog
Z3JlZ29yaWFuRGF0ZVRpbWUgPSB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWVVVEModm0p
OworICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBncmVnb3JpYW5EYXRlVGltZSA9IHRoaXNE
YXRlT2JqLT5ncmVnb3JpYW5EYXRlVGltZVVUQyh2bS5kYXRlQ2FjaGUpOwogICAgIGlmICghZ3Jl
Z29yaWFuRGF0ZVRpbWUpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOYU4oKSk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihncmVnb3JpYW5EYXRlVGltZS0+
c2Vjb25kKCkpKTsKQEAgLTg5NCw3ICs4OTYsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGRhdGVQcm90b0Z1CiAgICAgaWYgKFVOTElLRUxZKCF0aGlzRGF0ZU9iaikpCiAgICAgICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogCi0gICAgY29u
c3QgR3JlZ29yaWFuRGF0ZVRpbWUqIGdyZWdvcmlhbkRhdGVUaW1lID0gdGhpc0RhdGVPYmotPmdy
ZWdvcmlhbkRhdGVUaW1lKHZtKTsKKyAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGltZSogZ3JlZ29y
aWFuRGF0ZVRpbWUgPSB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWUodm0uZGF0ZUNhY2hl
KTsKICAgICBpZiAoIWdyZWdvcmlhbkRhdGVUaW1lKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzTmFOKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoLWdy
ZWdvcmlhbkRhdGVUaW1lLT51dGNPZmZzZXRJbk1pbnV0ZSgpKSk7CkBAIC05MTksNiArOTIxLDgg
QEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHNldE5ld1ZhbHVlRnJvbVRpbQogewogICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgYXV0byYgY2FjaGUgPSB2bS5kYXRlQ2FjaGU7CisKICAgICBKU1ZhbHVl
IHRoaXNWYWx1ZSA9IGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCk7CiAgICAgYXV0byogdGhpc0RhdGVP
YmogPSBqc0R5bmFtaWNDYXN0PERhdGVJbnN0YW5jZSo+KHZtLCB0aGlzVmFsdWUpOwogICAgIGlm
IChVTkxJS0VMWSghdGhpc0RhdGVPYmopKQpAQCAtOTM1LDggKzkzOSw4IEBAIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBzZXROZXdWYWx1ZUZyb21UaW0KICAgICBkb3VibGUgbXMgPSBtaWxsaSAtIHNl
Y3MgKiBtc1BlclNlY29uZDsKIAogICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBvdGhlciA9
IGlucHV0VGltZVR5cGUgPT0gV1RGOjpVVENUaW1lCi0gICAgICAgID8gdGhpc0RhdGVPYmotPmdy
ZWdvcmlhbkRhdGVUaW1lVVRDKHZtKQotICAgICAgICA6IHRoaXNEYXRlT2JqLT5ncmVnb3JpYW5E
YXRlVGltZSh2bSk7CisgICAgICAgID8gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lVVRD
KGNhY2hlKQorICAgICAgICA6IHRoaXNEYXRlT2JqLT5ncmVnb3JpYW5EYXRlVGltZShjYWNoZSk7
CiAgICAgaWYgKCFvdGhlcikKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05hTigp
KTsKIApAQCAtOTQ4LDcgKzk1Miw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBzZXROZXdWYWx1
ZUZyb21UaW0KICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05hTigpKTsKICAgICB9
IAogCi0gICAgZG91YmxlIG5ld1VUQ0RhdGUgPSBncmVnb3JpYW5EYXRlVGltZVRvTVModm0sIGdy
ZWdvcmlhbkRhdGVUaW1lLCBtcywgaW5wdXRUaW1lVHlwZSk7CisgICAgZG91YmxlIG5ld1VUQ0Rh
dGUgPSBncmVnb3JpYW5EYXRlVGltZVRvTVMoY2FjaGUsIGdyZWdvcmlhbkRhdGVUaW1lLCBtcywg
aW5wdXRUaW1lVHlwZSk7CiAgICAgZG91YmxlIHJlc3VsdCA9IHRpbWVDbGlwKG5ld1VUQ0RhdGUp
OwogICAgIHRoaXNEYXRlT2JqLT5zZXRJbnRlcm5hbE51bWJlcihyZXN1bHQpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIocmVzdWx0KSk7CkBAIC05NTgsNiArOTYyLDggQEAg
c3RhdGljIEVuY29kZWRKU1ZhbHVlIHNldE5ld1ZhbHVlRnJvbURhdAogewogICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgYXV0byYgY2FjaGUgPSB2bS5kYXRlQ2FjaGU7CisKICAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCk7CiAgICAgYXV0byogdGhpc0RhdGVPYmog
PSBqc0R5bmFtaWNDYXN0PERhdGVJbnN0YW5jZSo+KHZtLCB0aGlzVmFsdWUpOwogICAgIGlmIChV
TkxJS0VMWSghdGhpc0RhdGVPYmopKQpAQCAtOTczLDEyICs5NzksMTIgQEAgc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIHNldE5ld1ZhbHVlRnJvbURhdAogCiAgICAgR3JlZ29yaWFuRGF0ZVRpbWUgZ3Jl
Z29yaWFuRGF0ZVRpbWU7IAogICAgIGlmIChudW1BcmdzVG9Vc2UgPT0gMyAmJiBzdGQ6OmlzbmFu
KG1pbGxpKSkgCi0gICAgICAgIG1zVG9HcmVnb3JpYW5EYXRlVGltZSh2bSwgMCwgV1RGOjpVVENU
aW1lLCBncmVnb3JpYW5EYXRlVGltZSk7CisgICAgICAgIG1zVG9HcmVnb3JpYW5EYXRlVGltZShj
YWNoZSwgMCwgV1RGOjpVVENUaW1lLCBncmVnb3JpYW5EYXRlVGltZSk7CiAgICAgZWxzZSB7IAog
ICAgICAgICBtcyA9IG1pbGxpIC0gZmxvb3IobWlsbGkgLyBtc1BlclNlY29uZCkgKiBtc1BlclNl
Y29uZDsgCiAgICAgICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBvdGhlciA9IGlucHV0VGlt
ZVR5cGUgPT0gV1RGOjpVVENUaW1lCi0gICAgICAgICAgICA/IHRoaXNEYXRlT2JqLT5ncmVnb3Jp
YW5EYXRlVGltZVVUQyh2bSkKLSAgICAgICAgICAgIDogdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRh
dGVUaW1lKHZtKTsKKyAgICAgICAgICAgID8gdGhpc0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1l
VVRDKGNhY2hlKQorICAgICAgICAgICAgOiB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWUo
Y2FjaGUpOwogICAgICAgICBpZiAoIW90aGVyKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc05hTigpKTsKICAgICAgICAgZ3JlZ29yaWFuRGF0ZVRpbWUgPSAqb3RoZXI7CkBA
IC05OTEsNyArOTk3LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIHNldE5ld1ZhbHVlRnJvbURh
dAogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTmFOKCkpOwogICAgIH0gCiAKLSAg
ICBkb3VibGUgbmV3VVRDRGF0ZSA9IGdyZWdvcmlhbkRhdGVUaW1lVG9NUyh2bSwgZ3JlZ29yaWFu
RGF0ZVRpbWUsIG1zLCBpbnB1dFRpbWVUeXBlKTsKKyAgICBkb3VibGUgbmV3VVRDRGF0ZSA9IGdy
ZWdvcmlhbkRhdGVUaW1lVG9NUyhjYWNoZSwgZ3JlZ29yaWFuRGF0ZVRpbWUsIG1zLCBpbnB1dFRp
bWVUeXBlKTsKICAgICBkb3VibGUgcmVzdWx0ID0gdGltZUNsaXAobmV3VVRDRGF0ZSk7CiAgICAg
dGhpc0RhdGVPYmotPnNldEludGVybmFsTnVtYmVyKHJlc3VsdCk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc051bWJlcihyZXN1bHQpKTsKQEAgLTEwNzEsNiArMTA3Nyw4IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnUKIHsKICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIGF1dG8mIGNhY2hlID0gdm0uZGF0ZUNhY2hlOworCiAgICAgSlNWYWx1ZSB0aGlzVmFs
dWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwogICAgIGF1dG8qIHRoaXNEYXRlT2JqID0ganNE
eW5hbWljQ2FzdDxEYXRlSW5zdGFuY2UqPih2bSwgdGhpc1ZhbHVlKTsKICAgICBpZiAoVU5MSUtF
TFkoIXRoaXNEYXRlT2JqKSkKQEAgLTEwODgsMTEgKzEwOTYsMTEgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBkYXRlUHJvdG9GdQogICAgIGlmIChzdGQ6OmlzbmFuKG1pbGxpKSkKICAg
ICAgICAgLy8gQmFzZWQgb24gRUNNQSAyNjIgQi4yLjUgKHNldFllYXIpCiAgICAgICAgIC8vIHRo
ZSB0aW1lIG11c3QgYmUgcmVzZXQgdG8gKzAgaWYgaXQgaXMgTmFOLgotICAgICAgICBtc1RvR3Jl
Z29yaWFuRGF0ZVRpbWUodm0sIDAsIFdURjo6VVRDVGltZSwgZ3JlZ29yaWFuRGF0ZVRpbWUpOwor
ICAgICAgICBtc1RvR3JlZ29yaWFuRGF0ZVRpbWUoY2FjaGUsIDAsIFdURjo6VVRDVGltZSwgZ3Jl
Z29yaWFuRGF0ZVRpbWUpOwogICAgIGVsc2UgewogICAgICAgICBkb3VibGUgc2VjcyA9IGZsb29y
KG1pbGxpIC8gbXNQZXJTZWNvbmQpOwogICAgICAgICBtcyA9IG1pbGxpIC0gc2VjcyAqIG1zUGVy
U2Vjb25kOwotICAgICAgICBpZiAoY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIG90aGVyID0gdGhp
c0RhdGVPYmotPmdyZWdvcmlhbkRhdGVUaW1lKHZtKSkKKyAgICAgICAgaWYgKGNvbnN0IEdyZWdv
cmlhbkRhdGVUaW1lKiBvdGhlciA9IHRoaXNEYXRlT2JqLT5ncmVnb3JpYW5EYXRlVGltZShjYWNo
ZSkpCiAgICAgICAgICAgICBncmVnb3JpYW5EYXRlVGltZSA9ICpvdGhlcjsKICAgICB9CiAKQEAg
LTExMDQsNyArMTExMiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3Rv
RnUKICAgICB9CiAKICAgICBncmVnb3JpYW5EYXRlVGltZS5zZXRZZWFyKHRvSW50MzIoKHllYXIg
Pj0gMCAmJiB5ZWFyIDw9IDk5KSA/ICh5ZWFyICsgMTkwMCkgOiB5ZWFyKSk7Ci0gICAgZG91Ymxl
IHRpbWVJbk1pbGxpc2Vjb25kcyA9IGdyZWdvcmlhbkRhdGVUaW1lVG9NUyh2bSwgZ3JlZ29yaWFu
RGF0ZVRpbWUsIG1zLCBXVEY6OkxvY2FsVGltZSk7CisgICAgZG91YmxlIHRpbWVJbk1pbGxpc2Vj
b25kcyA9IGdyZWdvcmlhbkRhdGVUaW1lVG9NUyhjYWNoZSwgZ3JlZ29yaWFuRGF0ZVRpbWUsIG1z
LCBXVEY6OkxvY2FsVGltZSk7CiAgICAgZG91YmxlIHJlc3VsdCA9IHRpbWVDbGlwKHRpbWVJbk1p
bGxpc2Vjb25kcyk7CiAgICAgdGhpc0RhdGVPYmotPnNldEludGVybmFsTnVtYmVyKHJlc3VsdCk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihyZXN1bHQpKTsKQEAgLTExMTks
NyArMTEyNyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZGF0ZVByb3RvRnUKICAg
ICBpZiAoVU5MSUtFTFkoIXRoaXNEYXRlT2JqKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAKLSAgICBjb25zdCBHcmVnb3JpYW5EYXRlVGlt
ZSogZ3JlZ29yaWFuRGF0ZVRpbWUgPSB0aGlzRGF0ZU9iai0+Z3JlZ29yaWFuRGF0ZVRpbWUodm0p
OworICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBncmVnb3JpYW5EYXRlVGltZSA9IHRoaXNE
YXRlT2JqLT5ncmVnb3JpYW5EYXRlVGltZSh2bS5kYXRlQ2FjaGUpOwogICAgIGlmICghZ3JlZ29y
aWFuRGF0ZVRpbWUpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOYU4oKSk7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0ZU1hdGguY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRGF0ZU1hdGguY3BwCShy
ZXZpc2lvbiAyNjI1MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0RhdGVN
YXRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogQ29weXJpZ2h0
IChDKSAyMDA2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29w
eXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KICAqIENvcHlyaWdodCAoQykg
MjAxMCAmeWV0LCBMTEMuIChuYXRlQGFuZHlldC5uZXQpCkBAIC04MywxMCArODMsMTAgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAvLyBOT1RFOiBUaGUgaW1wbGVtZW50YXRpb24gcmVsaWVzIG9uIHRoZSBm
YWN0IHRoYXQgbm8gdGltZSB6b25lcyBoYXZlCiAvLyBtb3JlIHRoYW4gb25lIGRheWxpZ2h0IHNh
dmluZ3Mgb2Zmc2V0IGNoYW5nZSBwZXIgbW9udGguCiAvLyBJZiB0aGlzIGZ1bmN0aW9uIGlzIGNh
bGxlZCB3aXRoIE5hTiBpdCByZXR1cm5zIE5hTi4KLXN0YXRpYyBMb2NhbFRpbWVPZmZzZXQgbG9j
YWxUaW1lT2Zmc2V0KFZNJiB2bSwgZG91YmxlIG1zLCBXVEY6OlRpbWVUeXBlIGlucHV0VGltZVR5
cGUgPSBXVEY6OlVUQ1RpbWUpCitzdGF0aWMgTG9jYWxUaW1lT2Zmc2V0IGxvY2FsVGltZU9mZnNl
dChWTTo6RGF0ZUNhY2hlJiBkYXRlQ2FjaGUsIGRvdWJsZSBtcywgV1RGOjpUaW1lVHlwZSBpbnB1
dFRpbWVUeXBlID0gV1RGOjpVVENUaW1lKQogewogICAgIExvY2FsVGltZU9mZnNldENhY2hlJiBj
YWNoZSA9IGlucHV0VGltZVR5cGUgPT0gV1RGOjpMb2NhbFRpbWUKLSAgICAgICAgPyB2bS5sb2Nh
bFRpbWVPZmZzZXRDYWNoZSA6IHZtLnV0Y1RpbWVPZmZzZXRDYWNoZTsKKyAgICAgICAgPyBkYXRl
Q2FjaGUubG9jYWxUaW1lT2Zmc2V0Q2FjaGUgOiBkYXRlQ2FjaGUudXRjVGltZU9mZnNldENhY2hl
OwogCiAgICAgZG91YmxlIHN0YXJ0ID0gY2FjaGUuc3RhcnQ7CiAgICAgZG91YmxlIGVuZCA9IGNh
Y2hlLmVuZDsKQEAgLTE0NywzMCArMTQ3LDMwIEBAIHN0YXRpYyBpbmxpbmUgZG91YmxlIHRpbWVU
b01TKGRvdWJsZSBob3UKICAgICByZXR1cm4gKCgoaG91ciAqIFdURjo6bWludXRlc1BlckhvdXIg
KyBtaW4pICogV1RGOjpzZWNvbmRzUGVyTWludXRlICsgc2VjKSAqIFdURjo6bXNQZXJTZWNvbmQg
KyBtcyk7CiB9CiAKLWRvdWJsZSBncmVnb3JpYW5EYXRlVGltZVRvTVMoVk0mIHZtLCBjb25zdCBH
cmVnb3JpYW5EYXRlVGltZSYgdCwgZG91YmxlIG1pbGxpU2Vjb25kcywgV1RGOjpUaW1lVHlwZSBp
bnB1dFRpbWVUeXBlKQorZG91YmxlIGdyZWdvcmlhbkRhdGVUaW1lVG9NUyhWTTo6RGF0ZUNhY2hl
JiBjYWNoZSwgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUmIHQsIGRvdWJsZSBtaWxsaVNlY29uZHMs
IFdURjo6VGltZVR5cGUgaW5wdXRUaW1lVHlwZSkKIHsKICAgICBkb3VibGUgZGF5ID0gZGF0ZVRv
RGF5c0Zyb20xOTcwKHQueWVhcigpLCB0Lm1vbnRoKCksIHQubW9udGhEYXkoKSk7CiAgICAgZG91
YmxlIG1zID0gdGltZVRvTVModC5ob3VyKCksIHQubWludXRlKCksIHQuc2Vjb25kKCksIG1pbGxp
U2Vjb25kcyk7CiAgICAgZG91YmxlIGxvY2FsVGltZVJlc3VsdCA9IChkYXkgKiBXVEY6Om1zUGVy
RGF5KSArIG1zOwogCiAgICAgZG91YmxlIGxvY2FsVG9VVENUaW1lT2Zmc2V0ID0gaW5wdXRUaW1l
VHlwZSA9PSBXVEY6OkxvY2FsVGltZQotICAgICAgICA/IGxvY2FsVGltZU9mZnNldCh2bSwgbG9j
YWxUaW1lUmVzdWx0LCBpbnB1dFRpbWVUeXBlKS5vZmZzZXQgOiAwOworICAgICAgICA/IGxvY2Fs
VGltZU9mZnNldChjYWNoZSwgbG9jYWxUaW1lUmVzdWx0LCBpbnB1dFRpbWVUeXBlKS5vZmZzZXQg
OiAwOwogCiAgICAgcmV0dXJuIGxvY2FsVGltZVJlc3VsdCAtIGxvY2FsVG9VVENUaW1lT2Zmc2V0
OwogfQogCiAvLyBpbnB1dCBpcyBVVEMKLXZvaWQgbXNUb0dyZWdvcmlhbkRhdGVUaW1lKFZNJiB2
bSwgZG91YmxlIG1zLCBXVEY6OlRpbWVUeXBlIG91dHB1dFRpbWVUeXBlLCBHcmVnb3JpYW5EYXRl
VGltZSYgdG0pCit2b2lkIG1zVG9HcmVnb3JpYW5EYXRlVGltZShWTTo6RGF0ZUNhY2hlJiBjYWNo
ZSwgZG91YmxlIG1zLCBXVEY6OlRpbWVUeXBlIG91dHB1dFRpbWVUeXBlLCBHcmVnb3JpYW5EYXRl
VGltZSYgdG0pCiB7CiAgICAgTG9jYWxUaW1lT2Zmc2V0IGxvY2FsVGltZTsKICAgICBpZiAob3V0
cHV0VGltZVR5cGUgPT0gV1RGOjpMb2NhbFRpbWUpIHsKLSAgICAgICAgbG9jYWxUaW1lID0gbG9j
YWxUaW1lT2Zmc2V0KHZtLCBtcyk7CisgICAgICAgIGxvY2FsVGltZSA9IGxvY2FsVGltZU9mZnNl
dChjYWNoZSwgbXMpOwogICAgICAgICBtcyArPSBsb2NhbFRpbWUub2Zmc2V0OwogICAgIH0KICAg
ICB0bSA9IEdyZWdvcmlhbkRhdGVUaW1lKG1zLCBsb2NhbFRpbWUpOwogfQogCi1zdGF0aWMgZG91
YmxlIHBhcnNlRGF0ZShWTSYgdm0sIGNvbnN0IGNoYXIqIGRhdGVTdHJpbmcpCitzdGF0aWMgZG91
YmxlIHBhcnNlRGF0ZShWTTo6RGF0ZUNhY2hlJiBjYWNoZSwgY29uc3QgY2hhciogZGF0ZVN0cmlu
ZykKIHsKICAgICBib29sIGlzTG9jYWxUaW1lOwogICAgIGRvdWJsZSB2YWx1ZSA9IFdURjo6cGFy
c2VFUzVEYXRlRnJvbU51bGxUZXJtaW5hdGVkQ2hhcmFjdGVycyhkYXRlU3RyaW5nLCBpc0xvY2Fs
VGltZSk7CkBAIC0xNzgsNyArMTc4LDcgQEAgc3RhdGljIGRvdWJsZSBwYXJzZURhdGUoVk0mIHZt
LCBjb25zdCBjaAogICAgICAgICB2YWx1ZSA9IFdURjo6cGFyc2VEYXRlRnJvbU51bGxUZXJtaW5h
dGVkQ2hhcmFjdGVycyhkYXRlU3RyaW5nLCBpc0xvY2FsVGltZSk7CiAKICAgICBpZiAoaXNMb2Nh
bFRpbWUpCi0gICAgICAgIHZhbHVlIC09IGxvY2FsVGltZU9mZnNldCh2bSwgdmFsdWUsIFdURjo6
TG9jYWxUaW1lKS5vZmZzZXQ7CisgICAgICAgIHZhbHVlIC09IGxvY2FsVGltZU9mZnNldChjYWNo
ZSwgdmFsdWUsIFdURjo6TG9jYWxUaW1lKS5vZmZzZXQ7CiAKICAgICByZXR1cm4gdmFsdWU7CiB9
CkBAIC0xODYsOSArMTg2LDEwIEBAIHN0YXRpYyBkb3VibGUgcGFyc2VEYXRlKFZNJiB2bSwgY29u
c3QgY2gKIGRvdWJsZSBwYXJzZURhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgVk0m
IHZtLCBjb25zdCBTdHJpbmcmIGRhdGUpCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgIGF1dG8mIGNhY2hlID0gdm0uZGF0ZUNhY2hlOwogCi0gICAgaWYg
KGRhdGUgPT0gdm0uY2FjaGVkRGF0ZVN0cmluZykKLSAgICAgICAgcmV0dXJuIHZtLmNhY2hlZERh
dGVTdHJpbmdWYWx1ZTsKKyAgICBpZiAoZGF0ZSA9PSBjYWNoZS5jYWNoZWREYXRlU3RyaW5nKQor
ICAgICAgICByZXR1cm4gY2FjaGUuY2FjaGVkRGF0ZVN0cmluZ1ZhbHVlOwogICAgIGF1dG8gZXhw
ZWN0ZWRTdHJpbmcgPSBkYXRlLnRyeUdldFV0ZjgoKTsKICAgICBpZiAoIWV4cGVjdGVkU3RyaW5n
KSB7CiAgICAgICAgIGlmIChleHBlY3RlZFN0cmluZy5lcnJvcigpID09IFVURjhDb252ZXJzaW9u
RXJyb3I6Ok91dE9mTWVtb3J5KQpAQCAtMjAwLDkgKzIwMSw5IEBAIGRvdWJsZSBwYXJzZURhdGUo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE8KICAgICB9CiAKICAgICBhdXRvIGRhdGVVdGY4ID0gZXhw
ZWN0ZWRTdHJpbmcudmFsdWUoKTsKLSAgICBkb3VibGUgdmFsdWUgPSBwYXJzZURhdGUodm0sIGRh
dGVVdGY4LmRhdGEoKSk7Ci0gICAgdm0uY2FjaGVkRGF0ZVN0cmluZyA9IGRhdGU7Ci0gICAgdm0u
Y2FjaGVkRGF0ZVN0cmluZ1ZhbHVlID0gdmFsdWU7CisgICAgZG91YmxlIHZhbHVlID0gcGFyc2VE
YXRlKGNhY2hlLCBkYXRlVXRmOC5kYXRhKCkpOworICAgIGNhY2hlLmNhY2hlZERhdGVTdHJpbmcg
PSBkYXRlOworICAgIGNhY2hlLmNhY2hlZERhdGVTdHJpbmdWYWx1ZSA9IHZhbHVlOwogICAgIHJl
dHVybiB2YWx1ZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNE
YXRlTWF0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RGF0ZU1hdGguaAkocmV2aXNpb24gMjYyNTE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNEYXRlTWF0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC01MCw5ICs1MCw5IEBAIG5hbWVzcGFjZSBKU0Mgewog
Y2xhc3MgSlNHbG9iYWxPYmplY3Q7CiBjbGFzcyBWTTsKIAotSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBtc1RvR3JlZ29yaWFuRGF0ZVRpbWUoVk0mLCBkb3VibGUsIFdURjo6VGltZVR5cGUgb3V0cHV0
VGltZVR5cGUsIEdyZWdvcmlhbkRhdGVUaW1lJik7Ci1KU19FWFBPUlRfUFJJVkFURSBkb3VibGUg
Z3JlZ29yaWFuRGF0ZVRpbWVUb01TKFZNJiwgY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUmLCBkb3Vi
bGUsIFdURjo6VGltZVR5cGUgaW5wdXRUaW1lVHlwZSk7Ci1KU19FWFBPUlRfUFJJVkFURSBkb3Vi
bGUgZ2V0VVRDT2Zmc2V0KFZNJik7CitKU19FWFBPUlRfUFJJVkFURSB2b2lkIG1zVG9HcmVnb3Jp
YW5EYXRlVGltZShWTTo6RGF0ZUNhY2hlJiwgZG91YmxlLCBXVEY6OlRpbWVUeXBlIG91dHB1dFRp
bWVUeXBlLCBHcmVnb3JpYW5EYXRlVGltZSYpOworSlNfRVhQT1JUX1BSSVZBVEUgZG91YmxlIGdy
ZWdvcmlhbkRhdGVUaW1lVG9NUyhWTTo6RGF0ZUNhY2hlJiwgY29uc3QgR3JlZ29yaWFuRGF0ZVRp
bWUmLCBkb3VibGUsIFdURjo6VGltZVR5cGUgaW5wdXRUaW1lVHlwZSk7CitKU19FWFBPUlRfUFJJ
VkFURSBkb3VibGUgZ2V0VVRDT2Zmc2V0KFZNOjpEYXRlQ2FjaGUmKTsKIEpTX0VYUE9SVF9QUklW
QVRFIGRvdWJsZSBwYXJzZURhdGUoSlNHbG9iYWxPYmplY3QqLCBWTSYsIGNvbnN0IFdURjo6U3Ry
aW5nJik7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmNwcAkocmV2aXNpb24gMjYyNTE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NTUsMTEgKzg1NSwxMSBAQCBWTTo6Q2xp
ZW50RGF0YTo6fkNsaWVudERhdGEoKQogCiB2b2lkIFZNOjpyZXNldERhdGVDYWNoZSgpCiB7Ci0g
ICAgdXRjVGltZU9mZnNldENhY2hlLnJlc2V0KCk7Ci0gICAgbG9jYWxUaW1lT2Zmc2V0Q2FjaGUu
cmVzZXQoKTsKLSAgICBjYWNoZWREYXRlU3RyaW5nID0gU3RyaW5nKCk7Ci0gICAgY2FjaGVkRGF0
ZVN0cmluZ1ZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsK
LSAgICBkYXRlSW5zdGFuY2VDYWNoZS5yZXNldCgpOworICAgIGRhdGVDYWNoZS51dGNUaW1lT2Zm
c2V0Q2FjaGUucmVzZXQoKTsKKyAgICBkYXRlQ2FjaGUubG9jYWxUaW1lT2Zmc2V0Q2FjaGUucmVz
ZXQoKTsKKyAgICBkYXRlQ2FjaGUuY2FjaGVkRGF0ZVN0cmluZyA9IFN0cmluZygpOworICAgIGRh
dGVDYWNoZS5jYWNoZWREYXRlU3RyaW5nVmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJs
ZT46OnF1aWV0X05hTigpOworICAgIGRhdGVDYWNoZS5kYXRlSW5zdGFuY2VDYWNoZS5yZXNldCgp
OwogfQogCiB2b2lkIFZNOjp3aGVuSWRsZShGdW5jdGlvbjx2b2lkKCk+JiYgY2FsbGJhY2spCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDI2MjUxNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyMyw3
ICs3MjMsNiBAQCBwdWJsaWM6CiAgICAgY29uc3QgQXJnTGlzdCogZW1wdHlMaXN0OwogICAgIFNt
YWxsU3RyaW5ncyBzbWFsbFN0cmluZ3M7CiAgICAgTnVtZXJpY1N0cmluZ3MgbnVtZXJpY1N0cmlu
Z3M7Ci0gICAgRGF0ZUluc3RhbmNlQ2FjaGUgZGF0ZUluc3RhbmNlQ2FjaGU7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPFNpbXBsZVN0YXRzPiBtYWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3JkRm9y
QmFzZWxpbmVKSVQ7CiAgICAgV2Vha0dDTWFwPHN0ZDo6cGFpcjxDdXN0b21HZXR0ZXJTZXR0ZXIq
LCBpbnQ+LCBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uPiBjdXN0b21HZXR0ZXJTZXR0ZXJG
dW5jdGlvbk1hcDsKICAgICBXZWFrR0NNYXA8U3RyaW5nSW1wbCosIEpTU3RyaW5nLCBQdHJIYXNo
PFN0cmluZ0ltcGwqPj4gc3RyaW5nQ2FjaGU7CkBAIC05NjIsMTIgKzk2MSwxNiBAQCBwdWJsaWM6
CiAKICAgICBKU09iamVjdCogc3RyaW5nUmVjdXJzaW9uQ2hlY2tGaXJzdE9iamVjdCB7IG51bGxw
dHIgfTsKICAgICBIYXNoU2V0PEpTT2JqZWN0Kj4gc3RyaW5nUmVjdXJzaW9uQ2hlY2tWaXNpdGVk
T2JqZWN0czsKLSAgICAKLSAgICBMb2NhbFRpbWVPZmZzZXRDYWNoZSB1dGNUaW1lT2Zmc2V0Q2Fj
aGU7Ci0gICAgTG9jYWxUaW1lT2Zmc2V0Q2FjaGUgbG9jYWxUaW1lT2Zmc2V0Q2FjaGU7CiAKLSAg
ICBTdHJpbmcgY2FjaGVkRGF0ZVN0cmluZzsKLSAgICBkb3VibGUgY2FjaGVkRGF0ZVN0cmluZ1Zh
bHVlOworICAgIHN0cnVjdCBEYXRlQ2FjaGUgeworICAgICAgICBEYXRlSW5zdGFuY2VDYWNoZSBk
YXRlSW5zdGFuY2VDYWNoZTsKKyAgICAgICAgTG9jYWxUaW1lT2Zmc2V0Q2FjaGUgdXRjVGltZU9m
ZnNldENhY2hlOworICAgICAgICBMb2NhbFRpbWVPZmZzZXRDYWNoZSBsb2NhbFRpbWVPZmZzZXRD
YWNoZTsKKworICAgICAgICBTdHJpbmcgY2FjaGVkRGF0ZVN0cmluZzsKKyAgICAgICAgZG91Ymxl
IGNhY2hlZERhdGVTdHJpbmdWYWx1ZTsKKyAgICB9OworICAgIERhdGVDYWNoZSBkYXRlQ2FjaGU7
CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UHJvZmlsZXI6OkRhdGFiYXNlPiBtX3BlckJ5dGVjb2Rl
UHJvZmlsZXI7CiAgICAgUmVmUHRyPFR5cGVkQXJyYXlDb250cm9sbGVyPiBtX3R5cGVkQXJyYXlD
b250cm9sbGVyOwo=
</data>
<flag name="review"
          id="416388"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
          </attachment>
      

    </bug>

</bugzilla>