<?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>141842</bug_id>
          
          <creation_ts>2015-02-20 11:23:58 -0800</creation_ts>
          <short_desc>Rename ScrollElasticityController to ScrollController</short_desc>
          <delta_ts>2015-02-20 18:07:22 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>140633</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>andersca</cc>
    
    <cc>bdakin</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1070738</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-02-20 11:23:58 -0800</bug_when>
    <thetext>As a first step in some scrolling refactoring, rename ScrollElasticityController to ScrollController.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070742</commentid>
    <comment_count>1</comment_count>
      <attachid>246979</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-02-20 11:30:45 -0800</bug_when>
    <thetext>Created attachment 246979
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070746</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-20 11:33:33 -0800</bug_when>
    <thetext>Attachment 246979 did not pass style-queue:


ERROR: Source/WebCore/platform/mac/ScrollController.mm:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/platform/mac/ScrollController.mm:107:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/WebCore/platform/mac/ScrollController.mm:107:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/mac/ScrollController.mm:193:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/platform/mac/ScrollController.mm:204:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/platform/mac/ScrollController.mm:227:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/platform/mac/ScrollController.mm:229:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/platform/mac/ScrollController.mm:233:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/platform/mac/ScrollController.mm:241:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/platform/mac/ScrollController.mm:251:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/platform/mac/ScrollController.mm:335:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 11 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070754</commentid>
    <comment_count>3</comment_count>
      <attachid>246982</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-02-20 11:41:26 -0800</bug_when>
    <thetext>Created attachment 246982
Patch v2 (clean up style warnings)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070757</commentid>
    <comment_count>4</comment_count>
      <attachid>246982</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-02-20 11:49:10 -0800</bug_when>
    <thetext>Comment on attachment 246982
Patch v2 (clean up style warnings)

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

&gt; Source/WebCore/platform/mac/ScrollController.mm:57
&gt; +static NSTimeInterval systemUptime()
&gt; +{
&gt; +    if ([[NSProcessInfo processInfo] respondsToSelector:@selector(systemUptime)])
&gt; +        return [[NSProcessInfo processInfo] systemUptime];
&gt; +
&gt; +    // Get how long system has been up. Found by looking getting &quot;boottime&quot; from the kernel.
&gt; +    static struct timeval boottime = {0, 0};
&gt; +    if (!boottime.tv_sec) {
&gt; +        int mib[2] = {CTL_KERN, KERN_BOOTTIME};
&gt; +        size_t size = sizeof(boottime);
&gt; +        if (-1 == sysctl(mib, 2, &amp;boottime, &amp;size, 0, 0))
&gt; +            boottime.tv_sec = 0;
&gt; +    }
&gt; +    struct timeval now;
&gt; +    if (boottime.tv_sec &amp;&amp; -1 != gettimeofday(&amp;now, 0)) {
&gt; +        struct timeval uptime;
&gt; +        timersub(&amp;now, &amp;boottime, &amp;uptime);
&gt; +        NSTimeInterval result = uptime.tv_sec + (uptime.tv_usec / 1E+6);
&gt; +        return result;
&gt; +    }
&gt; +    return 0;
&gt; +}

Why the heck is this here? Can&apos;t we just use monotonicallyIncreasingTime or some std::chrono?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070758</commentid>
    <comment_count>5</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-02-20 11:54:18 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 246982 [details]
&gt; Patch v2 (clean up style warnings)
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=246982&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/mac/ScrollController.mm:57
&gt; &gt; +static NSTimeInterval systemUptime()
&gt; &gt; +{
&gt; &gt; +    if ([[NSProcessInfo processInfo] respondsToSelector:@selector(systemUptime)])
&gt; &gt; +        return [[NSProcessInfo processInfo] systemUptime];
&gt; &gt; +
&gt; &gt; +    // Get how long system has been up. Found by looking getting &quot;boottime&quot; from the kernel.
&gt; &gt; +    static struct timeval boottime = {0, 0};
&gt; &gt; +    if (!boottime.tv_sec) {
&gt; &gt; +        int mib[2] = {CTL_KERN, KERN_BOOTTIME};
&gt; &gt; +        size_t size = sizeof(boottime);
&gt; &gt; +        if (-1 == sysctl(mib, 2, &amp;boottime, &amp;size, 0, 0))
&gt; &gt; +            boottime.tv_sec = 0;
&gt; &gt; +    }
&gt; &gt; +    struct timeval now;
&gt; &gt; +    if (boottime.tv_sec &amp;&amp; -1 != gettimeofday(&amp;now, 0)) {
&gt; &gt; +        struct timeval uptime;
&gt; &gt; +        timersub(&amp;now, &amp;boottime, &amp;uptime);
&gt; &gt; +        NSTimeInterval result = uptime.tv_sec + (uptime.tv_usec / 1E+6);
&gt; &gt; +        return result;
&gt; &gt; +    }
&gt; &gt; +    return 0;
&gt; &gt; +}
&gt; 
&gt; Why the heck is this here? Can&apos;t we just use monotonicallyIncreasingTime or
&gt; some std::chrono?

I&apos;m not sure! Beth, do you remember why this is here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070760</commentid>
    <comment_count>6</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2015-02-20 12:00:51 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; Comment on attachment 246982 [details]
&gt; &gt; Patch v2 (clean up style warnings)
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=246982&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/mac/ScrollController.mm:57
&gt; &gt; &gt; +static NSTimeInterval systemUptime()
&gt; &gt; &gt; +{
&gt; &gt; &gt; +    if ([[NSProcessInfo processInfo] respondsToSelector:@selector(systemUptime)])
&gt; &gt; &gt; +        return [[NSProcessInfo processInfo] systemUptime];
&gt; &gt; &gt; +
&gt; &gt; &gt; +    // Get how long system has been up. Found by looking getting &quot;boottime&quot; from the kernel.
&gt; &gt; &gt; +    static struct timeval boottime = {0, 0};
&gt; &gt; &gt; +    if (!boottime.tv_sec) {
&gt; &gt; &gt; +        int mib[2] = {CTL_KERN, KERN_BOOTTIME};
&gt; &gt; &gt; +        size_t size = sizeof(boottime);
&gt; &gt; &gt; +        if (-1 == sysctl(mib, 2, &amp;boottime, &amp;size, 0, 0))
&gt; &gt; &gt; +            boottime.tv_sec = 0;
&gt; &gt; &gt; +    }
&gt; &gt; &gt; +    struct timeval now;
&gt; &gt; &gt; +    if (boottime.tv_sec &amp;&amp; -1 != gettimeofday(&amp;now, 0)) {
&gt; &gt; &gt; +        struct timeval uptime;
&gt; &gt; &gt; +        timersub(&amp;now, &amp;boottime, &amp;uptime);
&gt; &gt; &gt; +        NSTimeInterval result = uptime.tv_sec + (uptime.tv_usec / 1E+6);
&gt; &gt; &gt; +        return result;
&gt; &gt; &gt; +    }
&gt; &gt; &gt; +    return 0;
&gt; &gt; &gt; +}
&gt; &gt; 
&gt; &gt; Why the heck is this here? Can&apos;t we just use monotonicallyIncreasingTime or
&gt; &gt; some std::chrono?
&gt; 
&gt; I&apos;m not sure! Beth, do you remember why this is here?

I don&apos;t know. Looks like Anders added that code. Any memory of what it&apos;s for, Anders?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070785</commentid>
    <comment_count>7</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-02-20 12:50:59 -0800</bug_when>
    <thetext>Committed r180447: &lt;http://trac.webkit.org/changeset/180447&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246979</attachid>
            <date>2015-02-20 11:30:45 -0800</date>
            <delta_ts>2015-02-20 11:41:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141842-20150220113036.patch</filename>
            <type>text/plain</type>
            <size>65589</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MDQzMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBACisyMDE1LTAyLTIwICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZSBTY3JvbGxFbGFz
dGljaXR5Q29udHJvbGxlciB0byBTY3JvbGxDb250cm9sbGVyCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE4NDIKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBjaGFuZ2UgaW4gZnVuY3Rpb25hbGl0eS4K
KworICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFdlYkNvcmUub3JkZXI6
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IHBhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjLmg6
CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGlu
Z05vZGVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxp
bmdOb2RlTWFjOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OmhhbmRsZVdoZWVs
RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9k
ZU1hYzo6c3RhcnRTbmFwUnViYmVyYmFuZFRpbWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMv
U2Nyb2xsQW5pbWF0b3JNYWMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0
b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6U2Nyb2xsQW5p
bWF0b3JNYWMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmlzUnViYmVy
QmFuZEluUHJvZ3Jlc3MpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6Omhh
bmRsZVdoZWVsRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OnNu
YXBSdWJiZXJCYW5kVGltZXJGaXJlZCk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1Njcm9sbENv
bnRyb2xsZXIuaDogQ29waWVkIGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsRWxhc3Rp
Y2l0eUNvbnRyb2xsZXIuaC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXJDbGll
bnQ6On5TY3JvbGxDb250cm9sbGVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEVs
YXN0aWNpdHlDb250cm9sbGVyQ2xpZW50Ojp+U2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXJDbGll
bnQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxDb250cm9sbGVyLm1t
OiBDb3BpZWQgZnJvbSBXZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxFbGFzdGljaXR5Q29udHJv
bGxlci5tbS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OlNjcm9sbENvbnRy
b2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6aGFuZGxlV2hlZWxF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjpzbmFwUnViYmVyQmFu
ZFRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6aXNSdWJi
ZXJCYW5kSW5Qcm9ncmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjpz
dG9wU25hcFJ1YmJlcmJhbmRUaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9s
bGVyOjpzbmFwUnViYmVyQmFuZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVy
OjpzaG91bGRSdWJiZXJCYW5kSW5Ib3Jpem9udGFsRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyOjpTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxl
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxl
cjo6aGFuZGxlV2hlZWxFdmVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxF
bGFzdGljaXR5Q29udHJvbGxlcjo6c25hcFJ1YmJlckJhbmRUaW1lckZpcmVkKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyOjppc1J1YmJlckJh
bmRJblByb2dyZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEVsYXN0aWNp
dHlDb250cm9sbGVyOjpzdG9wU25hcFJ1YmJlcmJhbmRUaW1lcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlcjo6c25hcFJ1YmJlckJhbmQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXI6OnNo
b3VsZFJ1YmJlckJhbmRJbkhvcml6b250YWxEaXJlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL21hYy9TY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5oOiBSZW1vdmVkLgorICAg
ICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5tbTogUmVtb3Zl
ZC4KKwogMjAxNS0wMi0yMCAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbTWFjXSBSRUdSRVNTSU9OOiBTY3JvbGwgc25hcCBwb2ludHMgYnJva2VuIGFmdGVy
IHIxODAwMTgKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCShyZXZpc2lvbiAxODA0MjAp
CisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAt
MTI2LDcgKzEyNiw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3Jt
L21hYy9QdXJnZWFibGVCdWZmZXJNYWMuY3BwCiAgICAgcGxhdGZvcm0vbWFjL1NTTEtleUdlbmVy
YXRvck1hYy5jcHAKICAgICBwbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0KLSAgICBw
bGF0Zm9ybS9tYWMvU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIubW0KKyAgICBwbGF0Zm9ybS9t
YWMvU2Nyb2xsQ29udHJvbGxlci5tbQogICAgIHBsYXRmb3JtL21hYy9TY3JvbGxWaWV3TWFjLm1t
CiAgICAgcGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLm1tCiAgICAgcGxhdGZvcm0vbWFj
L1NlcmlhbGl6ZWRQbGF0Zm9ybVJlcHJlc2VudGF0aW9uTWFjLm1tCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLm9yZGVyCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
b3JkZXIJKHJldmlzaW9uIDE4MDQyMCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUub3JkZXIJ
KHdvcmtpbmcgY29weSkKQEAgLTIwMDcsNyArMjAwNyw3IEBAIF9fWk43V2ViQ29yZTE0U2Nyb2xs
YWJsZUFyZWExNWRpZEFkZFNjcm8KIF9fWk43V2ViQ29yZTE0U2Nyb2xsQW5pbWF0b3I2Y3JlYXRl
RVBOU18xNFNjcm9sbGFibGVBcmVhRQogX19aTjdXZWJDb3JlMTdTY3JvbGxBbmltYXRvck1hY0My
RVBOU18xNFNjcm9sbGFibGVBcmVhRQogX19aTjdXZWJDb3JlMTRTY3JvbGxBbmltYXRvckMyRVBO
U18xNFNjcm9sbGFibGVBcmVhRQotX19aTjdXZWJDb3JlMjZTY3JvbGxFbGFzdGljaXR5Q29udHJv
bGxlckMxRVBOU18zMlNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyQ2xpZW50RQorX19aTjdXZWJD
b3JlMjZTY3JvbGxDb250cm9sbGVyQzFFUE5TXzMyU2Nyb2xsQ29udHJvbGxlckNsaWVudEUKIC1b
V2ViU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUgaW5pdFdpdGhTY3JvbGxBbmltYXRvcjpd
CiAtW1dlYlNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGUgaW5pdFdpdGhTY3JvbGxh
YmxlQXJlYTpdCiBfX1pON1dlYkNvcmUxN1Njcm9sbEFuaW1hdG9yTWFjMjNkaWRBZGRWZXJ0aWNh
bFNjcm9sbGJhckVQTlNfOVNjcm9sbGJhckUKQEAgLTIzMzMsNyArMjMzMyw3IEBAIF9fWk43V2Vi
Q29yZTlGcmFtZVZpZXcxNHNjcm9sbFRvQW5jaG9yRXYKIF9fWk43V2ViQ29yZTlGcmFtZVZpZXcy
M3NlbmRSZXNpemVFdmVudElmTmVlZGVkRXYKIF9fWk43V2ViQ29yZTEwU2Nyb2xsVmlldzI2aW52
YWxpZGF0ZVNjcm9sbENvcm5lclJlY3RFUktOU183SW50UmVjdEUKIF9fWk5LN1dlYkNvcmUxN1Nj
cm9sbEFuaW1hdG9yTWFjMjJpc1J1YmJlckJhbmRJblByb2dyZXNzRXYKLV9fWk5LN1dlYkNvcmUy
NlNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyMjJpc1J1YmJlckJhbmRJblByb2dyZXNzRXYKK19f
Wk5LN1dlYkNvcmUyNlNjcm9sbENvbnRyb2xsZXIyMmlzUnViYmVyQmFuZEluUHJvZ3Jlc3NFdgog
X19aTjdXZWJDb3JlMTBTY3JvbGxWaWV3MTl1cGRhdGVPdmVyaGFuZ0FyZWFzRXYKIF9fWk43V2Vi
Q29yZTEwU2Nyb2xsVmlldzMzY2FsY3VsYXRlT3ZlcmhhbmdBcmVhc0ZvclBhaW50aW5nRVJOU183
SW50UmVjdEVTMl8KIF9fWk5LN1dlYkNvcmU2Q2hyb21lMTljb250ZW50c1NpemVDaGFuZ2VkRVBO
U181RnJhbWVFUktOU183SW50U2l6ZUUKQEAgLTEyNjY1LDcgKzEyNjY1LDcgQEAgX19aTks3V2Vi
Q29yZTEwU2Nyb2xsVmlldzE4Y29udGVudHNUb1JvbwogX19aTks3V2ViQ29yZTZXaWRnZXQxN2Nv
bnZlcnRUb1Jvb3RWaWV3RVJLTlNfN0ludFJlY3RFCiBfX1pON1dlYkNvcmUxMVJlbmRlckltYWdl
MTFub2RlQXRQb2ludEVSS05TXzE0SGl0VGVzdFJlcXVlc3RFUk5TXzEzSGl0VGVzdFJlc3VsdEVS
S05TXzE1SGl0VGVzdExvY2F0aW9uRVJLTlNfMTFMYXlvdXRQb2ludEVOU18xM0hpdFRlc3RBY3Rp
b25FCiBfX1pON1dlYkNvcmUxM1Njcm9sbGluZ1RyZWUyMnVwZGF0ZUJhY2tGb3J3YXJkU3RhdGVF
YmIKLV9fWk43V2ViQ29yZTI2U2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIxNmhhbmRsZVdoZWVs
RXZlbnRFUktOU18xOFBsYXRmb3JtV2hlZWxFdmVudEUKK19fWk43V2ViQ29yZTI2U2Nyb2xsQ29u
dHJvbGxlcjE2aGFuZGxlV2hlZWxFdmVudEVSS05TXzE4UGxhdGZvcm1XaGVlbEV2ZW50RQogX19a
VGhuMTEyX043V2ViQ29yZTI5U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMxN3Bpbm5lZElu
RGlyZWN0aW9uRVJLTlNfOUZsb2F0U2l6ZUUKIF9fWk43V2ViQ29yZTI5U2Nyb2xsaW5nVHJlZVNj
cm9sbGluZ05vZGVNYWMxN3Bpbm5lZEluRGlyZWN0aW9uRVJLTlNfOUZsb2F0U2l6ZUUKIF9fWlRo
bjExMl9ON1dlYkNvcmUyOVNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjMjdzaG91bGRSdWJi
ZXJCYW5kSW5EaXJlY3Rpb25FTlNfMTVTY3JvbGxEaXJlY3Rpb25FCkBAIC0xMjczOCwxMSArMTI3
MzgsMTEgQEAgX19aTjdXZWJDb3JlNVRpbWVySU5TXzEyRXZlbnRIYW5kbGVyRUU1ZgogX19aTjdX
ZWJDb3JlMTJFdmVudEhhbmRsZXIyOGZha2VNb3VzZU1vdmVFdmVudFRpbWVyRmlyZWRFUE5TXzVU
aW1lcklTMF9FRQogX19aTjdXZWJDb3JlMjFQbGF0Zm9ybUtleWJvYXJkRXZlbnQyM2dldEN1cnJl
bnRNb2RpZmllclN0YXRlRVJiUzFfUzFfUzFfCiBfX1pON1dlYkNvcmU5U2Nyb2xsYmFyMTl1cGRh
dGVUaHVtYlBvc2l0aW9uRXYKLV9fWk43V2ViQ29yZTI2U2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xs
ZXIxNHNuYXBSdWJiZXJCYW5kRXYKK19fWk43V2ViQ29yZTI2U2Nyb2xsQ29udHJvbGxlcjE0c25h
cFJ1YmJlckJhbmRFdgogX19aVGhuMTEyX043V2ViQ29yZTI5U2Nyb2xsaW5nVHJlZVNjcm9sbGlu
Z05vZGVNYWMyNHN0YXJ0U25hcFJ1YmJlcmJhbmRUaW1lckV2CiBfX1pON1dlYkNvcmUyOVNjcm9s
bGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjMjRzdGFydFNuYXBSdWJiZXJiYW5kVGltZXJFdgogX19f
X1pON1dlYkNvcmUyOVNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjMjRzdGFydFNuYXBSdWJi
ZXJiYW5kVGltZXJFdl9ibG9ja19pbnZva2UKLV9fWk43V2ViQ29yZTI2U2Nyb2xsRWxhc3RpY2l0
eUNvbnRyb2xsZXIyNHNuYXBSdWJiZXJCYW5kVGltZXJGaXJlZEV2CitfX1pON1dlYkNvcmUyNlNj
cm9sbENvbnRyb2xsZXIyNHNuYXBSdWJiZXJCYW5kVGltZXJGaXJlZEV2CiBfX1pUaG4xMTJfTjdX
ZWJDb3JlMjlTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzIyYWJzb2x1dGVTY3JvbGxQb3Np
dGlvbkV2CiBfX1pUaG4xMTJfTjdXZWJDb3JlMjlTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1h
YzIxY2FuU2Nyb2xsSG9yaXpvbnRhbGx5RXYKIF9fWlRobjExMl9ON1dlYkNvcmUyOVNjcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlTWFjMTljYW5TY3JvbGxWZXJ0aWNhbGx5RXYKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDE4MDQyMCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzg2LDggKzc4Niw4IEBACiAJCTFBOTI3RkQzMTQx
NkExNUIwMDNBODNDOCAvKiBucHJ1bnRpbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBOTI3RkQwMTQxNkExNUIwMDNBODNDOCAvKiBucHJ1bnRpbWUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxQTky
N0ZENDE0MTZBMTVCMDAzQTgzQzggLyogbnB0eXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5MjdGRDExNDE2QTE1QjAwM0E4M0M4IC8qIG5wdHlw
ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkx
QTk4OTU2QjBBQTc4RjgwMDA1RUY1RUYgLyogVVJMQ0YuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5ODk1NkEwQUE3OEY4MDAwNUVGNUVGIC8qIFVS
TENGLmNwcCAqLzsgfTsKLQkJMUFBODRGMDQxNDNCQTdCRDAwNTFEMTUzIC8qIFNjcm9sbEVsYXN0
aWNpdHlDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUFBODRGMDIxNDNCQTdCRDAwNTFEMTUzIC8qIFNjcm9sbEVsYXN0aWNpdHlDb250
cm9sbGVyLm1tICovOyB9OwotCQkxQUE4NEYwNTE0M0JBN0JEMDA1MUQxNTMgLyogU2Nyb2xsRWxh
c3RpY2l0eUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFBQTg0RjAzMTQzQkE3QkQwMDUxRDE1MyAvKiBTY3JvbGxFbGFzdGljaXR5Q29u
dHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTFBQTg0RjA0MTQzQkE3QkQwMDUxRDE1MyAvKiBTY3JvbGxDb250cm9sbGVyLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBODRGMDIxNDNCQTdC
RDAwNTFEMTUzIC8qIFNjcm9sbENvbnRyb2xsZXIubW0gKi87IH07CisJCTFBQTg0RjA1MTQzQkE3
QkQwMDUxRDE1MyAvKiBTY3JvbGxDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUE4NEYwMzE0M0JBN0JEMDA1MUQxNTMgLyogU2Nyb2xs
Q29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTFBQTg3OTkwMTFDQkU4NDYwMDNDNjY0RiAvKiBQbHVnaW5TdHJhdGVneS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBODc5OEYxMUNCRTg0
NjAwM0M2NjRGIC8qIFBsdWdpblN0cmF0ZWd5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUFBQUREQTMxNERCNDA5RjAwQUY2NEIzIC8qIFNjcm9s
bGluZ1RyZWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUFBQUREQTExNERCNDA5RjAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWUuY3BwICovOyB9Owog
CQkxQUFBRERBNDE0REI0MDlGMDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBQUREQTIxNERCNDA5RjAwQUY2
NEIzIC8qIFNjcm9sbGluZ1RyZWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtNzc5NSw4ICs3Nzk1LDggQEAKIAkJMUE5MjdGRDAxNDE2QTE1QjAw
M0E4M0M4IC8qIG5wcnVudGltZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBu
cHJ1bnRpbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE5MjdGRDExNDE2QTE1
QjAwM0E4M0M4IC8qIG5wdHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
bnB0eXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTk4OTU2QTBBQTc4Rjgw
MDA1RUY1RUYgLyogVVJMQ0YuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFVSTENGLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFBODRGMDIxNDNC
QTdCRDAwNTFEMTUzIC8qIFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBQTg0RjAzMTQzQkE3QkQwMDUxRDE1
MyAvKiBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkxQUE4NEYwMjE0M0JBN0JEMDA1MUQxNTMgLyogU2Nyb2xsQ29udHJvbGxl
ci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNjcm9sbENvbnRy
b2xsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBQTg0RjAzMTQzQkE3QkQw
MDUxRDE1MyAvKiBTY3JvbGxDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNjcm9sbENvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUFBODc5OEYxMUNCRTg0NjAwM0M2NjRGIC8qIFBsdWdpblN0cmF0ZWd5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsdWdpblN0cmF0ZWd5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTFBQUFEREExMTREQjQwOUYwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbGluZ1RyZWUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUFBRERBMjE0REI0MDlGMDBBRjY0QjMg
LyogU2Nyb2xsaW5nVHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3Jv
bGxpbmdUcmVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjU1MSw4ICsxNjU1
MSw4IEBACiAJCQkJQkM1MTE1NkQxMkIxNzQ5QzAwQzk2NzU0IC8qIFNjcm9sbEFuaW1hdG9yTWFj
Lm1tICovLAogCQkJCUJDOEI4NTNDMEU3QzdGMTEwMEFCNjk4NCAvKiBTY3JvbGxiYXJUaGVtZU1h
Yy5oICovLAogCQkJCUJDRUY4NjlFMEU4NDRFOUQwMEE4NUNENSAvKiBTY3JvbGxiYXJUaGVtZU1h
Yy5tbSAqLywKLQkJCQkxQUE4NEYwMzE0M0JBN0JEMDA1MUQxNTMgLyogU2Nyb2xsRWxhc3RpY2l0
eUNvbnRyb2xsZXIuaCAqLywKLQkJCQkxQUE4NEYwMjE0M0JBN0JEMDA1MUQxNTMgLyogU2Nyb2xs
RWxhc3RpY2l0eUNvbnRyb2xsZXIubW0gKi8sCisJCQkJMUFBODRGMDMxNDNCQTdCRDAwNTFEMTUz
IC8qIFNjcm9sbENvbnRyb2xsZXIuaCAqLywKKwkJCQkxQUE4NEYwMjE0M0JBN0JEMDA1MUQxNTMg
LyogU2Nyb2xsQ29udHJvbGxlci5tbSAqLywKIAkJCQk5MzUzNjc2QTA5QUVEODhCMDBEMzVDRDYg
LyogU2Nyb2xsVmlld01hYy5tbSAqLywKIAkJCQkwNzdBRjE0MTE4RjRCMUJCMDAwMUVENjEgLyog
U2VyaWFsaXplZFBsYXRmb3JtUmVwcmVzZW50YXRpb25NYWMuaCAqLywKIAkJCQkwNzdBRjE0MjE4
RjRCMUJCMDAwMUVENjEgLyogU2VyaWFsaXplZFBsYXRmb3JtUmVwcmVzZW50YXRpb25NYWMubW0g
Ki8sCkBAIC0yNjA0OCw3ICsyNjA0OCw3IEBACiAJCQkJQkM4Qjg1M0UwRTdDN0YxMTAwQUI2OTg0
IC8qIFNjcm9sbGJhclRoZW1lTWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU3MTQwNjE0MjE3
MEI4MDBEQjMzQkEgLyogU2Nyb2xsYmFyVGhlbWVNb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
RDkyNUI2ODBGNjRENEREMDBCODQ3RjAgLyogU2Nyb2xsQmVoYXZpb3IuaCBpbiBIZWFkZXJzICov
LAotCQkJCTFBQTg0RjA1MTQzQkE3QkQwMDUxRDE1MyAvKiBTY3JvbGxFbGFzdGljaXR5Q29udHJv
bGxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUFBODRGMDUxNDNCQTdCRDAwNTFEMTUzIC8qIFNj
cm9sbENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjA1QUVEMTVGOTQ4NDgwMDRE
RjBDMCAvKiBTY3JvbGxpbmdDb25zdHJhaW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFGNjJF
RTgxNERBMjJBNzAwNDE1NTZDIC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkM0RTQwRDE4N0Y4MkUxMDA0NTg4MkMgLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3JJ
T1MuaCBpbiBIZWFkZXJzICovLApAQCAtMjk0NTAsNyArMjk0NTAsNyBAQAogCQkJCUJDRUY4NjlG
MEU4NDRFOUQwMEE4NUNENSAvKiBTY3JvbGxiYXJUaGVtZU1hYy5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTBGRTcxNDA1MTQyMTcwQjgwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVtZU1vY2suY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNUQ5MjVCNjcwRjY0RDRERDAwQjg0N0YwIC8qIFNjcm9sbEJlaGF2
aW9yLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTFBQTg0RjA0MTQzQkE3QkQwMDUxRDE1MyAvKiBT
Y3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovLAorCQkJCTFBQTg0RjA0
MTQzQkE3QkQwMDUxRDE1MyAvKiBTY3JvbGxDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY2MDVBRUMxNUY5NDg0ODAwNERGMEMwIC8qIFNjcm9sbGluZ0NvbnN0cmFpbnRzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTFBRjYyRUU3MTREQTIyQTcwMDQxNTU2QyAvKiBTY3JvbGxpbmdD
b29yZGluYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkM0RTQwRTE4N0Y4MkUxMDA0NTg4
MkMgLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3JJT1MubW0gaW4gU291cmNlcyAqLywKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxp
bmdOb2RlTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
bWFjL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMuaAkocmV2aXNpb24gMTgwNDIw
KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVGcmFt
ZVNjcm9sbGluZ05vZGVNYWMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogCiAj
aWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgUExBVEZPUk0oTUFDKQogCi0jaW5jbHVkZSAi
U2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJTY3JvbGxDb250cm9sbGVy
LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVNYWMuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdU
cmVlRnJhbWVTY3JvbGxpbmdOb2RlLmgiCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgpAQCAt
MzcsNyArMzcsNyBAQCBPQkpDX0NMQVNTIENBTGF5ZXI7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotY2xhc3MgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYyA6IHB1YmxpYyBTY3Jv
bGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlLCBwcml2YXRlIFNjcm9sbEVsYXN0aWNpdHlDb250
cm9sbGVyQ2xpZW50IHsKK2NsYXNzIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMg
OiBwdWJsaWMgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZSwgcHJpdmF0ZSBTY3JvbGxD
b250cm9sbGVyQ2xpZW50IHsKIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUGFz
c1JlZlB0cjxTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlPiBjcmVhdGUoU2Nyb2xsaW5n
VHJlZSYsIFNjcm9sbGluZ05vZGVJRCk7CiAgICAgdmlydHVhbCB+U2Nyb2xsaW5nVHJlZUZyYW1l
U2Nyb2xsaW5nTm9kZU1hYygpOwpAQCAtNTAsNyArNTAsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVBZnRlckNoaWxkcmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYpIG92
ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3Jt
V2hlZWxFdmVudCYpIG92ZXJyaWRlOwogCi0gICAgLy8gU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xs
ZXIgbWVtYmVyIGZ1bmN0aW9ucy4KKyAgICAvLyBTY3JvbGxDb250cm9sbGVyIG1lbWJlciBmdW5j
dGlvbnMuCiAgICAgdmlydHVhbCBib29sIGFsbG93c0hvcml6b250YWxTdHJldGNoaW5nKGNvbnN0
IFBsYXRmb3JtV2hlZWxFdmVudCYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NW
ZXJ0aWNhbFN0cmV0Y2hpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jikgb3ZlcnJpZGU7CiAg
ICAgdmlydHVhbCBJbnRTaXplIHN0cmV0Y2hBbW91bnQoKSBvdmVycmlkZTsKQEAgLTgyLDcgKzgy
LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgbG9nRXhwb3NlZFVuZmlsbGVkQXJlYSgpOwogCi0g
ICAgU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIgbV9zY3JvbGxFbGFzdGljaXR5Q29udHJvbGxl
cjsKKyAgICBTY3JvbGxDb250cm9sbGVyIG1fc2Nyb2xsQ29udHJvbGxlcjsKICAgICBSZXRhaW5Q
dHI8Q0ZSdW5Mb29wVGltZXJSZWY+IG1fc25hcFJ1YmJlcmJhbmRUaW1lcjsKIAogICAgIFJldGFp
blB0cjxDQUxheWVyPiBtX3Njcm9sbExheWVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVG
cmFtZVNjcm9sbGluZ05vZGVNYWMubW0JKHJldmlzaW9uIDE4MDQyMCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIFBhc3NSZWZQdHI8U2Nyb2xsaW5n
VHJlZUZyYW1lU2Nyb2xsaW5nTm8KIAogU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1h
Yzo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYyhTY3JvbGxpbmdUcmVlJiBzY3Jv
bGxpbmdUcmVlLCBTY3JvbGxpbmdOb2RlSUQgbm9kZUlEKQogICAgIDogU2Nyb2xsaW5nVHJlZUZy
YW1lU2Nyb2xsaW5nTm9kZShzY3JvbGxpbmdUcmVlLCBub2RlSUQpCi0gICAgLCBtX3Njcm9sbEVs
YXN0aWNpdHlDb250cm9sbGVyKHRoaXMpCisgICAgLCBtX3Njcm9sbENvbnRyb2xsZXIodGhpcykK
ICAgICAsIG1fdmVydGljYWxTY3JvbGxiYXJQYWludGVyKDApCiAgICAgLCBtX2hvcml6b250YWxT
Y3JvbGxiYXJQYWludGVyKDApCiAgICAgLCBtX2xhc3RTY3JvbGxIYWRVbmZpbGxlZFBpeGVscyhm
YWxzZSkKQEAgLTE1Myw3ICsxNTMsNyBAQCB2b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGlu
Z05vZGVNYWM6CiAgICAgICAgIFttX2hvcml6b250YWxTY3JvbGxiYXJQYWludGVyIHNldFVzZVBy
ZXNlbnRhdGlvblZhbHVlOk5PXTsKICAgICB9CiAKLSAgICBtX3Njcm9sbEVsYXN0aWNpdHlDb250
cm9sbGVyLmhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVudCk7CisgICAgbV9zY3JvbGxDb250cm9s
bGVyLmhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVudCk7CiAgICAgc2Nyb2xsaW5nVHJlZSgpLnNl
dE9yQ2xlYXJMYXRjaGVkTm9kZSh3aGVlbEV2ZW50LCBzY3JvbGxpbmdOb2RlSUQoKSk7CiAgICAg
c2Nyb2xsaW5nVHJlZSgpLmhhbmRsZVdoZWVsRXZlbnRQaGFzZSh3aGVlbEV2ZW50LnBoYXNlKCkp
OwogfQpAQCAtMzAzLDcgKzMwMyw3IEBAIHZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5n
Tm9kZU1hYzoKICAgICBDRlRpbWVJbnRlcnZhbCB0aW1lckludGVydmFsID0gMS4wIC8gNjAuMDsK
IAogICAgIG1fc25hcFJ1YmJlcmJhbmRUaW1lciA9IGFkb3B0Q0YoQ0ZSdW5Mb29wVGltZXJDcmVh
dGVXaXRoSGFuZGxlcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBDRkFic29sdXRlVGltZUdldEN1cnJl
bnQoKSArIHRpbWVySW50ZXJ2YWwsIHRpbWVySW50ZXJ2YWwsIDAsIDAsIF4oQ0ZSdW5Mb29wVGlt
ZXJSZWYpIHsKLSAgICAgICAgbV9zY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5zbmFwUnViYmVy
QmFuZFRpbWVyRmlyZWQoKTsKKyAgICAgICAgbV9zY3JvbGxDb250cm9sbGVyLnNuYXBSdWJiZXJC
YW5kVGltZXJGaXJlZCgpOwogICAgIH0pKTsKICAgICBDRlJ1bkxvb3BBZGRUaW1lcihDRlJ1bkxv
b3BHZXRDdXJyZW50KCksIG1fc25hcFJ1YmJlcmJhbmRUaW1lci5nZXQoKSwga0NGUnVuTG9vcERl
ZmF1bHRNb2RlKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxB
bmltYXRvck1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9T
Y3JvbGxBbmltYXRvck1hYy5oCShyZXZpc2lvbiAxODA0MjApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDE0LTIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUg
IkZsb2F0U2l6ZS5oIgogI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCi0jaW5jbHVkZSAiU2Ny
b2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJTY3JvbGxDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKQEAgLTQz
LDE0ICs0MywxNCBAQCBPQkpDX0NMQVNTIFdlYlNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZTsKIHR5
cGVkZWYgaWQgU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXI7CiAKICNpZiAhRU5BQkxFKFJVQkJF
Ul9CQU5ESU5HKQotY2xhc3MgU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXJDbGllbnQgeyB9Owor
Y2xhc3MgU2Nyb2xsQ29udHJvbGxlckNsaWVudCB7IH07CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBTY3JvbGxiYXI7CiAKLWNsYXNzIFNjcm9sbEFuaW1hdG9yTWFjIDog
cHVibGljIFNjcm9sbEFuaW1hdG9yLCBwcml2YXRlIFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVy
Q2xpZW50IHsKK2NsYXNzIFNjcm9sbEFuaW1hdG9yTWFjIDogcHVibGljIFNjcm9sbEFuaW1hdG9y
LCBwcml2YXRlIFNjcm9sbENvbnRyb2xsZXJDbGllbnQgewogCiBwdWJsaWM6CiAgICAgU2Nyb2xs
QW5pbWF0b3JNYWMoU2Nyb2xsYWJsZUFyZWEqKTsKQEAgLTEzOSw3ICsxMzksNyBAQCBwcml2YXRl
OgogICAgIHZpcnR1YWwgYm9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3Qgb3ZlcnJp
ZGU7CiAKICNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgLy8vIFNjcm9sbEVsYXN0aWNp
dHlDb250cm9sbGVyQ2xpZW50IG1lbWJlciBmdW5jdGlvbnMuCisgICAgLy8vIFNjcm9sbENvbnRy
b2xsZXJDbGllbnQgbWVtYmVyIGZ1bmN0aW9ucy4KICAgICB2aXJ0dWFsIEludFNpemUgc3RyZXRj
aEFtb3VudCgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NIb3Jpem9udGFsU3Ry
ZXRjaGluZyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFs
IGJvb2wgYWxsb3dzVmVydGljYWxTdHJldGNoaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYp
IG92ZXJyaWRlOwpAQCAtMTU5LDcgKzE1OSw3IEBAIHByaXZhdGU6CiAKICAgICBib29sIGlzQWxy
ZWFkeVBpbm5lZEluRGlyZWN0aW9uT2ZHZXN0dXJlKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYs
IFNjcm9sbEV2ZW50QXhpcyk7CiAKLSAgICBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlciBtX3Nj
cm9sbEVsYXN0aWNpdHlDb250cm9sbGVyOworICAgIFNjcm9sbENvbnRyb2xsZXIgbV9zY3JvbGxD
b250cm9sbGVyOwogICAgIFRpbWVyIG1fc25hcFJ1YmJlckJhbmRUaW1lcjsKICNlbmRpZgogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFj
Lm1tCShyZXZpc2lvbiAxODA0MjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Ny
b2xsQW5pbWF0b3JNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTY0NCw3ICs2NDQsNyBAQCBTY3Jv
bGxBbmltYXRvck1hYzo6U2Nyb2xsQW5pbWF0b3JNYWMoU2NyCiAgICAgLCBtX2luaXRpYWxTY3Jv
bGxiYXJQYWludFRpbWVyKCp0aGlzLCAmU2Nyb2xsQW5pbWF0b3JNYWM6OmluaXRpYWxTY3JvbGxi
YXJQYWludFRpbWVyRmlyZWQpCiAgICAgLCBtX3NlbmRDb250ZW50QXJlYVNjcm9sbGVkVGltZXIo
KnRoaXMsICZTY3JvbGxBbmltYXRvck1hYzo6c2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lckZp
cmVkKQogI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICAsIG1fc2Nyb2xsRWxhc3RpY2l0
eUNvbnRyb2xsZXIodGhpcykKKyAgICAsIG1fc2Nyb2xsQ29udHJvbGxlcih0aGlzKQogICAgICwg
bV9zbmFwUnViYmVyQmFuZFRpbWVyKCp0aGlzLCAmU2Nyb2xsQW5pbWF0b3JNYWM6OnNuYXBSdWJi
ZXJCYW5kVGltZXJGaXJlZCkKICNlbmRpZgogICAgICwgbV9oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VM
b2FkKGZhbHNlKQpAQCAtNzcwLDcgKzc3MCw3IEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6Omlz
UnViYmVyQmFuZEluUHIKICNpZiAhRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQogICAgIHJldHVybiBm
YWxzZTsKICNlbHNlCi0gICAgcmV0dXJuIG1fc2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIuaXNS
dWJiZXJCYW5kSW5Qcm9ncmVzcygpOworICAgIHJldHVybiBtX3Njcm9sbENvbnRyb2xsZXIuaXNS
dWJiZXJCYW5kSW5Qcm9ncmVzcygpOwogI2VuZGlmCiB9CiAKQEAgLTEwOTgsNyArMTA5OCw3IEBA
IGJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OmhhbmRsZVdoZWVsRXZlbnQKICAgICAgICAgICAgIHJl
dHVybiBTY3JvbGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKICAgICB9
CiAKLSAgICBib29sIGRpZEhhbmRsZUV2ZW50ID0gbV9zY3JvbGxFbGFzdGljaXR5Q29udHJvbGxl
ci5oYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOworICAgIGJvb2wgZGlkSGFuZGxlRXZlbnQg
PSBtX3Njcm9sbENvbnRyb2xsZXIuaGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKIAogICAg
IGlmIChkaWRIYW5kbGVFdmVudCkKICAgICAgICAgaGFuZGxlV2hlZWxFdmVudFBoYXNlKHdoZWVs
RXZlbnQucGhhc2UoKSk7CkBAIC0xMjgzLDcgKzEyODMsNyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9y
TWFjOjpzdG9wU25hcFJ1YmJlcmJhCiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnNuYXBSdWJi
ZXJCYW5kVGltZXJGaXJlZCgpCiB7Ci0gICAgbV9zY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5z
bmFwUnViYmVyQmFuZFRpbWVyRmlyZWQoKTsKKyAgICBtX3Njcm9sbENvbnRyb2xsZXIuc25hcFJ1
YmJlckJhbmRUaW1lckZpcmVkKCk7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1Njcm9sbENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQ29udHJvbGxlci5oCShyZXZpc2lvbiAxODA0MjApCShm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxFbGFzdGljaXR5Q29udHJvbGxl
ci5oOjE4MDQyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxDb250cm9s
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyX2gKKyNkZWZpbmUgU2Nyb2xsRWxhc3RpY2l0
eUNvbnRyb2xsZXJfaAorCisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQorCisjaW5jbHVkZSAi
RmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIlNjcm9sbFR5
cGVzLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgUGxhdGZvcm1XaGVlbEV2ZW50OworCitjbGFzcyBTY3JvbGxFbGFzdGljaXR5
Q29udHJvbGxlckNsaWVudCB7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+U2Nyb2xsRWxhc3Rp
Y2l0eUNvbnRyb2xsZXJDbGllbnQoKSB7IH0gCisKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGJvb2wg
YWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgPSAw
OworICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoY29uc3QgUGxhdGZv
cm1XaGVlbEV2ZW50JikgPSAwOworICAgIHZpcnR1YWwgSW50U2l6ZSBzdHJldGNoQW1vdW50KCkg
PSAwOworICAgIHZpcnR1YWwgYm9vbCBwaW5uZWRJbkRpcmVjdGlvbihjb25zdCBGbG9hdFNpemUm
KSA9IDA7CisgICAgdmlydHVhbCBib29sIGNhblNjcm9sbEhvcml6b250YWxseSgpID0gMDsKKyAg
ICB2aXJ0dWFsIGJvb2wgY2FuU2Nyb2xsVmVydGljYWxseSgpID0gMDsKKyAgICB2aXJ0dWFsIGJv
b2wgc2hvdWxkUnViYmVyQmFuZEluRGlyZWN0aW9uKFNjcm9sbERpcmVjdGlvbikgPSAwOworCisg
ICAgLy8gUmV0dXJuIHRoZSBhYnNvbHV0ZSBzY3JvbGwgcG9zaXRpb24sIG5vdCByZWxhdGl2ZSB0
byB0aGUgc2Nyb2xsIG9yaWdpbi4KKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IGFic29s
dXRlU2Nyb2xsUG9zaXRpb24oKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgaW1tZWRpYXRlU2Ny
b2xsQnkoY29uc3QgRmxvYXRTaXplJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBpbW1lZGlhdGVT
Y3JvbGxCeVdpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKGNvbnN0IEZsb2F0U2l6ZSYpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRTbmFwUnViYmVyYmFuZFRpbWVyKCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBzdG9wU25hcFJ1YmJlcmJhbmRUaW1lcigpID0gMDsKKworICAgIC8vIElm
IHRoZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbiBpcyB3aXRoaW4gdGhlIG92ZXJoYW5nIGFyZWEs
IHRoaXMgZnVuY3Rpb24gd2lsbCBjYXVzZQorICAgIC8vIHRoZSBwYWdlIHRvIHNjcm9sbCB0byB0
aGUgbmVhcmVzdCBib3VuZGFyeSBwb2ludC4KKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2Nyb2xs
UG9zaXRpb25Ub0JvdW5kc0lmTmVjZXNzYXJ5KCkgPSAwOworfTsKKworY2xhc3MgU2Nyb2xsRWxh
c3RpY2l0eUNvbnRyb2xsZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNjcm9sbEVsYXN0
aWNpdHlDb250cm9sbGVyKTsKKworcHVibGljOgorICAgIGV4cGxpY2l0IFNjcm9sbEVsYXN0aWNp
dHlDb250cm9sbGVyKFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyQ2xpZW50Kik7CisKKyAgICBi
b29sIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7CisgICAgdm9p
ZCBzbmFwUnViYmVyQmFuZFRpbWVyRmlyZWQoKTsKKworICAgIGJvb2wgaXNSdWJiZXJCYW5kSW5Q
cm9ncmVzcygpIGNvbnN0OworCitwcml2YXRlOgorICAgIHZvaWQgc3RvcFNuYXBSdWJiZXJiYW5k
VGltZXIoKTsKKyAgICB2b2lkIHNuYXBSdWJiZXJCYW5kKCk7CisKKyAgICBib29sIHNob3VsZFJ1
YmJlckJhbmRJbkhvcml6b250YWxEaXJlY3Rpb24oY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7
CisKKyAgICBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlckNsaWVudCogbV9jbGllbnQ7CisKKyAg
ICBib29sIG1faW5TY3JvbGxHZXN0dXJlOworICAgIGJvb2wgbV9tb21lbnR1bVNjcm9sbEluUHJv
Z3Jlc3M7CisgICAgYm9vbCBtX2lnbm9yZU1vbWVudHVtU2Nyb2xsczsKKyAgICAKKyAgICBDRlRp
bWVJbnRlcnZhbCBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcDsKKyAgICBGbG9hdFNpemUg
bV9vdmVyZmxvd1Njcm9sbERlbHRhOworICAgIEZsb2F0U2l6ZSBtX3N0cmV0Y2hTY3JvbGxGb3Jj
ZTsKKyAgICBGbG9hdFNpemUgbV9tb21lbnR1bVZlbG9jaXR5OworCisgICAgLy8gUnViYmVyIGJh
bmQgc3RhdGUuCisgICAgQ0ZUaW1lSW50ZXJ2YWwgbV9zdGFydFRpbWU7CisgICAgRmxvYXRTaXpl
IG1fc3RhcnRTdHJldGNoOworICAgIEZsb2F0UG9pbnQgbV9vcmlnT3JpZ2luOworICAgIEZsb2F0
U2l6ZSBtX29yaWdWZWxvY2l0eTsKKworICAgIGJvb2wgbV9zbmFwUnViYmVyYmFuZFRpbWVySXNB
Y3RpdmU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
UlVCQkVSX0JBTkRJTkcpCisKKyNlbmRpZiAvLyBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlcl9o
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQ29udHJvbGxlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxDb250cm9sbGVy
LmgJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxD
b250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDggQEAKICAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFNjcm9sbEVsYXN0aWNpdHlD
b250cm9sbGVyX2gKLSNkZWZpbmUgU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXJfaAorI2lmbmRl
ZiBTY3JvbGxDb250cm9sbGVyX2gKKyNkZWZpbmUgU2Nyb2xsQ29udHJvbGxlcl9oCiAKICNpZiBF
TkFCTEUoUlVCQkVSX0JBTkRJTkcpCiAKQEAgLTM3LDkgKzM3LDkgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQ7CiAKLWNsYXNzIFNjcm9sbEVsYXN0aWNp
dHlDb250cm9sbGVyQ2xpZW50IHsKK2NsYXNzIFNjcm9sbENvbnRyb2xsZXJDbGllbnQgewogcHJv
dGVjdGVkOgotICAgIHZpcnR1YWwgflNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyQ2xpZW50KCkg
eyB9IAorICAgIHZpcnR1YWwgflNjcm9sbENvbnRyb2xsZXJDbGllbnQoKSB7IH0KIAogcHVibGlj
OgogICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZyhjb25zdCBQbGF0
Zm9ybVdoZWVsRXZlbnQmKSA9IDA7CkBAIC02MywxMSArNjMsMTEgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RTY3JvbGxQb3NpdGlvblRvQm91bmRzSWZOZWNlc3NhcnkoKSA9IDA7
CiB9OwogCi1jbGFzcyBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlciB7Ci0gICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIpOworY2xhc3MgU2Nyb2xsQ29u
dHJvbGxlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2Nyb2xsQ29udHJvbGxlcik7CiAK
IHB1YmxpYzoKLSAgICBleHBsaWNpdCBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlcihTY3JvbGxF
bGFzdGljaXR5Q29udHJvbGxlckNsaWVudCopOworICAgIGV4cGxpY2l0IFNjcm9sbENvbnRyb2xs
ZXIoU2Nyb2xsQ29udHJvbGxlckNsaWVudCopOwogCiAgICAgYm9vbCBoYW5kbGVXaGVlbEV2ZW50
KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOwogICAgIHZvaWQgc25hcFJ1YmJlckJhbmRUaW1l
ckZpcmVkKCk7CkBAIC04MCw3ICs4MCw3IEBAIHByaXZhdGU6CiAKICAgICBib29sIHNob3VsZFJ1
YmJlckJhbmRJbkhvcml6b250YWxEaXJlY3Rpb24oY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7
CiAKLSAgICBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlckNsaWVudCogbV9jbGllbnQ7CisgICAg
U2Nyb2xsQ29udHJvbGxlckNsaWVudCogbV9jbGllbnQ7CiAKICAgICBib29sIG1faW5TY3JvbGxH
ZXN0dXJlOwogICAgIGJvb2wgbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3M7CkBAIC0xMDQsNCAr
MTA0LDQgQEAgcHJpdmF0ZToKIAogI2VuZGlmIC8vIEVOQUJMRShSVUJCRVJfQkFORElORykKIAot
I2VuZGlmIC8vIFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyX2gKKyNlbmRpZiAvLyBTY3JvbGxD
b250cm9sbGVyX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxDb250
cm9sbGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3Jv
bGxDb250cm9sbGVyLm1tCShyZXZpc2lvbiAxODA0MjApCShmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9TY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5tbToxODA0MjApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQ29udHJvbGxlci5tbQkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiUGxhdGZv
cm1XaGVlbEV2ZW50LmgiCisjaW5jbHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgorI2lu
Y2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorCisjaWYgRU5BQkxF
KFJVQkJFUl9CQU5ESU5HKQorCitzdGF0aWMgTlNUaW1lSW50ZXJ2YWwgc3lzdGVtVXB0aW1lKCkK
K3sKKyAgICBpZiAoW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKHN5c3RlbVVwdGltZSldKQorICAgICAgICByZXR1cm4gW1tOU1Byb2Nlc3NJ
bmZvIHByb2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVdOworCisgICAgLy8gR2V0IGhvdyBsb25nIHN5
c3RlbSBoYXMgYmVlbiB1cC4gRm91bmQgYnkgbG9va2luZyBnZXR0aW5nICJib290dGltZSIgZnJv
bSB0aGUga2VybmVsLgorICAgIHN0YXRpYyBzdHJ1Y3QgdGltZXZhbCBib290dGltZSA9IHswLCAw
fTsKKyAgICBpZiAoIWJvb3R0aW1lLnR2X3NlYykgeworICAgICAgICBpbnQgbWliWzJdID0ge0NU
TF9LRVJOLCBLRVJOX0JPT1RUSU1FfTsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBzaXplb2YoYm9v
dHRpbWUpOworICAgICAgICBpZiAoLTEgPT0gc3lzY3RsKG1pYiwgMiwgJmJvb3R0aW1lLCAmc2l6
ZSwgMCwgMCkpCisgICAgICAgICAgICBib290dGltZS50dl9zZWMgPSAwOworICAgIH0KKyAgICBz
dHJ1Y3QgdGltZXZhbCBub3c7CisgICAgaWYgKGJvb3R0aW1lLnR2X3NlYyAmJiAtMSAhPSBnZXR0
aW1lb2ZkYXkoJm5vdywgMCkpIHsKKyAgICAgICAgc3RydWN0IHRpbWV2YWwgdXB0aW1lOworICAg
ICAgICB0aW1lcnN1Yigmbm93LCAmYm9vdHRpbWUsICZ1cHRpbWUpOworICAgICAgICBOU1RpbWVJ
bnRlcnZhbCByZXN1bHQgPSB1cHRpbWUudHZfc2VjICsgKHVwdGltZS50dl91c2VjIC8gMUUrNik7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGZsb2F0IHNjcm9sbFZlbG9jaXR5WmVy
b2luZ1RpbWVvdXQgPSAwLjEwZjsKK3N0YXRpYyBjb25zdCBmbG9hdCBydWJiZXJiYW5kRGlyZWN0
aW9uTG9ja1N0cmV0Y2hSYXRpbyA9IDE7CitzdGF0aWMgY29uc3QgZmxvYXQgcnViYmVyYmFuZE1p
bmltdW1SZXF1aXJlZERlbHRhQmVmb3JlU3RyZXRjaCA9IDEwOworCitzdGF0aWMgZmxvYXQgZWxh
c3RpY0RlbHRhRm9yVGltZURlbHRhKGZsb2F0IGluaXRpYWxQb3NpdGlvbiwgZmxvYXQgaW5pdGlh
bFZlbG9jaXR5LCBmbG9hdCBlbGFwc2VkVGltZSkKK3sKKyAgICByZXR1cm4gd2tOU0VsYXN0aWNE
ZWx0YUZvclRpbWVEZWx0YShpbml0aWFsUG9zaXRpb24sIGluaXRpYWxWZWxvY2l0eSwgZWxhcHNl
ZFRpbWUpOworfQorCitzdGF0aWMgZmxvYXQgZWxhc3RpY0RlbHRhRm9yUmVib3VuZERlbHRhKGZs
b2F0IGRlbHRhKQoreworICAgIHJldHVybiB3a05TRWxhc3RpY0RlbHRhRm9yUmVib3VuZERlbHRh
KGRlbHRhKTsKK30KKworc3RhdGljIGZsb2F0IHJlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0YShm
bG9hdCBkZWx0YSkKK3sKKyAgICByZXR1cm4gd2tOU1JlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0
YShkZWx0YSk7Cit9CisKK3N0YXRpYyBmbG9hdCBzY3JvbGxXaGVlbE11bHRpcGxpZXIoKQorewor
ICAgIHN0YXRpYyBmbG9hdCBtdWx0aXBsaWVyID0gLTE7CisgICAgaWYgKG11bHRpcGxpZXIgPCAw
KSB7CisgICAgICAgIG11bHRpcGxpZXIgPSBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRl
ZmF1bHRzXSBmbG9hdEZvcktleTpAIk5TU2Nyb2xsV2hlZWxNdWx0aXBsaWVyIl07CisgICAgICAg
IGlmIChtdWx0aXBsaWVyIDw9IDApCisgICAgICAgICAgICBtdWx0aXBsaWVyID0gMTsKKyAgICB9
CisgICAgcmV0dXJuIG11bHRpcGxpZXI7Cit9CisKK1Njcm9sbEVsYXN0aWNpdHlDb250cm9sbGVy
OjpTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlcihTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlckNs
aWVudCogY2xpZW50KQorICAgIDogbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9pblNjcm9sbEdl
c3R1cmUoZmFsc2UpCisgICAgLCBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyhmYWxzZSkKKyAg
ICAsIG1faWdub3JlTW9tZW50dW1TY3JvbGxzKGZhbHNlKQorICAgICwgbV9sYXN0TW9tZW50dW1T
Y3JvbGxUaW1lc3RhbXAoMCkKKyAgICAsIG1fc3RhcnRUaW1lKDApCisgICAgLCBtX3NuYXBSdWJi
ZXJiYW5kVGltZXJJc0FjdGl2ZShmYWxzZSkKK3sKK30KKworYm9vbCBTY3JvbGxFbGFzdGljaXR5
Q29udHJvbGxlcjo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdo
ZWVsRXZlbnQpCit7CisgICAgaWYgKHdoZWVsRXZlbnQucGhhc2UoKSA9PSBQbGF0Zm9ybVdoZWVs
RXZlbnRQaGFzZUJlZ2FuKSB7CisgICAgICAgIC8vIEZpcnN0LCBjaGVjayBpZiB3ZSBzaG91bGQg
cnViYmVyLWJhbmQgYXQgYWxsLgorICAgICAgICBpZiAobV9jbGllbnQtPnBpbm5lZEluRGlyZWN0
aW9uKEZsb2F0U2l6ZSgtd2hlZWxFdmVudC5kZWx0YVgoKSwgMCkpICYmCisgICAgICAgICAgICAh
c2hvdWxkUnViYmVyQmFuZEluSG9yaXpvbnRhbERpcmVjdGlvbih3aGVlbEV2ZW50KSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBtX2luU2Nyb2xsR2VzdHVyZSA9IHRydWU7
CisgICAgICAgIG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzID0gZmFsc2U7CisgICAgICAgIG1f
aWdub3JlTW9tZW50dW1TY3JvbGxzID0gZmFsc2U7CisgICAgICAgIG1fbGFzdE1vbWVudHVtU2Ny
b2xsVGltZXN0YW1wID0gMDsKKyAgICAgICAgbV9tb21lbnR1bVZlbG9jaXR5ID0gRmxvYXRTaXpl
KCk7CisKKyAgICAgICAgSW50U2l6ZSBzdHJldGNoQW1vdW50ID0gbV9jbGllbnQtPnN0cmV0Y2hB
bW91bnQoKTsKKyAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0V2lkdGgocmVib3VuZERl
bHRhRm9yRWxhc3RpY0RlbHRhKHN0cmV0Y2hBbW91bnQud2lkdGgoKSkpOworICAgICAgICBtX3N0
cmV0Y2hTY3JvbGxGb3JjZS5zZXRIZWlnaHQocmVib3VuZERlbHRhRm9yRWxhc3RpY0RlbHRhKHN0
cmV0Y2hBbW91bnQuaGVpZ2h0KCkpKTsKKyAgICAgICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhID0g
RmxvYXRTaXplKCk7CisKKyAgICAgICAgc3RvcFNuYXBSdWJiZXJiYW5kVGltZXIoKTsKKworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAod2hlZWxFdmVudC5waGFzZSgpID09
IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlRW5kZWQpIHsKKyAgICAgICAgc25hcFJ1YmJlckJhbmQo
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCBpc01vbWVudHVtU2Ny
b2xsRXZlbnQgPSAod2hlZWxFdmVudC5tb21lbnR1bVBoYXNlKCkgIT0gUGxhdGZvcm1XaGVlbEV2
ZW50UGhhc2VOb25lKTsKKyAgICBpZiAobV9pZ25vcmVNb21lbnR1bVNjcm9sbHMgJiYgKGlzTW9t
ZW50dW1TY3JvbGxFdmVudCB8fCBtX3NuYXBSdWJiZXJiYW5kVGltZXJJc0FjdGl2ZSkpIHsKKyAg
ICAgICAgaWYgKHdoZWVsRXZlbnQubW9tZW50dW1QaGFzZSgpID09IFBsYXRmb3JtV2hlZWxFdmVu
dFBoYXNlRW5kZWQpIHsKKyAgICAgICAgICAgIG1faWdub3JlTW9tZW50dW1TY3JvbGxzID0gZmFs
c2U7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgZmxvYXQgZGVsdGFYID0gbV9vdmVyZmxvd1Njcm9sbERlbHRh
LndpZHRoKCk7CisgICAgZmxvYXQgZGVsdGFZID0gbV9vdmVyZmxvd1Njcm9sbERlbHRhLmhlaWdo
dCgpOworCisgICAgLy8gUmVzZXQgb3ZlcmZsb3cgdmFsdWVzIGJlY2F1c2Ugd2UgbWF5IGRlY2lk
ZSB0byByZW1vdmUgZGVsdGEgYXQgdmFyaW91cyBwb2ludHMgYW5kIHB1dCBpdCBpbnRvIG92ZXJm
bG93LgorICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YSA9IEZsb2F0U2l6ZSgpOworCisgICAgSW50
U2l6ZSBzdHJldGNoQW1vdW50ID0gbV9jbGllbnQtPnN0cmV0Y2hBbW91bnQoKTsKKyAgICBib29s
IGlzVmVydGljYWxseVN0cmV0Y2hlZCA9IHN0cmV0Y2hBbW91bnQuaGVpZ2h0KCk7CisgICAgYm9v
bCBpc0hvcml6b250YWxseVN0cmV0Y2hlZCA9IHN0cmV0Y2hBbW91bnQud2lkdGgoKTsKKworICAg
IGZsb2F0IGV2ZW50Q29hbGVzY2VkRGVsdGFYOworICAgIGZsb2F0IGV2ZW50Q29hbGVzY2VkRGVs
dGFZOworCisgICAgaWYgKGlzVmVydGljYWxseVN0cmV0Y2hlZCB8fCBpc0hvcml6b250YWxseVN0
cmV0Y2hlZCkgeworICAgICAgICBldmVudENvYWxlc2NlZERlbHRhWCA9IC13aGVlbEV2ZW50LnVu
YWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YVgoKTsKKyAgICAgICAgZXZlbnRDb2FsZXNjZWREZWx0
YVkgPSAtd2hlZWxFdmVudC51bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGFZKCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZXZlbnRDb2FsZXNjZWREZWx0YVggPSAtd2hlZWxFdmVudC5kZWx0YVgo
KTsKKyAgICAgICAgZXZlbnRDb2FsZXNjZWREZWx0YVkgPSAtd2hlZWxFdmVudC5kZWx0YVkoKTsK
KyAgICB9CisKKyAgICBkZWx0YVggKz0gZXZlbnRDb2FsZXNjZWREZWx0YVg7CisgICAgZGVsdGFZ
ICs9IGV2ZW50Q29hbGVzY2VkRGVsdGFZOworCisgICAgLy8gU2xpZ2h0bHkgcHJlZmVyIHNjcm9s
bGluZyB2ZXJ0aWNhbGx5IGJ5IGFwcGx5aW5nIHRoZSA9IGNhc2UgdG8gZGVsdGFZCisgICAgaWYg
KGZhYnNmKGRlbHRhWSkgPj0gZmFic2YoZGVsdGFYKSkKKyAgICAgICAgZGVsdGFYID0gMDsKKyAg
ICBlbHNlCisgICAgICAgIGRlbHRhWSA9IDA7CisKKyAgICBib29sIHNob3VsZFN0cmV0Y2ggPSBm
YWxzZTsKKworICAgIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIG1vbWVudHVtUGhhc2UgPSB3aGVl
bEV2ZW50Lm1vbWVudHVtUGhhc2UoKTsKKworICAgIC8vIElmIHdlIGFyZSBzdGFydGluZyBtb21l
bnR1bSBzY3JvbGxpbmcgdGhlbiBkbyBzb21lIHNldHVwLgorICAgIGlmICghbV9tb21lbnR1bVNj
cm9sbEluUHJvZ3Jlc3MgJiYgKG1vbWVudHVtUGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhh
c2VCZWdhbiB8fCBtb21lbnR1bVBoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQ2hhbmdl
ZCkpCisgICAgICAgIG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzID0gdHJ1ZTsKKworICAgIENG
VGltZUludGVydmFsIHRpbWVEZWx0YSA9IHdoZWVsRXZlbnQudGltZXN0YW1wKCkgLSBtX2xhc3RN
b21lbnR1bVNjcm9sbFRpbWVzdGFtcDsKKyAgICBpZiAobV9pblNjcm9sbEdlc3R1cmUgfHwgbV9t
b21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MpIHsKKyAgICAgICAgaWYgKG1fbGFzdE1vbWVudHVtU2Ny
b2xsVGltZXN0YW1wICYmIHRpbWVEZWx0YSA+IDAgJiYgdGltZURlbHRhIDwgc2Nyb2xsVmVsb2Np
dHlaZXJvaW5nVGltZW91dCkgeworICAgICAgICAgICAgbV9tb21lbnR1bVZlbG9jaXR5LnNldFdp
ZHRoKGV2ZW50Q29hbGVzY2VkRGVsdGFYIC8gKGZsb2F0KXRpbWVEZWx0YSk7CisgICAgICAgICAg
ICBtX21vbWVudHVtVmVsb2NpdHkuc2V0SGVpZ2h0KGV2ZW50Q29hbGVzY2VkRGVsdGFZIC8gKGZs
b2F0KXRpbWVEZWx0YSk7CisgICAgICAgICAgICBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFt
cCA9IHdoZWVsRXZlbnQudGltZXN0YW1wKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcCA9IHdoZWVsRXZlbnQudGltZXN0YW1wKCk7
CisgICAgICAgICAgICBtX21vbWVudHVtVmVsb2NpdHkgPSBGbG9hdFNpemUoKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChpc1ZlcnRpY2FsbHlTdHJldGNoZWQpIHsKKyAgICAgICAgICAgIGlm
ICghaXNIb3Jpem9udGFsbHlTdHJldGNoZWQgJiYgbV9jbGllbnQtPnBpbm5lZEluRGlyZWN0aW9u
KEZsb2F0U2l6ZShkZWx0YVgsIDApKSkgeworICAgICAgICAgICAgICAgIC8vIFN0cmV0Y2hpbmcg
b25seSBpbiB0aGUgdmVydGljYWwuCisgICAgICAgICAgICAgICAgaWYgKGRlbHRhWSAhPSAwICYm
IChmYWJzZihkZWx0YVggLyBkZWx0YVkpIDwgcnViYmVyYmFuZERpcmVjdGlvbkxvY2tTdHJldGNo
UmF0aW8pKQorICAgICAgICAgICAgICAgICAgICBkZWx0YVggPSAwOworICAgICAgICAgICAgICAg
IGVsc2UgaWYgKGZhYnNmKGRlbHRhWCkgPCBydWJiZXJiYW5kTWluaW11bVJlcXVpcmVkRGVsdGFC
ZWZvcmVTdHJldGNoKSB7CisgICAgICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0
YS5zZXRXaWR0aChtX292ZXJmbG93U2Nyb2xsRGVsdGEud2lkdGgoKSArIGRlbHRhWCk7CisgICAg
ICAgICAgICAgICAgICAgIGRlbHRhWCA9IDA7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5zZXRXaWR0aChtX292ZXJmbG93
U2Nyb2xsRGVsdGEud2lkdGgoKSArIGRlbHRhWCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSBpZiAoaXNIb3Jpem9udGFsbHlTdHJldGNoZWQpIHsKKyAgICAgICAgICAgIC8vIFN0cmV0
Y2hpbmcgb25seSBpbiB0aGUgaG9yaXpvbnRhbC4KKyAgICAgICAgICAgIGlmIChtX2NsaWVudC0+
cGlubmVkSW5EaXJlY3Rpb24oRmxvYXRTaXplKDAsIGRlbHRhWSkpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGRlbHRhWCAhPSAwICYmIChmYWJzZihkZWx0YVkgLyBkZWx0YVgpIDwgcnViYmVyYmFu
ZERpcmVjdGlvbkxvY2tTdHJldGNoUmF0aW8pKQorICAgICAgICAgICAgICAgICAgICBkZWx0YVkg
PSAwOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZhYnNmKGRlbHRhWSkgPCBydWJiZXJiYW5k
TWluaW11bVJlcXVpcmVkRGVsdGFCZWZvcmVTdHJldGNoKSB7CisgICAgICAgICAgICAgICAgICAg
IG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5zZXRIZWlnaHQobV9vdmVyZmxvd1Njcm9sbERlbHRhLmhl
aWdodCgpICsgZGVsdGFZKTsKKyAgICAgICAgICAgICAgICAgICAgZGVsdGFZID0gMDsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbV9vdmVyZmxvd1Njcm9sbERl
bHRhLnNldEhlaWdodChtX292ZXJmbG93U2Nyb2xsRGVsdGEuaGVpZ2h0KCkgKyBkZWx0YVkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gTm90IHN0cmV0
Y2hpbmcgYXQgYWxsIHlldC4KKyAgICAgICAgICAgIGlmIChtX2NsaWVudC0+cGlubmVkSW5EaXJl
Y3Rpb24oRmxvYXRTaXplKGRlbHRhWCwgZGVsdGFZKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
ZmFic2YoZGVsdGFZKSA+PSBmYWJzZihkZWx0YVgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChmYWJzZihkZWx0YVgpIDwgcnViYmVyYmFuZE1pbmltdW1SZXF1aXJlZERlbHRhQmVmb3JlU3Ry
ZXRjaCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhLnNl
dFdpZHRoKG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS53aWR0aCgpICsgZGVsdGFYKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRlbHRhWCA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgICAgICAgICAgICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhLnNldFdpZHRoKG1f
b3ZlcmZsb3dTY3JvbGxEZWx0YS53aWR0aCgpICsgZGVsdGFYKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgc2hvdWxkU3RyZXRjaCA9IHRydWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZGVsdGFYICE9IDAgfHwgZGVsdGFZICE9IDApIHsK
KyAgICAgICAgaWYgKCEoc2hvdWxkU3RyZXRjaCB8fCBpc1ZlcnRpY2FsbHlTdHJldGNoZWQgfHwg
aXNIb3Jpem9udGFsbHlTdHJldGNoZWQpKSB7CisgICAgICAgICAgICBpZiAoZGVsdGFZICE9IDAp
IHsKKyAgICAgICAgICAgICAgICBkZWx0YVkgKj0gc2Nyb2xsV2hlZWxNdWx0aXBsaWVyKCk7Cisg
ICAgICAgICAgICAgICAgbV9jbGllbnQtPmltbWVkaWF0ZVNjcm9sbEJ5KEZsb2F0U2l6ZSgwLCBk
ZWx0YVkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkZWx0YVggIT0gMCkgewor
ICAgICAgICAgICAgICAgIGRlbHRhWCAqPSBzY3JvbGxXaGVlbE11bHRpcGxpZXIoKTsKKyAgICAg
ICAgICAgICAgICBtX2NsaWVudC0+aW1tZWRpYXRlU2Nyb2xsQnkoRmxvYXRTaXplKGRlbHRhWCwg
MCkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCFt
X2NsaWVudC0+YWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcod2hlZWxFdmVudCkpIHsKKyAgICAg
ICAgICAgICAgICBkZWx0YVggPSAwOworICAgICAgICAgICAgICAgIGV2ZW50Q29hbGVzY2VkRGVs
dGFYID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKGRlbHRhWCAhPSAwKSAmJiAhaXNIb3Jp
em9udGFsbHlTdHJldGNoZWQgJiYgIW1fY2xpZW50LT5waW5uZWRJbkRpcmVjdGlvbihGbG9hdFNp
emUoZGVsdGFYLCAwKSkpIHsKKyAgICAgICAgICAgICAgICBkZWx0YVggKj0gc2Nyb2xsV2hlZWxN
dWx0aXBsaWVyKCk7CisKKyAgICAgICAgICAgICAgICBtX2NsaWVudC0+aW1tZWRpYXRlU2Nyb2xs
QnlXaXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyhGbG9hdFNpemUoZGVsdGFYLCAwKSk7Cisg
ICAgICAgICAgICAgICAgZGVsdGFYID0gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKCFtX2NsaWVudC0+YWxsb3dzVmVydGljYWxTdHJldGNoaW5nKHdoZWVsRXZlbnQpKSB7Cisg
ICAgICAgICAgICAgICAgZGVsdGFZID0gMDsKKyAgICAgICAgICAgICAgICBldmVudENvYWxlc2Nl
ZERlbHRhWSA9IDA7CisgICAgICAgICAgICB9IGVsc2UgaWYgKChkZWx0YVkgIT0gMCkgJiYgIWlz
VmVydGljYWxseVN0cmV0Y2hlZCAmJiAhbV9jbGllbnQtPnBpbm5lZEluRGlyZWN0aW9uKEZsb2F0
U2l6ZSgwLCBkZWx0YVkpKSkgeworICAgICAgICAgICAgICAgIGRlbHRhWSAqPSBzY3JvbGxXaGVl
bE11bHRpcGxpZXIoKTsKKworICAgICAgICAgICAgICAgIG1fY2xpZW50LT5pbW1lZGlhdGVTY3Jv
bGxCeVdpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKEZsb2F0U2l6ZSgwLCBkZWx0YVkpKTsK
KyAgICAgICAgICAgICAgICBkZWx0YVkgPSAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBJbnRTaXplIHN0cmV0Y2hBbW91bnQgPSBtX2NsaWVudC0+c3RyZXRjaEFtb3VudCgpOworCisg
ICAgICAgICAgICBpZiAobV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoKG1fY2xpZW50LT5waW5uZWRJbkRpcmVjdGlvbihGbG9hdFNpemUoZXZlbnRDb2Fs
ZXNjZWREZWx0YVgsIGV2ZW50Q29hbGVzY2VkRGVsdGFZKSkgfHwgKGZhYnNmKGV2ZW50Q29hbGVz
Y2VkRGVsdGFYKSArIGZhYnNmKGV2ZW50Q29hbGVzY2VkRGVsdGFZKSA8PSAwKSkgJiYgbV9sYXN0
TW9tZW50dW1TY3JvbGxUaW1lc3RhbXApIHsKKyAgICAgICAgICAgICAgICAgICAgbV9pZ25vcmVN
b21lbnR1bVNjcm9sbHMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBtX21vbWVudHVtU2Ny
b2xsSW5Qcm9ncmVzcyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBzbmFwUnViYmVyQmFu
ZCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9z
dHJldGNoU2Nyb2xsRm9yY2Uuc2V0V2lkdGgobV9zdHJldGNoU2Nyb2xsRm9yY2Uud2lkdGgoKSAr
IGRlbHRhWCk7CisgICAgICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5zZXRIZWlnaHQobV9z
dHJldGNoU2Nyb2xsRm9yY2UuaGVpZ2h0KCkgKyBkZWx0YVkpOworCisgICAgICAgICAgICBGbG9h
dFNpemUgZGFtcGVkRGVsdGEoY2VpbGYoZWxhc3RpY0RlbHRhRm9yUmVib3VuZERlbHRhKG1fc3Ry
ZXRjaFNjcm9sbEZvcmNlLndpZHRoKCkpKSwgY2VpbGYoZWxhc3RpY0RlbHRhRm9yUmVib3VuZERl
bHRhKG1fc3RyZXRjaFNjcm9sbEZvcmNlLmhlaWdodCgpKSkpOworCisgICAgICAgICAgICBtX2Ns
aWVudC0+aW1tZWRpYXRlU2Nyb2xsQnlXaXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyhkYW1w
ZWREZWx0YSAtIHN0cmV0Y2hBbW91bnQpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1f
bW9tZW50dW1TY3JvbGxJblByb2dyZXNzICYmIG1vbWVudHVtUGhhc2UgPT0gUGxhdGZvcm1XaGVl
bEV2ZW50UGhhc2VFbmRlZCkgeworICAgICAgICBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyA9
IGZhbHNlOworICAgICAgICBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscyA9IGZhbHNlOworICAgICAg
ICBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcCA9IDA7CisgICAgfQorCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgZmxvYXQgcm91bmRUb3dhcmRaZXJvKGZsb2F0IG51
bSkKK3sKKyAgICByZXR1cm4gbnVtID4gMCA/IGNlaWxmKG51bSAtIDAuNWYpIDogZmxvb3JmKG51
bSArIDAuNWYpOworfQorCitzdGF0aWMgaW5saW5lIGZsb2F0IHJvdW5kVG9EZXZpY2VQaXhlbFRv
d2FyZFplcm8oZmxvYXQgbnVtKQoreworICAgIGZsb2F0IHJvdW5kZWROdW0gPSByb3VuZGYobnVt
KTsKKyAgICBpZiAoZmFicyhudW0gLSByb3VuZGVkTnVtKSA8IDAuMTI1KQorICAgICAgICBudW0g
PSByb3VuZGVkTnVtOworCisgICAgcmV0dXJuIHJvdW5kVG93YXJkWmVybyhudW0pOworfQorCit2
b2lkIFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyOjpzbmFwUnViYmVyQmFuZFRpbWVyRmlyZWQo
KQoreworICAgIGlmICghbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MgfHwgbV9pZ25vcmVNb21l
bnR1bVNjcm9sbHMpIHsKKyAgICAgICAgQ0ZUaW1lSW50ZXJ2YWwgdGltZURlbHRhID0gW05TRGF0
ZSB0aW1lSW50ZXJ2YWxTaW5jZVJlZmVyZW5jZURhdGVdIC0gbV9zdGFydFRpbWU7CisKKyAgICAg
ICAgaWYgKG1fc3RhcnRTdHJldGNoID09IEZsb2F0U2l6ZSgpKSB7CisgICAgICAgICAgICBtX3N0
YXJ0U3RyZXRjaCA9IG1fY2xpZW50LT5zdHJldGNoQW1vdW50KCk7CisgICAgICAgICAgICBpZiAo
bV9zdGFydFN0cmV0Y2ggPT0gRmxvYXRTaXplKCkpIHsKKyAgICAgICAgICAgICAgICBzdG9wU25h
cFJ1YmJlcmJhbmRUaW1lcigpOworCisgICAgICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9y
Y2UgPSBGbG9hdFNpemUoKTsKKyAgICAgICAgICAgICAgICBtX3N0YXJ0VGltZSA9IDA7CisgICAg
ICAgICAgICAgICAgbV9zdGFydFN0cmV0Y2ggPSBGbG9hdFNpemUoKTsKKyAgICAgICAgICAgICAg
ICBtX29yaWdPcmlnaW4gPSBGbG9hdFBvaW50KCk7CisgICAgICAgICAgICAgICAgbV9vcmlnVmVs
b2NpdHkgPSBGbG9hdFNpemUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIG1fb3JpZ09yaWdpbiA9IG1fY2xpZW50LT5hYnNvbHV0ZVNjcm9s
bFBvc2l0aW9uKCkgLSBtX3N0YXJ0U3RyZXRjaDsKKyAgICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5
ID0gbV9tb21lbnR1bVZlbG9jaXR5OworCisgICAgICAgICAgICAvLyBKdXN0IGxpa2Ugbm9ybWFs
IHNjcm9sbGluZywgcHJlZmVyIHZlcnRpY2FsIHJ1YmJlcmJhbmRpbmcKKyAgICAgICAgICAgIGlm
IChmYWJzZihtX29yaWdWZWxvY2l0eS5oZWlnaHQoKSkgPj0gZmFic2YobV9vcmlnVmVsb2NpdHku
d2lkdGgoKSkpCisgICAgICAgICAgICAgICAgbV9vcmlnVmVsb2NpdHkuc2V0V2lkdGgoMCk7CisK
KyAgICAgICAgICAgIC8vIERvbid0IHJ1YmJlci1iYW5kIGhvcml6b250YWxseSBpZiBpdCdzIG5v
dCBwb3NzaWJsZSB0byBzY3JvbGwgaG9yaXpvbnRhbGx5CisgICAgICAgICAgICBpZiAoIW1fY2xp
ZW50LT5jYW5TY3JvbGxIb3Jpem9udGFsbHkoKSkKKyAgICAgICAgICAgICAgICBtX29yaWdWZWxv
Y2l0eS5zZXRXaWR0aCgwKTsKKworICAgICAgICAgICAgLy8gRG9uJ3QgcnViYmVyLWJhbmQgdmVy
dGljYWxseSBpZiBpdCdzIG5vdCBwb3NzaWJsZSB0byBzY3JvbGwgdmVydGljYWxseQorICAgICAg
ICAgICAgaWYgKCFtX2NsaWVudC0+Y2FuU2Nyb2xsVmVydGljYWxseSgpKQorICAgICAgICAgICAg
ICAgIG1fb3JpZ1ZlbG9jaXR5LnNldEhlaWdodCgwKTsKKyAgICAgICAgfQorCisgICAgICAgIEZs
b2F0UG9pbnQgZGVsdGEocm91bmRUb0RldmljZVBpeGVsVG93YXJkWmVybyhlbGFzdGljRGVsdGFG
b3JUaW1lRGVsdGEobV9zdGFydFN0cmV0Y2gud2lkdGgoKSwgLW1fb3JpZ1ZlbG9jaXR5LndpZHRo
KCksIChmbG9hdCl0aW1lRGVsdGEpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICByb3VuZFRv
RGV2aWNlUGl4ZWxUb3dhcmRaZXJvKGVsYXN0aWNEZWx0YUZvclRpbWVEZWx0YShtX3N0YXJ0U3Ry
ZXRjaC5oZWlnaHQoKSwgLW1fb3JpZ1ZlbG9jaXR5LmhlaWdodCgpLCAoZmxvYXQpdGltZURlbHRh
KSkpOworCisgICAgICAgIGlmIChmYWJzKGRlbHRhLngoKSkgPj0gMSB8fCBmYWJzKGRlbHRhLnko
KSkgPj0gMSkgeworICAgICAgICAgICAgbV9jbGllbnQtPmltbWVkaWF0ZVNjcm9sbEJ5V2l0aG91
dENvbnRlbnRFZGdlQ29uc3RyYWludHMoRmxvYXRTaXplKGRlbHRhLngoKSwgZGVsdGEueSgpKSAt
IG1fY2xpZW50LT5zdHJldGNoQW1vdW50KCkpOworCisgICAgICAgICAgICBGbG9hdFNpemUgbmV3
U3RyZXRjaCA9IG1fY2xpZW50LT5zdHJldGNoQW1vdW50KCk7CisKKyAgICAgICAgICAgIG1fc3Ry
ZXRjaFNjcm9sbEZvcmNlLnNldFdpZHRoKHJlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0YShuZXdT
dHJldGNoLndpZHRoKCkpKTsKKyAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldEhl
aWdodChyZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEobmV3U3RyZXRjaC5oZWlnaHQoKSkpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9jbGllbnQtPmFkanVzdFNjcm9sbFBvc2l0
aW9uVG9Cb3VuZHNJZk5lY2Vzc2FyeSgpOworCisgICAgICAgICAgICBzdG9wU25hcFJ1YmJlcmJh
bmRUaW1lcigpOworICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2UgPSBGbG9hdFNpemUo
KTsKKyAgICAgICAgICAgIG1fc3RhcnRUaW1lID0gMDsKKyAgICAgICAgICAgIG1fc3RhcnRTdHJl
dGNoID0gRmxvYXRTaXplKCk7CisgICAgICAgICAgICBtX29yaWdPcmlnaW4gPSBGbG9hdFBvaW50
KCk7CisgICAgICAgICAgICBtX29yaWdWZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9zdGFydFRpbWUgPSBbTlNEYXRlIHRpbWVJbnRlcnZh
bFNpbmNlUmVmZXJlbmNlRGF0ZV07CisgICAgICAgIG1fc3RhcnRTdHJldGNoID0gRmxvYXRTaXpl
KCk7CisgICAgfQorfQorCitib29sIFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyOjppc1J1YmJl
ckJhbmRJblByb2dyZXNzKCkgY29uc3QKK3sKKyAgICBpZiAoIW1faW5TY3JvbGxHZXN0dXJlICYm
ICFtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyAmJiAhbV9zbmFwUnViYmVyYmFuZFRpbWVySXNB
Y3RpdmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiAhbV9jbGllbnQtPnN0
cmV0Y2hBbW91bnQoKS5pc1plcm8oKTsKK30KKwordm9pZCBTY3JvbGxFbGFzdGljaXR5Q29udHJv
bGxlcjo6c3RvcFNuYXBSdWJiZXJiYW5kVGltZXIoKQoreworICAgIG1fY2xpZW50LT5zdG9wU25h
cFJ1YmJlcmJhbmRUaW1lcigpOworICAgIG1fc25hcFJ1YmJlcmJhbmRUaW1lcklzQWN0aXZlID0g
ZmFsc2U7Cit9CisKK3ZvaWQgU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXI6OnNuYXBSdWJiZXJC
YW5kKCkKK3sKKyAgICBDRlRpbWVJbnRlcnZhbCB0aW1lRGVsdGEgPSBzeXN0ZW1VcHRpbWUoKSAt
IG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wOworICAgIGlmIChtX2xhc3RNb21lbnR1bVNj
cm9sbFRpbWVzdGFtcCAmJiB0aW1lRGVsdGEgPj0gc2Nyb2xsVmVsb2NpdHlaZXJvaW5nVGltZW91
dCkKKyAgICAgICAgbV9tb21lbnR1bVZlbG9jaXR5ID0gRmxvYXRTaXplKCk7CisKKyAgICBtX2lu
U2Nyb2xsR2VzdHVyZSA9IGZhbHNlOworCisgICAgaWYgKG1fc25hcFJ1YmJlcmJhbmRUaW1lcklz
QWN0aXZlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0YXJ0VGltZSA9IFtOU0RhdGUgdGlt
ZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXTsKKyAgICBtX3N0YXJ0U3RyZXRjaCA9IEZsb2F0
U2l6ZSgpOworICAgIG1fb3JpZ09yaWdpbiA9IEZsb2F0UG9pbnQoKTsKKyAgICBtX29yaWdWZWxv
Y2l0eSA9IEZsb2F0U2l6ZSgpOworCisgICAgbV9jbGllbnQtPnN0YXJ0U25hcFJ1YmJlcmJhbmRU
aW1lcigpOworICAgIG1fc25hcFJ1YmJlcmJhbmRUaW1lcklzQWN0aXZlID0gdHJ1ZTsKK30KKwor
Ym9vbCBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlcjo6c2hvdWxkUnViYmVyQmFuZEluSG9yaXpv
bnRhbERpcmVjdGlvbihjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCit7Cisg
ICAgaWYgKHdoZWVsRXZlbnQuZGVsdGFYKCkgPiAwKQorICAgICAgICByZXR1cm4gbV9jbGllbnQt
PnNob3VsZFJ1YmJlckJhbmRJbkRpcmVjdGlvbihTY3JvbGxMZWZ0KTsKKyAgICBpZiAod2hlZWxF
dmVudC5kZWx0YVgoKSA8IDApCisgICAgICAgIHJldHVybiBtX2NsaWVudC0+c2hvdWxkUnViYmVy
QmFuZEluRGlyZWN0aW9uKFNjcm9sbFJpZ2h0KTsKKworICAgIHJldHVybiB0cnVlOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoUlVCQkVSX0JBTkRJTkcp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQ29udHJvbGxlci5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQ29udHJvbGxl
ci5tbQkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9s
bENvbnRyb2xsZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKICAqLwogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIu
aCIKKyNpbmNsdWRlICJTY3JvbGxDb250cm9sbGVyLmgiCiAKICNpbmNsdWRlICJQbGF0Zm9ybVdo
ZWVsRXZlbnQuaCIKICNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCkBAIC04OSw3
ICs4OSw3IEBAIHN0YXRpYyBmbG9hdCBzY3JvbGxXaGVlbE11bHRpcGxpZXIoKQogICAgIHJldHVy
biBtdWx0aXBsaWVyOwogfQogCi1TY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlcjo6U2Nyb2xsRWxh
c3RpY2l0eUNvbnRyb2xsZXIoU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXJDbGllbnQqIGNsaWVu
dCkKK1Njcm9sbENvbnRyb2xsZXI6OlNjcm9sbENvbnRyb2xsZXIoU2Nyb2xsQ29udHJvbGxlckNs
aWVudCogY2xpZW50KQogICAgIDogbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9pblNjcm9sbEdl
c3R1cmUoZmFsc2UpCiAgICAgLCBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyhmYWxzZSkKQEAg
LTEwMCw3ICsxMDAsNyBAQCBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlcjo6U2Nyb2xsRWxhc3Rp
CiB7CiB9CiAKLWJvb2wgU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXI6OmhhbmRsZVdoZWVsRXZl
bnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQorYm9vbCBTY3JvbGxDb250
cm9sbGVyOjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxF
dmVudCkKIHsKICAgICBpZiAod2hlZWxFdmVudC5waGFzZSgpID09IFBsYXRmb3JtV2hlZWxFdmVu
dFBoYXNlQmVnYW4pIHsKICAgICAgICAgLy8gRmlyc3QsIGNoZWNrIGlmIHdlIHNob3VsZCBydWJi
ZXItYmFuZCBhdCBhbGwuCkBAIC0yOTcsNyArMjk3LDcgQEAgc3RhdGljIGlubGluZSBmbG9hdCBy
b3VuZFRvRGV2aWNlUGl4ZWxUbwogICAgIHJldHVybiByb3VuZFRvd2FyZFplcm8obnVtKTsKIH0K
IAotdm9pZCBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlcjo6c25hcFJ1YmJlckJhbmRUaW1lckZp
cmVkKCkKK3ZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c25hcFJ1YmJlckJhbmRUaW1lckZpcmVkKCkK
IHsKICAgICBpZiAoIW1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzIHx8IG1faWdub3JlTW9tZW50
dW1TY3JvbGxzKSB7CiAgICAgICAgIENGVGltZUludGVydmFsIHRpbWVEZWx0YSA9IFtOU0RhdGUg
dGltZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXSAtIG1fc3RhcnRUaW1lOwpAQCAtMzU3LDcg
KzM1Nyw3IEBAIHZvaWQgU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXI6OnNuYXBSdWIKICAgICB9
CiB9CiAKLWJvb2wgU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXI6OmlzUnViYmVyQmFuZEluUHJv
Z3Jlc3MoKSBjb25zdAorYm9vbCBTY3JvbGxDb250cm9sbGVyOjppc1J1YmJlckJhbmRJblByb2dy
ZXNzKCkgY29uc3QKIHsKICAgICBpZiAoIW1faW5TY3JvbGxHZXN0dXJlICYmICFtX21vbWVudHVt
U2Nyb2xsSW5Qcm9ncmVzcyAmJiAhbV9zbmFwUnViYmVyYmFuZFRpbWVySXNBY3RpdmUpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTM2NSwxMyArMzY1LDEzIEBAIGJvb2wgU2Nyb2xsRWxhc3Rp
Y2l0eUNvbnRyb2xsZXI6OmlzUnViYmUKICAgICByZXR1cm4gIW1fY2xpZW50LT5zdHJldGNoQW1v
dW50KCkuaXNaZXJvKCk7CiB9CiAKLXZvaWQgU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXI6OnN0
b3BTbmFwUnViYmVyYmFuZFRpbWVyKCkKK3ZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6c3RvcFNuYXBS
dWJiZXJiYW5kVGltZXIoKQogewogICAgIG1fY2xpZW50LT5zdG9wU25hcFJ1YmJlcmJhbmRUaW1l
cigpOwogICAgIG1fc25hcFJ1YmJlcmJhbmRUaW1lcklzQWN0aXZlID0gZmFsc2U7CiB9CiAKLXZv
aWQgU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXI6OnNuYXBSdWJiZXJCYW5kKCkKK3ZvaWQgU2Ny
b2xsQ29udHJvbGxlcjo6c25hcFJ1YmJlckJhbmQoKQogewogICAgIENGVGltZUludGVydmFsIHRp
bWVEZWx0YSA9IHN5c3RlbVVwdGltZSgpIC0gbV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXA7
CiAgICAgaWYgKG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wICYmIHRpbWVEZWx0YSA+PSBz
Y3JvbGxWZWxvY2l0eVplcm9pbmdUaW1lb3V0KQpAQCAtMzkxLDcgKzM5MSw3IEBAIHZvaWQgU2Ny
b2xsRWxhc3RpY2l0eUNvbnRyb2xsZXI6OnNuYXBSdWIKICAgICBtX3NuYXBSdWJiZXJiYW5kVGlt
ZXJJc0FjdGl2ZSA9IHRydWU7CiB9CiAKLWJvb2wgU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXI6
OnNob3VsZFJ1YmJlckJhbmRJbkhvcml6b250YWxEaXJlY3Rpb24oY29uc3QgUGxhdGZvcm1XaGVl
bEV2ZW50JiB3aGVlbEV2ZW50KQorYm9vbCBTY3JvbGxDb250cm9sbGVyOjpzaG91bGRSdWJiZXJC
YW5kSW5Ib3Jpem9udGFsRGlyZWN0aW9uKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxF
dmVudCkKIHsKICAgICBpZiAod2hlZWxFdmVudC5kZWx0YVgoKSA+IDApCiAgICAgICAgIHJldHVy
biBtX2NsaWVudC0+c2hvdWxkUnViYmVyQmFuZEluRGlyZWN0aW9uKFNjcm9sbExlZnQpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEVsYXN0aWNpdHlDb250cm9sbGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEVsYXN0
aWNpdHlDb250cm9sbGVyLmgJKHJldmlzaW9uIDE4MDQyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9TY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDEwNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTY3JvbGxFbGFzdGljaXR5Q29u
dHJvbGxlcl9oCi0jZGVmaW5lIFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyX2gKLQotI2lmIEVO
QUJMRShSVUJCRVJfQkFORElORykKLQotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRl
ICJGbG9hdFNpemUuaCIKLSNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgotI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFBsYXRmb3JtV2hl
ZWxFdmVudDsKLQotY2xhc3MgU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXJDbGllbnQgewotcHJv
dGVjdGVkOgotICAgIHZpcnR1YWwgflNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyQ2xpZW50KCkg
eyB9IAotCi1wdWJsaWM6Ci0gICAgdmlydHVhbCBib29sIGFsbG93c0hvcml6b250YWxTdHJldGNo
aW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgYWxs
b3dzVmVydGljYWxTdHJldGNoaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpID0gMDsKLSAg
ICB2aXJ0dWFsIEludFNpemUgc3RyZXRjaEFtb3VudCgpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wg
cGlubmVkSW5EaXJlY3Rpb24oY29uc3QgRmxvYXRTaXplJikgPSAwOwotICAgIHZpcnR1YWwgYm9v
bCBjYW5TY3JvbGxIb3Jpem9udGFsbHkoKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGNhblNjcm9s
bFZlcnRpY2FsbHkoKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHNob3VsZFJ1YmJlckJhbmRJbkRp
cmVjdGlvbihTY3JvbGxEaXJlY3Rpb24pID0gMDsKLQotICAgIC8vIFJldHVybiB0aGUgYWJzb2x1
dGUgc2Nyb2xsIHBvc2l0aW9uLCBub3QgcmVsYXRpdmUgdG8gdGhlIHNjcm9sbCBvcmlnaW4uCi0g
ICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBhYnNvbHV0ZVNjcm9sbFBvc2l0aW9uKCkgPSAw
OwotCi0gICAgdmlydHVhbCB2b2lkIGltbWVkaWF0ZVNjcm9sbEJ5KGNvbnN0IEZsb2F0U2l6ZSYp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgaW1tZWRpYXRlU2Nyb2xsQnlXaXRob3V0Q29udGVudEVk
Z2VDb25zdHJhaW50cyhjb25zdCBGbG9hdFNpemUmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN0
YXJ0U25hcFJ1YmJlcmJhbmRUaW1lcigpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcFNuYXBS
dWJiZXJiYW5kVGltZXIoKSA9IDA7Ci0KLSAgICAvLyBJZiB0aGUgY3VycmVudCBzY3JvbGwgcG9z
aXRpb24gaXMgd2l0aGluIHRoZSBvdmVyaGFuZyBhcmVhLCB0aGlzIGZ1bmN0aW9uIHdpbGwgY2F1
c2UKLSAgICAvLyB0aGUgcGFnZSB0byBzY3JvbGwgdG8gdGhlIG5lYXJlc3QgYm91bmRhcnkgcG9p
bnQuCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNjcm9sbFBvc2l0aW9uVG9Cb3VuZHNJZk5lY2Vz
c2FyeSgpID0gMDsKLX07Ci0KLWNsYXNzIFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyIHsKLSAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlcik7Ci0KLXB1
YmxpYzoKLSAgICBleHBsaWNpdCBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlcihTY3JvbGxFbGFz
dGljaXR5Q29udHJvbGxlckNsaWVudCopOwotCi0gICAgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KGNv
bnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOwotICAgIHZvaWQgc25hcFJ1YmJlckJhbmRUaW1lckZp
cmVkKCk7Ci0KLSAgICBib29sIGlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSBjb25zdDsKLQotcHJp
dmF0ZToKLSAgICB2b2lkIHN0b3BTbmFwUnViYmVyYmFuZFRpbWVyKCk7Ci0gICAgdm9pZCBzbmFw
UnViYmVyQmFuZCgpOwotCi0gICAgYm9vbCBzaG91bGRSdWJiZXJCYW5kSW5Ib3Jpem9udGFsRGly
ZWN0aW9uKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOwotCi0gICAgU2Nyb2xsRWxhc3RpY2l0
eUNvbnRyb2xsZXJDbGllbnQqIG1fY2xpZW50OwotCi0gICAgYm9vbCBtX2luU2Nyb2xsR2VzdHVy
ZTsKLSAgICBib29sIG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzOwotICAgIGJvb2wgbV9pZ25v
cmVNb21lbnR1bVNjcm9sbHM7Ci0gICAgCi0gICAgQ0ZUaW1lSW50ZXJ2YWwgbV9sYXN0TW9tZW50
dW1TY3JvbGxUaW1lc3RhbXA7Ci0gICAgRmxvYXRTaXplIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YTsK
LSAgICBGbG9hdFNpemUgbV9zdHJldGNoU2Nyb2xsRm9yY2U7Ci0gICAgRmxvYXRTaXplIG1fbW9t
ZW50dW1WZWxvY2l0eTsKLQotICAgIC8vIFJ1YmJlciBiYW5kIHN0YXRlLgotICAgIENGVGltZUlu
dGVydmFsIG1fc3RhcnRUaW1lOwotICAgIEZsb2F0U2l6ZSBtX3N0YXJ0U3RyZXRjaDsKLSAgICBG
bG9hdFBvaW50IG1fb3JpZ09yaWdpbjsKLSAgICBGbG9hdFNpemUgbV9vcmlnVmVsb2NpdHk7Ci0K
LSAgICBib29sIG1fc25hcFJ1YmJlcmJhbmRUaW1lcklzQWN0aXZlOwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotCi0jZW5k
aWYgLy8gU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXJfaApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1Njcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5t
bQkocmV2aXNpb24gMTgwNDIwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9s
bEVsYXN0aWNpdHlDb250cm9sbGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQwNiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNjcm9sbEVsYXN0
aWNpdHlDb250cm9sbGVyLmgiCi0KLSNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKLSNp
bmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4K
LSNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+Ci0KLSNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0K
LXN0YXRpYyBOU1RpbWVJbnRlcnZhbCBzeXN0ZW1VcHRpbWUoKQotewotICAgIGlmIChbW05TUHJv
Y2Vzc0luZm8gcHJvY2Vzc0luZm9dIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Ioc3lzdGVt
VXB0aW1lKV0pCi0gICAgICAgIHJldHVybiBbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIHN5
c3RlbVVwdGltZV07Ci0KLSAgICAvLyBHZXQgaG93IGxvbmcgc3lzdGVtIGhhcyBiZWVuIHVwLiBG
b3VuZCBieSBsb29raW5nIGdldHRpbmcgImJvb3R0aW1lIiBmcm9tIHRoZSBrZXJuZWwuCi0gICAg
c3RhdGljIHN0cnVjdCB0aW1ldmFsIGJvb3R0aW1lID0gezAsIDB9OwotICAgIGlmICghYm9vdHRp
bWUudHZfc2VjKSB7Ci0gICAgICAgIGludCBtaWJbMl0gPSB7Q1RMX0tFUk4sIEtFUk5fQk9PVFRJ
TUV9OwotICAgICAgICBzaXplX3Qgc2l6ZSA9IHNpemVvZihib290dGltZSk7Ci0gICAgICAgIGlm
ICgtMSA9PSBzeXNjdGwobWliLCAyLCAmYm9vdHRpbWUsICZzaXplLCAwLCAwKSkKLSAgICAgICAg
ICAgIGJvb3R0aW1lLnR2X3NlYyA9IDA7Ci0gICAgfQotICAgIHN0cnVjdCB0aW1ldmFsIG5vdzsK
LSAgICBpZiAoYm9vdHRpbWUudHZfc2VjICYmIC0xICE9IGdldHRpbWVvZmRheSgmbm93LCAwKSkg
ewotICAgICAgICBzdHJ1Y3QgdGltZXZhbCB1cHRpbWU7Ci0gICAgICAgIHRpbWVyc3ViKCZub3cs
ICZib290dGltZSwgJnVwdGltZSk7Ci0gICAgICAgIE5TVGltZUludGVydmFsIHJlc3VsdCA9IHVw
dGltZS50dl9zZWMgKyAodXB0aW1lLnR2X3VzZWMgLyAxRSs2KTsKLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1zdGF0aWMgY29uc3QgZmxvYXQgc2Nyb2xsVmVsb2NpdHlaZXJvaW5nVGltZW91dCA9IDAuMTBm
Owotc3RhdGljIGNvbnN0IGZsb2F0IHJ1YmJlcmJhbmREaXJlY3Rpb25Mb2NrU3RyZXRjaFJhdGlv
ID0gMTsKLXN0YXRpYyBjb25zdCBmbG9hdCBydWJiZXJiYW5kTWluaW11bVJlcXVpcmVkRGVsdGFC
ZWZvcmVTdHJldGNoID0gMTA7Ci0KLXN0YXRpYyBmbG9hdCBlbGFzdGljRGVsdGFGb3JUaW1lRGVs
dGEoZmxvYXQgaW5pdGlhbFBvc2l0aW9uLCBmbG9hdCBpbml0aWFsVmVsb2NpdHksIGZsb2F0IGVs
YXBzZWRUaW1lKQotewotICAgIHJldHVybiB3a05TRWxhc3RpY0RlbHRhRm9yVGltZURlbHRhKGlu
aXRpYWxQb3NpdGlvbiwgaW5pdGlhbFZlbG9jaXR5LCBlbGFwc2VkVGltZSk7Ci19Ci0KLXN0YXRp
YyBmbG9hdCBlbGFzdGljRGVsdGFGb3JSZWJvdW5kRGVsdGEoZmxvYXQgZGVsdGEpCi17Ci0gICAg
cmV0dXJuIHdrTlNFbGFzdGljRGVsdGFGb3JSZWJvdW5kRGVsdGEoZGVsdGEpOwotfQotCi1zdGF0
aWMgZmxvYXQgcmVib3VuZERlbHRhRm9yRWxhc3RpY0RlbHRhKGZsb2F0IGRlbHRhKQotewotICAg
IHJldHVybiB3a05TUmVib3VuZERlbHRhRm9yRWxhc3RpY0RlbHRhKGRlbHRhKTsKLX0KLQotc3Rh
dGljIGZsb2F0IHNjcm9sbFdoZWVsTXVsdGlwbGllcigpCi17Ci0gICAgc3RhdGljIGZsb2F0IG11
bHRpcGxpZXIgPSAtMTsKLSAgICBpZiAobXVsdGlwbGllciA8IDApIHsKLSAgICAgICAgbXVsdGlw
bGllciA9IFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGZsb2F0Rm9yS2V5
OkAiTlNTY3JvbGxXaGVlbE11bHRpcGxpZXIiXTsKLSAgICAgICAgaWYgKG11bHRpcGxpZXIgPD0g
MCkKLSAgICAgICAgICAgIG11bHRpcGxpZXIgPSAxOwotICAgIH0KLSAgICByZXR1cm4gbXVsdGlw
bGllcjsKLX0KLQotU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXI6OlNjcm9sbEVsYXN0aWNpdHlD
b250cm9sbGVyKFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyQ2xpZW50KiBjbGllbnQpCi0gICAg
OiBtX2NsaWVudChjbGllbnQpCi0gICAgLCBtX2luU2Nyb2xsR2VzdHVyZShmYWxzZSkKLSAgICAs
IG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzKGZhbHNlKQotICAgICwgbV9pZ25vcmVNb21lbnR1
bVNjcm9sbHMoZmFsc2UpCi0gICAgLCBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcCgwKQot
ICAgICwgbV9zdGFydFRpbWUoMCkKLSAgICAsIG1fc25hcFJ1YmJlcmJhbmRUaW1lcklzQWN0aXZl
KGZhbHNlKQotewotfQotCi1ib29sIFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyOjpoYW5kbGVX
aGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKLXsKLSAgICBp
ZiAod2hlZWxFdmVudC5waGFzZSgpID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQmVnYW4pIHsK
LSAgICAgICAgLy8gRmlyc3QsIGNoZWNrIGlmIHdlIHNob3VsZCBydWJiZXItYmFuZCBhdCBhbGwu
Ci0gICAgICAgIGlmIChtX2NsaWVudC0+cGlubmVkSW5EaXJlY3Rpb24oRmxvYXRTaXplKC13aGVl
bEV2ZW50LmRlbHRhWCgpLCAwKSkgJiYKLSAgICAgICAgICAgICFzaG91bGRSdWJiZXJCYW5kSW5I
b3Jpem9udGFsRGlyZWN0aW9uKHdoZWVsRXZlbnQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgICAgIG1faW5TY3JvbGxHZXN0dXJlID0gdHJ1ZTsKLSAgICAgICAgbV9tb21lbnR1
bVNjcm9sbEluUHJvZ3Jlc3MgPSBmYWxzZTsKLSAgICAgICAgbV9pZ25vcmVNb21lbnR1bVNjcm9s
bHMgPSBmYWxzZTsKLSAgICAgICAgbV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAgPSAwOwot
ICAgICAgICBtX21vbWVudHVtVmVsb2NpdHkgPSBGbG9hdFNpemUoKTsKLQotICAgICAgICBJbnRT
aXplIHN0cmV0Y2hBbW91bnQgPSBtX2NsaWVudC0+c3RyZXRjaEFtb3VudCgpOwotICAgICAgICBt
X3N0cmV0Y2hTY3JvbGxGb3JjZS5zZXRXaWR0aChyZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEo
c3RyZXRjaEFtb3VudC53aWR0aCgpKSk7Ci0gICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNl
dEhlaWdodChyZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEoc3RyZXRjaEFtb3VudC5oZWlnaHQo
KSkpOwotICAgICAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEgPSBGbG9hdFNpemUoKTsKLQotICAg
ICAgICBzdG9wU25hcFJ1YmJlcmJhbmRUaW1lcigpOwotCi0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIGlmICh3aGVlbEV2ZW50LnBoYXNlKCkgPT0gUGxhdGZvcm1XaGVlbEV2ZW50
UGhhc2VFbmRlZCkgewotICAgICAgICBzbmFwUnViYmVyQmFuZCgpOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLSAgICBib29sIGlzTW9tZW50dW1TY3JvbGxFdmVudCA9ICh3aGVlbEV2
ZW50Lm1vbWVudHVtUGhhc2UoKSAhPSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZU5vbmUpOwotICAg
IGlmIChtX2lnbm9yZU1vbWVudHVtU2Nyb2xscyAmJiAoaXNNb21lbnR1bVNjcm9sbEV2ZW50IHx8
IG1fc25hcFJ1YmJlcmJhbmRUaW1lcklzQWN0aXZlKSkgewotICAgICAgICBpZiAod2hlZWxFdmVu
dC5tb21lbnR1bVBoYXNlKCkgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VFbmRlZCkgewotICAg
ICAgICAgICAgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMgPSBmYWxzZTsKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBmbG9hdCBkZWx0YVggPSBtX292ZXJmbG93U2Nyb2xsRGVsdGEud2lkdGgoKTsKLSAgICBmbG9h
dCBkZWx0YVkgPSBtX292ZXJmbG93U2Nyb2xsRGVsdGEuaGVpZ2h0KCk7Ci0KLSAgICAvLyBSZXNl
dCBvdmVyZmxvdyB2YWx1ZXMgYmVjYXVzZSB3ZSBtYXkgZGVjaWRlIHRvIHJlbW92ZSBkZWx0YSBh
dCB2YXJpb3VzIHBvaW50cyBhbmQgcHV0IGl0IGludG8gb3ZlcmZsb3cuCi0gICAgbV9vdmVyZmxv
d1Njcm9sbERlbHRhID0gRmxvYXRTaXplKCk7Ci0KLSAgICBJbnRTaXplIHN0cmV0Y2hBbW91bnQg
PSBtX2NsaWVudC0+c3RyZXRjaEFtb3VudCgpOwotICAgIGJvb2wgaXNWZXJ0aWNhbGx5U3RyZXRj
aGVkID0gc3RyZXRjaEFtb3VudC5oZWlnaHQoKTsKLSAgICBib29sIGlzSG9yaXpvbnRhbGx5U3Ry
ZXRjaGVkID0gc3RyZXRjaEFtb3VudC53aWR0aCgpOwotCi0gICAgZmxvYXQgZXZlbnRDb2FsZXNj
ZWREZWx0YVg7Ci0gICAgZmxvYXQgZXZlbnRDb2FsZXNjZWREZWx0YVk7Ci0KLSAgICBpZiAoaXNW
ZXJ0aWNhbGx5U3RyZXRjaGVkIHx8IGlzSG9yaXpvbnRhbGx5U3RyZXRjaGVkKSB7Ci0gICAgICAg
IGV2ZW50Q29hbGVzY2VkRGVsdGFYID0gLXdoZWVsRXZlbnQudW5hY2NlbGVyYXRlZFNjcm9sbGlu
Z0RlbHRhWCgpOwotICAgICAgICBldmVudENvYWxlc2NlZERlbHRhWSA9IC13aGVlbEV2ZW50LnVu
YWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YVkoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBldmVu
dENvYWxlc2NlZERlbHRhWCA9IC13aGVlbEV2ZW50LmRlbHRhWCgpOwotICAgICAgICBldmVudENv
YWxlc2NlZERlbHRhWSA9IC13aGVlbEV2ZW50LmRlbHRhWSgpOwotICAgIH0KLQotICAgIGRlbHRh
WCArPSBldmVudENvYWxlc2NlZERlbHRhWDsKLSAgICBkZWx0YVkgKz0gZXZlbnRDb2FsZXNjZWRE
ZWx0YVk7Ci0KLSAgICAvLyBTbGlnaHRseSBwcmVmZXIgc2Nyb2xsaW5nIHZlcnRpY2FsbHkgYnkg
YXBwbHlpbmcgdGhlID0gY2FzZSB0byBkZWx0YVkKLSAgICBpZiAoZmFic2YoZGVsdGFZKSA+PSBm
YWJzZihkZWx0YVgpKQotICAgICAgICBkZWx0YVggPSAwOwotICAgIGVsc2UKLSAgICAgICAgZGVs
dGFZID0gMDsKLQotICAgIGJvb2wgc2hvdWxkU3RyZXRjaCA9IGZhbHNlOwotCi0gICAgUGxhdGZv
cm1XaGVlbEV2ZW50UGhhc2UgbW9tZW50dW1QaGFzZSA9IHdoZWVsRXZlbnQubW9tZW50dW1QaGFz
ZSgpOwotCi0gICAgLy8gSWYgd2UgYXJlIHN0YXJ0aW5nIG1vbWVudHVtIHNjcm9sbGluZyB0aGVu
IGRvIHNvbWUgc2V0dXAuCi0gICAgaWYgKCFtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyAmJiAo
bW9tZW50dW1QaGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUJlZ2FuIHx8IG1vbWVudHVt
UGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VDaGFuZ2VkKSkKLSAgICAgICAgbV9tb21l
bnR1bVNjcm9sbEluUHJvZ3Jlc3MgPSB0cnVlOwotCi0gICAgQ0ZUaW1lSW50ZXJ2YWwgdGltZURl
bHRhID0gd2hlZWxFdmVudC50aW1lc3RhbXAoKSAtIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0
YW1wOwotICAgIGlmIChtX2luU2Nyb2xsR2VzdHVyZSB8fCBtX21vbWVudHVtU2Nyb2xsSW5Qcm9n
cmVzcykgewotICAgICAgICBpZiAobV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAgJiYgdGlt
ZURlbHRhID4gMCAmJiB0aW1lRGVsdGEgPCBzY3JvbGxWZWxvY2l0eVplcm9pbmdUaW1lb3V0KSB7
Ci0gICAgICAgICAgICBtX21vbWVudHVtVmVsb2NpdHkuc2V0V2lkdGgoZXZlbnRDb2FsZXNjZWRE
ZWx0YVggLyAoZmxvYXQpdGltZURlbHRhKTsKLSAgICAgICAgICAgIG1fbW9tZW50dW1WZWxvY2l0
eS5zZXRIZWlnaHQoZXZlbnRDb2FsZXNjZWREZWx0YVkgLyAoZmxvYXQpdGltZURlbHRhKTsKLSAg
ICAgICAgICAgIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wID0gd2hlZWxFdmVudC50aW1l
c3RhbXAoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fbGFzdE1vbWVudHVtU2Ny
b2xsVGltZXN0YW1wID0gd2hlZWxFdmVudC50aW1lc3RhbXAoKTsKLSAgICAgICAgICAgIG1fbW9t
ZW50dW1WZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGlz
VmVydGljYWxseVN0cmV0Y2hlZCkgewotICAgICAgICAgICAgaWYgKCFpc0hvcml6b250YWxseVN0
cmV0Y2hlZCAmJiBtX2NsaWVudC0+cGlubmVkSW5EaXJlY3Rpb24oRmxvYXRTaXplKGRlbHRhWCwg
MCkpKSB7Ci0gICAgICAgICAgICAgICAgLy8gU3RyZXRjaGluZyBvbmx5IGluIHRoZSB2ZXJ0aWNh
bC4KLSAgICAgICAgICAgICAgICBpZiAoZGVsdGFZICE9IDAgJiYgKGZhYnNmKGRlbHRhWCAvIGRl
bHRhWSkgPCBydWJiZXJiYW5kRGlyZWN0aW9uTG9ja1N0cmV0Y2hSYXRpbykpCi0gICAgICAgICAg
ICAgICAgICAgIGRlbHRhWCA9IDA7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoZmFic2YoZGVs
dGFYKSA8IHJ1YmJlcmJhbmRNaW5pbXVtUmVxdWlyZWREZWx0YUJlZm9yZVN0cmV0Y2gpIHsKLSAg
ICAgICAgICAgICAgICAgICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhLnNldFdpZHRoKG1fb3ZlcmZs
b3dTY3JvbGxEZWx0YS53aWR0aCgpICsgZGVsdGFYKTsKLSAgICAgICAgICAgICAgICAgICAgZGVs
dGFYID0gMDsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9v
dmVyZmxvd1Njcm9sbERlbHRhLnNldFdpZHRoKG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS53aWR0aCgp
ICsgZGVsdGFYKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChpc0hvcml6b250
YWxseVN0cmV0Y2hlZCkgewotICAgICAgICAgICAgLy8gU3RyZXRjaGluZyBvbmx5IGluIHRoZSBo
b3Jpem9udGFsLgotICAgICAgICAgICAgaWYgKG1fY2xpZW50LT5waW5uZWRJbkRpcmVjdGlvbihG
bG9hdFNpemUoMCwgZGVsdGFZKSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoZGVsdGFYICE9IDAg
JiYgKGZhYnNmKGRlbHRhWSAvIGRlbHRhWCkgPCBydWJiZXJiYW5kRGlyZWN0aW9uTG9ja1N0cmV0
Y2hSYXRpbykpCi0gICAgICAgICAgICAgICAgICAgIGRlbHRhWSA9IDA7Ci0gICAgICAgICAgICAg
ICAgZWxzZSBpZiAoZmFic2YoZGVsdGFZKSA8IHJ1YmJlcmJhbmRNaW5pbXVtUmVxdWlyZWREZWx0
YUJlZm9yZVN0cmV0Y2gpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9vdmVyZmxvd1Njcm9sbERl
bHRhLnNldEhlaWdodChtX292ZXJmbG93U2Nyb2xsRGVsdGEuaGVpZ2h0KCkgKyBkZWx0YVkpOwot
ICAgICAgICAgICAgICAgICAgICBkZWx0YVkgPSAwOwotICAgICAgICAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgICAgICAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEuc2V0SGVpZ2h0KG1fb3Zl
cmZsb3dTY3JvbGxEZWx0YS5oZWlnaHQoKSArIGRlbHRhWSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBOb3Qgc3RyZXRjaGluZyBhdCBhbGwgeWV0Lgot
ICAgICAgICAgICAgaWYgKG1fY2xpZW50LT5waW5uZWRJbkRpcmVjdGlvbihGbG9hdFNpemUoZGVs
dGFYLCBkZWx0YVkpKSkgewotICAgICAgICAgICAgICAgIGlmIChmYWJzZihkZWx0YVkpID49IGZh
YnNmKGRlbHRhWCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZhYnNmKGRlbHRhWCkgPCBy
dWJiZXJiYW5kTWluaW11bVJlcXVpcmVkRGVsdGFCZWZvcmVTdHJldGNoKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEuc2V0V2lkdGgobV9vdmVyZmxvd1Nj
cm9sbERlbHRhLndpZHRoKCkgKyBkZWx0YVgpOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVs
dGFYID0gMDsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAg
ICAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEuc2V0V2lkdGgobV9vdmVyZmxvd1Njcm9sbERlbHRh
LndpZHRoKCkgKyBkZWx0YVgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBz
aG91bGRTdHJldGNoID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGlmIChkZWx0YVggIT0gMCB8fCBkZWx0YVkgIT0gMCkgewotICAgICAgICBpZiAoIShzaG91
bGRTdHJldGNoIHx8IGlzVmVydGljYWxseVN0cmV0Y2hlZCB8fCBpc0hvcml6b250YWxseVN0cmV0
Y2hlZCkpIHsKLSAgICAgICAgICAgIGlmIChkZWx0YVkgIT0gMCkgewotICAgICAgICAgICAgICAg
IGRlbHRhWSAqPSBzY3JvbGxXaGVlbE11bHRpcGxpZXIoKTsKLSAgICAgICAgICAgICAgICBtX2Ns
aWVudC0+aW1tZWRpYXRlU2Nyb2xsQnkoRmxvYXRTaXplKDAsIGRlbHRhWSkpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWYgKGRlbHRhWCAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgZGVs
dGFYICo9IHNjcm9sbFdoZWVsTXVsdGlwbGllcigpOwotICAgICAgICAgICAgICAgIG1fY2xpZW50
LT5pbW1lZGlhdGVTY3JvbGxCeShGbG9hdFNpemUoZGVsdGFYLCAwKSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIW1fY2xpZW50LT5hbGxvd3NIb3Jp
em9udGFsU3RyZXRjaGluZyh3aGVlbEV2ZW50KSkgewotICAgICAgICAgICAgICAgIGRlbHRhWCA9
IDA7Ci0gICAgICAgICAgICAgICAgZXZlbnRDb2FsZXNjZWREZWx0YVggPSAwOwotICAgICAgICAg
ICAgfSBlbHNlIGlmICgoZGVsdGFYICE9IDApICYmICFpc0hvcml6b250YWxseVN0cmV0Y2hlZCAm
JiAhbV9jbGllbnQtPnBpbm5lZEluRGlyZWN0aW9uKEZsb2F0U2l6ZShkZWx0YVgsIDApKSkgewot
ICAgICAgICAgICAgICAgIGRlbHRhWCAqPSBzY3JvbGxXaGVlbE11bHRpcGxpZXIoKTsKLQotICAg
ICAgICAgICAgICAgIG1fY2xpZW50LT5pbW1lZGlhdGVTY3JvbGxCeVdpdGhvdXRDb250ZW50RWRn
ZUNvbnN0cmFpbnRzKEZsb2F0U2l6ZShkZWx0YVgsIDApKTsKLSAgICAgICAgICAgICAgICBkZWx0
YVggPSAwOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIW1fY2xpZW50LT5hbGxv
d3NWZXJ0aWNhbFN0cmV0Y2hpbmcod2hlZWxFdmVudCkpIHsKLSAgICAgICAgICAgICAgICBkZWx0
YVkgPSAwOwotICAgICAgICAgICAgICAgIGV2ZW50Q29hbGVzY2VkRGVsdGFZID0gMDsKLSAgICAg
ICAgICAgIH0gZWxzZSBpZiAoKGRlbHRhWSAhPSAwKSAmJiAhaXNWZXJ0aWNhbGx5U3RyZXRjaGVk
ICYmICFtX2NsaWVudC0+cGlubmVkSW5EaXJlY3Rpb24oRmxvYXRTaXplKDAsIGRlbHRhWSkpKSB7
Ci0gICAgICAgICAgICAgICAgZGVsdGFZICo9IHNjcm9sbFdoZWVsTXVsdGlwbGllcigpOwotCi0g
ICAgICAgICAgICAgICAgbV9jbGllbnQtPmltbWVkaWF0ZVNjcm9sbEJ5V2l0aG91dENvbnRlbnRF
ZGdlQ29uc3RyYWludHMoRmxvYXRTaXplKDAsIGRlbHRhWSkpOwotICAgICAgICAgICAgICAgIGRl
bHRhWSA9IDA7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEludFNpemUgc3RyZXRjaEFt
b3VudCA9IG1fY2xpZW50LT5zdHJldGNoQW1vdW50KCk7Ci0KLSAgICAgICAgICAgIGlmIChtX21v
bWVudHVtU2Nyb2xsSW5Qcm9ncmVzcykgewotICAgICAgICAgICAgICAgIGlmICgobV9jbGllbnQt
PnBpbm5lZEluRGlyZWN0aW9uKEZsb2F0U2l6ZShldmVudENvYWxlc2NlZERlbHRhWCwgZXZlbnRD
b2FsZXNjZWREZWx0YVkpKSB8fCAoZmFic2YoZXZlbnRDb2FsZXNjZWREZWx0YVgpICsgZmFic2Yo
ZXZlbnRDb2FsZXNjZWREZWx0YVkpIDw9IDApKSAmJiBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVz
dGFtcCkgewotICAgICAgICAgICAgICAgICAgICBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscyA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgICAgIG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzID0gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgICAgIHNuYXBSdWJiZXJCYW5kKCk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5z
ZXRXaWR0aChtX3N0cmV0Y2hTY3JvbGxGb3JjZS53aWR0aCgpICsgZGVsdGFYKTsKLSAgICAgICAg
ICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldEhlaWdodChtX3N0cmV0Y2hTY3JvbGxGb3JjZS5o
ZWlnaHQoKSArIGRlbHRhWSk7Ci0KLSAgICAgICAgICAgIEZsb2F0U2l6ZSBkYW1wZWREZWx0YShj
ZWlsZihlbGFzdGljRGVsdGFGb3JSZWJvdW5kRGVsdGEobV9zdHJldGNoU2Nyb2xsRm9yY2Uud2lk
dGgoKSkpLCBjZWlsZihlbGFzdGljRGVsdGFGb3JSZWJvdW5kRGVsdGEobV9zdHJldGNoU2Nyb2xs
Rm9yY2UuaGVpZ2h0KCkpKSk7Ci0KLSAgICAgICAgICAgIG1fY2xpZW50LT5pbW1lZGlhdGVTY3Jv
bGxCeVdpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKGRhbXBlZERlbHRhIC0gc3RyZXRjaEFt
b3VudCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobV9tb21lbnR1bVNjcm9sbEluUHJv
Z3Jlc3MgJiYgbW9tZW50dW1QaGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUVuZGVkKSB7
Ci0gICAgICAgIG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzID0gZmFsc2U7Ci0gICAgICAgIG1f
aWdub3JlTW9tZW50dW1TY3JvbGxzID0gZmFsc2U7Ci0gICAgICAgIG1fbGFzdE1vbWVudHVtU2Ny
b2xsVGltZXN0YW1wID0gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGlj
IGlubGluZSBmbG9hdCByb3VuZFRvd2FyZFplcm8oZmxvYXQgbnVtKQotewotICAgIHJldHVybiBu
dW0gPiAwID8gY2VpbGYobnVtIC0gMC41ZikgOiBmbG9vcmYobnVtICsgMC41Zik7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgZmxvYXQgcm91bmRUb0RldmljZVBpeGVsVG93YXJkWmVybyhmbG9hdCBudW0p
Ci17Ci0gICAgZmxvYXQgcm91bmRlZE51bSA9IHJvdW5kZihudW0pOwotICAgIGlmIChmYWJzKG51
bSAtIHJvdW5kZWROdW0pIDwgMC4xMjUpCi0gICAgICAgIG51bSA9IHJvdW5kZWROdW07Ci0KLSAg
ICByZXR1cm4gcm91bmRUb3dhcmRaZXJvKG51bSk7Ci19Ci0KLXZvaWQgU2Nyb2xsRWxhc3RpY2l0
eUNvbnRyb2xsZXI6OnNuYXBSdWJiZXJCYW5kVGltZXJGaXJlZCgpCi17Ci0gICAgaWYgKCFtX21v
bWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyB8fCBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscykgewotICAg
ICAgICBDRlRpbWVJbnRlcnZhbCB0aW1lRGVsdGEgPSBbTlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNl
UmVmZXJlbmNlRGF0ZV0gLSBtX3N0YXJ0VGltZTsKLQotICAgICAgICBpZiAobV9zdGFydFN0cmV0
Y2ggPT0gRmxvYXRTaXplKCkpIHsKLSAgICAgICAgICAgIG1fc3RhcnRTdHJldGNoID0gbV9jbGll
bnQtPnN0cmV0Y2hBbW91bnQoKTsKLSAgICAgICAgICAgIGlmIChtX3N0YXJ0U3RyZXRjaCA9PSBG
bG9hdFNpemUoKSkgewotICAgICAgICAgICAgICAgIHN0b3BTbmFwUnViYmVyYmFuZFRpbWVyKCk7
Ci0KLSAgICAgICAgICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZSA9IEZsb2F0U2l6ZSgpOwot
ICAgICAgICAgICAgICAgIG1fc3RhcnRUaW1lID0gMDsKLSAgICAgICAgICAgICAgICBtX3N0YXJ0
U3RyZXRjaCA9IEZsb2F0U2l6ZSgpOwotICAgICAgICAgICAgICAgIG1fb3JpZ09yaWdpbiA9IEZs
b2F0UG9pbnQoKTsKLSAgICAgICAgICAgICAgICBtX29yaWdWZWxvY2l0eSA9IEZsb2F0U2l6ZSgp
OwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
bV9vcmlnT3JpZ2luID0gbV9jbGllbnQtPmFic29sdXRlU2Nyb2xsUG9zaXRpb24oKSAtIG1fc3Rh
cnRTdHJldGNoOwotICAgICAgICAgICAgbV9vcmlnVmVsb2NpdHkgPSBtX21vbWVudHVtVmVsb2Np
dHk7Ci0KLSAgICAgICAgICAgIC8vIEp1c3QgbGlrZSBub3JtYWwgc2Nyb2xsaW5nLCBwcmVmZXIg
dmVydGljYWwgcnViYmVyYmFuZGluZwotICAgICAgICAgICAgaWYgKGZhYnNmKG1fb3JpZ1ZlbG9j
aXR5LmhlaWdodCgpKSA+PSBmYWJzZihtX29yaWdWZWxvY2l0eS53aWR0aCgpKSkKLSAgICAgICAg
ICAgICAgICBtX29yaWdWZWxvY2l0eS5zZXRXaWR0aCgwKTsKLQotICAgICAgICAgICAgLy8gRG9u
J3QgcnViYmVyLWJhbmQgaG9yaXpvbnRhbGx5IGlmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHNjcm9s
bCBob3Jpem9udGFsbHkKLSAgICAgICAgICAgIGlmICghbV9jbGllbnQtPmNhblNjcm9sbEhvcml6
b250YWxseSgpKQotICAgICAgICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5LnNldFdpZHRoKDApOwot
Ci0gICAgICAgICAgICAvLyBEb24ndCBydWJiZXItYmFuZCB2ZXJ0aWNhbGx5IGlmIGl0J3Mgbm90
IHBvc3NpYmxlIHRvIHNjcm9sbCB2ZXJ0aWNhbGx5Ci0gICAgICAgICAgICBpZiAoIW1fY2xpZW50
LT5jYW5TY3JvbGxWZXJ0aWNhbGx5KCkpCi0gICAgICAgICAgICAgICAgbV9vcmlnVmVsb2NpdHku
c2V0SGVpZ2h0KDApOwotICAgICAgICB9Ci0KLSAgICAgICAgRmxvYXRQb2ludCBkZWx0YShyb3Vu
ZFRvRGV2aWNlUGl4ZWxUb3dhcmRaZXJvKGVsYXN0aWNEZWx0YUZvclRpbWVEZWx0YShtX3N0YXJ0
U3RyZXRjaC53aWR0aCgpLCAtbV9vcmlnVmVsb2NpdHkud2lkdGgoKSwgKGZsb2F0KXRpbWVEZWx0
YSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgIHJvdW5kVG9EZXZpY2VQaXhlbFRvd2FyZFpl
cm8oZWxhc3RpY0RlbHRhRm9yVGltZURlbHRhKG1fc3RhcnRTdHJldGNoLmhlaWdodCgpLCAtbV9v
cmlnVmVsb2NpdHkuaGVpZ2h0KCksIChmbG9hdCl0aW1lRGVsdGEpKSk7Ci0KLSAgICAgICAgaWYg
KGZhYnMoZGVsdGEueCgpKSA+PSAxIHx8IGZhYnMoZGVsdGEueSgpKSA+PSAxKSB7Ci0gICAgICAg
ICAgICBtX2NsaWVudC0+aW1tZWRpYXRlU2Nyb2xsQnlXaXRob3V0Q29udGVudEVkZ2VDb25zdHJh
aW50cyhGbG9hdFNpemUoZGVsdGEueCgpLCBkZWx0YS55KCkpIC0gbV9jbGllbnQtPnN0cmV0Y2hB
bW91bnQoKSk7Ci0KLSAgICAgICAgICAgIEZsb2F0U2l6ZSBuZXdTdHJldGNoID0gbV9jbGllbnQt
PnN0cmV0Y2hBbW91bnQoKTsKLQotICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0
V2lkdGgocmVib3VuZERlbHRhRm9yRWxhc3RpY0RlbHRhKG5ld1N0cmV0Y2gud2lkdGgoKSkpOwot
ICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0SGVpZ2h0KHJlYm91bmREZWx0YUZv
ckVsYXN0aWNEZWx0YShuZXdTdHJldGNoLmhlaWdodCgpKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBtX2NsaWVudC0+YWRqdXN0U2Nyb2xsUG9zaXRpb25Ub0JvdW5kc0lmTmVjZXNz
YXJ5KCk7Ci0KLSAgICAgICAgICAgIHN0b3BTbmFwUnViYmVyYmFuZFRpbWVyKCk7Ci0gICAgICAg
ICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZSA9IEZsb2F0U2l6ZSgpOwotICAgICAgICAgICAgbV9z
dGFydFRpbWUgPSAwOwotICAgICAgICAgICAgbV9zdGFydFN0cmV0Y2ggPSBGbG9hdFNpemUoKTsK
LSAgICAgICAgICAgIG1fb3JpZ09yaWdpbiA9IEZsb2F0UG9pbnQoKTsKLSAgICAgICAgICAgIG1f
b3JpZ1ZlbG9jaXR5ID0gRmxvYXRTaXplKCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAg
ICAgICBtX3N0YXJ0VGltZSA9IFtOU0RhdGUgdGltZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRl
XTsKLSAgICAgICAgbV9zdGFydFN0cmV0Y2ggPSBGbG9hdFNpemUoKTsKLSAgICB9Ci19Ci0KLWJv
b2wgU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXI6OmlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSBj
b25zdAotewotICAgIGlmICghbV9pblNjcm9sbEdlc3R1cmUgJiYgIW1fbW9tZW50dW1TY3JvbGxJ
blByb2dyZXNzICYmICFtX3NuYXBSdWJiZXJiYW5kVGltZXJJc0FjdGl2ZSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuICFtX2NsaWVudC0+c3RyZXRjaEFtb3VudCgpLmlzWmVy
bygpOwotfQotCi12b2lkIFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyOjpzdG9wU25hcFJ1YmJl
cmJhbmRUaW1lcigpCi17Ci0gICAgbV9jbGllbnQtPnN0b3BTbmFwUnViYmVyYmFuZFRpbWVyKCk7
Ci0gICAgbV9zbmFwUnViYmVyYmFuZFRpbWVySXNBY3RpdmUgPSBmYWxzZTsKLX0KLQotdm9pZCBT
Y3JvbGxFbGFzdGljaXR5Q29udHJvbGxlcjo6c25hcFJ1YmJlckJhbmQoKQotewotICAgIENGVGlt
ZUludGVydmFsIHRpbWVEZWx0YSA9IHN5c3RlbVVwdGltZSgpIC0gbV9sYXN0TW9tZW50dW1TY3Jv
bGxUaW1lc3RhbXA7Ci0gICAgaWYgKG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wICYmIHRp
bWVEZWx0YSA+PSBzY3JvbGxWZWxvY2l0eVplcm9pbmdUaW1lb3V0KQotICAgICAgICBtX21vbWVu
dHVtVmVsb2NpdHkgPSBGbG9hdFNpemUoKTsKLQotICAgIG1faW5TY3JvbGxHZXN0dXJlID0gZmFs
c2U7Ci0KLSAgICBpZiAobV9zbmFwUnViYmVyYmFuZFRpbWVySXNBY3RpdmUpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fc3RhcnRUaW1lID0gW05TRGF0ZSB0aW1lSW50ZXJ2YWxTaW5jZVJlZmVy
ZW5jZURhdGVdOwotICAgIG1fc3RhcnRTdHJldGNoID0gRmxvYXRTaXplKCk7Ci0gICAgbV9vcmln
T3JpZ2luID0gRmxvYXRQb2ludCgpOwotICAgIG1fb3JpZ1ZlbG9jaXR5ID0gRmxvYXRTaXplKCk7
Ci0KLSAgICBtX2NsaWVudC0+c3RhcnRTbmFwUnViYmVyYmFuZFRpbWVyKCk7Ci0gICAgbV9zbmFw
UnViYmVyYmFuZFRpbWVySXNBY3RpdmUgPSB0cnVlOwotfQotCi1ib29sIFNjcm9sbEVsYXN0aWNp
dHlDb250cm9sbGVyOjpzaG91bGRSdWJiZXJCYW5kSW5Ib3Jpem9udGFsRGlyZWN0aW9uKGNvbnN0
IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKLXsKLSAgICBpZiAod2hlZWxFdmVudC5k
ZWx0YVgoKSA+IDApCi0gICAgICAgIHJldHVybiBtX2NsaWVudC0+c2hvdWxkUnViYmVyQmFuZElu
RGlyZWN0aW9uKFNjcm9sbExlZnQpOwotICAgIGlmICh3aGVlbEV2ZW50LmRlbHRhWCgpIDwgMCkK
LSAgICAgICAgcmV0dXJuIG1fY2xpZW50LT5zaG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rpb24oU2Ny
b2xsUmlnaHQpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIEVOQUJMRShSVUJCRVJfQkFORElORykK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246982</attachid>
            <date>2015-02-20 11:41:26 -0800</date>
            <delta_ts>2015-02-20 11:49:10 -0800</delta_ts>
            <desc>Patch v2 (clean up style warnings)</desc>
            <filename>bug-141842-20150220114118.patch</filename>
            <type>text/plain</type>
            <size>70151</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MDQzMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBACisyMDE1LTAyLTIwICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZSBTY3JvbGxFbGFz
dGljaXR5Q29udHJvbGxlciB0byBTY3JvbGxDb250cm9sbGVyCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE4NDIKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBjaGFuZ2UgaW4gZnVuY3Rpb25hbGl0eS4K
KworICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFdlYkNvcmUub3JkZXI6
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IHBhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjLmg6
CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGlu
Z05vZGVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxp
bmdOb2RlTWFjOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6OmhhbmRsZVdoZWVs
RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9k
ZU1hYzo6c3RhcnRTbmFwUnViYmVyYmFuZFRpbWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMv
U2Nyb2xsQW5pbWF0b3JNYWMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0
b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6U2Nyb2xsQW5p
bWF0b3JNYWMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OmlzUnViYmVy
QmFuZEluUHJvZ3Jlc3MpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6Omhh
bmRsZVdoZWVsRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OnNu
YXBSdWJiZXJCYW5kVGltZXJGaXJlZCk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1Njcm9sbENv
bnRyb2xsZXIuaDogQ29waWVkIGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsRWxhc3Rp
Y2l0eUNvbnRyb2xsZXIuaC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXJDbGll
bnQ6On5TY3JvbGxDb250cm9sbGVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEVs
YXN0aWNpdHlDb250cm9sbGVyQ2xpZW50Ojp+U2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXJDbGll
bnQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxDb250cm9sbGVyLm1t
OiBDb3BpZWQgZnJvbSBXZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxFbGFzdGljaXR5Q29udHJv
bGxlci5tbS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6OlNjcm9sbENvbnRy
b2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6aGFuZGxlV2hlZWxF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjpzbmFwUnViYmVyQmFu
ZFRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6aXNSdWJi
ZXJCYW5kSW5Qcm9ncmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjpz
dG9wU25hcFJ1YmJlcmJhbmRUaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9s
bGVyOjpzbmFwUnViYmVyQmFuZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVy
OjpzaG91bGRSdWJiZXJCYW5kSW5Ib3Jpem9udGFsRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyOjpTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxl
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxl
cjo6aGFuZGxlV2hlZWxFdmVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxF
bGFzdGljaXR5Q29udHJvbGxlcjo6c25hcFJ1YmJlckJhbmRUaW1lckZpcmVkKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyOjppc1J1YmJlckJh
bmRJblByb2dyZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEVsYXN0aWNp
dHlDb250cm9sbGVyOjpzdG9wU25hcFJ1YmJlcmJhbmRUaW1lcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlcjo6c25hcFJ1YmJlckJhbmQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXI6OnNo
b3VsZFJ1YmJlckJhbmRJbkhvcml6b250YWxEaXJlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL21hYy9TY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5oOiBSZW1vdmVkLgorICAg
ICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5tbTogUmVtb3Zl
ZC4KKwogMjAxNS0wMi0yMCAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbTWFjXSBSRUdSRVNTSU9OOiBTY3JvbGwgc25hcCBwb2ludHMgYnJva2VuIGFmdGVy
IHIxODAwMTgKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCShyZXZpc2lvbiAxODA0MjAp
CisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAt
MTI2LDcgKzEyNiw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3Jt
L21hYy9QdXJnZWFibGVCdWZmZXJNYWMuY3BwCiAgICAgcGxhdGZvcm0vbWFjL1NTTEtleUdlbmVy
YXRvck1hYy5jcHAKICAgICBwbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0KLSAgICBw
bGF0Zm9ybS9tYWMvU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIubW0KKyAgICBwbGF0Zm9ybS9t
YWMvU2Nyb2xsQ29udHJvbGxlci5tbQogICAgIHBsYXRmb3JtL21hYy9TY3JvbGxWaWV3TWFjLm1t
CiAgICAgcGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLm1tCiAgICAgcGxhdGZvcm0vbWFj
L1NlcmlhbGl6ZWRQbGF0Zm9ybVJlcHJlc2VudGF0aW9uTWFjLm1tCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLm9yZGVyCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
b3JkZXIJKHJldmlzaW9uIDE4MDQyMCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUub3JkZXIJ
KHdvcmtpbmcgY29weSkKQEAgLTIwMDcsNyArMjAwNyw3IEBAIF9fWk43V2ViQ29yZTE0U2Nyb2xs
YWJsZUFyZWExNWRpZEFkZFNjcm8KIF9fWk43V2ViQ29yZTE0U2Nyb2xsQW5pbWF0b3I2Y3JlYXRl
RVBOU18xNFNjcm9sbGFibGVBcmVhRQogX19aTjdXZWJDb3JlMTdTY3JvbGxBbmltYXRvck1hY0My
RVBOU18xNFNjcm9sbGFibGVBcmVhRQogX19aTjdXZWJDb3JlMTRTY3JvbGxBbmltYXRvckMyRVBO
U18xNFNjcm9sbGFibGVBcmVhRQotX19aTjdXZWJDb3JlMjZTY3JvbGxFbGFzdGljaXR5Q29udHJv
bGxlckMxRVBOU18zMlNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyQ2xpZW50RQorX19aTjdXZWJD
b3JlMjZTY3JvbGxDb250cm9sbGVyQzFFUE5TXzMyU2Nyb2xsQ29udHJvbGxlckNsaWVudEUKIC1b
V2ViU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUgaW5pdFdpdGhTY3JvbGxBbmltYXRvcjpd
CiAtW1dlYlNjcm9sbGJhclBhaW50ZXJDb250cm9sbGVyRGVsZWdhdGUgaW5pdFdpdGhTY3JvbGxh
YmxlQXJlYTpdCiBfX1pON1dlYkNvcmUxN1Njcm9sbEFuaW1hdG9yTWFjMjNkaWRBZGRWZXJ0aWNh
bFNjcm9sbGJhckVQTlNfOVNjcm9sbGJhckUKQEAgLTIzMzMsNyArMjMzMyw3IEBAIF9fWk43V2Vi
Q29yZTlGcmFtZVZpZXcxNHNjcm9sbFRvQW5jaG9yRXYKIF9fWk43V2ViQ29yZTlGcmFtZVZpZXcy
M3NlbmRSZXNpemVFdmVudElmTmVlZGVkRXYKIF9fWk43V2ViQ29yZTEwU2Nyb2xsVmlldzI2aW52
YWxpZGF0ZVNjcm9sbENvcm5lclJlY3RFUktOU183SW50UmVjdEUKIF9fWk5LN1dlYkNvcmUxN1Nj
cm9sbEFuaW1hdG9yTWFjMjJpc1J1YmJlckJhbmRJblByb2dyZXNzRXYKLV9fWk5LN1dlYkNvcmUy
NlNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyMjJpc1J1YmJlckJhbmRJblByb2dyZXNzRXYKK19f
Wk5LN1dlYkNvcmUyNlNjcm9sbENvbnRyb2xsZXIyMmlzUnViYmVyQmFuZEluUHJvZ3Jlc3NFdgog
X19aTjdXZWJDb3JlMTBTY3JvbGxWaWV3MTl1cGRhdGVPdmVyaGFuZ0FyZWFzRXYKIF9fWk43V2Vi
Q29yZTEwU2Nyb2xsVmlldzMzY2FsY3VsYXRlT3ZlcmhhbmdBcmVhc0ZvclBhaW50aW5nRVJOU183
SW50UmVjdEVTMl8KIF9fWk5LN1dlYkNvcmU2Q2hyb21lMTljb250ZW50c1NpemVDaGFuZ2VkRVBO
U181RnJhbWVFUktOU183SW50U2l6ZUUKQEAgLTEyNjY1LDcgKzEyNjY1LDcgQEAgX19aTks3V2Vi
Q29yZTEwU2Nyb2xsVmlldzE4Y29udGVudHNUb1JvbwogX19aTks3V2ViQ29yZTZXaWRnZXQxN2Nv
bnZlcnRUb1Jvb3RWaWV3RVJLTlNfN0ludFJlY3RFCiBfX1pON1dlYkNvcmUxMVJlbmRlckltYWdl
MTFub2RlQXRQb2ludEVSS05TXzE0SGl0VGVzdFJlcXVlc3RFUk5TXzEzSGl0VGVzdFJlc3VsdEVS
S05TXzE1SGl0VGVzdExvY2F0aW9uRVJLTlNfMTFMYXlvdXRQb2ludEVOU18xM0hpdFRlc3RBY3Rp
b25FCiBfX1pON1dlYkNvcmUxM1Njcm9sbGluZ1RyZWUyMnVwZGF0ZUJhY2tGb3J3YXJkU3RhdGVF
YmIKLV9fWk43V2ViQ29yZTI2U2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIxNmhhbmRsZVdoZWVs
RXZlbnRFUktOU18xOFBsYXRmb3JtV2hlZWxFdmVudEUKK19fWk43V2ViQ29yZTI2U2Nyb2xsQ29u
dHJvbGxlcjE2aGFuZGxlV2hlZWxFdmVudEVSS05TXzE4UGxhdGZvcm1XaGVlbEV2ZW50RQogX19a
VGhuMTEyX043V2ViQ29yZTI5U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMxN3Bpbm5lZElu
RGlyZWN0aW9uRVJLTlNfOUZsb2F0U2l6ZUUKIF9fWk43V2ViQ29yZTI5U2Nyb2xsaW5nVHJlZVNj
cm9sbGluZ05vZGVNYWMxN3Bpbm5lZEluRGlyZWN0aW9uRVJLTlNfOUZsb2F0U2l6ZUUKIF9fWlRo
bjExMl9ON1dlYkNvcmUyOVNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjMjdzaG91bGRSdWJi
ZXJCYW5kSW5EaXJlY3Rpb25FTlNfMTVTY3JvbGxEaXJlY3Rpb25FCkBAIC0xMjczOCwxMSArMTI3
MzgsMTEgQEAgX19aTjdXZWJDb3JlNVRpbWVySU5TXzEyRXZlbnRIYW5kbGVyRUU1ZgogX19aTjdX
ZWJDb3JlMTJFdmVudEhhbmRsZXIyOGZha2VNb3VzZU1vdmVFdmVudFRpbWVyRmlyZWRFUE5TXzVU
aW1lcklTMF9FRQogX19aTjdXZWJDb3JlMjFQbGF0Zm9ybUtleWJvYXJkRXZlbnQyM2dldEN1cnJl
bnRNb2RpZmllclN0YXRlRVJiUzFfUzFfUzFfCiBfX1pON1dlYkNvcmU5U2Nyb2xsYmFyMTl1cGRh
dGVUaHVtYlBvc2l0aW9uRXYKLV9fWk43V2ViQ29yZTI2U2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xs
ZXIxNHNuYXBSdWJiZXJCYW5kRXYKK19fWk43V2ViQ29yZTI2U2Nyb2xsQ29udHJvbGxlcjE0c25h
cFJ1YmJlckJhbmRFdgogX19aVGhuMTEyX043V2ViQ29yZTI5U2Nyb2xsaW5nVHJlZVNjcm9sbGlu
Z05vZGVNYWMyNHN0YXJ0U25hcFJ1YmJlcmJhbmRUaW1lckV2CiBfX1pON1dlYkNvcmUyOVNjcm9s
bGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjMjRzdGFydFNuYXBSdWJiZXJiYW5kVGltZXJFdgogX19f
X1pON1dlYkNvcmUyOVNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjMjRzdGFydFNuYXBSdWJi
ZXJiYW5kVGltZXJFdl9ibG9ja19pbnZva2UKLV9fWk43V2ViQ29yZTI2U2Nyb2xsRWxhc3RpY2l0
eUNvbnRyb2xsZXIyNHNuYXBSdWJiZXJCYW5kVGltZXJGaXJlZEV2CitfX1pON1dlYkNvcmUyNlNj
cm9sbENvbnRyb2xsZXIyNHNuYXBSdWJiZXJCYW5kVGltZXJGaXJlZEV2CiBfX1pUaG4xMTJfTjdX
ZWJDb3JlMjlTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzIyYWJzb2x1dGVTY3JvbGxQb3Np
dGlvbkV2CiBfX1pUaG4xMTJfTjdXZWJDb3JlMjlTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1h
YzIxY2FuU2Nyb2xsSG9yaXpvbnRhbGx5RXYKIF9fWlRobjExMl9ON1dlYkNvcmUyOVNjcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlTWFjMTljYW5TY3JvbGxWZXJ0aWNhbGx5RXYKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDE4MDQyMCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzg2LDggKzc4Niw4IEBACiAJCTFBOTI3RkQzMTQx
NkExNUIwMDNBODNDOCAvKiBucHJ1bnRpbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBOTI3RkQwMTQxNkExNUIwMDNBODNDOCAvKiBucHJ1bnRpbWUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxQTky
N0ZENDE0MTZBMTVCMDAzQTgzQzggLyogbnB0eXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5MjdGRDExNDE2QTE1QjAwM0E4M0M4IC8qIG5wdHlw
ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkx
QTk4OTU2QjBBQTc4RjgwMDA1RUY1RUYgLyogVVJMQ0YuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5ODk1NkEwQUE3OEY4MDAwNUVGNUVGIC8qIFVS
TENGLmNwcCAqLzsgfTsKLQkJMUFBODRGMDQxNDNCQTdCRDAwNTFEMTUzIC8qIFNjcm9sbEVsYXN0
aWNpdHlDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUFBODRGMDIxNDNCQTdCRDAwNTFEMTUzIC8qIFNjcm9sbEVsYXN0aWNpdHlDb250
cm9sbGVyLm1tICovOyB9OwotCQkxQUE4NEYwNTE0M0JBN0JEMDA1MUQxNTMgLyogU2Nyb2xsRWxh
c3RpY2l0eUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFBQTg0RjAzMTQzQkE3QkQwMDUxRDE1MyAvKiBTY3JvbGxFbGFzdGljaXR5Q29u
dHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTFBQTg0RjA0MTQzQkE3QkQwMDUxRDE1MyAvKiBTY3JvbGxDb250cm9sbGVyLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBODRGMDIxNDNCQTdC
RDAwNTFEMTUzIC8qIFNjcm9sbENvbnRyb2xsZXIubW0gKi87IH07CisJCTFBQTg0RjA1MTQzQkE3
QkQwMDUxRDE1MyAvKiBTY3JvbGxDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUE4NEYwMzE0M0JBN0JEMDA1MUQxNTMgLyogU2Nyb2xs
Q29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTFBQTg3OTkwMTFDQkU4NDYwMDNDNjY0RiAvKiBQbHVnaW5TdHJhdGVneS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBODc5OEYxMUNCRTg0
NjAwM0M2NjRGIC8qIFBsdWdpblN0cmF0ZWd5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUFBQUREQTMxNERCNDA5RjAwQUY2NEIzIC8qIFNjcm9s
bGluZ1RyZWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUFBQUREQTExNERCNDA5RjAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWUuY3BwICovOyB9Owog
CQkxQUFBRERBNDE0REI0MDlGMDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBQUREQTIxNERCNDA5RjAwQUY2
NEIzIC8qIFNjcm9sbGluZ1RyZWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtNzc5NSw4ICs3Nzk1LDggQEAKIAkJMUE5MjdGRDAxNDE2QTE1QjAw
M0E4M0M4IC8qIG5wcnVudGltZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBu
cHJ1bnRpbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE5MjdGRDExNDE2QTE1
QjAwM0E4M0M4IC8qIG5wdHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
bnB0eXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTk4OTU2QTBBQTc4Rjgw
MDA1RUY1RUYgLyogVVJMQ0YuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFVSTENGLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFBODRGMDIxNDNC
QTdCRDAwNTFEMTUzIC8qIFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBQTg0RjAzMTQzQkE3QkQwMDUxRDE1
MyAvKiBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkxQUE4NEYwMjE0M0JBN0JEMDA1MUQxNTMgLyogU2Nyb2xsQ29udHJvbGxl
ci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNjcm9sbENvbnRy
b2xsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBQTg0RjAzMTQzQkE3QkQw
MDUxRDE1MyAvKiBTY3JvbGxDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNjcm9sbENvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUFBODc5OEYxMUNCRTg0NjAwM0M2NjRGIC8qIFBsdWdpblN0cmF0ZWd5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsdWdpblN0cmF0ZWd5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTFBQUFEREExMTREQjQwOUYwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbGluZ1RyZWUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUFBRERBMjE0REI0MDlGMDBBRjY0QjMg
LyogU2Nyb2xsaW5nVHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3Jv
bGxpbmdUcmVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjU1MSw4ICsxNjU1
MSw4IEBACiAJCQkJQkM1MTE1NkQxMkIxNzQ5QzAwQzk2NzU0IC8qIFNjcm9sbEFuaW1hdG9yTWFj
Lm1tICovLAogCQkJCUJDOEI4NTNDMEU3QzdGMTEwMEFCNjk4NCAvKiBTY3JvbGxiYXJUaGVtZU1h
Yy5oICovLAogCQkJCUJDRUY4NjlFMEU4NDRFOUQwMEE4NUNENSAvKiBTY3JvbGxiYXJUaGVtZU1h
Yy5tbSAqLywKLQkJCQkxQUE4NEYwMzE0M0JBN0JEMDA1MUQxNTMgLyogU2Nyb2xsRWxhc3RpY2l0
eUNvbnRyb2xsZXIuaCAqLywKLQkJCQkxQUE4NEYwMjE0M0JBN0JEMDA1MUQxNTMgLyogU2Nyb2xs
RWxhc3RpY2l0eUNvbnRyb2xsZXIubW0gKi8sCisJCQkJMUFBODRGMDMxNDNCQTdCRDAwNTFEMTUz
IC8qIFNjcm9sbENvbnRyb2xsZXIuaCAqLywKKwkJCQkxQUE4NEYwMjE0M0JBN0JEMDA1MUQxNTMg
LyogU2Nyb2xsQ29udHJvbGxlci5tbSAqLywKIAkJCQk5MzUzNjc2QTA5QUVEODhCMDBEMzVDRDYg
LyogU2Nyb2xsVmlld01hYy5tbSAqLywKIAkJCQkwNzdBRjE0MTE4RjRCMUJCMDAwMUVENjEgLyog
U2VyaWFsaXplZFBsYXRmb3JtUmVwcmVzZW50YXRpb25NYWMuaCAqLywKIAkJCQkwNzdBRjE0MjE4
RjRCMUJCMDAwMUVENjEgLyogU2VyaWFsaXplZFBsYXRmb3JtUmVwcmVzZW50YXRpb25NYWMubW0g
Ki8sCkBAIC0yNjA0OCw3ICsyNjA0OCw3IEBACiAJCQkJQkM4Qjg1M0UwRTdDN0YxMTAwQUI2OTg0
IC8qIFNjcm9sbGJhclRoZW1lTWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU3MTQwNjE0MjE3
MEI4MDBEQjMzQkEgLyogU2Nyb2xsYmFyVGhlbWVNb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
RDkyNUI2ODBGNjRENEREMDBCODQ3RjAgLyogU2Nyb2xsQmVoYXZpb3IuaCBpbiBIZWFkZXJzICov
LAotCQkJCTFBQTg0RjA1MTQzQkE3QkQwMDUxRDE1MyAvKiBTY3JvbGxFbGFzdGljaXR5Q29udHJv
bGxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUFBODRGMDUxNDNCQTdCRDAwNTFEMTUzIC8qIFNj
cm9sbENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjA1QUVEMTVGOTQ4NDgwMDRE
RjBDMCAvKiBTY3JvbGxpbmdDb25zdHJhaW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFGNjJF
RTgxNERBMjJBNzAwNDE1NTZDIC8qIFNjcm9sbGluZ0Nvb3JkaW5hdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkM0RTQwRDE4N0Y4MkUxMDA0NTg4MkMgLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3JJ
T1MuaCBpbiBIZWFkZXJzICovLApAQCAtMjk0NTAsNyArMjk0NTAsNyBAQAogCQkJCUJDRUY4NjlG
MEU4NDRFOUQwMEE4NUNENSAvKiBTY3JvbGxiYXJUaGVtZU1hYy5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTBGRTcxNDA1MTQyMTcwQjgwMERCMzNCQSAvKiBTY3JvbGxiYXJUaGVtZU1vY2suY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNUQ5MjVCNjcwRjY0RDRERDAwQjg0N0YwIC8qIFNjcm9sbEJlaGF2
aW9yLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTFBQTg0RjA0MTQzQkE3QkQwMDUxRDE1MyAvKiBT
Y3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovLAorCQkJCTFBQTg0RjA0
MTQzQkE3QkQwMDUxRDE1MyAvKiBTY3JvbGxDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY2MDVBRUMxNUY5NDg0ODAwNERGMEMwIC8qIFNjcm9sbGluZ0NvbnN0cmFpbnRzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTFBRjYyRUU3MTREQTIyQTcwMDQxNTU2QyAvKiBTY3JvbGxpbmdD
b29yZGluYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkM0RTQwRTE4N0Y4MkUxMDA0NTg4
MkMgLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3JJT1MubW0gaW4gU291cmNlcyAqLywKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxp
bmdOb2RlTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
bWFjL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMuaAkocmV2aXNpb24gMTgwNDIw
KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVGcmFt
ZVNjcm9sbGluZ05vZGVNYWMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogCiAj
aWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykgJiYgUExBVEZPUk0oTUFDKQogCi0jaW5jbHVkZSAi
U2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJTY3JvbGxDb250cm9sbGVy
LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVNYWMuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdU
cmVlRnJhbWVTY3JvbGxpbmdOb2RlLmgiCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgpAQCAt
MzcsNyArMzcsNyBAQCBPQkpDX0NMQVNTIENBTGF5ZXI7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotY2xhc3MgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYyA6IHB1YmxpYyBTY3Jv
bGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlLCBwcml2YXRlIFNjcm9sbEVsYXN0aWNpdHlDb250
cm9sbGVyQ2xpZW50IHsKK2NsYXNzIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMg
OiBwdWJsaWMgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZSwgcHJpdmF0ZSBTY3JvbGxD
b250cm9sbGVyQ2xpZW50IHsKIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUGFz
c1JlZlB0cjxTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlPiBjcmVhdGUoU2Nyb2xsaW5n
VHJlZSYsIFNjcm9sbGluZ05vZGVJRCk7CiAgICAgdmlydHVhbCB+U2Nyb2xsaW5nVHJlZUZyYW1l
U2Nyb2xsaW5nTm9kZU1hYygpOwpAQCAtNTAsNyArNTAsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVBZnRlckNoaWxkcmVuKGNvbnN0IFNjcm9sbGluZ1N0YXRlTm9kZSYpIG92
ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3Jt
V2hlZWxFdmVudCYpIG92ZXJyaWRlOwogCi0gICAgLy8gU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xs
ZXIgbWVtYmVyIGZ1bmN0aW9ucy4KKyAgICAvLyBTY3JvbGxDb250cm9sbGVyIG1lbWJlciBmdW5j
dGlvbnMuCiAgICAgdmlydHVhbCBib29sIGFsbG93c0hvcml6b250YWxTdHJldGNoaW5nKGNvbnN0
IFBsYXRmb3JtV2hlZWxFdmVudCYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NW
ZXJ0aWNhbFN0cmV0Y2hpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jikgb3ZlcnJpZGU7CiAg
ICAgdmlydHVhbCBJbnRTaXplIHN0cmV0Y2hBbW91bnQoKSBvdmVycmlkZTsKQEAgLTgyLDcgKzgy
LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgbG9nRXhwb3NlZFVuZmlsbGVkQXJlYSgpOwogCi0g
ICAgU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIgbV9zY3JvbGxFbGFzdGljaXR5Q29udHJvbGxl
cjsKKyAgICBTY3JvbGxDb250cm9sbGVyIG1fc2Nyb2xsQ29udHJvbGxlcjsKICAgICBSZXRhaW5Q
dHI8Q0ZSdW5Mb29wVGltZXJSZWY+IG1fc25hcFJ1YmJlcmJhbmRUaW1lcjsKIAogICAgIFJldGFp
blB0cjxDQUxheWVyPiBtX3Njcm9sbExheWVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVG
cmFtZVNjcm9sbGluZ05vZGVNYWMubW0JKHJldmlzaW9uIDE4MDQyMCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIFBhc3NSZWZQdHI8U2Nyb2xsaW5n
VHJlZUZyYW1lU2Nyb2xsaW5nTm8KIAogU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1h
Yzo6U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYyhTY3JvbGxpbmdUcmVlJiBzY3Jv
bGxpbmdUcmVlLCBTY3JvbGxpbmdOb2RlSUQgbm9kZUlEKQogICAgIDogU2Nyb2xsaW5nVHJlZUZy
YW1lU2Nyb2xsaW5nTm9kZShzY3JvbGxpbmdUcmVlLCBub2RlSUQpCi0gICAgLCBtX3Njcm9sbEVs
YXN0aWNpdHlDb250cm9sbGVyKHRoaXMpCisgICAgLCBtX3Njcm9sbENvbnRyb2xsZXIodGhpcykK
ICAgICAsIG1fdmVydGljYWxTY3JvbGxiYXJQYWludGVyKDApCiAgICAgLCBtX2hvcml6b250YWxT
Y3JvbGxiYXJQYWludGVyKDApCiAgICAgLCBtX2xhc3RTY3JvbGxIYWRVbmZpbGxlZFBpeGVscyhm
YWxzZSkKQEAgLTE1Myw3ICsxNTMsNyBAQCB2b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGlu
Z05vZGVNYWM6CiAgICAgICAgIFttX2hvcml6b250YWxTY3JvbGxiYXJQYWludGVyIHNldFVzZVBy
ZXNlbnRhdGlvblZhbHVlOk5PXTsKICAgICB9CiAKLSAgICBtX3Njcm9sbEVsYXN0aWNpdHlDb250
cm9sbGVyLmhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVudCk7CisgICAgbV9zY3JvbGxDb250cm9s
bGVyLmhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVudCk7CiAgICAgc2Nyb2xsaW5nVHJlZSgpLnNl
dE9yQ2xlYXJMYXRjaGVkTm9kZSh3aGVlbEV2ZW50LCBzY3JvbGxpbmdOb2RlSUQoKSk7CiAgICAg
c2Nyb2xsaW5nVHJlZSgpLmhhbmRsZVdoZWVsRXZlbnRQaGFzZSh3aGVlbEV2ZW50LnBoYXNlKCkp
OwogfQpAQCAtMzAzLDcgKzMwMyw3IEBAIHZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5n
Tm9kZU1hYzoKICAgICBDRlRpbWVJbnRlcnZhbCB0aW1lckludGVydmFsID0gMS4wIC8gNjAuMDsK
IAogICAgIG1fc25hcFJ1YmJlcmJhbmRUaW1lciA9IGFkb3B0Q0YoQ0ZSdW5Mb29wVGltZXJDcmVh
dGVXaXRoSGFuZGxlcihrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBDRkFic29sdXRlVGltZUdldEN1cnJl
bnQoKSArIHRpbWVySW50ZXJ2YWwsIHRpbWVySW50ZXJ2YWwsIDAsIDAsIF4oQ0ZSdW5Mb29wVGlt
ZXJSZWYpIHsKLSAgICAgICAgbV9zY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5zbmFwUnViYmVy
QmFuZFRpbWVyRmlyZWQoKTsKKyAgICAgICAgbV9zY3JvbGxDb250cm9sbGVyLnNuYXBSdWJiZXJC
YW5kVGltZXJGaXJlZCgpOwogICAgIH0pKTsKICAgICBDRlJ1bkxvb3BBZGRUaW1lcihDRlJ1bkxv
b3BHZXRDdXJyZW50KCksIG1fc25hcFJ1YmJlcmJhbmRUaW1lci5nZXQoKSwga0NGUnVuTG9vcERl
ZmF1bHRNb2RlKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxB
bmltYXRvck1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9T
Y3JvbGxBbmltYXRvck1hYy5oCShyZXZpc2lvbiAxODA0MjApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDE0LTIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUg
IkZsb2F0U2l6ZS5oIgogI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCi0jaW5jbHVkZSAiU2Ny
b2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJTY3JvbGxDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKQEAgLTQz
LDE0ICs0MywxNCBAQCBPQkpDX0NMQVNTIFdlYlNjcm9sbGJhclBhaW50ZXJEZWxlZ2F0ZTsKIHR5
cGVkZWYgaWQgU2Nyb2xsYmFyUGFpbnRlckNvbnRyb2xsZXI7CiAKICNpZiAhRU5BQkxFKFJVQkJF
Ul9CQU5ESU5HKQotY2xhc3MgU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXJDbGllbnQgeyB9Owor
Y2xhc3MgU2Nyb2xsQ29udHJvbGxlckNsaWVudCB7IH07CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBTY3JvbGxiYXI7CiAKLWNsYXNzIFNjcm9sbEFuaW1hdG9yTWFjIDog
cHVibGljIFNjcm9sbEFuaW1hdG9yLCBwcml2YXRlIFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVy
Q2xpZW50IHsKK2NsYXNzIFNjcm9sbEFuaW1hdG9yTWFjIDogcHVibGljIFNjcm9sbEFuaW1hdG9y
LCBwcml2YXRlIFNjcm9sbENvbnRyb2xsZXJDbGllbnQgewogCiBwdWJsaWM6CiAgICAgU2Nyb2xs
QW5pbWF0b3JNYWMoU2Nyb2xsYWJsZUFyZWEqKTsKQEAgLTEzOSw3ICsxMzksNyBAQCBwcml2YXRl
OgogICAgIHZpcnR1YWwgYm9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3Qgb3ZlcnJp
ZGU7CiAKICNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0gICAgLy8vIFNjcm9sbEVsYXN0aWNp
dHlDb250cm9sbGVyQ2xpZW50IG1lbWJlciBmdW5jdGlvbnMuCisgICAgLy8vIFNjcm9sbENvbnRy
b2xsZXJDbGllbnQgbWVtYmVyIGZ1bmN0aW9ucy4KICAgICB2aXJ0dWFsIEludFNpemUgc3RyZXRj
aEFtb3VudCgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NIb3Jpem9udGFsU3Ry
ZXRjaGluZyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFs
IGJvb2wgYWxsb3dzVmVydGljYWxTdHJldGNoaW5nKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYp
IG92ZXJyaWRlOwpAQCAtMTU5LDcgKzE1OSw3IEBAIHByaXZhdGU6CiAKICAgICBib29sIGlzQWxy
ZWFkeVBpbm5lZEluRGlyZWN0aW9uT2ZHZXN0dXJlKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYs
IFNjcm9sbEV2ZW50QXhpcyk7CiAKLSAgICBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlciBtX3Nj
cm9sbEVsYXN0aWNpdHlDb250cm9sbGVyOworICAgIFNjcm9sbENvbnRyb2xsZXIgbV9zY3JvbGxD
b250cm9sbGVyOwogICAgIFRpbWVyIG1fc25hcFJ1YmJlckJhbmRUaW1lcjsKICNlbmRpZgogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFj
Lm1tCShyZXZpc2lvbiAxODA0MjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Ny
b2xsQW5pbWF0b3JNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTY0NCw3ICs2NDQsNyBAQCBTY3Jv
bGxBbmltYXRvck1hYzo6U2Nyb2xsQW5pbWF0b3JNYWMoU2NyCiAgICAgLCBtX2luaXRpYWxTY3Jv
bGxiYXJQYWludFRpbWVyKCp0aGlzLCAmU2Nyb2xsQW5pbWF0b3JNYWM6OmluaXRpYWxTY3JvbGxi
YXJQYWludFRpbWVyRmlyZWQpCiAgICAgLCBtX3NlbmRDb250ZW50QXJlYVNjcm9sbGVkVGltZXIo
KnRoaXMsICZTY3JvbGxBbmltYXRvck1hYzo6c2VuZENvbnRlbnRBcmVhU2Nyb2xsZWRUaW1lckZp
cmVkKQogI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKLSAgICAsIG1fc2Nyb2xsRWxhc3RpY2l0
eUNvbnRyb2xsZXIodGhpcykKKyAgICAsIG1fc2Nyb2xsQ29udHJvbGxlcih0aGlzKQogICAgICwg
bV9zbmFwUnViYmVyQmFuZFRpbWVyKCp0aGlzLCAmU2Nyb2xsQW5pbWF0b3JNYWM6OnNuYXBSdWJi
ZXJCYW5kVGltZXJGaXJlZCkKICNlbmRpZgogICAgICwgbV9oYXZlU2Nyb2xsZWRTaW5jZVBhZ2VM
b2FkKGZhbHNlKQpAQCAtNzcwLDcgKzc3MCw3IEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6Omlz
UnViYmVyQmFuZEluUHIKICNpZiAhRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQogICAgIHJldHVybiBm
YWxzZTsKICNlbHNlCi0gICAgcmV0dXJuIG1fc2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIuaXNS
dWJiZXJCYW5kSW5Qcm9ncmVzcygpOworICAgIHJldHVybiBtX3Njcm9sbENvbnRyb2xsZXIuaXNS
dWJiZXJCYW5kSW5Qcm9ncmVzcygpOwogI2VuZGlmCiB9CiAKQEAgLTEwOTgsNyArMTA5OCw3IEBA
IGJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OmhhbmRsZVdoZWVsRXZlbnQKICAgICAgICAgICAgIHJl
dHVybiBTY3JvbGxBbmltYXRvcjo6aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKICAgICB9
CiAKLSAgICBib29sIGRpZEhhbmRsZUV2ZW50ID0gbV9zY3JvbGxFbGFzdGljaXR5Q29udHJvbGxl
ci5oYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOworICAgIGJvb2wgZGlkSGFuZGxlRXZlbnQg
PSBtX3Njcm9sbENvbnRyb2xsZXIuaGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKIAogICAg
IGlmIChkaWRIYW5kbGVFdmVudCkKICAgICAgICAgaGFuZGxlV2hlZWxFdmVudFBoYXNlKHdoZWVs
RXZlbnQucGhhc2UoKSk7CkBAIC0xMjgzLDcgKzEyODMsNyBAQCB2b2lkIFNjcm9sbEFuaW1hdG9y
TWFjOjpzdG9wU25hcFJ1YmJlcmJhCiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnNuYXBSdWJi
ZXJCYW5kVGltZXJGaXJlZCgpCiB7Ci0gICAgbV9zY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5z
bmFwUnViYmVyQmFuZFRpbWVyRmlyZWQoKTsKKyAgICBtX3Njcm9sbENvbnRyb2xsZXIuc25hcFJ1
YmJlckJhbmRUaW1lckZpcmVkKCk7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1Njcm9sbENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQ29udHJvbGxlci5oCShyZXZpc2lvbiAxODA0MjApCShm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxFbGFzdGljaXR5Q29udHJvbGxl
ci5oOjE4MDQyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxDb250cm9s
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyX2gKKyNkZWZpbmUgU2Nyb2xsRWxhc3RpY2l0
eUNvbnRyb2xsZXJfaAorCisjaWYgRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQorCisjaW5jbHVkZSAi
RmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIlNjcm9sbFR5
cGVzLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgUGxhdGZvcm1XaGVlbEV2ZW50OworCitjbGFzcyBTY3JvbGxFbGFzdGljaXR5
Q29udHJvbGxlckNsaWVudCB7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+U2Nyb2xsRWxhc3Rp
Y2l0eUNvbnRyb2xsZXJDbGllbnQoKSB7IH0gCisKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGJvb2wg
YWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgPSAw
OworICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoY29uc3QgUGxhdGZv
cm1XaGVlbEV2ZW50JikgPSAwOworICAgIHZpcnR1YWwgSW50U2l6ZSBzdHJldGNoQW1vdW50KCkg
PSAwOworICAgIHZpcnR1YWwgYm9vbCBwaW5uZWRJbkRpcmVjdGlvbihjb25zdCBGbG9hdFNpemUm
KSA9IDA7CisgICAgdmlydHVhbCBib29sIGNhblNjcm9sbEhvcml6b250YWxseSgpID0gMDsKKyAg
ICB2aXJ0dWFsIGJvb2wgY2FuU2Nyb2xsVmVydGljYWxseSgpID0gMDsKKyAgICB2aXJ0dWFsIGJv
b2wgc2hvdWxkUnViYmVyQmFuZEluRGlyZWN0aW9uKFNjcm9sbERpcmVjdGlvbikgPSAwOworCisg
ICAgLy8gUmV0dXJuIHRoZSBhYnNvbHV0ZSBzY3JvbGwgcG9zaXRpb24sIG5vdCByZWxhdGl2ZSB0
byB0aGUgc2Nyb2xsIG9yaWdpbi4KKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IGFic29s
dXRlU2Nyb2xsUG9zaXRpb24oKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgaW1tZWRpYXRlU2Ny
b2xsQnkoY29uc3QgRmxvYXRTaXplJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBpbW1lZGlhdGVT
Y3JvbGxCeVdpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKGNvbnN0IEZsb2F0U2l6ZSYpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRTbmFwUnViYmVyYmFuZFRpbWVyKCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBzdG9wU25hcFJ1YmJlcmJhbmRUaW1lcigpID0gMDsKKworICAgIC8vIElm
IHRoZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbiBpcyB3aXRoaW4gdGhlIG92ZXJoYW5nIGFyZWEs
IHRoaXMgZnVuY3Rpb24gd2lsbCBjYXVzZQorICAgIC8vIHRoZSBwYWdlIHRvIHNjcm9sbCB0byB0
aGUgbmVhcmVzdCBib3VuZGFyeSBwb2ludC4KKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2Nyb2xs
UG9zaXRpb25Ub0JvdW5kc0lmTmVjZXNzYXJ5KCkgPSAwOworfTsKKworY2xhc3MgU2Nyb2xsRWxh
c3RpY2l0eUNvbnRyb2xsZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNjcm9sbEVsYXN0
aWNpdHlDb250cm9sbGVyKTsKKworcHVibGljOgorICAgIGV4cGxpY2l0IFNjcm9sbEVsYXN0aWNp
dHlDb250cm9sbGVyKFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyQ2xpZW50Kik7CisKKyAgICBi
b29sIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7CisgICAgdm9p
ZCBzbmFwUnViYmVyQmFuZFRpbWVyRmlyZWQoKTsKKworICAgIGJvb2wgaXNSdWJiZXJCYW5kSW5Q
cm9ncmVzcygpIGNvbnN0OworCitwcml2YXRlOgorICAgIHZvaWQgc3RvcFNuYXBSdWJiZXJiYW5k
VGltZXIoKTsKKyAgICB2b2lkIHNuYXBSdWJiZXJCYW5kKCk7CisKKyAgICBib29sIHNob3VsZFJ1
YmJlckJhbmRJbkhvcml6b250YWxEaXJlY3Rpb24oY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7
CisKKyAgICBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlckNsaWVudCogbV9jbGllbnQ7CisKKyAg
ICBib29sIG1faW5TY3JvbGxHZXN0dXJlOworICAgIGJvb2wgbV9tb21lbnR1bVNjcm9sbEluUHJv
Z3Jlc3M7CisgICAgYm9vbCBtX2lnbm9yZU1vbWVudHVtU2Nyb2xsczsKKyAgICAKKyAgICBDRlRp
bWVJbnRlcnZhbCBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcDsKKyAgICBGbG9hdFNpemUg
bV9vdmVyZmxvd1Njcm9sbERlbHRhOworICAgIEZsb2F0U2l6ZSBtX3N0cmV0Y2hTY3JvbGxGb3Jj
ZTsKKyAgICBGbG9hdFNpemUgbV9tb21lbnR1bVZlbG9jaXR5OworCisgICAgLy8gUnViYmVyIGJh
bmQgc3RhdGUuCisgICAgQ0ZUaW1lSW50ZXJ2YWwgbV9zdGFydFRpbWU7CisgICAgRmxvYXRTaXpl
IG1fc3RhcnRTdHJldGNoOworICAgIEZsb2F0UG9pbnQgbV9vcmlnT3JpZ2luOworICAgIEZsb2F0
U2l6ZSBtX29yaWdWZWxvY2l0eTsKKworICAgIGJvb2wgbV9zbmFwUnViYmVyYmFuZFRpbWVySXNB
Y3RpdmU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
UlVCQkVSX0JBTkRJTkcpCisKKyNlbmRpZiAvLyBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlcl9o
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQ29udHJvbGxlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxDb250cm9sbGVy
LmgJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxD
b250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDggQEAKICAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFNjcm9sbEVsYXN0aWNpdHlD
b250cm9sbGVyX2gKLSNkZWZpbmUgU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXJfaAorI2lmbmRl
ZiBTY3JvbGxDb250cm9sbGVyX2gKKyNkZWZpbmUgU2Nyb2xsQ29udHJvbGxlcl9oCiAKICNpZiBF
TkFCTEUoUlVCQkVSX0JBTkRJTkcpCiAKQEAgLTM3LDkgKzM3LDkgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQ7CiAKLWNsYXNzIFNjcm9sbEVsYXN0aWNp
dHlDb250cm9sbGVyQ2xpZW50IHsKK2NsYXNzIFNjcm9sbENvbnRyb2xsZXJDbGllbnQgewogcHJv
dGVjdGVkOgotICAgIHZpcnR1YWwgflNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyQ2xpZW50KCkg
eyB9IAorICAgIHZpcnR1YWwgflNjcm9sbENvbnRyb2xsZXJDbGllbnQoKSB7IH0KIAogcHVibGlj
OgogICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZyhjb25zdCBQbGF0
Zm9ybVdoZWVsRXZlbnQmKSA9IDA7CkBAIC02MywxMSArNjMsMTEgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RTY3JvbGxQb3NpdGlvblRvQm91bmRzSWZOZWNlc3NhcnkoKSA9IDA7
CiB9OwogCi1jbGFzcyBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlciB7Ci0gICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIpOworY2xhc3MgU2Nyb2xsQ29u
dHJvbGxlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2Nyb2xsQ29udHJvbGxlcik7CiAK
IHB1YmxpYzoKLSAgICBleHBsaWNpdCBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlcihTY3JvbGxF
bGFzdGljaXR5Q29udHJvbGxlckNsaWVudCopOworICAgIGV4cGxpY2l0IFNjcm9sbENvbnRyb2xs
ZXIoU2Nyb2xsQ29udHJvbGxlckNsaWVudCopOwogCiAgICAgYm9vbCBoYW5kbGVXaGVlbEV2ZW50
KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOwogICAgIHZvaWQgc25hcFJ1YmJlckJhbmRUaW1l
ckZpcmVkKCk7CkBAIC04MCw3ICs4MCw3IEBAIHByaXZhdGU6CiAKICAgICBib29sIHNob3VsZFJ1
YmJlckJhbmRJbkhvcml6b250YWxEaXJlY3Rpb24oY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7
CiAKLSAgICBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlckNsaWVudCogbV9jbGllbnQ7CisgICAg
U2Nyb2xsQ29udHJvbGxlckNsaWVudCogbV9jbGllbnQ7CiAKICAgICBib29sIG1faW5TY3JvbGxH
ZXN0dXJlOwogICAgIGJvb2wgbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3M7CkBAIC0xMDQsNCAr
MTA0LDQgQEAgcHJpdmF0ZToKIAogI2VuZGlmIC8vIEVOQUJMRShSVUJCRVJfQkFORElORykKIAot
I2VuZGlmIC8vIFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyX2gKKyNlbmRpZiAvLyBTY3JvbGxD
b250cm9sbGVyX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxDb250
cm9sbGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3Jv
bGxDb250cm9sbGVyLm1tCShyZXZpc2lvbiAxODA0MjApCShmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9TY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5tbToxODA0MjApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQ29udHJvbGxlci5tbQkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiUGxhdGZv
cm1XaGVlbEV2ZW50LmgiCisjaW5jbHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgorI2lu
Y2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorCisjaWYgRU5BQkxF
KFJVQkJFUl9CQU5ESU5HKQorCitzdGF0aWMgTlNUaW1lSW50ZXJ2YWwgc3lzdGVtVXB0aW1lKCkK
K3sKKyAgICBpZiAoW1tOU1Byb2Nlc3NJbmZvIHByb2Nlc3NJbmZvXSByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKHN5c3RlbVVwdGltZSldKQorICAgICAgICByZXR1cm4gW1tOU1Byb2Nlc3NJ
bmZvIHByb2Nlc3NJbmZvXSBzeXN0ZW1VcHRpbWVdOworCisgICAgLy8gR2V0IGhvdyBsb25nIHN5
c3RlbSBoYXMgYmVlbiB1cC4gRm91bmQgYnkgbG9va2luZyBnZXR0aW5nICJib290dGltZSIgZnJv
bSB0aGUga2VybmVsLgorICAgIHN0YXRpYyBzdHJ1Y3QgdGltZXZhbCBib290dGltZSA9IHswLCAw
fTsKKyAgICBpZiAoIWJvb3R0aW1lLnR2X3NlYykgeworICAgICAgICBpbnQgbWliWzJdID0ge0NU
TF9LRVJOLCBLRVJOX0JPT1RUSU1FfTsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBzaXplb2YoYm9v
dHRpbWUpOworICAgICAgICBpZiAoLTEgPT0gc3lzY3RsKG1pYiwgMiwgJmJvb3R0aW1lLCAmc2l6
ZSwgMCwgMCkpCisgICAgICAgICAgICBib290dGltZS50dl9zZWMgPSAwOworICAgIH0KKyAgICBz
dHJ1Y3QgdGltZXZhbCBub3c7CisgICAgaWYgKGJvb3R0aW1lLnR2X3NlYyAmJiAtMSAhPSBnZXR0
aW1lb2ZkYXkoJm5vdywgMCkpIHsKKyAgICAgICAgc3RydWN0IHRpbWV2YWwgdXB0aW1lOworICAg
ICAgICB0aW1lcnN1Yigmbm93LCAmYm9vdHRpbWUsICZ1cHRpbWUpOworICAgICAgICBOU1RpbWVJ
bnRlcnZhbCByZXN1bHQgPSB1cHRpbWUudHZfc2VjICsgKHVwdGltZS50dl91c2VjIC8gMUUrNik7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGZsb2F0IHNjcm9sbFZlbG9jaXR5WmVy
b2luZ1RpbWVvdXQgPSAwLjEwZjsKK3N0YXRpYyBjb25zdCBmbG9hdCBydWJiZXJiYW5kRGlyZWN0
aW9uTG9ja1N0cmV0Y2hSYXRpbyA9IDE7CitzdGF0aWMgY29uc3QgZmxvYXQgcnViYmVyYmFuZE1p
bmltdW1SZXF1aXJlZERlbHRhQmVmb3JlU3RyZXRjaCA9IDEwOworCitzdGF0aWMgZmxvYXQgZWxh
c3RpY0RlbHRhRm9yVGltZURlbHRhKGZsb2F0IGluaXRpYWxQb3NpdGlvbiwgZmxvYXQgaW5pdGlh
bFZlbG9jaXR5LCBmbG9hdCBlbGFwc2VkVGltZSkKK3sKKyAgICByZXR1cm4gd2tOU0VsYXN0aWNE
ZWx0YUZvclRpbWVEZWx0YShpbml0aWFsUG9zaXRpb24sIGluaXRpYWxWZWxvY2l0eSwgZWxhcHNl
ZFRpbWUpOworfQorCitzdGF0aWMgZmxvYXQgZWxhc3RpY0RlbHRhRm9yUmVib3VuZERlbHRhKGZs
b2F0IGRlbHRhKQoreworICAgIHJldHVybiB3a05TRWxhc3RpY0RlbHRhRm9yUmVib3VuZERlbHRh
KGRlbHRhKTsKK30KKworc3RhdGljIGZsb2F0IHJlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0YShm
bG9hdCBkZWx0YSkKK3sKKyAgICByZXR1cm4gd2tOU1JlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0
YShkZWx0YSk7Cit9CisKK3N0YXRpYyBmbG9hdCBzY3JvbGxXaGVlbE11bHRpcGxpZXIoKQorewor
ICAgIHN0YXRpYyBmbG9hdCBtdWx0aXBsaWVyID0gLTE7CisgICAgaWYgKG11bHRpcGxpZXIgPCAw
KSB7CisgICAgICAgIG11bHRpcGxpZXIgPSBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRl
ZmF1bHRzXSBmbG9hdEZvcktleTpAIk5TU2Nyb2xsV2hlZWxNdWx0aXBsaWVyIl07CisgICAgICAg
IGlmIChtdWx0aXBsaWVyIDw9IDApCisgICAgICAgICAgICBtdWx0aXBsaWVyID0gMTsKKyAgICB9
CisgICAgcmV0dXJuIG11bHRpcGxpZXI7Cit9CisKK1Njcm9sbEVsYXN0aWNpdHlDb250cm9sbGVy
OjpTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlcihTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlckNs
aWVudCogY2xpZW50KQorICAgIDogbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9pblNjcm9sbEdl
c3R1cmUoZmFsc2UpCisgICAgLCBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyhmYWxzZSkKKyAg
ICAsIG1faWdub3JlTW9tZW50dW1TY3JvbGxzKGZhbHNlKQorICAgICwgbV9sYXN0TW9tZW50dW1T
Y3JvbGxUaW1lc3RhbXAoMCkKKyAgICAsIG1fc3RhcnRUaW1lKDApCisgICAgLCBtX3NuYXBSdWJi
ZXJiYW5kVGltZXJJc0FjdGl2ZShmYWxzZSkKK3sKK30KKworYm9vbCBTY3JvbGxFbGFzdGljaXR5
Q29udHJvbGxlcjo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdo
ZWVsRXZlbnQpCit7CisgICAgaWYgKHdoZWVsRXZlbnQucGhhc2UoKSA9PSBQbGF0Zm9ybVdoZWVs
RXZlbnRQaGFzZUJlZ2FuKSB7CisgICAgICAgIC8vIEZpcnN0LCBjaGVjayBpZiB3ZSBzaG91bGQg
cnViYmVyLWJhbmQgYXQgYWxsLgorICAgICAgICBpZiAobV9jbGllbnQtPnBpbm5lZEluRGlyZWN0
aW9uKEZsb2F0U2l6ZSgtd2hlZWxFdmVudC5kZWx0YVgoKSwgMCkpICYmCisgICAgICAgICAgICAh
c2hvdWxkUnViYmVyQmFuZEluSG9yaXpvbnRhbERpcmVjdGlvbih3aGVlbEV2ZW50KSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBtX2luU2Nyb2xsR2VzdHVyZSA9IHRydWU7
CisgICAgICAgIG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzID0gZmFsc2U7CisgICAgICAgIG1f
aWdub3JlTW9tZW50dW1TY3JvbGxzID0gZmFsc2U7CisgICAgICAgIG1fbGFzdE1vbWVudHVtU2Ny
b2xsVGltZXN0YW1wID0gMDsKKyAgICAgICAgbV9tb21lbnR1bVZlbG9jaXR5ID0gRmxvYXRTaXpl
KCk7CisKKyAgICAgICAgSW50U2l6ZSBzdHJldGNoQW1vdW50ID0gbV9jbGllbnQtPnN0cmV0Y2hB
bW91bnQoKTsKKyAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0V2lkdGgocmVib3VuZERl
bHRhRm9yRWxhc3RpY0RlbHRhKHN0cmV0Y2hBbW91bnQud2lkdGgoKSkpOworICAgICAgICBtX3N0
cmV0Y2hTY3JvbGxGb3JjZS5zZXRIZWlnaHQocmVib3VuZERlbHRhRm9yRWxhc3RpY0RlbHRhKHN0
cmV0Y2hBbW91bnQuaGVpZ2h0KCkpKTsKKyAgICAgICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhID0g
RmxvYXRTaXplKCk7CisKKyAgICAgICAgc3RvcFNuYXBSdWJiZXJiYW5kVGltZXIoKTsKKworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAod2hlZWxFdmVudC5waGFzZSgpID09
IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlRW5kZWQpIHsKKyAgICAgICAgc25hcFJ1YmJlckJhbmQo
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCBpc01vbWVudHVtU2Ny
b2xsRXZlbnQgPSAod2hlZWxFdmVudC5tb21lbnR1bVBoYXNlKCkgIT0gUGxhdGZvcm1XaGVlbEV2
ZW50UGhhc2VOb25lKTsKKyAgICBpZiAobV9pZ25vcmVNb21lbnR1bVNjcm9sbHMgJiYgKGlzTW9t
ZW50dW1TY3JvbGxFdmVudCB8fCBtX3NuYXBSdWJiZXJiYW5kVGltZXJJc0FjdGl2ZSkpIHsKKyAg
ICAgICAgaWYgKHdoZWVsRXZlbnQubW9tZW50dW1QaGFzZSgpID09IFBsYXRmb3JtV2hlZWxFdmVu
dFBoYXNlRW5kZWQpIHsKKyAgICAgICAgICAgIG1faWdub3JlTW9tZW50dW1TY3JvbGxzID0gZmFs
c2U7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgZmxvYXQgZGVsdGFYID0gbV9vdmVyZmxvd1Njcm9sbERlbHRh
LndpZHRoKCk7CisgICAgZmxvYXQgZGVsdGFZID0gbV9vdmVyZmxvd1Njcm9sbERlbHRhLmhlaWdo
dCgpOworCisgICAgLy8gUmVzZXQgb3ZlcmZsb3cgdmFsdWVzIGJlY2F1c2Ugd2UgbWF5IGRlY2lk
ZSB0byByZW1vdmUgZGVsdGEgYXQgdmFyaW91cyBwb2ludHMgYW5kIHB1dCBpdCBpbnRvIG92ZXJm
bG93LgorICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YSA9IEZsb2F0U2l6ZSgpOworCisgICAgSW50
U2l6ZSBzdHJldGNoQW1vdW50ID0gbV9jbGllbnQtPnN0cmV0Y2hBbW91bnQoKTsKKyAgICBib29s
IGlzVmVydGljYWxseVN0cmV0Y2hlZCA9IHN0cmV0Y2hBbW91bnQuaGVpZ2h0KCk7CisgICAgYm9v
bCBpc0hvcml6b250YWxseVN0cmV0Y2hlZCA9IHN0cmV0Y2hBbW91bnQud2lkdGgoKTsKKworICAg
IGZsb2F0IGV2ZW50Q29hbGVzY2VkRGVsdGFYOworICAgIGZsb2F0IGV2ZW50Q29hbGVzY2VkRGVs
dGFZOworCisgICAgaWYgKGlzVmVydGljYWxseVN0cmV0Y2hlZCB8fCBpc0hvcml6b250YWxseVN0
cmV0Y2hlZCkgeworICAgICAgICBldmVudENvYWxlc2NlZERlbHRhWCA9IC13aGVlbEV2ZW50LnVu
YWNjZWxlcmF0ZWRTY3JvbGxpbmdEZWx0YVgoKTsKKyAgICAgICAgZXZlbnRDb2FsZXNjZWREZWx0
YVkgPSAtd2hlZWxFdmVudC51bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGFZKCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZXZlbnRDb2FsZXNjZWREZWx0YVggPSAtd2hlZWxFdmVudC5kZWx0YVgo
KTsKKyAgICAgICAgZXZlbnRDb2FsZXNjZWREZWx0YVkgPSAtd2hlZWxFdmVudC5kZWx0YVkoKTsK
KyAgICB9CisKKyAgICBkZWx0YVggKz0gZXZlbnRDb2FsZXNjZWREZWx0YVg7CisgICAgZGVsdGFZ
ICs9IGV2ZW50Q29hbGVzY2VkRGVsdGFZOworCisgICAgLy8gU2xpZ2h0bHkgcHJlZmVyIHNjcm9s
bGluZyB2ZXJ0aWNhbGx5IGJ5IGFwcGx5aW5nIHRoZSA9IGNhc2UgdG8gZGVsdGFZCisgICAgaWYg
KGZhYnNmKGRlbHRhWSkgPj0gZmFic2YoZGVsdGFYKSkKKyAgICAgICAgZGVsdGFYID0gMDsKKyAg
ICBlbHNlCisgICAgICAgIGRlbHRhWSA9IDA7CisKKyAgICBib29sIHNob3VsZFN0cmV0Y2ggPSBm
YWxzZTsKKworICAgIFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlIG1vbWVudHVtUGhhc2UgPSB3aGVl
bEV2ZW50Lm1vbWVudHVtUGhhc2UoKTsKKworICAgIC8vIElmIHdlIGFyZSBzdGFydGluZyBtb21l
bnR1bSBzY3JvbGxpbmcgdGhlbiBkbyBzb21lIHNldHVwLgorICAgIGlmICghbV9tb21lbnR1bVNj
cm9sbEluUHJvZ3Jlc3MgJiYgKG1vbWVudHVtUGhhc2UgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhh
c2VCZWdhbiB8fCBtb21lbnR1bVBoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQ2hhbmdl
ZCkpCisgICAgICAgIG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzID0gdHJ1ZTsKKworICAgIENG
VGltZUludGVydmFsIHRpbWVEZWx0YSA9IHdoZWVsRXZlbnQudGltZXN0YW1wKCkgLSBtX2xhc3RN
b21lbnR1bVNjcm9sbFRpbWVzdGFtcDsKKyAgICBpZiAobV9pblNjcm9sbEdlc3R1cmUgfHwgbV9t
b21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MpIHsKKyAgICAgICAgaWYgKG1fbGFzdE1vbWVudHVtU2Ny
b2xsVGltZXN0YW1wICYmIHRpbWVEZWx0YSA+IDAgJiYgdGltZURlbHRhIDwgc2Nyb2xsVmVsb2Np
dHlaZXJvaW5nVGltZW91dCkgeworICAgICAgICAgICAgbV9tb21lbnR1bVZlbG9jaXR5LnNldFdp
ZHRoKGV2ZW50Q29hbGVzY2VkRGVsdGFYIC8gKGZsb2F0KXRpbWVEZWx0YSk7CisgICAgICAgICAg
ICBtX21vbWVudHVtVmVsb2NpdHkuc2V0SGVpZ2h0KGV2ZW50Q29hbGVzY2VkRGVsdGFZIC8gKGZs
b2F0KXRpbWVEZWx0YSk7CisgICAgICAgICAgICBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFt
cCA9IHdoZWVsRXZlbnQudGltZXN0YW1wKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcCA9IHdoZWVsRXZlbnQudGltZXN0YW1wKCk7
CisgICAgICAgICAgICBtX21vbWVudHVtVmVsb2NpdHkgPSBGbG9hdFNpemUoKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChpc1ZlcnRpY2FsbHlTdHJldGNoZWQpIHsKKyAgICAgICAgICAgIGlm
ICghaXNIb3Jpem9udGFsbHlTdHJldGNoZWQgJiYgbV9jbGllbnQtPnBpbm5lZEluRGlyZWN0aW9u
KEZsb2F0U2l6ZShkZWx0YVgsIDApKSkgeworICAgICAgICAgICAgICAgIC8vIFN0cmV0Y2hpbmcg
b25seSBpbiB0aGUgdmVydGljYWwuCisgICAgICAgICAgICAgICAgaWYgKGRlbHRhWSAhPSAwICYm
IChmYWJzZihkZWx0YVggLyBkZWx0YVkpIDwgcnViYmVyYmFuZERpcmVjdGlvbkxvY2tTdHJldGNo
UmF0aW8pKQorICAgICAgICAgICAgICAgICAgICBkZWx0YVggPSAwOworICAgICAgICAgICAgICAg
IGVsc2UgaWYgKGZhYnNmKGRlbHRhWCkgPCBydWJiZXJiYW5kTWluaW11bVJlcXVpcmVkRGVsdGFC
ZWZvcmVTdHJldGNoKSB7CisgICAgICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0
YS5zZXRXaWR0aChtX292ZXJmbG93U2Nyb2xsRGVsdGEud2lkdGgoKSArIGRlbHRhWCk7CisgICAg
ICAgICAgICAgICAgICAgIGRlbHRhWCA9IDA7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5zZXRXaWR0aChtX292ZXJmbG93
U2Nyb2xsRGVsdGEud2lkdGgoKSArIGRlbHRhWCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSBpZiAoaXNIb3Jpem9udGFsbHlTdHJldGNoZWQpIHsKKyAgICAgICAgICAgIC8vIFN0cmV0
Y2hpbmcgb25seSBpbiB0aGUgaG9yaXpvbnRhbC4KKyAgICAgICAgICAgIGlmIChtX2NsaWVudC0+
cGlubmVkSW5EaXJlY3Rpb24oRmxvYXRTaXplKDAsIGRlbHRhWSkpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGRlbHRhWCAhPSAwICYmIChmYWJzZihkZWx0YVkgLyBkZWx0YVgpIDwgcnViYmVyYmFu
ZERpcmVjdGlvbkxvY2tTdHJldGNoUmF0aW8pKQorICAgICAgICAgICAgICAgICAgICBkZWx0YVkg
PSAwOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZhYnNmKGRlbHRhWSkgPCBydWJiZXJiYW5k
TWluaW11bVJlcXVpcmVkRGVsdGFCZWZvcmVTdHJldGNoKSB7CisgICAgICAgICAgICAgICAgICAg
IG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5zZXRIZWlnaHQobV9vdmVyZmxvd1Njcm9sbERlbHRhLmhl
aWdodCgpICsgZGVsdGFZKTsKKyAgICAgICAgICAgICAgICAgICAgZGVsdGFZID0gMDsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbV9vdmVyZmxvd1Njcm9sbERl
bHRhLnNldEhlaWdodChtX292ZXJmbG93U2Nyb2xsRGVsdGEuaGVpZ2h0KCkgKyBkZWx0YVkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gTm90IHN0cmV0
Y2hpbmcgYXQgYWxsIHlldC4KKyAgICAgICAgICAgIGlmIChtX2NsaWVudC0+cGlubmVkSW5EaXJl
Y3Rpb24oRmxvYXRTaXplKGRlbHRhWCwgZGVsdGFZKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
ZmFic2YoZGVsdGFZKSA+PSBmYWJzZihkZWx0YVgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChmYWJzZihkZWx0YVgpIDwgcnViYmVyYmFuZE1pbmltdW1SZXF1aXJlZERlbHRhQmVmb3JlU3Ry
ZXRjaCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhLnNl
dFdpZHRoKG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS53aWR0aCgpICsgZGVsdGFYKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRlbHRhWCA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgICAgICAgICAgICAgbV9vdmVyZmxvd1Njcm9sbERlbHRhLnNldFdpZHRoKG1f
b3ZlcmZsb3dTY3JvbGxEZWx0YS53aWR0aCgpICsgZGVsdGFYKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgc2hvdWxkU3RyZXRjaCA9IHRydWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZGVsdGFYICE9IDAgfHwgZGVsdGFZICE9IDApIHsK
KyAgICAgICAgaWYgKCEoc2hvdWxkU3RyZXRjaCB8fCBpc1ZlcnRpY2FsbHlTdHJldGNoZWQgfHwg
aXNIb3Jpem9udGFsbHlTdHJldGNoZWQpKSB7CisgICAgICAgICAgICBpZiAoZGVsdGFZICE9IDAp
IHsKKyAgICAgICAgICAgICAgICBkZWx0YVkgKj0gc2Nyb2xsV2hlZWxNdWx0aXBsaWVyKCk7Cisg
ICAgICAgICAgICAgICAgbV9jbGllbnQtPmltbWVkaWF0ZVNjcm9sbEJ5KEZsb2F0U2l6ZSgwLCBk
ZWx0YVkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkZWx0YVggIT0gMCkgewor
ICAgICAgICAgICAgICAgIGRlbHRhWCAqPSBzY3JvbGxXaGVlbE11bHRpcGxpZXIoKTsKKyAgICAg
ICAgICAgICAgICBtX2NsaWVudC0+aW1tZWRpYXRlU2Nyb2xsQnkoRmxvYXRTaXplKGRlbHRhWCwg
MCkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCFt
X2NsaWVudC0+YWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcod2hlZWxFdmVudCkpIHsKKyAgICAg
ICAgICAgICAgICBkZWx0YVggPSAwOworICAgICAgICAgICAgICAgIGV2ZW50Q29hbGVzY2VkRGVs
dGFYID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKGRlbHRhWCAhPSAwKSAmJiAhaXNIb3Jp
em9udGFsbHlTdHJldGNoZWQgJiYgIW1fY2xpZW50LT5waW5uZWRJbkRpcmVjdGlvbihGbG9hdFNp
emUoZGVsdGFYLCAwKSkpIHsKKyAgICAgICAgICAgICAgICBkZWx0YVggKj0gc2Nyb2xsV2hlZWxN
dWx0aXBsaWVyKCk7CisKKyAgICAgICAgICAgICAgICBtX2NsaWVudC0+aW1tZWRpYXRlU2Nyb2xs
QnlXaXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyhGbG9hdFNpemUoZGVsdGFYLCAwKSk7Cisg
ICAgICAgICAgICAgICAgZGVsdGFYID0gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKCFtX2NsaWVudC0+YWxsb3dzVmVydGljYWxTdHJldGNoaW5nKHdoZWVsRXZlbnQpKSB7Cisg
ICAgICAgICAgICAgICAgZGVsdGFZID0gMDsKKyAgICAgICAgICAgICAgICBldmVudENvYWxlc2Nl
ZERlbHRhWSA9IDA7CisgICAgICAgICAgICB9IGVsc2UgaWYgKChkZWx0YVkgIT0gMCkgJiYgIWlz
VmVydGljYWxseVN0cmV0Y2hlZCAmJiAhbV9jbGllbnQtPnBpbm5lZEluRGlyZWN0aW9uKEZsb2F0
U2l6ZSgwLCBkZWx0YVkpKSkgeworICAgICAgICAgICAgICAgIGRlbHRhWSAqPSBzY3JvbGxXaGVl
bE11bHRpcGxpZXIoKTsKKworICAgICAgICAgICAgICAgIG1fY2xpZW50LT5pbW1lZGlhdGVTY3Jv
bGxCeVdpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKEZsb2F0U2l6ZSgwLCBkZWx0YVkpKTsK
KyAgICAgICAgICAgICAgICBkZWx0YVkgPSAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBJbnRTaXplIHN0cmV0Y2hBbW91bnQgPSBtX2NsaWVudC0+c3RyZXRjaEFtb3VudCgpOworCisg
ICAgICAgICAgICBpZiAobV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoKG1fY2xpZW50LT5waW5uZWRJbkRpcmVjdGlvbihGbG9hdFNpemUoZXZlbnRDb2Fs
ZXNjZWREZWx0YVgsIGV2ZW50Q29hbGVzY2VkRGVsdGFZKSkgfHwgKGZhYnNmKGV2ZW50Q29hbGVz
Y2VkRGVsdGFYKSArIGZhYnNmKGV2ZW50Q29hbGVzY2VkRGVsdGFZKSA8PSAwKSkgJiYgbV9sYXN0
TW9tZW50dW1TY3JvbGxUaW1lc3RhbXApIHsKKyAgICAgICAgICAgICAgICAgICAgbV9pZ25vcmVN
b21lbnR1bVNjcm9sbHMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBtX21vbWVudHVtU2Ny
b2xsSW5Qcm9ncmVzcyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBzbmFwUnViYmVyQmFu
ZCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9z
dHJldGNoU2Nyb2xsRm9yY2Uuc2V0V2lkdGgobV9zdHJldGNoU2Nyb2xsRm9yY2Uud2lkdGgoKSAr
IGRlbHRhWCk7CisgICAgICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5zZXRIZWlnaHQobV9z
dHJldGNoU2Nyb2xsRm9yY2UuaGVpZ2h0KCkgKyBkZWx0YVkpOworCisgICAgICAgICAgICBGbG9h
dFNpemUgZGFtcGVkRGVsdGEoY2VpbGYoZWxhc3RpY0RlbHRhRm9yUmVib3VuZERlbHRhKG1fc3Ry
ZXRjaFNjcm9sbEZvcmNlLndpZHRoKCkpKSwgY2VpbGYoZWxhc3RpY0RlbHRhRm9yUmVib3VuZERl
bHRhKG1fc3RyZXRjaFNjcm9sbEZvcmNlLmhlaWdodCgpKSkpOworCisgICAgICAgICAgICBtX2Ns
aWVudC0+aW1tZWRpYXRlU2Nyb2xsQnlXaXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyhkYW1w
ZWREZWx0YSAtIHN0cmV0Y2hBbW91bnQpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1f
bW9tZW50dW1TY3JvbGxJblByb2dyZXNzICYmIG1vbWVudHVtUGhhc2UgPT0gUGxhdGZvcm1XaGVl
bEV2ZW50UGhhc2VFbmRlZCkgeworICAgICAgICBtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyA9
IGZhbHNlOworICAgICAgICBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscyA9IGZhbHNlOworICAgICAg
ICBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcCA9IDA7CisgICAgfQorCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgZmxvYXQgcm91bmRUb3dhcmRaZXJvKGZsb2F0IG51
bSkKK3sKKyAgICByZXR1cm4gbnVtID4gMCA/IGNlaWxmKG51bSAtIDAuNWYpIDogZmxvb3JmKG51
bSArIDAuNWYpOworfQorCitzdGF0aWMgaW5saW5lIGZsb2F0IHJvdW5kVG9EZXZpY2VQaXhlbFRv
d2FyZFplcm8oZmxvYXQgbnVtKQoreworICAgIGZsb2F0IHJvdW5kZWROdW0gPSByb3VuZGYobnVt
KTsKKyAgICBpZiAoZmFicyhudW0gLSByb3VuZGVkTnVtKSA8IDAuMTI1KQorICAgICAgICBudW0g
PSByb3VuZGVkTnVtOworCisgICAgcmV0dXJuIHJvdW5kVG93YXJkWmVybyhudW0pOworfQorCit2
b2lkIFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyOjpzbmFwUnViYmVyQmFuZFRpbWVyRmlyZWQo
KQoreworICAgIGlmICghbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MgfHwgbV9pZ25vcmVNb21l
bnR1bVNjcm9sbHMpIHsKKyAgICAgICAgQ0ZUaW1lSW50ZXJ2YWwgdGltZURlbHRhID0gW05TRGF0
ZSB0aW1lSW50ZXJ2YWxTaW5jZVJlZmVyZW5jZURhdGVdIC0gbV9zdGFydFRpbWU7CisKKyAgICAg
ICAgaWYgKG1fc3RhcnRTdHJldGNoID09IEZsb2F0U2l6ZSgpKSB7CisgICAgICAgICAgICBtX3N0
YXJ0U3RyZXRjaCA9IG1fY2xpZW50LT5zdHJldGNoQW1vdW50KCk7CisgICAgICAgICAgICBpZiAo
bV9zdGFydFN0cmV0Y2ggPT0gRmxvYXRTaXplKCkpIHsKKyAgICAgICAgICAgICAgICBzdG9wU25h
cFJ1YmJlcmJhbmRUaW1lcigpOworCisgICAgICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9y
Y2UgPSBGbG9hdFNpemUoKTsKKyAgICAgICAgICAgICAgICBtX3N0YXJ0VGltZSA9IDA7CisgICAg
ICAgICAgICAgICAgbV9zdGFydFN0cmV0Y2ggPSBGbG9hdFNpemUoKTsKKyAgICAgICAgICAgICAg
ICBtX29yaWdPcmlnaW4gPSBGbG9hdFBvaW50KCk7CisgICAgICAgICAgICAgICAgbV9vcmlnVmVs
b2NpdHkgPSBGbG9hdFNpemUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIG1fb3JpZ09yaWdpbiA9IG1fY2xpZW50LT5hYnNvbHV0ZVNjcm9s
bFBvc2l0aW9uKCkgLSBtX3N0YXJ0U3RyZXRjaDsKKyAgICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5
ID0gbV9tb21lbnR1bVZlbG9jaXR5OworCisgICAgICAgICAgICAvLyBKdXN0IGxpa2Ugbm9ybWFs
IHNjcm9sbGluZywgcHJlZmVyIHZlcnRpY2FsIHJ1YmJlcmJhbmRpbmcKKyAgICAgICAgICAgIGlm
IChmYWJzZihtX29yaWdWZWxvY2l0eS5oZWlnaHQoKSkgPj0gZmFic2YobV9vcmlnVmVsb2NpdHku
d2lkdGgoKSkpCisgICAgICAgICAgICAgICAgbV9vcmlnVmVsb2NpdHkuc2V0V2lkdGgoMCk7CisK
KyAgICAgICAgICAgIC8vIERvbid0IHJ1YmJlci1iYW5kIGhvcml6b250YWxseSBpZiBpdCdzIG5v
dCBwb3NzaWJsZSB0byBzY3JvbGwgaG9yaXpvbnRhbGx5CisgICAgICAgICAgICBpZiAoIW1fY2xp
ZW50LT5jYW5TY3JvbGxIb3Jpem9udGFsbHkoKSkKKyAgICAgICAgICAgICAgICBtX29yaWdWZWxv
Y2l0eS5zZXRXaWR0aCgwKTsKKworICAgICAgICAgICAgLy8gRG9uJ3QgcnViYmVyLWJhbmQgdmVy
dGljYWxseSBpZiBpdCdzIG5vdCBwb3NzaWJsZSB0byBzY3JvbGwgdmVydGljYWxseQorICAgICAg
ICAgICAgaWYgKCFtX2NsaWVudC0+Y2FuU2Nyb2xsVmVydGljYWxseSgpKQorICAgICAgICAgICAg
ICAgIG1fb3JpZ1ZlbG9jaXR5LnNldEhlaWdodCgwKTsKKyAgICAgICAgfQorCisgICAgICAgIEZs
b2F0UG9pbnQgZGVsdGEocm91bmRUb0RldmljZVBpeGVsVG93YXJkWmVybyhlbGFzdGljRGVsdGFG
b3JUaW1lRGVsdGEobV9zdGFydFN0cmV0Y2gud2lkdGgoKSwgLW1fb3JpZ1ZlbG9jaXR5LndpZHRo
KCksIChmbG9hdCl0aW1lRGVsdGEpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICByb3VuZFRv
RGV2aWNlUGl4ZWxUb3dhcmRaZXJvKGVsYXN0aWNEZWx0YUZvclRpbWVEZWx0YShtX3N0YXJ0U3Ry
ZXRjaC5oZWlnaHQoKSwgLW1fb3JpZ1ZlbG9jaXR5LmhlaWdodCgpLCAoZmxvYXQpdGltZURlbHRh
KSkpOworCisgICAgICAgIGlmIChmYWJzKGRlbHRhLngoKSkgPj0gMSB8fCBmYWJzKGRlbHRhLnko
KSkgPj0gMSkgeworICAgICAgICAgICAgbV9jbGllbnQtPmltbWVkaWF0ZVNjcm9sbEJ5V2l0aG91
dENvbnRlbnRFZGdlQ29uc3RyYWludHMoRmxvYXRTaXplKGRlbHRhLngoKSwgZGVsdGEueSgpKSAt
IG1fY2xpZW50LT5zdHJldGNoQW1vdW50KCkpOworCisgICAgICAgICAgICBGbG9hdFNpemUgbmV3
U3RyZXRjaCA9IG1fY2xpZW50LT5zdHJldGNoQW1vdW50KCk7CisKKyAgICAgICAgICAgIG1fc3Ry
ZXRjaFNjcm9sbEZvcmNlLnNldFdpZHRoKHJlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0YShuZXdT
dHJldGNoLndpZHRoKCkpKTsKKyAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldEhl
aWdodChyZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEobmV3U3RyZXRjaC5oZWlnaHQoKSkpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9jbGllbnQtPmFkanVzdFNjcm9sbFBvc2l0
aW9uVG9Cb3VuZHNJZk5lY2Vzc2FyeSgpOworCisgICAgICAgICAgICBzdG9wU25hcFJ1YmJlcmJh
bmRUaW1lcigpOworICAgICAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2UgPSBGbG9hdFNpemUo
KTsKKyAgICAgICAgICAgIG1fc3RhcnRUaW1lID0gMDsKKyAgICAgICAgICAgIG1fc3RhcnRTdHJl
dGNoID0gRmxvYXRTaXplKCk7CisgICAgICAgICAgICBtX29yaWdPcmlnaW4gPSBGbG9hdFBvaW50
KCk7CisgICAgICAgICAgICBtX29yaWdWZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9zdGFydFRpbWUgPSBbTlNEYXRlIHRpbWVJbnRlcnZh
bFNpbmNlUmVmZXJlbmNlRGF0ZV07CisgICAgICAgIG1fc3RhcnRTdHJldGNoID0gRmxvYXRTaXpl
KCk7CisgICAgfQorfQorCitib29sIFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyOjppc1J1YmJl
ckJhbmRJblByb2dyZXNzKCkgY29uc3QKK3sKKyAgICBpZiAoIW1faW5TY3JvbGxHZXN0dXJlICYm
ICFtX21vbWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyAmJiAhbV9zbmFwUnViYmVyYmFuZFRpbWVySXNB
Y3RpdmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiAhbV9jbGllbnQtPnN0
cmV0Y2hBbW91bnQoKS5pc1plcm8oKTsKK30KKwordm9pZCBTY3JvbGxFbGFzdGljaXR5Q29udHJv
bGxlcjo6c3RvcFNuYXBSdWJiZXJiYW5kVGltZXIoKQoreworICAgIG1fY2xpZW50LT5zdG9wU25h
cFJ1YmJlcmJhbmRUaW1lcigpOworICAgIG1fc25hcFJ1YmJlcmJhbmRUaW1lcklzQWN0aXZlID0g
ZmFsc2U7Cit9CisKK3ZvaWQgU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXI6OnNuYXBSdWJiZXJC
YW5kKCkKK3sKKyAgICBDRlRpbWVJbnRlcnZhbCB0aW1lRGVsdGEgPSBzeXN0ZW1VcHRpbWUoKSAt
IG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wOworICAgIGlmIChtX2xhc3RNb21lbnR1bVNj
cm9sbFRpbWVzdGFtcCAmJiB0aW1lRGVsdGEgPj0gc2Nyb2xsVmVsb2NpdHlaZXJvaW5nVGltZW91
dCkKKyAgICAgICAgbV9tb21lbnR1bVZlbG9jaXR5ID0gRmxvYXRTaXplKCk7CisKKyAgICBtX2lu
U2Nyb2xsR2VzdHVyZSA9IGZhbHNlOworCisgICAgaWYgKG1fc25hcFJ1YmJlcmJhbmRUaW1lcklz
QWN0aXZlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0YXJ0VGltZSA9IFtOU0RhdGUgdGlt
ZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXTsKKyAgICBtX3N0YXJ0U3RyZXRjaCA9IEZsb2F0
U2l6ZSgpOworICAgIG1fb3JpZ09yaWdpbiA9IEZsb2F0UG9pbnQoKTsKKyAgICBtX29yaWdWZWxv
Y2l0eSA9IEZsb2F0U2l6ZSgpOworCisgICAgbV9jbGllbnQtPnN0YXJ0U25hcFJ1YmJlcmJhbmRU
aW1lcigpOworICAgIG1fc25hcFJ1YmJlcmJhbmRUaW1lcklzQWN0aXZlID0gdHJ1ZTsKK30KKwor
Ym9vbCBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlcjo6c2hvdWxkUnViYmVyQmFuZEluSG9yaXpv
bnRhbERpcmVjdGlvbihjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCit7Cisg
ICAgaWYgKHdoZWVsRXZlbnQuZGVsdGFYKCkgPiAwKQorICAgICAgICByZXR1cm4gbV9jbGllbnQt
PnNob3VsZFJ1YmJlckJhbmRJbkRpcmVjdGlvbihTY3JvbGxMZWZ0KTsKKyAgICBpZiAod2hlZWxF
dmVudC5kZWx0YVgoKSA8IDApCisgICAgICAgIHJldHVybiBtX2NsaWVudC0+c2hvdWxkUnViYmVy
QmFuZEluRGlyZWN0aW9uKFNjcm9sbFJpZ2h0KTsKKworICAgIHJldHVybiB0cnVlOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoUlVCQkVSX0JBTkRJTkcp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQ29udHJvbGxlci5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQ29udHJvbGxl
ci5tbQkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9s
bENvbnRyb2xsZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMSwgMjAxNC0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjQsMTIgKzI0LDEyIEBACiAgKi8K
IAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNjcm9sbEVsYXN0aWNpdHlDb250cm9s
bGVyLmgiCisjaW5jbHVkZSAiU2Nyb2xsQ29udHJvbGxlci5oIgogCiAjaW5jbHVkZSAiUGxhdGZv
cm1XaGVlbEV2ZW50LmgiCiAjaW5jbHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgotI2lu
Y2x1ZGUgPHN5cy90aW1lLmg+CiAjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorI2luY2x1ZGUgPHN5
cy90aW1lLmg+CiAKICNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCiAKQEAgLTg5LDcgKzg5LDcg
QEAgc3RhdGljIGZsb2F0IHNjcm9sbFdoZWVsTXVsdGlwbGllcigpCiAgICAgcmV0dXJuIG11bHRp
cGxpZXI7CiB9CiAKLVNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyOjpTY3JvbGxFbGFzdGljaXR5
Q29udHJvbGxlcihTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlckNsaWVudCogY2xpZW50KQorU2Ny
b2xsQ29udHJvbGxlcjo6U2Nyb2xsQ29udHJvbGxlcihTY3JvbGxDb250cm9sbGVyQ2xpZW50KiBj
bGllbnQpCiAgICAgOiBtX2NsaWVudChjbGllbnQpCiAgICAgLCBtX2luU2Nyb2xsR2VzdHVyZShm
YWxzZSkKICAgICAsIG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzKGZhbHNlKQpAQCAtMTAwLDEy
ICsxMDAsMTIgQEAgU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXI6OlNjcm9sbEVsYXN0aQogewog
fQogCi1ib29sIFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyOjpoYW5kbGVXaGVlbEV2ZW50KGNv
bnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKK2Jvb2wgU2Nyb2xsQ29udHJvbGxl
cjo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQp
CiB7CiAgICAgaWYgKHdoZWVsRXZlbnQucGhhc2UoKSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFz
ZUJlZ2FuKSB7CiAgICAgICAgIC8vIEZpcnN0LCBjaGVjayBpZiB3ZSBzaG91bGQgcnViYmVyLWJh
bmQgYXQgYWxsLgotICAgICAgICBpZiAobV9jbGllbnQtPnBpbm5lZEluRGlyZWN0aW9uKEZsb2F0
U2l6ZSgtd2hlZWxFdmVudC5kZWx0YVgoKSwgMCkpICYmCi0gICAgICAgICAgICAhc2hvdWxkUnVi
YmVyQmFuZEluSG9yaXpvbnRhbERpcmVjdGlvbih3aGVlbEV2ZW50KSkKKyAgICAgICAgaWYgKG1f
Y2xpZW50LT5waW5uZWRJbkRpcmVjdGlvbihGbG9hdFNpemUoLXdoZWVsRXZlbnQuZGVsdGFYKCks
IDApKQorICAgICAgICAgICAgJiYgIXNob3VsZFJ1YmJlckJhbmRJbkhvcml6b250YWxEaXJlY3Rp
b24od2hlZWxFdmVudCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgbV9p
blNjcm9sbEdlc3R1cmUgPSB0cnVlOwpAQCAtMTkwLDcgKzE5MCw3IEBAIGJvb2wgU2Nyb2xsRWxh
c3RpY2l0eUNvbnRyb2xsZXI6OmhhbmRsZVcKICAgICAgICAgaWYgKGlzVmVydGljYWxseVN0cmV0
Y2hlZCkgewogICAgICAgICAgICAgaWYgKCFpc0hvcml6b250YWxseVN0cmV0Y2hlZCAmJiBtX2Ns
aWVudC0+cGlubmVkSW5EaXJlY3Rpb24oRmxvYXRTaXplKGRlbHRhWCwgMCkpKSB7CiAgICAgICAg
ICAgICAgICAgLy8gU3RyZXRjaGluZyBvbmx5IGluIHRoZSB2ZXJ0aWNhbC4KLSAgICAgICAgICAg
ICAgICBpZiAoZGVsdGFZICE9IDAgJiYgKGZhYnNmKGRlbHRhWCAvIGRlbHRhWSkgPCBydWJiZXJi
YW5kRGlyZWN0aW9uTG9ja1N0cmV0Y2hSYXRpbykpCisgICAgICAgICAgICAgICAgaWYgKGRlbHRh
WSAmJiAoZmFic2YoZGVsdGFYIC8gZGVsdGFZKSA8IHJ1YmJlcmJhbmREaXJlY3Rpb25Mb2NrU3Ry
ZXRjaFJhdGlvKSkKICAgICAgICAgICAgICAgICAgICAgZGVsdGFYID0gMDsKICAgICAgICAgICAg
ICAgICBlbHNlIGlmIChmYWJzZihkZWx0YVgpIDwgcnViYmVyYmFuZE1pbmltdW1SZXF1aXJlZERl
bHRhQmVmb3JlU3RyZXRjaCkgewogICAgICAgICAgICAgICAgICAgICBtX292ZXJmbG93U2Nyb2xs
RGVsdGEuc2V0V2lkdGgobV9vdmVyZmxvd1Njcm9sbERlbHRhLndpZHRoKCkgKyBkZWx0YVgpOwpA
QCAtMjAxLDcgKzIwMSw3IEBAIGJvb2wgU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXI6OmhhbmRs
ZVcKICAgICAgICAgfSBlbHNlIGlmIChpc0hvcml6b250YWxseVN0cmV0Y2hlZCkgewogICAgICAg
ICAgICAgLy8gU3RyZXRjaGluZyBvbmx5IGluIHRoZSBob3Jpem9udGFsLgogICAgICAgICAgICAg
aWYgKG1fY2xpZW50LT5waW5uZWRJbkRpcmVjdGlvbihGbG9hdFNpemUoMCwgZGVsdGFZKSkpIHsK
LSAgICAgICAgICAgICAgICBpZiAoZGVsdGFYICE9IDAgJiYgKGZhYnNmKGRlbHRhWSAvIGRlbHRh
WCkgPCBydWJiZXJiYW5kRGlyZWN0aW9uTG9ja1N0cmV0Y2hSYXRpbykpCisgICAgICAgICAgICAg
ICAgaWYgKGRlbHRhWCAmJiAoZmFic2YoZGVsdGFZIC8gZGVsdGFYKSA8IHJ1YmJlcmJhbmREaXJl
Y3Rpb25Mb2NrU3RyZXRjaFJhdGlvKSkKICAgICAgICAgICAgICAgICAgICAgZGVsdGFZID0gMDsK
ICAgICAgICAgICAgICAgICBlbHNlIGlmIChmYWJzZihkZWx0YVkpIDwgcnViYmVyYmFuZE1pbmlt
dW1SZXF1aXJlZERlbHRhQmVmb3JlU3RyZXRjaCkgewogICAgICAgICAgICAgICAgICAgICBtX292
ZXJmbG93U2Nyb2xsRGVsdGEuc2V0SGVpZ2h0KG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5oZWlnaHQo
KSArIGRlbHRhWSk7CkBAIC0yMjQsMTMgKzIyNCwxMyBAQCBib29sIFNjcm9sbEVsYXN0aWNpdHlD
b250cm9sbGVyOjpoYW5kbGVXCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoZGVsdGFYICE9
IDAgfHwgZGVsdGFZICE9IDApIHsKKyAgICBpZiAoZGVsdGFYIHx8IGRlbHRhWSkgewogICAgICAg
ICBpZiAoIShzaG91bGRTdHJldGNoIHx8IGlzVmVydGljYWxseVN0cmV0Y2hlZCB8fCBpc0hvcml6
b250YWxseVN0cmV0Y2hlZCkpIHsKLSAgICAgICAgICAgIGlmIChkZWx0YVkgIT0gMCkgeworICAg
ICAgICAgICAgaWYgKGRlbHRhWSkgewogICAgICAgICAgICAgICAgIGRlbHRhWSAqPSBzY3JvbGxX
aGVlbE11bHRpcGxpZXIoKTsKICAgICAgICAgICAgICAgICBtX2NsaWVudC0+aW1tZWRpYXRlU2Ny
b2xsQnkoRmxvYXRTaXplKDAsIGRlbHRhWSkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
aWYgKGRlbHRhWCAhPSAwKSB7CisgICAgICAgICAgICBpZiAoZGVsdGFYKSB7CiAgICAgICAgICAg
ICAgICAgZGVsdGFYICo9IHNjcm9sbFdoZWVsTXVsdGlwbGllcigpOwogICAgICAgICAgICAgICAg
IG1fY2xpZW50LT5pbW1lZGlhdGVTY3JvbGxCeShGbG9hdFNpemUoZGVsdGFYLCAwKSk7CiAgICAg
ICAgICAgICB9CkBAIC0yMzgsNyArMjM4LDcgQEAgYm9vbCBTY3JvbGxFbGFzdGljaXR5Q29udHJv
bGxlcjo6aGFuZGxlVwogICAgICAgICAgICAgaWYgKCFtX2NsaWVudC0+YWxsb3dzSG9yaXpvbnRh
bFN0cmV0Y2hpbmcod2hlZWxFdmVudCkpIHsKICAgICAgICAgICAgICAgICBkZWx0YVggPSAwOwog
ICAgICAgICAgICAgICAgIGV2ZW50Q29hbGVzY2VkRGVsdGFYID0gMDsKLSAgICAgICAgICAgIH0g
ZWxzZSBpZiAoKGRlbHRhWCAhPSAwKSAmJiAhaXNIb3Jpem9udGFsbHlTdHJldGNoZWQgJiYgIW1f
Y2xpZW50LT5waW5uZWRJbkRpcmVjdGlvbihGbG9hdFNpemUoZGVsdGFYLCAwKSkpIHsKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAoZGVsdGFYICYmICFpc0hvcml6b250YWxseVN0cmV0Y2hlZCAmJiAh
bV9jbGllbnQtPnBpbm5lZEluRGlyZWN0aW9uKEZsb2F0U2l6ZShkZWx0YVgsIDApKSkgewogICAg
ICAgICAgICAgICAgIGRlbHRhWCAqPSBzY3JvbGxXaGVlbE11bHRpcGxpZXIoKTsKIAogICAgICAg
ICAgICAgICAgIG1fY2xpZW50LT5pbW1lZGlhdGVTY3JvbGxCeVdpdGhvdXRDb250ZW50RWRnZUNv
bnN0cmFpbnRzKEZsb2F0U2l6ZShkZWx0YVgsIDApKTsKQEAgLTI0OCw3ICsyNDgsNyBAQCBib29s
IFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyOjpoYW5kbGVXCiAgICAgICAgICAgICBpZiAoIW1f
Y2xpZW50LT5hbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcod2hlZWxFdmVudCkpIHsKICAgICAgICAg
ICAgICAgICBkZWx0YVkgPSAwOwogICAgICAgICAgICAgICAgIGV2ZW50Q29hbGVzY2VkRGVsdGFZ
ID0gMDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoKGRlbHRhWSAhPSAwKSAmJiAhaXNWZXJ0aWNh
bGx5U3RyZXRjaGVkICYmICFtX2NsaWVudC0+cGlubmVkSW5EaXJlY3Rpb24oRmxvYXRTaXplKDAs
IGRlbHRhWSkpKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGRlbHRhWSAmJiAhaXNWZXJ0aWNh
bGx5U3RyZXRjaGVkICYmICFtX2NsaWVudC0+cGlubmVkSW5EaXJlY3Rpb24oRmxvYXRTaXplKDAs
IGRlbHRhWSkpKSB7CiAgICAgICAgICAgICAgICAgZGVsdGFZICo9IHNjcm9sbFdoZWVsTXVsdGlw
bGllcigpOwogCiAgICAgICAgICAgICAgICAgbV9jbGllbnQtPmltbWVkaWF0ZVNjcm9sbEJ5V2l0
aG91dENvbnRlbnRFZGdlQ29uc3RyYWludHMoRmxvYXRTaXplKDAsIGRlbHRhWSkpOwpAQCAtMjk3
LDcgKzI5Nyw3IEBAIHN0YXRpYyBpbmxpbmUgZmxvYXQgcm91bmRUb0RldmljZVBpeGVsVG8KICAg
ICByZXR1cm4gcm91bmRUb3dhcmRaZXJvKG51bSk7CiB9CiAKLXZvaWQgU2Nyb2xsRWxhc3RpY2l0
eUNvbnRyb2xsZXI6OnNuYXBSdWJiZXJCYW5kVGltZXJGaXJlZCgpCit2b2lkIFNjcm9sbENvbnRy
b2xsZXI6OnNuYXBSdWJiZXJCYW5kVGltZXJGaXJlZCgpCiB7CiAgICAgaWYgKCFtX21vbWVudHVt
U2Nyb2xsSW5Qcm9ncmVzcyB8fCBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscykgewogICAgICAgICBD
RlRpbWVJbnRlcnZhbCB0aW1lRGVsdGEgPSBbTlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVmZXJl
bmNlRGF0ZV0gLSBtX3N0YXJ0VGltZTsKQEAgLTMzMiw3ICszMzIsNyBAQCB2b2lkIFNjcm9sbEVs
YXN0aWNpdHlDb250cm9sbGVyOjpzbmFwUnViCiAgICAgICAgIH0KIAogICAgICAgICBGbG9hdFBv
aW50IGRlbHRhKHJvdW5kVG9EZXZpY2VQaXhlbFRvd2FyZFplcm8oZWxhc3RpY0RlbHRhRm9yVGlt
ZURlbHRhKG1fc3RhcnRTdHJldGNoLndpZHRoKCksIC1tX29yaWdWZWxvY2l0eS53aWR0aCgpLCAo
ZmxvYXQpdGltZURlbHRhKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgcm91bmRUb0Rldmlj
ZVBpeGVsVG93YXJkWmVybyhlbGFzdGljRGVsdGFGb3JUaW1lRGVsdGEobV9zdGFydFN0cmV0Y2gu
aGVpZ2h0KCksIC1tX29yaWdWZWxvY2l0eS5oZWlnaHQoKSwgKGZsb2F0KXRpbWVEZWx0YSkpKTsK
KyAgICAgICAgICAgIHJvdW5kVG9EZXZpY2VQaXhlbFRvd2FyZFplcm8oZWxhc3RpY0RlbHRhRm9y
VGltZURlbHRhKG1fc3RhcnRTdHJldGNoLmhlaWdodCgpLCAtbV9vcmlnVmVsb2NpdHkuaGVpZ2h0
KCksIChmbG9hdCl0aW1lRGVsdGEpKSk7CiAKICAgICAgICAgaWYgKGZhYnMoZGVsdGEueCgpKSA+
PSAxIHx8IGZhYnMoZGVsdGEueSgpKSA+PSAxKSB7CiAgICAgICAgICAgICBtX2NsaWVudC0+aW1t
ZWRpYXRlU2Nyb2xsQnlXaXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyhGbG9hdFNpemUoZGVs
dGEueCgpLCBkZWx0YS55KCkpIC0gbV9jbGllbnQtPnN0cmV0Y2hBbW91bnQoKSk7CkBAIC0zNTcs
NyArMzU3LDcgQEAgdm9pZCBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlcjo6c25hcFJ1YgogICAg
IH0KIH0KIAotYm9vbCBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlcjo6aXNSdWJiZXJCYW5kSW5Q
cm9ncmVzcygpIGNvbnN0Citib29sIFNjcm9sbENvbnRyb2xsZXI6OmlzUnViYmVyQmFuZEluUHJv
Z3Jlc3MoKSBjb25zdAogewogICAgIGlmICghbV9pblNjcm9sbEdlc3R1cmUgJiYgIW1fbW9tZW50
dW1TY3JvbGxJblByb2dyZXNzICYmICFtX3NuYXBSdWJiZXJiYW5kVGltZXJJc0FjdGl2ZSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzY1LDEzICszNjUsMTMgQEAgYm9vbCBTY3JvbGxFbGFz
dGljaXR5Q29udHJvbGxlcjo6aXNSdWJiZQogICAgIHJldHVybiAhbV9jbGllbnQtPnN0cmV0Y2hB
bW91bnQoKS5pc1plcm8oKTsKIH0KIAotdm9pZCBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlcjo6
c3RvcFNuYXBSdWJiZXJiYW5kVGltZXIoKQordm9pZCBTY3JvbGxDb250cm9sbGVyOjpzdG9wU25h
cFJ1YmJlcmJhbmRUaW1lcigpCiB7CiAgICAgbV9jbGllbnQtPnN0b3BTbmFwUnViYmVyYmFuZFRp
bWVyKCk7CiAgICAgbV9zbmFwUnViYmVyYmFuZFRpbWVySXNBY3RpdmUgPSBmYWxzZTsKIH0KIAot
dm9pZCBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlcjo6c25hcFJ1YmJlckJhbmQoKQordm9pZCBT
Y3JvbGxDb250cm9sbGVyOjpzbmFwUnViYmVyQmFuZCgpCiB7CiAgICAgQ0ZUaW1lSW50ZXJ2YWwg
dGltZURlbHRhID0gc3lzdGVtVXB0aW1lKCkgLSBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFt
cDsKICAgICBpZiAobV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAgJiYgdGltZURlbHRhID49
IHNjcm9sbFZlbG9jaXR5WmVyb2luZ1RpbWVvdXQpCkBAIC0zOTEsNyArMzkxLDcgQEAgdm9pZCBT
Y3JvbGxFbGFzdGljaXR5Q29udHJvbGxlcjo6c25hcFJ1YgogICAgIG1fc25hcFJ1YmJlcmJhbmRU
aW1lcklzQWN0aXZlID0gdHJ1ZTsKIH0KIAotYm9vbCBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxl
cjo6c2hvdWxkUnViYmVyQmFuZEluSG9yaXpvbnRhbERpcmVjdGlvbihjb25zdCBQbGF0Zm9ybVdo
ZWVsRXZlbnQmIHdoZWVsRXZlbnQpCitib29sIFNjcm9sbENvbnRyb2xsZXI6OnNob3VsZFJ1YmJl
ckJhbmRJbkhvcml6b250YWxEaXJlY3Rpb24oY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVl
bEV2ZW50KQogewogICAgIGlmICh3aGVlbEV2ZW50LmRlbHRhWCgpID4gMCkKICAgICAgICAgcmV0
dXJuIG1fY2xpZW50LT5zaG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rpb24oU2Nyb2xsTGVmdCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xs
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsRWxh
c3RpY2l0eUNvbnRyb2xsZXIuaAkocmV2aXNpb24gMTgwNDIwKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1Njcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsMTA3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFNjcm9sbEVsYXN0aWNpdHlD
b250cm9sbGVyX2gKLSNkZWZpbmUgU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXJfaAotCi0jaWYg
RU5BQkxFKFJVQkJFUl9CQU5ESU5HKQotCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1
ZGUgIkZsb2F0U2l6ZS5oIgotI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCi0jaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUGxhdGZvcm1X
aGVlbEV2ZW50OwotCi1jbGFzcyBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlckNsaWVudCB7Ci1w
cm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+U2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXJDbGllbnQo
KSB7IH0gCi0KLXB1YmxpYzoKLSAgICB2aXJ0dWFsIGJvb2wgYWxsb3dzSG9yaXpvbnRhbFN0cmV0
Y2hpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBh
bGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgPSAwOwot
ICAgIHZpcnR1YWwgSW50U2l6ZSBzdHJldGNoQW1vdW50KCkgPSAwOwotICAgIHZpcnR1YWwgYm9v
bCBwaW5uZWRJbkRpcmVjdGlvbihjb25zdCBGbG9hdFNpemUmKSA9IDA7Ci0gICAgdmlydHVhbCBi
b29sIGNhblNjcm9sbEhvcml6b250YWxseSgpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgY2FuU2Ny
b2xsVmVydGljYWxseSgpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUnViYmVyQmFuZElu
RGlyZWN0aW9uKFNjcm9sbERpcmVjdGlvbikgPSAwOwotCi0gICAgLy8gUmV0dXJuIHRoZSBhYnNv
bHV0ZSBzY3JvbGwgcG9zaXRpb24sIG5vdCByZWxhdGl2ZSB0byB0aGUgc2Nyb2xsIG9yaWdpbi4K
LSAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IGFic29sdXRlU2Nyb2xsUG9zaXRpb24oKSA9
IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaW1tZWRpYXRlU2Nyb2xsQnkoY29uc3QgRmxvYXRTaXpl
JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBpbW1lZGlhdGVTY3JvbGxCeVdpdGhvdXRDb250ZW50
RWRnZUNvbnN0cmFpbnRzKGNvbnN0IEZsb2F0U2l6ZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
c3RhcnRTbmFwUnViYmVyYmFuZFRpbWVyKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdG9wU25h
cFJ1YmJlcmJhbmRUaW1lcigpID0gMDsKLQotICAgIC8vIElmIHRoZSBjdXJyZW50IHNjcm9sbCBw
b3NpdGlvbiBpcyB3aXRoaW4gdGhlIG92ZXJoYW5nIGFyZWEsIHRoaXMgZnVuY3Rpb24gd2lsbCBj
YXVzZQotICAgIC8vIHRoZSBwYWdlIHRvIHNjcm9sbCB0byB0aGUgbmVhcmVzdCBib3VuZGFyeSBw
b2ludC4KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2Nyb2xsUG9zaXRpb25Ub0JvdW5kc0lmTmVj
ZXNzYXJ5KCkgPSAwOwotfTsKLQotY2xhc3MgU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIgewot
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyKTsKLQot
cHVibGljOgotICAgIGV4cGxpY2l0IFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyKFNjcm9sbEVs
YXN0aWNpdHlDb250cm9sbGVyQ2xpZW50Kik7Ci0KLSAgICBib29sIGhhbmRsZVdoZWVsRXZlbnQo
Y29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7Ci0gICAgdm9pZCBzbmFwUnViYmVyQmFuZFRpbWVy
RmlyZWQoKTsKLQotICAgIGJvb2wgaXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpIGNvbnN0OwotCi1w
cml2YXRlOgotICAgIHZvaWQgc3RvcFNuYXBSdWJiZXJiYW5kVGltZXIoKTsKLSAgICB2b2lkIHNu
YXBSdWJiZXJCYW5kKCk7Ci0KLSAgICBib29sIHNob3VsZFJ1YmJlckJhbmRJbkhvcml6b250YWxE
aXJlY3Rpb24oY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7Ci0KLSAgICBTY3JvbGxFbGFzdGlj
aXR5Q29udHJvbGxlckNsaWVudCogbV9jbGllbnQ7Ci0KLSAgICBib29sIG1faW5TY3JvbGxHZXN0
dXJlOwotICAgIGJvb2wgbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3M7Ci0gICAgYm9vbCBtX2ln
bm9yZU1vbWVudHVtU2Nyb2xsczsKLSAgICAKLSAgICBDRlRpbWVJbnRlcnZhbCBtX2xhc3RNb21l
bnR1bVNjcm9sbFRpbWVzdGFtcDsKLSAgICBGbG9hdFNpemUgbV9vdmVyZmxvd1Njcm9sbERlbHRh
OwotICAgIEZsb2F0U2l6ZSBtX3N0cmV0Y2hTY3JvbGxGb3JjZTsKLSAgICBGbG9hdFNpemUgbV9t
b21lbnR1bVZlbG9jaXR5OwotCi0gICAgLy8gUnViYmVyIGJhbmQgc3RhdGUuCi0gICAgQ0ZUaW1l
SW50ZXJ2YWwgbV9zdGFydFRpbWU7Ci0gICAgRmxvYXRTaXplIG1fc3RhcnRTdHJldGNoOwotICAg
IEZsb2F0UG9pbnQgbV9vcmlnT3JpZ2luOwotICAgIEZsb2F0U2l6ZSBtX29yaWdWZWxvY2l0eTsK
LQotICAgIGJvb2wgbV9zbmFwUnViYmVyYmFuZFRpbWVySXNBY3RpdmU7Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCi0KLSNl
bmRpZiAvLyBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEVsYXN0aWNpdHlDb250cm9sbGVy
Lm1tCShyZXZpc2lvbiAxODA0MjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Ny
b2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNDA2ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2Nyb2xsRWxh
c3RpY2l0eUNvbnRyb2xsZXIuaCIKLQotI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgot
I2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKLSNpbmNsdWRlIDxzeXMvdGltZS5o
PgotI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KLQotI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykK
LQotc3RhdGljIE5TVGltZUludGVydmFsIHN5c3RlbVVwdGltZSgpCi17Ci0gICAgaWYgKFtbTlNQ
cm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihzeXN0
ZW1VcHRpbWUpXSkKLSAgICAgICAgcmV0dXJuIFtbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10g
c3lzdGVtVXB0aW1lXTsKLQotICAgIC8vIEdldCBob3cgbG9uZyBzeXN0ZW0gaGFzIGJlZW4gdXAu
IEZvdW5kIGJ5IGxvb2tpbmcgZ2V0dGluZyAiYm9vdHRpbWUiIGZyb20gdGhlIGtlcm5lbC4KLSAg
ICBzdGF0aWMgc3RydWN0IHRpbWV2YWwgYm9vdHRpbWUgPSB7MCwgMH07Ci0gICAgaWYgKCFib290
dGltZS50dl9zZWMpIHsKLSAgICAgICAgaW50IG1pYlsyXSA9IHtDVExfS0VSTiwgS0VSTl9CT09U
VElNRX07Ci0gICAgICAgIHNpemVfdCBzaXplID0gc2l6ZW9mKGJvb3R0aW1lKTsKLSAgICAgICAg
aWYgKC0xID09IHN5c2N0bChtaWIsIDIsICZib290dGltZSwgJnNpemUsIDAsIDApKQotICAgICAg
ICAgICAgYm9vdHRpbWUudHZfc2VjID0gMDsKLSAgICB9Ci0gICAgc3RydWN0IHRpbWV2YWwgbm93
OwotICAgIGlmIChib290dGltZS50dl9zZWMgJiYgLTEgIT0gZ2V0dGltZW9mZGF5KCZub3csIDAp
KSB7Ci0gICAgICAgIHN0cnVjdCB0aW1ldmFsIHVwdGltZTsKLSAgICAgICAgdGltZXJzdWIoJm5v
dywgJmJvb3R0aW1lLCAmdXB0aW1lKTsKLSAgICAgICAgTlNUaW1lSW50ZXJ2YWwgcmVzdWx0ID0g
dXB0aW1lLnR2X3NlYyArICh1cHRpbWUudHZfdXNlYyAvIDFFKzYpOwotICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLXN0YXRpYyBjb25zdCBmbG9hdCBzY3JvbGxWZWxvY2l0eVplcm9pbmdUaW1lb3V0ID0gMC4x
MGY7Ci1zdGF0aWMgY29uc3QgZmxvYXQgcnViYmVyYmFuZERpcmVjdGlvbkxvY2tTdHJldGNoUmF0
aW8gPSAxOwotc3RhdGljIGNvbnN0IGZsb2F0IHJ1YmJlcmJhbmRNaW5pbXVtUmVxdWlyZWREZWx0
YUJlZm9yZVN0cmV0Y2ggPSAxMDsKLQotc3RhdGljIGZsb2F0IGVsYXN0aWNEZWx0YUZvclRpbWVE
ZWx0YShmbG9hdCBpbml0aWFsUG9zaXRpb24sIGZsb2F0IGluaXRpYWxWZWxvY2l0eSwgZmxvYXQg
ZWxhcHNlZFRpbWUpCi17Ci0gICAgcmV0dXJuIHdrTlNFbGFzdGljRGVsdGFGb3JUaW1lRGVsdGEo
aW5pdGlhbFBvc2l0aW9uLCBpbml0aWFsVmVsb2NpdHksIGVsYXBzZWRUaW1lKTsKLX0KLQotc3Rh
dGljIGZsb2F0IGVsYXN0aWNEZWx0YUZvclJlYm91bmREZWx0YShmbG9hdCBkZWx0YSkKLXsKLSAg
ICByZXR1cm4gd2tOU0VsYXN0aWNEZWx0YUZvclJlYm91bmREZWx0YShkZWx0YSk7Ci19Ci0KLXN0
YXRpYyBmbG9hdCByZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEoZmxvYXQgZGVsdGEpCi17Ci0g
ICAgcmV0dXJuIHdrTlNSZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEoZGVsdGEpOwotfQotCi1z
dGF0aWMgZmxvYXQgc2Nyb2xsV2hlZWxNdWx0aXBsaWVyKCkKLXsKLSAgICBzdGF0aWMgZmxvYXQg
bXVsdGlwbGllciA9IC0xOwotICAgIGlmIChtdWx0aXBsaWVyIDwgMCkgewotICAgICAgICBtdWx0
aXBsaWVyID0gW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gZmxvYXRGb3JL
ZXk6QCJOU1Njcm9sbFdoZWVsTXVsdGlwbGllciJdOwotICAgICAgICBpZiAobXVsdGlwbGllciA8
PSAwKQotICAgICAgICAgICAgbXVsdGlwbGllciA9IDE7Ci0gICAgfQotICAgIHJldHVybiBtdWx0
aXBsaWVyOwotfQotCi1TY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlcjo6U2Nyb2xsRWxhc3RpY2l0
eUNvbnRyb2xsZXIoU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXJDbGllbnQqIGNsaWVudCkKLSAg
ICA6IG1fY2xpZW50KGNsaWVudCkKLSAgICAsIG1faW5TY3JvbGxHZXN0dXJlKGZhbHNlKQotICAg
ICwgbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MoZmFsc2UpCi0gICAgLCBtX2lnbm9yZU1vbWVu
dHVtU2Nyb2xscyhmYWxzZSkKLSAgICAsIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGltZXN0YW1wKDAp
Ci0gICAgLCBtX3N0YXJ0VGltZSgwKQotICAgICwgbV9zbmFwUnViYmVyYmFuZFRpbWVySXNBY3Rp
dmUoZmFsc2UpCi17Ci19Ci0KLWJvb2wgU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXI6OmhhbmRs
ZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQotewotICAg
IGlmICh3aGVlbEV2ZW50LnBoYXNlKCkgPT0gUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2VCZWdhbikg
ewotICAgICAgICAvLyBGaXJzdCwgY2hlY2sgaWYgd2Ugc2hvdWxkIHJ1YmJlci1iYW5kIGF0IGFs
bC4KLSAgICAgICAgaWYgKG1fY2xpZW50LT5waW5uZWRJbkRpcmVjdGlvbihGbG9hdFNpemUoLXdo
ZWVsRXZlbnQuZGVsdGFYKCksIDApKSAmJgotICAgICAgICAgICAgIXNob3VsZFJ1YmJlckJhbmRJ
bkhvcml6b250YWxEaXJlY3Rpb24od2hlZWxFdmVudCkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgbV9pblNjcm9sbEdlc3R1cmUgPSB0cnVlOwotICAgICAgICBtX21vbWVu
dHVtU2Nyb2xsSW5Qcm9ncmVzcyA9IGZhbHNlOwotICAgICAgICBtX2lnbm9yZU1vbWVudHVtU2Ny
b2xscyA9IGZhbHNlOwotICAgICAgICBtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcCA9IDA7
Ci0gICAgICAgIG1fbW9tZW50dW1WZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOwotCi0gICAgICAgIElu
dFNpemUgc3RyZXRjaEFtb3VudCA9IG1fY2xpZW50LT5zdHJldGNoQW1vdW50KCk7Ci0gICAgICAg
IG1fc3RyZXRjaFNjcm9sbEZvcmNlLnNldFdpZHRoKHJlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0
YShzdHJldGNoQW1vdW50LndpZHRoKCkpKTsKLSAgICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uu
c2V0SGVpZ2h0KHJlYm91bmREZWx0YUZvckVsYXN0aWNEZWx0YShzdHJldGNoQW1vdW50LmhlaWdo
dCgpKSk7Ci0gICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YSA9IEZsb2F0U2l6ZSgpOwotCi0g
ICAgICAgIHN0b3BTbmFwUnViYmVyYmFuZFRpbWVyKCk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0gICAgaWYgKHdoZWVsRXZlbnQucGhhc2UoKSA9PSBQbGF0Zm9ybVdoZWVsRXZl
bnRQaGFzZUVuZGVkKSB7Ci0gICAgICAgIHNuYXBSdWJiZXJCYW5kKCk7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIGJvb2wgaXNNb21lbnR1bVNjcm9sbEV2ZW50ID0gKHdoZWVs
RXZlbnQubW9tZW50dW1QaGFzZSgpICE9IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlTm9uZSk7Ci0g
ICAgaWYgKG1faWdub3JlTW9tZW50dW1TY3JvbGxzICYmIChpc01vbWVudHVtU2Nyb2xsRXZlbnQg
fHwgbV9zbmFwUnViYmVyYmFuZFRpbWVySXNBY3RpdmUpKSB7Ci0gICAgICAgIGlmICh3aGVlbEV2
ZW50Lm1vbWVudHVtUGhhc2UoKSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUVuZGVkKSB7Ci0g
ICAgICAgICAgICBtX2lnbm9yZU1vbWVudHVtU2Nyb2xscyA9IGZhbHNlOwotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIGZsb2F0IGRlbHRhWCA9IG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS53aWR0aCgpOwotICAgIGZs
b2F0IGRlbHRhWSA9IG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5oZWlnaHQoKTsKLQotICAgIC8vIFJl
c2V0IG92ZXJmbG93IHZhbHVlcyBiZWNhdXNlIHdlIG1heSBkZWNpZGUgdG8gcmVtb3ZlIGRlbHRh
IGF0IHZhcmlvdXMgcG9pbnRzIGFuZCBwdXQgaXQgaW50byBvdmVyZmxvdy4KLSAgICBtX292ZXJm
bG93U2Nyb2xsRGVsdGEgPSBGbG9hdFNpemUoKTsKLQotICAgIEludFNpemUgc3RyZXRjaEFtb3Vu
dCA9IG1fY2xpZW50LT5zdHJldGNoQW1vdW50KCk7Ci0gICAgYm9vbCBpc1ZlcnRpY2FsbHlTdHJl
dGNoZWQgPSBzdHJldGNoQW1vdW50LmhlaWdodCgpOwotICAgIGJvb2wgaXNIb3Jpem9udGFsbHlT
dHJldGNoZWQgPSBzdHJldGNoQW1vdW50LndpZHRoKCk7Ci0KLSAgICBmbG9hdCBldmVudENvYWxl
c2NlZERlbHRhWDsKLSAgICBmbG9hdCBldmVudENvYWxlc2NlZERlbHRhWTsKLQotICAgIGlmIChp
c1ZlcnRpY2FsbHlTdHJldGNoZWQgfHwgaXNIb3Jpem9udGFsbHlTdHJldGNoZWQpIHsKLSAgICAg
ICAgZXZlbnRDb2FsZXNjZWREZWx0YVggPSAtd2hlZWxFdmVudC51bmFjY2VsZXJhdGVkU2Nyb2xs
aW5nRGVsdGFYKCk7Ci0gICAgICAgIGV2ZW50Q29hbGVzY2VkRGVsdGFZID0gLXdoZWVsRXZlbnQu
dW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhWSgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGV2
ZW50Q29hbGVzY2VkRGVsdGFYID0gLXdoZWVsRXZlbnQuZGVsdGFYKCk7Ci0gICAgICAgIGV2ZW50
Q29hbGVzY2VkRGVsdGFZID0gLXdoZWVsRXZlbnQuZGVsdGFZKCk7Ci0gICAgfQotCi0gICAgZGVs
dGFYICs9IGV2ZW50Q29hbGVzY2VkRGVsdGFYOwotICAgIGRlbHRhWSArPSBldmVudENvYWxlc2Nl
ZERlbHRhWTsKLQotICAgIC8vIFNsaWdodGx5IHByZWZlciBzY3JvbGxpbmcgdmVydGljYWxseSBi
eSBhcHBseWluZyB0aGUgPSBjYXNlIHRvIGRlbHRhWQotICAgIGlmIChmYWJzZihkZWx0YVkpID49
IGZhYnNmKGRlbHRhWCkpCi0gICAgICAgIGRlbHRhWCA9IDA7Ci0gICAgZWxzZQotICAgICAgICBk
ZWx0YVkgPSAwOwotCi0gICAgYm9vbCBzaG91bGRTdHJldGNoID0gZmFsc2U7Ci0KLSAgICBQbGF0
Zm9ybVdoZWVsRXZlbnRQaGFzZSBtb21lbnR1bVBoYXNlID0gd2hlZWxFdmVudC5tb21lbnR1bVBo
YXNlKCk7Ci0KLSAgICAvLyBJZiB3ZSBhcmUgc3RhcnRpbmcgbW9tZW50dW0gc2Nyb2xsaW5nIHRo
ZW4gZG8gc29tZSBzZXR1cC4KLSAgICBpZiAoIW1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzICYm
IChtb21lbnR1bVBoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlQmVnYW4gfHwgbW9tZW50
dW1QaGFzZSA9PSBQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZUNoYW5nZWQpKQotICAgICAgICBtX21v
bWVudHVtU2Nyb2xsSW5Qcm9ncmVzcyA9IHRydWU7Ci0KLSAgICBDRlRpbWVJbnRlcnZhbCB0aW1l
RGVsdGEgPSB3aGVlbEV2ZW50LnRpbWVzdGFtcCgpIC0gbV9sYXN0TW9tZW50dW1TY3JvbGxUaW1l
c3RhbXA7Ci0gICAgaWYgKG1faW5TY3JvbGxHZXN0dXJlIHx8IG1fbW9tZW50dW1TY3JvbGxJblBy
b2dyZXNzKSB7Ci0gICAgICAgIGlmIChtX2xhc3RNb21lbnR1bVNjcm9sbFRpbWVzdGFtcCAmJiB0
aW1lRGVsdGEgPiAwICYmIHRpbWVEZWx0YSA8IHNjcm9sbFZlbG9jaXR5WmVyb2luZ1RpbWVvdXQp
IHsKLSAgICAgICAgICAgIG1fbW9tZW50dW1WZWxvY2l0eS5zZXRXaWR0aChldmVudENvYWxlc2Nl
ZERlbHRhWCAvIChmbG9hdCl0aW1lRGVsdGEpOwotICAgICAgICAgICAgbV9tb21lbnR1bVZlbG9j
aXR5LnNldEhlaWdodChldmVudENvYWxlc2NlZERlbHRhWSAvIChmbG9hdCl0aW1lRGVsdGEpOwot
ICAgICAgICAgICAgbV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAgPSB3aGVlbEV2ZW50LnRp
bWVzdGFtcCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV9sYXN0TW9tZW50dW1T
Y3JvbGxUaW1lc3RhbXAgPSB3aGVlbEV2ZW50LnRpbWVzdGFtcCgpOwotICAgICAgICAgICAgbV9t
b21lbnR1bVZlbG9jaXR5ID0gRmxvYXRTaXplKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
aXNWZXJ0aWNhbGx5U3RyZXRjaGVkKSB7Ci0gICAgICAgICAgICBpZiAoIWlzSG9yaXpvbnRhbGx5
U3RyZXRjaGVkICYmIG1fY2xpZW50LT5waW5uZWRJbkRpcmVjdGlvbihGbG9hdFNpemUoZGVsdGFY
LCAwKSkpIHsKLSAgICAgICAgICAgICAgICAvLyBTdHJldGNoaW5nIG9ubHkgaW4gdGhlIHZlcnRp
Y2FsLgotICAgICAgICAgICAgICAgIGlmIChkZWx0YVkgIT0gMCAmJiAoZmFic2YoZGVsdGFYIC8g
ZGVsdGFZKSA8IHJ1YmJlcmJhbmREaXJlY3Rpb25Mb2NrU3RyZXRjaFJhdGlvKSkKLSAgICAgICAg
ICAgICAgICAgICAgZGVsdGFYID0gMDsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChmYWJzZihk
ZWx0YVgpIDwgcnViYmVyYmFuZE1pbmltdW1SZXF1aXJlZERlbHRhQmVmb3JlU3RyZXRjaCkgewot
ICAgICAgICAgICAgICAgICAgICBtX292ZXJmbG93U2Nyb2xsRGVsdGEuc2V0V2lkdGgobV9vdmVy
Zmxvd1Njcm9sbERlbHRhLndpZHRoKCkgKyBkZWx0YVgpOwotICAgICAgICAgICAgICAgICAgICBk
ZWx0YVggPSAwOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBt
X292ZXJmbG93U2Nyb2xsRGVsdGEuc2V0V2lkdGgobV9vdmVyZmxvd1Njcm9sbERlbHRhLndpZHRo
KCkgKyBkZWx0YVgpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGlzSG9yaXpv
bnRhbGx5U3RyZXRjaGVkKSB7Ci0gICAgICAgICAgICAvLyBTdHJldGNoaW5nIG9ubHkgaW4gdGhl
IGhvcml6b250YWwuCi0gICAgICAgICAgICBpZiAobV9jbGllbnQtPnBpbm5lZEluRGlyZWN0aW9u
KEZsb2F0U2l6ZSgwLCBkZWx0YVkpKSkgewotICAgICAgICAgICAgICAgIGlmIChkZWx0YVggIT0g
MCAmJiAoZmFic2YoZGVsdGFZIC8gZGVsdGFYKSA8IHJ1YmJlcmJhbmREaXJlY3Rpb25Mb2NrU3Ry
ZXRjaFJhdGlvKSkKLSAgICAgICAgICAgICAgICAgICAgZGVsdGFZID0gMDsKLSAgICAgICAgICAg
ICAgICBlbHNlIGlmIChmYWJzZihkZWx0YVkpIDwgcnViYmVyYmFuZE1pbmltdW1SZXF1aXJlZERl
bHRhQmVmb3JlU3RyZXRjaCkgewotICAgICAgICAgICAgICAgICAgICBtX292ZXJmbG93U2Nyb2xs
RGVsdGEuc2V0SGVpZ2h0KG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5oZWlnaHQoKSArIGRlbHRhWSk7
Ci0gICAgICAgICAgICAgICAgICAgIGRlbHRhWSA9IDA7Ci0gICAgICAgICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5zZXRIZWlnaHQobV9v
dmVyZmxvd1Njcm9sbERlbHRhLmhlaWdodCgpICsgZGVsdGFZKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIE5vdCBzdHJldGNoaW5nIGF0IGFsbCB5ZXQu
Ci0gICAgICAgICAgICBpZiAobV9jbGllbnQtPnBpbm5lZEluRGlyZWN0aW9uKEZsb2F0U2l6ZShk
ZWx0YVgsIGRlbHRhWSkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZhYnNmKGRlbHRhWSkgPj0g
ZmFic2YoZGVsdGFYKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoZmFic2YoZGVsdGFYKSA8
IHJ1YmJlcmJhbmRNaW5pbXVtUmVxdWlyZWREZWx0YUJlZm9yZVN0cmV0Y2gpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5zZXRXaWR0aChtX292ZXJmbG93
U2Nyb2xsRGVsdGEud2lkdGgoKSArIGRlbHRhWCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBk
ZWx0YVggPSAwOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG1fb3ZlcmZsb3dTY3JvbGxEZWx0YS5zZXRXaWR0aChtX292ZXJmbG93U2Nyb2xsRGVs
dGEud2lkdGgoKSArIGRlbHRhWCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IHNob3VsZFN0cmV0Y2ggPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKGRlbHRhWCAhPSAwIHx8IGRlbHRhWSAhPSAwKSB7Ci0gICAgICAgIGlmICghKHNo
b3VsZFN0cmV0Y2ggfHwgaXNWZXJ0aWNhbGx5U3RyZXRjaGVkIHx8IGlzSG9yaXpvbnRhbGx5U3Ry
ZXRjaGVkKSkgewotICAgICAgICAgICAgaWYgKGRlbHRhWSAhPSAwKSB7Ci0gICAgICAgICAgICAg
ICAgZGVsdGFZICo9IHNjcm9sbFdoZWVsTXVsdGlwbGllcigpOwotICAgICAgICAgICAgICAgIG1f
Y2xpZW50LT5pbW1lZGlhdGVTY3JvbGxCeShGbG9hdFNpemUoMCwgZGVsdGFZKSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAoZGVsdGFYICE9IDApIHsKLSAgICAgICAgICAgICAgICBk
ZWx0YVggKj0gc2Nyb2xsV2hlZWxNdWx0aXBsaWVyKCk7Ci0gICAgICAgICAgICAgICAgbV9jbGll
bnQtPmltbWVkaWF0ZVNjcm9sbEJ5KEZsb2F0U2l6ZShkZWx0YVgsIDApKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICghbV9jbGllbnQtPmFsbG93c0hv
cml6b250YWxTdHJldGNoaW5nKHdoZWVsRXZlbnQpKSB7Ci0gICAgICAgICAgICAgICAgZGVsdGFY
ID0gMDsKLSAgICAgICAgICAgICAgICBldmVudENvYWxlc2NlZERlbHRhWCA9IDA7Ci0gICAgICAg
ICAgICB9IGVsc2UgaWYgKChkZWx0YVggIT0gMCkgJiYgIWlzSG9yaXpvbnRhbGx5U3RyZXRjaGVk
ICYmICFtX2NsaWVudC0+cGlubmVkSW5EaXJlY3Rpb24oRmxvYXRTaXplKGRlbHRhWCwgMCkpKSB7
Ci0gICAgICAgICAgICAgICAgZGVsdGFYICo9IHNjcm9sbFdoZWVsTXVsdGlwbGllcigpOwotCi0g
ICAgICAgICAgICAgICAgbV9jbGllbnQtPmltbWVkaWF0ZVNjcm9sbEJ5V2l0aG91dENvbnRlbnRF
ZGdlQ29uc3RyYWludHMoRmxvYXRTaXplKGRlbHRhWCwgMCkpOwotICAgICAgICAgICAgICAgIGRl
bHRhWCA9IDA7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghbV9jbGllbnQtPmFs
bG93c1ZlcnRpY2FsU3RyZXRjaGluZyh3aGVlbEV2ZW50KSkgewotICAgICAgICAgICAgICAgIGRl
bHRhWSA9IDA7Ci0gICAgICAgICAgICAgICAgZXZlbnRDb2FsZXNjZWREZWx0YVkgPSAwOwotICAg
ICAgICAgICAgfSBlbHNlIGlmICgoZGVsdGFZICE9IDApICYmICFpc1ZlcnRpY2FsbHlTdHJldGNo
ZWQgJiYgIW1fY2xpZW50LT5waW5uZWRJbkRpcmVjdGlvbihGbG9hdFNpemUoMCwgZGVsdGFZKSkp
IHsKLSAgICAgICAgICAgICAgICBkZWx0YVkgKj0gc2Nyb2xsV2hlZWxNdWx0aXBsaWVyKCk7Ci0K
LSAgICAgICAgICAgICAgICBtX2NsaWVudC0+aW1tZWRpYXRlU2Nyb2xsQnlXaXRob3V0Q29udGVu
dEVkZ2VDb25zdHJhaW50cyhGbG9hdFNpemUoMCwgZGVsdGFZKSk7Ci0gICAgICAgICAgICAgICAg
ZGVsdGFZID0gMDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSW50U2l6ZSBzdHJldGNo
QW1vdW50ID0gbV9jbGllbnQtPnN0cmV0Y2hBbW91bnQoKTsKLQotICAgICAgICAgICAgaWYgKG1f
bW9tZW50dW1TY3JvbGxJblByb2dyZXNzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKChtX2NsaWVu
dC0+cGlubmVkSW5EaXJlY3Rpb24oRmxvYXRTaXplKGV2ZW50Q29hbGVzY2VkRGVsdGFYLCBldmVu
dENvYWxlc2NlZERlbHRhWSkpIHx8IChmYWJzZihldmVudENvYWxlc2NlZERlbHRhWCkgKyBmYWJz
ZihldmVudENvYWxlc2NlZERlbHRhWSkgPD0gMCkpICYmIG1fbGFzdE1vbWVudHVtU2Nyb2xsVGlt
ZXN0YW1wKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1faWdub3JlTW9tZW50dW1TY3JvbGxzID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MgPSBm
YWxzZTsKLSAgICAgICAgICAgICAgICAgICAgc25hcFJ1YmJlckJhbmQoKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNl
LnNldFdpZHRoKG1fc3RyZXRjaFNjcm9sbEZvcmNlLndpZHRoKCkgKyBkZWx0YVgpOwotICAgICAg
ICAgICAgbV9zdHJldGNoU2Nyb2xsRm9yY2Uuc2V0SGVpZ2h0KG1fc3RyZXRjaFNjcm9sbEZvcmNl
LmhlaWdodCgpICsgZGVsdGFZKTsKLQotICAgICAgICAgICAgRmxvYXRTaXplIGRhbXBlZERlbHRh
KGNlaWxmKGVsYXN0aWNEZWx0YUZvclJlYm91bmREZWx0YShtX3N0cmV0Y2hTY3JvbGxGb3JjZS53
aWR0aCgpKSksIGNlaWxmKGVsYXN0aWNEZWx0YUZvclJlYm91bmREZWx0YShtX3N0cmV0Y2hTY3Jv
bGxGb3JjZS5oZWlnaHQoKSkpKTsKLQotICAgICAgICAgICAgbV9jbGllbnQtPmltbWVkaWF0ZVNj
cm9sbEJ5V2l0aG91dENvbnRlbnRFZGdlQ29uc3RyYWludHMoZGFtcGVkRGVsdGEgLSBzdHJldGNo
QW1vdW50KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChtX21vbWVudHVtU2Nyb2xsSW5Q
cm9ncmVzcyAmJiBtb21lbnR1bVBoYXNlID09IFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlRW5kZWQp
IHsKLSAgICAgICAgbV9tb21lbnR1bVNjcm9sbEluUHJvZ3Jlc3MgPSBmYWxzZTsKLSAgICAgICAg
bV9pZ25vcmVNb21lbnR1bVNjcm9sbHMgPSBmYWxzZTsKLSAgICAgICAgbV9sYXN0TW9tZW50dW1T
Y3JvbGxUaW1lc3RhbXAgPSAwOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0
aWMgaW5saW5lIGZsb2F0IHJvdW5kVG93YXJkWmVybyhmbG9hdCBudW0pCi17Ci0gICAgcmV0dXJu
IG51bSA+IDAgPyBjZWlsZihudW0gLSAwLjVmKSA6IGZsb29yZihudW0gKyAwLjVmKTsKLX0KLQot
c3RhdGljIGlubGluZSBmbG9hdCByb3VuZFRvRGV2aWNlUGl4ZWxUb3dhcmRaZXJvKGZsb2F0IG51
bSkKLXsKLSAgICBmbG9hdCByb3VuZGVkTnVtID0gcm91bmRmKG51bSk7Ci0gICAgaWYgKGZhYnMo
bnVtIC0gcm91bmRlZE51bSkgPCAwLjEyNSkKLSAgICAgICAgbnVtID0gcm91bmRlZE51bTsKLQot
ICAgIHJldHVybiByb3VuZFRvd2FyZFplcm8obnVtKTsKLX0KLQotdm9pZCBTY3JvbGxFbGFzdGlj
aXR5Q29udHJvbGxlcjo6c25hcFJ1YmJlckJhbmRUaW1lckZpcmVkKCkKLXsKLSAgICBpZiAoIW1f
bW9tZW50dW1TY3JvbGxJblByb2dyZXNzIHx8IG1faWdub3JlTW9tZW50dW1TY3JvbGxzKSB7Ci0g
ICAgICAgIENGVGltZUludGVydmFsIHRpbWVEZWx0YSA9IFtOU0RhdGUgdGltZUludGVydmFsU2lu
Y2VSZWZlcmVuY2VEYXRlXSAtIG1fc3RhcnRUaW1lOwotCi0gICAgICAgIGlmIChtX3N0YXJ0U3Ry
ZXRjaCA9PSBGbG9hdFNpemUoKSkgewotICAgICAgICAgICAgbV9zdGFydFN0cmV0Y2ggPSBtX2Ns
aWVudC0+c3RyZXRjaEFtb3VudCgpOwotICAgICAgICAgICAgaWYgKG1fc3RhcnRTdHJldGNoID09
IEZsb2F0U2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgc3RvcFNuYXBSdWJiZXJiYW5kVGltZXIo
KTsKLQotICAgICAgICAgICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlID0gRmxvYXRTaXplKCk7
Ci0gICAgICAgICAgICAgICAgbV9zdGFydFRpbWUgPSAwOwotICAgICAgICAgICAgICAgIG1fc3Rh
cnRTdHJldGNoID0gRmxvYXRTaXplKCk7Ci0gICAgICAgICAgICAgICAgbV9vcmlnT3JpZ2luID0g
RmxvYXRQb2ludCgpOwotICAgICAgICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5ID0gRmxvYXRTaXpl
KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBtX29yaWdPcmlnaW4gPSBtX2NsaWVudC0+YWJzb2x1dGVTY3JvbGxQb3NpdGlvbigpIC0gbV9z
dGFydFN0cmV0Y2g7Ci0gICAgICAgICAgICBtX29yaWdWZWxvY2l0eSA9IG1fbW9tZW50dW1WZWxv
Y2l0eTsKLQotICAgICAgICAgICAgLy8gSnVzdCBsaWtlIG5vcm1hbCBzY3JvbGxpbmcsIHByZWZl
ciB2ZXJ0aWNhbCBydWJiZXJiYW5kaW5nCi0gICAgICAgICAgICBpZiAoZmFic2YobV9vcmlnVmVs
b2NpdHkuaGVpZ2h0KCkpID49IGZhYnNmKG1fb3JpZ1ZlbG9jaXR5LndpZHRoKCkpKQotICAgICAg
ICAgICAgICAgIG1fb3JpZ1ZlbG9jaXR5LnNldFdpZHRoKDApOwotCi0gICAgICAgICAgICAvLyBE
b24ndCBydWJiZXItYmFuZCBob3Jpem9udGFsbHkgaWYgaXQncyBub3QgcG9zc2libGUgdG8gc2Ny
b2xsIGhvcml6b250YWxseQotICAgICAgICAgICAgaWYgKCFtX2NsaWVudC0+Y2FuU2Nyb2xsSG9y
aXpvbnRhbGx5KCkpCi0gICAgICAgICAgICAgICAgbV9vcmlnVmVsb2NpdHkuc2V0V2lkdGgoMCk7
Ci0KLSAgICAgICAgICAgIC8vIERvbid0IHJ1YmJlci1iYW5kIHZlcnRpY2FsbHkgaWYgaXQncyBu
b3QgcG9zc2libGUgdG8gc2Nyb2xsIHZlcnRpY2FsbHkKLSAgICAgICAgICAgIGlmICghbV9jbGll
bnQtPmNhblNjcm9sbFZlcnRpY2FsbHkoKSkKLSAgICAgICAgICAgICAgICBtX29yaWdWZWxvY2l0
eS5zZXRIZWlnaHQoMCk7Ci0gICAgICAgIH0KLQotICAgICAgICBGbG9hdFBvaW50IGRlbHRhKHJv
dW5kVG9EZXZpY2VQaXhlbFRvd2FyZFplcm8oZWxhc3RpY0RlbHRhRm9yVGltZURlbHRhKG1fc3Rh
cnRTdHJldGNoLndpZHRoKCksIC1tX29yaWdWZWxvY2l0eS53aWR0aCgpLCAoZmxvYXQpdGltZURl
bHRhKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgcm91bmRUb0RldmljZVBpeGVsVG93YXJk
WmVybyhlbGFzdGljRGVsdGFGb3JUaW1lRGVsdGEobV9zdGFydFN0cmV0Y2guaGVpZ2h0KCksIC1t
X29yaWdWZWxvY2l0eS5oZWlnaHQoKSwgKGZsb2F0KXRpbWVEZWx0YSkpKTsKLQotICAgICAgICBp
ZiAoZmFicyhkZWx0YS54KCkpID49IDEgfHwgZmFicyhkZWx0YS55KCkpID49IDEpIHsKLSAgICAg
ICAgICAgIG1fY2xpZW50LT5pbW1lZGlhdGVTY3JvbGxCeVdpdGhvdXRDb250ZW50RWRnZUNvbnN0
cmFpbnRzKEZsb2F0U2l6ZShkZWx0YS54KCksIGRlbHRhLnkoKSkgLSBtX2NsaWVudC0+c3RyZXRj
aEFtb3VudCgpKTsKLQotICAgICAgICAgICAgRmxvYXRTaXplIG5ld1N0cmV0Y2ggPSBtX2NsaWVu
dC0+c3RyZXRjaEFtb3VudCgpOwotCi0gICAgICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5z
ZXRXaWR0aChyZWJvdW5kRGVsdGFGb3JFbGFzdGljRGVsdGEobmV3U3RyZXRjaC53aWR0aCgpKSk7
Ci0gICAgICAgICAgICBtX3N0cmV0Y2hTY3JvbGxGb3JjZS5zZXRIZWlnaHQocmVib3VuZERlbHRh
Rm9yRWxhc3RpY0RlbHRhKG5ld1N0cmV0Y2guaGVpZ2h0KCkpKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIG1fY2xpZW50LT5hZGp1c3RTY3JvbGxQb3NpdGlvblRvQm91bmRzSWZOZWNl
c3NhcnkoKTsKLQotICAgICAgICAgICAgc3RvcFNuYXBSdWJiZXJiYW5kVGltZXIoKTsKLSAgICAg
ICAgICAgIG1fc3RyZXRjaFNjcm9sbEZvcmNlID0gRmxvYXRTaXplKCk7Ci0gICAgICAgICAgICBt
X3N0YXJ0VGltZSA9IDA7Ci0gICAgICAgICAgICBtX3N0YXJ0U3RyZXRjaCA9IEZsb2F0U2l6ZSgp
OwotICAgICAgICAgICAgbV9vcmlnT3JpZ2luID0gRmxvYXRQb2ludCgpOwotICAgICAgICAgICAg
bV9vcmlnVmVsb2NpdHkgPSBGbG9hdFNpemUoKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIG1fc3RhcnRUaW1lID0gW05TRGF0ZSB0aW1lSW50ZXJ2YWxTaW5jZVJlZmVyZW5jZURh
dGVdOwotICAgICAgICBtX3N0YXJ0U3RyZXRjaCA9IEZsb2F0U2l6ZSgpOwotICAgIH0KLX0KLQot
Ym9vbCBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlcjo6aXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygp
IGNvbnN0Ci17Ci0gICAgaWYgKCFtX2luU2Nyb2xsR2VzdHVyZSAmJiAhbV9tb21lbnR1bVNjcm9s
bEluUHJvZ3Jlc3MgJiYgIW1fc25hcFJ1YmJlcmJhbmRUaW1lcklzQWN0aXZlKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gIW1fY2xpZW50LT5zdHJldGNoQW1vdW50KCkuaXNa
ZXJvKCk7Ci19Ci0KLXZvaWQgU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXI6OnN0b3BTbmFwUnVi
YmVyYmFuZFRpbWVyKCkKLXsKLSAgICBtX2NsaWVudC0+c3RvcFNuYXBSdWJiZXJiYW5kVGltZXIo
KTsKLSAgICBtX3NuYXBSdWJiZXJiYW5kVGltZXJJc0FjdGl2ZSA9IGZhbHNlOwotfQotCi12b2lk
IFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyOjpzbmFwUnViYmVyQmFuZCgpCi17Ci0gICAgQ0ZU
aW1lSW50ZXJ2YWwgdGltZURlbHRhID0gc3lzdGVtVXB0aW1lKCkgLSBtX2xhc3RNb21lbnR1bVNj
cm9sbFRpbWVzdGFtcDsKLSAgICBpZiAobV9sYXN0TW9tZW50dW1TY3JvbGxUaW1lc3RhbXAgJiYg
dGltZURlbHRhID49IHNjcm9sbFZlbG9jaXR5WmVyb2luZ1RpbWVvdXQpCi0gICAgICAgIG1fbW9t
ZW50dW1WZWxvY2l0eSA9IEZsb2F0U2l6ZSgpOwotCi0gICAgbV9pblNjcm9sbEdlc3R1cmUgPSBm
YWxzZTsKLQotICAgIGlmIChtX3NuYXBSdWJiZXJiYW5kVGltZXJJc0FjdGl2ZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9zdGFydFRpbWUgPSBbTlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVm
ZXJlbmNlRGF0ZV07Ci0gICAgbV9zdGFydFN0cmV0Y2ggPSBGbG9hdFNpemUoKTsKLSAgICBtX29y
aWdPcmlnaW4gPSBGbG9hdFBvaW50KCk7Ci0gICAgbV9vcmlnVmVsb2NpdHkgPSBGbG9hdFNpemUo
KTsKLQotICAgIG1fY2xpZW50LT5zdGFydFNuYXBSdWJiZXJiYW5kVGltZXIoKTsKLSAgICBtX3Nu
YXBSdWJiZXJiYW5kVGltZXJJc0FjdGl2ZSA9IHRydWU7Ci19Ci0KLWJvb2wgU2Nyb2xsRWxhc3Rp
Y2l0eUNvbnRyb2xsZXI6OnNob3VsZFJ1YmJlckJhbmRJbkhvcml6b250YWxEaXJlY3Rpb24oY29u
c3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQotewotICAgIGlmICh3aGVlbEV2ZW50
LmRlbHRhWCgpID4gMCkKLSAgICAgICAgcmV0dXJuIG1fY2xpZW50LT5zaG91bGRSdWJiZXJCYW5k
SW5EaXJlY3Rpb24oU2Nyb2xsTGVmdCk7Ci0gICAgaWYgKHdoZWVsRXZlbnQuZGVsdGFYKCkgPCAw
KQotICAgICAgICByZXR1cm4gbV9jbGllbnQtPnNob3VsZFJ1YmJlckJhbmRJbkRpcmVjdGlvbihT
Y3JvbGxSaWdodCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFJVQkJFUl9CQU5ESU5HKQo=
</data>
<flag name="review"
          id="271929"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>