<?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>42625</bug_id>
          
          <creation_ts>2010-07-20 03:34:20 -0700</creation_ts>
          <short_desc>sputnik S15.9.3.1_A5_T1~T6 fail when run in timezone other than Pacific Time</short_desc>
          <delta_ts>2012-09-03 23:57:08 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</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>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Xianzhu Wang">phnixwxz</reporter>
          <assigned_to name="Zan Dobersek">zan</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>bweinstein</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dpranke</cc>
    
    <cc>eric</cc>
    
    <cc>ojan</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>253643</commentid>
    <comment_count>0</comment_count>
    <who name="Xianzhu Wang">phnixwxz</who>
    <bug_when>2010-07-20 03:34:20 -0700</bug_when>
    <thetext>On a machine whose timezone is not Pacific Time, the following tests fail:

fast/js/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.3/S15.9.3.1_A5_T1.html -&gt; failed
.
fast/js/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.3/S15.9.3.1_A5_T2.html -&gt; failed
.
fast/js/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.3/S15.9.3.1_A5_T3.html -&gt; failed
.
fast/js/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.3/S15.9.3.1_A5_T4.html -&gt; failed
.
fast/js/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.3/S15.9.3.1_A5_T5.html -&gt; failed
.
fast/js/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.3/S15.9.3.1_A5_T6.html -&gt; failed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>253788</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-07-20 10:13:02 -0700</bug_when>
    <thetext>We should probably just disable those tests then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265621</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-17 10:21:09 -0700</bug_when>
    <thetext>Agreed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265627</commentid>
    <comment_count>3</comment_count>
      <attachid>64605</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-17 10:28:04 -0700</bug_when>
    <thetext>Created attachment 64605
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265638</commentid>
    <comment_count>4</comment_count>
      <attachid>64605</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-08-17 10:48:30 -0700</bug_when>
    <thetext>Comment on attachment 64605
Patch

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265650</commentid>
    <comment_count>5</comment_count>
      <attachid>64605</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-08-17 11:07:21 -0700</bug_when>
    <thetext>Comment on attachment 64605
Patch

Clearing flags on attachment: 64605

Committed r65519: &lt;http://trac.webkit.org/changeset/65519&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265651</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-08-17 11:07:25 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686247</commentid>
    <comment_count>7</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-08-02 23:00:07 -0700</bug_when>
    <thetext>Could these tests be skipped if the system&apos;s timezone is incorrect? Similarly to how some tests are skipped based on missing symbols in modules.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703130</commentid>
    <comment_count>8</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-08-23 10:33:44 -0700</bug_when>
    <thetext>Reopening to attach new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703131</commentid>
    <comment_count>9</comment_count>
      <attachid>160193</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-08-23 10:33:47 -0700</bug_when>
    <thetext>Created attachment 160193
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703140</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-08-23 10:50:10 -0700</bug_when>
    <thetext>Honestly, I don&apos;t think that having these tests enabled on some machines is worth the complexity.

We should just remove sputnik tests and migrate to ecma-262 official suite. Maintaining that seems more worth the effort long term.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703144</commentid>
    <comment_count>11</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-08-23 10:54:22 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Honestly, I don&apos;t think that having these tests enabled on some machines is worth the complexity.
&gt; 
&gt; We should just remove sputnik tests and migrate to ecma-262 official suite. Maintaining that seems more worth the effort long term.

I&apos;m supportive of the migration, but these tests (or their equivalents) are still present in the ecma-262 suite though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703147</commentid>
    <comment_count>12</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-08-23 10:55:34 -0700</bug_when>
    <thetext>Is there a way to file bugs or submit patches to the official suite to get these fixed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703158</commentid>
    <comment_count>13</comment_count>
      <attachid>160193</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-08-23 11:02:46 -0700</bug_when>
    <thetext>Comment on attachment 160193
Patch

We could also just delete them.  I suspect this will just end up being confusing. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703179</commentid>
    <comment_count>14</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-08-23 11:26:38 -0700</bug_when>
    <thetext>My suggestion is to keep these tests disabled unconditionally, and try to get official tests fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703199</commentid>
    <comment_count>15</comment_count>
      <attachid>160193</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-08-23 11:43:55 -0700</bug_when>
    <thetext>Comment on attachment 160193
Patch

I don&apos;t think it really matters what we do with these tests.  I think the status quo is fine, and this patch isn&apos;t really worth the complexity.  I appreciate you looking at the problem!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710840</commentid>
    <comment_count>16</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-09-03 23:57:08 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Is there a way to file bugs or submit patches to the official suite to get these fixed?

The bug&apos;s already reported in the Ecmascript Bugzilla:
https://bugs.ecmascript.org/show_bug.cgi?id=330</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64605</attachid>
            <date>2010-08-17 10:28:04 -0700</date>
            <delta_ts>2012-08-23 10:33:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-42625-20100817122803.patch</filename>
            <type>text/plain</type>
            <size>4597</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxZTY3ZGJiYWEyZTU2NjkyNTMzZDBhNjRmOGQ2NjdkYWFlZTc0OGM2Li42MmNkNDNl
Mjc4NzU5NmQ5OTJhZWRkMjZlYjkwZDZlYjg3NzY5NzJkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAK
KzIwMTAtMDgtMTcgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIHNwdXRuaWsgUzE1LjkuMy4xX0E1
X1QxflQ2IGZhaWwgd2hlbiBydW4gaW4gdGltZXpvbmUgb3RoZXIgdGhhbiBQYWNpZmljIFRpbWUK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQyNjI1CisK
KyAgICAgICAgKiBmYXN0L2pzL3NwdXRuaWsvQ29uZm9ybWFuY2UvMTVfTmF0aXZlX09iamVjdHMv
MTUuOV9EYXRlLzE1LjkuMy9TMTUuOS4zLjFfQTVfVDEuaHRtbC1kaXNhYmxlZDogUmVuYW1lZCBm
cm9tIExheW91dFRlc3RzL2Zhc3QvanMvc3B1dG5pay9Db25mb3JtYW5jZS8xNV9OYXRpdmVfT2Jq
ZWN0cy8xNS45X0RhdGUvMTUuOS4zL1MxNS45LjMuMV9BNV9UMS5odG1sLgorICAgICAgICAqIGZh
c3QvanMvc3B1dG5pay9Db25mb3JtYW5jZS8xNV9OYXRpdmVfT2JqZWN0cy8xNS45X0RhdGUvMTUu
OS4zL1MxNS45LjMuMV9BNV9UMi5odG1sLWRpc2FibGVkOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVz
dHMvZmFzdC9qcy9zcHV0bmlrL0NvbmZvcm1hbmNlLzE1X05hdGl2ZV9PYmplY3RzLzE1LjlfRGF0
ZS8xNS45LjMvUzE1LjkuMy4xX0E1X1QyLmh0bWwuCisgICAgICAgICogZmFzdC9qcy9zcHV0bmlr
L0NvbmZvcm1hbmNlLzE1X05hdGl2ZV9PYmplY3RzLzE1LjlfRGF0ZS8xNS45LjMvUzE1LjkuMy4x
X0E1X1QzLmh0bWwtZGlzYWJsZWQ6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy9mYXN0L2pzL3Nw
dXRuaWsvQ29uZm9ybWFuY2UvMTVfTmF0aXZlX09iamVjdHMvMTUuOV9EYXRlLzE1LjkuMy9TMTUu
OS4zLjFfQTVfVDMuaHRtbC4KKyAgICAgICAgKiBmYXN0L2pzL3NwdXRuaWsvQ29uZm9ybWFuY2Uv
MTVfTmF0aXZlX09iamVjdHMvMTUuOV9EYXRlLzE1LjkuMy9TMTUuOS4zLjFfQTVfVDQuaHRtbC1k
aXNhYmxlZDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL2Zhc3QvanMvc3B1dG5pay9Db25mb3Jt
YW5jZS8xNV9OYXRpdmVfT2JqZWN0cy8xNS45X0RhdGUvMTUuOS4zL1MxNS45LjMuMV9BNV9UNC5o
dG1sLgorICAgICAgICAqIGZhc3QvanMvc3B1dG5pay9Db25mb3JtYW5jZS8xNV9OYXRpdmVfT2Jq
ZWN0cy8xNS45X0RhdGUvMTUuOS4zL1MxNS45LjMuMV9BNV9UNS5odG1sLWRpc2FibGVkOiBSZW5h
bWVkIGZyb20gTGF5b3V0VGVzdHMvZmFzdC9qcy9zcHV0bmlrL0NvbmZvcm1hbmNlLzE1X05hdGl2
ZV9PYmplY3RzLzE1LjlfRGF0ZS8xNS45LjMvUzE1LjkuMy4xX0E1X1Q1Lmh0bWwuCisgICAgICAg
ICogZmFzdC9qcy9zcHV0bmlrL0NvbmZvcm1hbmNlLzE1X05hdGl2ZV9PYmplY3RzLzE1LjlfRGF0
ZS8xNS45LjMvUzE1LjkuMy4xX0E1X1Q2Lmh0bWwtZGlzYWJsZWQ6IFJlbmFtZWQgZnJvbSBMYXlv
dXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsvQ29uZm9ybWFuY2UvMTVfTmF0aXZlX09iamVjdHMvMTUu
OV9EYXRlLzE1LjkuMy9TMTUuOS4zLjFfQTVfVDYuaHRtbC4KKwogMjAxMC0wOC0xNiAgRXJpYyBT
ZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsvQ29uZm9ybWFu
Y2UvMTVfTmF0aXZlX09iamVjdHMvMTUuOV9EYXRlLzE1LjkuMy9TMTUuOS4zLjFfQTVfVDEuaHRt
bCBiL0xheW91dFRlc3RzL2Zhc3QvanMvc3B1dG5pay9Db25mb3JtYW5jZS8xNV9OYXRpdmVfT2Jq
ZWN0cy8xNS45X0RhdGUvMTUuOS4zL1MxNS45LjMuMV9BNV9UMS5odG1sLWRpc2FibGVkCnNpbWls
YXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBMYXlvdXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsv
Q29uZm9ybWFuY2UvMTVfTmF0aXZlX09iamVjdHMvMTUuOV9EYXRlLzE1LjkuMy9TMTUuOS4zLjFf
QTVfVDEuaHRtbApyZW5hbWUgdG8gTGF5b3V0VGVzdHMvZmFzdC9qcy9zcHV0bmlrL0NvbmZvcm1h
bmNlLzE1X05hdGl2ZV9PYmplY3RzLzE1LjlfRGF0ZS8xNS45LjMvUzE1LjkuMy4xX0E1X1QxLmh0
bWwtZGlzYWJsZWQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvanMvc3B1dG5pay9Db25m
b3JtYW5jZS8xNV9OYXRpdmVfT2JqZWN0cy8xNS45X0RhdGUvMTUuOS4zL1MxNS45LjMuMV9BNV9U
Mi5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9zcHV0bmlrL0NvbmZvcm1hbmNlLzE1X05hdGl2
ZV9PYmplY3RzLzE1LjlfRGF0ZS8xNS45LjMvUzE1LjkuMy4xX0E1X1QyLmh0bWwtZGlzYWJsZWQK
c2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIExheW91dFRlc3RzL2Zhc3QvanMvc3B1
dG5pay9Db25mb3JtYW5jZS8xNV9OYXRpdmVfT2JqZWN0cy8xNS45X0RhdGUvMTUuOS4zL1MxNS45
LjMuMV9BNV9UMi5odG1sCnJlbmFtZSB0byBMYXlvdXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsvQ29u
Zm9ybWFuY2UvMTVfTmF0aXZlX09iamVjdHMvMTUuOV9EYXRlLzE1LjkuMy9TMTUuOS4zLjFfQTVf
VDIuaHRtbC1kaXNhYmxlZApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9qcy9zcHV0bmlr
L0NvbmZvcm1hbmNlLzE1X05hdGl2ZV9PYmplY3RzLzE1LjlfRGF0ZS8xNS45LjMvUzE1LjkuMy4x
X0E1X1QzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsvQ29uZm9ybWFuY2UvMTVf
TmF0aXZlX09iamVjdHMvMTUuOV9EYXRlLzE1LjkuMy9TMTUuOS4zLjFfQTVfVDMuaHRtbC1kaXNh
YmxlZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gTGF5b3V0VGVzdHMvZmFzdC9q
cy9zcHV0bmlrL0NvbmZvcm1hbmNlLzE1X05hdGl2ZV9PYmplY3RzLzE1LjlfRGF0ZS8xNS45LjMv
UzE1LjkuMy4xX0E1X1QzLmh0bWwKcmVuYW1lIHRvIExheW91dFRlc3RzL2Zhc3QvanMvc3B1dG5p
ay9Db25mb3JtYW5jZS8xNV9OYXRpdmVfT2JqZWN0cy8xNS45X0RhdGUvMTUuOS4zL1MxNS45LjMu
MV9BNV9UMy5odG1sLWRpc2FibGVkCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2pzL3Nw
dXRuaWsvQ29uZm9ybWFuY2UvMTVfTmF0aXZlX09iamVjdHMvMTUuOV9EYXRlLzE1LjkuMy9TMTUu
OS4zLjFfQTVfVDQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvanMvc3B1dG5pay9Db25mb3JtYW5j
ZS8xNV9OYXRpdmVfT2JqZWN0cy8xNS45X0RhdGUvMTUuOS4zL1MxNS45LjMuMV9BNV9UNC5odG1s
LWRpc2FibGVkCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBMYXlvdXRUZXN0cy9m
YXN0L2pzL3NwdXRuaWsvQ29uZm9ybWFuY2UvMTVfTmF0aXZlX09iamVjdHMvMTUuOV9EYXRlLzE1
LjkuMy9TMTUuOS4zLjFfQTVfVDQuaHRtbApyZW5hbWUgdG8gTGF5b3V0VGVzdHMvZmFzdC9qcy9z
cHV0bmlrL0NvbmZvcm1hbmNlLzE1X05hdGl2ZV9PYmplY3RzLzE1LjlfRGF0ZS8xNS45LjMvUzE1
LjkuMy4xX0E1X1Q0Lmh0bWwtZGlzYWJsZWQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
anMvc3B1dG5pay9Db25mb3JtYW5jZS8xNV9OYXRpdmVfT2JqZWN0cy8xNS45X0RhdGUvMTUuOS4z
L1MxNS45LjMuMV9BNV9UNS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9zcHV0bmlrL0NvbmZv
cm1hbmNlLzE1X05hdGl2ZV9PYmplY3RzLzE1LjlfRGF0ZS8xNS45LjMvUzE1LjkuMy4xX0E1X1Q1
Lmh0bWwtZGlzYWJsZWQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIExheW91dFRl
c3RzL2Zhc3QvanMvc3B1dG5pay9Db25mb3JtYW5jZS8xNV9OYXRpdmVfT2JqZWN0cy8xNS45X0Rh
dGUvMTUuOS4zL1MxNS45LjMuMV9BNV9UNS5odG1sCnJlbmFtZSB0byBMYXlvdXRUZXN0cy9mYXN0
L2pzL3NwdXRuaWsvQ29uZm9ybWFuY2UvMTVfTmF0aXZlX09iamVjdHMvMTUuOV9EYXRlLzE1Ljku
My9TMTUuOS4zLjFfQTVfVDUuaHRtbC1kaXNhYmxlZApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9qcy9zcHV0bmlrL0NvbmZvcm1hbmNlLzE1X05hdGl2ZV9PYmplY3RzLzE1LjlfRGF0ZS8x
NS45LjMvUzE1LjkuMy4xX0E1X1Q2Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2pzL3NwdXRuaWsv
Q29uZm9ybWFuY2UvMTVfTmF0aXZlX09iamVjdHMvMTUuOV9EYXRlLzE1LjkuMy9TMTUuOS4zLjFf
QTVfVDYuaHRtbC1kaXNhYmxlZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gTGF5
b3V0VGVzdHMvZmFzdC9qcy9zcHV0bmlrL0NvbmZvcm1hbmNlLzE1X05hdGl2ZV9PYmplY3RzLzE1
LjlfRGF0ZS8xNS45LjMvUzE1LjkuMy4xX0E1X1Q2Lmh0bWwKcmVuYW1lIHRvIExheW91dFRlc3Rz
L2Zhc3QvanMvc3B1dG5pay9Db25mb3JtYW5jZS8xNV9OYXRpdmVfT2JqZWN0cy8xNS45X0RhdGUv
MTUuOS4zL1MxNS45LjMuMV9BNV9UNi5odG1sLWRpc2FibGVkCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160193</attachid>
            <date>2012-08-23 10:33:47 -0700</date>
            <delta_ts>2012-08-23 11:43:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-42625-20120823103344.patch</filename>
            <type>text/plain</type>
            <size>172295</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2MTc1CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYTNjYjA1YmQ5MTI3MDdjNjdkZTk4ZmRhMjI5YTQwNTY1
M2EwOTdhZC4uYWRkM2Q5NzRkZDY3ZDE3ODk2ZDgxMWI0Zjk0N2ViNmViM2Y1OTg1YSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2
IEBACisyMDEyLTA4LTIzICBaYW4gRG9iZXJzZWsgIDx6YW5kb2JlcnNla0BnbWFpbC5jb20+CisK
KyAgICAgICAgc3B1dG5payBTMTUuOS4zLjFfQTVfVDF+VDYgZmFpbCB3aGVuIHJ1biBpbiB0aW1l
em9uZSBvdGhlciB0aGFuIFBhY2lmaWMgVGltZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDI2MjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBTa2lwIHRoZSBTMTUuOS4zLjFfQTVfVDF+VDYgU3B1dG5payB0
ZXN0cyB3aGVuZXZlciB0aGUgc3lzdGVtIHRpbWV6b25lIGlzIG5vdAorICAgICAgICBQYWNpZmlj
IFN0YW5kYXJkIFRpbWUgKFVUQy04OjAwKS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weToKKyAgICAgICAgKFBvcnQuc2tpcHBlZF9sYXlvdXRf
dGVzdHMpOgorCiAyMDEyLTA4LTIxICBTaW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNtYW5uQG5v
a2lhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIGJ1aWxkIGZpeCBmb3IgbmV3ZXIgUXQgNTog
VGhlIG1lYW5pbmcgb2YgcHJpdmF0ZV9pbmNsdWRlcyBjaGFuZ2VkIHRvIGJlIGZ1bGx5CmRpZmYg
LS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKaW5kZXgg
YzZiNWM2ODAyYWZiN2Q3Mzk1ZGRiZjA2MTdlYjM1NzAzNjUwNmMxYi4uYTE2M2NlMWNmZjc2ZDdh
ZTE3YTU1OWNiZjViYWEzNGUyYmJiNWQzNyAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQpAQCAtNDAsNiArNDAsNyBAQCBpbXBvcnQgb3Bl
cmF0b3IKIGltcG9ydCBvcHRwYXJzZQogaW1wb3J0IHJlCiBpbXBvcnQgc3lzCitpbXBvcnQgdGlt
ZQogCiB0cnk6CiAgICAgZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgT3JkZXJlZERpY3QKQEAgLTY5
Nyw2ICs2OTgsMTYgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICAgICB0ZXN0c190b19za2lw
ID0gc2V0KHNlbGYuX2V4cGVjdGF0aW9uc19mcm9tX3NraXBwZWRfZmlsZXMoc2VsZi5fc2tpcHBl
ZF9maWxlX3NlYXJjaF9wYXRocygpKSkKICAgICAgICAgdGVzdHNfdG9fc2tpcC51cGRhdGUoc2Vs
Zi5fdGVzdHNfZm9yX290aGVyX3BsYXRmb3JtcygpKQogICAgICAgICB0ZXN0c190b19za2lwLnVw
ZGF0ZShzZWxmLl9za2lwcGVkX3Rlc3RzX2Zvcl91bnN1cHBvcnRlZF9mZWF0dXJlcyh0ZXN0X2xp
c3QpKQorCisgICAgICAgICMgU2tpcCB0aGUgZm9sbG93aW5nIHRlc3RzIHdoZW4gdGhlIHN5c3Rl
bSdzIHRpbWV6b25lIGlzIG5vdCBQYWNpZmljIFN0YW5kYXJkIFRpbWUgKFVUQy04OjAwKS4KKyAg
ICAgICAgaWYgdGltZS50aW1lem9uZSAhPSAyODgwMDoKKyAgICAgICAgICAgIHRlc3RzX3RvX3Nr
aXAudXBkYXRlKFsic3B1dG5pay9Db25mb3JtYW5jZS8xNV9OYXRpdmVfT2JqZWN0cy8xNS45X0Rh
dGUvMTUuOS4zL1MxNS45LjMuMV9BNV9UMS5odG1sIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAic3B1dG5pay9Db25mb3JtYW5jZS8xNV9OYXRpdmVfT2JqZWN0cy8xNS45X0Rh
dGUvMTUuOS4zL1MxNS45LjMuMV9BNV9UMi5odG1sIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAic3B1dG5pay9Db25mb3JtYW5jZS8xNV9OYXRpdmVfT2JqZWN0cy8xNS45X0Rh
dGUvMTUuOS4zL1MxNS45LjMuMV9BNV9UMy5odG1sIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAic3B1dG5pay9Db25mb3JtYW5jZS8xNV9OYXRpdmVfT2JqZWN0cy8xNS45X0Rh
dGUvMTUuOS4zL1MxNS45LjMuMV9BNV9UNC5odG1sIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAic3B1dG5pay9Db25mb3JtYW5jZS8xNV9OYXRpdmVfT2JqZWN0cy8xNS45X0Rh
dGUvMTUuOS4zL1MxNS45LjMuMV9BNV9UNS5odG1sIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAic3B1dG5pay9Db25mb3JtYW5jZS8xNV9OYXRpdmVfT2JqZWN0cy8xNS45X0Rh
dGUvMTUuOS4zL1MxNS45LjMuMV9BNV9UNi5odG1sIl0pCisKICAgICAgICAgcmV0dXJuIHRlc3Rz
X3RvX3NraXAKIAogICAgIGRlZiBfdGVzdHNfZnJvbV9za2lwcGVkX2ZpbGVfY29udGVudHMoc2Vs
Ziwgc2tpcHBlZF9maWxlX2NvbnRlbnRzKToKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBiYzBlZWVlOTQxMjQzMjRmNWI0YmI4
Y2ZhYjhlNDhhZGRjYzRhMGRjLi4xYzY3NzJhYWVhNDE3YTY1ODY0MTRmYzZiNWFkNGQ1ZjU5N2Ez
OGY1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTItMDgtMjMgIFphbiBEb2JlcnNlayAgPHph
bmRvYmVyc2VrQGdtYWlsLmNvbT4KKworICAgICAgICBzcHV0bmlrIFMxNS45LjMuMV9BNV9UMX5U
NiBmYWlsIHdoZW4gcnVuIGluIHRpbWV6b25lIG90aGVyIHRoYW4gUGFjaWZpYyBUaW1lCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MjYyNQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVuYWJsZSBiYWNrIHRo
ZSBTMTUuOS4zLjFfQTVfVDF+VDYgdGVzdHMuIFRoZXNlIHRlc3RzIGFyZSBub3cgYXV0b21hdGlj
YWxseSBza2lwcGVkCisgICAgICAgIGlmIHRoZXkgYXJlIG5vdCBydW4gaW4gdGhlIFBhY2lmaWMg
U3RhbmRhcmQgVGltZSAoVVRDLTg6MDApLgorCisgICAgICAgICogc3B1dG5pay9Db25mb3JtYW5j
ZS8xNV9OYXRpdmVfT2JqZWN0cy8xNS45X0RhdGUvMTUuOS4zL1MxNS45LjMuMV9BNV9UMS5odG1s
OiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvc3B1dG5pay9Db25mb3JtYW5jZS8xNV9OYXRpdmVf
T2JqZWN0cy8xNS45X0RhdGUvMTUuOS4zL1MxNS45LjMuMV9BNV9UMS5odG1sLWRpc2FibGVkLgor
ICAgICAgICAqIHNwdXRuaWsvQ29uZm9ybWFuY2UvMTVfTmF0aXZlX09iamVjdHMvMTUuOV9EYXRl
LzE1LjkuMy9TMTUuOS4zLjFfQTVfVDIuaHRtbDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3Nw
dXRuaWsvQ29uZm9ybWFuY2UvMTVfTmF0aXZlX09iamVjdHMvMTUuOV9EYXRlLzE1LjkuMy9TMTUu
OS4zLjFfQTVfVDIuaHRtbC1kaXNhYmxlZC4KKyAgICAgICAgKiBzcHV0bmlrL0NvbmZvcm1hbmNl
LzE1X05hdGl2ZV9PYmplY3RzLzE1LjlfRGF0ZS8xNS45LjMvUzE1LjkuMy4xX0E1X1QzLmh0bWw6
IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy9zcHV0bmlrL0NvbmZvcm1hbmNlLzE1X05hdGl2ZV9P
YmplY3RzLzE1LjlfRGF0ZS8xNS45LjMvUzE1LjkuMy4xX0E1X1QzLmh0bWwtZGlzYWJsZWQuCisg
ICAgICAgICogc3B1dG5pay9Db25mb3JtYW5jZS8xNV9OYXRpdmVfT2JqZWN0cy8xNS45X0RhdGUv
MTUuOS4zL1MxNS45LjMuMV9BNV9UNC5odG1sOiBSZW5hbWVkIGZyb20gTGF5b3V0VGVzdHMvc3B1
dG5pay9Db25mb3JtYW5jZS8xNV9OYXRpdmVfT2JqZWN0cy8xNS45X0RhdGUvMTUuOS4zL1MxNS45
LjMuMV9BNV9UNC5odG1sLWRpc2FibGVkLgorICAgICAgICAqIHNwdXRuaWsvQ29uZm9ybWFuY2Uv
MTVfTmF0aXZlX09iamVjdHMvMTUuOV9EYXRlLzE1LjkuMy9TMTUuOS4zLjFfQTVfVDUuaHRtbDog
UmVuYW1lZCBmcm9tIExheW91dFRlc3RzL3NwdXRuaWsvQ29uZm9ybWFuY2UvMTVfTmF0aXZlX09i
amVjdHMvMTUuOV9EYXRlLzE1LjkuMy9TMTUuOS4zLjFfQTVfVDUuaHRtbC1kaXNhYmxlZC4KKyAg
ICAgICAgKiBzcHV0bmlrL0NvbmZvcm1hbmNlLzE1X05hdGl2ZV9PYmplY3RzLzE1LjlfRGF0ZS8x
NS45LjMvUzE1LjkuMy4xX0E1X1Q2Lmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRUZXN0cy9zcHV0
bmlrL0NvbmZvcm1hbmNlLzE1X05hdGl2ZV9PYmplY3RzLzE1LjlfRGF0ZS8xNS45LjMvUzE1Ljku
My4xX0E1X1Q2Lmh0bWwtZGlzYWJsZWQuCisKIDIwMTItMDgtMjEgIFZpbmNlbnQgU2NoZWliICA8
c2NoZWliQGNocm9taXVtLm9yZz4KIAogICAgICAgICBBZGQgcGFyc2luZyBsb2dpYyBmb3IgYWxs
b3ctcG9pbnRlci1sb2NrIHRvIGlmcmFtZSBzYW5kYm94IGF0dHJpYnV0ZS4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3NwdXRuaWsvQ29uZm9ybWFuY2UvMTVfTmF0aXZlX09iamVjdHMvMTUuOV9E
YXRlLzE1LjkuMy9TMTUuOS4zLjFfQTVfVDEuaHRtbCBiL0xheW91dFRlc3RzL3NwdXRuaWsvQ29u
Zm9ybWFuY2UvMTVfTmF0aXZlX09iamVjdHMvMTUuOV9EYXRlLzE1LjkuMy9TMTUuOS4zLjFfQTVf
VDEuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40ODY0ZDJjNzg0ZTE3M2EwNjlkNDI0MDY0Y2JmN2U0OWY5Mzlh
ZTllCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3B1dG5pay9Db25mb3JtYW5jZS8x
NV9OYXRpdmVfT2JqZWN0cy8xNS45X0RhdGUvMTUuOS4zL1MxNS45LjMuMV9BNV9UMS5odG1sCkBA
IC0wLDAgKzEsNTIyIEBACis8aHRtbD4KKzxoZWFkPgorPG1ldGEgY2hhcnNldD0ndXRmLTgnPgor
PHN0eWxlPgorLnBhc3MgeworICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgIGNvbG9yOiBncmVl
bjsKK30KKy5mYWlsIHsKKyAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICBjb2xvcjogcmVkOwor
fQorPC9zdHlsZT4KKworPHNjcmlwdD4KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0
UnVubmVyLmR1bXBBc1RleHQoKTsKKworZnVuY3Rpb24gU3B1dG5pa0Vycm9yKG1lc3NhZ2UpCit7
CisgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKK30KKworU3B1dG5pa0Vycm9yLnByb3RvdHlw
ZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpCit7CisgICAgcmV0dXJuICdTcHV0bmlrRXJyb3I6ICcg
KyB0aGlzLm1lc3NhZ2U7Cit9OworCit2YXIgc3B1dG5pa0V4Y2VwdGlvbjsKKworZnVuY3Rpb24g
dGVzdFByaW50KG1zZykKK3sKKyAgICB2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
InNwYW4iKTsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmFwcGVuZENo
aWxkKHNwYW4pOyAvLyBpbnNlcnQgaXQgZmlyc3Qgc28gWEhUTUwga25vd3MgdGhlIG5hbWVzcGFj
ZSAKKyAgICBzcGFuLmlubmVySFRNTCA9IG1zZyArICc8YnIgLz4nOworfQorCitmdW5jdGlvbiBl
c2NhcGVIVE1MKHRleHQpCit7CisgICAgcmV0dXJuIHRleHQudG9TdHJpbmcoKS5yZXBsYWNlKC8m
L2csICImYW1wOyIpLnJlcGxhY2UoLzwvZywgIiZsdDsiKTsKK30KKworZnVuY3Rpb24gcHJpbnRU
ZXN0UGFzc2VkKG1zZykKK3sKKyAgICB0ZXN0UHJpbnQoJzxzcGFuPjxzcGFuIGNsYXNzPSJwYXNz
Ij5QQVNTPC9zcGFuPiAnICsgZXNjYXBlSFRNTChtc2cpICsgJzwvc3Bhbj4nKTsKK30KKworZnVu
Y3Rpb24gcHJpbnRUZXN0RmFpbGVkKG1zZykKK3sKKyAgICB0ZXN0UHJpbnQoJzxzcGFuPjxzcGFu
IGNsYXNzPSJmYWlsIj5GQUlMPC9zcGFuPiAnICsgZXNjYXBlSFRNTChtc2cpICsgJzwvc3Bhbj4n
KTsKK30KKworZnVuY3Rpb24gdGVzdEZhaWxlZChtc2cpCit7CisgICAgdGhyb3cgbmV3IFNwdXRu
aWtFcnJvcihtc2cpOworfQorCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gZmFsc2U7Cis8L3Nj
cmlwdD4KKworPC9oZWFkPgorPGJvZHk+Cis8cD5TMTUuOS4zLjFfQTVfVDE8L3A+Cis8ZGl2IGlk
PSdjb25zb2xlJz48L2Rpdj4KKzxzY3JpcHQ+Cit0cnkgeworCisvKioKKyAqIEBuYW1lOiBTMTUu
OS4zLjFfQTVfVDE7CisgKiBAc2VjdGlvbjogMTUuOS4zLjE7CisgKiBAYXNzZXJ0aW9uOiBUaGUg
W1tWYWx1ZV1dIHByb3BlcnR5IG9mIHRoZSBuZXdseSBjb25zdHJ1Y3RlZCBvYmplY3QgCisgKiBp
cyBzZXQgYnkgZm9sbG93aW5nIHN0ZXBzOgorICogOC4gSWYgUmVzdWx0KDEpIGlzIG5vdCBOYU4g
YW5kIDAgPD0gVG9JbnRlZ2VyKFJlc3VsdCgxKSkgPD0gOTksIFJlc3VsdCg4KSBpcworICogMTkw
MCtUb0ludGVnZXIoUmVzdWx0KDEpKTsgb3RoZXJ3aXNlLCBSZXN1bHQoOCkgaXMgUmVzdWx0KDEp
CisgKiA5LiBDb21wdXRlIE1ha2VEYXkoUmVzdWx0KDgpLCBSZXN1bHQoMiksIFJlc3VsdCgzKSkK
KyAqIDEwLiBDb21wdXRlIE1ha2VUaW1lKFJlc3VsdCg0KSwgUmVzdWx0KDUpLCBSZXN1bHQoNiks
IFJlc3VsdCg3KSkKKyAqIDExLiBDb21wdXRlIE1ha2VEYXRlKFJlc3VsdCg5KSwgUmVzdWx0KDEw
KSkKKyAqIDEyLiBTZXQgdGhlIFtbVmFsdWVdXSBwcm9wZXJ0eSBvZiB0aGUgbmV3bHkgY29uc3Ry
dWN0ZWQgb2JqZWN0IHRvIAorICogVGltZUNsaXAoVVRDKFJlc3VsdCgxMSkpKTsKKyAqIEBkZXNj
cmlwdGlvbjogMiBhcmd1bWVudHMsICh5ZWFyLCBtb250aCk7CisgKi8KKwordmFyICREU1RfZW5k
X2hvdXIgPSAyOwordmFyICREU1RfZW5kX21pbnV0ZXMgPSAwOwordmFyICREU1RfZW5kX21vbnRo
ID0gMTA7Cit2YXIgJERTVF9lbmRfc3VuZGF5ID0gJ2ZpcnN0JzsKK3ZhciAkRFNUX3N0YXJ0X2hv
dXIgPSAyOwordmFyICREU1Rfc3RhcnRfbWludXRlcyA9IDA7Cit2YXIgJERTVF9zdGFydF9tb250
aCA9IDI7Cit2YXIgJERTVF9zdGFydF9zdW5kYXkgPSAnZmlyc3QnOwordmFyICRMb2NhbFRaID0g
LTg7CitmdW5jdGlvbiBUb0ludGVnZXIocCkgeworICB4ID0gTnVtYmVyKHApOworCisgIGlmKGlz
TmFOKHgpKXsKKyAgICByZXR1cm4gKzA7CisgIH0KKyAgCisgIGlmKCh4ID09PSArMCkgCisgIHx8
ICh4ID09PSAtMCkgCisgIHx8ICh4ID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpIAorICB8
fCAoeCA9PT0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKSl7CisgICAgIHJldHVybiB4OworICB9
CisKKyAgdmFyIHNpZ24gPSAoIHggPCAwICkgPyAtMSA6IDE7CisKKyAgcmV0dXJuIChzaWduKk1h
dGguZmxvb3IoTWF0aC5hYnMoeCkpKTsKK30KKworCit2YXIgSG91cnNQZXJEYXkgPSAyNDsKK3Zh
ciBNaW51dGVzUGVySG91ciA9IDYwOwordmFyIFNlY29uZHNQZXJNaW51dGUgPSA2MDsKKwordmFy
IG1zUGVyRGF5ID0gODY0MDAwMDA7Cit2YXIgbXNQZXJTZWNvbmQgPSAxMDAwOwordmFyIG1zUGVy
TWludXRlID0gNjAwMDA7Cit2YXIgbXNQZXJIb3VyID0gMzYwMDAwMDsKKwordmFyIGRhdGVfMTg5
OV9lbmQgPSAtMjIwODk4ODgwMDAwMTsKK3ZhciBkYXRlXzE5MDBfc3RhcnQgPSAtMjIwODk4ODgw
MDAwMDsKK3ZhciBkYXRlXzE5NjlfZW5kID0gLTE7Cit2YXIgZGF0ZV8xOTcwX3N0YXJ0ID0gMDsK
K3ZhciBkYXRlXzE5OTlfZW5kID0gOTQ2Njg0Nzk5OTk5OwordmFyIGRhdGVfMjAwMF9zdGFydCA9
IDk0NjY4NDgwMDAwMDsKK3ZhciBkYXRlXzIwOTlfZW5kID0gNDEwMjQ0NDc5OTk5OTsKK3ZhciBk
YXRlXzIxMDBfc3RhcnQgPSA0MTAyNDQ0ODAwMDAwOworCisKKy8vMTUuOS4xLjIgRGF5IE51bWJl
ciBhbmQgVGltZSB3aXRoaW4gRGF5CitmdW5jdGlvbiBEYXkodCkgeworICByZXR1cm4gTWF0aC5m
bG9vcih0L21zUGVyRGF5KTsKK30KKworZnVuY3Rpb24gVGltZVdpdGhpbkRheSh0KSB7CisgIHJl
dHVybiB0JW1zUGVyRGF5OworfQorCisvLzE1LjkuMS4zIFllYXIgTnVtYmVyCitmdW5jdGlvbiBE
YXlzSW5ZZWFyKHkpeworICBpZih5JTQgIT0gMCkgcmV0dXJuIDM2NTsKKyAgaWYoeSU0ID09IDAg
JiYgeSUxMDAgIT0gMCkgcmV0dXJuIDM2NjsKKyAgaWYoeSUxMDAgPT0gMCAmJiB5JTQwMCAhPSAw
KSByZXR1cm4gMzY1OworICBpZih5JTQwMCA9PSAwKSByZXR1cm4gMzY2OworfQorCitmdW5jdGlv
biBEYXlGcm9tWWVhcih5KSB7CisgIHJldHVybiAoMzY1Kih5LTE5NzApCisgICAgICAgICAgKyBN
YXRoLmZsb29yKCh5LTE5NjkpLzQpCisgICAgICAgICAgLSBNYXRoLmZsb29yKCh5LTE5MDEpLzEw
MCkKKyAgICAgICAgICArIE1hdGguZmxvb3IoKHktMTYwMSkvNDAwKSk7Cit9CisKK2Z1bmN0aW9u
IFRpbWVGcm9tWWVhcih5KXsKKyAgcmV0dXJuIG1zUGVyRGF5KkRheUZyb21ZZWFyKHkpOworfQor
CitmdW5jdGlvbiBZZWFyRnJvbVRpbWUodCkgeworICB0ID0gTnVtYmVyKHQpOworICB2YXIgc2ln
biA9ICggdCA8IDAgKSA/IC0xIDogMTsKKyAgdmFyIHllYXIgPSAoIHNpZ24gPCAwICkgPyAxOTY5
IDogMTk3MDsKKyAgCisgIGZvcih2YXIgdGltZSA9IDA7O3llYXIgKz0gc2lnbil7CisgICAgdGlt
ZSA9IFRpbWVGcm9tWWVhcih5ZWFyKTsKKyAgICAKKyAgICBpZihzaWduID4gMCAmJiB0aW1lID4g
dCl7CisgICAgICB5ZWFyIC09IHNpZ247CisgICAgICBicmVhazsKKyAgICB9CisgICAgZWxzZSBp
ZihzaWduIDwgMCAmJiB0aW1lIDw9IHQpeworICAgICAgYnJlYWs7CisgICAgfQorICB9OworICBy
ZXR1cm4geWVhcjsKK30KKyAgCitmdW5jdGlvbiBJbkxlYXBZZWFyKHQpeworICBpZihEYXlzSW5Z
ZWFyKFllYXJGcm9tVGltZSh0KSkgPT0gMzY1KQorICAgIHJldHVybiAwOworICAKKyAgaWYoRGF5
c0luWWVhcihZZWFyRnJvbVRpbWUodCkpID09IDM2NikKKyAgICByZXR1cm4gMTsKK30KKworZnVu
Y3Rpb24gRGF5V2l0aGluWWVhcih0KSB7CisgIHJldHVybiBEYXkodCktRGF5RnJvbVllYXIoWWVh
ckZyb21UaW1lKHQpKTsKK30KKworLy8xNS45LjEuNCBNb250aCBOdW1iZXIKK2Z1bmN0aW9uIE1v
bnRoRnJvbVRpbWUodCl7CisgIHZhciBkYXkgPSBEYXlXaXRoaW5ZZWFyKHQpOworICB2YXIgbGVh
cCA9IEluTGVhcFllYXIodCk7CisKKyAgaWYoKDAgPD0gZGF5KSAmJiAoZGF5IDwgMzEpKSByZXR1
cm4gMDsKKyAgaWYoKDMxIDw9IGRheSkgJiYgKGRheSA8ICg1OStsZWFwKSkpIHJldHVybiAxOwor
ICBpZigoKDU5K2xlYXApIDw9IGRheSkgJiYgKGRheSA8ICg5MCtsZWFwKSkpIHJldHVybiAyOwor
ICBpZigoKDkwK2xlYXApIDw9IGRheSkgJiYgKGRheSA8ICgxMjArbGVhcCkpKSByZXR1cm4gMzsK
KyAgaWYoKCgxMjArbGVhcCkgPD0gZGF5KSAmJiAoZGF5IDwgKDE1MStsZWFwKSkpIHJldHVybiA0
OworICBpZigoKDE1MStsZWFwKSA8PSBkYXkpICYmIChkYXkgPCAoMTgxK2xlYXApKSkgcmV0dXJu
IDU7CisgIGlmKCgoMTgxK2xlYXApIDw9IGRheSkgJiYgKGRheSA8ICgyMTIrbGVhcCkpKSByZXR1
cm4gNjsKKyAgaWYoKCgyMTIrbGVhcCkgPD0gZGF5KSAmJiAoZGF5IDwgKDI0MytsZWFwKSkpIHJl
dHVybiA3OworICBpZigoKDI0MytsZWFwKSA8PSBkYXkpICYmIChkYXkgPCAoMjczK2xlYXApKSkg
cmV0dXJuIDg7CisgIGlmKCgoMjczK2xlYXApIDw9IGRheSkgJiYgKGRheSA8ICgzMDQrbGVhcCkp
KSByZXR1cm4gOTsKKyAgaWYoKCgzMDQrbGVhcCkgPD0gZGF5KSAmJiAoZGF5IDwgKDMzNCtsZWFw
KSkpIHJldHVybiAxMDsKKyAgaWYoKCgzMzQrbGVhcCkgPD0gZGF5KSAmJiAoZGF5IDwgKDM2NSts
ZWFwKSkpIHJldHVybiAxMTsKK30KKworLy8xNS45LjEuNSBEYXRlIE51bWJlcgorZnVuY3Rpb24g
RGF0ZUZyb21UaW1lKHQpIHsKKyAgdmFyIGRheSA9IERheVdpdGhpblllYXIodCk7CisgIHZhciBt
b250aCA9IE1vbnRoRnJvbVRpbWUodCk7CisgIHZhciBsZWFwID0gSW5MZWFwWWVhcih0KTsKKwor
ICBpZihtb250aCA9PSAwKSByZXR1cm4gZGF5KzE7CisgIGlmKG1vbnRoID09IDEpIHJldHVybiBk
YXktMzA7CisgIGlmKG1vbnRoID09IDIpIHJldHVybiBkYXktNTgtbGVhcDsKKyAgaWYobW9udGgg
PT0gMykgcmV0dXJuIGRheS04OS1sZWFwOworICBpZihtb250aCA9PSA0KSByZXR1cm4gZGF5LTEx
OS1sZWFwOworICBpZihtb250aCA9PSA1KSByZXR1cm4gZGF5LTE1MC1sZWFwOworICBpZihtb250
aCA9PSA2KSByZXR1cm4gZGF5LTE4MC1sZWFwOworICBpZihtb250aCA9PSA3KSByZXR1cm4gZGF5
LTIxMS1sZWFwOworICBpZihtb250aCA9PSA4KSByZXR1cm4gZGF5LTI0Mi1sZWFwOworICBpZiht
b250aCA9PSA5KSByZXR1cm4gZGF5LTI3Mi1sZWFwOworICBpZihtb250aCA9PSAxMCkgcmV0dXJu
IGRheS0zMDMtbGVhcDsKKyAgaWYobW9udGggPT0gMTEpIHJldHVybiBkYXktMzMzLWxlYXA7Cit9
CisKKy8vMTUuOS4xLjYgV2VlayBEYXkKK2Z1bmN0aW9uIFdlZWtEYXkodCkgeworICB2YXIgd2Vl
a2RheSA9IChEYXkodCkrNCklNzsKKyAgcmV0dXJuICh3ZWVrZGF5IDwgMCA/IDcrd2Vla2RheSA6
IHdlZWtkYXkpOworfQorCisvLzE1LjkuMS45IERheWxpZ2h0IFNhdmluZyBUaW1lIEFkanVzdG1l
bnQKK3ZhciBMb2NhbFRaQSA9ICRMb2NhbFRaKm1zUGVySG91cjsKKworZnVuY3Rpb24gRGF5c0lu
TW9udGgobSwgbGVhcCkgeworICBtID0gbSUxMjsKKyAgCisgIC8vQXByaWwsIEp1bmUsIFNlcHQs
IE5vdgorICBpZihtID09IDMgfHwgbSA9PSA1IHx8IG0gPT0gOCB8fCBtID09IDEwICkgeworICAg
IHJldHVybiAzMDsKKyAgfQorCisgIC8vSmFuLCBNYXJjaCwgTWF5LCBKdWx5LCBBdWcsIE9jdCwg
RGVjCisgIGlmKG0gPT0gMCB8fCBtID09IDIgfHwgbSA9PSA0IHx8IG0gPT0gNiB8fCBtID09IDcg
fHwgbSA9PSA5IHx8IG0gPT0gMTEpeworICAgIHJldHVybiAzMTsKKyAgfQorCisgIC8vRmViCisg
IHJldHVybiAyOCtsZWFwOworfQorCitmdW5jdGlvbiBHZXRTdW5kYXlJbk1vbnRoKHQsIG0sIGNv
dW50KXsKKyAgdmFyIHllYXIgPSBZZWFyRnJvbVRpbWUodCk7CisgIHZhciBsZWFwID0gSW5MZWFw
WWVhcih0KTsKKyAgdmFyIGRheSA9IDA7CisgIAorICBpZihtID49IDEpIGRheSArPSBEYXlzSW5N
b250aCgwLCBsZWFwKTsKKyAgaWYobSA+PSAyKSBkYXkgKz0gRGF5c0luTW9udGgoMSwgbGVhcCk7
CisgIGlmKG0gPj0gMykgZGF5ICs9IERheXNJbk1vbnRoKDIsIGxlYXApOworICBpZihtID49IDQp
IGRheSArPSBEYXlzSW5Nb250aCgzLCBsZWFwKTsKKyAgaWYobSA+PSA1KSBkYXkgKz0gRGF5c0lu
TW9udGgoNCwgbGVhcCk7CisgIGlmKG0gPj0gNikgZGF5ICs9IERheXNJbk1vbnRoKDUsIGxlYXAp
OworICBpZihtID49IDcpIGRheSArPSBEYXlzSW5Nb250aCg2LCBsZWFwKTsKKyAgaWYobSA+PSA4
KSBkYXkgKz0gRGF5c0luTW9udGgoNywgbGVhcCk7CisgIGlmKG0gPj0gOSkgZGF5ICs9IERheXNJ
bk1vbnRoKDgsIGxlYXApOworICBpZihtID49IDEwKSBkYXkgKz0gRGF5c0luTW9udGgoOSwgbGVh
cCk7CisgIGlmKG0gPj0gMTEpIGRheSArPSBEYXlzSW5Nb250aCgxMCwgbGVhcCk7CisgIAorICB2
YXIgbW9udGhfc3RhcnQgPSBUaW1lRnJvbVllYXIoeWVhcikrZGF5Km1zUGVyRGF5OworICB2YXIg
c3VuZGF5ID0gMDsKKyAgCisgIGlmKGNvdW50ID09PSAibGFzdCIpeworICAgIGZvcih2YXIgbGFz
dF9zdW5kYXkgPSBtb250aF9zdGFydCtEYXlzSW5Nb250aChtLCBsZWFwKSptc1BlckRheTsgCisg
ICAgICBXZWVrRGF5KGxhc3Rfc3VuZGF5KT4wOworICAgICAgbGFzdF9zdW5kYXkgLT0gbXNQZXJE
YXkKKyAgICApe307CisgICAgc3VuZGF5ID0gbGFzdF9zdW5kYXk7CisgIH0KKyAgZWxzZSB7Cisg
ICAgZm9yKHZhciBmaXJzdF9zdW5kYXkgPSBtb250aF9zdGFydDsgCisgICAgICBXZWVrRGF5KGZp
cnN0X3N1bmRheSk+MDsKKyAgICAgIGZpcnN0X3N1bmRheSArPSBtc1BlckRheQorICAgICl7fTsK
KyAgICBzdW5kYXkgPSBmaXJzdF9zdW5kYXkrNyptc1BlckRheSooY291bnQtMSk7CisgIH0KKyAg
CisgIHJldHVybiBzdW5kYXk7Cit9CisKK2Z1bmN0aW9uIERheWxpZ2h0U2F2aW5nVEEodCkgewor
ICB0ID0gdC1Mb2NhbFRaQTsKKworICB2YXIgRFNUX3N0YXJ0ID0gR2V0U3VuZGF5SW5Nb250aCh0
LCAkRFNUX3N0YXJ0X21vbnRoLCAkRFNUX3N0YXJ0X3N1bmRheSkKKyAgICAgICAgICAgICAgICAg
ICskRFNUX3N0YXJ0X2hvdXIqbXNQZXJIb3VyCisgICAgICAgICAgICAgICAgICArJERTVF9zdGFy
dF9taW51dGVzKm1zUGVyTWludXRlOworICAgICAgICAgICAgICAgICAgCisgIHZhciBrID0gbmV3
IERhdGUoRFNUX3N0YXJ0KTsKKyAgCisgIHZhciBEU1RfZW5kICAgPSBHZXRTdW5kYXlJbk1vbnRo
KHQsICREU1RfZW5kX21vbnRoLCAkRFNUX2VuZF9zdW5kYXkpCisgICAgICAgICAgICAgICAgICAr
JERTVF9lbmRfaG91ciptc1BlckhvdXIKKyAgICAgICAgICAgICAgICAgICskRFNUX2VuZF9taW51
dGVzKm1zUGVyTWludXRlOworCisgIGlmICggdCA+PSBEU1Rfc3RhcnQgJiYgdCA8IERTVF9lbmQg
KSB7CisgICAgcmV0dXJuIG1zUGVySG91cjsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gMDsKKyAg
fQorfQorCisvLzE1LjkuMS45IExvY2FsIFRpbWUKK2Z1bmN0aW9uIExvY2FsVGltZSh0KXsKKyAg
cmV0dXJuIHQrTG9jYWxUWkErRGF5bGlnaHRTYXZpbmdUQSh0KTsKK30KKworZnVuY3Rpb24gVVRD
KHQpIHsKKyAgcmV0dXJuIHQtTG9jYWxUWkEtRGF5bGlnaHRTYXZpbmdUQSh0LUxvY2FsVFpBKTsK
K30KKworLy8xNS45LjEuMTAgSG91cnMsIE1pbnV0ZXMsIFNlY29uZCwgYW5kIE1pbGxpc2Vjb25k
cworZnVuY3Rpb24gSG91ckZyb21UaW1lKHQpeworICByZXR1cm4gTWF0aC5mbG9vcih0L21zUGVy
SG91ciklSG91cnNQZXJEYXk7Cit9CisKK2Z1bmN0aW9uIE1pbkZyb21UaW1lKHQpeworICByZXR1
cm4gTWF0aC5mbG9vcih0L21zUGVyTWludXRlKSVNaW51dGVzUGVySG91cjsKK30KKworZnVuY3Rp
b24gU2VjRnJvbVRpbWUodCl7CisgIHJldHVybiBNYXRoLmZsb29yKHQvbXNQZXJTZWNvbmQpJVNl
Y29uZHNQZXJNaW51dGU7Cit9CisKK2Z1bmN0aW9uIG1zRnJvbVRpbWUodCl7CisgIHJldHVybiB0
JW1zUGVyU2Vjb25kOworfQorCisvLzE1LjkuMS4xMSBNYWtlVGltZSAoaG91ciwgbWluLCBzZWMs
IG1zKQorZnVuY3Rpb24gTWFrZVRpbWUoaG91ciwgbWluLCBzZWMsIG1zKXsKKyAgaWYgKCAhaXNG
aW5pdGUoaG91cikgfHwgIWlzRmluaXRlKG1pbikgfHwgIWlzRmluaXRlKHNlYykgfHwgIWlzRmlu
aXRlKG1zKSkgeworICAgIHJldHVybiBOdW1iZXIuTmFOOworICB9CisKKyAgaG91ciA9IFRvSW50
ZWdlcihob3VyKTsKKyAgbWluICA9IFRvSW50ZWdlcihtaW4pOworICBzZWMgID0gVG9JbnRlZ2Vy
KHNlYyk7CisgIG1zICAgPSBUb0ludGVnZXIobXMpOworCisgIHJldHVybiAoKGhvdXIqbXNQZXJI
b3VyKSArIChtaW4qbXNQZXJNaW51dGUpICsgKHNlYyptc1BlclNlY29uZCkgKyBtcyk7Cit9CisK
Ky8vMTUuOS4xLjEyIE1ha2VEYXkgKHllYXIsIG1vbnRoLCBkYXRlKQorZnVuY3Rpb24gTWFrZURh
eSh5ZWFyLCBtb250aCwgZGF0ZSkgeworICBpZiAoICFpc0Zpbml0ZSh5ZWFyKSB8fCAhaXNGaW5p
dGUobW9udGgpIHx8ICFpc0Zpbml0ZShkYXRlKSkgeworICAgIHJldHVybiBOdW1iZXIuTmFOOwor
ICB9CisKKyAgeWVhciA9IFRvSW50ZWdlcih5ZWFyKTsKKyAgbW9udGggPSBUb0ludGVnZXIobW9u
dGgpOworICBkYXRlID0gVG9JbnRlZ2VyKGRhdGUgKTsKKworICB2YXIgcmVzdWx0NSA9IHllYXIg
KyBNYXRoLmZsb29yKG1vbnRoLzEyKTsKKyAgdmFyIHJlc3VsdDYgPSBtb250aCUxMjsKKworICB2
YXIgc2lnbiA9ICggeWVhciA8IDE5NzAgKSA/IC0xIDogMTsKKyAgdmFyIHQgPSAgICAoIHllYXIg
PCAxOTcwICkgPyAxIDogIDA7CisgIHZhciB5ID0gICAgKCB5ZWFyIDwgMTk3MCApID8gMTk2OSA6
IDE5NzA7CisKKyAgaWYoIHNpZ24gPT0gLTEgKXsKKyAgICBmb3IgKCB5ID0gMTk2OTsgeSA+PSB5
ZWFyOyB5ICs9IHNpZ24gKSB7CisgICAgICB0ICs9IHNpZ24gKiBEYXlzSW5ZZWFyKHkpKm1zUGVy
RGF5OworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBmb3IgKCB5ID0gMTk3MCA7IHkgPCB5ZWFyOyB5
ICs9IHNpZ24gKSB7CisgICAgICB0ICs9IHNpZ24gKiBEYXlzSW5ZZWFyKHkpKm1zUGVyRGF5Owor
ICAgIH0KKyAgfQorCisgIHZhciBsZWFwID0gMDsKKyAgZm9yICggdmFyIG0gPSAwOyBtIDwgbW9u
dGg7IG0rKyApIHsKKyAgICAvL2lmIHllYXIgaXMgY2hhbmdlZCwgdGhhbiB3ZSBuZWVkIHRvIHJl
Y2FsY3VsYXRlIGxlZXAKKyAgICBsZWFwID0gSW5MZWFwWWVhcih0KTsKKyAgICB0ICs9IERheXNJ
bk1vbnRoKG0sIGxlYXApKm1zUGVyRGF5OworICB9CisKKyAgaWYgKCBZZWFyRnJvbVRpbWUodCkg
IT0gcmVzdWx0NSApIHsKKyAgICByZXR1cm4gTnVtYmVyLk5hTjsKKyAgfQorICBpZiAoIE1vbnRo
RnJvbVRpbWUodCkgIT0gcmVzdWx0NiApIHsKKyAgICByZXR1cm4gTnVtYmVyLk5hTjsKKyAgfQor
ICBpZiAoIERhdGVGcm9tVGltZSh0KSAhPSAxICkgeworICAgIHJldHVybiBOdW1iZXIuTmFOOwor
ICB9CisKKyAgcmV0dXJuIERheSh0KStkYXRlLTE7Cit9CisKKy8vMTUuOS4xLjEzIE1ha2VEYXRl
IChkYXksIHRpbWUpCitmdW5jdGlvbiBNYWtlRGF0ZSggZGF5LCB0aW1lICkgeworICBpZighaXNG
aW5pdGUoZGF5KSB8fCAhaXNGaW5pdGUodGltZSkpIHsKKyAgICByZXR1cm4gTnVtYmVyLk5hTjsK
KyAgfQorICAKKyAgcmV0dXJuIGRheSptc1BlckRheSt0aW1lOworfQorCisvLzE1LjkuMS4xNCBU
aW1lQ2xpcCAodGltZSkKK2Z1bmN0aW9uIFRpbWVDbGlwKHRpbWUpIHsKKyAgaWYoIWlzRmluaXRl
KHRpbWUpIHx8IE1hdGguYWJzKHRpbWUpID4gOC42NGUxNSl7CisgICAgcmV0dXJuIE51bWJlci5O
YU47CisgIH0KKworICByZXR1cm4gVG9JbnRlZ2VyKHRpbWUpOworfQorCisvL1Rlc3QgRnVuY3Rp
b25zCitmdW5jdGlvbiBDb25zdHJ1Y3REYXRlKHllYXIsIG1vbnRoLCBkYXRlLCBob3VycywgbWlu
dXRlcywgc2Vjb25kcywgbXMpeworICAvKgorICAgKiAxLiBDYWxsIFRvTnVtYmVyKHllYXIpCisg
ICAqIDIuIENhbGwgVG9OdW1iZXIobW9udGgpCisgICAqIDMuIElmIGRhdGUgaXMgc3VwcGxpZWQg
dXNlIFRvTnVtYmVyKGRhdGUpOyBlbHNlIHVzZSAxCisgICAqIDQuIElmIGhvdXJzIGlzIHN1cHBs
aWVkIHVzZSBUb051bWJlcihob3Vycyk7IGVsc2UgdXNlIDAKKyAgICogNS4gSWYgbWludXRlcyBp
cyBzdXBwbGllZCB1c2UgVG9OdW1iZXIobWludXRlcyk7IGVsc2UgdXNlIDAKKyAgICogNi4gSWYg
c2Vjb25kcyBpcyBzdXBwbGllZCB1c2UgVG9OdW1iZXIoc2Vjb25kcyk7IGVsc2UgdXNlIDAKKyAg
ICogNy4gSWYgbXMgaXMgc3VwcGxpZWQgdXNlIFRvTnVtYmVyKG1zKTsgZWxzZSB1c2UgMAorICAg
KiA4LiBJZiBSZXN1bHQoMSkgaXMgbm90IE5hTiBhbmQgMCA8PSBUb0ludGVnZXIoUmVzdWx0KDEp
KSA8PSA5OSwgUmVzdWx0KDgpIGlzCisgICAqIDE5MDArVG9JbnRlZ2VyKFJlc3VsdCgxKSk7IG90
aGVyd2lzZSwgUmVzdWx0KDgpIGlzIFJlc3VsdCgxKQorICAgKiA5LiBDb21wdXRlIE1ha2VEYXko
UmVzdWx0KDgpLCBSZXN1bHQoMiksIFJlc3VsdCgzKSkKKyAgICogMTAuIENvbXB1dGUgTWFrZVRp
bWUoUmVzdWx0KDQpLCBSZXN1bHQoNSksIFJlc3VsdCg2KSwgUmVzdWx0KDcpKQorICAgKiAxMS4g
Q29tcHV0ZSBNYWtlRGF0ZShSZXN1bHQoOSksIFJlc3VsdCgxMCkpCisgICAqIDEyLiBTZXQgdGhl
IFtbVmFsdWVdXSBwcm9wZXJ0eSBvZiB0aGUgbmV3bHkgY29uc3RydWN0ZWQgb2JqZWN0IHRvIFRp
bWVDbGlwKFVUQyhSZXN1bHQoMTEpKSkKKyAgICovCisgIHZhciByMSA9IE51bWJlcih5ZWFyKTsK
KyAgdmFyIHIyID0gTnVtYmVyKG1vbnRoKTsKKyAgdmFyIHIzID0gKChkYXRlICYmIGFyZ3VtZW50
cy5sZW5ndGggPiAyKSA/IE51bWJlcihkYXRlKSA6IDEpOworICB2YXIgcjQgPSAoKGhvdXJzICYm
IGFyZ3VtZW50cy5sZW5ndGggPiAzKSA/IE51bWJlcihob3VycykgOiAwKTsgICAKKyAgdmFyIHI1
ID0gKChtaW51dGVzICYmIGFyZ3VtZW50cy5sZW5ndGggPiA0KSA/IE51bWJlcihtaW51dGVzKSA6
IDApOyAgIAorICB2YXIgcjYgPSAoKHNlY29uZHMgJiYgYXJndW1lbnRzLmxlbmd0aCA+IDUpID8g
TnVtYmVyKHNlY29uZHMpIDogMCk7ICAgCisgIHZhciByNyA9ICgobXMgJiYgYXJndW1lbnRzLmxl
bmd0aCA+IDYpID8gTnVtYmVyKG1zKSA6IDApOworICAKKyAgdmFyIHI4ID0gcjE7CisgIAorICBp
ZighaXNOYU4ocjEpICYmICgwIDw9IFRvSW50ZWdlcihyMSkpICYmIChUb0ludGVnZXIocjEpIDw9
IDk5KSkKKyAgICByOCA9IDE5MDArcjE7CisgIAorICB2YXIgcjkgPSBNYWtlRGF5KHI4LCByMiwg
cjMpOworICB2YXIgcjEwID0gTWFrZVRpbWUocjQsIHI1LCByNiwgcjcpOworICB2YXIgcjExID0g
TWFrZURhdGUocjksIHIxMCk7CisgIAorICByZXR1cm4gVGltZUNsaXAoVVRDKHIxMSkpOworfQor
CisKKworaWYgKENvbnN0cnVjdERhdGUoMTg5OSwgMTEpICE9PSBuZXcgRGF0ZSgxODk5LCAxMSku
dmFsdWVPZigpKSB7CisgIHRlc3RGYWlsZWQoIiMxOiBJbmNvcnJlY3QgdmFsdWUgb2YgRGF0ZSIp
OworfQorCitpZiAoQ29uc3RydWN0RGF0ZSgxODk5LCAxMikgIT09IG5ldyBEYXRlKDE4OTksIDEy
KS52YWx1ZU9mKCkpIHsKKyAgdGVzdEZhaWxlZCgiIzI6IEluY29ycmVjdCB2YWx1ZSBvZiBEYXRl
Iik7Cit9CisKK2lmIChDb25zdHJ1Y3REYXRlKDE5MDAsIDApICE9PSBuZXcgRGF0ZSgxOTAwLCAw
KS52YWx1ZU9mKCkpIHsKKyAgdGVzdEZhaWxlZCgiIzM6IEluY29ycmVjdCB2YWx1ZSBvZiBEYXRl
Iik7Cit9CisKK2lmIChDb25zdHJ1Y3REYXRlKDE5NjksIDExKSAhPT0gbmV3IERhdGUoMTk2OSwg
MTEpLnZhbHVlT2YoKSkgeworICB0ZXN0RmFpbGVkKCIjNDogSW5jb3JyZWN0IHZhbHVlIG9mIERh
dGUiKTsKK30KKworaWYgKENvbnN0cnVjdERhdGUoMTk2OSwgMTIpICE9PSBuZXcgRGF0ZSgxOTY5
LCAxMikudmFsdWVPZigpKSB7CisgIHRlc3RGYWlsZWQoIiM1OiBJbmNvcnJlY3QgdmFsdWUgb2Yg
RGF0ZSIpOworfQorCitpZiAoQ29uc3RydWN0RGF0ZSgxOTcwLCAwKSAhPT0gbmV3IERhdGUoMTk3
MCwgMCkudmFsdWVPZigpKSB7CisgIHRlc3RGYWlsZWQoIiM2OiBJbmNvcnJlY3QgdmFsdWUgb2Yg
RGF0ZSIpOworfQorCitpZiAoQ29uc3RydWN0RGF0ZSgxOTk5LCAxMSkgIT09IG5ldyBEYXRlKDE5
OTksIDExKS52YWx1ZU9mKCkpIHsKKyAgdGVzdEZhaWxlZCgiIzc6IEluY29ycmVjdCB2YWx1ZSBv
ZiBEYXRlIik7Cit9CisKK2lmIChDb25zdHJ1Y3REYXRlKDE5OTksIDEyKSAhPT0gbmV3IERhdGUo
MTk5OSwgMTIpLnZhbHVlT2YoKSkgeworICB0ZXN0RmFpbGVkKCIjODogSW5jb3JyZWN0IHZhbHVl
IG9mIERhdGUiKTsKK30KKworaWYgKENvbnN0cnVjdERhdGUoMjAwMCwgMCkgIT09IG5ldyBEYXRl
KDIwMDAsIDApLnZhbHVlT2YoKSkgeworICB0ZXN0RmFpbGVkKCIjOTogSW5jb3JyZWN0IHZhbHVl
IG9mIERhdGUiKTsKK30KKworaWYgKENvbnN0cnVjdERhdGUoMjA5OSwgMTEpICE9PSBuZXcgRGF0
ZSgyMDk5LCAxMSkudmFsdWVPZigpKSB7CisgIHRlc3RGYWlsZWQoIiMxMDogSW5jb3JyZWN0IHZh
bHVlIG9mIERhdGUiKTsKK30KKworaWYgKENvbnN0cnVjdERhdGUoMjA5OSwgMTIpICE9PSBuZXcg
RGF0ZSgyMDk5LCAxMikudmFsdWVPZigpKSB7CisgIHRlc3RGYWlsZWQoIiMxMTogSW5jb3JyZWN0
IHZhbHVlIG9mIERhdGUiKTsKK30KKworaWYgKENvbnN0cnVjdERhdGUoMjEwMCwgMCkgIT09IG5l
dyBEYXRlKDIxMDAsIDApLnZhbHVlT2YoKSkgeworICB0ZXN0RmFpbGVkKCIjMTI6IEluY29ycmVj
dCB2YWx1ZSBvZiBEYXRlIik7Cit9CisKK30gY2F0Y2ggKGV4KSB7CisgICAgc3B1dG5pa0V4Y2Vw
dGlvbiA9IGV4OworfQorCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0
PgorCis8c2NyaXB0PgoraWYgKCFzdWNjZXNzZnVsbHlQYXJzZWQpCisgICAgcHJpbnRUZXN0RmFp
bGVkKCdzdWNjZXNzZnVsbHlQYXJzZWQgaXMgbm90IHNldCcpOworZWxzZSBpZiAoc3B1dG5pa0V4
Y2VwdGlvbikKKyAgICBwcmludFRlc3RGYWlsZWQoc3B1dG5pa0V4Y2VwdGlvbik7CitlbHNlCisg
ICAgcHJpbnRUZXN0UGFzc2VkKCIiKTsKK3Rlc3RQcmludCgnPGJyIC8+PHNwYW4gY2xhc3M9InBh
c3MiPlRFU1QgQ09NUExFVEU8L3NwYW4+Jyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3NwdXRuaWsvQ29uZm9ybWFuY2UvMTVfTmF0aXZlX09i
amVjdHMvMTUuOV9EYXRlLzE1LjkuMy9TMTUuOS4zLjFfQTVfVDEuaHRtbC1kaXNhYmxlZCBiL0xh
eW91dFRlc3RzL3NwdXRuaWsvQ29uZm9ybWFuY2UvMTVfTmF0aXZlX09iamVjdHMvMTUuOV9EYXRl
LzE1LjkuMy9TMTUuOS4zLjFfQTVfVDEuaHRtbC1kaXNhYmxlZApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNDg2NGQyYzc4NGUxNzNhMDY5ZDQyNDA2NGNiZjdlNDlmOTM5YWU5ZS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9z
cHV0bmlrL0NvbmZvcm1hbmNlLzE1X05hdGl2ZV9PYmplY3RzLzE1LjlfRGF0ZS8xNS45LjMvUzE1
LjkuMy4xX0E1X1QxLmh0bWwtZGlzYWJsZWQKKysrIC9kZXYvbnVsbApAQCAtMSw1MjIgKzAsMCBA
QAotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGNoYXJzZXQ9J3V0Zi04Jz4KLTxzdHlsZT4KLS5wYXNz
IHsKLSAgICBmb250LXdlaWdodDogYm9sZDsKLSAgICBjb2xvcjogZ3JlZW47Ci19Ci0uZmFpbCB7
Ci0gICAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci0gICAgY29sb3I6IHJlZDsKLX0KLTwvc3R5bGU+Ci0K
LTxzY3JpcHQ+Ci1pZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgdGVzdFJ1bm5lci5kdW1wQXNU
ZXh0KCk7Ci0KLWZ1bmN0aW9uIFNwdXRuaWtFcnJvcihtZXNzYWdlKQotewotICAgIHRoaXMubWVz
c2FnZSA9IG1lc3NhZ2U7Ci19Ci0KLVNwdXRuaWtFcnJvci5wcm90b3R5cGUudG9TdHJpbmcgPSBm
dW5jdGlvbiAoKQotewotICAgIHJldHVybiAnU3B1dG5pa0Vycm9yOiAnICsgdGhpcy5tZXNzYWdl
OwotfTsKLQotdmFyIHNwdXRuaWtFeGNlcHRpb247Ci0KLWZ1bmN0aW9uIHRlc3RQcmludChtc2cp
Ci17Ci0gICAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5hcHBlbmRDaGlsZChzcGFuKTsgLy8g
aW5zZXJ0IGl0IGZpcnN0IHNvIFhIVE1MIGtub3dzIHRoZSBuYW1lc3BhY2UgCi0gICAgc3Bhbi5p
bm5lckhUTUwgPSBtc2cgKyAnPGJyIC8+JzsKLX0KLQotZnVuY3Rpb24gZXNjYXBlSFRNTCh0ZXh0
KQotewotICAgIHJldHVybiB0ZXh0LnRvU3RyaW5nKCkucmVwbGFjZSgvJi9nLCAiJmFtcDsiKS5y
ZXBsYWNlKC88L2csICImbHQ7Iik7Ci19Ci0KLWZ1bmN0aW9uIHByaW50VGVzdFBhc3NlZChtc2cp
Ci17Ci0gICAgdGVzdFByaW50KCc8c3Bhbj48c3BhbiBjbGFzcz0icGFzcyI+UEFTUzwvc3Bhbj4g
JyArIGVzY2FwZUhUTUwobXNnKSArICc8L3NwYW4+Jyk7Ci19Ci0KLWZ1bmN0aW9uIHByaW50VGVz
dEZhaWxlZChtc2cpCi17Ci0gICAgdGVzdFByaW50KCc8c3Bhbj48c3BhbiBjbGFzcz0iZmFpbCI+
RkFJTDwvc3Bhbj4gJyArIGVzY2FwZUhUTUwobXNnKSArICc8L3NwYW4+Jyk7Ci19Ci0KLWZ1bmN0
aW9uIHRlc3RGYWlsZWQobXNnKQotewotICAgIHRocm93IG5ldyBTcHV0bmlrRXJyb3IobXNnKTsK
LX0KLQotdmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IGZhbHNlOwotPC9zY3JpcHQ+Ci0KLTwvaGVh
ZD4KLTxib2R5PgotPHA+UzE1LjkuMy4xX0E1X1QxPC9wPgotPGRpdiBpZD0nY29uc29sZSc+PC9k
aXY+Ci08c2NyaXB0PgotdHJ5IHsKLQotLyoqCi0gKiBAbmFtZTogUzE1LjkuMy4xX0E1X1QxOwot
ICogQHNlY3Rpb246IDE1LjkuMy4xOwotICogQGFzc2VydGlvbjogVGhlIFtbVmFsdWVdXSBwcm9w
ZXJ0eSBvZiB0aGUgbmV3bHkgY29uc3RydWN0ZWQgb2JqZWN0IAotICogaXMgc2V0IGJ5IGZvbGxv
d2luZyBzdGVwczoKLSAqIDguIElmIFJlc3VsdCgxKSBpcyBub3QgTmFOIGFuZCAwIDw9IFRvSW50
ZWdlcihSZXN1bHQoMSkpIDw9IDk5LCBSZXN1bHQoOCkgaXMKLSAqIDE5MDArVG9JbnRlZ2VyKFJl
c3VsdCgxKSk7IG90aGVyd2lzZSwgUmVzdWx0KDgpIGlzIFJlc3VsdCgxKQotICogOS4gQ29tcHV0
ZSBNYWtlRGF5KFJlc3VsdCg4KSwgUmVzdWx0KDIpLCBSZXN1bHQoMykpCi0gKiAxMC4gQ29tcHV0
ZSBNYWtlVGltZShSZXN1bHQoNCksIFJlc3VsdCg1KSwgUmVzdWx0KDYpLCBSZXN1bHQoNykpCi0g
KiAxMS4gQ29tcHV0ZSBNYWtlRGF0ZShSZXN1bHQoOSksIFJlc3VsdCgxMCkpCi0gKiAxMi4gU2V0
IHRoZSBbW1ZhbHVlXV0gcHJvcGVydHkgb2YgdGhlIG5ld2x5IGNvbnN0cnVjdGVkIG9iamVjdCB0
byAKLSAqIFRpbWVDbGlwKFVUQyhSZXN1bHQoMTEpKSk7Ci0gKiBAZGVzY3JpcHRpb246IDIgYXJn
dW1lbnRzLCAoeWVhciwgbW9udGgpOwotICovCi0KLXZhciAkRFNUX2VuZF9ob3VyID0gMjsKLXZh
ciAkRFNUX2VuZF9taW51dGVzID0gMDsKLXZhciAkRFNUX2VuZF9tb250aCA9IDEwOwotdmFyICRE
U1RfZW5kX3N1bmRheSA9ICdmaXJzdCc7Ci12YXIgJERTVF9zdGFydF9ob3VyID0gMjsKLXZhciAk
RFNUX3N0YXJ0X21pbnV0ZXMgPSAwOwotdmFyICREU1Rfc3RhcnRfbW9udGggPSAyOwotdmFyICRE
U1Rfc3RhcnRfc3VuZGF5ID0gJ2ZpcnN0JzsKLXZhciAkTG9jYWxUWiA9IC04OwotZnVuY3Rpb24g
VG9JbnRlZ2VyKHApIHsKLSAgeCA9IE51bWJlcihwKTsKLQotICBpZihpc05hTih4KSl7Ci0gICAg
cmV0dXJuICswOwotICB9Ci0gIAotICBpZigoeCA9PT0gKzApIAotICB8fCAoeCA9PT0gLTApIAot
ICB8fCAoeCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSAKLSAgfHwgKHggPT09IE51bWJl
ci5ORUdBVElWRV9JTkZJTklUWSkpewotICAgICByZXR1cm4geDsKLSAgfQotCi0gIHZhciBzaWdu
ID0gKCB4IDwgMCApID8gLTEgOiAxOwotCi0gIHJldHVybiAoc2lnbipNYXRoLmZsb29yKE1hdGgu
YWJzKHgpKSk7Ci19Ci0KLQotdmFyIEhvdXJzUGVyRGF5ID0gMjQ7Ci12YXIgTWludXRlc1Blckhv
dXIgPSA2MDsKLXZhciBTZWNvbmRzUGVyTWludXRlID0gNjA7Ci0KLXZhciBtc1BlckRheSA9IDg2
NDAwMDAwOwotdmFyIG1zUGVyU2Vjb25kID0gMTAwMDsKLXZhciBtc1Blck1pbnV0ZSA9IDYwMDAw
OwotdmFyIG1zUGVySG91ciA9IDM2MDAwMDA7Ci0KLXZhciBkYXRlXzE4OTlfZW5kID0gLTIyMDg5
ODg4MDAwMDE7Ci12YXIgZGF0ZV8xOTAwX3N0YXJ0ID0gLTIyMDg5ODg4MDAwMDA7Ci12YXIgZGF0
ZV8xOTY5X2VuZCA9IC0xOwotdmFyIGRhdGVfMTk3MF9zdGFydCA9IDA7Ci12YXIgZGF0ZV8xOTk5
X2VuZCA9IDk0NjY4NDc5OTk5OTsKLXZhciBkYXRlXzIwMDBfc3RhcnQgPSA5NDY2ODQ4MDAwMDA7
Ci12YXIgZGF0ZV8yMDk5X2VuZCA9IDQxMDI0NDQ3OTk5OTk7Ci12YXIgZGF0ZV8yMTAwX3N0YXJ0
ID0gNDEwMjQ0NDgwMDAwMDsKLQotCi0vLzE1LjkuMS4yIERheSBOdW1iZXIgYW5kIFRpbWUgd2l0
aGluIERheQotZnVuY3Rpb24gRGF5KHQpIHsKLSAgcmV0dXJuIE1hdGguZmxvb3IodC9tc1BlckRh
eSk7Ci19Ci0KLWZ1bmN0aW9uIFRpbWVXaXRoaW5EYXkodCkgewotICByZXR1cm4gdCVtc1BlckRh
eTsKLX0KLQotLy8xNS45LjEuMyBZZWFyIE51bWJlcgotZnVuY3Rpb24gRGF5c0luWWVhcih5KXsK
LSAgaWYoeSU0ICE9IDApIHJldHVybiAzNjU7Ci0gIGlmKHklNCA9PSAwICYmIHklMTAwICE9IDAp
IHJldHVybiAzNjY7Ci0gIGlmKHklMTAwID09IDAgJiYgeSU0MDAgIT0gMCkgcmV0dXJuIDM2NTsK
LSAgaWYoeSU0MDAgPT0gMCkgcmV0dXJuIDM2NjsKLX0KLQotZnVuY3Rpb24gRGF5RnJvbVllYXIo
eSkgewotICByZXR1cm4gKDM2NSooeS0xOTcwKQotICAgICAgICAgICsgTWF0aC5mbG9vcigoeS0x
OTY5KS80KQotICAgICAgICAgIC0gTWF0aC5mbG9vcigoeS0xOTAxKS8xMDApCi0gICAgICAgICAg
KyBNYXRoLmZsb29yKCh5LTE2MDEpLzQwMCkpOwotfQotCi1mdW5jdGlvbiBUaW1lRnJvbVllYXIo
eSl7Ci0gIHJldHVybiBtc1BlckRheSpEYXlGcm9tWWVhcih5KTsKLX0KLQotZnVuY3Rpb24gWWVh
ckZyb21UaW1lKHQpIHsKLSAgdCA9IE51bWJlcih0KTsKLSAgdmFyIHNpZ24gPSAoIHQgPCAwICkg
PyAtMSA6IDE7Ci0gIHZhciB5ZWFyID0gKCBzaWduIDwgMCApID8gMTk2OSA6IDE5NzA7Ci0gIAot
ICBmb3IodmFyIHRpbWUgPSAwOzt5ZWFyICs9IHNpZ24pewotICAgIHRpbWUgPSBUaW1lRnJvbVll
YXIoeWVhcik7Ci0gICAgCi0gICAgaWYoc2lnbiA+IDAgJiYgdGltZSA+IHQpewotICAgICAgeWVh
ciAtPSBzaWduOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGVsc2UgaWYoc2lnbiA8IDAgJiYg
dGltZSA8PSB0KXsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfTsKLSAgcmV0dXJuIHllYXI7Ci19
Ci0gIAotZnVuY3Rpb24gSW5MZWFwWWVhcih0KXsKLSAgaWYoRGF5c0luWWVhcihZZWFyRnJvbVRp
bWUodCkpID09IDM2NSkKLSAgICByZXR1cm4gMDsKLSAgCi0gIGlmKERheXNJblllYXIoWWVhckZy
b21UaW1lKHQpKSA9PSAzNjYpCi0gICAgcmV0dXJuIDE7Ci19Ci0KLWZ1bmN0aW9uIERheVdpdGhp
blllYXIodCkgewotICByZXR1cm4gRGF5KHQpLURheUZyb21ZZWFyKFllYXJGcm9tVGltZSh0KSk7
Ci19Ci0KLS8vMTUuOS4xLjQgTW9udGggTnVtYmVyCi1mdW5jdGlvbiBNb250aEZyb21UaW1lKHQp
ewotICB2YXIgZGF5ID0gRGF5V2l0aGluWWVhcih0KTsKLSAgdmFyIGxlYXAgPSBJbkxlYXBZZWFy
KHQpOwotCi0gIGlmKCgwIDw9IGRheSkgJiYgKGRheSA8IDMxKSkgcmV0dXJuIDA7Ci0gIGlmKCgz
MSA8PSBkYXkpICYmIChkYXkgPCAoNTkrbGVhcCkpKSByZXR1cm4gMTsKLSAgaWYoKCg1OStsZWFw
KSA8PSBkYXkpICYmIChkYXkgPCAoOTArbGVhcCkpKSByZXR1cm4gMjsKLSAgaWYoKCg5MCtsZWFw
KSA8PSBkYXkpICYmIChkYXkgPCAoMTIwK2xlYXApKSkgcmV0dXJuIDM7Ci0gIGlmKCgoMTIwK2xl
YXApIDw9IGRheSkgJiYgKGRheSA8ICgxNTErbGVhcCkpKSByZXR1cm4gNDsKLSAgaWYoKCgxNTEr
bGVhcCkgPD0gZGF5KSAmJiAoZGF5IDwgKDE4MStsZWFwKSkpIHJldHVybiA1OwotICBpZigoKDE4
MStsZWFwKSA8PSBkYXkpICYmIChkYXkgPCAoMjEyK2xlYXApKSkgcmV0dXJuIDY7Ci0gIGlmKCgo
MjEyK2xlYXApIDw9IGRheSkgJiYgKGRheSA8ICgyNDMrbGVhcCkpKSByZXR1cm4gNzsKLSAgaWYo
KCgyNDMrbGVhcCkgPD0gZGF5KSAmJiAoZGF5IDwgKDI3MytsZWFwKSkpIHJldHVybiA4OwotICBp
ZigoKDI3MytsZWFwKSA8PSBkYXkpICYmIChkYXkgPCAoMzA0K2xlYXApKSkgcmV0dXJuIDk7Ci0g
IGlmKCgoMzA0K2xlYXApIDw9IGRheSkgJiYgKGRheSA8ICgzMzQrbGVhcCkpKSByZXR1cm4gMTA7
Ci0gIGlmKCgoMzM0K2xlYXApIDw9IGRheSkgJiYgKGRheSA8ICgzNjUrbGVhcCkpKSByZXR1cm4g
MTE7Ci19Ci0KLS8vMTUuOS4xLjUgRGF0ZSBOdW1iZXIKLWZ1bmN0aW9uIERhdGVGcm9tVGltZSh0
KSB7Ci0gIHZhciBkYXkgPSBEYXlXaXRoaW5ZZWFyKHQpOwotICB2YXIgbW9udGggPSBNb250aEZy
b21UaW1lKHQpOwotICB2YXIgbGVhcCA9IEluTGVhcFllYXIodCk7Ci0KLSAgaWYobW9udGggPT0g
MCkgcmV0dXJuIGRheSsxOwotICBpZihtb250aCA9PSAxKSByZXR1cm4gZGF5LTMwOwotICBpZiht
b250aCA9PSAyKSByZXR1cm4gZGF5LTU4LWxlYXA7Ci0gIGlmKG1vbnRoID09IDMpIHJldHVybiBk
YXktODktbGVhcDsKLSAgaWYobW9udGggPT0gNCkgcmV0dXJuIGRheS0xMTktbGVhcDsKLSAgaWYo
bW9udGggPT0gNSkgcmV0dXJuIGRheS0xNTAtbGVhcDsKLSAgaWYobW9udGggPT0gNikgcmV0dXJu
IGRheS0xODAtbGVhcDsKLSAgaWYobW9udGggPT0gNykgcmV0dXJuIGRheS0yMTEtbGVhcDsKLSAg
aWYobW9udGggPT0gOCkgcmV0dXJuIGRheS0yNDItbGVhcDsKLSAgaWYobW9udGggPT0gOSkgcmV0
dXJuIGRheS0yNzItbGVhcDsKLSAgaWYobW9udGggPT0gMTApIHJldHVybiBkYXktMzAzLWxlYXA7
Ci0gIGlmKG1vbnRoID09IDExKSByZXR1cm4gZGF5LTMzMy1sZWFwOwotfQotCi0vLzE1LjkuMS42
IFdlZWsgRGF5Ci1mdW5jdGlvbiBXZWVrRGF5KHQpIHsKLSAgdmFyIHdlZWtkYXkgPSAoRGF5KHQp
KzQpJTc7Ci0gIHJldHVybiAod2Vla2RheSA8IDAgPyA3K3dlZWtkYXkgOiB3ZWVrZGF5KTsKLX0K
LQotLy8xNS45LjEuOSBEYXlsaWdodCBTYXZpbmcgVGltZSBBZGp1c3RtZW50Ci12YXIgTG9jYWxU
WkEgPSAkTG9jYWxUWiptc1BlckhvdXI7Ci0KLWZ1bmN0aW9uIERheXNJbk1vbnRoKG0sIGxlYXAp
IHsKLSAgbSA9IG0lMTI7Ci0gIAotICAvL0FwcmlsLCBKdW5lLCBTZXB0LCBOb3YKLSAgaWYobSA9
PSAzIHx8IG0gPT0gNSB8fCBtID09IDggfHwgbSA9PSAxMCApIHsKLSAgICByZXR1cm4gMzA7Ci0g
IH0KLQotICAvL0phbiwgTWFyY2gsIE1heSwgSnVseSwgQXVnLCBPY3QsIERlYwotICBpZihtID09
IDAgfHwgbSA9PSAyIHx8IG0gPT0gNCB8fCBtID09IDYgfHwgbSA9PSA3IHx8IG0gPT0gOSB8fCBt
ID09IDExKXsKLSAgICByZXR1cm4gMzE7Ci0gIH0KLQotICAvL0ZlYgotICByZXR1cm4gMjgrbGVh
cDsKLX0KLQotZnVuY3Rpb24gR2V0U3VuZGF5SW5Nb250aCh0LCBtLCBjb3VudCl7Ci0gIHZhciB5
ZWFyID0gWWVhckZyb21UaW1lKHQpOwotICB2YXIgbGVhcCA9IEluTGVhcFllYXIodCk7Ci0gIHZh
ciBkYXkgPSAwOwotICAKLSAgaWYobSA+PSAxKSBkYXkgKz0gRGF5c0luTW9udGgoMCwgbGVhcCk7
Ci0gIGlmKG0gPj0gMikgZGF5ICs9IERheXNJbk1vbnRoKDEsIGxlYXApOwotICBpZihtID49IDMp
IGRheSArPSBEYXlzSW5Nb250aCgyLCBsZWFwKTsKLSAgaWYobSA+PSA0KSBkYXkgKz0gRGF5c0lu
TW9udGgoMywgbGVhcCk7Ci0gIGlmKG0gPj0gNSkgZGF5ICs9IERheXNJbk1vbnRoKDQsIGxlYXAp
OwotICBpZihtID49IDYpIGRheSArPSBEYXlzSW5Nb250aCg1LCBsZWFwKTsKLSAgaWYobSA+PSA3
KSBkYXkgKz0gRGF5c0luTW9udGgoNiwgbGVhcCk7Ci0gIGlmKG0gPj0gOCkgZGF5ICs9IERheXNJ
bk1vbnRoKDcsIGxlYXApOwotICBpZihtID49IDkpIGRheSArPSBEYXlzSW5Nb250aCg4LCBsZWFw
KTsKLSAgaWYobSA+PSAxMCkgZGF5ICs9IERheXNJbk1vbnRoKDksIGxlYXApOwotICBpZihtID49
IDExKSBkYXkgKz0gRGF5c0luTW9udGgoMTAsIGxlYXApOwotICAKLSAgdmFyIG1vbnRoX3N0YXJ0
ID0gVGltZUZyb21ZZWFyKHllYXIpK2RheSptc1BlckRheTsKLSAgdmFyIHN1bmRheSA9IDA7Ci0g
IAotICBpZihjb3VudCA9PT0gImxhc3QiKXsKLSAgICBmb3IodmFyIGxhc3Rfc3VuZGF5ID0gbW9u
dGhfc3RhcnQrRGF5c0luTW9udGgobSwgbGVhcCkqbXNQZXJEYXk7IAotICAgICAgV2Vla0RheShs
YXN0X3N1bmRheSk+MDsKLSAgICAgIGxhc3Rfc3VuZGF5IC09IG1zUGVyRGF5Ci0gICAgKXt9Owot
ICAgIHN1bmRheSA9IGxhc3Rfc3VuZGF5OwotICB9Ci0gIGVsc2UgewotICAgIGZvcih2YXIgZmly
c3Rfc3VuZGF5ID0gbW9udGhfc3RhcnQ7IAotICAgICAgV2Vla0RheShmaXJzdF9zdW5kYXkpPjA7
Ci0gICAgICBmaXJzdF9zdW5kYXkgKz0gbXNQZXJEYXkKLSAgICApe307Ci0gICAgc3VuZGF5ID0g
Zmlyc3Rfc3VuZGF5KzcqbXNQZXJEYXkqKGNvdW50LTEpOwotICB9Ci0gIAotICByZXR1cm4gc3Vu
ZGF5OwotfQotCi1mdW5jdGlvbiBEYXlsaWdodFNhdmluZ1RBKHQpIHsKLSAgdCA9IHQtTG9jYWxU
WkE7Ci0KLSAgdmFyIERTVF9zdGFydCA9IEdldFN1bmRheUluTW9udGgodCwgJERTVF9zdGFydF9t
b250aCwgJERTVF9zdGFydF9zdW5kYXkpCi0gICAgICAgICAgICAgICAgICArJERTVF9zdGFydF9o
b3VyKm1zUGVySG91cgotICAgICAgICAgICAgICAgICAgKyREU1Rfc3RhcnRfbWludXRlcyptc1Bl
ck1pbnV0ZTsKLSAgICAgICAgICAgICAgICAgIAotICB2YXIgayA9IG5ldyBEYXRlKERTVF9zdGFy
dCk7Ci0gIAotICB2YXIgRFNUX2VuZCAgID0gR2V0U3VuZGF5SW5Nb250aCh0LCAkRFNUX2VuZF9t
b250aCwgJERTVF9lbmRfc3VuZGF5KQotICAgICAgICAgICAgICAgICAgKyREU1RfZW5kX2hvdXIq
bXNQZXJIb3VyCi0gICAgICAgICAgICAgICAgICArJERTVF9lbmRfbWludXRlcyptc1Blck1pbnV0
ZTsKLQotICBpZiAoIHQgPj0gRFNUX3N0YXJ0ICYmIHQgPCBEU1RfZW5kICkgewotICAgIHJldHVy
biBtc1BlckhvdXI7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLX0KLQotLy8xNS45
LjEuOSBMb2NhbCBUaW1lCi1mdW5jdGlvbiBMb2NhbFRpbWUodCl7Ci0gIHJldHVybiB0K0xvY2Fs
VFpBK0RheWxpZ2h0U2F2aW5nVEEodCk7Ci19Ci0KLWZ1bmN0aW9uIFVUQyh0KSB7Ci0gIHJldHVy
biB0LUxvY2FsVFpBLURheWxpZ2h0U2F2aW5nVEEodC1Mb2NhbFRaQSk7Ci19Ci0KLS8vMTUuOS4x
LjEwIEhvdXJzLCBNaW51dGVzLCBTZWNvbmQsIGFuZCBNaWxsaXNlY29uZHMKLWZ1bmN0aW9uIEhv
dXJGcm9tVGltZSh0KXsKLSAgcmV0dXJuIE1hdGguZmxvb3IodC9tc1BlckhvdXIpJUhvdXJzUGVy
RGF5OwotfQotCi1mdW5jdGlvbiBNaW5Gcm9tVGltZSh0KXsKLSAgcmV0dXJuIE1hdGguZmxvb3Io
dC9tc1Blck1pbnV0ZSklTWludXRlc1BlckhvdXI7Ci19Ci0KLWZ1bmN0aW9uIFNlY0Zyb21UaW1l
KHQpewotICByZXR1cm4gTWF0aC5mbG9vcih0L21zUGVyU2Vjb25kKSVTZWNvbmRzUGVyTWludXRl
OwotfQotCi1mdW5jdGlvbiBtc0Zyb21UaW1lKHQpewotICByZXR1cm4gdCVtc1BlclNlY29uZDsK
LX0KLQotLy8xNS45LjEuMTEgTWFrZVRpbWUgKGhvdXIsIG1pbiwgc2VjLCBtcykKLWZ1bmN0aW9u
IE1ha2VUaW1lKGhvdXIsIG1pbiwgc2VjLCBtcyl7Ci0gIGlmICggIWlzRmluaXRlKGhvdXIpIHx8
ICFpc0Zpbml0ZShtaW4pIHx8ICFpc0Zpbml0ZShzZWMpIHx8ICFpc0Zpbml0ZShtcykpIHsKLSAg
ICByZXR1cm4gTnVtYmVyLk5hTjsKLSAgfQotCi0gIGhvdXIgPSBUb0ludGVnZXIoaG91cik7Ci0g
IG1pbiAgPSBUb0ludGVnZXIobWluKTsKLSAgc2VjICA9IFRvSW50ZWdlcihzZWMpOwotICBtcyAg
ID0gVG9JbnRlZ2VyKG1zKTsKLQotICByZXR1cm4gKChob3VyKm1zUGVySG91cikgKyAobWluKm1z
UGVyTWludXRlKSArIChzZWMqbXNQZXJTZWNvbmQpICsgbXMpOwotfQotCi0vLzE1LjkuMS4xMiBN
YWtlRGF5ICh5ZWFyLCBtb250aCwgZGF0ZSkKLWZ1bmN0aW9uIE1ha2VEYXkoeWVhciwgbW9udGgs
IGRhdGUpIHsKLSAgaWYgKCAhaXNGaW5pdGUoeWVhcikgfHwgIWlzRmluaXRlKG1vbnRoKSB8fCAh
aXNGaW5pdGUoZGF0ZSkpIHsKLSAgICByZXR1cm4gTnVtYmVyLk5hTjsKLSAgfQotCi0gIHllYXIg
PSBUb0ludGVnZXIoeWVhcik7Ci0gIG1vbnRoID0gVG9JbnRlZ2VyKG1vbnRoKTsKLSAgZGF0ZSA9
IFRvSW50ZWdlcihkYXRlICk7Ci0KLSAgdmFyIHJlc3VsdDUgPSB5ZWFyICsgTWF0aC5mbG9vciht
b250aC8xMik7Ci0gIHZhciByZXN1bHQ2ID0gbW9udGglMTI7Ci0KLSAgdmFyIHNpZ24gPSAoIHll
YXIgPCAxOTcwICkgPyAtMSA6IDE7Ci0gIHZhciB0ID0gICAgKCB5ZWFyIDwgMTk3MCApID8gMSA6
ICAwOwotICB2YXIgeSA9ICAgICggeWVhciA8IDE5NzAgKSA/IDE5NjkgOiAxOTcwOwotCi0gIGlm
KCBzaWduID09IC0xICl7Ci0gICAgZm9yICggeSA9IDE5Njk7IHkgPj0geWVhcjsgeSArPSBzaWdu
ICkgewotICAgICAgdCArPSBzaWduICogRGF5c0luWWVhcih5KSptc1BlckRheTsKLSAgICB9Ci0g
IH0gZWxzZSB7Ci0gICAgZm9yICggeSA9IDE5NzAgOyB5IDwgeWVhcjsgeSArPSBzaWduICkgewot
ICAgICAgdCArPSBzaWduICogRGF5c0luWWVhcih5KSptc1BlckRheTsKLSAgICB9Ci0gIH0KLQot
ICB2YXIgbGVhcCA9IDA7Ci0gIGZvciAoIHZhciBtID0gMDsgbSA8IG1vbnRoOyBtKysgKSB7Ci0g
ICAgLy9pZiB5ZWFyIGlzIGNoYW5nZWQsIHRoYW4gd2UgbmVlZCB0byByZWNhbGN1bGF0ZSBsZWVw
Ci0gICAgbGVhcCA9IEluTGVhcFllYXIodCk7Ci0gICAgdCArPSBEYXlzSW5Nb250aChtLCBsZWFw
KSptc1BlckRheTsKLSAgfQotCi0gIGlmICggWWVhckZyb21UaW1lKHQpICE9IHJlc3VsdDUgKSB7
Ci0gICAgcmV0dXJuIE51bWJlci5OYU47Ci0gIH0KLSAgaWYgKCBNb250aEZyb21UaW1lKHQpICE9
IHJlc3VsdDYgKSB7Ci0gICAgcmV0dXJuIE51bWJlci5OYU47Ci0gIH0KLSAgaWYgKCBEYXRlRnJv
bVRpbWUodCkgIT0gMSApIHsKLSAgICByZXR1cm4gTnVtYmVyLk5hTjsKLSAgfQotCi0gIHJldHVy
biBEYXkodCkrZGF0ZS0xOwotfQotCi0vLzE1LjkuMS4xMyBNYWtlRGF0ZSAoZGF5LCB0aW1lKQot
ZnVuY3Rpb24gTWFrZURhdGUoIGRheSwgdGltZSApIHsKLSAgaWYoIWlzRmluaXRlKGRheSkgfHwg
IWlzRmluaXRlKHRpbWUpKSB7Ci0gICAgcmV0dXJuIE51bWJlci5OYU47Ci0gIH0KLSAgCi0gIHJl
dHVybiBkYXkqbXNQZXJEYXkrdGltZTsKLX0KLQotLy8xNS45LjEuMTQgVGltZUNsaXAgKHRpbWUp
Ci1mdW5jdGlvbiBUaW1lQ2xpcCh0aW1lKSB7Ci0gIGlmKCFpc0Zpbml0ZSh0aW1lKSB8fCBNYXRo
LmFicyh0aW1lKSA+IDguNjRlMTUpewotICAgIHJldHVybiBOdW1iZXIuTmFOOwotICB9Ci0KLSAg
cmV0dXJuIFRvSW50ZWdlcih0aW1lKTsKLX0KLQotLy9UZXN0IEZ1bmN0aW9ucwotZnVuY3Rpb24g
Q29uc3RydWN0RGF0ZSh5ZWFyLCBtb250aCwgZGF0ZSwgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMs
IG1zKXsKLSAgLyoKLSAgICogMS4gQ2FsbCBUb051bWJlcih5ZWFyKQotICAgKiAyLiBDYWxsIFRv
TnVtYmVyKG1vbnRoKQotICAgKiAzLiBJZiBkYXRlIGlzIHN1cHBsaWVkIHVzZSBUb051bWJlcihk
YXRlKTsgZWxzZSB1c2UgMQotICAgKiA0LiBJZiBob3VycyBpcyBzdXBwbGllZCB1c2UgVG9OdW1i
ZXIoaG91cnMpOyBlbHNlIHVzZSAwCi0gICAqIDUuIElmIG1pbnV0ZXMgaXMgc3VwcGxpZWQgdXNl
IFRvTnVtYmVyKG1pbnV0ZXMpOyBlbHNlIHVzZSAwCi0gICAqIDYuIElmIHNlY29uZHMgaXMgc3Vw
cGxpZWQgdXNlIFRvTnVtYmVyKHNlY29uZHMpOyBlbHNlIHVzZSAwCi0gICAqIDcuIElmIG1zIGlz
IHN1cHBsaWVkIHVzZSBUb051bWJlcihtcyk7IGVsc2UgdXNlIDAKLSAgICogOC4gSWYgUmVzdWx0
KDEpIGlzIG5vdCBOYU4gYW5kIDAgPD0gVG9JbnRlZ2VyKFJlc3VsdCgxKSkgPD0gOTksIFJlc3Vs
dCg4KSBpcwotICAgKiAxOTAwK1RvSW50ZWdlcihSZXN1bHQoMSkpOyBvdGhlcndpc2UsIFJlc3Vs
dCg4KSBpcyBSZXN1bHQoMSkKLSAgICogOS4gQ29tcHV0ZSBNYWtlRGF5KFJlc3VsdCg4KSwgUmVz
dWx0KDIpLCBSZXN1bHQoMykpCi0gICAqIDEwLiBDb21wdXRlIE1ha2VUaW1lKFJlc3VsdCg0KSwg
UmVzdWx0KDUpLCBSZXN1bHQoNiksIFJlc3VsdCg3KSkKLSAgICogMTEuIENvbXB1dGUgTWFrZURh
dGUoUmVzdWx0KDkpLCBSZXN1bHQoMTApKQotICAgKiAxMi4gU2V0IHRoZSBbW1ZhbHVlXV0gcHJv
cGVydHkgb2YgdGhlIG5ld2x5IGNvbnN0cnVjdGVkIG9iamVjdCB0byBUaW1lQ2xpcChVVEMoUmVz
dWx0KDExKSkpCi0gICAqLwotICB2YXIgcjEgPSBOdW1iZXIoeWVhcik7Ci0gIHZhciByMiA9IE51
bWJlcihtb250aCk7Ci0gIHZhciByMyA9ICgoZGF0ZSAmJiBhcmd1bWVudHMubGVuZ3RoID4gMikg
PyBOdW1iZXIoZGF0ZSkgOiAxKTsKLSAgdmFyIHI0ID0gKChob3VycyAmJiBhcmd1bWVudHMubGVu
Z3RoID4gMykgPyBOdW1iZXIoaG91cnMpIDogMCk7ICAgCi0gIHZhciByNSA9ICgobWludXRlcyAm
JiBhcmd1bWVudHMubGVuZ3RoID4gNCkgPyBOdW1iZXIobWludXRlcykgOiAwKTsgICAKLSAgdmFy
IHI2ID0gKChzZWNvbmRzICYmIGFyZ3VtZW50cy5sZW5ndGggPiA1KSA/IE51bWJlcihzZWNvbmRz
KSA6IDApOyAgIAotICB2YXIgcjcgPSAoKG1zICYmIGFyZ3VtZW50cy5sZW5ndGggPiA2KSA/IE51
bWJlcihtcykgOiAwKTsKLSAgCi0gIHZhciByOCA9IHIxOwotICAKLSAgaWYoIWlzTmFOKHIxKSAm
JiAoMCA8PSBUb0ludGVnZXIocjEpKSAmJiAoVG9JbnRlZ2VyKHIxKSA8PSA5OSkpCi0gICAgcjgg
PSAxOTAwK3IxOwotICAKLSAgdmFyIHI5ID0gTWFrZURheShyOCwgcjIsIHIzKTsKLSAgdmFyIHIx
MCA9IE1ha2VUaW1lKHI0LCByNSwgcjYsIHI3KTsKLSAgdmFyIHIxMSA9IE1ha2VEYXRlKHI5LCBy
MTApOwotICAKLSAgcmV0dXJuIFRpbWVDbGlwKFVUQyhyMTEpKTsKLX0KLQotCi0KLWlmIChDb25z
dHJ1Y3REYXRlKDE4OTksIDExKSAhPT0gbmV3IERhdGUoMTg5OSwgMTEpLnZhbHVlT2YoKSkgewot
ICB0ZXN0RmFpbGVkKCIjMTogSW5jb3JyZWN0IHZhbHVlIG9mIERhdGUiKTsKLX0KLQotaWYgKENv
bnN0cnVjdERhdGUoMTg5OSwgMTIpICE9PSBuZXcgRGF0ZSgxODk5LCAxMikudmFsdWVPZigpKSB7
Ci0gIHRlc3RGYWlsZWQoIiMyOiBJbmNvcnJlY3QgdmFsdWUgb2YgRGF0ZSIpOwotfQotCi1pZiAo
Q29uc3RydWN0RGF0ZSgxOTAwLCAwKSAhPT0gbmV3IERhdGUoMTkwMCwgMCkudmFsdWVPZigpKSB7
Ci0gIHRlc3RGYWlsZWQoIiMzOiBJbmNvcnJlY3QgdmFsdWUgb2YgRGF0ZSIpOwotfQotCi1pZiAo
Q29uc3RydWN0RGF0ZSgxOTY5LCAxMSkgIT09IG5ldyBEYXRlKDE5NjksIDExKS52YWx1ZU9mKCkp
IHsKLSAgdGVzdEZhaWxlZCgiIzQ6IEluY29ycmVjdCB2YWx1ZSBvZiBEYXRlIik7Ci19Ci0KLWlm
IChDb25zdHJ1Y3REYXRlKDE5NjksIDEyKSAhPT0gbmV3IERhdGUoMTk2OSwgMTIpLnZhbHVlT2Yo
KSkgewotICB0ZXN0RmFpbGVkKCIjNTogSW5jb3JyZWN0IHZhbHVlIG9mIERhdGUiKTsKLX0KLQot
aWYgKENvbnN0cnVjdERhdGUoMTk3MCwgMCkgIT09IG5ldyBEYXRlKDE5NzAsIDApLnZhbHVlT2Yo
KSkgewotICB0ZXN0RmFpbGVkKCIjNjogSW5jb3JyZWN0IHZhbHVlIG9mIERhdGUiKTsKLX0KLQot
aWYgKENvbnN0cnVjdERhdGUoMTk5OSwgMTEpICE9PSBuZXcgRGF0ZSgxOTk5LCAxMSkudmFsdWVP
ZigpKSB7Ci0gIHRlc3RGYWlsZWQoIiM3OiBJbmNvcnJlY3QgdmFsdWUgb2YgRGF0ZSIpOwotfQot
Ci1pZiAoQ29uc3RydWN0RGF0ZSgxOTk5LCAxMikgIT09IG5ldyBEYXRlKDE5OTksIDEyKS52YWx1
ZU9mKCkpIHsKLSAgdGVzdEZhaWxlZCgiIzg6IEluY29ycmVjdCB2YWx1ZSBvZiBEYXRlIik7Ci19
Ci0KLWlmIChDb25zdHJ1Y3REYXRlKDIwMDAsIDApICE9PSBuZXcgRGF0ZSgyMDAwLCAwKS52YWx1
ZU9mKCkpIHsKLSAgdGVzdEZhaWxlZCgiIzk6IEluY29ycmVjdCB2YWx1ZSBvZiBEYXRlIik7Ci19
Ci0KLWlmIChDb25zdHJ1Y3REYXRlKDIwOTksIDExKSAhPT0gbmV3IERhdGUoMjA5OSwgMTEpLnZh
bHVlT2YoKSkgewotICB0ZXN0RmFpbGVkKCIjMTA6IEluY29ycmVjdCB2YWx1ZSBvZiBEYXRlIik7
Ci19Ci0KLWlmIChDb25zdHJ1Y3REYXRlKDIwOTksIDEyKSAhPT0gbmV3IERhdGUoMjA5OSwgMTIp
LnZhbHVlT2YoKSkgewotICB0ZXN0RmFpbGVkKCIjMTE6IEluY29ycmVjdCB2YWx1ZSBvZiBEYXRl
Iik7Ci19Ci0KLWlmIChDb25zdHJ1Y3REYXRlKDIxMDAsIDApICE9PSBuZXcgRGF0ZSgyMTAwLCAw
KS52YWx1ZU9mKCkpIHsKLSAgdGVzdEZhaWxlZCgiIzEyOiBJbmNvcnJlY3QgdmFsdWUgb2YgRGF0
ZSIpOwotfQotCi19IGNhdGNoIChleCkgewotICAgIHNwdXRuaWtFeGNlcHRpb24gPSBleDsKLX0K
LQotdmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Ci08L3NjcmlwdD4KLQotPHNjcmlwdD4K
LWlmICghc3VjY2Vzc2Z1bGx5UGFyc2VkKQotICAgIHByaW50VGVzdEZhaWxlZCgnc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIG5vdCBzZXQnKTsKLWVsc2UgaWYgKHNwdXRuaWtFeGNlcHRpb24pCi0gICAg
cHJpbnRUZXN0RmFpbGVkKHNwdXRuaWtFeGNlcHRpb24pOwotZWxzZQotICAgIHByaW50VGVzdFBh
c3NlZCgiIik7Ci10ZXN0UHJpbnQoJzxiciAvPjxzcGFuIGNsYXNzPSJwYXNzIj5URVNUIENPTVBM
RVRFPC9zcGFuPicpOwotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9zcHV0bmlrL0NvbmZvcm1hbmNlLzE1X05hdGl2ZV9PYmplY3RzLzE1LjlfRGF0
ZS8xNS45LjMvUzE1LjkuMy4xX0E1X1QyLmh0bWwgYi9MYXlvdXRUZXN0cy9zcHV0bmlrL0NvbmZv
cm1hbmNlLzE1X05hdGl2ZV9PYmplY3RzLzE1LjlfRGF0ZS8xNS45LjMvUzE1LjkuMy4xX0E1X1Qy
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMGQyMDdhOWFiMzczZjgyMmE3NGQ0MTc1MTc5NjJjNGViY2VjOTNj
MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3NwdXRuaWsvQ29uZm9ybWFuY2UvMTVf
TmF0aXZlX09iamVjdHMvMTUuOV9EYXRlLzE1LjkuMy9TMTUuOS4zLjFfQTVfVDIuaHRtbApAQCAt
MCwwICsxLDUyMiBAQAorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGNoYXJzZXQ9J3V0Zi04Jz4KKzxz
dHlsZT4KKy5wYXNzIHsKKyAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICBjb2xvcjogZ3JlZW47
Cit9CisuZmFpbCB7CisgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgY29sb3I6IHJlZDsKK30K
Kzwvc3R5bGU+CisKKzxzY3JpcHQ+CitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgdGVzdFJ1
bm5lci5kdW1wQXNUZXh0KCk7CisKK2Z1bmN0aW9uIFNwdXRuaWtFcnJvcihtZXNzYWdlKQorewor
ICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7Cit9CisKK1NwdXRuaWtFcnJvci5wcm90b3R5cGUu
dG9TdHJpbmcgPSBmdW5jdGlvbiAoKQoreworICAgIHJldHVybiAnU3B1dG5pa0Vycm9yOiAnICsg
dGhpcy5tZXNzYWdlOworfTsKKwordmFyIHNwdXRuaWtFeGNlcHRpb247CisKK2Z1bmN0aW9uIHRl
c3RQcmludChtc2cpCit7CisgICAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJz
cGFuIik7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5hcHBlbmRDaGls
ZChzcGFuKTsgLy8gaW5zZXJ0IGl0IGZpcnN0IHNvIFhIVE1MIGtub3dzIHRoZSBuYW1lc3BhY2Ug
CisgICAgc3Bhbi5pbm5lckhUTUwgPSBtc2cgKyAnPGJyIC8+JzsKK30KKworZnVuY3Rpb24gZXNj
YXBlSFRNTCh0ZXh0KQoreworICAgIHJldHVybiB0ZXh0LnRvU3RyaW5nKCkucmVwbGFjZSgvJi9n
LCAiJmFtcDsiKS5yZXBsYWNlKC88L2csICImbHQ7Iik7Cit9CisKK2Z1bmN0aW9uIHByaW50VGVz
dFBhc3NlZChtc2cpCit7CisgICAgdGVzdFByaW50KCc8c3Bhbj48c3BhbiBjbGFzcz0icGFzcyI+
UEFTUzwvc3Bhbj4gJyArIGVzY2FwZUhUTUwobXNnKSArICc8L3NwYW4+Jyk7Cit9CisKK2Z1bmN0
aW9uIHByaW50VGVzdEZhaWxlZChtc2cpCit7CisgICAgdGVzdFByaW50KCc8c3Bhbj48c3BhbiBj
bGFzcz0iZmFpbCI+RkFJTDwvc3Bhbj4gJyArIGVzY2FwZUhUTUwobXNnKSArICc8L3NwYW4+Jyk7
Cit9CisKK2Z1bmN0aW9uIHRlc3RGYWlsZWQobXNnKQoreworICAgIHRocm93IG5ldyBTcHV0bmlr
RXJyb3IobXNnKTsKK30KKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IGZhbHNlOworPC9zY3Jp
cHQ+CisKKzwvaGVhZD4KKzxib2R5PgorPHA+UzE1LjkuMy4xX0E1X1QyPC9wPgorPGRpdiBpZD0n
Y29uc29sZSc+PC9kaXY+Cis8c2NyaXB0PgordHJ5IHsKKworLyoqCisgKiBAbmFtZTogUzE1Ljku
My4xX0E1X1QyOworICogQHNlY3Rpb246IDE1LjkuMy4xOworICogQGFzc2VydGlvbjogVGhlIFtb
VmFsdWVdXSBwcm9wZXJ0eSBvZiB0aGUgbmV3bHkgY29uc3RydWN0ZWQgb2JqZWN0IAorICogaXMg
c2V0IGJ5IGZvbGxvd2luZyBzdGVwczoKKyAqIDguIElmIFJlc3VsdCgxKSBpcyBub3QgTmFOIGFu
ZCAwIDw9IFRvSW50ZWdlcihSZXN1bHQoMSkpIDw9IDk5LCBSZXN1bHQoOCkgaXMKKyAqIDE5MDAr
VG9JbnRlZ2VyKFJlc3VsdCgxKSk7IG90aGVyd2lzZSwgUmVzdWx0KDgpIGlzIFJlc3VsdCgxKQor
ICogOS4gQ29tcHV0ZSBNYWtlRGF5KFJlc3VsdCg4KSwgUmVzdWx0KDIpLCBSZXN1bHQoMykpCisg
KiAxMC4gQ29tcHV0ZSBNYWtlVGltZShSZXN1bHQoNCksIFJlc3VsdCg1KSwgUmVzdWx0KDYpLCBS
ZXN1bHQoNykpCisgKiAxMS4gQ29tcHV0ZSBNYWtlRGF0ZShSZXN1bHQoOSksIFJlc3VsdCgxMCkp
CisgKiAxMi4gU2V0IHRoZSBbW1ZhbHVlXV0gcHJvcGVydHkgb2YgdGhlIG5ld2x5IGNvbnN0cnVj
dGVkIG9iamVjdCB0byAKKyAqIFRpbWVDbGlwKFVUQyhSZXN1bHQoMTEpKSk7CisgKiBAZGVzY3Jp
cHRpb246IDMgYXJndW1lbnRzLCAoeWVhciwgbW9udGgsIGRhdGUpOworICovCisKK3ZhciAkRFNU
X2VuZF9ob3VyID0gMjsKK3ZhciAkRFNUX2VuZF9taW51dGVzID0gMDsKK3ZhciAkRFNUX2VuZF9t
b250aCA9IDEwOwordmFyICREU1RfZW5kX3N1bmRheSA9ICdmaXJzdCc7Cit2YXIgJERTVF9zdGFy
dF9ob3VyID0gMjsKK3ZhciAkRFNUX3N0YXJ0X21pbnV0ZXMgPSAwOwordmFyICREU1Rfc3RhcnRf
bW9udGggPSAyOwordmFyICREU1Rfc3RhcnRfc3VuZGF5ID0gJ2ZpcnN0JzsKK3ZhciAkTG9jYWxU
WiA9IC04OworZnVuY3Rpb24gVG9JbnRlZ2VyKHApIHsKKyAgeCA9IE51bWJlcihwKTsKKworICBp
Zihpc05hTih4KSl7CisgICAgcmV0dXJuICswOworICB9CisgIAorICBpZigoeCA9PT0gKzApIAor
ICB8fCAoeCA9PT0gLTApIAorICB8fCAoeCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSAK
KyAgfHwgKHggPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSkpeworICAgICByZXR1cm4geDsK
KyAgfQorCisgIHZhciBzaWduID0gKCB4IDwgMCApID8gLTEgOiAxOworCisgIHJldHVybiAoc2ln
bipNYXRoLmZsb29yKE1hdGguYWJzKHgpKSk7Cit9CisKKwordmFyIEhvdXJzUGVyRGF5ID0gMjQ7
Cit2YXIgTWludXRlc1BlckhvdXIgPSA2MDsKK3ZhciBTZWNvbmRzUGVyTWludXRlID0gNjA7CisK
K3ZhciBtc1BlckRheSA9IDg2NDAwMDAwOwordmFyIG1zUGVyU2Vjb25kID0gMTAwMDsKK3ZhciBt
c1Blck1pbnV0ZSA9IDYwMDAwOwordmFyIG1zUGVySG91ciA9IDM2MDAwMDA7CisKK3ZhciBkYXRl
XzE4OTlfZW5kID0gLTIyMDg5ODg4MDAwMDE7Cit2YXIgZGF0ZV8xOTAwX3N0YXJ0ID0gLTIyMDg5
ODg4MDAwMDA7Cit2YXIgZGF0ZV8xOTY5X2VuZCA9IC0xOwordmFyIGRhdGVfMTk3MF9zdGFydCA9
IDA7Cit2YXIgZGF0ZV8xOTk5X2VuZCA9IDk0NjY4NDc5OTk5OTsKK3ZhciBkYXRlXzIwMDBfc3Rh
cnQgPSA5NDY2ODQ4MDAwMDA7Cit2YXIgZGF0ZV8yMDk5X2VuZCA9IDQxMDI0NDQ3OTk5OTk7Cit2
YXIgZGF0ZV8yMTAwX3N0YXJ0ID0gNDEwMjQ0NDgwMDAwMDsKKworCisvLzE1LjkuMS4yIERheSBO
dW1iZXIgYW5kIFRpbWUgd2l0aGluIERheQorZnVuY3Rpb24gRGF5KHQpIHsKKyAgcmV0dXJuIE1h
dGguZmxvb3IodC9tc1BlckRheSk7Cit9CisKK2Z1bmN0aW9uIFRpbWVXaXRoaW5EYXkodCkgewor
ICByZXR1cm4gdCVtc1BlckRheTsKK30KKworLy8xNS45LjEuMyBZZWFyIE51bWJlcgorZnVuY3Rp
b24gRGF5c0luWWVhcih5KXsKKyAgaWYoeSU0ICE9IDApIHJldHVybiAzNjU7CisgIGlmKHklNCA9
PSAwICYmIHklMTAwICE9IDApIHJldHVybiAzNjY7CisgIGlmKHklMTAwID09IDAgJiYgeSU0MDAg
IT0gMCkgcmV0dXJuIDM2NTsKKyAgaWYoeSU0MDAgPT0gMCkgcmV0dXJuIDM2NjsKK30KKworZnVu
Y3Rpb24gRGF5RnJvbVllYXIoeSkgeworICByZXR1cm4gKDM2NSooeS0xOTcwKQorICAgICAgICAg
ICsgTWF0aC5mbG9vcigoeS0xOTY5KS80KQorICAgICAgICAgIC0gTWF0aC5mbG9vcigoeS0xOTAx
KS8xMDApCisgICAgICAgICAgKyBNYXRoLmZsb29yKCh5LTE2MDEpLzQwMCkpOworfQorCitmdW5j
dGlvbiBUaW1lRnJvbVllYXIoeSl7CisgIHJldHVybiBtc1BlckRheSpEYXlGcm9tWWVhcih5KTsK
K30KKworZnVuY3Rpb24gWWVhckZyb21UaW1lKHQpIHsKKyAgdCA9IE51bWJlcih0KTsKKyAgdmFy
IHNpZ24gPSAoIHQgPCAwICkgPyAtMSA6IDE7CisgIHZhciB5ZWFyID0gKCBzaWduIDwgMCApID8g
MTk2OSA6IDE5NzA7CisgIAorICBmb3IodmFyIHRpbWUgPSAwOzt5ZWFyICs9IHNpZ24peworICAg
IHRpbWUgPSBUaW1lRnJvbVllYXIoeWVhcik7CisgICAgCisgICAgaWYoc2lnbiA+IDAgJiYgdGlt
ZSA+IHQpeworICAgICAgeWVhciAtPSBzaWduOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGVs
c2UgaWYoc2lnbiA8IDAgJiYgdGltZSA8PSB0KXsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfTsK
KyAgcmV0dXJuIHllYXI7Cit9CisgIAorZnVuY3Rpb24gSW5MZWFwWWVhcih0KXsKKyAgaWYoRGF5
c0luWWVhcihZZWFyRnJvbVRpbWUodCkpID09IDM2NSkKKyAgICByZXR1cm4gMDsKKyAgCisgIGlm
KERheXNJblllYXIoWWVhckZyb21UaW1lKHQpKSA9PSAzNjYpCisgICAgcmV0dXJuIDE7Cit9CisK
K2Z1bmN0aW9uIERheVdpdGhpblllYXIodCkgeworICByZXR1cm4gRGF5KHQpLURheUZyb21ZZWFy
KFllYXJGcm9tVGltZSh0KSk7Cit9CisKKy8vMTUuOS4xLjQgTW9udGggTnVtYmVyCitmdW5jdGlv
biBNb250aEZyb21UaW1lKHQpeworICB2YXIgZGF5ID0gRGF5V2l0aGluWWVhcih0KTsKKyAgdmFy
IGxlYXAgPSBJbkxlYXBZZWFyKHQpOworCisgIGlmKCgwIDw9IGRheSkgJiYgKGRheSA8IDMxKSkg
cmV0dXJuIDA7CisgIGlmKCgzMSA8PSBkYXkpICYmIChkYXkgPCAoNTkrbGVhcCkpKSByZXR1cm4g
MTsKKyAgaWYoKCg1OStsZWFwKSA8PSBkYXkpICYmIChkYXkgPCAoOTArbGVhcCkpKSByZXR1cm4g
MjsKKyAgaWYoKCg5MCtsZWFwKSA8PSBkYXkpICYmIChkYXkgPCAoMTIwK2xlYXApKSkgcmV0dXJu
IDM7CisgIGlmKCgoMTIwK2xlYXApIDw9IGRheSkgJiYgKGRheSA8ICgxNTErbGVhcCkpKSByZXR1
cm4gNDsKKyAgaWYoKCgxNTErbGVhcCkgPD0gZGF5KSAmJiAoZGF5IDwgKDE4MStsZWFwKSkpIHJl
dHVybiA1OworICBpZigoKDE4MStsZWFwKSA8PSBkYXkpICYmIChkYXkgPCAoMjEyK2xlYXApKSkg
cmV0dXJuIDY7CisgIGlmKCgoMjEyK2xlYXApIDw9IGRheSkgJiYgKGRheSA8ICgyNDMrbGVhcCkp
KSByZXR1cm4gNzsKKyAgaWYoKCgyNDMrbGVhcCkgPD0gZGF5KSAmJiAoZGF5IDwgKDI3MytsZWFw
KSkpIHJldHVybiA4OworICBpZigoKDI3MytsZWFwKSA8PSBkYXkpICYmIChkYXkgPCAoMzA0K2xl
YXApKSkgcmV0dXJuIDk7CisgIGlmKCgoMzA0K2xlYXApIDw9IGRheSkgJiYgKGRheSA8ICgzMzQr
bGVhcCkpKSByZXR1cm4gMTA7CisgIGlmKCgoMzM0K2xlYXApIDw9IGRheSkgJiYgKGRheSA8ICgz
NjUrbGVhcCkpKSByZXR1cm4gMTE7Cit9CisKKy8vMTUuOS4xLjUgRGF0ZSBOdW1iZXIKK2Z1bmN0
aW9uIERhdGVGcm9tVGltZSh0KSB7CisgIHZhciBkYXkgPSBEYXlXaXRoaW5ZZWFyKHQpOworICB2
YXIgbW9udGggPSBNb250aEZyb21UaW1lKHQpOworICB2YXIgbGVhcCA9IEluTGVhcFllYXIodCk7
CisKKyAgaWYobW9udGggPT0gMCkgcmV0dXJuIGRheSsxOworICBpZihtb250aCA9PSAxKSByZXR1
cm4gZGF5LTMwOworICBpZihtb250aCA9PSAyKSByZXR1cm4gZGF5LTU4LWxlYXA7CisgIGlmKG1v
bnRoID09IDMpIHJldHVybiBkYXktODktbGVhcDsKKyAgaWYobW9udGggPT0gNCkgcmV0dXJuIGRh
eS0xMTktbGVhcDsKKyAgaWYobW9udGggPT0gNSkgcmV0dXJuIGRheS0xNTAtbGVhcDsKKyAgaWYo
bW9udGggPT0gNikgcmV0dXJuIGRheS0xODAtbGVhcDsKKyAgaWYobW9udGggPT0gNykgcmV0dXJu
IGRheS0yMTEtbGVhcDsKKyAgaWYobW9udGggPT0gOCkgcmV0dXJuIGRheS0yNDItbGVhcDsKKyAg
aWYobW9udGggPT0gOSkgcmV0dXJuIGRheS0yNzItbGVhcDsKKyAgaWYobW9udGggPT0gMTApIHJl
dHVybiBkYXktMzAzLWxlYXA7CisgIGlmKG1vbnRoID09IDExKSByZXR1cm4gZGF5LTMzMy1sZWFw
OworfQorCisvLzE1LjkuMS42IFdlZWsgRGF5CitmdW5jdGlvbiBXZWVrRGF5KHQpIHsKKyAgdmFy
IHdlZWtkYXkgPSAoRGF5KHQpKzQpJTc7CisgIHJldHVybiAod2Vla2RheSA8IDAgPyA3K3dlZWtk
YXkgOiB3ZWVrZGF5KTsKK30KKworLy8xNS45LjEuOSBEYXlsaWdodCBTYXZpbmcgVGltZSBBZGp1
c3RtZW50Cit2YXIgTG9jYWxUWkEgPSAkTG9jYWxUWiptc1BlckhvdXI7CisKK2Z1bmN0aW9uIERh
eXNJbk1vbnRoKG0sIGxlYXApIHsKKyAgbSA9IG0lMTI7CisgIAorICAvL0FwcmlsLCBKdW5lLCBT
ZXB0LCBOb3YKKyAgaWYobSA9PSAzIHx8IG0gPT0gNSB8fCBtID09IDggfHwgbSA9PSAxMCApIHsK
KyAgICByZXR1cm4gMzA7CisgIH0KKworICAvL0phbiwgTWFyY2gsIE1heSwgSnVseSwgQXVnLCBP
Y3QsIERlYworICBpZihtID09IDAgfHwgbSA9PSAyIHx8IG0gPT0gNCB8fCBtID09IDYgfHwgbSA9
PSA3IHx8IG0gPT0gOSB8fCBtID09IDExKXsKKyAgICByZXR1cm4gMzE7CisgIH0KKworICAvL0Zl
YgorICByZXR1cm4gMjgrbGVhcDsKK30KKworZnVuY3Rpb24gR2V0U3VuZGF5SW5Nb250aCh0LCBt
LCBjb3VudCl7CisgIHZhciB5ZWFyID0gWWVhckZyb21UaW1lKHQpOworICB2YXIgbGVhcCA9IElu
TGVhcFllYXIodCk7CisgIHZhciBkYXkgPSAwOworICAKKyAgaWYobSA+PSAxKSBkYXkgKz0gRGF5
c0luTW9udGgoMCwgbGVhcCk7CisgIGlmKG0gPj0gMikgZGF5ICs9IERheXNJbk1vbnRoKDEsIGxl
YXApOworICBpZihtID49IDMpIGRheSArPSBEYXlzSW5Nb250aCgyLCBsZWFwKTsKKyAgaWYobSA+
PSA0KSBkYXkgKz0gRGF5c0luTW9udGgoMywgbGVhcCk7CisgIGlmKG0gPj0gNSkgZGF5ICs9IERh
eXNJbk1vbnRoKDQsIGxlYXApOworICBpZihtID49IDYpIGRheSArPSBEYXlzSW5Nb250aCg1LCBs
ZWFwKTsKKyAgaWYobSA+PSA3KSBkYXkgKz0gRGF5c0luTW9udGgoNiwgbGVhcCk7CisgIGlmKG0g
Pj0gOCkgZGF5ICs9IERheXNJbk1vbnRoKDcsIGxlYXApOworICBpZihtID49IDkpIGRheSArPSBE
YXlzSW5Nb250aCg4LCBsZWFwKTsKKyAgaWYobSA+PSAxMCkgZGF5ICs9IERheXNJbk1vbnRoKDks
IGxlYXApOworICBpZihtID49IDExKSBkYXkgKz0gRGF5c0luTW9udGgoMTAsIGxlYXApOworICAK
KyAgdmFyIG1vbnRoX3N0YXJ0ID0gVGltZUZyb21ZZWFyKHllYXIpK2RheSptc1BlckRheTsKKyAg
dmFyIHN1bmRheSA9IDA7CisgIAorICBpZihjb3VudCA9PT0gImxhc3QiKXsKKyAgICBmb3IodmFy
IGxhc3Rfc3VuZGF5ID0gbW9udGhfc3RhcnQrRGF5c0luTW9udGgobSwgbGVhcCkqbXNQZXJEYXk7
IAorICAgICAgV2Vla0RheShsYXN0X3N1bmRheSk+MDsKKyAgICAgIGxhc3Rfc3VuZGF5IC09IG1z
UGVyRGF5CisgICAgKXt9OworICAgIHN1bmRheSA9IGxhc3Rfc3VuZGF5OworICB9CisgIGVsc2Ug
eworICAgIGZvcih2YXIgZmlyc3Rfc3VuZGF5ID0gbW9udGhfc3RhcnQ7IAorICAgICAgV2Vla0Rh
eShmaXJzdF9zdW5kYXkpPjA7CisgICAgICBmaXJzdF9zdW5kYXkgKz0gbXNQZXJEYXkKKyAgICAp
e307CisgICAgc3VuZGF5ID0gZmlyc3Rfc3VuZGF5KzcqbXNQZXJEYXkqKGNvdW50LTEpOworICB9
CisgIAorICByZXR1cm4gc3VuZGF5OworfQorCitmdW5jdGlvbiBEYXlsaWdodFNhdmluZ1RBKHQp
IHsKKyAgdCA9IHQtTG9jYWxUWkE7CisKKyAgdmFyIERTVF9zdGFydCA9IEdldFN1bmRheUluTW9u
dGgodCwgJERTVF9zdGFydF9tb250aCwgJERTVF9zdGFydF9zdW5kYXkpCisgICAgICAgICAgICAg
ICAgICArJERTVF9zdGFydF9ob3VyKm1zUGVySG91cgorICAgICAgICAgICAgICAgICAgKyREU1Rf
c3RhcnRfbWludXRlcyptc1Blck1pbnV0ZTsKKyAgICAgICAgICAgICAgICAgIAorICB2YXIgayA9
IG5ldyBEYXRlKERTVF9zdGFydCk7CisgIAorICB2YXIgRFNUX2VuZCAgID0gR2V0U3VuZGF5SW5N
b250aCh0LCAkRFNUX2VuZF9tb250aCwgJERTVF9lbmRfc3VuZGF5KQorICAgICAgICAgICAgICAg
ICAgKyREU1RfZW5kX2hvdXIqbXNQZXJIb3VyCisgICAgICAgICAgICAgICAgICArJERTVF9lbmRf
bWludXRlcyptc1Blck1pbnV0ZTsKKworICBpZiAoIHQgPj0gRFNUX3N0YXJ0ICYmIHQgPCBEU1Rf
ZW5kICkgeworICAgIHJldHVybiBtc1BlckhvdXI7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIDA7
CisgIH0KK30KKworLy8xNS45LjEuOSBMb2NhbCBUaW1lCitmdW5jdGlvbiBMb2NhbFRpbWUodCl7
CisgIHJldHVybiB0K0xvY2FsVFpBK0RheWxpZ2h0U2F2aW5nVEEodCk7Cit9CisKK2Z1bmN0aW9u
IFVUQyh0KSB7CisgIHJldHVybiB0LUxvY2FsVFpBLURheWxpZ2h0U2F2aW5nVEEodC1Mb2NhbFRa
QSk7Cit9CisKKy8vMTUuOS4xLjEwIEhvdXJzLCBNaW51dGVzLCBTZWNvbmQsIGFuZCBNaWxsaXNl
Y29uZHMKK2Z1bmN0aW9uIEhvdXJGcm9tVGltZSh0KXsKKyAgcmV0dXJuIE1hdGguZmxvb3IodC9t
c1BlckhvdXIpJUhvdXJzUGVyRGF5OworfQorCitmdW5jdGlvbiBNaW5Gcm9tVGltZSh0KXsKKyAg
cmV0dXJuIE1hdGguZmxvb3IodC9tc1Blck1pbnV0ZSklTWludXRlc1BlckhvdXI7Cit9CisKK2Z1
bmN0aW9uIFNlY0Zyb21UaW1lKHQpeworICByZXR1cm4gTWF0aC5mbG9vcih0L21zUGVyU2Vjb25k
KSVTZWNvbmRzUGVyTWludXRlOworfQorCitmdW5jdGlvbiBtc0Zyb21UaW1lKHQpeworICByZXR1
cm4gdCVtc1BlclNlY29uZDsKK30KKworLy8xNS45LjEuMTEgTWFrZVRpbWUgKGhvdXIsIG1pbiwg
c2VjLCBtcykKK2Z1bmN0aW9uIE1ha2VUaW1lKGhvdXIsIG1pbiwgc2VjLCBtcyl7CisgIGlmICgg
IWlzRmluaXRlKGhvdXIpIHx8ICFpc0Zpbml0ZShtaW4pIHx8ICFpc0Zpbml0ZShzZWMpIHx8ICFp
c0Zpbml0ZShtcykpIHsKKyAgICByZXR1cm4gTnVtYmVyLk5hTjsKKyAgfQorCisgIGhvdXIgPSBU
b0ludGVnZXIoaG91cik7CisgIG1pbiAgPSBUb0ludGVnZXIobWluKTsKKyAgc2VjICA9IFRvSW50
ZWdlcihzZWMpOworICBtcyAgID0gVG9JbnRlZ2VyKG1zKTsKKworICByZXR1cm4gKChob3VyKm1z
UGVySG91cikgKyAobWluKm1zUGVyTWludXRlKSArIChzZWMqbXNQZXJTZWNvbmQpICsgbXMpOwor
fQorCisvLzE1LjkuMS4xMiBNYWtlRGF5ICh5ZWFyLCBtb250aCwgZGF0ZSkKK2Z1bmN0aW9uIE1h
a2VEYXkoeWVhciwgbW9udGgsIGRhdGUpIHsKKyAgaWYgKCAhaXNGaW5pdGUoeWVhcikgfHwgIWlz
RmluaXRlKG1vbnRoKSB8fCAhaXNGaW5pdGUoZGF0ZSkpIHsKKyAgICByZXR1cm4gTnVtYmVyLk5h
TjsKKyAgfQorCisgIHllYXIgPSBUb0ludGVnZXIoeWVhcik7CisgIG1vbnRoID0gVG9JbnRlZ2Vy
KG1vbnRoKTsKKyAgZGF0ZSA9IFRvSW50ZWdlcihkYXRlICk7CisKKyAgdmFyIHJlc3VsdDUgPSB5
ZWFyICsgTWF0aC5mbG9vcihtb250aC8xMik7CisgIHZhciByZXN1bHQ2ID0gbW9udGglMTI7CisK
KyAgdmFyIHNpZ24gPSAoIHllYXIgPCAxOTcwICkgPyAtMSA6IDE7CisgIHZhciB0ID0gICAgKCB5
ZWFyIDwgMTk3MCApID8gMSA6ICAwOworICB2YXIgeSA9ICAgICggeWVhciA8IDE5NzAgKSA/IDE5
NjkgOiAxOTcwOworCisgIGlmKCBzaWduID09IC0xICl7CisgICAgZm9yICggeSA9IDE5Njk7IHkg
Pj0geWVhcjsgeSArPSBzaWduICkgeworICAgICAgdCArPSBzaWduICogRGF5c0luWWVhcih5KSpt
c1BlckRheTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgZm9yICggeSA9IDE5NzAgOyB5IDwgeWVh
cjsgeSArPSBzaWduICkgeworICAgICAgdCArPSBzaWduICogRGF5c0luWWVhcih5KSptc1BlckRh
eTsKKyAgICB9CisgIH0KKworICB2YXIgbGVhcCA9IDA7CisgIGZvciAoIHZhciBtID0gMDsgbSA8
IG1vbnRoOyBtKysgKSB7CisgICAgLy9pZiB5ZWFyIGlzIGNoYW5nZWQsIHRoYW4gd2UgbmVlZCB0
byByZWNhbGN1bGF0ZSBsZWVwCisgICAgbGVhcCA9IEluTGVhcFllYXIodCk7CisgICAgdCArPSBE
YXlzSW5Nb250aChtLCBsZWFwKSptc1BlckRheTsKKyAgfQorCisgIGlmICggWWVhckZyb21UaW1l
KHQpICE9IHJlc3VsdDUgKSB7CisgICAgcmV0dXJuIE51bWJlci5OYU47CisgIH0KKyAgaWYgKCBN
b250aEZyb21UaW1lKHQpICE9IHJlc3VsdDYgKSB7CisgICAgcmV0dXJuIE51bWJlci5OYU47Cisg
IH0KKyAgaWYgKCBEYXRlRnJvbVRpbWUodCkgIT0gMSApIHsKKyAgICByZXR1cm4gTnVtYmVyLk5h
TjsKKyAgfQorCisgIHJldHVybiBEYXkodCkrZGF0ZS0xOworfQorCisvLzE1LjkuMS4xMyBNYWtl
RGF0ZSAoZGF5LCB0aW1lKQorZnVuY3Rpb24gTWFrZURhdGUoIGRheSwgdGltZSApIHsKKyAgaWYo
IWlzRmluaXRlKGRheSkgfHwgIWlzRmluaXRlKHRpbWUpKSB7CisgICAgcmV0dXJuIE51bWJlci5O
YU47CisgIH0KKyAgCisgIHJldHVybiBkYXkqbXNQZXJEYXkrdGltZTsKK30KKworLy8xNS45LjEu
MTQgVGltZUNsaXAgKHRpbWUpCitmdW5jdGlvbiBUaW1lQ2xpcCh0aW1lKSB7CisgIGlmKCFpc0Zp
bml0ZSh0aW1lKSB8fCBNYXRoLmFicyh0aW1lKSA+IDguNjRlMTUpeworICAgIHJldHVybiBOdW1i
ZXIuTmFOOworICB9CisKKyAgcmV0dXJuIFRvSW50ZWdlcih0aW1lKTsKK30KKworLy9UZXN0IEZ1
bmN0aW9ucworZnVuY3Rpb24gQ29uc3RydWN0RGF0ZSh5ZWFyLCBtb250aCwgZGF0ZSwgaG91cnMs
IG1pbnV0ZXMsIHNlY29uZHMsIG1zKXsKKyAgLyoKKyAgICogMS4gQ2FsbCBUb051bWJlcih5ZWFy
KQorICAgKiAyLiBDYWxsIFRvTnVtYmVyKG1vbnRoKQorICAgKiAzLiBJZiBkYXRlIGlzIHN1cHBs
aWVkIHVzZSBUb051bWJlcihkYXRlKTsgZWxzZSB1c2UgMQorICAgKiA0LiBJZiBob3VycyBpcyBz
dXBwbGllZCB1c2UgVG9OdW1iZXIoaG91cnMpOyBlbHNlIHVzZSAwCisgICAqIDUuIElmIG1pbnV0
ZXMgaXMgc3VwcGxpZWQgdXNlIFRvTnVtYmVyKG1pbnV0ZXMpOyBlbHNlIHVzZSAwCisgICAqIDYu
IElmIHNlY29uZHMgaXMgc3VwcGxpZWQgdXNlIFRvTnVtYmVyKHNlY29uZHMpOyBlbHNlIHVzZSAw
CisgICAqIDcuIElmIG1zIGlzIHN1cHBsaWVkIHVzZSBUb051bWJlcihtcyk7IGVsc2UgdXNlIDAK
KyAgICogOC4gSWYgUmVzdWx0KDEpIGlzIG5vdCBOYU4gYW5kIDAgPD0gVG9JbnRlZ2VyKFJlc3Vs
dCgxKSkgPD0gOTksIFJlc3VsdCg4KSBpcworICAgKiAxOTAwK1RvSW50ZWdlcihSZXN1bHQoMSkp
OyBvdGhlcndpc2UsIFJlc3VsdCg4KSBpcyBSZXN1bHQoMSkKKyAgICogOS4gQ29tcHV0ZSBNYWtl
RGF5KFJlc3VsdCg4KSwgUmVzdWx0KDIpLCBSZXN1bHQoMykpCisgICAqIDEwLiBDb21wdXRlIE1h
a2VUaW1lKFJlc3VsdCg0KSwgUmVzdWx0KDUpLCBSZXN1bHQoNiksIFJlc3VsdCg3KSkKKyAgICog
MTEuIENvbXB1dGUgTWFrZURhdGUoUmVzdWx0KDkpLCBSZXN1bHQoMTApKQorICAgKiAxMi4gU2V0
IHRoZSBbW1ZhbHVlXV0gcHJvcGVydHkgb2YgdGhlIG5ld2x5IGNvbnN0cnVjdGVkIG9iamVjdCB0
byBUaW1lQ2xpcChVVEMoUmVzdWx0KDExKSkpCisgICAqLworICB2YXIgcjEgPSBOdW1iZXIoeWVh
cik7CisgIHZhciByMiA9IE51bWJlcihtb250aCk7CisgIHZhciByMyA9ICgoZGF0ZSAmJiBhcmd1
bWVudHMubGVuZ3RoID4gMikgPyBOdW1iZXIoZGF0ZSkgOiAxKTsKKyAgdmFyIHI0ID0gKChob3Vy
cyAmJiBhcmd1bWVudHMubGVuZ3RoID4gMykgPyBOdW1iZXIoaG91cnMpIDogMCk7ICAgCisgIHZh
ciByNSA9ICgobWludXRlcyAmJiBhcmd1bWVudHMubGVuZ3RoID4gNCkgPyBOdW1iZXIobWludXRl
cykgOiAwKTsgICAKKyAgdmFyIHI2ID0gKChzZWNvbmRzICYmIGFyZ3VtZW50cy5sZW5ndGggPiA1
KSA/IE51bWJlcihzZWNvbmRzKSA6IDApOyAgIAorICB2YXIgcjcgPSAoKG1zICYmIGFyZ3VtZW50
cy5sZW5ndGggPiA2KSA/IE51bWJlcihtcykgOiAwKTsKKyAgCisgIHZhciByOCA9IHIxOworICAK
KyAgaWYoIWlzTmFOKHIxKSAmJiAoMCA8PSBUb0ludGVnZXIocjEpKSAmJiAoVG9JbnRlZ2VyKHIx
KSA8PSA5OSkpCisgICAgcjggPSAxOTAwK3IxOworICAKKyAgdmFyIHI5ID0gTWFrZURheShyOCwg
cjIsIHIzKTsKKyAgdmFyIHIxMCA9IE1ha2VUaW1lKHI0LCByNSwgcjYsIHI3KTsKKyAgdmFyIHIx
MSA9IE1ha2VEYXRlKHI5LCByMTApOworICAKKyAgcmV0dXJuIFRpbWVDbGlwKFVUQyhyMTEpKTsK
K30KKworCisKK2lmIChDb25zdHJ1Y3REYXRlKDE4OTksIDExLCAzMSkgIT09IG5ldyBEYXRlKDE4
OTksIDExLCAzMSkudmFsdWVPZigpKSB7CisgIHRlc3RGYWlsZWQoIiMxOiBJbmNvcnJlY3QgdmFs
dWUgb2YgRGF0ZSIpOworfQorCitpZiAoQ29uc3RydWN0RGF0ZSgxODk5LCAxMiwgMSkgIT09IG5l
dyBEYXRlKDE4OTksIDEyLCAxKS52YWx1ZU9mKCkpIHsKKyAgdGVzdEZhaWxlZCgiIzI6IEluY29y
cmVjdCB2YWx1ZSBvZiBEYXRlIik7Cit9CisKK2lmIChDb25zdHJ1Y3REYXRlKDE5MDAsIDAsIDEp
ICE9PSBuZXcgRGF0ZSgxOTAwLCAwLCAxKS52YWx1ZU9mKCkpIHsKKyAgdGVzdEZhaWxlZCgiIzM6
IEluY29ycmVjdCB2YWx1ZSBvZiBEYXRlIik7Cit9CisKK2lmIChDb25zdHJ1Y3REYXRlKDE5Njks
IDExLCAzMSkgIT09IG5ldyBEYXRlKDE5NjksIDExLCAzMSkudmFsdWVPZigpKSB7CisgIHRlc3RG
YWlsZWQoIiM0OiBJbmNvcnJlY3QgdmFsdWUgb2YgRGF0ZSIpOworfQorCitpZiAoQ29uc3RydWN0
RGF0ZSgxOTY5LCAxMiwgMSkgIT09IG5ldyBEYXRlKDE5NjksIDEyLCAxKS52YWx1ZU9mKCkpIHsK
KyAgdGVzdEZhaWxlZCgiIzU6IEluY29ycmVjdCB2YWx1ZSBvZiBEYXRlIik7Cit9CisKK2lmIChD
b25zdHJ1Y3REYXRlKDE5NzAsIDAsIDEpICE9PSBuZXcgRGF0ZSgxOTcwLCAwLCAxKS52YWx1ZU9m
KCkpIHsKKyAgdGVzdEZhaWxlZCgiIzY6IEluY29ycmVjdCB2YWx1ZSBvZiBEYXRlIik7Cit9CisK
K2lmIChDb25zdHJ1Y3REYXRlKDE5OTksIDExLCAzMSkgIT09IG5ldyBEYXRlKDE5OTksIDExLCAz
MSkudmFsdWVPZigpKSB7CisgIHRlc3RGYWlsZWQoIiM3OiBJbmNvcnJlY3QgdmFsdWUgb2YgRGF0
ZSIpOworfQorCitpZiAoQ29uc3RydWN0RGF0ZSgxOTk5LCAxMiwgMSkgIT09IG5ldyBEYXRlKDE5
OTksIDEyLCAxKS52YWx1ZU9mKCkpIHsKKyAgdGVzdEZhaWxlZCgiIzg6IEluY29ycmVjdCB2YWx1
ZSBvZiBEYXRlIik7Cit9CisKK2lmIChDb25zdHJ1Y3REYXRlKDIwMDAsIDAsIDEpICE9PSBuZXcg
RGF0ZSgyMDAwLCAwLCAxKS52YWx1ZU9mKCkpIHsKKyAgdGVzdEZhaWxlZCgiIzk6IEluY29ycmVj
dCB2YWx1ZSBvZiBEYXRlIik7Cit9CisKK2lmIChDb25zdHJ1Y3REYXRlKDIwOTksIDExLCAzMSkg
IT09IG5ldyBEYXRlKDIwOTksIDExLCAzMSkudmFsdWVPZigpKSB7CisgIHRlc3RGYWlsZWQoIiMx
MDogSW5jb3JyZWN0IHZhbHVlIG9mIERhdGUiKTsKK30KKworaWYgKENvbnN0cnVjdERhdGUoMjA5
OSwgMTIsIDEpICE9PSBuZXcgRGF0ZSgyMDk5LCAxMiwgMSkudmFsdWVPZigpKSB7CisgIHRlc3RG
YWlsZWQoIiMxMTogSW5jb3JyZWN0IHZhbHVlIG9mIERhdGUiKTsKK30KKworaWYgKENvbnN0cnVj
dERhdGUoMjEwMCwgMCwgMSkgIT09IG5ldyBEYXRlKDIxMDAsIDAsIDEpLnZhbHVlT2YoKSkgewor
ICB0ZXN0RmFpbGVkKCIjMTI6IEluY29ycmVjdCB2YWx1ZSBvZiBEYXRlIik7Cit9CisKK30gY2F0
Y2ggKGV4KSB7CisgICAgc3B1dG5pa0V4Y2VwdGlvbiA9IGV4OworfQorCit2YXIgc3VjY2Vzc2Z1
bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0PgorCis8c2NyaXB0PgoraWYgKCFzdWNjZXNzZnVs
bHlQYXJzZWQpCisgICAgcHJpbnRUZXN0RmFpbGVkKCdzdWNjZXNzZnVsbHlQYXJzZWQgaXMgbm90
IHNldCcpOworZWxzZSBpZiAoc3B1dG5pa0V4Y2VwdGlvbikKKyAgICBwcmludFRlc3RGYWlsZWQo
c3B1dG5pa0V4Y2VwdGlvbik7CitlbHNlCisgICAgcHJpbnRUZXN0UGFzc2VkKCIiKTsKK3Rlc3RQ
cmludCgnPGJyIC8+PHNwYW4gY2xhc3M9InBhc3MiPlRFU1QgQ09NUExFVEU8L3NwYW4+Jyk7Cis8
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3NwdXRu
aWsvQ29uZm9ybWFuY2UvMTVfTmF0aXZlX09iamVjdHMvMTUuOV9EYXRlLzE1LjkuMy9TMTUuOS4z
LjFfQTVfVDIuaHRtbC1kaXNhYmxlZCBiL0xheW91dFRlc3RzL3NwdXRuaWsvQ29uZm9ybWFuY2Uv
MTVfTmF0aXZlX09iamVjdHMvMTUuOV9EYXRlLzE1LjkuMy9TMTUuOS4zLjFfQTVfVDIuaHRtbC1k
aXNhYmxlZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQyMDdhOWFiMzczZjgyMmE3
NGQ0MTc1MTc5NjJjNGViY2VjOTNjMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9zcHV0bmlrL0NvbmZvcm1hbmNlLzE1X05hdGl2ZV9P
YmplY3RzLzE1LjlfRGF0ZS8xNS45LjMvUzE1LjkuMy4xX0E1X1QyLmh0bWwtZGlzYWJsZWQKKysr
IC9kZXYvbnVsbApAQCAtMSw1MjIgKzAsMCBAQAotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGNoYXJz
ZXQ9J3V0Zi04Jz4KLTxzdHlsZT4KLS5wYXNzIHsKLSAgICBmb250LXdlaWdodDogYm9sZDsKLSAg
ICBjb2xvcjogZ3JlZW47Ci19Ci0uZmFpbCB7Ci0gICAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci0gICAg
Y29sb3I6IHJlZDsKLX0KLTwvc3R5bGU+Ci0KLTxzY3JpcHQ+Ci1pZiAod2luZG93LnRlc3RSdW5u
ZXIpCi0gICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7Ci0KLWZ1bmN0aW9uIFNwdXRuaWtFcnJv
cihtZXNzYWdlKQotewotICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7Ci19Ci0KLVNwdXRuaWtF
cnJvci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKQotewotICAgIHJldHVybiAnU3B1
dG5pa0Vycm9yOiAnICsgdGhpcy5tZXNzYWdlOwotfTsKLQotdmFyIHNwdXRuaWtFeGNlcHRpb247
Ci0KLWZ1bmN0aW9uIHRlc3RQcmludChtc2cpCi17Ci0gICAgdmFyIHNwYW4gPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNv
bGUiKS5hcHBlbmRDaGlsZChzcGFuKTsgLy8gaW5zZXJ0IGl0IGZpcnN0IHNvIFhIVE1MIGtub3dz
IHRoZSBuYW1lc3BhY2UgCi0gICAgc3Bhbi5pbm5lckhUTUwgPSBtc2cgKyAnPGJyIC8+JzsKLX0K
LQotZnVuY3Rpb24gZXNjYXBlSFRNTCh0ZXh0KQotewotICAgIHJldHVybiB0ZXh0LnRvU3RyaW5n
KCkucmVwbGFjZSgvJi9nLCAiJmFtcDsiKS5yZXBsYWNlKC88L2csICImbHQ7Iik7Ci19Ci0KLWZ1
bmN0aW9uIHByaW50VGVzdFBhc3NlZChtc2cpCi17Ci0gICAgdGVzdFByaW50KCc8c3Bhbj48c3Bh
biBjbGFzcz0icGFzcyI+UEFTUzwvc3Bhbj4gJyArIGVzY2FwZUhUTUwobXNnKSArICc8L3NwYW4+
Jyk7Ci19Ci0KLWZ1bmN0aW9uIHByaW50VGVzdEZhaWxlZChtc2cpCi17Ci0gICAgdGVzdFByaW50
KCc8c3Bhbj48c3BhbiBjbGFzcz0iZmFpbCI+RkFJTDwvc3Bhbj4gJyArIGVzY2FwZUhUTUwobXNn
KSArICc8L3NwYW4+Jyk7Ci19Ci0KLWZ1bmN0aW9uIHRlc3RGYWlsZWQobXNnKQotewotICAgIHRo
cm93IG5ldyBTcHV0bmlrRXJyb3IobXNnKTsKLX0KLQotdmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9
IGZhbHNlOwotPC9zY3JpcHQ+Ci0KLTwvaGVhZD4KLTxib2R5PgotPHA+UzE1LjkuMy4xX0E1X1Qy
PC9wPgotPGRpdiBpZD0nY29uc29sZSc+PC9kaXY+Ci08c2NyaXB0PgotdHJ5IHsKLQotLyoqCi0g
KiBAbmFtZTogUzE1LjkuMy4xX0E1X1QyOwotICogQHNlY3Rpb246IDE1LjkuMy4xOwotICogQGFz
c2VydGlvbjogVGhlIFtbVmFsdWVdXSBwcm9wZXJ0eSBvZiB0aGUgbmV3bHkgY29uc3RydWN0ZWQg
b2JqZWN0IAotICogaXMgc2V0IGJ5IGZvbGxvd2luZyBzdGVwczoKLSAqIDguIElmIFJlc3VsdCgx
KSBpcyBub3QgTmFOIGFuZCAwIDw9IFRvSW50ZWdlcihSZXN1bHQoMSkpIDw9IDk5LCBSZXN1bHQo
OCkgaXMKLSAqIDE5MDArVG9JbnRlZ2VyKFJlc3VsdCgxKSk7IG90aGVyd2lzZSwgUmVzdWx0KDgp
IGlzIFJlc3VsdCgxKQotICogOS4gQ29tcHV0ZSBNYWtlRGF5KFJlc3VsdCg4KSwgUmVzdWx0KDIp
LCBSZXN1bHQoMykpCi0gKiAxMC4gQ29tcHV0ZSBNYWtlVGltZShSZXN1bHQoNCksIFJlc3VsdCg1
KSwgUmVzdWx0KDYpLCBSZXN1bHQoNykpCi0gKiAxMS4gQ29tcHV0ZSBNYWtlRGF0ZShSZXN1bHQo
OSksIFJlc3VsdCgxMCkpCi0gKiAxMi4gU2V0IHRoZSBbW1ZhbHVlXV0gcHJvcGVydHkgb2YgdGhl
IG5ld2x5IGNvbnN0cnVjdGVkIG9iamVjdCB0byAKLSAqIFRpbWVDbGlwKFVUQyhSZXN1bHQoMTEp
KSk7Ci0gKiBAZGVzY3JpcHRpb246IDMgYXJndW1lbnRzLCAoeWVhciwgbW9udGgsIGRhdGUpOwot
ICovCi0KLXZhciAkRFNUX2VuZF9ob3VyID0gMjsKLXZhciAkRFNUX2VuZF9taW51dGVzID0gMDsK
LXZhciAkRFNUX2VuZF9tb250aCA9IDEwOwotdmFyICREU1RfZW5kX3N1bmRheSA9ICdmaXJzdCc7
Ci12YXIgJERTVF9zdGFydF9ob3VyID0gMjsKLXZhciAkRFNUX3N0YXJ0X21pbnV0ZXMgPSAwOwot
dmFyICREU1Rfc3RhcnRfbW9udGggPSAyOwotdmFyICREU1Rfc3RhcnRfc3VuZGF5ID0gJ2ZpcnN0
JzsKLXZhciAkTG9jYWxUWiA9IC04OwotZnVuY3Rpb24gVG9JbnRlZ2VyKHApIHsKLSAgeCA9IE51
bWJlcihwKTsKLQotICBpZihpc05hTih4KSl7Ci0gICAgcmV0dXJuICswOwotICB9Ci0gIAotICBp
ZigoeCA9PT0gKzApIAotICB8fCAoeCA9PT0gLTApIAotICB8fCAoeCA9PT0gTnVtYmVyLlBPU0lU
SVZFX0lORklOSVRZKSAKLSAgfHwgKHggPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSkpewot
ICAgICByZXR1cm4geDsKLSAgfQotCi0gIHZhciBzaWduID0gKCB4IDwgMCApID8gLTEgOiAxOwot
Ci0gIHJldHVybiAoc2lnbipNYXRoLmZsb29yKE1hdGguYWJzKHgpKSk7Ci19Ci0KLQotdmFyIEhv
dXJzUGVyRGF5ID0gMjQ7Ci12YXIgTWludXRlc1BlckhvdXIgPSA2MDsKLXZhciBTZWNvbmRzUGVy
TWludXRlID0gNjA7Ci0KLXZhciBtc1BlckRheSA9IDg2NDAwMDAwOwotdmFyIG1zUGVyU2Vjb25k
ID0gMTAwMDsKLXZhciBtc1Blck1pbnV0ZSA9IDYwMDAwOwotdmFyIG1zUGVySG91ciA9IDM2MDAw
MDA7Ci0KLXZhciBkYXRlXzE4OTlfZW5kID0gLTIyMDg5ODg4MDAwMDE7Ci12YXIgZGF0ZV8xOTAw
X3N0YXJ0ID0gLTIyMDg5ODg4MDAwMDA7Ci12YXIgZGF0ZV8xOTY5X2VuZCA9IC0xOwotdmFyIGRh
dGVfMTk3MF9zdGFydCA9IDA7Ci12YXIgZGF0ZV8xOTk5X2VuZCA9IDk0NjY4NDc5OTk5OTsKLXZh
ciBkYXRlXzIwMDBfc3RhcnQgPSA5NDY2ODQ4MDAwMDA7Ci12YXIgZGF0ZV8yMDk5X2VuZCA9IDQx
MDI0NDQ3OTk5OTk7Ci12YXIgZGF0ZV8yMTAwX3N0YXJ0ID0gNDEwMjQ0NDgwMDAwMDsKLQotCi0v
LzE1LjkuMS4yIERheSBOdW1iZXIgYW5kIFRpbWUgd2l0aGluIERheQotZnVuY3Rpb24gRGF5KHQp
IHsKLSAgcmV0dXJuIE1hdGguZmxvb3IodC9tc1BlckRheSk7Ci19Ci0KLWZ1bmN0aW9uIFRpbWVX
aXRoaW5EYXkodCkgewotICByZXR1cm4gdCVtc1BlckRheTsKLX0KLQotLy8xNS45LjEuMyBZZWFy
IE51bWJlcgotZnVuY3Rpb24gRGF5c0luWWVhcih5KXsKLSAgaWYoeSU0ICE9IDApIHJldHVybiAz
NjU7Ci0gIGlmKHklNCA9PSAwICYmIHklMTAwICE9IDApIHJldHVybiAzNjY7Ci0gIGlmKHklMTAw
ID09IDAgJiYgeSU0MDAgIT0gMCkgcmV0dXJuIDM2NTsKLSAgaWYoeSU0MDAgPT0gMCkgcmV0dXJu
IDM2NjsKLX0KLQotZnVuY3Rpb24gRGF5RnJvbVllYXIoeSkgewotICByZXR1cm4gKDM2NSooeS0x
OTcwKQotICAgICAgICAgICsgTWF0aC5mbG9vcigoeS0xOTY5KS80KQotICAgICAgICAgIC0gTWF0
aC5mbG9vcigoeS0xOTAxKS8xMDApCi0gICAgICAgICAgKyBNYXRoLmZsb29yKCh5LTE2MDEpLzQw
MCkpOwotfQotCi1mdW5jdGlvbiBUaW1lRnJvbVllYXIoeSl7Ci0gIHJldHVybiBtc1BlckRheSpE
YXlGcm9tWWVhcih5KTsKLX0KLQotZnVuY3Rpb24gWWVhckZyb21UaW1lKHQpIHsKLSAgdCA9IE51
bWJlcih0KTsKLSAgdmFyIHNpZ24gPSAoIHQgPCAwICkgPyAtMSA6IDE7Ci0gIHZhciB5ZWFyID0g
KCBzaWduIDwgMCApID8gMTk2OSA6IDE5NzA7Ci0gIAotICBmb3IodmFyIHRpbWUgPSAwOzt5ZWFy
ICs9IHNpZ24pewotICAgIHRpbWUgPSBUaW1lRnJvbVllYXIoeWVhcik7Ci0gICAgCi0gICAgaWYo
c2lnbiA+IDAgJiYgdGltZSA+IHQpewotICAgICAgeWVhciAtPSBzaWduOwotICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGVsc2UgaWYoc2lnbiA8IDAgJiYgdGltZSA8PSB0KXsKLSAgICAgIGJyZWFr
OwotICAgIH0KLSAgfTsKLSAgcmV0dXJuIHllYXI7Ci19Ci0gIAotZnVuY3Rpb24gSW5MZWFwWWVh
cih0KXsKLSAgaWYoRGF5c0luWWVhcihZZWFyRnJvbVRpbWUodCkpID09IDM2NSkKLSAgICByZXR1
cm4gMDsKLSAgCi0gIGlmKERheXNJblllYXIoWWVhckZyb21UaW1lKHQpKSA9PSAzNjYpCi0gICAg
cmV0dXJuIDE7Ci19Ci0KLWZ1bmN0aW9uIERheVdpdGhpblllYXIodCkgewotICByZXR1cm4gRGF5
KHQpLURheUZyb21ZZWFyKFllYXJGcm9tVGltZSh0KSk7Ci19Ci0KLS8vMTUuOS4xLjQgTW9udGgg
TnVtYmVyCi1mdW5jdGlvbiBNb250aEZyb21UaW1lKHQpewotICB2YXIgZGF5ID0gRGF5V2l0aGlu
WWVhcih0KTsKLSAgdmFyIGxlYXAgPSBJbkxlYXBZZWFyKHQpOwotCi0gIGlmKCgwIDw9IGRheSkg
JiYgKGRheSA8IDMxKSkgcmV0dXJuIDA7Ci0gIGlmKCgzMSA8PSBkYXkpICYmIChkYXkgPCAoNTkr
bGVhcCkpKSByZXR1cm4gMTsKLSAgaWYoKCg1OStsZWFwKSA8PSBkYXkpICYmIChkYXkgPCAoOTAr
bGVhcCkpKSByZXR1cm4gMjsKLSAgaWYoKCg5MCtsZWFwKSA8PSBkYXkpICYmIChkYXkgPCAoMTIw
K2xlYXApKSkgcmV0dXJuIDM7Ci0gIGlmKCgoMTIwK2xlYXApIDw9IGRheSkgJiYgKGRheSA8ICgx
NTErbGVhcCkpKSByZXR1cm4gNDsKLSAgaWYoKCgxNTErbGVhcCkgPD0gZGF5KSAmJiAoZGF5IDwg
KDE4MStsZWFwKSkpIHJldHVybiA1OwotICBpZigoKDE4MStsZWFwKSA8PSBkYXkpICYmIChkYXkg
PCAoMjEyK2xlYXApKSkgcmV0dXJuIDY7Ci0gIGlmKCgoMjEyK2xlYXApIDw9IGRheSkgJiYgKGRh
eSA8ICgyNDMrbGVhcCkpKSByZXR1cm4gNzsKLSAgaWYoKCgyNDMrbGVhcCkgPD0gZGF5KSAmJiAo
ZGF5IDwgKDI3MytsZWFwKSkpIHJldHVybiA4OwotICBpZigoKDI3MytsZWFwKSA8PSBkYXkpICYm
IChkYXkgPCAoMzA0K2xlYXApKSkgcmV0dXJuIDk7Ci0gIGlmKCgoMzA0K2xlYXApIDw9IGRheSkg
JiYgKGRheSA8ICgzMzQrbGVhcCkpKSByZXR1cm4gMTA7Ci0gIGlmKCgoMzM0K2xlYXApIDw9IGRh
eSkgJiYgKGRheSA8ICgzNjUrbGVhcCkpKSByZXR1cm4gMTE7Ci19Ci0KLS8vMTUuOS4xLjUgRGF0
ZSBOdW1iZXIKLWZ1bmN0aW9uIERhdGVGcm9tVGltZSh0KSB7Ci0gIHZhciBkYXkgPSBEYXlXaXRo
aW5ZZWFyKHQpOwotICB2YXIgbW9udGggPSBNb250aEZyb21UaW1lKHQpOwotICB2YXIgbGVhcCA9
IEluTGVhcFllYXIodCk7Ci0KLSAgaWYobW9udGggPT0gMCkgcmV0dXJuIGRheSsxOwotICBpZiht
b250aCA9PSAxKSByZXR1cm4gZGF5LTMwOwotICBpZihtb250aCA9PSAyKSByZXR1cm4gZGF5LTU4
LWxlYXA7Ci0gIGlmKG1vbnRoID09IDMpIHJldHVybiBkYXktODktbGVhcDsKLSAgaWYobW9udGgg
PT0gNCkgcmV0dXJuIGRheS0xMTktbGVhcDsKLSAgaWYobW9udGggPT0gNSkgcmV0dXJuIGRheS0x
NTAtbGVhcDsKLSAgaWYobW9udGggPT0gNikgcmV0dXJuIGRheS0xODAtbGVhcDsKLSAgaWYobW9u
dGggPT0gNykgcmV0dXJuIGRheS0yMTEtbGVhcDsKLSAgaWYobW9udGggPT0gOCkgcmV0dXJuIGRh
eS0yNDItbGVhcDsKLSAgaWYobW9udGggPT0gOSkgcmV0dXJuIGRheS0yNzItbGVhcDsKLSAgaWYo
bW9udGggPT0gMTApIHJldHVybiBkYXktMzAzLWxlYXA7Ci0gIGlmKG1vbnRoID09IDExKSByZXR1
cm4gZGF5LTMzMy1sZWFwOwotfQotCi0vLzE1LjkuMS42IFdlZWsgRGF5Ci1mdW5jdGlvbiBXZWVr
RGF5KHQpIHsKLSAgdmFyIHdlZWtkYXkgPSAoRGF5KHQpKzQpJTc7Ci0gIHJldHVybiAod2Vla2Rh
eSA8IDAgPyA3K3dlZWtkYXkgOiB3ZWVrZGF5KTsKLX0KLQotLy8xNS45LjEuOSBEYXlsaWdodCBT
YXZpbmcgVGltZSBBZGp1c3RtZW50Ci12YXIgTG9jYWxUWkEgPSAkTG9jYWxUWiptc1BlckhvdXI7
Ci0KLWZ1bmN0aW9uIERheXNJbk1vbnRoKG0sIGxlYXApIHsKLSAgbSA9IG0lMTI7Ci0gIAotICAv
L0FwcmlsLCBKdW5lLCBTZXB0LCBOb3YKLSAgaWYobSA9PSAzIHx8IG0gPT0gNSB8fCBtID09IDgg
fHwgbSA9PSAxMCApIHsKLSAgICByZXR1cm4gMzA7Ci0gIH0KLQotICAvL0phbiwgTWFyY2gsIE1h
eSwgSnVseSwgQXVnLCBPY3QsIERlYwotICBpZihtID09IDAgfHwgbSA9PSAyIHx8IG0gPT0gNCB8
fCBtID09IDYgfHwgbSA9PSA3IHx8IG0gPT0gOSB8fCBtID09IDExKXsKLSAgICByZXR1cm4gMzE7
Ci0gIH0KLQotICAvL0ZlYgotICByZXR1cm4gMjgrbGVhcDsKLX0KLQotZnVuY3Rpb24gR2V0U3Vu
ZGF5SW5Nb250aCh0LCBtLCBjb3VudCl7Ci0gIHZhciB5ZWFyID0gWWVhckZyb21UaW1lKHQpOwot
ICB2YXIgbGVhcCA9IEluTGVhcFllYXIodCk7Ci0gIHZhciBkYXkgPSAwOwotICAKLSAgaWYobSA+
PSAxKSBkYXkgKz0gRGF5c0luTW9udGgoMCwgbGVhcCk7Ci0gIGlmKG0gPj0gMikgZGF5ICs9IERh
eXNJbk1vbnRoKDEsIGxlYXApOwotICBpZihtID49IDMpIGRheSArPSBEYXlzSW5Nb250aCgyLCBs
ZWFwKTsKLSAgaWYobSA+PSA0KSBkYXkgKz0gRGF5c0luTW9udGgoMywgbGVhcCk7Ci0gIGlmKG0g
Pj0gNSkgZGF5ICs9IERheXNJbk1vbnRoKDQsIGxlYXApOwotICBpZihtID49IDYpIGRheSArPSBE
YXlzSW5Nb250aCg1LCBsZWFwKTsKLSAgaWYobSA+PSA3KSBkYXkgKz0gRGF5c0luTW9udGgoNiwg
bGVhcCk7Ci0gIGlmKG0gPj0gOCkgZGF5ICs9IERheXNJbk1vbnRoKDcsIGxlYXApOwotICBpZiht
ID49IDkpIGRheSArPSBEYXlzSW5Nb250aCg4LCBsZWFwKTsKLSAgaWYobSA+PSAxMCkgZGF5ICs9
IERheXNJbk1vbnRoKDksIGxlYXApOwotICBpZihtID49IDExKSBkYXkgKz0gRGF5c0luTW9udGgo
MTAsIGxlYXApOwotICAKLSAgdmFyIG1vbnRoX3N0YXJ0ID0gVGltZUZyb21ZZWFyKHllYXIpK2Rh
eSptc1BlckRheTsKLSAgdmFyIHN1bmRheSA9IDA7Ci0gIAotICBpZihjb3VudCA9PT0gImxhc3Qi
KXsKLSAgICBmb3IodmFyIGxhc3Rfc3VuZGF5ID0gbW9udGhfc3RhcnQrRGF5c0luTW9udGgobSwg
bGVhcCkqbXNQZXJEYXk7IAotICAgICAgV2Vla0RheShsYXN0X3N1bmRheSk+MDsKLSAgICAgIGxh
c3Rfc3VuZGF5IC09IG1zUGVyRGF5Ci0gICAgKXt9OwotICAgIHN1bmRheSA9IGxhc3Rfc3VuZGF5
OwotICB9Ci0gIGVsc2UgewotICAgIGZvcih2YXIgZmlyc3Rfc3VuZGF5ID0gbW9udGhfc3RhcnQ7
IAotICAgICAgV2Vla0RheShmaXJzdF9zdW5kYXkpPjA7Ci0gICAgICBmaXJzdF9zdW5kYXkgKz0g
bXNQZXJEYXkKLSAgICApe307Ci0gICAgc3VuZGF5ID0gZmlyc3Rfc3VuZGF5KzcqbXNQZXJEYXkq
KGNvdW50LTEpOwotICB9Ci0gIAotICByZXR1cm4gc3VuZGF5OwotfQotCi1mdW5jdGlvbiBEYXls
aWdodFNhdmluZ1RBKHQpIHsKLSAgdCA9IHQtTG9jYWxUWkE7Ci0KLSAgdmFyIERTVF9zdGFydCA9
IEdldFN1bmRheUluTW9udGgodCwgJERTVF9zdGFydF9tb250aCwgJERTVF9zdGFydF9zdW5kYXkp
Ci0gICAgICAgICAgICAgICAgICArJERTVF9zdGFydF9ob3VyKm1zUGVySG91cgotICAgICAgICAg
ICAgICAgICAgKyREU1Rfc3RhcnRfbWludXRlcyptc1Blck1pbnV0ZTsKLSAgICAgICAgICAgICAg
ICAgIAotICB2YXIgayA9IG5ldyBEYXRlKERTVF9zdGFydCk7Ci0gIAotICB2YXIgRFNUX2VuZCAg
ID0gR2V0U3VuZGF5SW5Nb250aCh0LCAkRFNUX2VuZF9tb250aCwgJERTVF9lbmRfc3VuZGF5KQot
ICAgICAgICAgICAgICAgICAgKyREU1RfZW5kX2hvdXIqbXNQZXJIb3VyCi0gICAgICAgICAgICAg
ICAgICArJERTVF9lbmRfbWludXRlcyptc1Blck1pbnV0ZTsKLQotICBpZiAoIHQgPj0gRFNUX3N0
YXJ0ICYmIHQgPCBEU1RfZW5kICkgewotICAgIHJldHVybiBtc1BlckhvdXI7Ci0gIH0gZWxzZSB7
Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLX0KLQotLy8xNS45LjEuOSBMb2NhbCBUaW1lCi1mdW5jdGlv
biBMb2NhbFRpbWUodCl7Ci0gIHJldHVybiB0K0xvY2FsVFpBK0RheWxpZ2h0U2F2aW5nVEEodCk7
Ci19Ci0KLWZ1bmN0aW9uIFVUQyh0KSB7Ci0gIHJldHVybiB0LUxvY2FsVFpBLURheWxpZ2h0U2F2
aW5nVEEodC1Mb2NhbFRaQSk7Ci19Ci0KLS8vMTUuOS4xLjEwIEhvdXJzLCBNaW51dGVzLCBTZWNv
bmQsIGFuZCBNaWxsaXNlY29uZHMKLWZ1bmN0aW9uIEhvdXJGcm9tVGltZSh0KXsKLSAgcmV0dXJu
IE1hdGguZmxvb3IodC9tc1BlckhvdXIpJUhvdXJzUGVyRGF5OwotfQotCi1mdW5jdGlvbiBNaW5G
cm9tVGltZSh0KXsKLSAgcmV0dXJuIE1hdGguZmxvb3IodC9tc1Blck1pbnV0ZSklTWludXRlc1Bl
ckhvdXI7Ci19Ci0KLWZ1bmN0aW9uIFNlY0Zyb21UaW1lKHQpewotICByZXR1cm4gTWF0aC5mbG9v
cih0L21zUGVyU2Vjb25kKSVTZWNvbmRzUGVyTWludXRlOwotfQotCi1mdW5jdGlvbiBtc0Zyb21U
aW1lKHQpewotICByZXR1cm4gdCVtc1BlclNlY29uZDsKLX0KLQotLy8xNS45LjEuMTEgTWFrZVRp
bWUgKGhvdXIsIG1pbiwgc2VjLCBtcykKLWZ1bmN0aW9uIE1ha2VUaW1lKGhvdXIsIG1pbiwgc2Vj
LCBtcyl7Ci0gIGlmICggIWlzRmluaXRlKGhvdXIpIHx8ICFpc0Zpbml0ZShtaW4pIHx8ICFpc0Zp
bml0ZShzZWMpIHx8ICFpc0Zpbml0ZShtcykpIHsKLSAgICByZXR1cm4gTnVtYmVyLk5hTjsKLSAg
fQotCi0gIGhvdXIgPSBUb0ludGVnZXIoaG91cik7Ci0gIG1pbiAgPSBUb0ludGVnZXIobWluKTsK
LSAgc2VjICA9IFRvSW50ZWdlcihzZWMpOwotICBtcyAgID0gVG9JbnRlZ2VyKG1zKTsKLQotICBy
ZXR1cm4gKChob3VyKm1zUGVySG91cikgKyAobWluKm1zUGVyTWludXRlKSArIChzZWMqbXNQZXJT
ZWNvbmQpICsgbXMpOwotfQotCi0vLzE1LjkuMS4xMiBNYWtlRGF5ICh5ZWFyLCBtb250aCwgZGF0
ZSkKLWZ1bmN0aW9uIE1ha2VEYXkoeWVhciwgbW9udGgsIGRhdGUpIHsKLSAgaWYgKCAhaXNGaW5p
dGUoeWVhcikgfHwgIWlzRmluaXRlKG1vbnRoKSB8fCAhaXNGaW5pdGUoZGF0ZSkpIHsKLSAgICBy
ZXR1cm4gTnVtYmVyLk5hTjsKLSAgfQotCi0gIHllYXIgPSBUb0ludGVnZXIoeWVhcik7Ci0gIG1v
bnRoID0gVG9JbnRlZ2VyKG1vbnRoKTsKLSAgZGF0ZSA9IFRvSW50ZWdlcihkYXRlICk7Ci0KLSAg
dmFyIHJlc3VsdDUgPSB5ZWFyICsgTWF0aC5mbG9vcihtb250aC8xMik7Ci0gIHZhciByZXN1bHQ2
ID0gbW9udGglMTI7Ci0KLSAgdmFyIHNpZ24gPSAoIHllYXIgPCAxOTcwICkgPyAtMSA6IDE7Ci0g
IHZhciB0ID0gICAgKCB5ZWFyIDwgMTk3MCApID8gMSA6ICAwOwotICB2YXIgeSA9ICAgICggeWVh
ciA8IDE5NzAgKSA/IDE5NjkgOiAxOTcwOwotCi0gIGlmKCBzaWduID09IC0xICl7Ci0gICAgZm9y
ICggeSA9IDE5Njk7IHkgPj0geWVhcjsgeSArPSBzaWduICkgewotICAgICAgdCArPSBzaWduICog
RGF5c0luWWVhcih5KSptc1BlckRheTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgZm9yICggeSA9
IDE5NzAgOyB5IDwgeWVhcjsgeSArPSBzaWduICkgewotICAgICAgdCArPSBzaWduICogRGF5c0lu
WWVhcih5KSptc1BlckRheTsKLSAgICB9Ci0gIH0KLQotICB2YXIgbGVhcCA9IDA7Ci0gIGZvciAo
IHZhciBtID0gMDsgbSA8IG1vbnRoOyBtKysgKSB7Ci0gICAgLy9pZiB5ZWFyIGlzIGNoYW5nZWQs
IHRoYW4gd2UgbmVlZCB0byByZWNhbGN1bGF0ZSBsZWVwCi0gICAgbGVhcCA9IEluTGVhcFllYXIo
dCk7Ci0gICAgdCArPSBEYXlzSW5Nb250aChtLCBsZWFwKSptc1BlckRheTsKLSAgfQotCi0gIGlm
ICggWWVhckZyb21UaW1lKHQpICE9IHJlc3VsdDUgKSB7Ci0gICAgcmV0dXJuIE51bWJlci5OYU47
Ci0gIH0KLSAgaWYgKCBNb250aEZyb21UaW1lKHQpICE9IHJlc3VsdDYgKSB7Ci0gICAgcmV0dXJu
IE51bWJlci5OYU47Ci0gIH0KLSAgaWYgKCBEYXRlRnJvbVRpbWUodCkgIT0gMSApIHsKLSAgICBy
ZXR1cm4gTnVtYmVyLk5hTjsKLSAgfQotCi0gIHJldHVybiBEYXkodCkrZGF0ZS0xOwotfQotCi0v
LzE1LjkuMS4xMyBNYWtlRGF0ZSAoZGF5LCB0aW1lKQotZnVuY3Rpb24gTWFrZURhdGUoIGRheSwg
dGltZSApIHsKLSAgaWYoIWlzRmluaXRlKGRheSkgfHwgIWlzRmluaXRlKHRpbWUpKSB7Ci0gICAg
cmV0dXJuIE51bWJlci5OYU47Ci0gIH0KLSAgCi0gIHJldHVybiBkYXkqbXNQZXJEYXkrdGltZTsK
LX0KLQotLy8xNS45LjEuMTQgVGltZUNsaXAgKHRpbWUpCi1mdW5jdGlvbiBUaW1lQ2xpcCh0aW1l
KSB7Ci0gIGlmKCFpc0Zpbml0ZSh0aW1lKSB8fCBNYXRoLmFicyh0aW1lKSA+IDguNjRlMTUpewot
ICAgIHJldHVybiBOdW1iZXIuTmFOOwotICB9Ci0KLSAgcmV0dXJuIFRvSW50ZWdlcih0aW1lKTsK
LX0KLQotLy9UZXN0IEZ1bmN0aW9ucwotZnVuY3Rpb24gQ29uc3RydWN0RGF0ZSh5ZWFyLCBtb250
aCwgZGF0ZSwgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG1zKXsKLSAgLyoKLSAgICogMS4gQ2Fs
bCBUb051bWJlcih5ZWFyKQotICAgKiAyLiBDYWxsIFRvTnVtYmVyKG1vbnRoKQotICAgKiAzLiBJ
ZiBkYXRlIGlzIHN1cHBsaWVkIHVzZSBUb051bWJlcihkYXRlKTsgZWxzZSB1c2UgMQotICAgKiA0
LiBJZiBob3VycyBpcyBzdXBwbGllZCB1c2UgVG9OdW1iZXIoaG91cnMpOyBlbHNlIHVzZSAwCi0g
ICAqIDUuIElmIG1pbnV0ZXMgaXMgc3VwcGxpZWQgdXNlIFRvTnVtYmVyKG1pbnV0ZXMpOyBlbHNl
IHVzZSAwCi0gICAqIDYuIElmIHNlY29uZHMgaXMgc3VwcGxpZWQgdXNlIFRvTnVtYmVyKHNlY29u
ZHMpOyBlbHNlIHVzZSAwCi0gICAqIDcuIElmIG1zIGlzIHN1cHBsaWVkIHVzZSBUb051bWJlciht
cyk7IGVsc2UgdXNlIDAKLSAgICogOC4gSWYgUmVzdWx0KDEpIGlzIG5vdCBOYU4gYW5kIDAgPD0g
VG9JbnRlZ2VyKFJlc3VsdCgxKSkgPD0gOTksIFJlc3VsdCg4KSBpcwotICAgKiAxOTAwK1RvSW50
ZWdlcihSZXN1bHQoMSkpOyBvdGhlcndpc2UsIFJlc3VsdCg4KSBpcyBSZXN1bHQoMSkKLSAgICog
OS4gQ29tcHV0ZSBNYWtlRGF5KFJlc3VsdCg4KSwgUmVzdWx0KDIpLCBSZXN1bHQoMykpCi0gICAq
IDEwLiBDb21wdXRlIE1ha2VUaW1lKFJlc3VsdCg0KSwgUmVzdWx0KDUpLCBSZXN1bHQoNiksIFJl
c3VsdCg3KSkKLSAgICogMTEuIENvbXB1dGUgTWFrZURhdGUoUmVzdWx0KDkpLCBSZXN1bHQoMTAp
KQotICAgKiAxMi4gU2V0IHRoZSBbW1ZhbHVlXV0gcHJvcGVydHkgb2YgdGhlIG5ld2x5IGNvbnN0
cnVjdGVkIG9iamVjdCB0byBUaW1lQ2xpcChVVEMoUmVzdWx0KDExKSkpCi0gICAqLwotICB2YXIg
cjEgPSBOdW1iZXIoeWVhcik7Ci0gIHZhciByMiA9IE51bWJlcihtb250aCk7Ci0gIHZhciByMyA9
ICgoZGF0ZSAmJiBhcmd1bWVudHMubGVuZ3RoID4gMikgPyBOdW1iZXIoZGF0ZSkgOiAxKTsKLSAg
dmFyIHI0ID0gKChob3VycyAmJiBhcmd1bWVudHMubGVuZ3RoID4gMykgPyBOdW1iZXIoaG91cnMp
IDogMCk7ICAgCi0gIHZhciByNSA9ICgobWludXRlcyAmJiBhcmd1bWVudHMubGVuZ3RoID4gNCkg
PyBOdW1iZXIobWludXRlcykgOiAwKTsgICAKLSAgdmFyIHI2ID0gKChzZWNvbmRzICYmIGFyZ3Vt
ZW50cy5sZW5ndGggPiA1KSA/IE51bWJlcihzZWNvbmRzKSA6IDApOyAgIAotICB2YXIgcjcgPSAo
KG1zICYmIGFyZ3VtZW50cy5sZW5ndGggPiA2KSA/IE51bWJlcihtcykgOiAwKTsKLSAgCi0gIHZh
ciByOCA9IHIxOwotICAKLSAgaWYoIWlzTmFOKHIxKSAmJiAoMCA8PSBUb0ludGVnZXIocjEpKSAm
JiAoVG9JbnRlZ2VyKHIxKSA8PSA5OSkpCi0gICAgcjggPSAxOTAwK3IxOwotICAKLSAgdmFyIHI5
ID0gTWFrZURheShyOCwgcjIsIHIzKTsKLSAgdmFyIHIxMCA9IE1ha2VUaW1lKHI0LCByNSwgcjYs
IHI3KTsKLSAgdmFyIHIxMSA9IE1ha2VEYXRlKHI5LCByMTApOwotICAKLSAgcmV0dXJuIFRpbWVD
bGlwKFVUQyhyMTEpKTsKLX0KLQotCi0KLWlmIChDb25zdHJ1Y3REYXRlKDE4OTksIDExLCAzMSkg
IT09IG5ldyBEYXRlKDE4OTksIDExLCAzMSkudmFsdWVPZigpKSB7Ci0gIHRlc3RGYWlsZWQoIiMx
OiBJbmNvcnJlY3QgdmFsdWUgb2YgRGF0ZSIpOwotfQotCi1pZiAoQ29uc3RydWN0RGF0ZSgxODk5
LCAxMiwgMSkgIT09IG5ldyBEYXRlKDE4OTksIDEyLCAxKS52YWx1ZU9mKCkpIHsKLSAgdGVzdEZh
aWxlZCgiIzI6IEluY29ycmVjdCB2YWx1ZSBvZiBEYXRlIik7Ci19Ci0KLWlmIChDb25zdHJ1Y3RE
YXRlKDE5MDAsIDAsIDEpICE9PSBuZXcgRGF0ZSgxOTAwLCAwLCAxKS52YWx1ZU9mKCkpIHsKLSAg
dGVzdEZhaWxlZCgiIzM6IEluY29ycmVjdCB2YWx1ZSBvZiBEYXRlIik7Ci19Ci0KLWlmIChDb25z
dHJ1Y3REYXRlKDE5NjksIDExLCAzMSkgIT09IG5ldyBEYXRlKDE5NjksIDExLCAzMSkudmFsdWVP
ZigpKSB7Ci0gIHRlc3RGYWlsZWQoIiM0OiBJbmNvcnJlY3QgdmFsdWUgb2YgRGF0ZSIpOwotfQot
Ci1pZiAoQ29uc3RydWN0RGF0ZSgxOTY5LCAxMiwgMSkgIT09IG5ldyBEYXRlKDE5NjksIDEyLCAx
KS52YWx1ZU9mKCkpIHsKLSAgdGVzdEZhaWxlZCgiIzU6IEluY29ycmVjdCB2YWx1ZSBvZiBEYXRl
Iik7Ci19Ci0KLWlmIChDb25zdHJ1Y3REYXRlKDE5NzAsIDAsIDEpICE9PSBuZXcgRGF0ZSgxOTcw
LCAwLCAxKS52YWx1ZU9mKCkpIHsKLSAgdGVzdEZhaWxlZCgiIzY6IEluY29ycmVjdCB2YWx1ZSBv
ZiBEYXRlIik7Ci19Ci0KLWlmIChDb25zdHJ1Y3REYXRlKDE5OTksIDExLCAzMSkgIT09IG5ldyBE
YXRlKDE5OTksIDExLCAzMSkudmFsdWVPZigpKSB7Ci0gIHRlc3RGYWlsZWQoIiM3OiBJbmNvcnJl
Y3QgdmFsdWUgb2YgRGF0ZSIpOwotfQotCi1pZiAoQ29uc3RydWN0RGF0ZSgxOTk5LCAxMiwgMSkg
IT09IG5ldyBEYXRlKDE5OTksIDEyLCAxKS52YWx1ZU9mKCkpIHsKLSAgdGVzdEZhaWxlZCgiIzg6
IEluY29ycmVjdCB2YWx1ZSBvZiBEYXRlIik7Ci19Ci0KLWlmIChDb25zdHJ1Y3REYXRlKDIwMDAs
IDAsIDEpICE9PSBuZXcgRGF0ZSgyMDAwLCAwLCAxKS52YWx1ZU9mKCkpIHsKLSAgdGVzdEZhaWxl
ZCgiIzk6IEluY29ycmVjdCB2YWx1ZSBvZiBEYXRlIik7Ci19Ci0KLWlmIChDb25zdHJ1Y3REYXRl
KDIwOTksIDExLCAzMSkgIT09IG5ldyBEYXRlKDIwOTksIDExLCAzMSkudmFsdWVPZigpKSB7Ci0g
IHRlc3RGYWlsZWQoIiMxMDogSW5jb3JyZWN0IHZhbHVlIG9mIERhdGUiKTsKLX0KLQotaWYgKENv
bnN0cnVjdERhdGUoMjA5OSwgMTIsIDEpICE9PSBuZXcgRGF0ZSgyMDk5LCAxMiwgMSkudmFsdWVP
ZigpKSB7Ci0gIHRlc3RGYWlsZWQoIiMxMTogSW5jb3JyZWN0IHZhbHVlIG9mIERhdGUiKTsKLX0K
LQotaWYgKENvbnN0cnVjdERhdGUoMjEwMCwgMCwgMSkgIT09IG5ldyBEYXRlKDIxMDAsIDAsIDEp
LnZhbHVlT2YoKSkgewotICB0ZXN0RmFpbGVkKCIjMTI6IEluY29ycmVjdCB2YWx1ZSBvZiBEYXRl
Iik7Ci19Ci0KLX0gY2F0Y2ggKGV4KSB7Ci0gICAgc3B1dG5pa0V4Y2VwdGlvbiA9IGV4OwotfQot
Ci12YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKLTwvc2NyaXB0PgotCi08c2NyaXB0Pgot
aWYgKCFzdWNjZXNzZnVsbHlQYXJzZWQpCi0gICAgcHJpbnRUZXN0RmFpbGVkKCdzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgbm90IHNldCcpOwotZWxzZSBpZiAoc3B1dG5pa0V4Y2VwdGlvbikKLSAgICBw
cmludFRlc3RGYWlsZWQoc3B1dG5pa0V4Y2VwdGlvbik7Ci1lbHNlCi0gICAgcHJpbnRUZXN0UGFz
c2VkKCIiKTsKLXRlc3RQcmludCgnPGJyIC8+PHNwYW4gY2xhc3M9InBhc3MiPlRFU1QgQ09NUExF
VEU8L3NwYW4+Jyk7Ci08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3NwdXRuaWsvQ29uZm9ybWFuY2UvMTVfTmF0aXZlX09iamVjdHMvMTUuOV9EYXRl
LzE1LjkuMy9TMTUuOS4zLjFfQTVfVDMuaHRtbCBiL0xheW91dFRlc3RzL3NwdXRuaWsvQ29uZm9y
bWFuY2UvMTVfTmF0aXZlX09iamVjdHMvMTUuOV9EYXRlLzE1LjkuMy9TMTUuOS4zLjFfQTVfVDMu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4wZWZlNjY4MTI3YWIzZDdiY2M0YzhkYjJmOGFhZjhkNTA2M2NlMzY0
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3B1dG5pay9Db25mb3JtYW5jZS8xNV9O
YXRpdmVfT2JqZWN0cy8xNS45X0RhdGUvMTUuOS4zL1MxNS45LjMuMV9BNV9UMy5odG1sCkBAIC0w
LDAgKzEsNTIyIEBACis8aHRtbD4KKzxoZWFkPgorPG1ldGEgY2hhcnNldD0ndXRmLTgnPgorPHN0
eWxlPgorLnBhc3MgeworICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgIGNvbG9yOiBncmVlbjsK
K30KKy5mYWlsIHsKKyAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICBjb2xvcjogcmVkOworfQor
PC9zdHlsZT4KKworPHNjcmlwdD4KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVu
bmVyLmR1bXBBc1RleHQoKTsKKworZnVuY3Rpb24gU3B1dG5pa0Vycm9yKG1lc3NhZ2UpCit7Cisg
ICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKK30KKworU3B1dG5pa0Vycm9yLnByb3RvdHlwZS50
b1N0cmluZyA9IGZ1bmN0aW9uICgpCit7CisgICAgcmV0dXJuICdTcHV0bmlrRXJyb3I6ICcgKyB0
aGlzLm1lc3NhZ2U7Cit9OworCit2YXIgc3B1dG5pa0V4Y2VwdGlvbjsKKworZnVuY3Rpb24gdGVz
dFByaW50KG1zZykKK3sKKyAgICB2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNw
YW4iKTsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmFwcGVuZENoaWxk
KHNwYW4pOyAvLyBpbnNlcnQgaXQgZmlyc3Qgc28gWEhUTUwga25vd3MgdGhlIG5hbWVzcGFjZSAK
KyAgICBzcGFuLmlubmVySFRNTCA9IG1zZyArICc8YnIgLz4nOworfQorCitmdW5jdGlvbiBlc2Nh
cGVIVE1MKHRleHQpCit7CisgICAgcmV0dXJuIHRleHQudG9TdHJpbmcoKS5yZXBsYWNlKC8mL2cs
ICImYW1wOyIpLnJlcGxhY2UoLzwvZywgIiZsdDsiKTsKK30KKworZnVuY3Rpb24gcHJpbnRUZXN0
UGFzc2VkKG1zZykKK3sKKyAgICB0ZXN0UHJpbnQoJzxzcGFuPjxzcGFuIGNsYXNzPSJwYXNzIj5Q
QVNTPC9zcGFuPiAnICsgZXNjYXBlSFRNTChtc2cpICsgJzwvc3Bhbj4nKTsKK30KKworZnVuY3Rp
b24gcHJpbnRUZXN0RmFpbGVkKG1zZykKK3sKKyAgICB0ZXN0UHJpbnQoJzxzcGFuPjxzcGFuIGNs
YXNzPSJmYWlsIj5GQUlMPC9zcGFuPiAnICsgZXNjYXBlSFRNTChtc2cpICsgJzwvc3Bhbj4nKTsK
K30KKworZnVuY3Rpb24gdGVzdEZhaWxlZChtc2cpCit7CisgICAgdGhyb3cgbmV3IFNwdXRuaWtF
cnJvcihtc2cpOworfQorCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gZmFsc2U7Cis8L3Njcmlw
dD4KKworPC9oZWFkPgorPGJvZHk+Cis8cD5TMTUuOS4zLjFfQTVfVDM8L3A+Cis8ZGl2IGlkPSdj
b25zb2xlJz48L2Rpdj4KKzxzY3JpcHQ+Cit0cnkgeworCisvKioKKyAqIEBuYW1lOiBTMTUuOS4z
LjFfQTVfVDM7CisgKiBAc2VjdGlvbjogMTUuOS4zLjE7CisgKiBAYXNzZXJ0aW9uOiBUaGUgW1tW
YWx1ZV1dIHByb3BlcnR5IG9mIHRoZSBuZXdseSBjb25zdHJ1Y3RlZCBvYmplY3QgCisgKiBpcyBz
ZXQgYnkgZm9sbG93aW5nIHN0ZXBzOgorICogOC4gSWYgUmVzdWx0KDEpIGlzIG5vdCBOYU4gYW5k
IDAgPD0gVG9JbnRlZ2VyKFJlc3VsdCgxKSkgPD0gOTksIFJlc3VsdCg4KSBpcworICogMTkwMCtU
b0ludGVnZXIoUmVzdWx0KDEpKTsgb3RoZXJ3aXNlLCBSZXN1bHQoOCkgaXMgUmVzdWx0KDEpCisg
KiA5LiBDb21wdXRlIE1ha2VEYXkoUmVzdWx0KDgpLCBSZXN1bHQoMiksIFJlc3VsdCgzKSkKKyAq
IDEwLiBDb21wdXRlIE1ha2VUaW1lKFJlc3VsdCg0KSwgUmVzdWx0KDUpLCBSZXN1bHQoNiksIFJl
c3VsdCg3KSkKKyAqIDExLiBDb21wdXRlIE1ha2VEYXRlKFJlc3VsdCg5KSwgUmVzdWx0KDEwKSkK
KyAqIDEyLiBTZXQgdGhlIFtbVmFsdWVdXSBwcm9wZXJ0eSBvZiB0aGUgbmV3bHkgY29uc3RydWN0
ZWQgb2JqZWN0IHRvIAorICogVGltZUNsaXAoVVRDKFJlc3VsdCgxMSkpKTsKKyAqIEBkZXNjcmlw
dGlvbjogNCBhcmd1bWVudHMsICh5ZWFyLCBtb250aCwgZGF0ZSwgaG91cnMpOworICovCisKK3Zh
ciAkRFNUX2VuZF9ob3VyID0gMjsKK3ZhciAkRFNUX2VuZF9taW51dGVzID0gMDsKK3ZhciAkRFNU
X2VuZF9tb250aCA9IDEwOwordmFyICREU1RfZW5kX3N1bmRheSA9ICdmaXJzdCc7Cit2YXIgJERT
VF9zdGFydF9ob3VyID0gMjsKK3ZhciAkRFNUX3N0YXJ0X21pbnV0ZXMgPSAwOwordmFyICREU1Rf
c3RhcnRfbW9udGggPSAyOwordmFyICREU1Rfc3RhcnRfc3VuZGF5ID0gJ2ZpcnN0JzsKK3ZhciAk
TG9jYWxUWiA9IC04OworZnVuY3Rpb24gVG9JbnRlZ2VyKHApIHsKKyAgeCA9IE51bWJlcihwKTsK
KworICBpZihpc05hTih4KSl7CisgICAgcmV0dXJuICswOworICB9CisgIAorICBpZigoeCA9PT0g
KzApIAorICB8fCAoeCA9PT0gLTApIAorICB8fCAoeCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklO
SVRZKSAKKyAgfHwgKHggPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSkpeworICAgICByZXR1
cm4geDsKKyAgfQorCisgIHZhciBzaWduID0gKCB4IDwgMCApID8gLTEgOiAxOworCisgIHJldHVy
biAoc2lnbipNYXRoLmZsb29yKE1hdGguYWJzKHgpKSk7Cit9CisKKwordmFyIEhvdXJzUGVyRGF5
ID0gMjQ7Cit2YXIgTWludXRlc1BlckhvdXIgPSA2MDsKK3ZhciBTZWNvbmRzUGVyTWludXRlID0g
NjA7CisKK3ZhciBtc1BlckRheSA9IDg2NDAwMDAwOwordmFyIG1zUGVyU2Vjb25kID0gMTAwMDsK
K3ZhciBtc1Blck1pbnV0ZSA9IDYwMDAwOwordmFyIG1zUGVySG91ciA9IDM2MDAwMDA7CisKK3Zh
ciBkYXRlXzE4OTlfZW5kID0gLTIyMDg5ODg4MDAwMDE7Cit2YXIgZGF0ZV8xOTAwX3N0YXJ0ID0g
LTIyMDg5ODg4MDAwMDA7Cit2YXIgZGF0ZV8xOTY5X2VuZCA9IC0xOwordmFyIGRhdGVfMTk3MF9z
dGFydCA9IDA7Cit2YXIgZGF0ZV8xOTk5X2VuZCA9IDk0NjY4NDc5OTk5OTsKK3ZhciBkYXRlXzIw
MDBfc3RhcnQgPSA5NDY2ODQ4MDAwMDA7Cit2YXIgZGF0ZV8yMDk5X2VuZCA9IDQxMDI0NDQ3OTk5
OTk7Cit2YXIgZGF0ZV8yMTAwX3N0YXJ0ID0gNDEwMjQ0NDgwMDAwMDsKKworCisvLzE1LjkuMS4y
IERheSBOdW1iZXIgYW5kIFRpbWUgd2l0aGluIERheQorZnVuY3Rpb24gRGF5KHQpIHsKKyAgcmV0
dXJuIE1hdGguZmxvb3IodC9tc1BlckRheSk7Cit9CisKK2Z1bmN0aW9uIFRpbWVXaXRoaW5EYXko
dCkgeworICByZXR1cm4gdCVtc1BlckRheTsKK30KKworLy8xNS45LjEuMyBZZWFyIE51bWJlcgor
ZnVuY3Rpb24gRGF5c0luWWVhcih5KXsKKyAgaWYoeSU0ICE9IDApIHJldHVybiAzNjU7CisgIGlm
KHklNCA9PSAwICYmIHklMTAwICE9IDApIHJldHVybiAzNjY7CisgIGlmKHklMTAwID09IDAgJiYg
eSU0MDAgIT0gMCkgcmV0dXJuIDM2NTsKKyAgaWYoeSU0MDAgPT0gMCkgcmV0dXJuIDM2NjsKK30K
KworZnVuY3Rpb24gRGF5RnJvbVllYXIoeSkgeworICByZXR1cm4gKDM2NSooeS0xOTcwKQorICAg
ICAgICAgICsgTWF0aC5mbG9vcigoeS0xOTY5KS80KQorICAgICAgICAgIC0gTWF0aC5mbG9vcigo
eS0xOTAxKS8xMDApCisgICAgICAgICAgKyBNYXRoLmZsb29yKCh5LTE2MDEpLzQwMCkpOworfQor
CitmdW5jdGlvbiBUaW1lRnJvbVllYXIoeSl7CisgIHJldHVybiBtc1BlckRheSpEYXlGcm9tWWVh
cih5KTsKK30KKworZnVuY3Rpb24gWWVhckZyb21UaW1lKHQpIHsKKyAgdCA9IE51bWJlcih0KTsK
KyAgdmFyIHNpZ24gPSAoIHQgPCAwICkgPyAtMSA6IDE7CisgIHZhciB5ZWFyID0gKCBzaWduIDwg
MCApID8gMTk2OSA6IDE5NzA7CisgIAorICBmb3IodmFyIHRpbWUgPSAwOzt5ZWFyICs9IHNpZ24p
eworICAgIHRpbWUgPSBUaW1lRnJvbVllYXIoeWVhcik7CisgICAgCisgICAgaWYoc2lnbiA+IDAg
JiYgdGltZSA+IHQpeworICAgICAgeWVhciAtPSBzaWduOworICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGVsc2UgaWYoc2lnbiA8IDAgJiYgdGltZSA8PSB0KXsKKyAgICAgIGJyZWFrOworICAgIH0K
KyAgfTsKKyAgcmV0dXJuIHllYXI7Cit9CisgIAorZnVuY3Rpb24gSW5MZWFwWWVhcih0KXsKKyAg
aWYoRGF5c0luWWVhcihZZWFyRnJvbVRpbWUodCkpID09IDM2NSkKKyAgICByZXR1cm4gMDsKKyAg
CisgIGlmKERheXNJblllYXIoWWVhckZyb21UaW1lKHQpKSA9PSAzNjYpCisgICAgcmV0dXJuIDE7
Cit9CisKK2Z1bmN0aW9uIERheVdpdGhpblllYXIodCkgeworICByZXR1cm4gRGF5KHQpLURheUZy
b21ZZWFyKFllYXJGcm9tVGltZSh0KSk7Cit9CisKKy8vMTUuOS4xLjQgTW9udGggTnVtYmVyCitm
dW5jdGlvbiBNb250aEZyb21UaW1lKHQpeworICB2YXIgZGF5ID0gRGF5V2l0aGluWWVhcih0KTsK
KyAgdmFyIGxlYXAgPSBJbkxlYXBZZWFyKHQpOworCisgIGlmKCgwIDw9IGRheSkgJiYgKGRheSA8
IDMxKSkgcmV0dXJuIDA7CisgIGlmKCgzMSA8PSBkYXkpICYmIChkYXkgPCAoNTkrbGVhcCkpKSBy
ZXR1cm4gMTsKKyAgaWYoKCg1OStsZWFwKSA8PSBkYXkpICYmIChkYXkgPCAoOTArbGVhcCkpKSBy
ZXR1cm4gMjsKKyAgaWYoKCg5MCtsZWFwKSA8PSBkYXkpICYmIChkYXkgPCAoMTIwK2xlYXApKSkg
cmV0dXJuIDM7CisgIGlmKCgoMTIwK2xlYXApIDw9IGRheSkgJiYgKGRheSA8ICgxNTErbGVhcCkp
KSByZXR1cm4gNDsKKyAgaWYoKCgxNTErbGVhcCkgPD0gZGF5KSAmJiAoZGF5IDwgKDE4MStsZWFw
KSkpIHJldHVybiA1OworICBpZigoKDE4MStsZWFwKSA8PSBkYXkpICYmIChkYXkgPCAoMjEyK2xl
YXApKSkgcmV0dXJuIDY7CisgIGlmKCgoMjEyK2xlYXApIDw9IGRheSkgJiYgKGRheSA8ICgyNDMr
bGVhcCkpKSByZXR1cm4gNzsKKyAgaWYoKCgyNDMrbGVhcCkgPD0gZGF5KSAmJiAoZGF5IDwgKDI3
MytsZWFwKSkpIHJldHVybiA4OworICBpZigoKDI3MytsZWFwKSA8PSBkYXkpICYmIChkYXkgPCAo
MzA0K2xlYXApKSkgcmV0dXJuIDk7CisgIGlmKCgoMzA0K2xlYXApIDw9IGRheSkgJiYgKGRheSA8
ICgzMzQrbGVhcCkpKSByZXR1cm4gMTA7CisgIGlmKCgoMzM0K2xlYXApIDw9IGRheSkgJiYgKGRh
eSA8ICgzNjUrbGVhcCkpKSByZXR1cm4gMTE7Cit9CisKKy8vMTUuOS4xLjUgRGF0ZSBOdW1iZXIK
K2Z1bmN0aW9uIERhdGVGcm9tVGltZSh0KSB7CisgIHZhciBkYXkgPSBEYXlXaXRoaW5ZZWFyKHQp
OworICB2YXIgbW9udGggPSBNb250aEZyb21UaW1lKHQpOworICB2YXIgbGVhcCA9IEluTGVhcFll
YXIodCk7CisKKyAgaWYobW9udGggPT0gMCkgcmV0dXJuIGRheSsxOworICBpZihtb250aCA9PSAx
KSByZXR1cm4gZGF5LTMwOworICBpZihtb250aCA9PSAyKSByZXR1cm4gZGF5LTU4LWxlYXA7Cisg
IGlmKG1vbnRoID09IDMpIHJldHVybiBkYXktODktbGVhcDsKKyAgaWYobW9udGggPT0gNCkgcmV0
dXJuIGRheS0xMTktbGVhcDsKKyAgaWYobW9udGggPT0gNSkgcmV0dXJuIGRheS0xNTAtbGVhcDsK
KyAgaWYobW9udGggPT0gNikgcmV0dXJuIGRheS0xODAtbGVhcDsKKyAgaWYobW9udGggPT0gNykg
cmV0dXJuIGRheS0yMTEtbGVhcDsKKyAgaWYobW9udGggPT0gOCkgcmV0dXJuIGRheS0yNDItbGVh
cDsKKyAgaWYobW9udGggPT0gOSkgcmV0dXJuIGRheS0yNzItbGVhcDsKKyAgaWYobW9udGggPT0g
MTApIHJldHVybiBkYXktMzAzLWxlYXA7CisgIGlmKG1vbnRoID09IDExKSByZXR1cm4gZGF5LTMz
My1sZWFwOworfQorCisvLzE1LjkuMS42IFdlZWsgRGF5CitmdW5jdGlvbiBXZWVrRGF5KHQpIHsK
KyAgdmFyIHdlZWtkYXkgPSAoRGF5KHQpKzQpJTc7CisgIHJldHVybiAod2Vla2RheSA8IDAgPyA3
K3dlZWtkYXkgOiB3ZWVrZGF5KTsKK30KKworLy8xNS45LjEuOSBEYXlsaWdodCBTYXZpbmcgVGlt
ZSBBZGp1c3RtZW50Cit2YXIgTG9jYWxUWkEgPSAkTG9jYWxUWiptc1BlckhvdXI7CisKK2Z1bmN0
aW9uIERheXNJbk1vbnRoKG0sIGxlYXApIHsKKyAgbSA9IG0lMTI7CisgIAorICAvL0FwcmlsLCBK
dW5lLCBTZXB0LCBOb3YKKyAgaWYobSA9PSAzIHx8IG0gPT0gNSB8fCBtID09IDggfHwgbSA9PSAx
MCApIHsKKyAgICByZXR1cm4gMzA7CisgIH0KKworICAvL0phbiwgTWFyY2gsIE1heSwgSnVseSwg
QXVnLCBPY3QsIERlYworICBpZihtID09IDAgfHwgbSA9PSAyIHx8IG0gPT0gNCB8fCBtID09IDYg
fHwgbSA9PSA3IHx8IG0gPT0gOSB8fCBtID09IDExKXsKKyAgICByZXR1cm4gMzE7CisgIH0KKwor
ICAvL0ZlYgorICByZXR1cm4gMjgrbGVhcDsKK30KKworZnVuY3Rpb24gR2V0U3VuZGF5SW5Nb250
aCh0LCBtLCBjb3VudCl7CisgIHZhciB5ZWFyID0gWWVhckZyb21UaW1lKHQpOworICB2YXIgbGVh
cCA9IEluTGVhcFllYXIodCk7CisgIHZhciBkYXkgPSAwOworICAKKyAgaWYobSA+PSAxKSBkYXkg
Kz0gRGF5c0luTW9udGgoMCwgbGVhcCk7CisgIGlmKG0gPj0gMikgZGF5ICs9IERheXNJbk1vbnRo
KDEsIGxlYXApOworICBpZihtID49IDMpIGRheSArPSBEYXlzSW5Nb250aCgyLCBsZWFwKTsKKyAg
aWYobSA+PSA0KSBkYXkgKz0gRGF5c0luTW9udGgoMywgbGVhcCk7CisgIGlmKG0gPj0gNSkgZGF5
ICs9IERheXNJbk1vbnRoKDQsIGxlYXApOworICBpZihtID49IDYpIGRheSArPSBEYXlzSW5Nb250
aCg1LCBsZWFwKTsKKyAgaWYobSA+PSA3KSBkYXkgKz0gRGF5c0luTW9udGgoNiwgbGVhcCk7Cisg
IGlmKG0gPj0gOCkgZGF5ICs9IERheXNJbk1vbnRoKDcsIGxlYXApOworICBpZihtID49IDkpIGRh
eSArPSBEYXlzSW5Nb250aCg4LCBsZWFwKTsKKyAgaWYobSA+PSAxMCkgZGF5ICs9IERheXNJbk1v
bnRoKDksIGxlYXApOworICBpZihtID49IDExKSBkYXkgKz0gRGF5c0luTW9udGgoMTAsIGxlYXAp
OworICAKKyAgdmFyIG1vbnRoX3N0YXJ0ID0gVGltZUZyb21ZZWFyKHllYXIpK2RheSptc1BlckRh
eTsKKyAgdmFyIHN1bmRheSA9IDA7CisgIAorICBpZihjb3VudCA9PT0gImxhc3QiKXsKKyAgICBm
b3IodmFyIGxhc3Rfc3VuZGF5ID0gbW9udGhfc3RhcnQrRGF5c0luTW9udGgobSwgbGVhcCkqbXNQ
ZXJEYXk7IAorICAgICAgV2Vla0RheShsYXN0X3N1bmRheSk+MDsKKyAgICAgIGxhc3Rfc3VuZGF5
IC09IG1zUGVyRGF5CisgICAgKXt9OworICAgIHN1bmRheSA9IGxhc3Rfc3VuZGF5OworICB9Cisg
IGVsc2UgeworICAgIGZvcih2YXIgZmlyc3Rfc3VuZGF5ID0gbW9udGhfc3RhcnQ7IAorICAgICAg
V2Vla0RheShmaXJzdF9zdW5kYXkpPjA7CisgICAgICBmaXJzdF9zdW5kYXkgKz0gbXNQZXJEYXkK
KyAgICApe307CisgICAgc3VuZGF5ID0gZmlyc3Rfc3VuZGF5KzcqbXNQZXJEYXkqKGNvdW50LTEp
OworICB9CisgIAorICByZXR1cm4gc3VuZGF5OworfQorCitmdW5jdGlvbiBEYXlsaWdodFNhdmlu
Z1RBKHQpIHsKKyAgdCA9IHQtTG9jYWxUWkE7CisKKyAgdmFyIERTVF9zdGFydCA9IEdldFN1bmRh
eUluTW9udGgodCwgJERTVF9zdGFydF9tb250aCwgJERTVF9zdGFydF9zdW5kYXkpCisgICAgICAg
ICAgICAgICAgICArJERTVF9zdGFydF9ob3VyKm1zUGVySG91cgorICAgICAgICAgICAgICAgICAg
KyREU1Rfc3RhcnRfbWludXRlcyptc1Blck1pbnV0ZTsKKyAgICAgICAgICAgICAgICAgIAorICB2
YXIgayA9IG5ldyBEYXRlKERTVF9zdGFydCk7CisgIAorICB2YXIgRFNUX2VuZCAgID0gR2V0U3Vu
ZGF5SW5Nb250aCh0LCAkRFNUX2VuZF9tb250aCwgJERTVF9lbmRfc3VuZGF5KQorICAgICAgICAg
ICAgICAgICAgKyREU1RfZW5kX2hvdXIqbXNQZXJIb3VyCisgICAgICAgICAgICAgICAgICArJERT
VF9lbmRfbWludXRlcyptc1Blck1pbnV0ZTsKKworICBpZiAoIHQgPj0gRFNUX3N0YXJ0ICYmIHQg
PCBEU1RfZW5kICkgeworICAgIHJldHVybiBtc1BlckhvdXI7CisgIH0gZWxzZSB7CisgICAgcmV0
dXJuIDA7CisgIH0KK30KKworLy8xNS45LjEuOSBMb2NhbCBUaW1lCitmdW5jdGlvbiBMb2NhbFRp
bWUodCl7CisgIHJldHVybiB0K0xvY2FsVFpBK0RheWxpZ2h0U2F2aW5nVEEodCk7Cit9CisKK2Z1
bmN0aW9uIFVUQyh0KSB7CisgIHJldHVybiB0LUxvY2FsVFpBLURheWxpZ2h0U2F2aW5nVEEodC1M
b2NhbFRaQSk7Cit9CisKKy8vMTUuOS4xLjEwIEhvdXJzLCBNaW51dGVzLCBTZWNvbmQsIGFuZCBN
aWxsaXNlY29uZHMKK2Z1bmN0aW9uIEhvdXJGcm9tVGltZSh0KXsKKyAgcmV0dXJuIE1hdGguZmxv
b3IodC9tc1BlckhvdXIpJUhvdXJzUGVyRGF5OworfQorCitmdW5jdGlvbiBNaW5Gcm9tVGltZSh0
KXsKKyAgcmV0dXJuIE1hdGguZmxvb3IodC9tc1Blck1pbnV0ZSklTWludXRlc1BlckhvdXI7Cit9
CisKK2Z1bmN0aW9uIFNlY0Zyb21UaW1lKHQpeworICByZXR1cm4gTWF0aC5mbG9vcih0L21zUGVy
U2Vjb25kKSVTZWNvbmRzUGVyTWludXRlOworfQorCitmdW5jdGlvbiBtc0Zyb21UaW1lKHQpewor
ICByZXR1cm4gdCVtc1BlclNlY29uZDsKK30KKworLy8xNS45LjEuMTEgTWFrZVRpbWUgKGhvdXIs
IG1pbiwgc2VjLCBtcykKK2Z1bmN0aW9uIE1ha2VUaW1lKGhvdXIsIG1pbiwgc2VjLCBtcyl7Cisg
IGlmICggIWlzRmluaXRlKGhvdXIpIHx8ICFpc0Zpbml0ZShtaW4pIHx8ICFpc0Zpbml0ZShzZWMp
IHx8ICFpc0Zpbml0ZShtcykpIHsKKyAgICByZXR1cm4gTnVtYmVyLk5hTjsKKyAgfQorCisgIGhv
dXIgPSBUb0ludGVnZXIoaG91cik7CisgIG1pbiAgPSBUb0ludGVnZXIobWluKTsKKyAgc2VjICA9
IFRvSW50ZWdlcihzZWMpOworICBtcyAgID0gVG9JbnRlZ2VyKG1zKTsKKworICByZXR1cm4gKCho
b3VyKm1zUGVySG91cikgKyAobWluKm1zUGVyTWludXRlKSArIChzZWMqbXNQZXJTZWNvbmQpICsg
bXMpOworfQorCisvLzE1LjkuMS4xMiBNYWtlRGF5ICh5ZWFyLCBtb250aCwgZGF0ZSkKK2Z1bmN0
aW9uIE1ha2VEYXkoeWVhciwgbW9udGgsIGRhdGUpIHsKKyAgaWYgKCAhaXNGaW5pdGUoeWVhcikg
fHwgIWlzRmluaXRlKG1vbnRoKSB8fCAhaXNGaW5pdGUoZGF0ZSkpIHsKKyAgICByZXR1cm4gTnVt
YmVyLk5hTjsKKyAgfQorCisgIHllYXIgPSBUb0ludGVnZXIoeWVhcik7CisgIG1vbnRoID0gVG9J
bnRlZ2VyKG1vbnRoKTsKKyAgZGF0ZSA9IFRvSW50ZWdlcihkYXRlICk7CisKKyAgdmFyIHJlc3Vs
dDUgPSB5ZWFyICsgTWF0aC5mbG9vcihtb250aC8xMik7CisgIHZhciByZXN1bHQ2ID0gbW9udGgl
MTI7CisKKyAgdmFyIHNpZ24gPSAoIHllYXIgPCAxOTcwICkgPyAtMSA6IDE7CisgIHZhciB0ID0g
ICAgKCB5ZWFyIDwgMTk3MCApID8gMSA6ICAwOworICB2YXIgeSA9ICAgICggeWVhciA8IDE5NzAg
KSA/IDE5NjkgOiAxOTcwOworCisgIGlmKCBzaWduID09IC0xICl7CisgICAgZm9yICggeSA9IDE5
Njk7IHkgPj0geWVhcjsgeSArPSBzaWduICkgeworICAgICAgdCArPSBzaWduICogRGF5c0luWWVh
cih5KSptc1BlckRheTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgZm9yICggeSA9IDE5NzAgOyB5
IDwgeWVhcjsgeSArPSBzaWduICkgeworICAgICAgdCArPSBzaWduICogRGF5c0luWWVhcih5KSpt
c1BlckRheTsKKyAgICB9CisgIH0KKworICB2YXIgbGVhcCA9IDA7CisgIGZvciAoIHZhciBtID0g
MDsgbSA8IG1vbnRoOyBtKysgKSB7CisgICAgLy9pZiB5ZWFyIGlzIGNoYW5nZWQsIHRoYW4gd2Ug
bmVlZCB0byByZWNhbGN1bGF0ZSBsZWVwCisgICAgbGVhcCA9IEluTGVhcFllYXIodCk7CisgICAg
dCArPSBEYXlzSW5Nb250aChtLCBsZWFwKSptc1BlckRheTsKKyAgfQorCisgIGlmICggWWVhckZy
b21UaW1lKHQpICE9IHJlc3VsdDUgKSB7CisgICAgcmV0dXJuIE51bWJlci5OYU47CisgIH0KKyAg
aWYgKCBNb250aEZyb21UaW1lKHQpICE9IHJlc3VsdDYgKSB7CisgICAgcmV0dXJuIE51bWJlci5O
YU47CisgIH0KKyAgaWYgKCBEYXRlRnJvbVRpbWUodCkgIT0gMSApIHsKKyAgICByZXR1cm4gTnVt
YmVyLk5hTjsKKyAgfQorCisgIHJldHVybiBEYXkodCkrZGF0ZS0xOworfQorCisvLzE1LjkuMS4x
MyBNYWtlRGF0ZSAoZGF5LCB0aW1lKQorZnVuY3Rpb24gTWFrZURhdGUoIGRheSwgdGltZSApIHsK
KyAgaWYoIWlzRmluaXRlKGRheSkgfHwgIWlzRmluaXRlKHRpbWUpKSB7CisgICAgcmV0dXJuIE51
bWJlci5OYU47CisgIH0KKyAgCisgIHJldHVybiBkYXkqbXNQZXJEYXkrdGltZTsKK30KKworLy8x
NS45LjEuMTQgVGltZUNsaXAgKHRpbWUpCitmdW5jdGlvbiBUaW1lQ2xpcCh0aW1lKSB7CisgIGlm
KCFpc0Zpbml0ZSh0aW1lKSB8fCBNYXRoLmFicyh0aW1lKSA+IDguNjRlMTUpeworICAgIHJldHVy
biBOdW1iZXIuTmFOOworICB9CisKKyAgcmV0dXJuIFRvSW50ZWdlcih0aW1lKTsKK30KKworLy9U
ZXN0IEZ1bmN0aW9ucworZnVuY3Rpb24gQ29uc3RydWN0RGF0ZSh5ZWFyLCBtb250aCwgZGF0ZSwg
aG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG1zKXsKKyAgLyoKKyAgICogMS4gQ2FsbCBUb051bWJl
cih5ZWFyKQorICAgKiAyLiBDYWxsIFRvTnVtYmVyKG1vbnRoKQorICAgKiAzLiBJZiBkYXRlIGlz
IHN1cHBsaWVkIHVzZSBUb051bWJlcihkYXRlKTsgZWxzZSB1c2UgMQorICAgKiA0LiBJZiBob3Vy
cyBpcyBzdXBwbGllZCB1c2UgVG9OdW1iZXIoaG91cnMpOyBlbHNlIHVzZSAwCisgICAqIDUuIElm
IG1pbnV0ZXMgaXMgc3VwcGxpZWQgdXNlIFRvTnVtYmVyKG1pbnV0ZXMpOyBlbHNlIHVzZSAwCisg
ICAqIDYuIElmIHNlY29uZHMgaXMgc3VwcGxpZWQgdXNlIFRvTnVtYmVyKHNlY29uZHMpOyBlbHNl
IHVzZSAwCisgICAqIDcuIElmIG1zIGlzIHN1cHBsaWVkIHVzZSBUb051bWJlcihtcyk7IGVsc2Ug
dXNlIDAKKyAgICogOC4gSWYgUmVzdWx0KDEpIGlzIG5vdCBOYU4gYW5kIDAgPD0gVG9JbnRlZ2Vy
KFJlc3VsdCgxKSkgPD0gOTksIFJlc3VsdCg4KSBpcworICAgKiAxOTAwK1RvSW50ZWdlcihSZXN1
bHQoMSkpOyBvdGhlcndpc2UsIFJlc3VsdCg4KSBpcyBSZXN1bHQoMSkKKyAgICogOS4gQ29tcHV0
ZSBNYWtlRGF5KFJlc3VsdCg4KSwgUmVzdWx0KDIpLCBSZXN1bHQoMykpCisgICAqIDEwLiBDb21w
dXRlIE1ha2VUaW1lKFJlc3VsdCg0KSwgUmVzdWx0KDUpLCBSZXN1bHQoNiksIFJlc3VsdCg3KSkK
KyAgICogMTEuIENvbXB1dGUgTWFrZURhdGUoUmVzdWx0KDkpLCBSZXN1bHQoMTApKQorICAgKiAx
Mi4gU2V0IHRoZSBbW1ZhbHVlXV0gcHJvcGVydHkgb2YgdGhlIG5ld2x5IGNvbnN0cnVjdGVkIG9i
amVjdCB0byBUaW1lQ2xpcChVVEMoUmVzdWx0KDExKSkpCisgICAqLworICB2YXIgcjEgPSBOdW1i
ZXIoeWVhcik7CisgIHZhciByMiA9IE51bWJlcihtb250aCk7CisgIHZhciByMyA9ICgoZGF0ZSAm
JiBhcmd1bWVudHMubGVuZ3RoID4gMikgPyBOdW1iZXIoZGF0ZSkgOiAxKTsKKyAgdmFyIHI0ID0g
KChob3VycyAmJiBhcmd1bWVudHMubGVuZ3RoID4gMykgPyBOdW1iZXIoaG91cnMpIDogMCk7ICAg
CisgIHZhciByNSA9ICgobWludXRlcyAmJiBhcmd1bWVudHMubGVuZ3RoID4gNCkgPyBOdW1iZXIo
bWludXRlcykgOiAwKTsgICAKKyAgdmFyIHI2ID0gKChzZWNvbmRzICYmIGFyZ3VtZW50cy5sZW5n
dGggPiA1KSA/IE51bWJlcihzZWNvbmRzKSA6IDApOyAgIAorICB2YXIgcjcgPSAoKG1zICYmIGFy
Z3VtZW50cy5sZW5ndGggPiA2KSA/IE51bWJlcihtcykgOiAwKTsKKyAgCisgIHZhciByOCA9IHIx
OworICAKKyAgaWYoIWlzTmFOKHIxKSAmJiAoMCA8PSBUb0ludGVnZXIocjEpKSAmJiAoVG9JbnRl
Z2VyKHIxKSA8PSA5OSkpCisgICAgcjggPSAxOTAwK3IxOworICAKKyAgdmFyIHI5ID0gTWFrZURh
eShyOCwgcjIsIHIzKTsKKyAgdmFyIHIxMCA9IE1ha2VUaW1lKHI0LCByNSwgcjYsIHI3KTsKKyAg
dmFyIHIxMSA9IE1ha2VEYXRlKHI5LCByMTApOworICAKKyAgcmV0dXJuIFRpbWVDbGlwKFVUQyhy
MTEpKTsKK30KKworCisKK2lmIChDb25zdHJ1Y3REYXRlKDE4OTksIDExLCAzMSwgMjMpICE9PSBu
ZXcgRGF0ZSgxODk5LCAxMSwgMzEsIDIzKS52YWx1ZU9mKCkpIHsKKyAgdGVzdEZhaWxlZCgiIzE6
IEluY29ycmVjdCB2YWx1ZSBvZiBEYXRlIik7Cit9CisKK2lmIChDb25zdHJ1Y3REYXRlKDE4OTks
IDEyLCAxLCAwKSAhPT0gbmV3IERhdGUoMTg5OSwgMTIsIDEsIDApLnZhbHVlT2YoKSkgeworICB0
ZXN0RmFpbGVkKCIjMjogSW5jb3JyZWN0IHZhbHVlIG9mIERhdGUiKTsKK30KKworaWYgKENvbnN0
cnVjdERhdGUoMTkwMCwgMCwgMSwgMCkgIT09IG5ldyBEYXRlKDE5MDAsIDAsIDEsIDApLnZhbHVl
T2YoKSkgeworICB0ZXN0RmFpbGVkKCIjMzogSW5jb3JyZWN0IHZhbHVlIG9mIERhdGUiKTsKK30K
KworaWYgKENvbnN0cnVjdERhdGUoMTk2OSwgMTEsIDMxLCAyMykgIT09IG5ldyBEYXRlKDE5Njks
IDExLCAzMSwgMjMpLnZhbHVlT2YoKSkgeworICB0ZXN0RmFpbGVkKCIjNDogSW5jb3JyZWN0IHZh
bHVlIG9mIERhdGUiKTsKK30KKworaWYgKENvbnN0cnVjdERhdGUoMTk2OSwgMTIsIDEsIDApICE9
PSBuZXcgRGF0ZSgxOTY5LCAxMiwgMSwgMCkudmFsdWVPZigpKSB7CisgIHRlc3RGYWlsZWQoIiM1
OiBJbmNvcnJlY3QgdmFsdWUgb2YgRGF0ZSIpOworfQorCitpZiAoQ29uc3RydWN0RGF0ZSgxOTcw
LCAwLCAxLCAwKSAhPT0gbmV3IERhdGUoMTk3MCwgMCwgMSwgMCkudmFsdWVPZigpKSB7CisgIHRl
c3RGYWlsZWQoIiM2OiBJbmNvcnJlY3QgdmFsdWUgb2YgRGF0ZSIpOworfQorCitpZiAoQ29uc3Ry
dWN0RGF0ZSgxOTk5LCAxMSwgMzEsIDIzKSAhPT0gbmV3IERhdGUoMTk5OSwgMTEsIDMxLCAyMyku
dmFsdWVPZigpKSB7CisgIHRlc3RGYWlsZWQoIiM3OiBJbmNvcnJlY3QgdmFsdWUgb2YgRGF0ZSIp
OworfQorCitpZiAoQ29uc3RydWN0RGF0ZSgxOTk5LCAxMiwgMSwgMCkgIT09IG5ldyBEYXRlKDE5
OTksIDEyLCAxLCAwKS52YWx1ZU9mKCkpIHsKKyAgdGVzdEZhaWxlZCgiIzg6IEluY29ycmVjdCB2
YWx1ZSBvZiBEYXRlIik7Cit9CisKK2lmIChDb25zdHJ1Y3REYXRlKDIwMDAsIDAsIDEsIDApICE9
PSBuZXcgRGF0ZSgyMDAwLCAwLCAxLCAwKS52YWx1ZU9mKCkpIHsKKyAgdGVzdEZhaWxlZCgiIzk6
IEluY29ycmVjdCB2YWx1ZSBvZiBEYXRlIik7Cit9CisKK2lmIChDb25zdHJ1Y3REYXRlKDIwOTks
IDExLCAzMSwgMjMpICE9PSBuZXcgRGF0ZSgyMDk5LCAxMSwgMzEsIDIzKS52YWx1ZU9mKCkpIHsK
KyAgdGVzdEZhaWxlZCgiIzEwOiBJbmNvcnJlY3QgdmFsdWUgb2YgRGF0ZSIpOworfQorCitpZiAo
Q29uc3RydWN0RGF0ZSgyMDk5LCAxMiwgMSwgMCkgIT09IG5ldyBEYXRlKDIwOTksIDEyLCAxLCAw
KS52YWx1ZU9mKCkpIHsKKyAgdGVzdEZhaWxlZCgiIzExOiBJbmNvcnJlY3QgdmFsdWUgb2YgRGF0
ZSIpOworfQorCitpZiAoQ29uc3RydWN0RGF0ZSgyMTAwLCAwLCAxLCAwKSAhPT0gbmV3IERhdGUo
MjEwMCwgMCwgMSwgMCkudmFsdWVPZigpKSB7CisgIHRlc3RGYWlsZWQoIiMxMjogSW5jb3JyZWN0
IHZhbHVlIG9mIERhdGUiKTsKK30KKworfSBjYXRjaCAoZXgpIHsKKyAgICBzcHV0bmlrRXhjZXB0
aW9uID0gZXg7Cit9CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+
CisKKzxzY3JpcHQ+CitpZiAoIXN1Y2Nlc3NmdWxseVBhcnNlZCkKKyAgICBwcmludFRlc3RGYWls
ZWQoJ3N1Y2Nlc3NmdWxseVBhcnNlZCBpcyBub3Qgc2V0Jyk7CitlbHNlIGlmIChzcHV0bmlrRXhj
ZXB0aW9uKQorICAgIHByaW50VGVzdEZhaWxlZChzcHV0bmlrRXhjZXB0aW9uKTsKK2Vsc2UKKyAg
ICBwcmludFRlc3RQYXNzZWQoIiIpOwordGVzdFByaW50KCc8YnIgLz48c3BhbiBjbGFzcz0icGFz
cyI+VEVTVCBDT01QTEVURTwvc3Bhbj4nKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3B1dG5pay9Db25mb3JtYW5jZS8xNV9OYXRpdmVfT2Jq
ZWN0cy8xNS45X0RhdGUvMTUuOS4zL1MxNS45LjMuMV9BNV9UMy5odG1sLWRpc2FibGVkIGIvTGF5
b3V0VGVzdHMvc3B1dG5pay9Db25mb3JtYW5jZS8xNV9OYXRpdmVfT2JqZWN0cy8xNS45X0RhdGUv
MTUuOS4zL1MxNS45LjMuMV9BNV9UMy5odG1sLWRpc2FibGVkCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwZWZlNjY4MTI3YWIzZDdiY2M0YzhkYjJmOGFhZjhkNTA2M2NlMzY0Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3Nw
dXRuaWsvQ29uZm9ybWFuY2UvMTVfTmF0aXZlX09iamVjdHMvMTUuOV9EYXRlLzE1LjkuMy9TMTUu
OS4zLjFfQTVfVDMuaHRtbC1kaXNhYmxlZAorKysgL2Rldi9udWxsCkBAIC0xLDUyMiArMCwwIEBA
Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgY2hhcnNldD0ndXRmLTgnPgotPHN0eWxlPgotLnBhc3Mg
ewotICAgIGZvbnQtd2VpZ2h0OiBib2xkOwotICAgIGNvbG9yOiBncmVlbjsKLX0KLS5mYWlsIHsK
LSAgICBmb250LXdlaWdodDogYm9sZDsKLSAgICBjb2xvcjogcmVkOwotfQotPC9zdHlsZT4KLQot
PHNjcmlwdD4KLWlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICB0ZXN0UnVubmVyLmR1bXBBc1Rl
eHQoKTsKLQotZnVuY3Rpb24gU3B1dG5pa0Vycm9yKG1lc3NhZ2UpCi17Ci0gICAgdGhpcy5tZXNz
YWdlID0gbWVzc2FnZTsKLX0KLQotU3B1dG5pa0Vycm9yLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1
bmN0aW9uICgpCi17Ci0gICAgcmV0dXJuICdTcHV0bmlrRXJyb3I6ICcgKyB0aGlzLm1lc3NhZ2U7
Ci19OwotCi12YXIgc3B1dG5pa0V4Y2VwdGlvbjsKLQotZnVuY3Rpb24gdGVzdFByaW50KG1zZykK
LXsKLSAgICB2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAgICBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmFwcGVuZENoaWxkKHNwYW4pOyAvLyBp
bnNlcnQgaXQgZmlyc3Qgc28gWEhUTUwga25vd3MgdGhlIG5hbWVzcGFjZSAKLSAgICBzcGFuLmlu
bmVySFRNTCA9IG1zZyArICc8YnIgLz4nOwotfQotCi1mdW5jdGlvbiBlc2NhcGVIVE1MKHRleHQp
Ci17Ci0gICAgcmV0dXJuIHRleHQudG9TdHJpbmcoKS5yZXBsYWNlKC8mL2csICImYW1wOyIpLnJl
cGxhY2UoLzwvZywgIiZsdDsiKTsKLX0KLQotZnVuY3Rpb24gcHJpbnRUZXN0UGFzc2VkKG1zZykK
LXsKLSAgICB0ZXN0UHJpbnQoJzxzcGFuPjxzcGFuIGNsYXNzPSJwYXNzIj5QQVNTPC9zcGFuPiAn
ICsgZXNjYXBlSFRNTChtc2cpICsgJzwvc3Bhbj4nKTsKLX0KLQotZnVuY3Rpb24gcHJpbnRUZXN0
RmFpbGVkKG1zZykKLXsKLSAgICB0ZXN0UHJpbnQoJzxzcGFuPjxzcGFuIGNsYXNzPSJmYWlsIj5G
QUlMPC9zcGFuPiAnICsgZXNjYXBlSFRNTChtc2cpICsgJzwvc3Bhbj4nKTsKLX0KLQotZnVuY3Rp
b24gdGVzdEZhaWxlZChtc2cpCi17Ci0gICAgdGhyb3cgbmV3IFNwdXRuaWtFcnJvcihtc2cpOwot
fQotCi12YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gZmFsc2U7Ci08L3NjcmlwdD4KLQotPC9oZWFk
PgotPGJvZHk+Ci08cD5TMTUuOS4zLjFfQTVfVDM8L3A+Ci08ZGl2IGlkPSdjb25zb2xlJz48L2Rp
dj4KLTxzY3JpcHQ+Ci10cnkgewotCi0vKioKLSAqIEBuYW1lOiBTMTUuOS4zLjFfQTVfVDM7Ci0g
KiBAc2VjdGlvbjogMTUuOS4zLjE7Ci0gKiBAYXNzZXJ0aW9uOiBUaGUgW1tWYWx1ZV1dIHByb3Bl
cnR5IG9mIHRoZSBuZXdseSBjb25zdHJ1Y3RlZCBvYmplY3QgCi0gKiBpcyBzZXQgYnkgZm9sbG93
aW5nIHN0ZXBzOgotICogOC4gSWYgUmVzdWx0KDEpIGlzIG5vdCBOYU4gYW5kIDAgPD0gVG9JbnRl
Z2VyKFJlc3VsdCgxKSkgPD0gOTksIFJlc3VsdCg4KSBpcwotICogMTkwMCtUb0ludGVnZXIoUmVz
dWx0KDEpKTsgb3RoZXJ3aXNlLCBSZXN1bHQoOCkgaXMgUmVzdWx0KDEpCi0gKiA5LiBDb21wdXRl
IE1ha2VEYXkoUmVzdWx0KDgpLCBSZXN1bHQoMiksIFJlc3VsdCgzKSkKLSAqIDEwLiBDb21wdXRl
IE1ha2VUaW1lKFJlc3VsdCg0KSwgUmVzdWx0KDUpLCBSZXN1bHQoNiksIFJlc3VsdCg3KSkKLSAq
IDExLiBDb21wdXRlIE1ha2VEYXRlKFJlc3VsdCg5KSwgUmVzdWx0KDEwKSkKLSAqIDEyLiBTZXQg
dGhlIFtbVmFsdWVdXSBwcm9wZXJ0eSBvZiB0aGUgbmV3bHkgY29uc3RydWN0ZWQgb2JqZWN0IHRv
IAotICogVGltZUNsaXAoVVRDKFJlc3VsdCgxMSkpKTsKLSAqIEBkZXNjcmlwdGlvbjogNCBhcmd1
bWVudHMsICh5ZWFyLCBtb250aCwgZGF0ZSwgaG91cnMpOwotICovCi0KLXZhciAkRFNUX2VuZF9o
b3VyID0gMjsKLXZhciAkRFNUX2VuZF9taW51dGVzID0gMDsKLXZhciAkRFNUX2VuZF9tb250aCA9
IDEwOwotdmFyICREU1RfZW5kX3N1bmRheSA9ICdmaXJzdCc7Ci12YXIgJERTVF9zdGFydF9ob3Vy
ID0gMjsKLXZhciAkRFNUX3N0YXJ0X21pbnV0ZXMgPSAwOwotdmFyICREU1Rfc3RhcnRfbW9udGgg
PSAyOwotdmFyICREU1Rfc3RhcnRfc3VuZGF5ID0gJ2ZpcnN0JzsKLXZhciAkTG9jYWxUWiA9IC04
OwotZnVuY3Rpb24gVG9JbnRlZ2VyKHApIHsKLSAgeCA9IE51bWJlcihwKTsKLQotICBpZihpc05h
Tih4KSl7Ci0gICAgcmV0dXJuICswOwotICB9Ci0gIAotICBpZigoeCA9PT0gKzApIAotICB8fCAo
eCA9PT0gLTApIAotICB8fCAoeCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSAKLSAgfHwg
KHggPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSkpewotICAgICByZXR1cm4geDsKLSAgfQot
Ci0gIHZhciBzaWduID0gKCB4IDwgMCApID8gLTEgOiAxOwotCi0gIHJldHVybiAoc2lnbipNYXRo
LmZsb29yKE1hdGguYWJzKHgpKSk7Ci19Ci0KLQotdmFyIEhvdXJzUGVyRGF5ID0gMjQ7Ci12YXIg
TWludXRlc1BlckhvdXIgPSA2MDsKLXZhciBTZWNvbmRzUGVyTWludXRlID0gNjA7Ci0KLXZhciBt
c1BlckRheSA9IDg2NDAwMDAwOwotdmFyIG1zUGVyU2Vjb25kID0gMTAwMDsKLXZhciBtc1Blck1p
bnV0ZSA9IDYwMDAwOwotdmFyIG1zUGVySG91ciA9IDM2MDAwMDA7Ci0KLXZhciBkYXRlXzE4OTlf
ZW5kID0gLTIyMDg5ODg4MDAwMDE7Ci12YXIgZGF0ZV8xOTAwX3N0YXJ0ID0gLTIyMDg5ODg4MDAw
MDA7Ci12YXIgZGF0ZV8xOTY5X2VuZCA9IC0xOwotdmFyIGRhdGVfMTk3MF9zdGFydCA9IDA7Ci12
YXIgZGF0ZV8xOTk5X2VuZCA9IDk0NjY4NDc5OTk5OTsKLXZhciBkYXRlXzIwMDBfc3RhcnQgPSA5
NDY2ODQ4MDAwMDA7Ci12YXIgZGF0ZV8yMDk5X2VuZCA9IDQxMDI0NDQ3OTk5OTk7Ci12YXIgZGF0
ZV8yMTAwX3N0YXJ0ID0gNDEwMjQ0NDgwMDAwMDsKLQotCi0vLzE1LjkuMS4yIERheSBOdW1iZXIg
YW5kIFRpbWUgd2l0aGluIERheQotZnVuY3Rpb24gRGF5KHQpIHsKLSAgcmV0dXJuIE1hdGguZmxv
b3IodC9tc1BlckRheSk7Ci19Ci0KLWZ1bmN0aW9uIFRpbWVXaXRoaW5EYXkodCkgewotICByZXR1
cm4gdCVtc1BlckRheTsKLX0KLQotLy8xNS45LjEuMyBZZWFyIE51bWJlcgotZnVuY3Rpb24gRGF5
c0luWWVhcih5KXsKLSAgaWYoeSU0ICE9IDApIHJldHVybiAzNjU7Ci0gIGlmKHklNCA9PSAwICYm
IHklMTAwICE9IDApIHJldHVybiAzNjY7Ci0gIGlmKHklMTAwID09IDAgJiYgeSU0MDAgIT0gMCkg
cmV0dXJuIDM2NTsKLSAgaWYoeSU0MDAgPT0gMCkgcmV0dXJuIDM2NjsKLX0KLQotZnVuY3Rpb24g
RGF5RnJvbVllYXIoeSkgewotICByZXR1cm4gKDM2NSooeS0xOTcwKQotICAgICAgICAgICsgTWF0
aC5mbG9vcigoeS0xOTY5KS80KQotICAgICAgICAgIC0gTWF0aC5mbG9vcigoeS0xOTAxKS8xMDAp
Ci0gICAgICAgICAgKyBNYXRoLmZsb29yKCh5LTE2MDEpLzQwMCkpOwotfQotCi1mdW5jdGlvbiBU
aW1lRnJvbVllYXIoeSl7Ci0gIHJldHVybiBtc1BlckRheSpEYXlGcm9tWWVhcih5KTsKLX0KLQot
ZnVuY3Rpb24gWWVhckZyb21UaW1lKHQpIHsKLSAgdCA9IE51bWJlcih0KTsKLSAgdmFyIHNpZ24g
PSAoIHQgPCAwICkgPyAtMSA6IDE7Ci0gIHZhciB5ZWFyID0gKCBzaWduIDwgMCApID8gMTk2OSA6
IDE5NzA7Ci0gIAotICBmb3IodmFyIHRpbWUgPSAwOzt5ZWFyICs9IHNpZ24pewotICAgIHRpbWUg
PSBUaW1lRnJvbVllYXIoeWVhcik7Ci0gICAgCi0gICAgaWYoc2lnbiA+IDAgJiYgdGltZSA+IHQp
ewotICAgICAgeWVhciAtPSBzaWduOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGVsc2UgaWYo
c2lnbiA8IDAgJiYgdGltZSA8PSB0KXsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfTsKLSAgcmV0
dXJuIHllYXI7Ci19Ci0gIAotZnVuY3Rpb24gSW5MZWFwWWVhcih0KXsKLSAgaWYoRGF5c0luWWVh
cihZZWFyRnJvbVRpbWUodCkpID09IDM2NSkKLSAgICByZXR1cm4gMDsKLSAgCi0gIGlmKERheXNJ
blllYXIoWWVhckZyb21UaW1lKHQpKSA9PSAzNjYpCi0gICAgcmV0dXJuIDE7Ci19Ci0KLWZ1bmN0
aW9uIERheVdpdGhpblllYXIodCkgewotICByZXR1cm4gRGF5KHQpLURheUZyb21ZZWFyKFllYXJG
cm9tVGltZSh0KSk7Ci19Ci0KLS8vMTUuOS4xLjQgTW9udGggTnVtYmVyCi1mdW5jdGlvbiBNb250
aEZyb21UaW1lKHQpewotICB2YXIgZGF5ID0gRGF5V2l0aGluWWVhcih0KTsKLSAgdmFyIGxlYXAg
PSBJbkxlYXBZZWFyKHQpOwotCi0gIGlmKCgwIDw9IGRheSkgJiYgKGRheSA8IDMxKSkgcmV0dXJu
IDA7Ci0gIGlmKCgzMSA8PSBkYXkpICYmIChkYXkgPCAoNTkrbGVhcCkpKSByZXR1cm4gMTsKLSAg
aWYoKCg1OStsZWFwKSA8PSBkYXkpICYmIChkYXkgPCAoOTArbGVhcCkpKSByZXR1cm4gMjsKLSAg
aWYoKCg5MCtsZWFwKSA8PSBkYXkpICYmIChkYXkgPCAoMTIwK2xlYXApKSkgcmV0dXJuIDM7Ci0g
IGlmKCgoMTIwK2xlYXApIDw9IGRheSkgJiYgKGRheSA8ICgxNTErbGVhcCkpKSByZXR1cm4gNDsK
LSAgaWYoKCgxNTErbGVhcCkgPD0gZGF5KSAmJiAoZGF5IDwgKDE4MStsZWFwKSkpIHJldHVybiA1
OwotICBpZigoKDE4MStsZWFwKSA8PSBkYXkpICYmIChkYXkgPCAoMjEyK2xlYXApKSkgcmV0dXJu
IDY7Ci0gIGlmKCgoMjEyK2xlYXApIDw9IGRheSkgJiYgKGRheSA8ICgyNDMrbGVhcCkpKSByZXR1
cm4gNzsKLSAgaWYoKCgyNDMrbGVhcCkgPD0gZGF5KSAmJiAoZGF5IDwgKDI3MytsZWFwKSkpIHJl
dHVybiA4OwotICBpZigoKDI3MytsZWFwKSA8PSBkYXkpICYmIChkYXkgPCAoMzA0K2xlYXApKSkg
cmV0dXJuIDk7Ci0gIGlmKCgoMzA0K2xlYXApIDw9IGRheSkgJiYgKGRheSA8ICgzMzQrbGVhcCkp
KSByZXR1cm4gMTA7Ci0gIGlmKCgoMzM0K2xlYXApIDw9IGRheSkgJiYgKGRheSA8ICgzNjUrbGVh
cCkpKSByZXR1cm4gMTE7Ci19Ci0KLS8vMTUuOS4xLjUgRGF0ZSBOdW1iZXIKLWZ1bmN0aW9uIERh
dGVGcm9tVGltZSh0KSB7Ci0gIHZhciBkYXkgPSBEYXlXaXRoaW5ZZWFyKHQpOwotICB2YXIgbW9u
dGggPSBNb250aEZyb21UaW1lKHQpOwotICB2YXIgbGVhcCA9IEluTGVhcFllYXIodCk7Ci0KLSAg
aWYobW9udGggPT0gMCkgcmV0dXJuIGRheSsxOwotICBpZihtb250aCA9PSAxKSByZXR1cm4gZGF5
LTMwOwotICBpZihtb250aCA9PSAyKSByZXR1cm4gZGF5LTU4LWxlYXA7Ci0gIGlmKG1vbnRoID09
IDMpIHJldHVybiBkYXktODktbGVhcDsKLSAgaWYobW9udGggPT0gNCkgcmV0dXJuIGRheS0xMTkt
bGVhcDsKLSAgaWYobW9udGggPT0gNSkgcmV0dXJuIGRheS0xNTAtbGVhcDsKLSAgaWYobW9udGgg
PT0gNikgcmV0dXJuIGRheS0xODAtbGVhcDsKLSAgaWYobW9udGggPT0gNykgcmV0dXJuIGRheS0y
MTEtbGVhcDsKLSAgaWYobW9udGggPT0gOCkgcmV0dXJuIGRheS0yNDItbGVhcDsKLSAgaWYobW9u
dGggPT0gOSkgcmV0dXJuIGRheS0yNzItbGVhcDsKLSAgaWYobW9udGggPT0gMTApIHJldHVybiBk
YXktMzAzLWxlYXA7Ci0gIGlmKG1vbnRoID09IDExKSByZXR1cm4gZGF5LTMzMy1sZWFwOwotfQot
Ci0vLzE1LjkuMS42IFdlZWsgRGF5Ci1mdW5jdGlvbiBXZWVrRGF5KHQpIHsKLSAgdmFyIHdlZWtk
YXkgPSAoRGF5KHQpKzQpJTc7Ci0gIHJldHVybiAod2Vla2RheSA8IDAgPyA3K3dlZWtkYXkgOiB3
ZWVrZGF5KTsKLX0KLQotLy8xNS45LjEuOSBEYXlsaWdodCBTYXZpbmcgVGltZSBBZGp1c3RtZW50
Ci12YXIgTG9jYWxUWkEgPSAkTG9jYWxUWiptc1BlckhvdXI7Ci0KLWZ1bmN0aW9uIERheXNJbk1v
bnRoKG0sIGxlYXApIHsKLSAgbSA9IG0lMTI7Ci0gIAotICAvL0FwcmlsLCBKdW5lLCBTZXB0LCBO
b3YKLSAgaWYobSA9PSAzIHx8IG0gPT0gNSB8fCBtID09IDggfHwgbSA9PSAxMCApIHsKLSAgICBy
ZXR1cm4gMzA7Ci0gIH0KLQotICAvL0phbiwgTWFyY2gsIE1heSwgSnVseSwgQXVnLCBPY3QsIERl
YwotICBpZihtID09IDAgfHwgbSA9PSAyIHx8IG0gPT0gNCB8fCBtID09IDYgfHwgbSA9PSA3IHx8
IG0gPT0gOSB8fCBtID09IDExKXsKLSAgICByZXR1cm4gMzE7Ci0gIH0KLQotICAvL0ZlYgotICBy
ZXR1cm4gMjgrbGVhcDsKLX0KLQotZnVuY3Rpb24gR2V0U3VuZGF5SW5Nb250aCh0LCBtLCBjb3Vu
dCl7Ci0gIHZhciB5ZWFyID0gWWVhckZyb21UaW1lKHQpOwotICB2YXIgbGVhcCA9IEluTGVhcFll
YXIodCk7Ci0gIHZhciBkYXkgPSAwOwotICAKLSAgaWYobSA+PSAxKSBkYXkgKz0gRGF5c0luTW9u
dGgoMCwgbGVhcCk7Ci0gIGlmKG0gPj0gMikgZGF5ICs9IERheXNJbk1vbnRoKDEsIGxlYXApOwot
ICBpZihtID49IDMpIGRheSArPSBEYXlzSW5Nb250aCgyLCBsZWFwKTsKLSAgaWYobSA+PSA0KSBk
YXkgKz0gRGF5c0luTW9udGgoMywgbGVhcCk7Ci0gIGlmKG0gPj0gNSkgZGF5ICs9IERheXNJbk1v
bnRoKDQsIGxlYXApOwotICBpZihtID49IDYpIGRheSArPSBEYXlzSW5Nb250aCg1LCBsZWFwKTsK
LSAgaWYobSA+PSA3KSBkYXkgKz0gRGF5c0luTW9udGgoNiwgbGVhcCk7Ci0gIGlmKG0gPj0gOCkg
ZGF5ICs9IERheXNJbk1vbnRoKDcsIGxlYXApOwotICBpZihtID49IDkpIGRheSArPSBEYXlzSW5N
b250aCg4LCBsZWFwKTsKLSAgaWYobSA+PSAxMCkgZGF5ICs9IERheXNJbk1vbnRoKDksIGxlYXAp
OwotICBpZihtID49IDExKSBkYXkgKz0gRGF5c0luTW9udGgoMTAsIGxlYXApOwotICAKLSAgdmFy
IG1vbnRoX3N0YXJ0ID0gVGltZUZyb21ZZWFyKHllYXIpK2RheSptc1BlckRheTsKLSAgdmFyIHN1
bmRheSA9IDA7Ci0gIAotICBpZihjb3VudCA9PT0gImxhc3QiKXsKLSAgICBmb3IodmFyIGxhc3Rf
c3VuZGF5ID0gbW9udGhfc3RhcnQrRGF5c0luTW9udGgobSwgbGVhcCkqbXNQZXJEYXk7IAotICAg
ICAgV2Vla0RheShsYXN0X3N1bmRheSk+MDsKLSAgICAgIGxhc3Rfc3VuZGF5IC09IG1zUGVyRGF5
Ci0gICAgKXt9OwotICAgIHN1bmRheSA9IGxhc3Rfc3VuZGF5OwotICB9Ci0gIGVsc2UgewotICAg
IGZvcih2YXIgZmlyc3Rfc3VuZGF5ID0gbW9udGhfc3RhcnQ7IAotICAgICAgV2Vla0RheShmaXJz
dF9zdW5kYXkpPjA7Ci0gICAgICBmaXJzdF9zdW5kYXkgKz0gbXNQZXJEYXkKLSAgICApe307Ci0g
ICAgc3VuZGF5ID0gZmlyc3Rfc3VuZGF5KzcqbXNQZXJEYXkqKGNvdW50LTEpOwotICB9Ci0gIAot
ICByZXR1cm4gc3VuZGF5OwotfQotCi1mdW5jdGlvbiBEYXlsaWdodFNhdmluZ1RBKHQpIHsKLSAg
dCA9IHQtTG9jYWxUWkE7Ci0KLSAgdmFyIERTVF9zdGFydCA9IEdldFN1bmRheUluTW9udGgodCwg
JERTVF9zdGFydF9tb250aCwgJERTVF9zdGFydF9zdW5kYXkpCi0gICAgICAgICAgICAgICAgICAr
JERTVF9zdGFydF9ob3VyKm1zUGVySG91cgotICAgICAgICAgICAgICAgICAgKyREU1Rfc3RhcnRf
bWludXRlcyptc1Blck1pbnV0ZTsKLSAgICAgICAgICAgICAgICAgIAotICB2YXIgayA9IG5ldyBE
YXRlKERTVF9zdGFydCk7Ci0gIAotICB2YXIgRFNUX2VuZCAgID0gR2V0U3VuZGF5SW5Nb250aCh0
LCAkRFNUX2VuZF9tb250aCwgJERTVF9lbmRfc3VuZGF5KQotICAgICAgICAgICAgICAgICAgKyRE
U1RfZW5kX2hvdXIqbXNQZXJIb3VyCi0gICAgICAgICAgICAgICAgICArJERTVF9lbmRfbWludXRl
cyptc1Blck1pbnV0ZTsKLQotICBpZiAoIHQgPj0gRFNUX3N0YXJ0ICYmIHQgPCBEU1RfZW5kICkg
ewotICAgIHJldHVybiBtc1BlckhvdXI7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0K
LX0KLQotLy8xNS45LjEuOSBMb2NhbCBUaW1lCi1mdW5jdGlvbiBMb2NhbFRpbWUodCl7Ci0gIHJl
dHVybiB0K0xvY2FsVFpBK0RheWxpZ2h0U2F2aW5nVEEodCk7Ci19Ci0KLWZ1bmN0aW9uIFVUQyh0
KSB7Ci0gIHJldHVybiB0LUxvY2FsVFpBLURheWxpZ2h0U2F2aW5nVEEodC1Mb2NhbFRaQSk7Ci19
Ci0KLS8vMTUuOS4xLjEwIEhvdXJzLCBNaW51dGVzLCBTZWNvbmQsIGFuZCBNaWxsaXNlY29uZHMK
LWZ1bmN0aW9uIEhvdXJGcm9tVGltZSh0KXsKLSAgcmV0dXJuIE1hdGguZmxvb3IodC9tc1Blckhv
dXIpJUhvdXJzUGVyRGF5OwotfQotCi1mdW5jdGlvbiBNaW5Gcm9tVGltZSh0KXsKLSAgcmV0dXJu
IE1hdGguZmxvb3IodC9tc1Blck1pbnV0ZSklTWludXRlc1BlckhvdXI7Ci19Ci0KLWZ1bmN0aW9u
IFNlY0Zyb21UaW1lKHQpewotICByZXR1cm4gTWF0aC5mbG9vcih0L21zUGVyU2Vjb25kKSVTZWNv
bmRzUGVyTWludXRlOwotfQotCi1mdW5jdGlvbiBtc0Zyb21UaW1lKHQpewotICByZXR1cm4gdCVt
c1BlclNlY29uZDsKLX0KLQotLy8xNS45LjEuMTEgTWFrZVRpbWUgKGhvdXIsIG1pbiwgc2VjLCBt
cykKLWZ1bmN0aW9uIE1ha2VUaW1lKGhvdXIsIG1pbiwgc2VjLCBtcyl7Ci0gIGlmICggIWlzRmlu
aXRlKGhvdXIpIHx8ICFpc0Zpbml0ZShtaW4pIHx8ICFpc0Zpbml0ZShzZWMpIHx8ICFpc0Zpbml0
ZShtcykpIHsKLSAgICByZXR1cm4gTnVtYmVyLk5hTjsKLSAgfQotCi0gIGhvdXIgPSBUb0ludGVn
ZXIoaG91cik7Ci0gIG1pbiAgPSBUb0ludGVnZXIobWluKTsKLSAgc2VjICA9IFRvSW50ZWdlcihz
ZWMpOwotICBtcyAgID0gVG9JbnRlZ2VyKG1zKTsKLQotICByZXR1cm4gKChob3VyKm1zUGVySG91
cikgKyAobWluKm1zUGVyTWludXRlKSArIChzZWMqbXNQZXJTZWNvbmQpICsgbXMpOwotfQotCi0v
LzE1LjkuMS4xMiBNYWtlRGF5ICh5ZWFyLCBtb250aCwgZGF0ZSkKLWZ1bmN0aW9uIE1ha2VEYXko
eWVhciwgbW9udGgsIGRhdGUpIHsKLSAgaWYgKCAhaXNGaW5pdGUoeWVhcikgfHwgIWlzRmluaXRl
KG1vbnRoKSB8fCAhaXNGaW5pdGUoZGF0ZSkpIHsKLSAgICByZXR1cm4gTnVtYmVyLk5hTjsKLSAg
fQotCi0gIHllYXIgPSBUb0ludGVnZXIoeWVhcik7Ci0gIG1vbnRoID0gVG9JbnRlZ2VyKG1vbnRo
KTsKLSAgZGF0ZSA9IFRvSW50ZWdlcihkYXRlICk7Ci0KLSAgdmFyIHJlc3VsdDUgPSB5ZWFyICsg
TWF0aC5mbG9vcihtb250aC8xMik7Ci0gIHZhciByZXN1bHQ2ID0gbW9udGglMTI7Ci0KLSAgdmFy
IHNpZ24gPSAoIHllYXIgPCAxOTcwICkgPyAtMSA6IDE7Ci0gIHZhciB0ID0gICAgKCB5ZWFyIDwg
MTk3MCApID8gMSA6ICAwOwotICB2YXIgeSA9ICAgICggeWVhciA8IDE5NzAgKSA/IDE5NjkgOiAx
OTcwOwotCi0gIGlmKCBzaWduID09IC0xICl7Ci0gICAgZm9yICggeSA9IDE5Njk7IHkgPj0geWVh
cjsgeSArPSBzaWduICkgewotICAgICAgdCArPSBzaWduICogRGF5c0luWWVhcih5KSptc1BlckRh
eTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgZm9yICggeSA9IDE5NzAgOyB5IDwgeWVhcjsgeSAr
PSBzaWduICkgewotICAgICAgdCArPSBzaWduICogRGF5c0luWWVhcih5KSptc1BlckRheTsKLSAg
ICB9Ci0gIH0KLQotICB2YXIgbGVhcCA9IDA7Ci0gIGZvciAoIHZhciBtID0gMDsgbSA8IG1vbnRo
OyBtKysgKSB7Ci0gICAgLy9pZiB5ZWFyIGlzIGNoYW5nZWQsIHRoYW4gd2UgbmVlZCB0byByZWNh
bGN1bGF0ZSBsZWVwCi0gICAgbGVhcCA9IEluTGVhcFllYXIodCk7Ci0gICAgdCArPSBEYXlzSW5N
b250aChtLCBsZWFwKSptc1BlckRheTsKLSAgfQotCi0gIGlmICggWWVhckZyb21UaW1lKHQpICE9
IHJlc3VsdDUgKSB7Ci0gICAgcmV0dXJuIE51bWJlci5OYU47Ci0gIH0KLSAgaWYgKCBNb250aEZy
b21UaW1lKHQpICE9IHJlc3VsdDYgKSB7Ci0gICAgcmV0dXJuIE51bWJlci5OYU47Ci0gIH0KLSAg
aWYgKCBEYXRlRnJvbVRpbWUodCkgIT0gMSApIHsKLSAgICByZXR1cm4gTnVtYmVyLk5hTjsKLSAg
fQotCi0gIHJldHVybiBEYXkodCkrZGF0ZS0xOwotfQotCi0vLzE1LjkuMS4xMyBNYWtlRGF0ZSAo
ZGF5LCB0aW1lKQotZnVuY3Rpb24gTWFrZURhdGUoIGRheSwgdGltZSApIHsKLSAgaWYoIWlzRmlu
aXRlKGRheSkgfHwgIWlzRmluaXRlKHRpbWUpKSB7Ci0gICAgcmV0dXJuIE51bWJlci5OYU47Ci0g
IH0KLSAgCi0gIHJldHVybiBkYXkqbXNQZXJEYXkrdGltZTsKLX0KLQotLy8xNS45LjEuMTQgVGlt
ZUNsaXAgKHRpbWUpCi1mdW5jdGlvbiBUaW1lQ2xpcCh0aW1lKSB7Ci0gIGlmKCFpc0Zpbml0ZSh0
aW1lKSB8fCBNYXRoLmFicyh0aW1lKSA+IDguNjRlMTUpewotICAgIHJldHVybiBOdW1iZXIuTmFO
OwotICB9Ci0KLSAgcmV0dXJuIFRvSW50ZWdlcih0aW1lKTsKLX0KLQotLy9UZXN0IEZ1bmN0aW9u
cwotZnVuY3Rpb24gQ29uc3RydWN0RGF0ZSh5ZWFyLCBtb250aCwgZGF0ZSwgaG91cnMsIG1pbnV0
ZXMsIHNlY29uZHMsIG1zKXsKLSAgLyoKLSAgICogMS4gQ2FsbCBUb051bWJlcih5ZWFyKQotICAg
KiAyLiBDYWxsIFRvTnVtYmVyKG1vbnRoKQotICAgKiAzLiBJZiBkYXRlIGlzIHN1cHBsaWVkIHVz
ZSBUb051bWJlcihkYXRlKTsgZWxzZSB1c2UgMQotICAgKiA0LiBJZiBob3VycyBpcyBzdXBwbGll
ZCB1c2UgVG9OdW1iZXIoaG91cnMpOyBlbHNlIHVzZSAwCi0gICAqIDUuIElmIG1pbnV0ZXMgaXMg
c3VwcGxpZWQgdXNlIFRvTnVtYmVyKG1pbnV0ZXMpOyBlbHNlIHVzZSAwCi0gICAqIDYuIElmIHNl
Y29uZHMgaXMgc3VwcGxpZWQgdXNlIFRvTnVtYmVyKHNlY29uZHMpOyBlbHNlIHVzZSAwCi0gICAq
IDcuIElmIG1zIGlzIHN1cHBsaWVkIHVzZSBUb051bWJlcihtcyk7IGVsc2UgdXNlIDAKLSAgICog
OC4gSWYgUmVzdWx0KDEpIGlzIG5vdCBOYU4gYW5kIDAgPD0gVG9JbnRlZ2VyKFJlc3VsdCgxKSkg
PD0gOTksIFJlc3VsdCg4KSBpcwotICAgKiAxOTAwK1RvSW50ZWdlcihSZXN1bHQoMSkpOyBvdGhl
cndpc2UsIFJlc3VsdCg4KSBpcyBSZXN1bHQoMSkKLSAgICogOS4gQ29tcHV0ZSBNYWtlRGF5KFJl
c3VsdCg4KSwgUmVzdWx0KDIpLCBSZXN1bHQoMykpCi0gICAqIDEwLiBDb21wdXRlIE1ha2VUaW1l
KFJlc3VsdCg0KSwgUmVzdWx0KDUpLCBSZXN1bHQoNiksIFJlc3VsdCg3KSkKLSAgICogMTEuIENv
bXB1dGUgTWFrZURhdGUoUmVzdWx0KDkpLCBSZXN1bHQoMTApKQotICAgKiAxMi4gU2V0IHRoZSBb
W1ZhbHVlXV0gcHJvcGVydHkgb2YgdGhlIG5ld2x5IGNvbnN0cnVjdGVkIG9iamVjdCB0byBUaW1l
Q2xpcChVVEMoUmVzdWx0KDExKSkpCi0gICAqLwotICB2YXIgcjEgPSBOdW1iZXIoeWVhcik7Ci0g
IHZhciByMiA9IE51bWJlcihtb250aCk7Ci0gIHZhciByMyA9ICgoZGF0ZSAmJiBhcmd1bWVudHMu
bGVuZ3RoID4gMikgPyBOdW1iZXIoZGF0ZSkgOiAxKTsKLSAgdmFyIHI0ID0gKChob3VycyAmJiBh
cmd1bWVudHMubGVuZ3RoID4gMykgPyBOdW1iZXIoaG91cnMpIDogMCk7ICAgCi0gIHZhciByNSA9
ICgobWludXRlcyAmJiBhcmd1bWVudHMubGVuZ3RoID4gNCkgPyBOdW1iZXIobWludXRlcykgOiAw
KTsgICAKLSAgdmFyIHI2ID0gKChzZWNvbmRzICYmIGFyZ3VtZW50cy5sZW5ndGggPiA1KSA/IE51
bWJlcihzZWNvbmRzKSA6IDApOyAgIAotICB2YXIgcjcgPSAoKG1zICYmIGFyZ3VtZW50cy5sZW5n
dGggPiA2KSA/IE51bWJlcihtcykgOiAwKTsKLSAgCi0gIHZhciByOCA9IHIxOwotICAKLSAgaWYo
IWlzTmFOKHIxKSAmJiAoMCA8PSBUb0ludGVnZXIocjEpKSAmJiAoVG9JbnRlZ2VyKHIxKSA8PSA5
OSkpCi0gICAgcjggPSAxOTAwK3IxOwotICAKLSAgdmFyIHI5ID0gTWFrZURheShyOCwgcjIsIHIz
KTsKLSAgdmFyIHIxMCA9IE1ha2VUaW1lKHI0LCByNSwgcjYsIHI3KTsKLSAgdmFyIHIxMSA9IE1h
a2VEYXRlKHI5LCByMTApOwotICAKLSAgcmV0dXJuIFRpbWVDbGlwKFVUQyhyMTEpKTsKLX0KLQot
Ci0KLWlmIChDb25zdHJ1Y3REYXRlKDE4OTksIDExLCAzMSwgMjMpICE9PSBuZXcgRGF0ZSgxODk5
LCAxMSwgMzEsIDIzKS52YWx1ZU9mKCkpIHsKLSAgdGVzdEZhaWxlZCgiIzE6IEluY29ycmVjdCB2
YWx1ZSBvZiBEYXRlIik7Ci19Ci0KLWlmIChDb25zdHJ1Y3REYXRlKDE4OTksIDEyLCAxLCAwKSAh
PT0gbmV3IERhdGUoMTg5OSwgMTIsIDEsIDApLnZhbHVlT2YoKSkgewotICB0ZXN0RmFpbGVkKCIj
MjogSW5jb3JyZWN0IHZhbHVlIG9mIERhdGUiKTsKLX0KLQotaWYgKENvbnN0cnVjdERhdGUoMTkw
MCwgMCwgMSwgMCkgIT09IG5ldyBEYXRlKDE5MDAsIDAsIDEsIDApLnZhbHVlT2YoKSkgewotICB0
ZXN0RmFpbGVkKCIjMzogSW5jb3JyZWN0IHZhbHVlIG9mIERhdGUiKTsKLX0KLQotaWYgKENvbnN0
cnVjdERhdGUoMTk2OSwgMTEsIDMxLCAyMykgIT09IG5ldyBEYXRlKDE5NjksIDExLCAzMSwgMjMp
LnZhbHVlT2YoKSkgewotICB0ZXN0RmFpbGVkKCIjNDogSW5jb3JyZWN0IHZhbHVlIG9mIERhdGUi
KTsKLX0KLQotaWYgKENvbnN0cnVjdERhdGUoMTk2OSwgMTIsIDEsIDApICE9PSBuZXcgRGF0ZSgx
OTY5LCAxMiwgMSwgMCkudmFsdWVPZigpKSB7Ci0gIHRlc3RGYWlsZWQoIiM1OiBJbmNvcnJlY3Qg
dmFsdWUgb2YgRGF0ZSIpOwotfQotCi1pZiAoQ29uc3RydWN0RGF0ZSgxOTcwLCAwLCAxLCAwKSAh
PT0gbmV3IERhdGUoMTk3MCwgMCwgMSwgMCkudmFsdWVPZigpKSB7Ci0gIHRlc3RGYWlsZWQoIiM2
OiBJbmNvcnJlY3QgdmFsdWUgb2YgRGF0ZSIpOwotfQotCi1pZiAoQ29uc3RydWN0RGF0ZSgxOTk5
LCAxMSwgMzEsIDIzKSAhPT0gbmV3IERhdGUoMTk5OSwgMTEsIDMxLCAyMykudmFsdWVPZigpKSB7
Ci0gIHRlc3RGYWlsZWQoIiM3OiBJbmNvcnJlY3QgdmFsdWUgb2YgRGF0ZSIpOwotfQotCi1pZiAo
Q29uc3RydWN0RGF0ZSgxOTk5LCAxMiwgMSwgMCkgIT09IG5ldyBEYXRlKDE5OTksIDEyLCAxLCAw
KS52YWx1ZU9mKCkpIHsKLSAgdGVzdEZhaWxlZCgiIzg6IEluY29ycmVjdCB2YWx1ZSBvZiBEYXRl
Iik7Ci19Ci0KLWlmIChDb25zdHJ1Y3REYXRlKDIwMDAsIDAsIDEsIDApICE9PSBuZXcgRGF0ZSgy
MDAwLCAwLCAxLCAwKS52YWx1ZU9mKCkpIHsKLSAgdGVzdEZhaWxlZCgiIzk6IEluY29ycmVjdCB2
YWx1ZSBvZiBEYXRlIik7Ci19Ci0KLWlmIChDb25zdHJ1Y3REYXRlKDIwOTksIDExLCAzMSwgMjMp
ICE9PSBuZXcgRGF0ZSgyMDk5LCAxMSwgMzEsIDIzKS52YWx1ZU9mKCkpIHsKLSAgdGVzdEZhaWxl
ZCgiIzEwOiBJbmNvcnJlY3QgdmFsdWUgb2YgRGF0ZSIpOwotfQotCi1pZiAoQ29uc3RydWN0RGF0
ZSgyMDk5LCAxMiwgMSwgMCkgIT09IG5ldyBEYXRlKDIwOTksIDEyLCAxLCAwKS52YWx1ZU9mKCkp
IHsKLSAgdGVzdEZhaWxlZCgiIzExOiBJbmNvcnJlY3QgdmFsdWUgb2YgRGF0ZSIpOwotfQotCi1p
ZiAoQ29uc3RydWN0RGF0ZSgyMTAwLCAwLCAxLCAwKSAhPT0gbmV3IERhdGUoMjEwMCwgMCwgMSwg
MCkudmFsdWVPZigpKSB7Ci0gIHRlc3RGYWlsZWQoIiMxMjogSW5jb3JyZWN0IHZhbHVlIG9mIERh
dGUiKTsKLX0KLQotfSBjYXRjaCAoZXgpIHsKLSAgICBzcHV0bmlrRXhjZXB0aW9uID0gZXg7Ci19
Ci0KLXZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwotPC9zY3JpcHQ+Ci0KLTxzY3JpcHQ+
Ci1pZiAoIXN1Y2Nlc3NmdWxseVBhcnNlZCkKLSAgICBwcmludFRlc3RGYWlsZWQoJ3N1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyBub3Qgc2V0Jyk7Ci1lbHNlIGlmIChzcHV0bmlrRXhjZXB0aW9uKQotICAg
IHByaW50VGVzdEZhaWxlZChzcHV0bmlrRXhjZXB0aW9uKTsKLWVsc2UKLSAgICBwcmludFRlc3RQ
YXNzZWQoIiIpOwotdGVzdFByaW50KCc8YnIgLz48c3BhbiBjbGFzcz0icGFzcyI+VEVTVCBDT01Q
TEVURTwvc3Bhbj4nKTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvc3B1dG5pay9Db25mb3JtYW5jZS8xNV9OYXRpdmVfT2JqZWN0cy8xNS45X0Rh
dGUvMTUuOS4zL1MxNS45LjMuMV9BNV9UNC5odG1sIGIvTGF5b3V0VGVzdHMvc3B1dG5pay9Db25m
b3JtYW5jZS8xNV9OYXRpdmVfT2JqZWN0cy8xNS45X0RhdGUvMTUuOS4zL1MxNS45LjMuMV9BNV9U
NC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmZiYWJiZjVlNWQ3MjMxNTJhMjcxOGMwM2U4NDk4ZDgxODU3ZWI2
ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zcHV0bmlrL0NvbmZvcm1hbmNlLzE1
X05hdGl2ZV9PYmplY3RzLzE1LjlfRGF0ZS8xNS45LjMvUzE1LjkuMy4xX0E1X1Q0Lmh0bWwKQEAg
LTAsMCArMSw1MjIgQEAKKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBjaGFyc2V0PSd1dGYtOCc+Cis8
c3R5bGU+CisucGFzcyB7CisgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgY29sb3I6IGdyZWVu
OworfQorLmZhaWwgeworICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgIGNvbG9yOiByZWQ7Cit9
Cis8L3N0eWxlPgorCis8c2NyaXB0PgoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RS
dW5uZXIuZHVtcEFzVGV4dCgpOworCitmdW5jdGlvbiBTcHV0bmlrRXJyb3IobWVzc2FnZSkKK3sK
KyAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOworfQorCitTcHV0bmlrRXJyb3IucHJvdG90eXBl
LnRvU3RyaW5nID0gZnVuY3Rpb24gKCkKK3sKKyAgICByZXR1cm4gJ1NwdXRuaWtFcnJvcjogJyAr
IHRoaXMubWVzc2FnZTsKK307CisKK3ZhciBzcHV0bmlrRXhjZXB0aW9uOworCitmdW5jdGlvbiB0
ZXN0UHJpbnQobXNnKQoreworICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
c3BhbiIpOworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIikuYXBwZW5kQ2hp
bGQoc3Bhbik7IC8vIGluc2VydCBpdCBmaXJzdCBzbyBYSFRNTCBrbm93cyB0aGUgbmFtZXNwYWNl
IAorICAgIHNwYW4uaW5uZXJIVE1MID0gbXNnICsgJzxiciAvPic7Cit9CisKK2Z1bmN0aW9uIGVz
Y2FwZUhUTUwodGV4dCkKK3sKKyAgICByZXR1cm4gdGV4dC50b1N0cmluZygpLnJlcGxhY2UoLyYv
ZywgIiZhbXA7IikucmVwbGFjZSgvPC9nLCAiJmx0OyIpOworfQorCitmdW5jdGlvbiBwcmludFRl
c3RQYXNzZWQobXNnKQoreworICAgIHRlc3RQcmludCgnPHNwYW4+PHNwYW4gY2xhc3M9InBhc3Mi
PlBBU1M8L3NwYW4+ICcgKyBlc2NhcGVIVE1MKG1zZykgKyAnPC9zcGFuPicpOworfQorCitmdW5j
dGlvbiBwcmludFRlc3RGYWlsZWQobXNnKQoreworICAgIHRlc3RQcmludCgnPHNwYW4+PHNwYW4g
Y2xhc3M9ImZhaWwiPkZBSUw8L3NwYW4+ICcgKyBlc2NhcGVIVE1MKG1zZykgKyAnPC9zcGFuPicp
OworfQorCitmdW5jdGlvbiB0ZXN0RmFpbGVkKG1zZykKK3sKKyAgICB0aHJvdyBuZXcgU3B1dG5p
a0Vycm9yKG1zZyk7Cit9CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSBmYWxzZTsKKzwvc2Ny
aXB0PgorCis8L2hlYWQ+Cis8Ym9keT4KKzxwPlMxNS45LjMuMV9BNV9UNDwvcD4KKzxkaXYgaWQ9
J2NvbnNvbGUnPjwvZGl2PgorPHNjcmlwdD4KK3RyeSB7CisKKy8qKgorICogQG5hbWU6IFMxNS45
LjMuMV9BNV9UNDsKKyAqIEBzZWN0aW9uOiAxNS45LjMuMTsKKyAqIEBhc3NlcnRpb246IFRoZSBb
W1ZhbHVlXV0gcHJvcGVydHkgb2YgdGhlIG5ld2x5IGNvbnN0cnVjdGVkIG9iamVjdCAKKyAqIGlz
IHNldCBieSBmb2xsb3dpbmcgc3RlcHM6CisgKiA4LiBJZiBSZXN1bHQoMSkgaXMgbm90IE5hTiBh
bmQgMCA8PSBUb0ludGVnZXIoUmVzdWx0KDEpKSA8PSA5OSwgUmVzdWx0KDgpIGlzCisgKiAxOTAw
K1RvSW50ZWdlcihSZXN1bHQoMSkpOyBvdGhlcndpc2UsIFJlc3VsdCg4KSBpcyBSZXN1bHQoMSkK
KyAqIDkuIENvbXB1dGUgTWFrZURheShSZXN1bHQoOCksIFJlc3VsdCgyKSwgUmVzdWx0KDMpKQor
ICogMTAuIENvbXB1dGUgTWFrZVRpbWUoUmVzdWx0KDQpLCBSZXN1bHQoNSksIFJlc3VsdCg2KSwg
UmVzdWx0KDcpKQorICogMTEuIENvbXB1dGUgTWFrZURhdGUoUmVzdWx0KDkpLCBSZXN1bHQoMTAp
KQorICogMTIuIFNldCB0aGUgW1tWYWx1ZV1dIHByb3BlcnR5IG9mIHRoZSBuZXdseSBjb25zdHJ1
Y3RlZCBvYmplY3QgdG8gCisgKiBUaW1lQ2xpcChVVEMoUmVzdWx0KDExKSkpOworICogQGRlc2Ny
aXB0aW9uOiA1IGFyZ3VtZW50cywgKHllYXIsIG1vbnRoLCBkYXRlLCBob3VycywgbWludXRlcyk7
CisgKi8KKwordmFyICREU1RfZW5kX2hvdXIgPSAyOwordmFyICREU1RfZW5kX21pbnV0ZXMgPSAw
OwordmFyICREU1RfZW5kX21vbnRoID0gMTA7Cit2YXIgJERTVF9lbmRfc3VuZGF5ID0gJ2ZpcnN0
JzsKK3ZhciAkRFNUX3N0YXJ0X2hvdXIgPSAyOwordmFyICREU1Rfc3RhcnRfbWludXRlcyA9IDA7
Cit2YXIgJERTVF9zdGFydF9tb250aCA9IDI7Cit2YXIgJERTVF9zdGFydF9zdW5kYXkgPSAnZmly
c3QnOwordmFyICRMb2NhbFRaID0gLTg7CitmdW5jdGlvbiBUb0ludGVnZXIocCkgeworICB4ID0g
TnVtYmVyKHApOworCisgIGlmKGlzTmFOKHgpKXsKKyAgICByZXR1cm4gKzA7CisgIH0KKyAgCisg
IGlmKCh4ID09PSArMCkgCisgIHx8ICh4ID09PSAtMCkgCisgIHx8ICh4ID09PSBOdW1iZXIuUE9T
SVRJVkVfSU5GSU5JVFkpIAorICB8fCAoeCA9PT0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKSl7
CisgICAgIHJldHVybiB4OworICB9CisKKyAgdmFyIHNpZ24gPSAoIHggPCAwICkgPyAtMSA6IDE7
CisKKyAgcmV0dXJuIChzaWduKk1hdGguZmxvb3IoTWF0aC5hYnMoeCkpKTsKK30KKworCit2YXIg
SG91cnNQZXJEYXkgPSAyNDsKK3ZhciBNaW51dGVzUGVySG91ciA9IDYwOwordmFyIFNlY29uZHNQ
ZXJNaW51dGUgPSA2MDsKKwordmFyIG1zUGVyRGF5ID0gODY0MDAwMDA7Cit2YXIgbXNQZXJTZWNv
bmQgPSAxMDAwOwordmFyIG1zUGVyTWludXRlID0gNjAwMDA7Cit2YXIgbXNQZXJIb3VyID0gMzYw
MDAwMDsKKwordmFyIGRhdGVfMTg5OV9lbmQgPSAtMjIwODk4ODgwMDAwMTsKK3ZhciBkYXRlXzE5
MDBfc3RhcnQgPSAtMjIwODk4ODgwMDAwMDsKK3ZhciBkYXRlXzE5NjlfZW5kID0gLTE7Cit2YXIg
ZGF0ZV8xOTcwX3N0YXJ0ID0gMDsKK3ZhciBkYXRlXzE5OTlfZW5kID0gOTQ2Njg0Nzk5OTk5Owor
dmFyIGRhdGVfMjAwMF9zdGFydCA9IDk0NjY4NDgwMDAwMDsKK3ZhciBkYXRlXzIwOTlfZW5kID0g
NDEwMjQ0NDc5OTk5OTsKK3ZhciBkYXRlXzIxMDBfc3RhcnQgPSA0MTAyNDQ0ODAwMDAwOworCisK
Ky8vMTUuOS4xLjIgRGF5IE51bWJlciBhbmQgVGltZSB3aXRoaW4gRGF5CitmdW5jdGlvbiBEYXko
dCkgeworICByZXR1cm4gTWF0aC5mbG9vcih0L21zUGVyRGF5KTsKK30KKworZnVuY3Rpb24gVGlt
ZVdpdGhpbkRheSh0KSB7CisgIHJldHVybiB0JW1zUGVyRGF5OworfQorCisvLzE1LjkuMS4zIFll
YXIgTnVtYmVyCitmdW5jdGlvbiBEYXlzSW5ZZWFyKHkpeworICBpZih5JTQgIT0gMCkgcmV0dXJu
IDM2NTsKKyAgaWYoeSU0ID09IDAgJiYgeSUxMDAgIT0gMCkgcmV0dXJuIDM2NjsKKyAgaWYoeSUx
MDAgPT0gMCAmJiB5JTQwMCAhPSAwKSByZXR1cm4gMzY1OworICBpZih5JTQwMCA9PSAwKSByZXR1
cm4gMzY2OworfQorCitmdW5jdGlvbiBEYXlGcm9tWWVhcih5KSB7CisgIHJldHVybiAoMzY1Kih5
LTE5NzApCisgICAgICAgICAgKyBNYXRoLmZsb29yKCh5LTE5NjkpLzQpCisgICAgICAgICAgLSBN
YXRoLmZsb29yKCh5LTE5MDEpLzEwMCkKKyAgICAgICAgICArIE1hdGguZmxvb3IoKHktMTYwMSkv
NDAwKSk7Cit9CisKK2Z1bmN0aW9uIFRpbWVGcm9tWWVhcih5KXsKKyAgcmV0dXJuIG1zUGVyRGF5
KkRheUZyb21ZZWFyKHkpOworfQorCitmdW5jdGlvbiBZZWFyRnJvbVRpbWUodCkgeworICB0ID0g
TnVtYmVyKHQpOworICB2YXIgc2lnbiA9ICggdCA8IDAgKSA/IC0xIDogMTsKKyAgdmFyIHllYXIg
PSAoIHNpZ24gPCAwICkgPyAxOTY5IDogMTk3MDsKKyAgCisgIGZvcih2YXIgdGltZSA9IDA7O3ll
YXIgKz0gc2lnbil7CisgICAgdGltZSA9IFRpbWVGcm9tWWVhcih5ZWFyKTsKKyAgICAKKyAgICBp
ZihzaWduID4gMCAmJiB0aW1lID4gdCl7CisgICAgICB5ZWFyIC09IHNpZ247CisgICAgICBicmVh
azsKKyAgICB9CisgICAgZWxzZSBpZihzaWduIDwgMCAmJiB0aW1lIDw9IHQpeworICAgICAgYnJl
YWs7CisgICAgfQorICB9OworICByZXR1cm4geWVhcjsKK30KKyAgCitmdW5jdGlvbiBJbkxlYXBZ
ZWFyKHQpeworICBpZihEYXlzSW5ZZWFyKFllYXJGcm9tVGltZSh0KSkgPT0gMzY1KQorICAgIHJl
dHVybiAwOworICAKKyAgaWYoRGF5c0luWWVhcihZZWFyRnJvbVRpbWUodCkpID09IDM2NikKKyAg
ICByZXR1cm4gMTsKK30KKworZnVuY3Rpb24gRGF5V2l0aGluWWVhcih0KSB7CisgIHJldHVybiBE
YXkodCktRGF5RnJvbVllYXIoWWVhckZyb21UaW1lKHQpKTsKK30KKworLy8xNS45LjEuNCBNb250
aCBOdW1iZXIKK2Z1bmN0aW9uIE1vbnRoRnJvbVRpbWUodCl7CisgIHZhciBkYXkgPSBEYXlXaXRo
aW5ZZWFyKHQpOworICB2YXIgbGVhcCA9IEluTGVhcFllYXIodCk7CisKKyAgaWYoKDAgPD0gZGF5
KSAmJiAoZGF5IDwgMzEpKSByZXR1cm4gMDsKKyAgaWYoKDMxIDw9IGRheSkgJiYgKGRheSA8ICg1
OStsZWFwKSkpIHJldHVybiAxOworICBpZigoKDU5K2xlYXApIDw9IGRheSkgJiYgKGRheSA8ICg5
MCtsZWFwKSkpIHJldHVybiAyOworICBpZigoKDkwK2xlYXApIDw9IGRheSkgJiYgKGRheSA8ICgx
MjArbGVhcCkpKSByZXR1cm4gMzsKKyAgaWYoKCgxMjArbGVhcCkgPD0gZGF5KSAmJiAoZGF5IDwg
KDE1MStsZWFwKSkpIHJldHVybiA0OworICBpZigoKDE1MStsZWFwKSA8PSBkYXkpICYmIChkYXkg
PCAoMTgxK2xlYXApKSkgcmV0dXJuIDU7CisgIGlmKCgoMTgxK2xlYXApIDw9IGRheSkgJiYgKGRh
eSA8ICgyMTIrbGVhcCkpKSByZXR1cm4gNjsKKyAgaWYoKCgyMTIrbGVhcCkgPD0gZGF5KSAmJiAo
ZGF5IDwgKDI0MytsZWFwKSkpIHJldHVybiA3OworICBpZigoKDI0MytsZWFwKSA8PSBkYXkpICYm
IChkYXkgPCAoMjczK2xlYXApKSkgcmV0dXJuIDg7CisgIGlmKCgoMjczK2xlYXApIDw9IGRheSkg
JiYgKGRheSA8ICgzMDQrbGVhcCkpKSByZXR1cm4gOTsKKyAgaWYoKCgzMDQrbGVhcCkgPD0gZGF5
KSAmJiAoZGF5IDwgKDMzNCtsZWFwKSkpIHJldHVybiAxMDsKKyAgaWYoKCgzMzQrbGVhcCkgPD0g
ZGF5KSAmJiAoZGF5IDwgKDM2NStsZWFwKSkpIHJldHVybiAxMTsKK30KKworLy8xNS45LjEuNSBE
YXRlIE51bWJlcgorZnVuY3Rpb24gRGF0ZUZyb21UaW1lKHQpIHsKKyAgdmFyIGRheSA9IERheVdp
dGhpblllYXIodCk7CisgIHZhciBtb250aCA9IE1vbnRoRnJvbVRpbWUodCk7CisgIHZhciBsZWFw
ID0gSW5MZWFwWWVhcih0KTsKKworICBpZihtb250aCA9PSAwKSByZXR1cm4gZGF5KzE7CisgIGlm
KG1vbnRoID09IDEpIHJldHVybiBkYXktMzA7CisgIGlmKG1vbnRoID09IDIpIHJldHVybiBkYXkt
NTgtbGVhcDsKKyAgaWYobW9udGggPT0gMykgcmV0dXJuIGRheS04OS1sZWFwOworICBpZihtb250
aCA9PSA0KSByZXR1cm4gZGF5LTExOS1sZWFwOworICBpZihtb250aCA9PSA1KSByZXR1cm4gZGF5
LTE1MC1sZWFwOworICBpZihtb250aCA9PSA2KSByZXR1cm4gZGF5LTE4MC1sZWFwOworICBpZiht
b250aCA9PSA3KSByZXR1cm4gZGF5LTIxMS1sZWFwOworICBpZihtb250aCA9PSA4KSByZXR1cm4g
ZGF5LTI0Mi1sZWFwOworICBpZihtb250aCA9PSA5KSByZXR1cm4gZGF5LTI3Mi1sZWFwOworICBp
Zihtb250aCA9PSAxMCkgcmV0dXJuIGRheS0zMDMtbGVhcDsKKyAgaWYobW9udGggPT0gMTEpIHJl
dHVybiBkYXktMzMzLWxlYXA7Cit9CisKKy8vMTUuOS4xLjYgV2VlayBEYXkKK2Z1bmN0aW9uIFdl
ZWtEYXkodCkgeworICB2YXIgd2Vla2RheSA9IChEYXkodCkrNCklNzsKKyAgcmV0dXJuICh3ZWVr
ZGF5IDwgMCA/IDcrd2Vla2RheSA6IHdlZWtkYXkpOworfQorCisvLzE1LjkuMS45IERheWxpZ2h0
IFNhdmluZyBUaW1lIEFkanVzdG1lbnQKK3ZhciBMb2NhbFRaQSA9ICRMb2NhbFRaKm1zUGVySG91
cjsKKworZnVuY3Rpb24gRGF5c0luTW9udGgobSwgbGVhcCkgeworICBtID0gbSUxMjsKKyAgCisg
IC8vQXByaWwsIEp1bmUsIFNlcHQsIE5vdgorICBpZihtID09IDMgfHwgbSA9PSA1IHx8IG0gPT0g
OCB8fCBtID09IDEwICkgeworICAgIHJldHVybiAzMDsKKyAgfQorCisgIC8vSmFuLCBNYXJjaCwg
TWF5LCBKdWx5LCBBdWcsIE9jdCwgRGVjCisgIGlmKG0gPT0gMCB8fCBtID09IDIgfHwgbSA9PSA0
IHx8IG0gPT0gNiB8fCBtID09IDcgfHwgbSA9PSA5IHx8IG0gPT0gMTEpeworICAgIHJldHVybiAz
MTsKKyAgfQorCisgIC8vRmViCisgIHJldHVybiAyOCtsZWFwOworfQorCitmdW5jdGlvbiBHZXRT
dW5kYXlJbk1vbnRoKHQsIG0sIGNvdW50KXsKKyAgdmFyIHllYXIgPSBZZWFyRnJvbVRpbWUodCk7
CisgIHZhciBsZWFwID0gSW5MZWFwWWVhcih0KTsKKyAgdmFyIGRheSA9IDA7CisgIAorICBpZiht
ID49IDEpIGRheSArPSBEYXlzSW5Nb250aCgwLCBsZWFwKTsKKyAgaWYobSA+PSAyKSBkYXkgKz0g
RGF5c0luTW9udGgoMSwgbGVhcCk7CisgIGlmKG0gPj0gMykgZGF5ICs9IERheXNJbk1vbnRoKDIs
IGxlYXApOworICBpZihtID49IDQpIGRheSArPSBEYXlzSW5Nb250aCgzLCBsZWFwKTsKKyAgaWYo
bSA+PSA1KSBkYXkgKz0gRGF5c0luTW9udGgoNCwgbGVhcCk7CisgIGlmKG0gPj0gNikgZGF5ICs9
IERheXNJbk1vbnRoKDUsIGxlYXApOworICBpZihtID49IDcpIGRheSArPSBEYXlzSW5Nb250aCg2
LCBsZWFwKTsKKyAgaWYobSA+PSA4KSBkYXkgKz0gRGF5c0luTW9udGgoNywgbGVhcCk7CisgIGlm
KG0gPj0gOSkgZGF5ICs9IERheXNJbk1vbnRoKDgsIGxlYXApOworICBpZihtID49IDEwKSBkYXkg
Kz0gRGF5c0luTW9udGgoOSwgbGVhcCk7CisgIGlmKG0gPj0gMTEpIGRheSArPSBEYXlzSW5Nb250
aCgxMCwgbGVhcCk7CisgIAorICB2YXIgbW9udGhfc3RhcnQgPSBUaW1lRnJvbVllYXIoeWVhcikr
ZGF5Km1zUGVyRGF5OworICB2YXIgc3VuZGF5ID0gMDsKKyAgCisgIGlmKGNvdW50ID09PSAibGFz
dCIpeworICAgIGZvcih2YXIgbGFzdF9zdW5kYXkgPSBtb250aF9zdGFydCtEYXlzSW5Nb250aCht
LCBsZWFwKSptc1BlckRheTsgCisgICAgICBXZWVrRGF5KGxhc3Rfc3VuZGF5KT4wOworICAgICAg
bGFzdF9zdW5kYXkgLT0gbXNQZXJEYXkKKyAgICApe307CisgICAgc3VuZGF5ID0gbGFzdF9zdW5k
YXk7CisgIH0KKyAgZWxzZSB7CisgICAgZm9yKHZhciBmaXJzdF9zdW5kYXkgPSBtb250aF9zdGFy
dDsgCisgICAgICBXZWVrRGF5KGZpcnN0X3N1bmRheSk+MDsKKyAgICAgIGZpcnN0X3N1bmRheSAr
PSBtc1BlckRheQorICAgICl7fTsKKyAgICBzdW5kYXkgPSBmaXJzdF9zdW5kYXkrNyptc1BlckRh
eSooY291bnQtMSk7CisgIH0KKyAgCisgIHJldHVybiBzdW5kYXk7Cit9CisKK2Z1bmN0aW9uIERh
eWxpZ2h0U2F2aW5nVEEodCkgeworICB0ID0gdC1Mb2NhbFRaQTsKKworICB2YXIgRFNUX3N0YXJ0
ID0gR2V0U3VuZGF5SW5Nb250aCh0LCAkRFNUX3N0YXJ0X21vbnRoLCAkRFNUX3N0YXJ0X3N1bmRh
eSkKKyAgICAgICAgICAgICAgICAgICskRFNUX3N0YXJ0X2hvdXIqbXNQZXJIb3VyCisgICAgICAg
ICAgICAgICAgICArJERTVF9zdGFydF9taW51dGVzKm1zUGVyTWludXRlOworICAgICAgICAgICAg
ICAgICAgCisgIHZhciBrID0gbmV3IERhdGUoRFNUX3N0YXJ0KTsKKyAgCisgIHZhciBEU1RfZW5k
ICAgPSBHZXRTdW5kYXlJbk1vbnRoKHQsICREU1RfZW5kX21vbnRoLCAkRFNUX2VuZF9zdW5kYXkp
CisgICAgICAgICAgICAgICAgICArJERTVF9lbmRfaG91ciptc1BlckhvdXIKKyAgICAgICAgICAg
ICAgICAgICskRFNUX2VuZF9taW51dGVzKm1zUGVyTWludXRlOworCisgIGlmICggdCA+PSBEU1Rf
c3RhcnQgJiYgdCA8IERTVF9lbmQgKSB7CisgICAgcmV0dXJuIG1zUGVySG91cjsKKyAgfSBlbHNl
IHsKKyAgICByZXR1cm4gMDsKKyAgfQorfQorCisvLzE1LjkuMS45IExvY2FsIFRpbWUKK2Z1bmN0
aW9uIExvY2FsVGltZSh0KXsKKyAgcmV0dXJuIHQrTG9jYWxUWkErRGF5bGlnaHRTYXZpbmdUQSh0
KTsKK30KKworZnVuY3Rpb24gVVRDKHQpIHsKKyAgcmV0dXJuIHQtTG9jYWxUWkEtRGF5bGlnaHRT
YXZpbmdUQSh0LUxvY2FsVFpBKTsKK30KKworLy8xNS45LjEuMTAgSG91cnMsIE1pbnV0ZXMsIFNl
Y29uZCwgYW5kIE1pbGxpc2Vjb25kcworZnVuY3Rpb24gSG91ckZyb21UaW1lKHQpeworICByZXR1
cm4gTWF0aC5mbG9vcih0L21zUGVySG91ciklSG91cnNQZXJEYXk7Cit9CisKK2Z1bmN0aW9uIE1p
bkZyb21UaW1lKHQpeworICByZXR1cm4gTWF0aC5mbG9vcih0L21zUGVyTWludXRlKSVNaW51dGVz
UGVySG91cjsKK30KKworZnVuY3Rpb24gU2VjRnJvbVRpbWUodCl7CisgIHJldHVybiBNYXRoLmZs
b29yKHQvbXNQZXJTZWNvbmQpJVNlY29uZHNQZXJNaW51dGU7Cit9CisKK2Z1bmN0aW9uIG1zRnJv
bVRpbWUodCl7CisgIHJldHVybiB0JW1zUGVyU2Vjb25kOworfQorCisvLzE1LjkuMS4xMSBNYWtl
VGltZSAoaG91ciwgbWluLCBzZWMsIG1zKQorZnVuY3Rpb24gTWFrZVRpbWUoaG91ciwgbWluLCBz
ZWMsIG1zKXsKKyAgaWYgKCAhaXNGaW5pdGUoaG91cikgfHwgIWlzRmluaXRlKG1pbikgfHwgIWlz
RmluaXRlKHNlYykgfHwgIWlzRmluaXRlKG1zKSkgeworICAgIHJldHVybiBOdW1iZXIuTmFOOwor
ICB9CisKKyAgaG91ciA9IFRvSW50ZWdlcihob3VyKTsKKyAgbWluICA9IFRvSW50ZWdlcihtaW4p
OworICBzZWMgID0gVG9JbnRlZ2VyKHNlYyk7CisgIG1zICAgPSBUb0ludGVnZXIobXMpOworCisg
IHJldHVybiAoKGhvdXIqbXNQZXJIb3VyKSArIChtaW4qbXNQZXJNaW51dGUpICsgKHNlYyptc1Bl
clNlY29uZCkgKyBtcyk7Cit9CisKKy8vMTUuOS4xLjEyIE1ha2VEYXkgKHllYXIsIG1vbnRoLCBk
YXRlKQorZnVuY3Rpb24gTWFrZURheSh5ZWFyLCBtb250aCwgZGF0ZSkgeworICBpZiAoICFpc0Zp
bml0ZSh5ZWFyKSB8fCAhaXNGaW5pdGUobW9udGgpIHx8ICFpc0Zpbml0ZShkYXRlKSkgeworICAg
IHJldHVybiBOdW1iZXIuTmFOOworICB9CisKKyAgeWVhciA9IFRvSW50ZWdlcih5ZWFyKTsKKyAg
bW9udGggPSBUb0ludGVnZXIobW9udGgpOworICBkYXRlID0gVG9JbnRlZ2VyKGRhdGUgKTsKKwor
ICB2YXIgcmVzdWx0NSA9IHllYXIgKyBNYXRoLmZsb29yKG1vbnRoLzEyKTsKKyAgdmFyIHJlc3Vs
dDYgPSBtb250aCUxMjsKKworICB2YXIgc2lnbiA9ICggeWVhciA8IDE5NzAgKSA/IC0xIDogMTsK
KyAgdmFyIHQgPSAgICAoIHllYXIgPCAxOTcwICkgPyAxIDogIDA7CisgIHZhciB5ID0gICAgKCB5
ZWFyIDwgMTk3MCApID8gMTk2OSA6IDE5NzA7CisKKyAgaWYoIHNpZ24gPT0gLTEgKXsKKyAgICBm
b3IgKCB5ID0gMTk2OTsgeSA+PSB5ZWFyOyB5ICs9IHNpZ24gKSB7CisgICAgICB0ICs9IHNpZ24g
KiBEYXlzSW5ZZWFyKHkpKm1zUGVyRGF5OworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBmb3IgKCB5
ID0gMTk3MCA7IHkgPCB5ZWFyOyB5ICs9IHNpZ24gKSB7CisgICAgICB0ICs9IHNpZ24gKiBEYXlz
SW5ZZWFyKHkpKm1zUGVyRGF5OworICAgIH0KKyAgfQorCisgIHZhciBsZWFwID0gMDsKKyAgZm9y
ICggdmFyIG0gPSAwOyBtIDwgbW9udGg7IG0rKyApIHsKKyAgICAvL2lmIHllYXIgaXMgY2hhbmdl
ZCwgdGhhbiB3ZSBuZWVkIHRvIHJlY2FsY3VsYXRlIGxlZXAKKyAgICBsZWFwID0gSW5MZWFwWWVh
cih0KTsKKyAgICB0ICs9IERheXNJbk1vbnRoKG0sIGxlYXApKm1zUGVyRGF5OworICB9CisKKyAg
aWYgKCBZZWFyRnJvbVRpbWUodCkgIT0gcmVzdWx0NSApIHsKKyAgICByZXR1cm4gTnVtYmVyLk5h
TjsKKyAgfQorICBpZiAoIE1vbnRoRnJvbVRpbWUodCkgIT0gcmVzdWx0NiApIHsKKyAgICByZXR1
cm4gTnVtYmVyLk5hTjsKKyAgfQorICBpZiAoIERhdGVGcm9tVGltZSh0KSAhPSAxICkgeworICAg
IHJldHVybiBOdW1iZXIuTmFOOworICB9CisKKyAgcmV0dXJuIERheSh0KStkYXRlLTE7Cit9CisK
Ky8vMTUuOS4xLjEzIE1ha2VEYXRlIChkYXksIHRpbWUpCitmdW5jdGlvbiBNYWtlRGF0ZSggZGF5
LCB0aW1lICkgeworICBpZighaXNGaW5pdGUoZGF5KSB8fCAhaXNGaW5pdGUodGltZSkpIHsKKyAg
ICByZXR1cm4gTnVtYmVyLk5hTjsKKyAgfQorICAKKyAgcmV0dXJuIGRheSptc1BlckRheSt0aW1l
OworfQorCisvLzE1LjkuMS4xNCBUaW1lQ2xpcCAodGltZSkKK2Z1bmN0aW9uIFRpbWVDbGlwKHRp
bWUpIHsKKyAgaWYoIWlzRmluaXRlKHRpbWUpIHx8IE1hdGguYWJzKHRpbWUpID4gOC42NGUxNSl7
CisgICAgcmV0dXJuIE51bWJlci5OYU47CisgIH0KKworICByZXR1cm4gVG9JbnRlZ2VyKHRpbWUp
OworfQorCisvL1Rlc3QgRnVuY3Rpb25zCitmdW5jdGlvbiBDb25zdHJ1Y3REYXRlKHllYXIsIG1v
bnRoLCBkYXRlLCBob3VycywgbWludXRlcywgc2Vjb25kcywgbXMpeworICAvKgorICAgKiAxLiBD
YWxsIFRvTnVtYmVyKHllYXIpCisgICAqIDIuIENhbGwgVG9OdW1iZXIobW9udGgpCisgICAqIDMu
IElmIGRhdGUgaXMgc3VwcGxpZWQgdXNlIFRvTnVtYmVyKGRhdGUpOyBlbHNlIHVzZSAxCisgICAq
IDQuIElmIGhvdXJzIGlzIHN1cHBsaWVkIHVzZSBUb051bWJlcihob3Vycyk7IGVsc2UgdXNlIDAK
KyAgICogNS4gSWYgbWludXRlcyBpcyBzdXBwbGllZCB1c2UgVG9OdW1iZXIobWludXRlcyk7IGVs
c2UgdXNlIDAKKyAgICogNi4gSWYgc2Vjb25kcyBpcyBzdXBwbGllZCB1c2UgVG9OdW1iZXIoc2Vj
b25kcyk7IGVsc2UgdXNlIDAKKyAgICogNy4gSWYgbXMgaXMgc3VwcGxpZWQgdXNlIFRvTnVtYmVy
KG1zKTsgZWxzZSB1c2UgMAorICAgKiA4LiBJZiBSZXN1bHQoMSkgaXMgbm90IE5hTiBhbmQgMCA8
PSBUb0ludGVnZXIoUmVzdWx0KDEpKSA8PSA5OSwgUmVzdWx0KDgpIGlzCisgICAqIDE5MDArVG9J
bnRlZ2VyKFJlc3VsdCgxKSk7IG90aGVyd2lzZSwgUmVzdWx0KDgpIGlzIFJlc3VsdCgxKQorICAg
KiA5LiBDb21wdXRlIE1ha2VEYXkoUmVzdWx0KDgpLCBSZXN1bHQoMiksIFJlc3VsdCgzKSkKKyAg
ICogMTAuIENvbXB1dGUgTWFrZVRpbWUoUmVzdWx0KDQpLCBSZXN1bHQoNSksIFJlc3VsdCg2KSwg
UmVzdWx0KDcpKQorICAgKiAxMS4gQ29tcHV0ZSBNYWtlRGF0ZShSZXN1bHQoOSksIFJlc3VsdCgx
MCkpCisgICAqIDEyLiBTZXQgdGhlIFtbVmFsdWVdXSBwcm9wZXJ0eSBvZiB0aGUgbmV3bHkgY29u
c3RydWN0ZWQgb2JqZWN0IHRvIFRpbWVDbGlwKFVUQyhSZXN1bHQoMTEpKSkKKyAgICovCisgIHZh
ciByMSA9IE51bWJlcih5ZWFyKTsKKyAgdmFyIHIyID0gTnVtYmVyKG1vbnRoKTsKKyAgdmFyIHIz
ID0gKChkYXRlICYmIGFyZ3VtZW50cy5sZW5ndGggPiAyKSA/IE51bWJlcihkYXRlKSA6IDEpOwor
ICB2YXIgcjQgPSAoKGhvdXJzICYmIGFyZ3VtZW50cy5sZW5ndGggPiAzKSA/IE51bWJlcihob3Vy
cykgOiAwKTsgICAKKyAgdmFyIHI1ID0gKChtaW51dGVzICYmIGFyZ3VtZW50cy5sZW5ndGggPiA0
KSA/IE51bWJlcihtaW51dGVzKSA6IDApOyAgIAorICB2YXIgcjYgPSAoKHNlY29uZHMgJiYgYXJn
dW1lbnRzLmxlbmd0aCA+IDUpID8gTnVtYmVyKHNlY29uZHMpIDogMCk7ICAgCisgIHZhciByNyA9
ICgobXMgJiYgYXJndW1lbnRzLmxlbmd0aCA+IDYpID8gTnVtYmVyKG1zKSA6IDApOworICAKKyAg
dmFyIHI4ID0gcjE7CisgIAorICBpZighaXNOYU4ocjEpICYmICgwIDw9IFRvSW50ZWdlcihyMSkp
ICYmIChUb0ludGVnZXIocjEpIDw9IDk5KSkKKyAgICByOCA9IDE5MDArcjE7CisgIAorICB2YXIg
cjkgPSBNYWtlRGF5KHI4LCByMiwgcjMpOworICB2YXIgcjEwID0gTWFrZVRpbWUocjQsIHI1LCBy
NiwgcjcpOworICB2YXIgcjExID0gTWFrZURhdGUocjksIHIxMCk7CisgIAorICByZXR1cm4gVGlt
ZUNsaXAoVVRDKHIxMSkpOworfQorCisKKworaWYgKENvbnN0cnVjdERhdGUoMTg5OSwgMTEsIDMx
LCAyMywgNTkpICE9PSBuZXcgRGF0ZSgxODk5LCAxMSwgMzEsIDIzLCA1OSkudmFsdWVPZigpKSB7
CisgIHRlc3RGYWlsZWQoIiMxOiBJbmNvcnJlY3QgdmFsdWUgb2YgRGF0ZSIpOworfQorCitpZiAo
Q29uc3RydWN0RGF0ZSgxODk5LCAxMiwgMSwgMCwgMCkgIT09IG5ldyBEYXRlKDE4OTksIDEyLCAx
LCAwLCAwKS52YWx1ZU9mKCkpIHsKKyAgdGVzdEZhaWxlZCgiIzI6IEluY29ycmVjdCB2YWx1ZSBv
ZiBEYXRlIik7Cit9CisKK2lmIChDb25zdHJ1Y3REYXRlKDE5MDAsIDAsIDEsIDAsIDApICE9PSBu
ZXcgRGF0ZSgxOTAwLCAwLCAxLCAwLCAwKS52YWx1ZU9mKCkpIHsKKyAgdGVzdEZhaWxlZCgiIzM6
IEluY29ycmVjdCB2YWx1ZSBvZiBEYXRlIik7Cit9CisKK2lmIChDb25zdHJ1Y3REYXRlKDE5Njks
IDExLCAzMSwgMjMsIDU5KSAhPT0gbmV3IERhdGUoMTk2OSwgMTEsIDMxLCAyMywgNTkpLnZhbHVl
T2YoKSkgeworICB0ZXN0RmFpbGVkKCIjNDogSW5jb3JyZWN0IHZhbHVlIG9mIERhdGUiKTsKK30K
KworaWYgKENvbnN0cnVjdERhdGUoMTk2OSwgMTIsIDEsIDAsIDApICE9PSBuZXcgRGF0ZSgxOTY5
LCAxMiwgMSwgMCwgMCkudmFsdWVPZigpKSB7CisgIHRlc3RGYWlsZWQoIiM1OiBJbmNvcnJlY3Qg
dmFsdWUgb2YgRGF0ZSIpOworfQorCitpZiAoQ29uc3RydWN0RGF0ZSgxOTcwLCAwLCAxLCAwLCAw
KSAhPT0gbmV3IERhdGUoMTk3MCwgMCwgMSwgMCwgMCkudmFsdWVPZigpKSB7CisgIHRlc3RGYWls
ZWQoIiM2OiBJbmNvcnJlY3QgdmFsdWUgb2YgRGF0ZSIpOworfQorCitpZiAoQ29uc3RydWN0RGF0
ZSgxOTk5LCAxMSwgMzEsIDIzLCA1OSkgIT09IG5ldyBEYXRlKDE5OTksIDExLCAzMSwgMjMsIDU5
KS52YWx1ZU9mKCkpIHsKKyAgdGVzdEZhaWxlZCgiIzc6IEluY29ycmVjdCB2YWx1ZSBvZiBEYXRl
Iik7Cit9CisKK2lmIChDb25zdHJ1Y3REYXRlKDE5OTksIDEyLCAxLCAwLCAwKSAhPT0gbmV3IERh
dGUoMTk5OSwgMTIsIDEsIDAsIDApLnZhbHVlT2YoKSkgeworICB0ZXN0RmFpbGVkKCIjODogSW5j
b3JyZWN0IHZhbHVlIG9mIERhdGUiKTsKK30KKworaWYgKENvbnN0cnVjdERhdGUoMjAwMCwgMCwg
MSwgMCwgMCkgIT09IG5ldyBEYXRlKDIwMDAsIDAsIDEsIDAsIDApLnZhbHVlT2YoKSkgeworICB0
ZXN0RmFpbGVkKCIjOTogSW5jb3JyZWN0IHZhbHVlIG9mIERhdGUiKTsKK30KKworaWYgKENvbnN0
cnVjdERhdGUoMjA5OSwgMTEsIDMxLCAyMywgNTkpICE9PSBuZXcgRGF0ZSgyMDk5LCAxMSwgMzEs
IDIzLCA1OSkudmFsdWVPZigpKSB7CisgIHRlc3RGYWlsZWQoIiMxMDogSW5jb3JyZWN0IHZhbHVl
IG9mIERhdGUiKTsKK30KKworaWYgKENvbnN0cnVjdERhdGUoMjA5OSwgMTIsIDEsIDAsIDApICE9
PSBuZXcgRGF0ZSgyMDk5LCAxMiwgMSwgMCwgMCkudmFsdWVPZigpKSB7CisgIHRlc3RGYWlsZWQo
IiMxMTogSW5jb3JyZWN0IHZhbHVlIG9mIERhdGUiKTsKK30KKworaWYgKENvbnN0cnVjdERhdGUo
MjEwMCwgMCwgMSwgMCwgMCkgIT09IG5ldyBEYXRlKDIxMDAsIDAsIDEsIDAsIDApLnZhbHVlT2Yo
KSkgeworICB0ZXN0RmFpbGVkKCIjMTI6IEluY29ycmVjdCB2YWx1ZSBvZiBEYXRlIik7Cit9CisK
K30gY2F0Y2ggKGV4KSB7CisgICAgc3B1dG5pa0V4Y2VwdGlvbiA9IGV4OworfQorCit2YXIgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0PgorCis8c2NyaXB0PgoraWYgKCFzdWNj
ZXNzZnVsbHlQYXJzZWQpCisgICAgcHJpbnRUZXN0RmFpbGVkKCdzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgbm90IHNldCcpOworZWxzZSBpZiAoc3B1dG5pa0V4Y2VwdGlvbikKKyAgICBwcmludFRlc3RG
YWlsZWQoc3B1dG5pa0V4Y2VwdGlvbik7CitlbHNlCisgICAgcHJpbnRUZXN0UGFzc2VkKCIiKTsK
K3Rlc3RQcmludCgnPGJyIC8+PHNwYW4gY2xhc3M9InBhc3MiPlRFU1QgQ09NUExFVEU8L3NwYW4+
Jyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3NwdXRuaWsvQ29uZm9ybWFuY2UvMTVfTmF0aXZlX09iamVjdHMvMTUuOV9EYXRlLzE1LjkuMy9T
MTUuOS4zLjFfQTVfVDQuaHRtbC1kaXNhYmxlZCBiL0xheW91dFRlc3RzL3NwdXRuaWsvQ29uZm9y
bWFuY2UvMTVfTmF0aXZlX09iamVjdHMvMTUuOV9EYXRlLzE1LjkuMy9TMTUuOS4zLjFfQTVfVDQu
aHRtbC1kaXNhYmxlZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJhYmJmNWU1ZDcy
MzE1MmEyNzE4YzAzZTg0OThkODE4NTdlYjZlMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9zcHV0bmlrL0NvbmZvcm1hbmNlLzE1X05h
dGl2ZV9PYmplY3RzLzE1LjlfRGF0ZS8xNS45LjMvUzE1LjkuMy4xX0E1X1Q0Lmh0bWwtZGlzYWJs
ZWQKKysrIC9kZXYvbnVsbApAQCAtMSw1MjIgKzAsMCBAQAotPGh0bWw+Ci08aGVhZD4KLTxtZXRh
IGNoYXJzZXQ9J3V0Zi04Jz4KLTxzdHlsZT4KLS5wYXNzIHsKLSAgICBmb250LXdlaWdodDogYm9s
ZDsKLSAgICBjb2xvcjogZ3JlZW47Ci19Ci0uZmFpbCB7Ci0gICAgZm9udC13ZWlnaHQ6IGJvbGQ7
Ci0gICAgY29sb3I6IHJlZDsKLX0KLTwvc3R5bGU+Ci0KLTxzY3JpcHQ+Ci1pZiAod2luZG93LnRl
c3RSdW5uZXIpCi0gICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7Ci0KLWZ1bmN0aW9uIFNwdXRu
aWtFcnJvcihtZXNzYWdlKQotewotICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7Ci19Ci0KLVNw
dXRuaWtFcnJvci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKQotewotICAgIHJldHVy
biAnU3B1dG5pa0Vycm9yOiAnICsgdGhpcy5tZXNzYWdlOwotfTsKLQotdmFyIHNwdXRuaWtFeGNl
cHRpb247Ci0KLWZ1bmN0aW9uIHRlc3RQcmludChtc2cpCi17Ci0gICAgdmFyIHNwYW4gPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
ImNvbnNvbGUiKS5hcHBlbmRDaGlsZChzcGFuKTsgLy8gaW5zZXJ0IGl0IGZpcnN0IHNvIFhIVE1M
IGtub3dzIHRoZSBuYW1lc3BhY2UgCi0gICAgc3Bhbi5pbm5lckhUTUwgPSBtc2cgKyAnPGJyIC8+
JzsKLX0KLQotZnVuY3Rpb24gZXNjYXBlSFRNTCh0ZXh0KQotewotICAgIHJldHVybiB0ZXh0LnRv
U3RyaW5nKCkucmVwbGFjZSgvJi9nLCAiJmFtcDsiKS5yZXBsYWNlKC88L2csICImbHQ7Iik7Ci19
Ci0KLWZ1bmN0aW9uIHByaW50VGVzdFBhc3NlZChtc2cpCi17Ci0gICAgdGVzdFByaW50KCc8c3Bh
bj48c3BhbiBjbGFzcz0icGFzcyI+UEFTUzwvc3Bhbj4gJyArIGVzY2FwZUhUTUwobXNnKSArICc8
L3NwYW4+Jyk7Ci19Ci0KLWZ1bmN0aW9uIHByaW50VGVzdEZhaWxlZChtc2cpCi17Ci0gICAgdGVz
dFByaW50KCc8c3Bhbj48c3BhbiBjbGFzcz0iZmFpbCI+RkFJTDwvc3Bhbj4gJyArIGVzY2FwZUhU
TUwobXNnKSArICc8L3NwYW4+Jyk7Ci19Ci0KLWZ1bmN0aW9uIHRlc3RGYWlsZWQobXNnKQotewot
ICAgIHRocm93IG5ldyBTcHV0bmlrRXJyb3IobXNnKTsKLX0KLQotdmFyIHN1Y2Nlc3NmdWxseVBh
cnNlZCA9IGZhbHNlOwotPC9zY3JpcHQ+Ci0KLTwvaGVhZD4KLTxib2R5PgotPHA+UzE1LjkuMy4x
X0E1X1Q0PC9wPgotPGRpdiBpZD0nY29uc29sZSc+PC9kaXY+Ci08c2NyaXB0PgotdHJ5IHsKLQot
LyoqCi0gKiBAbmFtZTogUzE1LjkuMy4xX0E1X1Q0OwotICogQHNlY3Rpb246IDE1LjkuMy4xOwot
ICogQGFzc2VydGlvbjogVGhlIFtbVmFsdWVdXSBwcm9wZXJ0eSBvZiB0aGUgbmV3bHkgY29uc3Ry
dWN0ZWQgb2JqZWN0IAotICogaXMgc2V0IGJ5IGZvbGxvd2luZyBzdGVwczoKLSAqIDguIElmIFJl
c3VsdCgxKSBpcyBub3QgTmFOIGFuZCAwIDw9IFRvSW50ZWdlcihSZXN1bHQoMSkpIDw9IDk5LCBS
ZXN1bHQoOCkgaXMKLSAqIDE5MDArVG9JbnRlZ2VyKFJlc3VsdCgxKSk7IG90aGVyd2lzZSwgUmVz
dWx0KDgpIGlzIFJlc3VsdCgxKQotICogOS4gQ29tcHV0ZSBNYWtlRGF5KFJlc3VsdCg4KSwgUmVz
dWx0KDIpLCBSZXN1bHQoMykpCi0gKiAxMC4gQ29tcHV0ZSBNYWtlVGltZShSZXN1bHQoNCksIFJl
c3VsdCg1KSwgUmVzdWx0KDYpLCBSZXN1bHQoNykpCi0gKiAxMS4gQ29tcHV0ZSBNYWtlRGF0ZShS
ZXN1bHQoOSksIFJlc3VsdCgxMCkpCi0gKiAxMi4gU2V0IHRoZSBbW1ZhbHVlXV0gcHJvcGVydHkg
b2YgdGhlIG5ld2x5IGNvbnN0cnVjdGVkIG9iamVjdCB0byAKLSAqIFRpbWVDbGlwKFVUQyhSZXN1
bHQoMTEpKSk7Ci0gKiBAZGVzY3JpcHRpb246IDUgYXJndW1lbnRzLCAoeWVhciwgbW9udGgsIGRh
dGUsIGhvdXJzLCBtaW51dGVzKTsKLSAqLwotCi12YXIgJERTVF9lbmRfaG91ciA9IDI7Ci12YXIg
JERTVF9lbmRfbWludXRlcyA9IDA7Ci12YXIgJERTVF9lbmRfbW9udGggPSAxMDsKLXZhciAkRFNU
X2VuZF9zdW5kYXkgPSAnZmlyc3QnOwotdmFyICREU1Rfc3RhcnRfaG91ciA9IDI7Ci12YXIgJERT
VF9zdGFydF9taW51dGVzID0gMDsKLXZhciAkRFNUX3N0YXJ0X21vbnRoID0gMjsKLXZhciAkRFNU
X3N0YXJ0X3N1bmRheSA9ICdmaXJzdCc7Ci12YXIgJExvY2FsVFogPSAtODsKLWZ1bmN0aW9uIFRv
SW50ZWdlcihwKSB7Ci0gIHggPSBOdW1iZXIocCk7Ci0KLSAgaWYoaXNOYU4oeCkpewotICAgIHJl
dHVybiArMDsKLSAgfQotICAKLSAgaWYoKHggPT09ICswKSAKLSAgfHwgKHggPT09IC0wKSAKLSAg
fHwgKHggPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkgCi0gIHx8ICh4ID09PSBOdW1iZXIu
TkVHQVRJVkVfSU5GSU5JVFkpKXsKLSAgICAgcmV0dXJuIHg7Ci0gIH0KLQotICB2YXIgc2lnbiA9
ICggeCA8IDAgKSA/IC0xIDogMTsKLQotICByZXR1cm4gKHNpZ24qTWF0aC5mbG9vcihNYXRoLmFi
cyh4KSkpOwotfQotCi0KLXZhciBIb3Vyc1BlckRheSA9IDI0OwotdmFyIE1pbnV0ZXNQZXJIb3Vy
ID0gNjA7Ci12YXIgU2Vjb25kc1Blck1pbnV0ZSA9IDYwOwotCi12YXIgbXNQZXJEYXkgPSA4NjQw
MDAwMDsKLXZhciBtc1BlclNlY29uZCA9IDEwMDA7Ci12YXIgbXNQZXJNaW51dGUgPSA2MDAwMDsK
LXZhciBtc1BlckhvdXIgPSAzNjAwMDAwOwotCi12YXIgZGF0ZV8xODk5X2VuZCA9IC0yMjA4OTg4
ODAwMDAxOwotdmFyIGRhdGVfMTkwMF9zdGFydCA9IC0yMjA4OTg4ODAwMDAwOwotdmFyIGRhdGVf
MTk2OV9lbmQgPSAtMTsKLXZhciBkYXRlXzE5NzBfc3RhcnQgPSAwOwotdmFyIGRhdGVfMTk5OV9l
bmQgPSA5NDY2ODQ3OTk5OTk7Ci12YXIgZGF0ZV8yMDAwX3N0YXJ0ID0gOTQ2Njg0ODAwMDAwOwot
dmFyIGRhdGVfMjA5OV9lbmQgPSA0MTAyNDQ0Nzk5OTk5OwotdmFyIGRhdGVfMjEwMF9zdGFydCA9
IDQxMDI0NDQ4MDAwMDA7Ci0KLQotLy8xNS45LjEuMiBEYXkgTnVtYmVyIGFuZCBUaW1lIHdpdGhp
biBEYXkKLWZ1bmN0aW9uIERheSh0KSB7Ci0gIHJldHVybiBNYXRoLmZsb29yKHQvbXNQZXJEYXkp
OwotfQotCi1mdW5jdGlvbiBUaW1lV2l0aGluRGF5KHQpIHsKLSAgcmV0dXJuIHQlbXNQZXJEYXk7
Ci19Ci0KLS8vMTUuOS4xLjMgWWVhciBOdW1iZXIKLWZ1bmN0aW9uIERheXNJblllYXIoeSl7Ci0g
IGlmKHklNCAhPSAwKSByZXR1cm4gMzY1OwotICBpZih5JTQgPT0gMCAmJiB5JTEwMCAhPSAwKSBy
ZXR1cm4gMzY2OwotICBpZih5JTEwMCA9PSAwICYmIHklNDAwICE9IDApIHJldHVybiAzNjU7Ci0g
IGlmKHklNDAwID09IDApIHJldHVybiAzNjY7Ci19Ci0KLWZ1bmN0aW9uIERheUZyb21ZZWFyKHkp
IHsKLSAgcmV0dXJuICgzNjUqKHktMTk3MCkKLSAgICAgICAgICArIE1hdGguZmxvb3IoKHktMTk2
OSkvNCkKLSAgICAgICAgICAtIE1hdGguZmxvb3IoKHktMTkwMSkvMTAwKQotICAgICAgICAgICsg
TWF0aC5mbG9vcigoeS0xNjAxKS80MDApKTsKLX0KLQotZnVuY3Rpb24gVGltZUZyb21ZZWFyKHkp
ewotICByZXR1cm4gbXNQZXJEYXkqRGF5RnJvbVllYXIoeSk7Ci19Ci0KLWZ1bmN0aW9uIFllYXJG
cm9tVGltZSh0KSB7Ci0gIHQgPSBOdW1iZXIodCk7Ci0gIHZhciBzaWduID0gKCB0IDwgMCApID8g
LTEgOiAxOwotICB2YXIgeWVhciA9ICggc2lnbiA8IDAgKSA/IDE5NjkgOiAxOTcwOwotICAKLSAg
Zm9yKHZhciB0aW1lID0gMDs7eWVhciArPSBzaWduKXsKLSAgICB0aW1lID0gVGltZUZyb21ZZWFy
KHllYXIpOwotICAgIAotICAgIGlmKHNpZ24gPiAwICYmIHRpbWUgPiB0KXsKLSAgICAgIHllYXIg
LT0gc2lnbjsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBlbHNlIGlmKHNpZ24gPCAwICYmIHRp
bWUgPD0gdCl7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH07Ci0gIHJldHVybiB5ZWFyOwotfQot
ICAKLWZ1bmN0aW9uIEluTGVhcFllYXIodCl7Ci0gIGlmKERheXNJblllYXIoWWVhckZyb21UaW1l
KHQpKSA9PSAzNjUpCi0gICAgcmV0dXJuIDA7Ci0gIAotICBpZihEYXlzSW5ZZWFyKFllYXJGcm9t
VGltZSh0KSkgPT0gMzY2KQotICAgIHJldHVybiAxOwotfQotCi1mdW5jdGlvbiBEYXlXaXRoaW5Z
ZWFyKHQpIHsKLSAgcmV0dXJuIERheSh0KS1EYXlGcm9tWWVhcihZZWFyRnJvbVRpbWUodCkpOwot
fQotCi0vLzE1LjkuMS40IE1vbnRoIE51bWJlcgotZnVuY3Rpb24gTW9udGhGcm9tVGltZSh0KXsK
LSAgdmFyIGRheSA9IERheVdpdGhpblllYXIodCk7Ci0gIHZhciBsZWFwID0gSW5MZWFwWWVhcih0
KTsKLQotICBpZigoMCA8PSBkYXkpICYmIChkYXkgPCAzMSkpIHJldHVybiAwOwotICBpZigoMzEg
PD0gZGF5KSAmJiAoZGF5IDwgKDU5K2xlYXApKSkgcmV0dXJuIDE7Ci0gIGlmKCgoNTkrbGVhcCkg
PD0gZGF5KSAmJiAoZGF5IDwgKDkwK2xlYXApKSkgcmV0dXJuIDI7Ci0gIGlmKCgoOTArbGVhcCkg
PD0gZGF5KSAmJiAoZGF5IDwgKDEyMCtsZWFwKSkpIHJldHVybiAzOwotICBpZigoKDEyMCtsZWFw
KSA8PSBkYXkpICYmIChkYXkgPCAoMTUxK2xlYXApKSkgcmV0dXJuIDQ7Ci0gIGlmKCgoMTUxK2xl
YXApIDw9IGRheSkgJiYgKGRheSA8ICgxODErbGVhcCkpKSByZXR1cm4gNTsKLSAgaWYoKCgxODEr
bGVhcCkgPD0gZGF5KSAmJiAoZGF5IDwgKDIxMitsZWFwKSkpIHJldHVybiA2OwotICBpZigoKDIx
MitsZWFwKSA8PSBkYXkpICYmIChkYXkgPCAoMjQzK2xlYXApKSkgcmV0dXJuIDc7Ci0gIGlmKCgo
MjQzK2xlYXApIDw9IGRheSkgJiYgKGRheSA8ICgyNzMrbGVhcCkpKSByZXR1cm4gODsKLSAgaWYo
KCgyNzMrbGVhcCkgPD0gZGF5KSAmJiAoZGF5IDwgKDMwNCtsZWFwKSkpIHJldHVybiA5OwotICBp
ZigoKDMwNCtsZWFwKSA8PSBkYXkpICYmIChkYXkgPCAoMzM0K2xlYXApKSkgcmV0dXJuIDEwOwot
ICBpZigoKDMzNCtsZWFwKSA8PSBkYXkpICYmIChkYXkgPCAoMzY1K2xlYXApKSkgcmV0dXJuIDEx
OwotfQotCi0vLzE1LjkuMS41IERhdGUgTnVtYmVyCi1mdW5jdGlvbiBEYXRlRnJvbVRpbWUodCkg
ewotICB2YXIgZGF5ID0gRGF5V2l0aGluWWVhcih0KTsKLSAgdmFyIG1vbnRoID0gTW9udGhGcm9t
VGltZSh0KTsKLSAgdmFyIGxlYXAgPSBJbkxlYXBZZWFyKHQpOwotCi0gIGlmKG1vbnRoID09IDAp
IHJldHVybiBkYXkrMTsKLSAgaWYobW9udGggPT0gMSkgcmV0dXJuIGRheS0zMDsKLSAgaWYobW9u
dGggPT0gMikgcmV0dXJuIGRheS01OC1sZWFwOwotICBpZihtb250aCA9PSAzKSByZXR1cm4gZGF5
LTg5LWxlYXA7Ci0gIGlmKG1vbnRoID09IDQpIHJldHVybiBkYXktMTE5LWxlYXA7Ci0gIGlmKG1v
bnRoID09IDUpIHJldHVybiBkYXktMTUwLWxlYXA7Ci0gIGlmKG1vbnRoID09IDYpIHJldHVybiBk
YXktMTgwLWxlYXA7Ci0gIGlmKG1vbnRoID09IDcpIHJldHVybiBkYXktMjExLWxlYXA7Ci0gIGlm
KG1vbnRoID09IDgpIHJldHVybiBkYXktMjQyLWxlYXA7Ci0gIGlmKG1vbnRoID09IDkpIHJldHVy
biBkYXktMjcyLWxlYXA7Ci0gIGlmKG1vbnRoID09IDEwKSByZXR1cm4gZGF5LTMwMy1sZWFwOwot
ICBpZihtb250aCA9PSAxMSkgcmV0dXJuIGRheS0zMzMtbGVhcDsKLX0KLQotLy8xNS45LjEuNiBX
ZWVrIERheQotZnVuY3Rpb24gV2Vla0RheSh0KSB7Ci0gIHZhciB3ZWVrZGF5ID0gKERheSh0KSs0
KSU3OwotICByZXR1cm4gKHdlZWtkYXkgPCAwID8gNyt3ZWVrZGF5IDogd2Vla2RheSk7Ci19Ci0K
LS8vMTUuOS4xLjkgRGF5bGlnaHQgU2F2aW5nIFRpbWUgQWRqdXN0bWVudAotdmFyIExvY2FsVFpB
ID0gJExvY2FsVFoqbXNQZXJIb3VyOwotCi1mdW5jdGlvbiBEYXlzSW5Nb250aChtLCBsZWFwKSB7
Ci0gIG0gPSBtJTEyOwotICAKLSAgLy9BcHJpbCwgSnVuZSwgU2VwdCwgTm92Ci0gIGlmKG0gPT0g
MyB8fCBtID09IDUgfHwgbSA9PSA4IHx8IG0gPT0gMTAgKSB7Ci0gICAgcmV0dXJuIDMwOwotICB9
Ci0KLSAgLy9KYW4sIE1hcmNoLCBNYXksIEp1bHksIEF1ZywgT2N0LCBEZWMKLSAgaWYobSA9PSAw
IHx8IG0gPT0gMiB8fCBtID09IDQgfHwgbSA9PSA2IHx8IG0gPT0gNyB8fCBtID09IDkgfHwgbSA9
PSAxMSl7Ci0gICAgcmV0dXJuIDMxOwotICB9Ci0KLSAgLy9GZWIKLSAgcmV0dXJuIDI4K2xlYXA7
Ci19Ci0KLWZ1bmN0aW9uIEdldFN1bmRheUluTW9udGgodCwgbSwgY291bnQpewotICB2YXIgeWVh
ciA9IFllYXJGcm9tVGltZSh0KTsKLSAgdmFyIGxlYXAgPSBJbkxlYXBZZWFyKHQpOwotICB2YXIg
ZGF5ID0gMDsKLSAgCi0gIGlmKG0gPj0gMSkgZGF5ICs9IERheXNJbk1vbnRoKDAsIGxlYXApOwot
ICBpZihtID49IDIpIGRheSArPSBEYXlzSW5Nb250aCgxLCBsZWFwKTsKLSAgaWYobSA+PSAzKSBk
YXkgKz0gRGF5c0luTW9udGgoMiwgbGVhcCk7Ci0gIGlmKG0gPj0gNCkgZGF5ICs9IERheXNJbk1v
bnRoKDMsIGxlYXApOwotICBpZihtID49IDUpIGRheSArPSBEYXlzSW5Nb250aCg0LCBsZWFwKTsK
LSAgaWYobSA+PSA2KSBkYXkgKz0gRGF5c0luTW9udGgoNSwgbGVhcCk7Ci0gIGlmKG0gPj0gNykg
ZGF5ICs9IERheXNJbk1vbnRoKDYsIGxlYXApOwotICBpZihtID49IDgpIGRheSArPSBEYXlzSW5N
b250aCg3LCBsZWFwKTsKLSAgaWYobSA+PSA5KSBkYXkgKz0gRGF5c0luTW9udGgoOCwgbGVhcCk7
Ci0gIGlmKG0gPj0gMTApIGRheSArPSBEYXlzSW5Nb250aCg5LCBsZWFwKTsKLSAgaWYobSA+PSAx
MSkgZGF5ICs9IERheXNJbk1vbnRoKDEwLCBsZWFwKTsKLSAgCi0gIHZhciBtb250aF9zdGFydCA9
IFRpbWVGcm9tWWVhcih5ZWFyKStkYXkqbXNQZXJEYXk7Ci0gIHZhciBzdW5kYXkgPSAwOwotICAK
LSAgaWYoY291bnQgPT09ICJsYXN0Iil7Ci0gICAgZm9yKHZhciBsYXN0X3N1bmRheSA9IG1vbnRo
X3N0YXJ0K0RheXNJbk1vbnRoKG0sIGxlYXApKm1zUGVyRGF5OyAKLSAgICAgIFdlZWtEYXkobGFz
dF9zdW5kYXkpPjA7Ci0gICAgICBsYXN0X3N1bmRheSAtPSBtc1BlckRheQotICAgICl7fTsKLSAg
ICBzdW5kYXkgPSBsYXN0X3N1bmRheTsKLSAgfQotICBlbHNlIHsKLSAgICBmb3IodmFyIGZpcnN0
X3N1bmRheSA9IG1vbnRoX3N0YXJ0OyAKLSAgICAgIFdlZWtEYXkoZmlyc3Rfc3VuZGF5KT4wOwot
ICAgICAgZmlyc3Rfc3VuZGF5ICs9IG1zUGVyRGF5Ci0gICAgKXt9OwotICAgIHN1bmRheSA9IGZp
cnN0X3N1bmRheSs3Km1zUGVyRGF5Kihjb3VudC0xKTsKLSAgfQotICAKLSAgcmV0dXJuIHN1bmRh
eTsKLX0KLQotZnVuY3Rpb24gRGF5bGlnaHRTYXZpbmdUQSh0KSB7Ci0gIHQgPSB0LUxvY2FsVFpB
OwotCi0gIHZhciBEU1Rfc3RhcnQgPSBHZXRTdW5kYXlJbk1vbnRoKHQsICREU1Rfc3RhcnRfbW9u
dGgsICREU1Rfc3RhcnRfc3VuZGF5KQotICAgICAgICAgICAgICAgICAgKyREU1Rfc3RhcnRfaG91
ciptc1BlckhvdXIKLSAgICAgICAgICAgICAgICAgICskRFNUX3N0YXJ0X21pbnV0ZXMqbXNQZXJN
aW51dGU7Ci0gICAgICAgICAgICAgICAgICAKLSAgdmFyIGsgPSBuZXcgRGF0ZShEU1Rfc3RhcnQp
OwotICAKLSAgdmFyIERTVF9lbmQgICA9IEdldFN1bmRheUluTW9udGgodCwgJERTVF9lbmRfbW9u
dGgsICREU1RfZW5kX3N1bmRheSkKLSAgICAgICAgICAgICAgICAgICskRFNUX2VuZF9ob3VyKm1z
UGVySG91cgotICAgICAgICAgICAgICAgICAgKyREU1RfZW5kX21pbnV0ZXMqbXNQZXJNaW51dGU7
Ci0KLSAgaWYgKCB0ID49IERTVF9zdGFydCAmJiB0IDwgRFNUX2VuZCApIHsKLSAgICByZXR1cm4g
bXNQZXJIb3VyOwotICB9IGVsc2UgewotICAgIHJldHVybiAwOwotICB9Ci19Ci0KLS8vMTUuOS4x
LjkgTG9jYWwgVGltZQotZnVuY3Rpb24gTG9jYWxUaW1lKHQpewotICByZXR1cm4gdCtMb2NhbFRa
QStEYXlsaWdodFNhdmluZ1RBKHQpOwotfQotCi1mdW5jdGlvbiBVVEModCkgewotICByZXR1cm4g
dC1Mb2NhbFRaQS1EYXlsaWdodFNhdmluZ1RBKHQtTG9jYWxUWkEpOwotfQotCi0vLzE1LjkuMS4x
MCBIb3VycywgTWludXRlcywgU2Vjb25kLCBhbmQgTWlsbGlzZWNvbmRzCi1mdW5jdGlvbiBIb3Vy
RnJvbVRpbWUodCl7Ci0gIHJldHVybiBNYXRoLmZsb29yKHQvbXNQZXJIb3VyKSVIb3Vyc1BlckRh
eTsKLX0KLQotZnVuY3Rpb24gTWluRnJvbVRpbWUodCl7Ci0gIHJldHVybiBNYXRoLmZsb29yKHQv
bXNQZXJNaW51dGUpJU1pbnV0ZXNQZXJIb3VyOwotfQotCi1mdW5jdGlvbiBTZWNGcm9tVGltZSh0
KXsKLSAgcmV0dXJuIE1hdGguZmxvb3IodC9tc1BlclNlY29uZCklU2Vjb25kc1Blck1pbnV0ZTsK
LX0KLQotZnVuY3Rpb24gbXNGcm9tVGltZSh0KXsKLSAgcmV0dXJuIHQlbXNQZXJTZWNvbmQ7Ci19
Ci0KLS8vMTUuOS4xLjExIE1ha2VUaW1lIChob3VyLCBtaW4sIHNlYywgbXMpCi1mdW5jdGlvbiBN
YWtlVGltZShob3VyLCBtaW4sIHNlYywgbXMpewotICBpZiAoICFpc0Zpbml0ZShob3VyKSB8fCAh
aXNGaW5pdGUobWluKSB8fCAhaXNGaW5pdGUoc2VjKSB8fCAhaXNGaW5pdGUobXMpKSB7Ci0gICAg
cmV0dXJuIE51bWJlci5OYU47Ci0gIH0KLQotICBob3VyID0gVG9JbnRlZ2VyKGhvdXIpOwotICBt
aW4gID0gVG9JbnRlZ2VyKG1pbik7Ci0gIHNlYyAgPSBUb0ludGVnZXIoc2VjKTsKLSAgbXMgICA9
IFRvSW50ZWdlcihtcyk7Ci0KLSAgcmV0dXJuICgoaG91ciptc1BlckhvdXIpICsgKG1pbiptc1Bl
ck1pbnV0ZSkgKyAoc2VjKm1zUGVyU2Vjb25kKSArIG1zKTsKLX0KLQotLy8xNS45LjEuMTIgTWFr
ZURheSAoeWVhciwgbW9udGgsIGRhdGUpCi1mdW5jdGlvbiBNYWtlRGF5KHllYXIsIG1vbnRoLCBk
YXRlKSB7Ci0gIGlmICggIWlzRmluaXRlKHllYXIpIHx8ICFpc0Zpbml0ZShtb250aCkgfHwgIWlz
RmluaXRlKGRhdGUpKSB7Ci0gICAgcmV0dXJuIE51bWJlci5OYU47Ci0gIH0KLQotICB5ZWFyID0g
VG9JbnRlZ2VyKHllYXIpOwotICBtb250aCA9IFRvSW50ZWdlcihtb250aCk7Ci0gIGRhdGUgPSBU
b0ludGVnZXIoZGF0ZSApOwotCi0gIHZhciByZXN1bHQ1ID0geWVhciArIE1hdGguZmxvb3IobW9u
dGgvMTIpOwotICB2YXIgcmVzdWx0NiA9IG1vbnRoJTEyOwotCi0gIHZhciBzaWduID0gKCB5ZWFy
IDwgMTk3MCApID8gLTEgOiAxOwotICB2YXIgdCA9ICAgICggeWVhciA8IDE5NzAgKSA/IDEgOiAg
MDsKLSAgdmFyIHkgPSAgICAoIHllYXIgPCAxOTcwICkgPyAxOTY5IDogMTk3MDsKLQotICBpZigg
c2lnbiA9PSAtMSApewotICAgIGZvciAoIHkgPSAxOTY5OyB5ID49IHllYXI7IHkgKz0gc2lnbiAp
IHsKLSAgICAgIHQgKz0gc2lnbiAqIERheXNJblllYXIoeSkqbXNQZXJEYXk7Ci0gICAgfQotICB9
IGVsc2UgewotICAgIGZvciAoIHkgPSAxOTcwIDsgeSA8IHllYXI7IHkgKz0gc2lnbiApIHsKLSAg
ICAgIHQgKz0gc2lnbiAqIERheXNJblllYXIoeSkqbXNQZXJEYXk7Ci0gICAgfQotICB9Ci0KLSAg
dmFyIGxlYXAgPSAwOwotICBmb3IgKCB2YXIgbSA9IDA7IG0gPCBtb250aDsgbSsrICkgewotICAg
IC8vaWYgeWVhciBpcyBjaGFuZ2VkLCB0aGFuIHdlIG5lZWQgdG8gcmVjYWxjdWxhdGUgbGVlcAot
ICAgIGxlYXAgPSBJbkxlYXBZZWFyKHQpOwotICAgIHQgKz0gRGF5c0luTW9udGgobSwgbGVhcCkq
bXNQZXJEYXk7Ci0gIH0KLQotICBpZiAoIFllYXJGcm9tVGltZSh0KSAhPSByZXN1bHQ1ICkgewot
ICAgIHJldHVybiBOdW1iZXIuTmFOOwotICB9Ci0gIGlmICggTW9udGhGcm9tVGltZSh0KSAhPSBy
ZXN1bHQ2ICkgewotICAgIHJldHVybiBOdW1iZXIuTmFOOwotICB9Ci0gIGlmICggRGF0ZUZyb21U
aW1lKHQpICE9IDEgKSB7Ci0gICAgcmV0dXJuIE51bWJlci5OYU47Ci0gIH0KLQotICByZXR1cm4g
RGF5KHQpK2RhdGUtMTsKLX0KLQotLy8xNS45LjEuMTMgTWFrZURhdGUgKGRheSwgdGltZSkKLWZ1
bmN0aW9uIE1ha2VEYXRlKCBkYXksIHRpbWUgKSB7Ci0gIGlmKCFpc0Zpbml0ZShkYXkpIHx8ICFp
c0Zpbml0ZSh0aW1lKSkgewotICAgIHJldHVybiBOdW1iZXIuTmFOOwotICB9Ci0gIAotICByZXR1
cm4gZGF5Km1zUGVyRGF5K3RpbWU7Ci19Ci0KLS8vMTUuOS4xLjE0IFRpbWVDbGlwICh0aW1lKQot
ZnVuY3Rpb24gVGltZUNsaXAodGltZSkgewotICBpZighaXNGaW5pdGUodGltZSkgfHwgTWF0aC5h
YnModGltZSkgPiA4LjY0ZTE1KXsKLSAgICByZXR1cm4gTnVtYmVyLk5hTjsKLSAgfQotCi0gIHJl
dHVybiBUb0ludGVnZXIodGltZSk7Ci19Ci0KLS8vVGVzdCBGdW5jdGlvbnMKLWZ1bmN0aW9uIENv
bnN0cnVjdERhdGUoeWVhciwgbW9udGgsIGRhdGUsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBt
cyl7Ci0gIC8qCi0gICAqIDEuIENhbGwgVG9OdW1iZXIoeWVhcikKLSAgICogMi4gQ2FsbCBUb051
bWJlcihtb250aCkKLSAgICogMy4gSWYgZGF0ZSBpcyBzdXBwbGllZCB1c2UgVG9OdW1iZXIoZGF0
ZSk7IGVsc2UgdXNlIDEKLSAgICogNC4gSWYgaG91cnMgaXMgc3VwcGxpZWQgdXNlIFRvTnVtYmVy
KGhvdXJzKTsgZWxzZSB1c2UgMAotICAgKiA1LiBJZiBtaW51dGVzIGlzIHN1cHBsaWVkIHVzZSBU
b051bWJlcihtaW51dGVzKTsgZWxzZSB1c2UgMAotICAgKiA2LiBJZiBzZWNvbmRzIGlzIHN1cHBs
aWVkIHVzZSBUb051bWJlcihzZWNvbmRzKTsgZWxzZSB1c2UgMAotICAgKiA3LiBJZiBtcyBpcyBz
dXBwbGllZCB1c2UgVG9OdW1iZXIobXMpOyBlbHNlIHVzZSAwCi0gICAqIDguIElmIFJlc3VsdCgx
KSBpcyBub3QgTmFOIGFuZCAwIDw9IFRvSW50ZWdlcihSZXN1bHQoMSkpIDw9IDk5LCBSZXN1bHQo
OCkgaXMKLSAgICogMTkwMCtUb0ludGVnZXIoUmVzdWx0KDEpKTsgb3RoZXJ3aXNlLCBSZXN1bHQo
OCkgaXMgUmVzdWx0KDEpCi0gICAqIDkuIENvbXB1dGUgTWFrZURheShSZXN1bHQoOCksIFJlc3Vs
dCgyKSwgUmVzdWx0KDMpKQotICAgKiAxMC4gQ29tcHV0ZSBNYWtlVGltZShSZXN1bHQoNCksIFJl
c3VsdCg1KSwgUmVzdWx0KDYpLCBSZXN1bHQoNykpCi0gICAqIDExLiBDb21wdXRlIE1ha2VEYXRl
KFJlc3VsdCg5KSwgUmVzdWx0KDEwKSkKLSAgICogMTIuIFNldCB0aGUgW1tWYWx1ZV1dIHByb3Bl
cnR5IG9mIHRoZSBuZXdseSBjb25zdHJ1Y3RlZCBvYmplY3QgdG8gVGltZUNsaXAoVVRDKFJlc3Vs
dCgxMSkpKQotICAgKi8KLSAgdmFyIHIxID0gTnVtYmVyKHllYXIpOwotICB2YXIgcjIgPSBOdW1i
ZXIobW9udGgpOwotICB2YXIgcjMgPSAoKGRhdGUgJiYgYXJndW1lbnRzLmxlbmd0aCA+IDIpID8g
TnVtYmVyKGRhdGUpIDogMSk7Ci0gIHZhciByNCA9ICgoaG91cnMgJiYgYXJndW1lbnRzLmxlbmd0
aCA+IDMpID8gTnVtYmVyKGhvdXJzKSA6IDApOyAgIAotICB2YXIgcjUgPSAoKG1pbnV0ZXMgJiYg
YXJndW1lbnRzLmxlbmd0aCA+IDQpID8gTnVtYmVyKG1pbnV0ZXMpIDogMCk7ICAgCi0gIHZhciBy
NiA9ICgoc2Vjb25kcyAmJiBhcmd1bWVudHMubGVuZ3RoID4gNSkgPyBOdW1iZXIoc2Vjb25kcykg
OiAwKTsgICAKLSAgdmFyIHI3ID0gKChtcyAmJiBhcmd1bWVudHMubGVuZ3RoID4gNikgPyBOdW1i
ZXIobXMpIDogMCk7Ci0gIAotICB2YXIgcjggPSByMTsKLSAgCi0gIGlmKCFpc05hTihyMSkgJiYg
KDAgPD0gVG9JbnRlZ2VyKHIxKSkgJiYgKFRvSW50ZWdlcihyMSkgPD0gOTkpKQotICAgIHI4ID0g
MTkwMCtyMTsKLSAgCi0gIHZhciByOSA9IE1ha2VEYXkocjgsIHIyLCByMyk7Ci0gIHZhciByMTAg
PSBNYWtlVGltZShyNCwgcjUsIHI2LCByNyk7Ci0gIHZhciByMTEgPSBNYWtlRGF0ZShyOSwgcjEw
KTsKLSAgCi0gIHJldHVybiBUaW1lQ2xpcChVVEMocjExKSk7Ci19Ci0KLQotCi1pZiAoQ29uc3Ry
dWN0RGF0ZSgxODk5LCAxMSwgMzEsIDIzLCA1OSkgIT09IG5ldyBEYXRlKDE4OTksIDExLCAzMSwg
MjMsIDU5KS52YWx1ZU9mKCkpIHsKLSAgdGVzdEZhaWxlZCgiIzE6IEluY29ycmVjdCB2YWx1ZSBv
ZiBEYXRlIik7Ci19Ci0KLWlmIChDb25zdHJ1Y3REYXRlKDE4OTksIDEyLCAxLCAwLCAwKSAhPT0g
bmV3IERhdGUoMTg5OSwgMTIsIDEsIDAsIDApLnZhbHVlT2YoKSkgewotICB0ZXN0RmFpbGVkKCIj
MjogSW5jb3JyZWN0IHZhbHVlIG9mIERhdGUiKTsKLX0KLQotaWYgKENvbnN0cnVjdERhdGUoMTkw
MCwgMCwgMSwgMCwgMCkgIT09IG5ldyBEYXRlKDE5MDAsIDAsIDEsIDAsIDApLnZhbHVlT2YoKSkg
ewotICB0ZXN0RmFpbGVkKCIjMzogSW5jb3JyZWN0IHZhbHVlIG9mIERhdGUiKTsKLX0KLQotaWYg
KENvbnN0cnVjdERhdGUoMTk2OSwgMTEsIDMxLCAyMywgNTkpICE9PSBuZXcgRGF0ZSgxOTY5LCAx
MSwgMzEsIDIzLCA1OSkudmFsdWVPZigpKSB7Ci0gIHRlc3RGYWlsZWQoIiM0OiBJbmNvcnJlY3Qg
dmFsdWUgb2YgRGF0ZSIpOwotfQotCi1pZiAoQ29uc3RydWN0RGF0ZSgxOTY5LCAxMiwgMSwgMCwg
MCkgIT09IG5ldyBEYXRlKDE5NjksIDEyLCAxLCAwLCAwKS52YWx1ZU9mKCkpIHsKLSAgdGVzdEZh
aWxlZCgiIzU6IEluY29ycmVjdCB2YWx1ZSBvZiBEYXRlIik7Ci19Ci0KLWlmIChDb25zdHJ1Y3RE
YXRlKDE5NzAsIDAsIDEsIDAsIDApICE9PSBuZXcgRGF0ZSgxOTcwLCAwLCAxLCAwLCAwKS52YWx1
ZU9mKCkpIHsKLSAgdGVzdEZhaWxlZCgiIzY6IEluY29ycmVjdCB2YWx1ZSBvZiBEYXRlIik7Ci19
Ci0KLWlmIChDb25zdHJ1Y3REYXRlKDE5OTksIDExLCAzMSwgMjMsIDU5KSAhPT0gbmV3IERhdGUo
MTk5OSwgMTEsIDMxLCAyMywgNTkpLnZhbHVlT2YoKSkgewotICB0ZXN0RmFpbGVkKCIjNzogSW5j
b3JyZWN0IHZhbHVlIG9mIERhdGUiKTsKLX0KLQotaWYgKENvbnN0cnVjdERhdGUoMTk5OSwgMTIs
IDEsIDAsIDApICE9PSBuZXcgRGF0ZSgxOTk5LCAxMiwgMSwgMCwgMCkudmFsdWVPZigpKSB7Ci0g
IHRlc3RGYWlsZWQoIiM4OiBJbmNvcnJlY3QgdmFsdWUgb2YgRGF0ZSIpOwotfQotCi1pZiAoQ29u
c3RydWN0RGF0ZSgyMDAwLCAwLCAxLCAwLCAwKSAhPT0gbmV3IERhdGUoMjAwMCwgMCwgMSwgMCwg
MCkudmFsdWVPZigpKSB7Ci0gIHRlc3RGYWlsZWQoIiM5OiBJbmNvcnJlY3QgdmFsdWUgb2YgRGF0
ZSIpOwotfQotCi1pZiAoQ29uc3RydWN0RGF0ZSgyMDk5LCAxMSwgMzEsIDIzLCA1OSkgIT09IG5l
dyBEYXRlKDIwOTksIDExLCAzMSwgMjMsIDU5KS52YWx1ZU9mKCkpIHsKLSAgdGVzdEZhaWxlZCgi
IzEwOiBJbmNvcnJlY3QgdmFsdWUgb2YgRGF0ZSIpOwotfQotCi1pZiAoQ29uc3RydWN0RGF0ZSgy
MDk5LCAxMiwgMSwgMCwgMCkgIT09IG5ldyBEYXRlKDIwOTksIDEyLCAxLCAwLCAwKS52YWx1ZU9m
KCkpIHsKLSAgdGVzdEZhaWxlZCgiIzExOiBJbmNvcnJlY3QgdmFsdWUgb2YgRGF0ZSIpOwotfQot
Ci1pZiAoQ29uc3RydWN0RGF0ZSgyMTAwLCAwLCAxLCAwLCAwKSAhPT0gbmV3IERhdGUoMjEwMCwg
MCwgMSwgMCwgMCkudmFsdWVPZigpKSB7Ci0gIHRlc3RGYWlsZWQoIiMxMjogSW5jb3JyZWN0IHZh
bHVlIG9mIERhdGUiKTsKLX0KLQotfSBjYXRjaCAoZXgpIHsKLSAgICBzcHV0bmlrRXhjZXB0aW9u
ID0gZXg7Ci19Ci0KLXZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwotPC9zY3JpcHQ+Ci0K
LTxzY3JpcHQ+Ci1pZiAoIXN1Y2Nlc3NmdWxseVBhcnNlZCkKLSAgICBwcmludFRlc3RGYWlsZWQo
J3N1Y2Nlc3NmdWxseVBhcnNlZCBpcyBub3Qgc2V0Jyk7Ci1lbHNlIGlmIChzcHV0bmlrRXhjZXB0
aW9uKQotICAgIHByaW50VGVzdEZhaWxlZChzcHV0bmlrRXhjZXB0aW9uKTsKLWVsc2UKLSAgICBw
cmludFRlc3RQYXNzZWQoIiIpOwotdGVzdFByaW50KCc8YnIgLz48c3BhbiBjbGFzcz0icGFzcyI+
VEVTVCBDT01QTEVURTwvc3Bhbj4nKTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3B1dG5pay9Db25mb3JtYW5jZS8xNV9OYXRpdmVfT2JqZWN0
cy8xNS45X0RhdGUvMTUuOS4zL1MxNS45LjMuMV9BNV9UNS5odG1sIGIvTGF5b3V0VGVzdHMvc3B1
dG5pay9Db25mb3JtYW5jZS8xNV9OYXRpdmVfT2JqZWN0cy8xNS45X0RhdGUvMTUuOS4zL1MxNS45
LjMuMV9BNV9UNS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhmYTk2MGVkMTI1MGM1NDU3MWQyMjY5NDk3MGI2
MTQwNjdjY2QyNTIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zcHV0bmlrL0NvbmZv
cm1hbmNlLzE1X05hdGl2ZV9PYmplY3RzLzE1LjlfRGF0ZS8xNS45LjMvUzE1LjkuMy4xX0E1X1Q1
Lmh0bWwKQEAgLTAsMCArMSw1MjIgQEAKKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBjaGFyc2V0PSd1
dGYtOCc+Cis8c3R5bGU+CisucGFzcyB7CisgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgY29s
b3I6IGdyZWVuOworfQorLmZhaWwgeworICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgIGNvbG9y
OiByZWQ7Cit9Cis8L3N0eWxlPgorCis8c2NyaXB0PgoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQor
ICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworCitmdW5jdGlvbiBTcHV0bmlrRXJyb3IobWVz
c2FnZSkKK3sKKyAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOworfQorCitTcHV0bmlrRXJyb3Iu
cHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkKK3sKKyAgICByZXR1cm4gJ1NwdXRuaWtF
cnJvcjogJyArIHRoaXMubWVzc2FnZTsKK307CisKK3ZhciBzcHV0bmlrRXhjZXB0aW9uOworCitm
dW5jdGlvbiB0ZXN0UHJpbnQobXNnKQoreworICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgic3BhbiIpOworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIiku
YXBwZW5kQ2hpbGQoc3Bhbik7IC8vIGluc2VydCBpdCBmaXJzdCBzbyBYSFRNTCBrbm93cyB0aGUg
bmFtZXNwYWNlIAorICAgIHNwYW4uaW5uZXJIVE1MID0gbXNnICsgJzxiciAvPic7Cit9CisKK2Z1
bmN0aW9uIGVzY2FwZUhUTUwodGV4dCkKK3sKKyAgICByZXR1cm4gdGV4dC50b1N0cmluZygpLnJl
cGxhY2UoLyYvZywgIiZhbXA7IikucmVwbGFjZSgvPC9nLCAiJmx0OyIpOworfQorCitmdW5jdGlv
biBwcmludFRlc3RQYXNzZWQobXNnKQoreworICAgIHRlc3RQcmludCgnPHNwYW4+PHNwYW4gY2xh
c3M9InBhc3MiPlBBU1M8L3NwYW4+ICcgKyBlc2NhcGVIVE1MKG1zZykgKyAnPC9zcGFuPicpOwor
fQorCitmdW5jdGlvbiBwcmludFRlc3RGYWlsZWQobXNnKQoreworICAgIHRlc3RQcmludCgnPHNw
YW4+PHNwYW4gY2xhc3M9ImZhaWwiPkZBSUw8L3NwYW4+ICcgKyBlc2NhcGVIVE1MKG1zZykgKyAn
PC9zcGFuPicpOworfQorCitmdW5jdGlvbiB0ZXN0RmFpbGVkKG1zZykKK3sKKyAgICB0aHJvdyBu
ZXcgU3B1dG5pa0Vycm9yKG1zZyk7Cit9CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSBmYWxz
ZTsKKzwvc2NyaXB0PgorCis8L2hlYWQ+Cis8Ym9keT4KKzxwPlMxNS45LjMuMV9BNV9UNTwvcD4K
KzxkaXYgaWQ9J2NvbnNvbGUnPjwvZGl2PgorPHNjcmlwdD4KK3RyeSB7CisKKy8qKgorICogQG5h
bWU6IFMxNS45LjMuMV9BNV9UNTsKKyAqIEBzZWN0aW9uOiAxNS45LjMuMTsKKyAqIEBhc3NlcnRp
b246IFRoZSBbW1ZhbHVlXV0gcHJvcGVydHkgb2YgdGhlIG5ld2x5IGNvbnN0cnVjdGVkIG9iamVj
dCAKKyAqIGlzIHNldCBieSBmb2xsb3dpbmcgc3RlcHM6CisgKiA4LiBJZiBSZXN1bHQoMSkgaXMg
bm90IE5hTiBhbmQgMCA8PSBUb0ludGVnZXIoUmVzdWx0KDEpKSA8PSA5OSwgUmVzdWx0KDgpIGlz
CisgKiAxOTAwK1RvSW50ZWdlcihSZXN1bHQoMSkpOyBvdGhlcndpc2UsIFJlc3VsdCg4KSBpcyBS
ZXN1bHQoMSkKKyAqIDkuIENvbXB1dGUgTWFrZURheShSZXN1bHQoOCksIFJlc3VsdCgyKSwgUmVz
dWx0KDMpKQorICogMTAuIENvbXB1dGUgTWFrZVRpbWUoUmVzdWx0KDQpLCBSZXN1bHQoNSksIFJl
c3VsdCg2KSwgUmVzdWx0KDcpKQorICogMTEuIENvbXB1dGUgTWFrZURhdGUoUmVzdWx0KDkpLCBS
ZXN1bHQoMTApKQorICogMTIuIFNldCB0aGUgW1tWYWx1ZV1dIHByb3BlcnR5IG9mIHRoZSBuZXds
eSBjb25zdHJ1Y3RlZCBvYmplY3QgdG8gCisgKiBUaW1lQ2xpcChVVEMoUmVzdWx0KDExKSkpOwor
ICogQGRlc2NyaXB0aW9uOiA2IGFyZ3VtZW50cywgKHllYXIsIG1vbnRoLCBkYXRlLCBob3Vycywg
bWludXRlcywgc2Vjb25kcyk7CisgKi8KKwordmFyICREU1RfZW5kX2hvdXIgPSAyOwordmFyICRE
U1RfZW5kX21pbnV0ZXMgPSAwOwordmFyICREU1RfZW5kX21vbnRoID0gMTA7Cit2YXIgJERTVF9l
bmRfc3VuZGF5ID0gJ2ZpcnN0JzsKK3ZhciAkRFNUX3N0YXJ0X2hvdXIgPSAyOwordmFyICREU1Rf
c3RhcnRfbWludXRlcyA9IDA7Cit2YXIgJERTVF9zdGFydF9tb250aCA9IDI7Cit2YXIgJERTVF9z
dGFydF9zdW5kYXkgPSAnZmlyc3QnOwordmFyICRMb2NhbFRaID0gLTg7CitmdW5jdGlvbiBUb0lu
dGVnZXIocCkgeworICB4ID0gTnVtYmVyKHApOworCisgIGlmKGlzTmFOKHgpKXsKKyAgICByZXR1
cm4gKzA7CisgIH0KKyAgCisgIGlmKCh4ID09PSArMCkgCisgIHx8ICh4ID09PSAtMCkgCisgIHx8
ICh4ID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpIAorICB8fCAoeCA9PT0gTnVtYmVyLk5F
R0FUSVZFX0lORklOSVRZKSl7CisgICAgIHJldHVybiB4OworICB9CisKKyAgdmFyIHNpZ24gPSAo
IHggPCAwICkgPyAtMSA6IDE7CisKKyAgcmV0dXJuIChzaWduKk1hdGguZmxvb3IoTWF0aC5hYnMo
eCkpKTsKK30KKworCit2YXIgSG91cnNQZXJEYXkgPSAyNDsKK3ZhciBNaW51dGVzUGVySG91ciA9
IDYwOwordmFyIFNlY29uZHNQZXJNaW51dGUgPSA2MDsKKwordmFyIG1zUGVyRGF5ID0gODY0MDAw
MDA7Cit2YXIgbXNQZXJTZWNvbmQgPSAxMDAwOwordmFyIG1zUGVyTWludXRlID0gNjAwMDA7Cit2
YXIgbXNQZXJIb3VyID0gMzYwMDAwMDsKKwordmFyIGRhdGVfMTg5OV9lbmQgPSAtMjIwODk4ODgw
MDAwMTsKK3ZhciBkYXRlXzE5MDBfc3RhcnQgPSAtMjIwODk4ODgwMDAwMDsKK3ZhciBkYXRlXzE5
NjlfZW5kID0gLTE7Cit2YXIgZGF0ZV8xOTcwX3N0YXJ0ID0gMDsKK3ZhciBkYXRlXzE5OTlfZW5k
ID0gOTQ2Njg0Nzk5OTk5OwordmFyIGRhdGVfMjAwMF9zdGFydCA9IDk0NjY4NDgwMDAwMDsKK3Zh
ciBkYXRlXzIwOTlfZW5kID0gNDEwMjQ0NDc5OTk5OTsKK3ZhciBkYXRlXzIxMDBfc3RhcnQgPSA0
MTAyNDQ0ODAwMDAwOworCisKKy8vMTUuOS4xLjIgRGF5IE51bWJlciBhbmQgVGltZSB3aXRoaW4g
RGF5CitmdW5jdGlvbiBEYXkodCkgeworICByZXR1cm4gTWF0aC5mbG9vcih0L21zUGVyRGF5KTsK
K30KKworZnVuY3Rpb24gVGltZVdpdGhpbkRheSh0KSB7CisgIHJldHVybiB0JW1zUGVyRGF5Owor
fQorCisvLzE1LjkuMS4zIFllYXIgTnVtYmVyCitmdW5jdGlvbiBEYXlzSW5ZZWFyKHkpeworICBp
Zih5JTQgIT0gMCkgcmV0dXJuIDM2NTsKKyAgaWYoeSU0ID09IDAgJiYgeSUxMDAgIT0gMCkgcmV0
dXJuIDM2NjsKKyAgaWYoeSUxMDAgPT0gMCAmJiB5JTQwMCAhPSAwKSByZXR1cm4gMzY1OworICBp
Zih5JTQwMCA9PSAwKSByZXR1cm4gMzY2OworfQorCitmdW5jdGlvbiBEYXlGcm9tWWVhcih5KSB7
CisgIHJldHVybiAoMzY1Kih5LTE5NzApCisgICAgICAgICAgKyBNYXRoLmZsb29yKCh5LTE5Njkp
LzQpCisgICAgICAgICAgLSBNYXRoLmZsb29yKCh5LTE5MDEpLzEwMCkKKyAgICAgICAgICArIE1h
dGguZmxvb3IoKHktMTYwMSkvNDAwKSk7Cit9CisKK2Z1bmN0aW9uIFRpbWVGcm9tWWVhcih5KXsK
KyAgcmV0dXJuIG1zUGVyRGF5KkRheUZyb21ZZWFyKHkpOworfQorCitmdW5jdGlvbiBZZWFyRnJv
bVRpbWUodCkgeworICB0ID0gTnVtYmVyKHQpOworICB2YXIgc2lnbiA9ICggdCA8IDAgKSA/IC0x
IDogMTsKKyAgdmFyIHllYXIgPSAoIHNpZ24gPCAwICkgPyAxOTY5IDogMTk3MDsKKyAgCisgIGZv
cih2YXIgdGltZSA9IDA7O3llYXIgKz0gc2lnbil7CisgICAgdGltZSA9IFRpbWVGcm9tWWVhcih5
ZWFyKTsKKyAgICAKKyAgICBpZihzaWduID4gMCAmJiB0aW1lID4gdCl7CisgICAgICB5ZWFyIC09
IHNpZ247CisgICAgICBicmVhazsKKyAgICB9CisgICAgZWxzZSBpZihzaWduIDwgMCAmJiB0aW1l
IDw9IHQpeworICAgICAgYnJlYWs7CisgICAgfQorICB9OworICByZXR1cm4geWVhcjsKK30KKyAg
CitmdW5jdGlvbiBJbkxlYXBZZWFyKHQpeworICBpZihEYXlzSW5ZZWFyKFllYXJGcm9tVGltZSh0
KSkgPT0gMzY1KQorICAgIHJldHVybiAwOworICAKKyAgaWYoRGF5c0luWWVhcihZZWFyRnJvbVRp
bWUodCkpID09IDM2NikKKyAgICByZXR1cm4gMTsKK30KKworZnVuY3Rpb24gRGF5V2l0aGluWWVh
cih0KSB7CisgIHJldHVybiBEYXkodCktRGF5RnJvbVllYXIoWWVhckZyb21UaW1lKHQpKTsKK30K
KworLy8xNS45LjEuNCBNb250aCBOdW1iZXIKK2Z1bmN0aW9uIE1vbnRoRnJvbVRpbWUodCl7Cisg
IHZhciBkYXkgPSBEYXlXaXRoaW5ZZWFyKHQpOworICB2YXIgbGVhcCA9IEluTGVhcFllYXIodCk7
CisKKyAgaWYoKDAgPD0gZGF5KSAmJiAoZGF5IDwgMzEpKSByZXR1cm4gMDsKKyAgaWYoKDMxIDw9
IGRheSkgJiYgKGRheSA8ICg1OStsZWFwKSkpIHJldHVybiAxOworICBpZigoKDU5K2xlYXApIDw9
IGRheSkgJiYgKGRheSA8ICg5MCtsZWFwKSkpIHJldHVybiAyOworICBpZigoKDkwK2xlYXApIDw9
IGRheSkgJiYgKGRheSA8ICgxMjArbGVhcCkpKSByZXR1cm4gMzsKKyAgaWYoKCgxMjArbGVhcCkg
PD0gZGF5KSAmJiAoZGF5IDwgKDE1MStsZWFwKSkpIHJldHVybiA0OworICBpZigoKDE1MStsZWFw
KSA8PSBkYXkpICYmIChkYXkgPCAoMTgxK2xlYXApKSkgcmV0dXJuIDU7CisgIGlmKCgoMTgxK2xl
YXApIDw9IGRheSkgJiYgKGRheSA8ICgyMTIrbGVhcCkpKSByZXR1cm4gNjsKKyAgaWYoKCgyMTIr
bGVhcCkgPD0gZGF5KSAmJiAoZGF5IDwgKDI0MytsZWFwKSkpIHJldHVybiA3OworICBpZigoKDI0
MytsZWFwKSA8PSBkYXkpICYmIChkYXkgPCAoMjczK2xlYXApKSkgcmV0dXJuIDg7CisgIGlmKCgo
MjczK2xlYXApIDw9IGRheSkgJiYgKGRheSA8ICgzMDQrbGVhcCkpKSByZXR1cm4gOTsKKyAgaWYo
KCgzMDQrbGVhcCkgPD0gZGF5KSAmJiAoZGF5IDwgKDMzNCtsZWFwKSkpIHJldHVybiAxMDsKKyAg
aWYoKCgzMzQrbGVhcCkgPD0gZGF5KSAmJiAoZGF5IDwgKDM2NStsZWFwKSkpIHJldHVybiAxMTsK
K30KKworLy8xNS45LjEuNSBEYXRlIE51bWJlcgorZnVuY3Rpb24gRGF0ZUZyb21UaW1lKHQpIHsK
KyAgdmFyIGRheSA9IERheVdpdGhpblllYXIodCk7CisgIHZhciBtb250aCA9IE1vbnRoRnJvbVRp
bWUodCk7CisgIHZhciBsZWFwID0gSW5MZWFwWWVhcih0KTsKKworICBpZihtb250aCA9PSAwKSBy
ZXR1cm4gZGF5KzE7CisgIGlmKG1vbnRoID09IDEpIHJldHVybiBkYXktMzA7CisgIGlmKG1vbnRo
ID09IDIpIHJldHVybiBkYXktNTgtbGVhcDsKKyAgaWYobW9udGggPT0gMykgcmV0dXJuIGRheS04
OS1sZWFwOworICBpZihtb250aCA9PSA0KSByZXR1cm4gZGF5LTExOS1sZWFwOworICBpZihtb250
aCA9PSA1KSByZXR1cm4gZGF5LTE1MC1sZWFwOworICBpZihtb250aCA9PSA2KSByZXR1cm4gZGF5
LTE4MC1sZWFwOworICBpZihtb250aCA9PSA3KSByZXR1cm4gZGF5LTIxMS1sZWFwOworICBpZiht
b250aCA9PSA4KSByZXR1cm4gZGF5LTI0Mi1sZWFwOworICBpZihtb250aCA9PSA5KSByZXR1cm4g
ZGF5LTI3Mi1sZWFwOworICBpZihtb250aCA9PSAxMCkgcmV0dXJuIGRheS0zMDMtbGVhcDsKKyAg
aWYobW9udGggPT0gMTEpIHJldHVybiBkYXktMzMzLWxlYXA7Cit9CisKKy8vMTUuOS4xLjYgV2Vl
ayBEYXkKK2Z1bmN0aW9uIFdlZWtEYXkodCkgeworICB2YXIgd2Vla2RheSA9IChEYXkodCkrNCkl
NzsKKyAgcmV0dXJuICh3ZWVrZGF5IDwgMCA/IDcrd2Vla2RheSA6IHdlZWtkYXkpOworfQorCisv
LzE1LjkuMS45IERheWxpZ2h0IFNhdmluZyBUaW1lIEFkanVzdG1lbnQKK3ZhciBMb2NhbFRaQSA9
ICRMb2NhbFRaKm1zUGVySG91cjsKKworZnVuY3Rpb24gRGF5c0luTW9udGgobSwgbGVhcCkgewor
ICBtID0gbSUxMjsKKyAgCisgIC8vQXByaWwsIEp1bmUsIFNlcHQsIE5vdgorICBpZihtID09IDMg
fHwgbSA9PSA1IHx8IG0gPT0gOCB8fCBtID09IDEwICkgeworICAgIHJldHVybiAzMDsKKyAgfQor
CisgIC8vSmFuLCBNYXJjaCwgTWF5LCBKdWx5LCBBdWcsIE9jdCwgRGVjCisgIGlmKG0gPT0gMCB8
fCBtID09IDIgfHwgbSA9PSA0IHx8IG0gPT0gNiB8fCBtID09IDcgfHwgbSA9PSA5IHx8IG0gPT0g
MTEpeworICAgIHJldHVybiAzMTsKKyAgfQorCisgIC8vRmViCisgIHJldHVybiAyOCtsZWFwOwor
fQorCitmdW5jdGlvbiBHZXRTdW5kYXlJbk1vbnRoKHQsIG0sIGNvdW50KXsKKyAgdmFyIHllYXIg
PSBZZWFyRnJvbVRpbWUodCk7CisgIHZhciBsZWFwID0gSW5MZWFwWWVhcih0KTsKKyAgdmFyIGRh
eSA9IDA7CisgIAorICBpZihtID49IDEpIGRheSArPSBEYXlzSW5Nb250aCgwLCBsZWFwKTsKKyAg
aWYobSA+PSAyKSBkYXkgKz0gRGF5c0luTW9udGgoMSwgbGVhcCk7CisgIGlmKG0gPj0gMykgZGF5
ICs9IERheXNJbk1vbnRoKDIsIGxlYXApOworICBpZihtID49IDQpIGRheSArPSBEYXlzSW5Nb250
aCgzLCBsZWFwKTsKKyAgaWYobSA+PSA1KSBkYXkgKz0gRGF5c0luTW9udGgoNCwgbGVhcCk7Cisg
IGlmKG0gPj0gNikgZGF5ICs9IERheXNJbk1vbnRoKDUsIGxlYXApOworICBpZihtID49IDcpIGRh
eSArPSBEYXlzSW5Nb250aCg2LCBsZWFwKTsKKyAgaWYobSA+PSA4KSBkYXkgKz0gRGF5c0luTW9u
dGgoNywgbGVhcCk7CisgIGlmKG0gPj0gOSkgZGF5ICs9IERheXNJbk1vbnRoKDgsIGxlYXApOwor
ICBpZihtID49IDEwKSBkYXkgKz0gRGF5c0luTW9udGgoOSwgbGVhcCk7CisgIGlmKG0gPj0gMTEp
IGRheSArPSBEYXlzSW5Nb250aCgxMCwgbGVhcCk7CisgIAorICB2YXIgbW9udGhfc3RhcnQgPSBU
aW1lRnJvbVllYXIoeWVhcikrZGF5Km1zUGVyRGF5OworICB2YXIgc3VuZGF5ID0gMDsKKyAgCisg
IGlmKGNvdW50ID09PSAibGFzdCIpeworICAgIGZvcih2YXIgbGFzdF9zdW5kYXkgPSBtb250aF9z
dGFydCtEYXlzSW5Nb250aChtLCBsZWFwKSptc1BlckRheTsgCisgICAgICBXZWVrRGF5KGxhc3Rf
c3VuZGF5KT4wOworICAgICAgbGFzdF9zdW5kYXkgLT0gbXNQZXJEYXkKKyAgICApe307CisgICAg
c3VuZGF5ID0gbGFzdF9zdW5kYXk7CisgIH0KKyAgZWxzZSB7CisgICAgZm9yKHZhciBmaXJzdF9z
dW5kYXkgPSBtb250aF9zdGFydDsgCisgICAgICBXZWVrRGF5KGZpcnN0X3N1bmRheSk+MDsKKyAg
ICAgIGZpcnN0X3N1bmRheSArPSBtc1BlckRheQorICAgICl7fTsKKyAgICBzdW5kYXkgPSBmaXJz
dF9zdW5kYXkrNyptc1BlckRheSooY291bnQtMSk7CisgIH0KKyAgCisgIHJldHVybiBzdW5kYXk7
Cit9CisKK2Z1bmN0aW9uIERheWxpZ2h0U2F2aW5nVEEodCkgeworICB0ID0gdC1Mb2NhbFRaQTsK
KworICB2YXIgRFNUX3N0YXJ0ID0gR2V0U3VuZGF5SW5Nb250aCh0LCAkRFNUX3N0YXJ0X21vbnRo
LCAkRFNUX3N0YXJ0X3N1bmRheSkKKyAgICAgICAgICAgICAgICAgICskRFNUX3N0YXJ0X2hvdXIq
bXNQZXJIb3VyCisgICAgICAgICAgICAgICAgICArJERTVF9zdGFydF9taW51dGVzKm1zUGVyTWlu
dXRlOworICAgICAgICAgICAgICAgICAgCisgIHZhciBrID0gbmV3IERhdGUoRFNUX3N0YXJ0KTsK
KyAgCisgIHZhciBEU1RfZW5kICAgPSBHZXRTdW5kYXlJbk1vbnRoKHQsICREU1RfZW5kX21vbnRo
LCAkRFNUX2VuZF9zdW5kYXkpCisgICAgICAgICAgICAgICAgICArJERTVF9lbmRfaG91ciptc1Bl
ckhvdXIKKyAgICAgICAgICAgICAgICAgICskRFNUX2VuZF9taW51dGVzKm1zUGVyTWludXRlOwor
CisgIGlmICggdCA+PSBEU1Rfc3RhcnQgJiYgdCA8IERTVF9lbmQgKSB7CisgICAgcmV0dXJuIG1z
UGVySG91cjsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gMDsKKyAgfQorfQorCisvLzE1LjkuMS45
IExvY2FsIFRpbWUKK2Z1bmN0aW9uIExvY2FsVGltZSh0KXsKKyAgcmV0dXJuIHQrTG9jYWxUWkEr
RGF5bGlnaHRTYXZpbmdUQSh0KTsKK30KKworZnVuY3Rpb24gVVRDKHQpIHsKKyAgcmV0dXJuIHQt
TG9jYWxUWkEtRGF5bGlnaHRTYXZpbmdUQSh0LUxvY2FsVFpBKTsKK30KKworLy8xNS45LjEuMTAg
SG91cnMsIE1pbnV0ZXMsIFNlY29uZCwgYW5kIE1pbGxpc2Vjb25kcworZnVuY3Rpb24gSG91ckZy
b21UaW1lKHQpeworICByZXR1cm4gTWF0aC5mbG9vcih0L21zUGVySG91ciklSG91cnNQZXJEYXk7
Cit9CisKK2Z1bmN0aW9uIE1pbkZyb21UaW1lKHQpeworICByZXR1cm4gTWF0aC5mbG9vcih0L21z
UGVyTWludXRlKSVNaW51dGVzUGVySG91cjsKK30KKworZnVuY3Rpb24gU2VjRnJvbVRpbWUodCl7
CisgIHJldHVybiBNYXRoLmZsb29yKHQvbXNQZXJTZWNvbmQpJVNlY29uZHNQZXJNaW51dGU7Cit9
CisKK2Z1bmN0aW9uIG1zRnJvbVRpbWUodCl7CisgIHJldHVybiB0JW1zUGVyU2Vjb25kOworfQor
CisvLzE1LjkuMS4xMSBNYWtlVGltZSAoaG91ciwgbWluLCBzZWMsIG1zKQorZnVuY3Rpb24gTWFr
ZVRpbWUoaG91ciwgbWluLCBzZWMsIG1zKXsKKyAgaWYgKCAhaXNGaW5pdGUoaG91cikgfHwgIWlz
RmluaXRlKG1pbikgfHwgIWlzRmluaXRlKHNlYykgfHwgIWlzRmluaXRlKG1zKSkgeworICAgIHJl
dHVybiBOdW1iZXIuTmFOOworICB9CisKKyAgaG91ciA9IFRvSW50ZWdlcihob3VyKTsKKyAgbWlu
ICA9IFRvSW50ZWdlcihtaW4pOworICBzZWMgID0gVG9JbnRlZ2VyKHNlYyk7CisgIG1zICAgPSBU
b0ludGVnZXIobXMpOworCisgIHJldHVybiAoKGhvdXIqbXNQZXJIb3VyKSArIChtaW4qbXNQZXJN
aW51dGUpICsgKHNlYyptc1BlclNlY29uZCkgKyBtcyk7Cit9CisKKy8vMTUuOS4xLjEyIE1ha2VE
YXkgKHllYXIsIG1vbnRoLCBkYXRlKQorZnVuY3Rpb24gTWFrZURheSh5ZWFyLCBtb250aCwgZGF0
ZSkgeworICBpZiAoICFpc0Zpbml0ZSh5ZWFyKSB8fCAhaXNGaW5pdGUobW9udGgpIHx8ICFpc0Zp
bml0ZShkYXRlKSkgeworICAgIHJldHVybiBOdW1iZXIuTmFOOworICB9CisKKyAgeWVhciA9IFRv
SW50ZWdlcih5ZWFyKTsKKyAgbW9udGggPSBUb0ludGVnZXIobW9udGgpOworICBkYXRlID0gVG9J
bnRlZ2VyKGRhdGUgKTsKKworICB2YXIgcmVzdWx0NSA9IHllYXIgKyBNYXRoLmZsb29yKG1vbnRo
LzEyKTsKKyAgdmFyIHJlc3VsdDYgPSBtb250aCUxMjsKKworICB2YXIgc2lnbiA9ICggeWVhciA8
IDE5NzAgKSA/IC0xIDogMTsKKyAgdmFyIHQgPSAgICAoIHllYXIgPCAxOTcwICkgPyAxIDogIDA7
CisgIHZhciB5ID0gICAgKCB5ZWFyIDwgMTk3MCApID8gMTk2OSA6IDE5NzA7CisKKyAgaWYoIHNp
Z24gPT0gLTEgKXsKKyAgICBmb3IgKCB5ID0gMTk2OTsgeSA+PSB5ZWFyOyB5ICs9IHNpZ24gKSB7
CisgICAgICB0ICs9IHNpZ24gKiBEYXlzSW5ZZWFyKHkpKm1zUGVyRGF5OworICAgIH0KKyAgfSBl
bHNlIHsKKyAgICBmb3IgKCB5ID0gMTk3MCA7IHkgPCB5ZWFyOyB5ICs9IHNpZ24gKSB7CisgICAg
ICB0ICs9IHNpZ24gKiBEYXlzSW5ZZWFyKHkpKm1zUGVyRGF5OworICAgIH0KKyAgfQorCisgIHZh
ciBsZWFwID0gMDsKKyAgZm9yICggdmFyIG0gPSAwOyBtIDwgbW9udGg7IG0rKyApIHsKKyAgICAv
L2lmIHllYXIgaXMgY2hhbmdlZCwgdGhhbiB3ZSBuZWVkIHRvIHJlY2FsY3VsYXRlIGxlZXAKKyAg
ICBsZWFwID0gSW5MZWFwWWVhcih0KTsKKyAgICB0ICs9IERheXNJbk1vbnRoKG0sIGxlYXApKm1z
UGVyRGF5OworICB9CisKKyAgaWYgKCBZZWFyRnJvbVRpbWUodCkgIT0gcmVzdWx0NSApIHsKKyAg
ICByZXR1cm4gTnVtYmVyLk5hTjsKKyAgfQorICBpZiAoIE1vbnRoRnJvbVRpbWUodCkgIT0gcmVz
dWx0NiApIHsKKyAgICByZXR1cm4gTnVtYmVyLk5hTjsKKyAgfQorICBpZiAoIERhdGVGcm9tVGlt
ZSh0KSAhPSAxICkgeworICAgIHJldHVybiBOdW1iZXIuTmFOOworICB9CisKKyAgcmV0dXJuIERh
eSh0KStkYXRlLTE7Cit9CisKKy8vMTUuOS4xLjEzIE1ha2VEYXRlIChkYXksIHRpbWUpCitmdW5j
dGlvbiBNYWtlRGF0ZSggZGF5LCB0aW1lICkgeworICBpZighaXNGaW5pdGUoZGF5KSB8fCAhaXNG
aW5pdGUodGltZSkpIHsKKyAgICByZXR1cm4gTnVtYmVyLk5hTjsKKyAgfQorICAKKyAgcmV0dXJu
IGRheSptc1BlckRheSt0aW1lOworfQorCisvLzE1LjkuMS4xNCBUaW1lQ2xpcCAodGltZSkKK2Z1
bmN0aW9uIFRpbWVDbGlwKHRpbWUpIHsKKyAgaWYoIWlzRmluaXRlKHRpbWUpIHx8IE1hdGguYWJz
KHRpbWUpID4gOC42NGUxNSl7CisgICAgcmV0dXJuIE51bWJlci5OYU47CisgIH0KKworICByZXR1
cm4gVG9JbnRlZ2VyKHRpbWUpOworfQorCisvL1Rlc3QgRnVuY3Rpb25zCitmdW5jdGlvbiBDb25z
dHJ1Y3REYXRlKHllYXIsIG1vbnRoLCBkYXRlLCBob3VycywgbWludXRlcywgc2Vjb25kcywgbXMp
eworICAvKgorICAgKiAxLiBDYWxsIFRvTnVtYmVyKHllYXIpCisgICAqIDIuIENhbGwgVG9OdW1i
ZXIobW9udGgpCisgICAqIDMuIElmIGRhdGUgaXMgc3VwcGxpZWQgdXNlIFRvTnVtYmVyKGRhdGUp
OyBlbHNlIHVzZSAxCisgICAqIDQuIElmIGhvdXJzIGlzIHN1cHBsaWVkIHVzZSBUb051bWJlciho
b3Vycyk7IGVsc2UgdXNlIDAKKyAgICogNS4gSWYgbWludXRlcyBpcyBzdXBwbGllZCB1c2UgVG9O
dW1iZXIobWludXRlcyk7IGVsc2UgdXNlIDAKKyAgICogNi4gSWYgc2Vjb25kcyBpcyBzdXBwbGll
ZCB1c2UgVG9OdW1iZXIoc2Vjb25kcyk7IGVsc2UgdXNlIDAKKyAgICogNy4gSWYgbXMgaXMgc3Vw
cGxpZWQgdXNlIFRvTnVtYmVyKG1zKTsgZWxzZSB1c2UgMAorICAgKiA4LiBJZiBSZXN1bHQoMSkg
aXMgbm90IE5hTiBhbmQgMCA8PSBUb0ludGVnZXIoUmVzdWx0KDEpKSA8PSA5OSwgUmVzdWx0KDgp
IGlzCisgICAqIDE5MDArVG9JbnRlZ2VyKFJlc3VsdCgxKSk7IG90aGVyd2lzZSwgUmVzdWx0KDgp
IGlzIFJlc3VsdCgxKQorICAgKiA5LiBDb21wdXRlIE1ha2VEYXkoUmVzdWx0KDgpLCBSZXN1bHQo
MiksIFJlc3VsdCgzKSkKKyAgICogMTAuIENvbXB1dGUgTWFrZVRpbWUoUmVzdWx0KDQpLCBSZXN1
bHQoNSksIFJlc3VsdCg2KSwgUmVzdWx0KDcpKQorICAgKiAxMS4gQ29tcHV0ZSBNYWtlRGF0ZShS
ZXN1bHQoOSksIFJlc3VsdCgxMCkpCisgICAqIDEyLiBTZXQgdGhlIFtbVmFsdWVdXSBwcm9wZXJ0
eSBvZiB0aGUgbmV3bHkgY29uc3RydWN0ZWQgb2JqZWN0IHRvIFRpbWVDbGlwKFVUQyhSZXN1bHQo
MTEpKSkKKyAgICovCisgIHZhciByMSA9IE51bWJlcih5ZWFyKTsKKyAgdmFyIHIyID0gTnVtYmVy
KG1vbnRoKTsKKyAgdmFyIHIzID0gKChkYXRlICYmIGFyZ3VtZW50cy5sZW5ndGggPiAyKSA/IE51
bWJlcihkYXRlKSA6IDEpOworICB2YXIgcjQgPSAoKGhvdXJzICYmIGFyZ3VtZW50cy5sZW5ndGgg
PiAzKSA/IE51bWJlcihob3VycykgOiAwKTsgICAKKyAgdmFyIHI1ID0gKChtaW51dGVzICYmIGFy
Z3VtZW50cy5sZW5ndGggPiA0KSA/IE51bWJlcihtaW51dGVzKSA6IDApOyAgIAorICB2YXIgcjYg
PSAoKHNlY29uZHMgJiYgYXJndW1lbnRzLmxlbmd0aCA+IDUpID8gTnVtYmVyKHNlY29uZHMpIDog
MCk7ICAgCisgIHZhciByNyA9ICgobXMgJiYgYXJndW1lbnRzLmxlbmd0aCA+IDYpID8gTnVtYmVy
KG1zKSA6IDApOworICAKKyAgdmFyIHI4ID0gcjE7CisgIAorICBpZighaXNOYU4ocjEpICYmICgw
IDw9IFRvSW50ZWdlcihyMSkpICYmIChUb0ludGVnZXIocjEpIDw9IDk5KSkKKyAgICByOCA9IDE5
MDArcjE7CisgIAorICB2YXIgcjkgPSBNYWtlRGF5KHI4LCByMiwgcjMpOworICB2YXIgcjEwID0g
TWFrZVRpbWUocjQsIHI1LCByNiwgcjcpOworICB2YXIgcjExID0gTWFrZURhdGUocjksIHIxMCk7
CisgIAorICByZXR1cm4gVGltZUNsaXAoVVRDKHIxMSkpOworfQorCisKKworaWYgKENvbnN0cnVj
dERhdGUoMTg5OSwgMTEsIDMxLCAyMywgNTksIDU5KSAhPT0gbmV3IERhdGUoMTg5OSwgMTEsIDMx
LCAyMywgNTksIDU5KS52YWx1ZU9mKCkpIHsKKyAgdGVzdEZhaWxlZCgiIzE6IEluY29ycmVjdCB2
YWx1ZSBvZiBEYXRlIik7Cit9CisKK2lmIChDb25zdHJ1Y3REYXRlKDE4OTksIDEyLCAxLCAwLCAw
LCAwKSAhPT0gbmV3IERhdGUoMTg5OSwgMTIsIDEsIDAsIDAsIDApLnZhbHVlT2YoKSkgeworICB0
ZXN0RmFpbGVkKCIjMjogSW5jb3JyZWN0IHZhbHVlIG9mIERhdGUiKTsKK30KKworaWYgKENvbnN0
cnVjdERhdGUoMTkwMCwgMCwgMSwgMCwgMCwgMCkgIT09IG5ldyBEYXRlKDE5MDAsIDAsIDEsIDAs
IDAsIDApLnZhbHVlT2YoKSkgeworICB0ZXN0RmFpbGVkKCIjMzogSW5jb3JyZWN0IHZhbHVlIG9m
IERhdGUiKTsKK30KKworaWYgKENvbnN0cnVjdERhdGUoMTk2OSwgMTEsIDMxLCAyMywgNTksIDU5
KSAhPT0gbmV3IERhdGUoMTk2OSwgMTEsIDMxLCAyMywgNTksIDU5KS52YWx1ZU9mKCkpIHsKKyAg
dGVzdEZhaWxlZCgiIzQ6IEluY29ycmVjdCB2YWx1ZSBvZiBEYXRlIik7Cit9CisKK2lmIChDb25z
dHJ1Y3REYXRlKDE5NjksIDEyLCAxLCAwLCAwLCAwKSAhPT0gbmV3IERhdGUoMTk2OSwgMTIsIDEs
IDAsIDAsIDApLnZhbHVlT2YoKSkgeworICB0ZXN0RmFpbGVkKCIjNTogSW5jb3JyZWN0IHZhbHVl
IG9mIERhdGUiKTsKK30KKworaWYgKENvbnN0cnVjdERhdGUoMTk3MCwgMCwgMSwgMCwgMCwgMCkg
IT09IG5ldyBEYXRlKDE5NzAsIDAsIDEsIDAsIDAsIDApLnZhbHVlT2YoKSkgeworICB0ZXN0RmFp
bGVkKCIjNjogSW5jb3JyZWN0IHZhbHVlIG9mIERhdGUiKTsKK30KKworaWYgKENvbnN0cnVjdERh
dGUoMTk5OSwgMTEsIDMxLCAyMywgNTksIDU5KSAhPT0gbmV3IERhdGUoMTk5OSwgMTEsIDMxLCAy
MywgNTksIDU5KS52YWx1ZU9mKCkpIHsKKyAgdGVzdEZhaWxlZCgiIzc6IEluY29ycmVjdCB2YWx1
ZSBvZiBEYXRlIik7Cit9CisKK2lmIChDb25zdHJ1Y3REYXRlKDE5OTksIDEyLCAxLCAwLCAwLCAw
KSAhPT0gbmV3IERhdGUoMTk5OSwgMTIsIDEsIDAsIDAsIDApLnZhbHVlT2YoKSkgeworICB0ZXN0
RmFpbGVkKCIjODogSW5jb3JyZWN0IHZhbHVlIG9mIERhdGUiKTsKK30KKworaWYgKENvbnN0cnVj
dERhdGUoMjAwMCwgMCwgMSwgMCwgMCwgMCkgIT09IG5ldyBEYXRlKDIwMDAsIDAsIDEsIDAsIDAs
IDApLnZhbHVlT2YoKSkgeworICB0ZXN0RmFpbGVkKCIjOTogSW5jb3JyZWN0IHZhbHVlIG9mIERh
dGUiKTsKK30KKworaWYgKENvbnN0cnVjdERhdGUoMjA5OSwgMTEsIDMxLCAyMywgNTksIDU5KSAh
PT0gbmV3IERhdGUoMjA5OSwgMTEsIDMxLCAyMywgNTksIDU5KS52YWx1ZU9mKCkpIHsKKyAgdGVz
dEZhaWxlZCgiIzEwOiBJbmNvcnJlY3QgdmFsdWUgb2YgRGF0ZSIpOworfQorCitpZiAoQ29uc3Ry
dWN0RGF0ZSgyMDk5LCAxMiwgMSwgMCwgMCwgMCkgIT09IG5ldyBEYXRlKDIwOTksIDEyLCAxLCAw
LCAwLCAwKS52YWx1ZU9mKCkpIHsKKyAgdGVzdEZhaWxlZCgiIzExOiBJbmNvcnJlY3QgdmFsdWUg
b2YgRGF0ZSIpOworfQorCitpZiAoQ29uc3RydWN0RGF0ZSgyMTAwLCAwLCAxLCAwLCAwLCAwKSAh
PT0gbmV3IERhdGUoMjEwMCwgMCwgMSwgMCwgMCwgMCkudmFsdWVPZigpKSB7CisgIHRlc3RGYWls
ZWQoIiMxMjogSW5jb3JyZWN0IHZhbHVlIG9mIERhdGUiKTsKK30KKworfSBjYXRjaCAoZXgpIHsK
KyAgICBzcHV0bmlrRXhjZXB0aW9uID0gZXg7Cit9CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQg
PSB0cnVlOworPC9zY3JpcHQ+CisKKzxzY3JpcHQ+CitpZiAoIXN1Y2Nlc3NmdWxseVBhcnNlZCkK
KyAgICBwcmludFRlc3RGYWlsZWQoJ3N1Y2Nlc3NmdWxseVBhcnNlZCBpcyBub3Qgc2V0Jyk7Citl
bHNlIGlmIChzcHV0bmlrRXhjZXB0aW9uKQorICAgIHByaW50VGVzdEZhaWxlZChzcHV0bmlrRXhj
ZXB0aW9uKTsKK2Vsc2UKKyAgICBwcmludFRlc3RQYXNzZWQoIiIpOwordGVzdFByaW50KCc8YnIg
Lz48c3BhbiBjbGFzcz0icGFzcyI+VEVTVCBDT01QTEVURTwvc3Bhbj4nKTsKKzwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3B1dG5pay9Db25mb3Jt
YW5jZS8xNV9OYXRpdmVfT2JqZWN0cy8xNS45X0RhdGUvMTUuOS4zL1MxNS45LjMuMV9BNV9UNS5o
dG1sLWRpc2FibGVkIGIvTGF5b3V0VGVzdHMvc3B1dG5pay9Db25mb3JtYW5jZS8xNV9OYXRpdmVf
T2JqZWN0cy8xNS45X0RhdGUvMTUuOS4zL1MxNS45LjMuMV9BNV9UNS5odG1sLWRpc2FibGVkCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZmE5NjBlZDEyNTBjNTQ1NzFkMjI2OTQ5NzBi
NjE0MDY3Y2NkMjUyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL0xheW91dFRlc3RzL3NwdXRuaWsvQ29uZm9ybWFuY2UvMTVfTmF0aXZlX09iamVjdHMvMTUu
OV9EYXRlLzE1LjkuMy9TMTUuOS4zLjFfQTVfVDUuaHRtbC1kaXNhYmxlZAorKysgL2Rldi9udWxs
CkBAIC0xLDUyMiArMCwwIEBACi08aHRtbD4KLTxoZWFkPgotPG1ldGEgY2hhcnNldD0ndXRmLTgn
PgotPHN0eWxlPgotLnBhc3MgewotICAgIGZvbnQtd2VpZ2h0OiBib2xkOwotICAgIGNvbG9yOiBn
cmVlbjsKLX0KLS5mYWlsIHsKLSAgICBmb250LXdlaWdodDogYm9sZDsKLSAgICBjb2xvcjogcmVk
OwotfQotPC9zdHlsZT4KLQotPHNjcmlwdD4KLWlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICB0
ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKLQotZnVuY3Rpb24gU3B1dG5pa0Vycm9yKG1lc3NhZ2Up
Ci17Ci0gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKLX0KLQotU3B1dG5pa0Vycm9yLnByb3Rv
dHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpCi17Ci0gICAgcmV0dXJuICdTcHV0bmlrRXJyb3I6
ICcgKyB0aGlzLm1lc3NhZ2U7Ci19OwotCi12YXIgc3B1dG5pa0V4Y2VwdGlvbjsKLQotZnVuY3Rp
b24gdGVzdFByaW50KG1zZykKLXsKLSAgICB2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoInNwYW4iKTsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmFwcGVu
ZENoaWxkKHNwYW4pOyAvLyBpbnNlcnQgaXQgZmlyc3Qgc28gWEhUTUwga25vd3MgdGhlIG5hbWVz
cGFjZSAKLSAgICBzcGFuLmlubmVySFRNTCA9IG1zZyArICc8YnIgLz4nOwotfQotCi1mdW5jdGlv
biBlc2NhcGVIVE1MKHRleHQpCi17Ci0gICAgcmV0dXJuIHRleHQudG9TdHJpbmcoKS5yZXBsYWNl
KC8mL2csICImYW1wOyIpLnJlcGxhY2UoLzwvZywgIiZsdDsiKTsKLX0KLQotZnVuY3Rpb24gcHJp
bnRUZXN0UGFzc2VkKG1zZykKLXsKLSAgICB0ZXN0UHJpbnQoJzxzcGFuPjxzcGFuIGNsYXNzPSJw
YXNzIj5QQVNTPC9zcGFuPiAnICsgZXNjYXBlSFRNTChtc2cpICsgJzwvc3Bhbj4nKTsKLX0KLQot
ZnVuY3Rpb24gcHJpbnRUZXN0RmFpbGVkKG1zZykKLXsKLSAgICB0ZXN0UHJpbnQoJzxzcGFuPjxz
cGFuIGNsYXNzPSJmYWlsIj5GQUlMPC9zcGFuPiAnICsgZXNjYXBlSFRNTChtc2cpICsgJzwvc3Bh
bj4nKTsKLX0KLQotZnVuY3Rpb24gdGVzdEZhaWxlZChtc2cpCi17Ci0gICAgdGhyb3cgbmV3IFNw
dXRuaWtFcnJvcihtc2cpOwotfQotCi12YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gZmFsc2U7Ci08
L3NjcmlwdD4KLQotPC9oZWFkPgotPGJvZHk+Ci08cD5TMTUuOS4zLjFfQTVfVDU8L3A+Ci08ZGl2
IGlkPSdjb25zb2xlJz48L2Rpdj4KLTxzY3JpcHQ+Ci10cnkgewotCi0vKioKLSAqIEBuYW1lOiBT
MTUuOS4zLjFfQTVfVDU7Ci0gKiBAc2VjdGlvbjogMTUuOS4zLjE7Ci0gKiBAYXNzZXJ0aW9uOiBU
aGUgW1tWYWx1ZV1dIHByb3BlcnR5IG9mIHRoZSBuZXdseSBjb25zdHJ1Y3RlZCBvYmplY3QgCi0g
KiBpcyBzZXQgYnkgZm9sbG93aW5nIHN0ZXBzOgotICogOC4gSWYgUmVzdWx0KDEpIGlzIG5vdCBO
YU4gYW5kIDAgPD0gVG9JbnRlZ2VyKFJlc3VsdCgxKSkgPD0gOTksIFJlc3VsdCg4KSBpcwotICog
MTkwMCtUb0ludGVnZXIoUmVzdWx0KDEpKTsgb3RoZXJ3aXNlLCBSZXN1bHQoOCkgaXMgUmVzdWx0
KDEpCi0gKiA5LiBDb21wdXRlIE1ha2VEYXkoUmVzdWx0KDgpLCBSZXN1bHQoMiksIFJlc3VsdCgz
KSkKLSAqIDEwLiBDb21wdXRlIE1ha2VUaW1lKFJlc3VsdCg0KSwgUmVzdWx0KDUpLCBSZXN1bHQo
NiksIFJlc3VsdCg3KSkKLSAqIDExLiBDb21wdXRlIE1ha2VEYXRlKFJlc3VsdCg5KSwgUmVzdWx0
KDEwKSkKLSAqIDEyLiBTZXQgdGhlIFtbVmFsdWVdXSBwcm9wZXJ0eSBvZiB0aGUgbmV3bHkgY29u
c3RydWN0ZWQgb2JqZWN0IHRvIAotICogVGltZUNsaXAoVVRDKFJlc3VsdCgxMSkpKTsKLSAqIEBk
ZXNjcmlwdGlvbjogNiBhcmd1bWVudHMsICh5ZWFyLCBtb250aCwgZGF0ZSwgaG91cnMsIG1pbnV0
ZXMsIHNlY29uZHMpOwotICovCi0KLXZhciAkRFNUX2VuZF9ob3VyID0gMjsKLXZhciAkRFNUX2Vu
ZF9taW51dGVzID0gMDsKLXZhciAkRFNUX2VuZF9tb250aCA9IDEwOwotdmFyICREU1RfZW5kX3N1
bmRheSA9ICdmaXJzdCc7Ci12YXIgJERTVF9zdGFydF9ob3VyID0gMjsKLXZhciAkRFNUX3N0YXJ0
X21pbnV0ZXMgPSAwOwotdmFyICREU1Rfc3RhcnRfbW9udGggPSAyOwotdmFyICREU1Rfc3RhcnRf
c3VuZGF5ID0gJ2ZpcnN0JzsKLXZhciAkTG9jYWxUWiA9IC04OwotZnVuY3Rpb24gVG9JbnRlZ2Vy
KHApIHsKLSAgeCA9IE51bWJlcihwKTsKLQotICBpZihpc05hTih4KSl7Ci0gICAgcmV0dXJuICsw
OwotICB9Ci0gIAotICBpZigoeCA9PT0gKzApIAotICB8fCAoeCA9PT0gLTApIAotICB8fCAoeCA9
PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSAKLSAgfHwgKHggPT09IE51bWJlci5ORUdBVElW
RV9JTkZJTklUWSkpewotICAgICByZXR1cm4geDsKLSAgfQotCi0gIHZhciBzaWduID0gKCB4IDwg
MCApID8gLTEgOiAxOwotCi0gIHJldHVybiAoc2lnbipNYXRoLmZsb29yKE1hdGguYWJzKHgpKSk7
Ci19Ci0KLQotdmFyIEhvdXJzUGVyRGF5ID0gMjQ7Ci12YXIgTWludXRlc1BlckhvdXIgPSA2MDsK
LXZhciBTZWNvbmRzUGVyTWludXRlID0gNjA7Ci0KLXZhciBtc1BlckRheSA9IDg2NDAwMDAwOwot
dmFyIG1zUGVyU2Vjb25kID0gMTAwMDsKLXZhciBtc1Blck1pbnV0ZSA9IDYwMDAwOwotdmFyIG1z
UGVySG91ciA9IDM2MDAwMDA7Ci0KLXZhciBkYXRlXzE4OTlfZW5kID0gLTIyMDg5ODg4MDAwMDE7
Ci12YXIgZGF0ZV8xOTAwX3N0YXJ0ID0gLTIyMDg5ODg4MDAwMDA7Ci12YXIgZGF0ZV8xOTY5X2Vu
ZCA9IC0xOwotdmFyIGRhdGVfMTk3MF9zdGFydCA9IDA7Ci12YXIgZGF0ZV8xOTk5X2VuZCA9IDk0
NjY4NDc5OTk5OTsKLXZhciBkYXRlXzIwMDBfc3RhcnQgPSA5NDY2ODQ4MDAwMDA7Ci12YXIgZGF0
ZV8yMDk5X2VuZCA9IDQxMDI0NDQ3OTk5OTk7Ci12YXIgZGF0ZV8yMTAwX3N0YXJ0ID0gNDEwMjQ0
NDgwMDAwMDsKLQotCi0vLzE1LjkuMS4yIERheSBOdW1iZXIgYW5kIFRpbWUgd2l0aGluIERheQot
ZnVuY3Rpb24gRGF5KHQpIHsKLSAgcmV0dXJuIE1hdGguZmxvb3IodC9tc1BlckRheSk7Ci19Ci0K
LWZ1bmN0aW9uIFRpbWVXaXRoaW5EYXkodCkgewotICByZXR1cm4gdCVtc1BlckRheTsKLX0KLQot
Ly8xNS45LjEuMyBZZWFyIE51bWJlcgotZnVuY3Rpb24gRGF5c0luWWVhcih5KXsKLSAgaWYoeSU0
ICE9IDApIHJldHVybiAzNjU7Ci0gIGlmKHklNCA9PSAwICYmIHklMTAwICE9IDApIHJldHVybiAz
NjY7Ci0gIGlmKHklMTAwID09IDAgJiYgeSU0MDAgIT0gMCkgcmV0dXJuIDM2NTsKLSAgaWYoeSU0
MDAgPT0gMCkgcmV0dXJuIDM2NjsKLX0KLQotZnVuY3Rpb24gRGF5RnJvbVllYXIoeSkgewotICBy
ZXR1cm4gKDM2NSooeS0xOTcwKQotICAgICAgICAgICsgTWF0aC5mbG9vcigoeS0xOTY5KS80KQot
ICAgICAgICAgIC0gTWF0aC5mbG9vcigoeS0xOTAxKS8xMDApCi0gICAgICAgICAgKyBNYXRoLmZs
b29yKCh5LTE2MDEpLzQwMCkpOwotfQotCi1mdW5jdGlvbiBUaW1lRnJvbVllYXIoeSl7Ci0gIHJl
dHVybiBtc1BlckRheSpEYXlGcm9tWWVhcih5KTsKLX0KLQotZnVuY3Rpb24gWWVhckZyb21UaW1l
KHQpIHsKLSAgdCA9IE51bWJlcih0KTsKLSAgdmFyIHNpZ24gPSAoIHQgPCAwICkgPyAtMSA6IDE7
Ci0gIHZhciB5ZWFyID0gKCBzaWduIDwgMCApID8gMTk2OSA6IDE5NzA7Ci0gIAotICBmb3IodmFy
IHRpbWUgPSAwOzt5ZWFyICs9IHNpZ24pewotICAgIHRpbWUgPSBUaW1lRnJvbVllYXIoeWVhcik7
Ci0gICAgCi0gICAgaWYoc2lnbiA+IDAgJiYgdGltZSA+IHQpewotICAgICAgeWVhciAtPSBzaWdu
OwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGVsc2UgaWYoc2lnbiA8IDAgJiYgdGltZSA8PSB0
KXsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgfTsKLSAgcmV0dXJuIHllYXI7Ci19Ci0gIAotZnVu
Y3Rpb24gSW5MZWFwWWVhcih0KXsKLSAgaWYoRGF5c0luWWVhcihZZWFyRnJvbVRpbWUodCkpID09
IDM2NSkKLSAgICByZXR1cm4gMDsKLSAgCi0gIGlmKERheXNJblllYXIoWWVhckZyb21UaW1lKHQp
KSA9PSAzNjYpCi0gICAgcmV0dXJuIDE7Ci19Ci0KLWZ1bmN0aW9uIERheVdpdGhpblllYXIodCkg
ewotICByZXR1cm4gRGF5KHQpLURheUZyb21ZZWFyKFllYXJGcm9tVGltZSh0KSk7Ci19Ci0KLS8v
MTUuOS4xLjQgTW9udGggTnVtYmVyCi1mdW5jdGlvbiBNb250aEZyb21UaW1lKHQpewotICB2YXIg
ZGF5ID0gRGF5V2l0aGluWWVhcih0KTsKLSAgdmFyIGxlYXAgPSBJbkxlYXBZZWFyKHQpOwotCi0g
IGlmKCgwIDw9IGRheSkgJiYgKGRheSA8IDMxKSkgcmV0dXJuIDA7Ci0gIGlmKCgzMSA8PSBkYXkp
ICYmIChkYXkgPCAoNTkrbGVhcCkpKSByZXR1cm4gMTsKLSAgaWYoKCg1OStsZWFwKSA8PSBkYXkp
ICYmIChkYXkgPCAoOTArbGVhcCkpKSByZXR1cm4gMjsKLSAgaWYoKCg5MCtsZWFwKSA8PSBkYXkp
ICYmIChkYXkgPCAoMTIwK2xlYXApKSkgcmV0dXJuIDM7Ci0gIGlmKCgoMTIwK2xlYXApIDw9IGRh
eSkgJiYgKGRheSA8ICgxNTErbGVhcCkpKSByZXR1cm4gNDsKLSAgaWYoKCgxNTErbGVhcCkgPD0g
ZGF5KSAmJiAoZGF5IDwgKDE4MStsZWFwKSkpIHJldHVybiA1OwotICBpZigoKDE4MStsZWFwKSA8
PSBkYXkpICYmIChkYXkgPCAoMjEyK2xlYXApKSkgcmV0dXJuIDY7Ci0gIGlmKCgoMjEyK2xlYXAp
IDw9IGRheSkgJiYgKGRheSA8ICgyNDMrbGVhcCkpKSByZXR1cm4gNzsKLSAgaWYoKCgyNDMrbGVh
cCkgPD0gZGF5KSAmJiAoZGF5IDwgKDI3MytsZWFwKSkpIHJldHVybiA4OwotICBpZigoKDI3Myts
ZWFwKSA8PSBkYXkpICYmIChkYXkgPCAoMzA0K2xlYXApKSkgcmV0dXJuIDk7Ci0gIGlmKCgoMzA0
K2xlYXApIDw9IGRheSkgJiYgKGRheSA8ICgzMzQrbGVhcCkpKSByZXR1cm4gMTA7Ci0gIGlmKCgo
MzM0K2xlYXApIDw9IGRheSkgJiYgKGRheSA8ICgzNjUrbGVhcCkpKSByZXR1cm4gMTE7Ci19Ci0K
LS8vMTUuOS4xLjUgRGF0ZSBOdW1iZXIKLWZ1bmN0aW9uIERhdGVGcm9tVGltZSh0KSB7Ci0gIHZh
ciBkYXkgPSBEYXlXaXRoaW5ZZWFyKHQpOwotICB2YXIgbW9udGggPSBNb250aEZyb21UaW1lKHQp
OwotICB2YXIgbGVhcCA9IEluTGVhcFllYXIodCk7Ci0KLSAgaWYobW9udGggPT0gMCkgcmV0dXJu
IGRheSsxOwotICBpZihtb250aCA9PSAxKSByZXR1cm4gZGF5LTMwOwotICBpZihtb250aCA9PSAy
KSByZXR1cm4gZGF5LTU4LWxlYXA7Ci0gIGlmKG1vbnRoID09IDMpIHJldHVybiBkYXktODktbGVh
cDsKLSAgaWYobW9udGggPT0gNCkgcmV0dXJuIGRheS0xMTktbGVhcDsKLSAgaWYobW9udGggPT0g
NSkgcmV0dXJuIGRheS0xNTAtbGVhcDsKLSAgaWYobW9udGggPT0gNikgcmV0dXJuIGRheS0xODAt
bGVhcDsKLSAgaWYobW9udGggPT0gNykgcmV0dXJuIGRheS0yMTEtbGVhcDsKLSAgaWYobW9udGgg
PT0gOCkgcmV0dXJuIGRheS0yNDItbGVhcDsKLSAgaWYobW9udGggPT0gOSkgcmV0dXJuIGRheS0y
NzItbGVhcDsKLSAgaWYobW9udGggPT0gMTApIHJldHVybiBkYXktMzAzLWxlYXA7Ci0gIGlmKG1v
bnRoID09IDExKSByZXR1cm4gZGF5LTMzMy1sZWFwOwotfQotCi0vLzE1LjkuMS42IFdlZWsgRGF5
Ci1mdW5jdGlvbiBXZWVrRGF5KHQpIHsKLSAgdmFyIHdlZWtkYXkgPSAoRGF5KHQpKzQpJTc7Ci0g
IHJldHVybiAod2Vla2RheSA8IDAgPyA3K3dlZWtkYXkgOiB3ZWVrZGF5KTsKLX0KLQotLy8xNS45
LjEuOSBEYXlsaWdodCBTYXZpbmcgVGltZSBBZGp1c3RtZW50Ci12YXIgTG9jYWxUWkEgPSAkTG9j
YWxUWiptc1BlckhvdXI7Ci0KLWZ1bmN0aW9uIERheXNJbk1vbnRoKG0sIGxlYXApIHsKLSAgbSA9
IG0lMTI7Ci0gIAotICAvL0FwcmlsLCBKdW5lLCBTZXB0LCBOb3YKLSAgaWYobSA9PSAzIHx8IG0g
PT0gNSB8fCBtID09IDggfHwgbSA9PSAxMCApIHsKLSAgICByZXR1cm4gMzA7Ci0gIH0KLQotICAv
L0phbiwgTWFyY2gsIE1heSwgSnVseSwgQXVnLCBPY3QsIERlYwotICBpZihtID09IDAgfHwgbSA9
PSAyIHx8IG0gPT0gNCB8fCBtID09IDYgfHwgbSA9PSA3IHx8IG0gPT0gOSB8fCBtID09IDExKXsK
LSAgICByZXR1cm4gMzE7Ci0gIH0KLQotICAvL0ZlYgotICByZXR1cm4gMjgrbGVhcDsKLX0KLQot
ZnVuY3Rpb24gR2V0U3VuZGF5SW5Nb250aCh0LCBtLCBjb3VudCl7Ci0gIHZhciB5ZWFyID0gWWVh
ckZyb21UaW1lKHQpOwotICB2YXIgbGVhcCA9IEluTGVhcFllYXIodCk7Ci0gIHZhciBkYXkgPSAw
OwotICAKLSAgaWYobSA+PSAxKSBkYXkgKz0gRGF5c0luTW9udGgoMCwgbGVhcCk7Ci0gIGlmKG0g
Pj0gMikgZGF5ICs9IERheXNJbk1vbnRoKDEsIGxlYXApOwotICBpZihtID49IDMpIGRheSArPSBE
YXlzSW5Nb250aCgyLCBsZWFwKTsKLSAgaWYobSA+PSA0KSBkYXkgKz0gRGF5c0luTW9udGgoMywg
bGVhcCk7Ci0gIGlmKG0gPj0gNSkgZGF5ICs9IERheXNJbk1vbnRoKDQsIGxlYXApOwotICBpZiht
ID49IDYpIGRheSArPSBEYXlzSW5Nb250aCg1LCBsZWFwKTsKLSAgaWYobSA+PSA3KSBkYXkgKz0g
RGF5c0luTW9udGgoNiwgbGVhcCk7Ci0gIGlmKG0gPj0gOCkgZGF5ICs9IERheXNJbk1vbnRoKDcs
IGxlYXApOwotICBpZihtID49IDkpIGRheSArPSBEYXlzSW5Nb250aCg4LCBsZWFwKTsKLSAgaWYo
bSA+PSAxMCkgZGF5ICs9IERheXNJbk1vbnRoKDksIGxlYXApOwotICBpZihtID49IDExKSBkYXkg
Kz0gRGF5c0luTW9udGgoMTAsIGxlYXApOwotICAKLSAgdmFyIG1vbnRoX3N0YXJ0ID0gVGltZUZy
b21ZZWFyKHllYXIpK2RheSptc1BlckRheTsKLSAgdmFyIHN1bmRheSA9IDA7Ci0gIAotICBpZihj
b3VudCA9PT0gImxhc3QiKXsKLSAgICBmb3IodmFyIGxhc3Rfc3VuZGF5ID0gbW9udGhfc3RhcnQr
RGF5c0luTW9udGgobSwgbGVhcCkqbXNQZXJEYXk7IAotICAgICAgV2Vla0RheShsYXN0X3N1bmRh
eSk+MDsKLSAgICAgIGxhc3Rfc3VuZGF5IC09IG1zUGVyRGF5Ci0gICAgKXt9OwotICAgIHN1bmRh
eSA9IGxhc3Rfc3VuZGF5OwotICB9Ci0gIGVsc2UgewotICAgIGZvcih2YXIgZmlyc3Rfc3VuZGF5
ID0gbW9udGhfc3RhcnQ7IAotICAgICAgV2Vla0RheShmaXJzdF9zdW5kYXkpPjA7Ci0gICAgICBm
aXJzdF9zdW5kYXkgKz0gbXNQZXJEYXkKLSAgICApe307Ci0gICAgc3VuZGF5ID0gZmlyc3Rfc3Vu
ZGF5KzcqbXNQZXJEYXkqKGNvdW50LTEpOwotICB9Ci0gIAotICByZXR1cm4gc3VuZGF5OwotfQot
Ci1mdW5jdGlvbiBEYXlsaWdodFNhdmluZ1RBKHQpIHsKLSAgdCA9IHQtTG9jYWxUWkE7Ci0KLSAg
dmFyIERTVF9zdGFydCA9IEdldFN1bmRheUluTW9udGgodCwgJERTVF9zdGFydF9tb250aCwgJERT
VF9zdGFydF9zdW5kYXkpCi0gICAgICAgICAgICAgICAgICArJERTVF9zdGFydF9ob3VyKm1zUGVy
SG91cgotICAgICAgICAgICAgICAgICAgKyREU1Rfc3RhcnRfbWludXRlcyptc1Blck1pbnV0ZTsK
LSAgICAgICAgICAgICAgICAgIAotICB2YXIgayA9IG5ldyBEYXRlKERTVF9zdGFydCk7Ci0gIAot
ICB2YXIgRFNUX2VuZCAgID0gR2V0U3VuZGF5SW5Nb250aCh0LCAkRFNUX2VuZF9tb250aCwgJERT
VF9lbmRfc3VuZGF5KQotICAgICAgICAgICAgICAgICAgKyREU1RfZW5kX2hvdXIqbXNQZXJIb3Vy
Ci0gICAgICAgICAgICAgICAgICArJERTVF9lbmRfbWludXRlcyptc1Blck1pbnV0ZTsKLQotICBp
ZiAoIHQgPj0gRFNUX3N0YXJ0ICYmIHQgPCBEU1RfZW5kICkgewotICAgIHJldHVybiBtc1Blckhv
dXI7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLX0KLQotLy8xNS45LjEuOSBMb2Nh
bCBUaW1lCi1mdW5jdGlvbiBMb2NhbFRpbWUodCl7Ci0gIHJldHVybiB0K0xvY2FsVFpBK0RheWxp
Z2h0U2F2aW5nVEEodCk7Ci19Ci0KLWZ1bmN0aW9uIFVUQyh0KSB7Ci0gIHJldHVybiB0LUxvY2Fs
VFpBLURheWxpZ2h0U2F2aW5nVEEodC1Mb2NhbFRaQSk7Ci19Ci0KLS8vMTUuOS4xLjEwIEhvdXJz
LCBNaW51dGVzLCBTZWNvbmQsIGFuZCBNaWxsaXNlY29uZHMKLWZ1bmN0aW9uIEhvdXJGcm9tVGlt
ZSh0KXsKLSAgcmV0dXJuIE1hdGguZmxvb3IodC9tc1BlckhvdXIpJUhvdXJzUGVyRGF5OwotfQot
Ci1mdW5jdGlvbiBNaW5Gcm9tVGltZSh0KXsKLSAgcmV0dXJuIE1hdGguZmxvb3IodC9tc1Blck1p
bnV0ZSklTWludXRlc1BlckhvdXI7Ci19Ci0KLWZ1bmN0aW9uIFNlY0Zyb21UaW1lKHQpewotICBy
ZXR1cm4gTWF0aC5mbG9vcih0L21zUGVyU2Vjb25kKSVTZWNvbmRzUGVyTWludXRlOwotfQotCi1m
dW5jdGlvbiBtc0Zyb21UaW1lKHQpewotICByZXR1cm4gdCVtc1BlclNlY29uZDsKLX0KLQotLy8x
NS45LjEuMTEgTWFrZVRpbWUgKGhvdXIsIG1pbiwgc2VjLCBtcykKLWZ1bmN0aW9uIE1ha2VUaW1l
KGhvdXIsIG1pbiwgc2VjLCBtcyl7Ci0gIGlmICggIWlzRmluaXRlKGhvdXIpIHx8ICFpc0Zpbml0
ZShtaW4pIHx8ICFpc0Zpbml0ZShzZWMpIHx8ICFpc0Zpbml0ZShtcykpIHsKLSAgICByZXR1cm4g
TnVtYmVyLk5hTjsKLSAgfQotCi0gIGhvdXIgPSBUb0ludGVnZXIoaG91cik7Ci0gIG1pbiAgPSBU
b0ludGVnZXIobWluKTsKLSAgc2VjICA9IFRvSW50ZWdlcihzZWMpOwotICBtcyAgID0gVG9JbnRl
Z2VyKG1zKTsKLQotICByZXR1cm4gKChob3VyKm1zUGVySG91cikgKyAobWluKm1zUGVyTWludXRl
KSArIChzZWMqbXNQZXJTZWNvbmQpICsgbXMpOwotfQotCi0vLzE1LjkuMS4xMiBNYWtlRGF5ICh5
ZWFyLCBtb250aCwgZGF0ZSkKLWZ1bmN0aW9uIE1ha2VEYXkoeWVhciwgbW9udGgsIGRhdGUpIHsK
LSAgaWYgKCAhaXNGaW5pdGUoeWVhcikgfHwgIWlzRmluaXRlKG1vbnRoKSB8fCAhaXNGaW5pdGUo
ZGF0ZSkpIHsKLSAgICByZXR1cm4gTnVtYmVyLk5hTjsKLSAgfQotCi0gIHllYXIgPSBUb0ludGVn
ZXIoeWVhcik7Ci0gIG1vbnRoID0gVG9JbnRlZ2VyKG1vbnRoKTsKLSAgZGF0ZSA9IFRvSW50ZWdl
cihkYXRlICk7Ci0KLSAgdmFyIHJlc3VsdDUgPSB5ZWFyICsgTWF0aC5mbG9vcihtb250aC8xMik7
Ci0gIHZhciByZXN1bHQ2ID0gbW9udGglMTI7Ci0KLSAgdmFyIHNpZ24gPSAoIHllYXIgPCAxOTcw
ICkgPyAtMSA6IDE7Ci0gIHZhciB0ID0gICAgKCB5ZWFyIDwgMTk3MCApID8gMSA6ICAwOwotICB2
YXIgeSA9ICAgICggeWVhciA8IDE5NzAgKSA/IDE5NjkgOiAxOTcwOwotCi0gIGlmKCBzaWduID09
IC0xICl7Ci0gICAgZm9yICggeSA9IDE5Njk7IHkgPj0geWVhcjsgeSArPSBzaWduICkgewotICAg
ICAgdCArPSBzaWduICogRGF5c0luWWVhcih5KSptc1BlckRheTsKLSAgICB9Ci0gIH0gZWxzZSB7
Ci0gICAgZm9yICggeSA9IDE5NzAgOyB5IDwgeWVhcjsgeSArPSBzaWduICkgewotICAgICAgdCAr
PSBzaWduICogRGF5c0luWWVhcih5KSptc1BlckRheTsKLSAgICB9Ci0gIH0KLQotICB2YXIgbGVh
cCA9IDA7Ci0gIGZvciAoIHZhciBtID0gMDsgbSA8IG1vbnRoOyBtKysgKSB7Ci0gICAgLy9pZiB5
ZWFyIGlzIGNoYW5nZWQsIHRoYW4gd2UgbmVlZCB0byByZWNhbGN1bGF0ZSBsZWVwCi0gICAgbGVh
cCA9IEluTGVhcFllYXIodCk7Ci0gICAgdCArPSBEYXlzSW5Nb250aChtLCBsZWFwKSptc1BlckRh
eTsKLSAgfQotCi0gIGlmICggWWVhckZyb21UaW1lKHQpICE9IHJlc3VsdDUgKSB7Ci0gICAgcmV0
dXJuIE51bWJlci5OYU47Ci0gIH0KLSAgaWYgKCBNb250aEZyb21UaW1lKHQpICE9IHJlc3VsdDYg
KSB7Ci0gICAgcmV0dXJuIE51bWJlci5OYU47Ci0gIH0KLSAgaWYgKCBEYXRlRnJvbVRpbWUodCkg
IT0gMSApIHsKLSAgICByZXR1cm4gTnVtYmVyLk5hTjsKLSAgfQotCi0gIHJldHVybiBEYXkodCkr
ZGF0ZS0xOwotfQotCi0vLzE1LjkuMS4xMyBNYWtlRGF0ZSAoZGF5LCB0aW1lKQotZnVuY3Rpb24g
TWFrZURhdGUoIGRheSwgdGltZSApIHsKLSAgaWYoIWlzRmluaXRlKGRheSkgfHwgIWlzRmluaXRl
KHRpbWUpKSB7Ci0gICAgcmV0dXJuIE51bWJlci5OYU47Ci0gIH0KLSAgCi0gIHJldHVybiBkYXkq
bXNQZXJEYXkrdGltZTsKLX0KLQotLy8xNS45LjEuMTQgVGltZUNsaXAgKHRpbWUpCi1mdW5jdGlv
biBUaW1lQ2xpcCh0aW1lKSB7Ci0gIGlmKCFpc0Zpbml0ZSh0aW1lKSB8fCBNYXRoLmFicyh0aW1l
KSA+IDguNjRlMTUpewotICAgIHJldHVybiBOdW1iZXIuTmFOOwotICB9Ci0KLSAgcmV0dXJuIFRv
SW50ZWdlcih0aW1lKTsKLX0KLQotLy9UZXN0IEZ1bmN0aW9ucwotZnVuY3Rpb24gQ29uc3RydWN0
RGF0ZSh5ZWFyLCBtb250aCwgZGF0ZSwgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG1zKXsKLSAg
LyoKLSAgICogMS4gQ2FsbCBUb051bWJlcih5ZWFyKQotICAgKiAyLiBDYWxsIFRvTnVtYmVyKG1v
bnRoKQotICAgKiAzLiBJZiBkYXRlIGlzIHN1cHBsaWVkIHVzZSBUb051bWJlcihkYXRlKTsgZWxz
ZSB1c2UgMQotICAgKiA0LiBJZiBob3VycyBpcyBzdXBwbGllZCB1c2UgVG9OdW1iZXIoaG91cnMp
OyBlbHNlIHVzZSAwCi0gICAqIDUuIElmIG1pbnV0ZXMgaXMgc3VwcGxpZWQgdXNlIFRvTnVtYmVy
KG1pbnV0ZXMpOyBlbHNlIHVzZSAwCi0gICAqIDYuIElmIHNlY29uZHMgaXMgc3VwcGxpZWQgdXNl
IFRvTnVtYmVyKHNlY29uZHMpOyBlbHNlIHVzZSAwCi0gICAqIDcuIElmIG1zIGlzIHN1cHBsaWVk
IHVzZSBUb051bWJlcihtcyk7IGVsc2UgdXNlIDAKLSAgICogOC4gSWYgUmVzdWx0KDEpIGlzIG5v
dCBOYU4gYW5kIDAgPD0gVG9JbnRlZ2VyKFJlc3VsdCgxKSkgPD0gOTksIFJlc3VsdCg4KSBpcwot
ICAgKiAxOTAwK1RvSW50ZWdlcihSZXN1bHQoMSkpOyBvdGhlcndpc2UsIFJlc3VsdCg4KSBpcyBS
ZXN1bHQoMSkKLSAgICogOS4gQ29tcHV0ZSBNYWtlRGF5KFJlc3VsdCg4KSwgUmVzdWx0KDIpLCBS
ZXN1bHQoMykpCi0gICAqIDEwLiBDb21wdXRlIE1ha2VUaW1lKFJlc3VsdCg0KSwgUmVzdWx0KDUp
LCBSZXN1bHQoNiksIFJlc3VsdCg3KSkKLSAgICogMTEuIENvbXB1dGUgTWFrZURhdGUoUmVzdWx0
KDkpLCBSZXN1bHQoMTApKQotICAgKiAxMi4gU2V0IHRoZSBbW1ZhbHVlXV0gcHJvcGVydHkgb2Yg
dGhlIG5ld2x5IGNvbnN0cnVjdGVkIG9iamVjdCB0byBUaW1lQ2xpcChVVEMoUmVzdWx0KDExKSkp
Ci0gICAqLwotICB2YXIgcjEgPSBOdW1iZXIoeWVhcik7Ci0gIHZhciByMiA9IE51bWJlcihtb250
aCk7Ci0gIHZhciByMyA9ICgoZGF0ZSAmJiBhcmd1bWVudHMubGVuZ3RoID4gMikgPyBOdW1iZXIo
ZGF0ZSkgOiAxKTsKLSAgdmFyIHI0ID0gKChob3VycyAmJiBhcmd1bWVudHMubGVuZ3RoID4gMykg
PyBOdW1iZXIoaG91cnMpIDogMCk7ICAgCi0gIHZhciByNSA9ICgobWludXRlcyAmJiBhcmd1bWVu
dHMubGVuZ3RoID4gNCkgPyBOdW1iZXIobWludXRlcykgOiAwKTsgICAKLSAgdmFyIHI2ID0gKChz
ZWNvbmRzICYmIGFyZ3VtZW50cy5sZW5ndGggPiA1KSA/IE51bWJlcihzZWNvbmRzKSA6IDApOyAg
IAotICB2YXIgcjcgPSAoKG1zICYmIGFyZ3VtZW50cy5sZW5ndGggPiA2KSA/IE51bWJlcihtcykg
OiAwKTsKLSAgCi0gIHZhciByOCA9IHIxOwotICAKLSAgaWYoIWlzTmFOKHIxKSAmJiAoMCA8PSBU
b0ludGVnZXIocjEpKSAmJiAoVG9JbnRlZ2VyKHIxKSA8PSA5OSkpCi0gICAgcjggPSAxOTAwK3Ix
OwotICAKLSAgdmFyIHI5ID0gTWFrZURheShyOCwgcjIsIHIzKTsKLSAgdmFyIHIxMCA9IE1ha2VU
aW1lKHI0LCByNSwgcjYsIHI3KTsKLSAgdmFyIHIxMSA9IE1ha2VEYXRlKHI5LCByMTApOwotICAK
LSAgcmV0dXJuIFRpbWVDbGlwKFVUQyhyMTEpKTsKLX0KLQotCi0KLWlmIChDb25zdHJ1Y3REYXRl
KDE4OTksIDExLCAzMSwgMjMsIDU5LCA1OSkgIT09IG5ldyBEYXRlKDE4OTksIDExLCAzMSwgMjMs
IDU5LCA1OSkudmFsdWVPZigpKSB7Ci0gIHRlc3RGYWlsZWQoIiMxOiBJbmNvcnJlY3QgdmFsdWUg
b2YgRGF0ZSIpOwotfQotCi1pZiAoQ29uc3RydWN0RGF0ZSgxODk5LCAxMiwgMSwgMCwgMCwgMCkg
IT09IG5ldyBEYXRlKDE4OTksIDEyLCAxLCAwLCAwLCAwKS52YWx1ZU9mKCkpIHsKLSAgdGVzdEZh
aWxlZCgiIzI6IEluY29ycmVjdCB2YWx1ZSBvZiBEYXRlIik7Ci19Ci0KLWlmIChDb25zdHJ1Y3RE
YXRlKDE5MDAsIDAsIDEsIDAsIDAsIDApICE9PSBuZXcgRGF0ZSgxOTAwLCAwLCAxLCAwLCAwLCAw
KS52YWx1ZU9mKCkpIHsKLSAgdGVzdEZhaWxlZCgiIzM6IEluY29ycmVjdCB2YWx1ZSBvZiBEYXRl
Iik7Ci19Ci0KLWlmIChDb25zdHJ1Y3REYXRlKDE5NjksIDExLCAzMSwgMjMsIDU5LCA1OSkgIT09
IG5ldyBEYXRlKDE5NjksIDExLCAzMSwgMjMsIDU5LCA1OSkudmFsdWVPZigpKSB7Ci0gIHRlc3RG
YWlsZWQoIiM0OiBJbmNvcnJlY3QgdmFsdWUgb2YgRGF0ZSIpOwotfQotCi1pZiAoQ29uc3RydWN0
RGF0ZSgxOTY5LCAxMiwgMSwgMCwgMCwgMCkgIT09IG5ldyBEYXRlKDE5NjksIDEyLCAxLCAwLCAw
LCAwKS52YWx1ZU9mKCkpIHsKLSAgdGVzdEZhaWxlZCgiIzU6IEluY29ycmVjdCB2YWx1ZSBvZiBE
YXRlIik7Ci19Ci0KLWlmIChDb25zdHJ1Y3REYXRlKDE5NzAsIDAsIDEsIDAsIDAsIDApICE9PSBu
ZXcgRGF0ZSgxOTcwLCAwLCAxLCAwLCAwLCAwKS52YWx1ZU9mKCkpIHsKLSAgdGVzdEZhaWxlZCgi
IzY6IEluY29ycmVjdCB2YWx1ZSBvZiBEYXRlIik7Ci19Ci0KLWlmIChDb25zdHJ1Y3REYXRlKDE5
OTksIDExLCAzMSwgMjMsIDU5LCA1OSkgIT09IG5ldyBEYXRlKDE5OTksIDExLCAzMSwgMjMsIDU5
LCA1OSkudmFsdWVPZigpKSB7Ci0gIHRlc3RGYWlsZWQoIiM3OiBJbmNvcnJlY3QgdmFsdWUgb2Yg
RGF0ZSIpOwotfQotCi1pZiAoQ29uc3RydWN0RGF0ZSgxOTk5LCAxMiwgMSwgMCwgMCwgMCkgIT09
IG5ldyBEYXRlKDE5OTksIDEyLCAxLCAwLCAwLCAwKS52YWx1ZU9mKCkpIHsKLSAgdGVzdEZhaWxl
ZCgiIzg6IEluY29ycmVjdCB2YWx1ZSBvZiBEYXRlIik7Ci19Ci0KLWlmIChDb25zdHJ1Y3REYXRl
KDIwMDAsIDAsIDEsIDAsIDAsIDApICE9PSBuZXcgRGF0ZSgyMDAwLCAwLCAxLCAwLCAwLCAwKS52
YWx1ZU9mKCkpIHsKLSAgdGVzdEZhaWxlZCgiIzk6IEluY29ycmVjdCB2YWx1ZSBvZiBEYXRlIik7
Ci19Ci0KLWlmIChDb25zdHJ1Y3REYXRlKDIwOTksIDExLCAzMSwgMjMsIDU5LCA1OSkgIT09IG5l
dyBEYXRlKDIwOTksIDExLCAzMSwgMjMsIDU5LCA1OSkudmFsdWVPZigpKSB7Ci0gIHRlc3RGYWls
ZWQoIiMxMDogSW5jb3JyZWN0IHZhbHVlIG9mIERhdGUiKTsKLX0KLQotaWYgKENvbnN0cnVjdERh
dGUoMjA5OSwgMTIsIDEsIDAsIDAsIDApICE9PSBuZXcgRGF0ZSgyMDk5LCAxMiwgMSwgMCwgMCwg
MCkudmFsdWVPZigpKSB7Ci0gIHRlc3RGYWlsZWQoIiMxMTogSW5jb3JyZWN0IHZhbHVlIG9mIERh
dGUiKTsKLX0KLQotaWYgKENvbnN0cnVjdERhdGUoMjEwMCwgMCwgMSwgMCwgMCwgMCkgIT09IG5l
dyBEYXRlKDIxMDAsIDAsIDEsIDAsIDAsIDApLnZhbHVlT2YoKSkgewotICB0ZXN0RmFpbGVkKCIj
MTI6IEluY29ycmVjdCB2YWx1ZSBvZiBEYXRlIik7Ci19Ci0KLX0gY2F0Y2ggKGV4KSB7Ci0gICAg
c3B1dG5pa0V4Y2VwdGlvbiA9IGV4OwotfQotCi12YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1
ZTsKLTwvc2NyaXB0PgotCi08c2NyaXB0PgotaWYgKCFzdWNjZXNzZnVsbHlQYXJzZWQpCi0gICAg
cHJpbnRUZXN0RmFpbGVkKCdzdWNjZXNzZnVsbHlQYXJzZWQgaXMgbm90IHNldCcpOwotZWxzZSBp
ZiAoc3B1dG5pa0V4Y2VwdGlvbikKLSAgICBwcmludFRlc3RGYWlsZWQoc3B1dG5pa0V4Y2VwdGlv
bik7Ci1lbHNlCi0gICAgcHJpbnRUZXN0UGFzc2VkKCIiKTsKLXRlc3RQcmludCgnPGJyIC8+PHNw
YW4gY2xhc3M9InBhc3MiPlRFU1QgQ09NUExFVEU8L3NwYW4+Jyk7Ci08L3NjcmlwdD4KLTwvYm9k
eT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3NwdXRuaWsvQ29uZm9ybWFuY2Uv
MTVfTmF0aXZlX09iamVjdHMvMTUuOV9EYXRlLzE1LjkuMy9TMTUuOS4zLjFfQTVfVDYuaHRtbCBi
L0xheW91dFRlc3RzL3NwdXRuaWsvQ29uZm9ybWFuY2UvMTVfTmF0aXZlX09iamVjdHMvMTUuOV9E
YXRlLzE1LjkuMy9TMTUuOS4zLjFfQTVfVDYuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MjdmMDQxMWViNjI3
OWE4YjYxOWMwNGFhNzhhOTBlNDhhOGM4MzgyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvc3B1dG5pay9Db25mb3JtYW5jZS8xNV9OYXRpdmVfT2JqZWN0cy8xNS45X0RhdGUvMTUuOS4z
L1MxNS45LjMuMV9BNV9UNi5odG1sCkBAIC0wLDAgKzEsNTIyIEBACis8aHRtbD4KKzxoZWFkPgor
PG1ldGEgY2hhcnNldD0ndXRmLTgnPgorPHN0eWxlPgorLnBhc3MgeworICAgIGZvbnQtd2VpZ2h0
OiBib2xkOworICAgIGNvbG9yOiBncmVlbjsKK30KKy5mYWlsIHsKKyAgICBmb250LXdlaWdodDog
Ym9sZDsKKyAgICBjb2xvcjogcmVkOworfQorPC9zdHlsZT4KKworPHNjcmlwdD4KK2lmICh3aW5k
b3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKworZnVuY3Rpb24g
U3B1dG5pa0Vycm9yKG1lc3NhZ2UpCit7CisgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKK30K
KworU3B1dG5pa0Vycm9yLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpCit7CisgICAg
cmV0dXJuICdTcHV0bmlrRXJyb3I6ICcgKyB0aGlzLm1lc3NhZ2U7Cit9OworCit2YXIgc3B1dG5p
a0V4Y2VwdGlvbjsKKworZnVuY3Rpb24gdGVzdFByaW50KG1zZykKK3sKKyAgICB2YXIgc3BhbiA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiY29uc29sZSIpLmFwcGVuZENoaWxkKHNwYW4pOyAvLyBpbnNlcnQgaXQgZmlyc3Qgc28g
WEhUTUwga25vd3MgdGhlIG5hbWVzcGFjZSAKKyAgICBzcGFuLmlubmVySFRNTCA9IG1zZyArICc8
YnIgLz4nOworfQorCitmdW5jdGlvbiBlc2NhcGVIVE1MKHRleHQpCit7CisgICAgcmV0dXJuIHRl
eHQudG9TdHJpbmcoKS5yZXBsYWNlKC8mL2csICImYW1wOyIpLnJlcGxhY2UoLzwvZywgIiZsdDsi
KTsKK30KKworZnVuY3Rpb24gcHJpbnRUZXN0UGFzc2VkKG1zZykKK3sKKyAgICB0ZXN0UHJpbnQo
JzxzcGFuPjxzcGFuIGNsYXNzPSJwYXNzIj5QQVNTPC9zcGFuPiAnICsgZXNjYXBlSFRNTChtc2cp
ICsgJzwvc3Bhbj4nKTsKK30KKworZnVuY3Rpb24gcHJpbnRUZXN0RmFpbGVkKG1zZykKK3sKKyAg
ICB0ZXN0UHJpbnQoJzxzcGFuPjxzcGFuIGNsYXNzPSJmYWlsIj5GQUlMPC9zcGFuPiAnICsgZXNj
YXBlSFRNTChtc2cpICsgJzwvc3Bhbj4nKTsKK30KKworZnVuY3Rpb24gdGVzdEZhaWxlZChtc2cp
Cit7CisgICAgdGhyb3cgbmV3IFNwdXRuaWtFcnJvcihtc2cpOworfQorCit2YXIgc3VjY2Vzc2Z1
bGx5UGFyc2VkID0gZmFsc2U7Cis8L3NjcmlwdD4KKworPC9oZWFkPgorPGJvZHk+Cis8cD5TMTUu
OS4zLjFfQTVfVDY8L3A+Cis8ZGl2IGlkPSdjb25zb2xlJz48L2Rpdj4KKzxzY3JpcHQ+Cit0cnkg
eworCisvKioKKyAqIEBuYW1lOiBTMTUuOS4zLjFfQTVfVDY7CisgKiBAc2VjdGlvbjogMTUuOS4z
LjE7CisgKiBAYXNzZXJ0aW9uOiBUaGUgW1tWYWx1ZV1dIHByb3BlcnR5IG9mIHRoZSBuZXdseSBj
b25zdHJ1Y3RlZCBvYmplY3QgCisgKiBpcyBzZXQgYnkgZm9sbG93aW5nIHN0ZXBzOgorICogOC4g
SWYgUmVzdWx0KDEpIGlzIG5vdCBOYU4gYW5kIDAgPD0gVG9JbnRlZ2VyKFJlc3VsdCgxKSkgPD0g
OTksIFJlc3VsdCg4KSBpcworICogMTkwMCtUb0ludGVnZXIoUmVzdWx0KDEpKTsgb3RoZXJ3aXNl
LCBSZXN1bHQoOCkgaXMgUmVzdWx0KDEpCisgKiA5LiBDb21wdXRlIE1ha2VEYXkoUmVzdWx0KDgp
LCBSZXN1bHQoMiksIFJlc3VsdCgzKSkKKyAqIDEwLiBDb21wdXRlIE1ha2VUaW1lKFJlc3VsdCg0
KSwgUmVzdWx0KDUpLCBSZXN1bHQoNiksIFJlc3VsdCg3KSkKKyAqIDExLiBDb21wdXRlIE1ha2VE
YXRlKFJlc3VsdCg5KSwgUmVzdWx0KDEwKSkKKyAqIDEyLiBTZXQgdGhlIFtbVmFsdWVdXSBwcm9w
ZXJ0eSBvZiB0aGUgbmV3bHkgY29uc3RydWN0ZWQgb2JqZWN0IHRvIAorICogVGltZUNsaXAoVVRD
KFJlc3VsdCgxMSkpKTsKKyAqIEBkZXNjcmlwdGlvbjogNyBhcmd1bWVudHMsICh5ZWFyLCBtb250
aCwgZGF0ZSwgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIG1zKTsKKyAqLworCit2YXIgJERTVF9l
bmRfaG91ciA9IDI7Cit2YXIgJERTVF9lbmRfbWludXRlcyA9IDA7Cit2YXIgJERTVF9lbmRfbW9u
dGggPSAxMDsKK3ZhciAkRFNUX2VuZF9zdW5kYXkgPSAnZmlyc3QnOwordmFyICREU1Rfc3RhcnRf
aG91ciA9IDI7Cit2YXIgJERTVF9zdGFydF9taW51dGVzID0gMDsKK3ZhciAkRFNUX3N0YXJ0X21v
bnRoID0gMjsKK3ZhciAkRFNUX3N0YXJ0X3N1bmRheSA9ICdmaXJzdCc7Cit2YXIgJExvY2FsVFog
PSAtODsKK2Z1bmN0aW9uIFRvSW50ZWdlcihwKSB7CisgIHggPSBOdW1iZXIocCk7CisKKyAgaWYo
aXNOYU4oeCkpeworICAgIHJldHVybiArMDsKKyAgfQorICAKKyAgaWYoKHggPT09ICswKSAKKyAg
fHwgKHggPT09IC0wKSAKKyAgfHwgKHggPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkgCisg
IHx8ICh4ID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpKXsKKyAgICAgcmV0dXJuIHg7Cisg
IH0KKworICB2YXIgc2lnbiA9ICggeCA8IDAgKSA/IC0xIDogMTsKKworICByZXR1cm4gKHNpZ24q
TWF0aC5mbG9vcihNYXRoLmFicyh4KSkpOworfQorCisKK3ZhciBIb3Vyc1BlckRheSA9IDI0Owor
dmFyIE1pbnV0ZXNQZXJIb3VyID0gNjA7Cit2YXIgU2Vjb25kc1Blck1pbnV0ZSA9IDYwOworCit2
YXIgbXNQZXJEYXkgPSA4NjQwMDAwMDsKK3ZhciBtc1BlclNlY29uZCA9IDEwMDA7Cit2YXIgbXNQ
ZXJNaW51dGUgPSA2MDAwMDsKK3ZhciBtc1BlckhvdXIgPSAzNjAwMDAwOworCit2YXIgZGF0ZV8x
ODk5X2VuZCA9IC0yMjA4OTg4ODAwMDAxOwordmFyIGRhdGVfMTkwMF9zdGFydCA9IC0yMjA4OTg4
ODAwMDAwOwordmFyIGRhdGVfMTk2OV9lbmQgPSAtMTsKK3ZhciBkYXRlXzE5NzBfc3RhcnQgPSAw
OwordmFyIGRhdGVfMTk5OV9lbmQgPSA5NDY2ODQ3OTk5OTk7Cit2YXIgZGF0ZV8yMDAwX3N0YXJ0
ID0gOTQ2Njg0ODAwMDAwOwordmFyIGRhdGVfMjA5OV9lbmQgPSA0MTAyNDQ0Nzk5OTk5OwordmFy
IGRhdGVfMjEwMF9zdGFydCA9IDQxMDI0NDQ4MDAwMDA7CisKKworLy8xNS45LjEuMiBEYXkgTnVt
YmVyIGFuZCBUaW1lIHdpdGhpbiBEYXkKK2Z1bmN0aW9uIERheSh0KSB7CisgIHJldHVybiBNYXRo
LmZsb29yKHQvbXNQZXJEYXkpOworfQorCitmdW5jdGlvbiBUaW1lV2l0aGluRGF5KHQpIHsKKyAg
cmV0dXJuIHQlbXNQZXJEYXk7Cit9CisKKy8vMTUuOS4xLjMgWWVhciBOdW1iZXIKK2Z1bmN0aW9u
IERheXNJblllYXIoeSl7CisgIGlmKHklNCAhPSAwKSByZXR1cm4gMzY1OworICBpZih5JTQgPT0g
MCAmJiB5JTEwMCAhPSAwKSByZXR1cm4gMzY2OworICBpZih5JTEwMCA9PSAwICYmIHklNDAwICE9
IDApIHJldHVybiAzNjU7CisgIGlmKHklNDAwID09IDApIHJldHVybiAzNjY7Cit9CisKK2Z1bmN0
aW9uIERheUZyb21ZZWFyKHkpIHsKKyAgcmV0dXJuICgzNjUqKHktMTk3MCkKKyAgICAgICAgICAr
IE1hdGguZmxvb3IoKHktMTk2OSkvNCkKKyAgICAgICAgICAtIE1hdGguZmxvb3IoKHktMTkwMSkv
MTAwKQorICAgICAgICAgICsgTWF0aC5mbG9vcigoeS0xNjAxKS80MDApKTsKK30KKworZnVuY3Rp
b24gVGltZUZyb21ZZWFyKHkpeworICByZXR1cm4gbXNQZXJEYXkqRGF5RnJvbVllYXIoeSk7Cit9
CisKK2Z1bmN0aW9uIFllYXJGcm9tVGltZSh0KSB7CisgIHQgPSBOdW1iZXIodCk7CisgIHZhciBz
aWduID0gKCB0IDwgMCApID8gLTEgOiAxOworICB2YXIgeWVhciA9ICggc2lnbiA8IDAgKSA/IDE5
NjkgOiAxOTcwOworICAKKyAgZm9yKHZhciB0aW1lID0gMDs7eWVhciArPSBzaWduKXsKKyAgICB0
aW1lID0gVGltZUZyb21ZZWFyKHllYXIpOworICAgIAorICAgIGlmKHNpZ24gPiAwICYmIHRpbWUg
PiB0KXsKKyAgICAgIHllYXIgLT0gc2lnbjsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICBlbHNl
IGlmKHNpZ24gPCAwICYmIHRpbWUgPD0gdCl7CisgICAgICBicmVhazsKKyAgICB9CisgIH07Cisg
IHJldHVybiB5ZWFyOworfQorICAKK2Z1bmN0aW9uIEluTGVhcFllYXIodCl7CisgIGlmKERheXNJ
blllYXIoWWVhckZyb21UaW1lKHQpKSA9PSAzNjUpCisgICAgcmV0dXJuIDA7CisgIAorICBpZihE
YXlzSW5ZZWFyKFllYXJGcm9tVGltZSh0KSkgPT0gMzY2KQorICAgIHJldHVybiAxOworfQorCitm
dW5jdGlvbiBEYXlXaXRoaW5ZZWFyKHQpIHsKKyAgcmV0dXJuIERheSh0KS1EYXlGcm9tWWVhcihZ
ZWFyRnJvbVRpbWUodCkpOworfQorCisvLzE1LjkuMS40IE1vbnRoIE51bWJlcgorZnVuY3Rpb24g
TW9udGhGcm9tVGltZSh0KXsKKyAgdmFyIGRheSA9IERheVdpdGhpblllYXIodCk7CisgIHZhciBs
ZWFwID0gSW5MZWFwWWVhcih0KTsKKworICBpZigoMCA8PSBkYXkpICYmIChkYXkgPCAzMSkpIHJl
dHVybiAwOworICBpZigoMzEgPD0gZGF5KSAmJiAoZGF5IDwgKDU5K2xlYXApKSkgcmV0dXJuIDE7
CisgIGlmKCgoNTkrbGVhcCkgPD0gZGF5KSAmJiAoZGF5IDwgKDkwK2xlYXApKSkgcmV0dXJuIDI7
CisgIGlmKCgoOTArbGVhcCkgPD0gZGF5KSAmJiAoZGF5IDwgKDEyMCtsZWFwKSkpIHJldHVybiAz
OworICBpZigoKDEyMCtsZWFwKSA8PSBkYXkpICYmIChkYXkgPCAoMTUxK2xlYXApKSkgcmV0dXJu
IDQ7CisgIGlmKCgoMTUxK2xlYXApIDw9IGRheSkgJiYgKGRheSA8ICgxODErbGVhcCkpKSByZXR1
cm4gNTsKKyAgaWYoKCgxODErbGVhcCkgPD0gZGF5KSAmJiAoZGF5IDwgKDIxMitsZWFwKSkpIHJl
dHVybiA2OworICBpZigoKDIxMitsZWFwKSA8PSBkYXkpICYmIChkYXkgPCAoMjQzK2xlYXApKSkg
cmV0dXJuIDc7CisgIGlmKCgoMjQzK2xlYXApIDw9IGRheSkgJiYgKGRheSA8ICgyNzMrbGVhcCkp
KSByZXR1cm4gODsKKyAgaWYoKCgyNzMrbGVhcCkgPD0gZGF5KSAmJiAoZGF5IDwgKDMwNCtsZWFw
KSkpIHJldHVybiA5OworICBpZigoKDMwNCtsZWFwKSA8PSBkYXkpICYmIChkYXkgPCAoMzM0K2xl
YXApKSkgcmV0dXJuIDEwOworICBpZigoKDMzNCtsZWFwKSA8PSBkYXkpICYmIChkYXkgPCAoMzY1
K2xlYXApKSkgcmV0dXJuIDExOworfQorCisvLzE1LjkuMS41IERhdGUgTnVtYmVyCitmdW5jdGlv
biBEYXRlRnJvbVRpbWUodCkgeworICB2YXIgZGF5ID0gRGF5V2l0aGluWWVhcih0KTsKKyAgdmFy
IG1vbnRoID0gTW9udGhGcm9tVGltZSh0KTsKKyAgdmFyIGxlYXAgPSBJbkxlYXBZZWFyKHQpOwor
CisgIGlmKG1vbnRoID09IDApIHJldHVybiBkYXkrMTsKKyAgaWYobW9udGggPT0gMSkgcmV0dXJu
IGRheS0zMDsKKyAgaWYobW9udGggPT0gMikgcmV0dXJuIGRheS01OC1sZWFwOworICBpZihtb250
aCA9PSAzKSByZXR1cm4gZGF5LTg5LWxlYXA7CisgIGlmKG1vbnRoID09IDQpIHJldHVybiBkYXkt
MTE5LWxlYXA7CisgIGlmKG1vbnRoID09IDUpIHJldHVybiBkYXktMTUwLWxlYXA7CisgIGlmKG1v
bnRoID09IDYpIHJldHVybiBkYXktMTgwLWxlYXA7CisgIGlmKG1vbnRoID09IDcpIHJldHVybiBk
YXktMjExLWxlYXA7CisgIGlmKG1vbnRoID09IDgpIHJldHVybiBkYXktMjQyLWxlYXA7CisgIGlm
KG1vbnRoID09IDkpIHJldHVybiBkYXktMjcyLWxlYXA7CisgIGlmKG1vbnRoID09IDEwKSByZXR1
cm4gZGF5LTMwMy1sZWFwOworICBpZihtb250aCA9PSAxMSkgcmV0dXJuIGRheS0zMzMtbGVhcDsK
K30KKworLy8xNS45LjEuNiBXZWVrIERheQorZnVuY3Rpb24gV2Vla0RheSh0KSB7CisgIHZhciB3
ZWVrZGF5ID0gKERheSh0KSs0KSU3OworICByZXR1cm4gKHdlZWtkYXkgPCAwID8gNyt3ZWVrZGF5
IDogd2Vla2RheSk7Cit9CisKKy8vMTUuOS4xLjkgRGF5bGlnaHQgU2F2aW5nIFRpbWUgQWRqdXN0
bWVudAordmFyIExvY2FsVFpBID0gJExvY2FsVFoqbXNQZXJIb3VyOworCitmdW5jdGlvbiBEYXlz
SW5Nb250aChtLCBsZWFwKSB7CisgIG0gPSBtJTEyOworICAKKyAgLy9BcHJpbCwgSnVuZSwgU2Vw
dCwgTm92CisgIGlmKG0gPT0gMyB8fCBtID09IDUgfHwgbSA9PSA4IHx8IG0gPT0gMTAgKSB7Cisg
ICAgcmV0dXJuIDMwOworICB9CisKKyAgLy9KYW4sIE1hcmNoLCBNYXksIEp1bHksIEF1ZywgT2N0
LCBEZWMKKyAgaWYobSA9PSAwIHx8IG0gPT0gMiB8fCBtID09IDQgfHwgbSA9PSA2IHx8IG0gPT0g
NyB8fCBtID09IDkgfHwgbSA9PSAxMSl7CisgICAgcmV0dXJuIDMxOworICB9CisKKyAgLy9GZWIK
KyAgcmV0dXJuIDI4K2xlYXA7Cit9CisKK2Z1bmN0aW9uIEdldFN1bmRheUluTW9udGgodCwgbSwg
Y291bnQpeworICB2YXIgeWVhciA9IFllYXJGcm9tVGltZSh0KTsKKyAgdmFyIGxlYXAgPSBJbkxl
YXBZZWFyKHQpOworICB2YXIgZGF5ID0gMDsKKyAgCisgIGlmKG0gPj0gMSkgZGF5ICs9IERheXNJ
bk1vbnRoKDAsIGxlYXApOworICBpZihtID49IDIpIGRheSArPSBEYXlzSW5Nb250aCgxLCBsZWFw
KTsKKyAgaWYobSA+PSAzKSBkYXkgKz0gRGF5c0luTW9udGgoMiwgbGVhcCk7CisgIGlmKG0gPj0g
NCkgZGF5ICs9IERheXNJbk1vbnRoKDMsIGxlYXApOworICBpZihtID49IDUpIGRheSArPSBEYXlz
SW5Nb250aCg0LCBsZWFwKTsKKyAgaWYobSA+PSA2KSBkYXkgKz0gRGF5c0luTW9udGgoNSwgbGVh
cCk7CisgIGlmKG0gPj0gNykgZGF5ICs9IERheXNJbk1vbnRoKDYsIGxlYXApOworICBpZihtID49
IDgpIGRheSArPSBEYXlzSW5Nb250aCg3LCBsZWFwKTsKKyAgaWYobSA+PSA5KSBkYXkgKz0gRGF5
c0luTW9udGgoOCwgbGVhcCk7CisgIGlmKG0gPj0gMTApIGRheSArPSBEYXlzSW5Nb250aCg5LCBs
ZWFwKTsKKyAgaWYobSA+PSAxMSkgZGF5ICs9IERheXNJbk1vbnRoKDEwLCBsZWFwKTsKKyAgCisg
IHZhciBtb250aF9zdGFydCA9IFRpbWVGcm9tWWVhcih5ZWFyKStkYXkqbXNQZXJEYXk7CisgIHZh
ciBzdW5kYXkgPSAwOworICAKKyAgaWYoY291bnQgPT09ICJsYXN0Iil7CisgICAgZm9yKHZhciBs
YXN0X3N1bmRheSA9IG1vbnRoX3N0YXJ0K0RheXNJbk1vbnRoKG0sIGxlYXApKm1zUGVyRGF5OyAK
KyAgICAgIFdlZWtEYXkobGFzdF9zdW5kYXkpPjA7CisgICAgICBsYXN0X3N1bmRheSAtPSBtc1Bl
ckRheQorICAgICl7fTsKKyAgICBzdW5kYXkgPSBsYXN0X3N1bmRheTsKKyAgfQorICBlbHNlIHsK
KyAgICBmb3IodmFyIGZpcnN0X3N1bmRheSA9IG1vbnRoX3N0YXJ0OyAKKyAgICAgIFdlZWtEYXko
Zmlyc3Rfc3VuZGF5KT4wOworICAgICAgZmlyc3Rfc3VuZGF5ICs9IG1zUGVyRGF5CisgICAgKXt9
OworICAgIHN1bmRheSA9IGZpcnN0X3N1bmRheSs3Km1zUGVyRGF5Kihjb3VudC0xKTsKKyAgfQor
ICAKKyAgcmV0dXJuIHN1bmRheTsKK30KKworZnVuY3Rpb24gRGF5bGlnaHRTYXZpbmdUQSh0KSB7
CisgIHQgPSB0LUxvY2FsVFpBOworCisgIHZhciBEU1Rfc3RhcnQgPSBHZXRTdW5kYXlJbk1vbnRo
KHQsICREU1Rfc3RhcnRfbW9udGgsICREU1Rfc3RhcnRfc3VuZGF5KQorICAgICAgICAgICAgICAg
ICAgKyREU1Rfc3RhcnRfaG91ciptc1BlckhvdXIKKyAgICAgICAgICAgICAgICAgICskRFNUX3N0
YXJ0X21pbnV0ZXMqbXNQZXJNaW51dGU7CisgICAgICAgICAgICAgICAgICAKKyAgdmFyIGsgPSBu
ZXcgRGF0ZShEU1Rfc3RhcnQpOworICAKKyAgdmFyIERTVF9lbmQgICA9IEdldFN1bmRheUluTW9u
dGgodCwgJERTVF9lbmRfbW9udGgsICREU1RfZW5kX3N1bmRheSkKKyAgICAgICAgICAgICAgICAg
ICskRFNUX2VuZF9ob3VyKm1zUGVySG91cgorICAgICAgICAgICAgICAgICAgKyREU1RfZW5kX21p
bnV0ZXMqbXNQZXJNaW51dGU7CisKKyAgaWYgKCB0ID49IERTVF9zdGFydCAmJiB0IDwgRFNUX2Vu
ZCApIHsKKyAgICByZXR1cm4gbXNQZXJIb3VyOworICB9IGVsc2UgeworICAgIHJldHVybiAwOwor
ICB9Cit9CisKKy8vMTUuOS4xLjkgTG9jYWwgVGltZQorZnVuY3Rpb24gTG9jYWxUaW1lKHQpewor
ICByZXR1cm4gdCtMb2NhbFRaQStEYXlsaWdodFNhdmluZ1RBKHQpOworfQorCitmdW5jdGlvbiBV
VEModCkgeworICByZXR1cm4gdC1Mb2NhbFRaQS1EYXlsaWdodFNhdmluZ1RBKHQtTG9jYWxUWkEp
OworfQorCisvLzE1LjkuMS4xMCBIb3VycywgTWludXRlcywgU2Vjb25kLCBhbmQgTWlsbGlzZWNv
bmRzCitmdW5jdGlvbiBIb3VyRnJvbVRpbWUodCl7CisgIHJldHVybiBNYXRoLmZsb29yKHQvbXNQ
ZXJIb3VyKSVIb3Vyc1BlckRheTsKK30KKworZnVuY3Rpb24gTWluRnJvbVRpbWUodCl7CisgIHJl
dHVybiBNYXRoLmZsb29yKHQvbXNQZXJNaW51dGUpJU1pbnV0ZXNQZXJIb3VyOworfQorCitmdW5j
dGlvbiBTZWNGcm9tVGltZSh0KXsKKyAgcmV0dXJuIE1hdGguZmxvb3IodC9tc1BlclNlY29uZCkl
U2Vjb25kc1Blck1pbnV0ZTsKK30KKworZnVuY3Rpb24gbXNGcm9tVGltZSh0KXsKKyAgcmV0dXJu
IHQlbXNQZXJTZWNvbmQ7Cit9CisKKy8vMTUuOS4xLjExIE1ha2VUaW1lIChob3VyLCBtaW4sIHNl
YywgbXMpCitmdW5jdGlvbiBNYWtlVGltZShob3VyLCBtaW4sIHNlYywgbXMpeworICBpZiAoICFp
c0Zpbml0ZShob3VyKSB8fCAhaXNGaW5pdGUobWluKSB8fCAhaXNGaW5pdGUoc2VjKSB8fCAhaXNG
aW5pdGUobXMpKSB7CisgICAgcmV0dXJuIE51bWJlci5OYU47CisgIH0KKworICBob3VyID0gVG9J
bnRlZ2VyKGhvdXIpOworICBtaW4gID0gVG9JbnRlZ2VyKG1pbik7CisgIHNlYyAgPSBUb0ludGVn
ZXIoc2VjKTsKKyAgbXMgICA9IFRvSW50ZWdlcihtcyk7CisKKyAgcmV0dXJuICgoaG91ciptc1Bl
ckhvdXIpICsgKG1pbiptc1Blck1pbnV0ZSkgKyAoc2VjKm1zUGVyU2Vjb25kKSArIG1zKTsKK30K
KworLy8xNS45LjEuMTIgTWFrZURheSAoeWVhciwgbW9udGgsIGRhdGUpCitmdW5jdGlvbiBNYWtl
RGF5KHllYXIsIG1vbnRoLCBkYXRlKSB7CisgIGlmICggIWlzRmluaXRlKHllYXIpIHx8ICFpc0Zp
bml0ZShtb250aCkgfHwgIWlzRmluaXRlKGRhdGUpKSB7CisgICAgcmV0dXJuIE51bWJlci5OYU47
CisgIH0KKworICB5ZWFyID0gVG9JbnRlZ2VyKHllYXIpOworICBtb250aCA9IFRvSW50ZWdlciht
b250aCk7CisgIGRhdGUgPSBUb0ludGVnZXIoZGF0ZSApOworCisgIHZhciByZXN1bHQ1ID0geWVh
ciArIE1hdGguZmxvb3IobW9udGgvMTIpOworICB2YXIgcmVzdWx0NiA9IG1vbnRoJTEyOworCisg
IHZhciBzaWduID0gKCB5ZWFyIDwgMTk3MCApID8gLTEgOiAxOworICB2YXIgdCA9ICAgICggeWVh
ciA8IDE5NzAgKSA/IDEgOiAgMDsKKyAgdmFyIHkgPSAgICAoIHllYXIgPCAxOTcwICkgPyAxOTY5
IDogMTk3MDsKKworICBpZiggc2lnbiA9PSAtMSApeworICAgIGZvciAoIHkgPSAxOTY5OyB5ID49
IHllYXI7IHkgKz0gc2lnbiApIHsKKyAgICAgIHQgKz0gc2lnbiAqIERheXNJblllYXIoeSkqbXNQ
ZXJEYXk7CisgICAgfQorICB9IGVsc2UgeworICAgIGZvciAoIHkgPSAxOTcwIDsgeSA8IHllYXI7
IHkgKz0gc2lnbiApIHsKKyAgICAgIHQgKz0gc2lnbiAqIERheXNJblllYXIoeSkqbXNQZXJEYXk7
CisgICAgfQorICB9CisKKyAgdmFyIGxlYXAgPSAwOworICBmb3IgKCB2YXIgbSA9IDA7IG0gPCBt
b250aDsgbSsrICkgeworICAgIC8vaWYgeWVhciBpcyBjaGFuZ2VkLCB0aGFuIHdlIG5lZWQgdG8g
cmVjYWxjdWxhdGUgbGVlcAorICAgIGxlYXAgPSBJbkxlYXBZZWFyKHQpOworICAgIHQgKz0gRGF5
c0luTW9udGgobSwgbGVhcCkqbXNQZXJEYXk7CisgIH0KKworICBpZiAoIFllYXJGcm9tVGltZSh0
KSAhPSByZXN1bHQ1ICkgeworICAgIHJldHVybiBOdW1iZXIuTmFOOworICB9CisgIGlmICggTW9u
dGhGcm9tVGltZSh0KSAhPSByZXN1bHQ2ICkgeworICAgIHJldHVybiBOdW1iZXIuTmFOOworICB9
CisgIGlmICggRGF0ZUZyb21UaW1lKHQpICE9IDEgKSB7CisgICAgcmV0dXJuIE51bWJlci5OYU47
CisgIH0KKworICByZXR1cm4gRGF5KHQpK2RhdGUtMTsKK30KKworLy8xNS45LjEuMTMgTWFrZURh
dGUgKGRheSwgdGltZSkKK2Z1bmN0aW9uIE1ha2VEYXRlKCBkYXksIHRpbWUgKSB7CisgIGlmKCFp
c0Zpbml0ZShkYXkpIHx8ICFpc0Zpbml0ZSh0aW1lKSkgeworICAgIHJldHVybiBOdW1iZXIuTmFO
OworICB9CisgIAorICByZXR1cm4gZGF5Km1zUGVyRGF5K3RpbWU7Cit9CisKKy8vMTUuOS4xLjE0
IFRpbWVDbGlwICh0aW1lKQorZnVuY3Rpb24gVGltZUNsaXAodGltZSkgeworICBpZighaXNGaW5p
dGUodGltZSkgfHwgTWF0aC5hYnModGltZSkgPiA4LjY0ZTE1KXsKKyAgICByZXR1cm4gTnVtYmVy
Lk5hTjsKKyAgfQorCisgIHJldHVybiBUb0ludGVnZXIodGltZSk7Cit9CisKKy8vVGVzdCBGdW5j
dGlvbnMKK2Z1bmN0aW9uIENvbnN0cnVjdERhdGUoeWVhciwgbW9udGgsIGRhdGUsIGhvdXJzLCBt
aW51dGVzLCBzZWNvbmRzLCBtcyl7CisgIC8qCisgICAqIDEuIENhbGwgVG9OdW1iZXIoeWVhcikK
KyAgICogMi4gQ2FsbCBUb051bWJlcihtb250aCkKKyAgICogMy4gSWYgZGF0ZSBpcyBzdXBwbGll
ZCB1c2UgVG9OdW1iZXIoZGF0ZSk7IGVsc2UgdXNlIDEKKyAgICogNC4gSWYgaG91cnMgaXMgc3Vw
cGxpZWQgdXNlIFRvTnVtYmVyKGhvdXJzKTsgZWxzZSB1c2UgMAorICAgKiA1LiBJZiBtaW51dGVz
IGlzIHN1cHBsaWVkIHVzZSBUb051bWJlcihtaW51dGVzKTsgZWxzZSB1c2UgMAorICAgKiA2LiBJ
ZiBzZWNvbmRzIGlzIHN1cHBsaWVkIHVzZSBUb051bWJlcihzZWNvbmRzKTsgZWxzZSB1c2UgMAor
ICAgKiA3LiBJZiBtcyBpcyBzdXBwbGllZCB1c2UgVG9OdW1iZXIobXMpOyBlbHNlIHVzZSAwCisg
ICAqIDguIElmIFJlc3VsdCgxKSBpcyBub3QgTmFOIGFuZCAwIDw9IFRvSW50ZWdlcihSZXN1bHQo
MSkpIDw9IDk5LCBSZXN1bHQoOCkgaXMKKyAgICogMTkwMCtUb0ludGVnZXIoUmVzdWx0KDEpKTsg
b3RoZXJ3aXNlLCBSZXN1bHQoOCkgaXMgUmVzdWx0KDEpCisgICAqIDkuIENvbXB1dGUgTWFrZURh
eShSZXN1bHQoOCksIFJlc3VsdCgyKSwgUmVzdWx0KDMpKQorICAgKiAxMC4gQ29tcHV0ZSBNYWtl
VGltZShSZXN1bHQoNCksIFJlc3VsdCg1KSwgUmVzdWx0KDYpLCBSZXN1bHQoNykpCisgICAqIDEx
LiBDb21wdXRlIE1ha2VEYXRlKFJlc3VsdCg5KSwgUmVzdWx0KDEwKSkKKyAgICogMTIuIFNldCB0
aGUgW1tWYWx1ZV1dIHByb3BlcnR5IG9mIHRoZSBuZXdseSBjb25zdHJ1Y3RlZCBvYmplY3QgdG8g
VGltZUNsaXAoVVRDKFJlc3VsdCgxMSkpKQorICAgKi8KKyAgdmFyIHIxID0gTnVtYmVyKHllYXIp
OworICB2YXIgcjIgPSBOdW1iZXIobW9udGgpOworICB2YXIgcjMgPSAoKGRhdGUgJiYgYXJndW1l
bnRzLmxlbmd0aCA+IDIpID8gTnVtYmVyKGRhdGUpIDogMSk7CisgIHZhciByNCA9ICgoaG91cnMg
JiYgYXJndW1lbnRzLmxlbmd0aCA+IDMpID8gTnVtYmVyKGhvdXJzKSA6IDApOyAgIAorICB2YXIg
cjUgPSAoKG1pbnV0ZXMgJiYgYXJndW1lbnRzLmxlbmd0aCA+IDQpID8gTnVtYmVyKG1pbnV0ZXMp
IDogMCk7ICAgCisgIHZhciByNiA9ICgoc2Vjb25kcyAmJiBhcmd1bWVudHMubGVuZ3RoID4gNSkg
PyBOdW1iZXIoc2Vjb25kcykgOiAwKTsgICAKKyAgdmFyIHI3ID0gKChtcyAmJiBhcmd1bWVudHMu
bGVuZ3RoID4gNikgPyBOdW1iZXIobXMpIDogMCk7CisgIAorICB2YXIgcjggPSByMTsKKyAgCisg
IGlmKCFpc05hTihyMSkgJiYgKDAgPD0gVG9JbnRlZ2VyKHIxKSkgJiYgKFRvSW50ZWdlcihyMSkg
PD0gOTkpKQorICAgIHI4ID0gMTkwMCtyMTsKKyAgCisgIHZhciByOSA9IE1ha2VEYXkocjgsIHIy
LCByMyk7CisgIHZhciByMTAgPSBNYWtlVGltZShyNCwgcjUsIHI2LCByNyk7CisgIHZhciByMTEg
PSBNYWtlRGF0ZShyOSwgcjEwKTsKKyAgCisgIHJldHVybiBUaW1lQ2xpcChVVEMocjExKSk7Cit9
CisKKworCitpZiAoQ29uc3RydWN0RGF0ZSgxODk5LCAxMSwgMzEsIDIzLCA1OSwgNTksIDk5OSkg
IT09IG5ldyBEYXRlKDE4OTksIDExLCAzMSwgMjMsIDU5LCA1OSwgOTk5KS52YWx1ZU9mKCkpIHsK
KyAgdGVzdEZhaWxlZCgiIzE6IEluY29ycmVjdCB2YWx1ZSBvZiBEYXRlIik7Cit9CisKK2lmIChD
b25zdHJ1Y3REYXRlKDE4OTksIDEyLCAxLCAwLCAwLCAwLCAwKSAhPT0gbmV3IERhdGUoMTg5OSwg
MTIsIDEsIDAsIDAsIDAsIDApLnZhbHVlT2YoKSkgeworICB0ZXN0RmFpbGVkKCIjMjogSW5jb3Jy
ZWN0IHZhbHVlIG9mIERhdGUiKTsKK30KKworaWYgKENvbnN0cnVjdERhdGUoMTkwMCwgMCwgMSwg
MCwgMCwgMCwgMCkgIT09IG5ldyBEYXRlKDE5MDAsIDAsIDEsIDAsIDAsIDAsIDApLnZhbHVlT2Yo
KSkgeworICB0ZXN0RmFpbGVkKCIjMzogSW5jb3JyZWN0IHZhbHVlIG9mIERhdGUiKTsKK30KKwor
aWYgKENvbnN0cnVjdERhdGUoMTk2OSwgMTEsIDMxLCAyMywgNTksIDU5LCA5OTkpICE9PSBuZXcg
RGF0ZSgxOTY5LCAxMSwgMzEsIDIzLCA1OSwgNTksIDk5OSkudmFsdWVPZigpKSB7CisgIHRlc3RG
YWlsZWQoIiM0OiBJbmNvcnJlY3QgdmFsdWUgb2YgRGF0ZSIpOworfQorCitpZiAoQ29uc3RydWN0
RGF0ZSgxOTY5LCAxMiwgMSwgMCwgMCwgMCwgMCkgIT09IG5ldyBEYXRlKDE5NjksIDEyLCAxLCAw
LCAwLCAwLCAwKS52YWx1ZU9mKCkpIHsKKyAgdGVzdEZhaWxlZCgiIzU6IEluY29ycmVjdCB2YWx1
ZSBvZiBEYXRlIik7Cit9CisKK2lmIChDb25zdHJ1Y3REYXRlKDE5NzAsIDAsIDEsIDAsIDAsIDAs
IDApICE9PSBuZXcgRGF0ZSgxOTcwLCAwLCAxLCAwLCAwLCAwLCAwKS52YWx1ZU9mKCkpIHsKKyAg
dGVzdEZhaWxlZCgiIzY6IEluY29ycmVjdCB2YWx1ZSBvZiBEYXRlIik7Cit9CisKK2lmIChDb25z
dHJ1Y3REYXRlKDE5OTksIDExLCAzMSwgMjMsIDU5LCA1OSwgOTk5KSAhPT0gbmV3IERhdGUoMTk5
OSwgMTEsIDMxLCAyMywgNTksIDU5LCA5OTkpLnZhbHVlT2YoKSkgeworICB0ZXN0RmFpbGVkKCIj
NzogSW5jb3JyZWN0IHZhbHVlIG9mIERhdGUiKTsKK30KKworaWYgKENvbnN0cnVjdERhdGUoMTk5
OSwgMTIsIDEsIDAsIDAsIDAsIDApICE9PSBuZXcgRGF0ZSgxOTk5LCAxMiwgMSwgMCwgMCwgMCwg
MCkudmFsdWVPZigpKSB7CisgIHRlc3RGYWlsZWQoIiM4OiBJbmNvcnJlY3QgdmFsdWUgb2YgRGF0
ZSIpOworfQorCitpZiAoQ29uc3RydWN0RGF0ZSgyMDAwLCAwLCAxLCAwLCAwLCAwLCAwKSAhPT0g
bmV3IERhdGUoMjAwMCwgMCwgMSwgMCwgMCwgMCwgMCkudmFsdWVPZigpKSB7CisgIHRlc3RGYWls
ZWQoIiM5OiBJbmNvcnJlY3QgdmFsdWUgb2YgRGF0ZSIpOworfQorCitpZiAoQ29uc3RydWN0RGF0
ZSgyMDk5LCAxMSwgMzEsIDIzLCA1OSwgNTksIDk5OSkgIT09IG5ldyBEYXRlKDIwOTksIDExLCAz
MSwgMjMsIDU5LCA1OSwgOTk5KS52YWx1ZU9mKCkpIHsKKyAgdGVzdEZhaWxlZCgiIzEwOiBJbmNv
cnJlY3QgdmFsdWUgb2YgRGF0ZSIpOworfQorCitpZiAoQ29uc3RydWN0RGF0ZSgyMDk5LCAxMiwg
MSwgMCwgMCwgMCwgMCkgIT09IG5ldyBEYXRlKDIwOTksIDEyLCAxLCAwLCAwLCAwLCAwKS52YWx1
ZU9mKCkpIHsKKyAgdGVzdEZhaWxlZCgiIzExOiBJbmNvcnJlY3QgdmFsdWUgb2YgRGF0ZSIpOwor
fQorCitpZiAoQ29uc3RydWN0RGF0ZSgyMTAwLCAwLCAxLCAwLCAwLCAwLCAwKSAhPT0gbmV3IERh
dGUoMjEwMCwgMCwgMSwgMCwgMCwgMCwgMCkudmFsdWVPZigpKSB7CisgIHRlc3RGYWlsZWQoIiMx
MjogSW5jb3JyZWN0IHZhbHVlIG9mIERhdGUiKTsKK30KKworfSBjYXRjaCAoZXgpIHsKKyAgICBz
cHV0bmlrRXhjZXB0aW9uID0gZXg7Cit9CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVl
OworPC9zY3JpcHQ+CisKKzxzY3JpcHQ+CitpZiAoIXN1Y2Nlc3NmdWxseVBhcnNlZCkKKyAgICBw
cmludFRlc3RGYWlsZWQoJ3N1Y2Nlc3NmdWxseVBhcnNlZCBpcyBub3Qgc2V0Jyk7CitlbHNlIGlm
IChzcHV0bmlrRXhjZXB0aW9uKQorICAgIHByaW50VGVzdEZhaWxlZChzcHV0bmlrRXhjZXB0aW9u
KTsKK2Vsc2UKKyAgICBwcmludFRlc3RQYXNzZWQoIiIpOwordGVzdFByaW50KCc8YnIgLz48c3Bh
biBjbGFzcz0icGFzcyI+VEVTVCBDT01QTEVURTwvc3Bhbj4nKTsKKzwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3B1dG5pay9Db25mb3JtYW5jZS8x
NV9OYXRpdmVfT2JqZWN0cy8xNS45X0RhdGUvMTUuOS4zL1MxNS45LjMuMV9BNV9UNi5odG1sLWRp
c2FibGVkIGIvTGF5b3V0VGVzdHMvc3B1dG5pay9Db25mb3JtYW5jZS8xNV9OYXRpdmVfT2JqZWN0
cy8xNS45X0RhdGUvMTUuOS4zL1MxNS45LjMuMV9BNV9UNi5odG1sLWRpc2FibGVkCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjdmMDQxMWViNjI3OWE4YjYxOWMwNGFhNzhhOTBlNDhh
OGM4MzgyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xh
eW91dFRlc3RzL3NwdXRuaWsvQ29uZm9ybWFuY2UvMTVfTmF0aXZlX09iamVjdHMvMTUuOV9EYXRl
LzE1LjkuMy9TMTUuOS4zLjFfQTVfVDYuaHRtbC1kaXNhYmxlZAorKysgL2Rldi9udWxsCkBAIC0x
LDUyMiArMCwwIEBACi08aHRtbD4KLTxoZWFkPgotPG1ldGEgY2hhcnNldD0ndXRmLTgnPgotPHN0
eWxlPgotLnBhc3MgewotICAgIGZvbnQtd2VpZ2h0OiBib2xkOwotICAgIGNvbG9yOiBncmVlbjsK
LX0KLS5mYWlsIHsKLSAgICBmb250LXdlaWdodDogYm9sZDsKLSAgICBjb2xvcjogcmVkOwotfQot
PC9zdHlsZT4KLQotPHNjcmlwdD4KLWlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICB0ZXN0UnVu
bmVyLmR1bXBBc1RleHQoKTsKLQotZnVuY3Rpb24gU3B1dG5pa0Vycm9yKG1lc3NhZ2UpCi17Ci0g
ICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKLX0KLQotU3B1dG5pa0Vycm9yLnByb3RvdHlwZS50
b1N0cmluZyA9IGZ1bmN0aW9uICgpCi17Ci0gICAgcmV0dXJuICdTcHV0bmlrRXJyb3I6ICcgKyB0
aGlzLm1lc3NhZ2U7Ci19OwotCi12YXIgc3B1dG5pa0V4Y2VwdGlvbjsKLQotZnVuY3Rpb24gdGVz
dFByaW50KG1zZykKLXsKLSAgICB2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNw
YW4iKTsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmFwcGVuZENoaWxk
KHNwYW4pOyAvLyBpbnNlcnQgaXQgZmlyc3Qgc28gWEhUTUwga25vd3MgdGhlIG5hbWVzcGFjZSAK
LSAgICBzcGFuLmlubmVySFRNTCA9IG1zZyArICc8YnIgLz4nOwotfQotCi1mdW5jdGlvbiBlc2Nh
cGVIVE1MKHRleHQpCi17Ci0gICAgcmV0dXJuIHRleHQudG9TdHJpbmcoKS5yZXBsYWNlKC8mL2cs
ICImYW1wOyIpLnJlcGxhY2UoLzwvZywgIiZsdDsiKTsKLX0KLQotZnVuY3Rpb24gcHJpbnRUZXN0
UGFzc2VkKG1zZykKLXsKLSAgICB0ZXN0UHJpbnQoJzxzcGFuPjxzcGFuIGNsYXNzPSJwYXNzIj5Q
QVNTPC9zcGFuPiAnICsgZXNjYXBlSFRNTChtc2cpICsgJzwvc3Bhbj4nKTsKLX0KLQotZnVuY3Rp
b24gcHJpbnRUZXN0RmFpbGVkKG1zZykKLXsKLSAgICB0ZXN0UHJpbnQoJzxzcGFuPjxzcGFuIGNs
YXNzPSJmYWlsIj5GQUlMPC9zcGFuPiAnICsgZXNjYXBlSFRNTChtc2cpICsgJzwvc3Bhbj4nKTsK
LX0KLQotZnVuY3Rpb24gdGVzdEZhaWxlZChtc2cpCi17Ci0gICAgdGhyb3cgbmV3IFNwdXRuaWtF
cnJvcihtc2cpOwotfQotCi12YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gZmFsc2U7Ci08L3Njcmlw
dD4KLQotPC9oZWFkPgotPGJvZHk+Ci08cD5TMTUuOS4zLjFfQTVfVDY8L3A+Ci08ZGl2IGlkPSdj
b25zb2xlJz48L2Rpdj4KLTxzY3JpcHQ+Ci10cnkgewotCi0vKioKLSAqIEBuYW1lOiBTMTUuOS4z
LjFfQTVfVDY7Ci0gKiBAc2VjdGlvbjogMTUuOS4zLjE7Ci0gKiBAYXNzZXJ0aW9uOiBUaGUgW1tW
YWx1ZV1dIHByb3BlcnR5IG9mIHRoZSBuZXdseSBjb25zdHJ1Y3RlZCBvYmplY3QgCi0gKiBpcyBz
ZXQgYnkgZm9sbG93aW5nIHN0ZXBzOgotICogOC4gSWYgUmVzdWx0KDEpIGlzIG5vdCBOYU4gYW5k
IDAgPD0gVG9JbnRlZ2VyKFJlc3VsdCgxKSkgPD0gOTksIFJlc3VsdCg4KSBpcwotICogMTkwMCtU
b0ludGVnZXIoUmVzdWx0KDEpKTsgb3RoZXJ3aXNlLCBSZXN1bHQoOCkgaXMgUmVzdWx0KDEpCi0g
KiA5LiBDb21wdXRlIE1ha2VEYXkoUmVzdWx0KDgpLCBSZXN1bHQoMiksIFJlc3VsdCgzKSkKLSAq
IDEwLiBDb21wdXRlIE1ha2VUaW1lKFJlc3VsdCg0KSwgUmVzdWx0KDUpLCBSZXN1bHQoNiksIFJl
c3VsdCg3KSkKLSAqIDExLiBDb21wdXRlIE1ha2VEYXRlKFJlc3VsdCg5KSwgUmVzdWx0KDEwKSkK
LSAqIDEyLiBTZXQgdGhlIFtbVmFsdWVdXSBwcm9wZXJ0eSBvZiB0aGUgbmV3bHkgY29uc3RydWN0
ZWQgb2JqZWN0IHRvIAotICogVGltZUNsaXAoVVRDKFJlc3VsdCgxMSkpKTsKLSAqIEBkZXNjcmlw
dGlvbjogNyBhcmd1bWVudHMsICh5ZWFyLCBtb250aCwgZGF0ZSwgaG91cnMsIG1pbnV0ZXMsIHNl
Y29uZHMsIG1zKTsKLSAqLwotCi12YXIgJERTVF9lbmRfaG91ciA9IDI7Ci12YXIgJERTVF9lbmRf
bWludXRlcyA9IDA7Ci12YXIgJERTVF9lbmRfbW9udGggPSAxMDsKLXZhciAkRFNUX2VuZF9zdW5k
YXkgPSAnZmlyc3QnOwotdmFyICREU1Rfc3RhcnRfaG91ciA9IDI7Ci12YXIgJERTVF9zdGFydF9t
aW51dGVzID0gMDsKLXZhciAkRFNUX3N0YXJ0X21vbnRoID0gMjsKLXZhciAkRFNUX3N0YXJ0X3N1
bmRheSA9ICdmaXJzdCc7Ci12YXIgJExvY2FsVFogPSAtODsKLWZ1bmN0aW9uIFRvSW50ZWdlcihw
KSB7Ci0gIHggPSBOdW1iZXIocCk7Ci0KLSAgaWYoaXNOYU4oeCkpewotICAgIHJldHVybiArMDsK
LSAgfQotICAKLSAgaWYoKHggPT09ICswKSAKLSAgfHwgKHggPT09IC0wKSAKLSAgfHwgKHggPT09
IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkgCi0gIHx8ICh4ID09PSBOdW1iZXIuTkVHQVRJVkVf
SU5GSU5JVFkpKXsKLSAgICAgcmV0dXJuIHg7Ci0gIH0KLQotICB2YXIgc2lnbiA9ICggeCA8IDAg
KSA/IC0xIDogMTsKLQotICByZXR1cm4gKHNpZ24qTWF0aC5mbG9vcihNYXRoLmFicyh4KSkpOwot
fQotCi0KLXZhciBIb3Vyc1BlckRheSA9IDI0OwotdmFyIE1pbnV0ZXNQZXJIb3VyID0gNjA7Ci12
YXIgU2Vjb25kc1Blck1pbnV0ZSA9IDYwOwotCi12YXIgbXNQZXJEYXkgPSA4NjQwMDAwMDsKLXZh
ciBtc1BlclNlY29uZCA9IDEwMDA7Ci12YXIgbXNQZXJNaW51dGUgPSA2MDAwMDsKLXZhciBtc1Bl
ckhvdXIgPSAzNjAwMDAwOwotCi12YXIgZGF0ZV8xODk5X2VuZCA9IC0yMjA4OTg4ODAwMDAxOwot
dmFyIGRhdGVfMTkwMF9zdGFydCA9IC0yMjA4OTg4ODAwMDAwOwotdmFyIGRhdGVfMTk2OV9lbmQg
PSAtMTsKLXZhciBkYXRlXzE5NzBfc3RhcnQgPSAwOwotdmFyIGRhdGVfMTk5OV9lbmQgPSA5NDY2
ODQ3OTk5OTk7Ci12YXIgZGF0ZV8yMDAwX3N0YXJ0ID0gOTQ2Njg0ODAwMDAwOwotdmFyIGRhdGVf
MjA5OV9lbmQgPSA0MTAyNDQ0Nzk5OTk5OwotdmFyIGRhdGVfMjEwMF9zdGFydCA9IDQxMDI0NDQ4
MDAwMDA7Ci0KLQotLy8xNS45LjEuMiBEYXkgTnVtYmVyIGFuZCBUaW1lIHdpdGhpbiBEYXkKLWZ1
bmN0aW9uIERheSh0KSB7Ci0gIHJldHVybiBNYXRoLmZsb29yKHQvbXNQZXJEYXkpOwotfQotCi1m
dW5jdGlvbiBUaW1lV2l0aGluRGF5KHQpIHsKLSAgcmV0dXJuIHQlbXNQZXJEYXk7Ci19Ci0KLS8v
MTUuOS4xLjMgWWVhciBOdW1iZXIKLWZ1bmN0aW9uIERheXNJblllYXIoeSl7Ci0gIGlmKHklNCAh
PSAwKSByZXR1cm4gMzY1OwotICBpZih5JTQgPT0gMCAmJiB5JTEwMCAhPSAwKSByZXR1cm4gMzY2
OwotICBpZih5JTEwMCA9PSAwICYmIHklNDAwICE9IDApIHJldHVybiAzNjU7Ci0gIGlmKHklNDAw
ID09IDApIHJldHVybiAzNjY7Ci19Ci0KLWZ1bmN0aW9uIERheUZyb21ZZWFyKHkpIHsKLSAgcmV0
dXJuICgzNjUqKHktMTk3MCkKLSAgICAgICAgICArIE1hdGguZmxvb3IoKHktMTk2OSkvNCkKLSAg
ICAgICAgICAtIE1hdGguZmxvb3IoKHktMTkwMSkvMTAwKQotICAgICAgICAgICsgTWF0aC5mbG9v
cigoeS0xNjAxKS80MDApKTsKLX0KLQotZnVuY3Rpb24gVGltZUZyb21ZZWFyKHkpewotICByZXR1
cm4gbXNQZXJEYXkqRGF5RnJvbVllYXIoeSk7Ci19Ci0KLWZ1bmN0aW9uIFllYXJGcm9tVGltZSh0
KSB7Ci0gIHQgPSBOdW1iZXIodCk7Ci0gIHZhciBzaWduID0gKCB0IDwgMCApID8gLTEgOiAxOwot
ICB2YXIgeWVhciA9ICggc2lnbiA8IDAgKSA/IDE5NjkgOiAxOTcwOwotICAKLSAgZm9yKHZhciB0
aW1lID0gMDs7eWVhciArPSBzaWduKXsKLSAgICB0aW1lID0gVGltZUZyb21ZZWFyKHllYXIpOwot
ICAgIAotICAgIGlmKHNpZ24gPiAwICYmIHRpbWUgPiB0KXsKLSAgICAgIHllYXIgLT0gc2lnbjsK
LSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBlbHNlIGlmKHNpZ24gPCAwICYmIHRpbWUgPD0gdCl7
Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH07Ci0gIHJldHVybiB5ZWFyOwotfQotICAKLWZ1bmN0
aW9uIEluTGVhcFllYXIodCl7Ci0gIGlmKERheXNJblllYXIoWWVhckZyb21UaW1lKHQpKSA9PSAz
NjUpCi0gICAgcmV0dXJuIDA7Ci0gIAotICBpZihEYXlzSW5ZZWFyKFllYXJGcm9tVGltZSh0KSkg
PT0gMzY2KQotICAgIHJldHVybiAxOwotfQotCi1mdW5jdGlvbiBEYXlXaXRoaW5ZZWFyKHQpIHsK
LSAgcmV0dXJuIERheSh0KS1EYXlGcm9tWWVhcihZZWFyRnJvbVRpbWUodCkpOwotfQotCi0vLzE1
LjkuMS40IE1vbnRoIE51bWJlcgotZnVuY3Rpb24gTW9udGhGcm9tVGltZSh0KXsKLSAgdmFyIGRh
eSA9IERheVdpdGhpblllYXIodCk7Ci0gIHZhciBsZWFwID0gSW5MZWFwWWVhcih0KTsKLQotICBp
ZigoMCA8PSBkYXkpICYmIChkYXkgPCAzMSkpIHJldHVybiAwOwotICBpZigoMzEgPD0gZGF5KSAm
JiAoZGF5IDwgKDU5K2xlYXApKSkgcmV0dXJuIDE7Ci0gIGlmKCgoNTkrbGVhcCkgPD0gZGF5KSAm
JiAoZGF5IDwgKDkwK2xlYXApKSkgcmV0dXJuIDI7Ci0gIGlmKCgoOTArbGVhcCkgPD0gZGF5KSAm
JiAoZGF5IDwgKDEyMCtsZWFwKSkpIHJldHVybiAzOwotICBpZigoKDEyMCtsZWFwKSA8PSBkYXkp
ICYmIChkYXkgPCAoMTUxK2xlYXApKSkgcmV0dXJuIDQ7Ci0gIGlmKCgoMTUxK2xlYXApIDw9IGRh
eSkgJiYgKGRheSA8ICgxODErbGVhcCkpKSByZXR1cm4gNTsKLSAgaWYoKCgxODErbGVhcCkgPD0g
ZGF5KSAmJiAoZGF5IDwgKDIxMitsZWFwKSkpIHJldHVybiA2OwotICBpZigoKDIxMitsZWFwKSA8
PSBkYXkpICYmIChkYXkgPCAoMjQzK2xlYXApKSkgcmV0dXJuIDc7Ci0gIGlmKCgoMjQzK2xlYXAp
IDw9IGRheSkgJiYgKGRheSA8ICgyNzMrbGVhcCkpKSByZXR1cm4gODsKLSAgaWYoKCgyNzMrbGVh
cCkgPD0gZGF5KSAmJiAoZGF5IDwgKDMwNCtsZWFwKSkpIHJldHVybiA5OwotICBpZigoKDMwNCts
ZWFwKSA8PSBkYXkpICYmIChkYXkgPCAoMzM0K2xlYXApKSkgcmV0dXJuIDEwOwotICBpZigoKDMz
NCtsZWFwKSA8PSBkYXkpICYmIChkYXkgPCAoMzY1K2xlYXApKSkgcmV0dXJuIDExOwotfQotCi0v
LzE1LjkuMS41IERhdGUgTnVtYmVyCi1mdW5jdGlvbiBEYXRlRnJvbVRpbWUodCkgewotICB2YXIg
ZGF5ID0gRGF5V2l0aGluWWVhcih0KTsKLSAgdmFyIG1vbnRoID0gTW9udGhGcm9tVGltZSh0KTsK
LSAgdmFyIGxlYXAgPSBJbkxlYXBZZWFyKHQpOwotCi0gIGlmKG1vbnRoID09IDApIHJldHVybiBk
YXkrMTsKLSAgaWYobW9udGggPT0gMSkgcmV0dXJuIGRheS0zMDsKLSAgaWYobW9udGggPT0gMikg
cmV0dXJuIGRheS01OC1sZWFwOwotICBpZihtb250aCA9PSAzKSByZXR1cm4gZGF5LTg5LWxlYXA7
Ci0gIGlmKG1vbnRoID09IDQpIHJldHVybiBkYXktMTE5LWxlYXA7Ci0gIGlmKG1vbnRoID09IDUp
IHJldHVybiBkYXktMTUwLWxlYXA7Ci0gIGlmKG1vbnRoID09IDYpIHJldHVybiBkYXktMTgwLWxl
YXA7Ci0gIGlmKG1vbnRoID09IDcpIHJldHVybiBkYXktMjExLWxlYXA7Ci0gIGlmKG1vbnRoID09
IDgpIHJldHVybiBkYXktMjQyLWxlYXA7Ci0gIGlmKG1vbnRoID09IDkpIHJldHVybiBkYXktMjcy
LWxlYXA7Ci0gIGlmKG1vbnRoID09IDEwKSByZXR1cm4gZGF5LTMwMy1sZWFwOwotICBpZihtb250
aCA9PSAxMSkgcmV0dXJuIGRheS0zMzMtbGVhcDsKLX0KLQotLy8xNS45LjEuNiBXZWVrIERheQot
ZnVuY3Rpb24gV2Vla0RheSh0KSB7Ci0gIHZhciB3ZWVrZGF5ID0gKERheSh0KSs0KSU3OwotICBy
ZXR1cm4gKHdlZWtkYXkgPCAwID8gNyt3ZWVrZGF5IDogd2Vla2RheSk7Ci19Ci0KLS8vMTUuOS4x
LjkgRGF5bGlnaHQgU2F2aW5nIFRpbWUgQWRqdXN0bWVudAotdmFyIExvY2FsVFpBID0gJExvY2Fs
VFoqbXNQZXJIb3VyOwotCi1mdW5jdGlvbiBEYXlzSW5Nb250aChtLCBsZWFwKSB7Ci0gIG0gPSBt
JTEyOwotICAKLSAgLy9BcHJpbCwgSnVuZSwgU2VwdCwgTm92Ci0gIGlmKG0gPT0gMyB8fCBtID09
IDUgfHwgbSA9PSA4IHx8IG0gPT0gMTAgKSB7Ci0gICAgcmV0dXJuIDMwOwotICB9Ci0KLSAgLy9K
YW4sIE1hcmNoLCBNYXksIEp1bHksIEF1ZywgT2N0LCBEZWMKLSAgaWYobSA9PSAwIHx8IG0gPT0g
MiB8fCBtID09IDQgfHwgbSA9PSA2IHx8IG0gPT0gNyB8fCBtID09IDkgfHwgbSA9PSAxMSl7Ci0g
ICAgcmV0dXJuIDMxOwotICB9Ci0KLSAgLy9GZWIKLSAgcmV0dXJuIDI4K2xlYXA7Ci19Ci0KLWZ1
bmN0aW9uIEdldFN1bmRheUluTW9udGgodCwgbSwgY291bnQpewotICB2YXIgeWVhciA9IFllYXJG
cm9tVGltZSh0KTsKLSAgdmFyIGxlYXAgPSBJbkxlYXBZZWFyKHQpOwotICB2YXIgZGF5ID0gMDsK
LSAgCi0gIGlmKG0gPj0gMSkgZGF5ICs9IERheXNJbk1vbnRoKDAsIGxlYXApOwotICBpZihtID49
IDIpIGRheSArPSBEYXlzSW5Nb250aCgxLCBsZWFwKTsKLSAgaWYobSA+PSAzKSBkYXkgKz0gRGF5
c0luTW9udGgoMiwgbGVhcCk7Ci0gIGlmKG0gPj0gNCkgZGF5ICs9IERheXNJbk1vbnRoKDMsIGxl
YXApOwotICBpZihtID49IDUpIGRheSArPSBEYXlzSW5Nb250aCg0LCBsZWFwKTsKLSAgaWYobSA+
PSA2KSBkYXkgKz0gRGF5c0luTW9udGgoNSwgbGVhcCk7Ci0gIGlmKG0gPj0gNykgZGF5ICs9IERh
eXNJbk1vbnRoKDYsIGxlYXApOwotICBpZihtID49IDgpIGRheSArPSBEYXlzSW5Nb250aCg3LCBs
ZWFwKTsKLSAgaWYobSA+PSA5KSBkYXkgKz0gRGF5c0luTW9udGgoOCwgbGVhcCk7Ci0gIGlmKG0g
Pj0gMTApIGRheSArPSBEYXlzSW5Nb250aCg5LCBsZWFwKTsKLSAgaWYobSA+PSAxMSkgZGF5ICs9
IERheXNJbk1vbnRoKDEwLCBsZWFwKTsKLSAgCi0gIHZhciBtb250aF9zdGFydCA9IFRpbWVGcm9t
WWVhcih5ZWFyKStkYXkqbXNQZXJEYXk7Ci0gIHZhciBzdW5kYXkgPSAwOwotICAKLSAgaWYoY291
bnQgPT09ICJsYXN0Iil7Ci0gICAgZm9yKHZhciBsYXN0X3N1bmRheSA9IG1vbnRoX3N0YXJ0K0Rh
eXNJbk1vbnRoKG0sIGxlYXApKm1zUGVyRGF5OyAKLSAgICAgIFdlZWtEYXkobGFzdF9zdW5kYXkp
PjA7Ci0gICAgICBsYXN0X3N1bmRheSAtPSBtc1BlckRheQotICAgICl7fTsKLSAgICBzdW5kYXkg
PSBsYXN0X3N1bmRheTsKLSAgfQotICBlbHNlIHsKLSAgICBmb3IodmFyIGZpcnN0X3N1bmRheSA9
IG1vbnRoX3N0YXJ0OyAKLSAgICAgIFdlZWtEYXkoZmlyc3Rfc3VuZGF5KT4wOwotICAgICAgZmly
c3Rfc3VuZGF5ICs9IG1zUGVyRGF5Ci0gICAgKXt9OwotICAgIHN1bmRheSA9IGZpcnN0X3N1bmRh
eSs3Km1zUGVyRGF5Kihjb3VudC0xKTsKLSAgfQotICAKLSAgcmV0dXJuIHN1bmRheTsKLX0KLQot
ZnVuY3Rpb24gRGF5bGlnaHRTYXZpbmdUQSh0KSB7Ci0gIHQgPSB0LUxvY2FsVFpBOwotCi0gIHZh
ciBEU1Rfc3RhcnQgPSBHZXRTdW5kYXlJbk1vbnRoKHQsICREU1Rfc3RhcnRfbW9udGgsICREU1Rf
c3RhcnRfc3VuZGF5KQotICAgICAgICAgICAgICAgICAgKyREU1Rfc3RhcnRfaG91ciptc1Blckhv
dXIKLSAgICAgICAgICAgICAgICAgICskRFNUX3N0YXJ0X21pbnV0ZXMqbXNQZXJNaW51dGU7Ci0g
ICAgICAgICAgICAgICAgICAKLSAgdmFyIGsgPSBuZXcgRGF0ZShEU1Rfc3RhcnQpOwotICAKLSAg
dmFyIERTVF9lbmQgICA9IEdldFN1bmRheUluTW9udGgodCwgJERTVF9lbmRfbW9udGgsICREU1Rf
ZW5kX3N1bmRheSkKLSAgICAgICAgICAgICAgICAgICskRFNUX2VuZF9ob3VyKm1zUGVySG91cgot
ICAgICAgICAgICAgICAgICAgKyREU1RfZW5kX21pbnV0ZXMqbXNQZXJNaW51dGU7Ci0KLSAgaWYg
KCB0ID49IERTVF9zdGFydCAmJiB0IDwgRFNUX2VuZCApIHsKLSAgICByZXR1cm4gbXNQZXJIb3Vy
OwotICB9IGVsc2UgewotICAgIHJldHVybiAwOwotICB9Ci19Ci0KLS8vMTUuOS4xLjkgTG9jYWwg
VGltZQotZnVuY3Rpb24gTG9jYWxUaW1lKHQpewotICByZXR1cm4gdCtMb2NhbFRaQStEYXlsaWdo
dFNhdmluZ1RBKHQpOwotfQotCi1mdW5jdGlvbiBVVEModCkgewotICByZXR1cm4gdC1Mb2NhbFRa
QS1EYXlsaWdodFNhdmluZ1RBKHQtTG9jYWxUWkEpOwotfQotCi0vLzE1LjkuMS4xMCBIb3Vycywg
TWludXRlcywgU2Vjb25kLCBhbmQgTWlsbGlzZWNvbmRzCi1mdW5jdGlvbiBIb3VyRnJvbVRpbWUo
dCl7Ci0gIHJldHVybiBNYXRoLmZsb29yKHQvbXNQZXJIb3VyKSVIb3Vyc1BlckRheTsKLX0KLQot
ZnVuY3Rpb24gTWluRnJvbVRpbWUodCl7Ci0gIHJldHVybiBNYXRoLmZsb29yKHQvbXNQZXJNaW51
dGUpJU1pbnV0ZXNQZXJIb3VyOwotfQotCi1mdW5jdGlvbiBTZWNGcm9tVGltZSh0KXsKLSAgcmV0
dXJuIE1hdGguZmxvb3IodC9tc1BlclNlY29uZCklU2Vjb25kc1Blck1pbnV0ZTsKLX0KLQotZnVu
Y3Rpb24gbXNGcm9tVGltZSh0KXsKLSAgcmV0dXJuIHQlbXNQZXJTZWNvbmQ7Ci19Ci0KLS8vMTUu
OS4xLjExIE1ha2VUaW1lIChob3VyLCBtaW4sIHNlYywgbXMpCi1mdW5jdGlvbiBNYWtlVGltZSho
b3VyLCBtaW4sIHNlYywgbXMpewotICBpZiAoICFpc0Zpbml0ZShob3VyKSB8fCAhaXNGaW5pdGUo
bWluKSB8fCAhaXNGaW5pdGUoc2VjKSB8fCAhaXNGaW5pdGUobXMpKSB7Ci0gICAgcmV0dXJuIE51
bWJlci5OYU47Ci0gIH0KLQotICBob3VyID0gVG9JbnRlZ2VyKGhvdXIpOwotICBtaW4gID0gVG9J
bnRlZ2VyKG1pbik7Ci0gIHNlYyAgPSBUb0ludGVnZXIoc2VjKTsKLSAgbXMgICA9IFRvSW50ZWdl
cihtcyk7Ci0KLSAgcmV0dXJuICgoaG91ciptc1BlckhvdXIpICsgKG1pbiptc1Blck1pbnV0ZSkg
KyAoc2VjKm1zUGVyU2Vjb25kKSArIG1zKTsKLX0KLQotLy8xNS45LjEuMTIgTWFrZURheSAoeWVh
ciwgbW9udGgsIGRhdGUpCi1mdW5jdGlvbiBNYWtlRGF5KHllYXIsIG1vbnRoLCBkYXRlKSB7Ci0g
IGlmICggIWlzRmluaXRlKHllYXIpIHx8ICFpc0Zpbml0ZShtb250aCkgfHwgIWlzRmluaXRlKGRh
dGUpKSB7Ci0gICAgcmV0dXJuIE51bWJlci5OYU47Ci0gIH0KLQotICB5ZWFyID0gVG9JbnRlZ2Vy
KHllYXIpOwotICBtb250aCA9IFRvSW50ZWdlcihtb250aCk7Ci0gIGRhdGUgPSBUb0ludGVnZXIo
ZGF0ZSApOwotCi0gIHZhciByZXN1bHQ1ID0geWVhciArIE1hdGguZmxvb3IobW9udGgvMTIpOwot
ICB2YXIgcmVzdWx0NiA9IG1vbnRoJTEyOwotCi0gIHZhciBzaWduID0gKCB5ZWFyIDwgMTk3MCAp
ID8gLTEgOiAxOwotICB2YXIgdCA9ICAgICggeWVhciA8IDE5NzAgKSA/IDEgOiAgMDsKLSAgdmFy
IHkgPSAgICAoIHllYXIgPCAxOTcwICkgPyAxOTY5IDogMTk3MDsKLQotICBpZiggc2lnbiA9PSAt
MSApewotICAgIGZvciAoIHkgPSAxOTY5OyB5ID49IHllYXI7IHkgKz0gc2lnbiApIHsKLSAgICAg
IHQgKz0gc2lnbiAqIERheXNJblllYXIoeSkqbXNQZXJEYXk7Ci0gICAgfQotICB9IGVsc2Ugewot
ICAgIGZvciAoIHkgPSAxOTcwIDsgeSA8IHllYXI7IHkgKz0gc2lnbiApIHsKLSAgICAgIHQgKz0g
c2lnbiAqIERheXNJblllYXIoeSkqbXNQZXJEYXk7Ci0gICAgfQotICB9Ci0KLSAgdmFyIGxlYXAg
PSAwOwotICBmb3IgKCB2YXIgbSA9IDA7IG0gPCBtb250aDsgbSsrICkgewotICAgIC8vaWYgeWVh
ciBpcyBjaGFuZ2VkLCB0aGFuIHdlIG5lZWQgdG8gcmVjYWxjdWxhdGUgbGVlcAotICAgIGxlYXAg
PSBJbkxlYXBZZWFyKHQpOwotICAgIHQgKz0gRGF5c0luTW9udGgobSwgbGVhcCkqbXNQZXJEYXk7
Ci0gIH0KLQotICBpZiAoIFllYXJGcm9tVGltZSh0KSAhPSByZXN1bHQ1ICkgewotICAgIHJldHVy
biBOdW1iZXIuTmFOOwotICB9Ci0gIGlmICggTW9udGhGcm9tVGltZSh0KSAhPSByZXN1bHQ2ICkg
ewotICAgIHJldHVybiBOdW1iZXIuTmFOOwotICB9Ci0gIGlmICggRGF0ZUZyb21UaW1lKHQpICE9
IDEgKSB7Ci0gICAgcmV0dXJuIE51bWJlci5OYU47Ci0gIH0KLQotICByZXR1cm4gRGF5KHQpK2Rh
dGUtMTsKLX0KLQotLy8xNS45LjEuMTMgTWFrZURhdGUgKGRheSwgdGltZSkKLWZ1bmN0aW9uIE1h
a2VEYXRlKCBkYXksIHRpbWUgKSB7Ci0gIGlmKCFpc0Zpbml0ZShkYXkpIHx8ICFpc0Zpbml0ZSh0
aW1lKSkgewotICAgIHJldHVybiBOdW1iZXIuTmFOOwotICB9Ci0gIAotICByZXR1cm4gZGF5Km1z
UGVyRGF5K3RpbWU7Ci19Ci0KLS8vMTUuOS4xLjE0IFRpbWVDbGlwICh0aW1lKQotZnVuY3Rpb24g
VGltZUNsaXAodGltZSkgewotICBpZighaXNGaW5pdGUodGltZSkgfHwgTWF0aC5hYnModGltZSkg
PiA4LjY0ZTE1KXsKLSAgICByZXR1cm4gTnVtYmVyLk5hTjsKLSAgfQotCi0gIHJldHVybiBUb0lu
dGVnZXIodGltZSk7Ci19Ci0KLS8vVGVzdCBGdW5jdGlvbnMKLWZ1bmN0aW9uIENvbnN0cnVjdERh
dGUoeWVhciwgbW9udGgsIGRhdGUsIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBtcyl7Ci0gIC8q
Ci0gICAqIDEuIENhbGwgVG9OdW1iZXIoeWVhcikKLSAgICogMi4gQ2FsbCBUb051bWJlcihtb250
aCkKLSAgICogMy4gSWYgZGF0ZSBpcyBzdXBwbGllZCB1c2UgVG9OdW1iZXIoZGF0ZSk7IGVsc2Ug
dXNlIDEKLSAgICogNC4gSWYgaG91cnMgaXMgc3VwcGxpZWQgdXNlIFRvTnVtYmVyKGhvdXJzKTsg
ZWxzZSB1c2UgMAotICAgKiA1LiBJZiBtaW51dGVzIGlzIHN1cHBsaWVkIHVzZSBUb051bWJlciht
aW51dGVzKTsgZWxzZSB1c2UgMAotICAgKiA2LiBJZiBzZWNvbmRzIGlzIHN1cHBsaWVkIHVzZSBU
b051bWJlcihzZWNvbmRzKTsgZWxzZSB1c2UgMAotICAgKiA3LiBJZiBtcyBpcyBzdXBwbGllZCB1
c2UgVG9OdW1iZXIobXMpOyBlbHNlIHVzZSAwCi0gICAqIDguIElmIFJlc3VsdCgxKSBpcyBub3Qg
TmFOIGFuZCAwIDw9IFRvSW50ZWdlcihSZXN1bHQoMSkpIDw9IDk5LCBSZXN1bHQoOCkgaXMKLSAg
ICogMTkwMCtUb0ludGVnZXIoUmVzdWx0KDEpKTsgb3RoZXJ3aXNlLCBSZXN1bHQoOCkgaXMgUmVz
dWx0KDEpCi0gICAqIDkuIENvbXB1dGUgTWFrZURheShSZXN1bHQoOCksIFJlc3VsdCgyKSwgUmVz
dWx0KDMpKQotICAgKiAxMC4gQ29tcHV0ZSBNYWtlVGltZShSZXN1bHQoNCksIFJlc3VsdCg1KSwg
UmVzdWx0KDYpLCBSZXN1bHQoNykpCi0gICAqIDExLiBDb21wdXRlIE1ha2VEYXRlKFJlc3VsdCg5
KSwgUmVzdWx0KDEwKSkKLSAgICogMTIuIFNldCB0aGUgW1tWYWx1ZV1dIHByb3BlcnR5IG9mIHRo
ZSBuZXdseSBjb25zdHJ1Y3RlZCBvYmplY3QgdG8gVGltZUNsaXAoVVRDKFJlc3VsdCgxMSkpKQot
ICAgKi8KLSAgdmFyIHIxID0gTnVtYmVyKHllYXIpOwotICB2YXIgcjIgPSBOdW1iZXIobW9udGgp
OwotICB2YXIgcjMgPSAoKGRhdGUgJiYgYXJndW1lbnRzLmxlbmd0aCA+IDIpID8gTnVtYmVyKGRh
dGUpIDogMSk7Ci0gIHZhciByNCA9ICgoaG91cnMgJiYgYXJndW1lbnRzLmxlbmd0aCA+IDMpID8g
TnVtYmVyKGhvdXJzKSA6IDApOyAgIAotICB2YXIgcjUgPSAoKG1pbnV0ZXMgJiYgYXJndW1lbnRz
Lmxlbmd0aCA+IDQpID8gTnVtYmVyKG1pbnV0ZXMpIDogMCk7ICAgCi0gIHZhciByNiA9ICgoc2Vj
b25kcyAmJiBhcmd1bWVudHMubGVuZ3RoID4gNSkgPyBOdW1iZXIoc2Vjb25kcykgOiAwKTsgICAK
LSAgdmFyIHI3ID0gKChtcyAmJiBhcmd1bWVudHMubGVuZ3RoID4gNikgPyBOdW1iZXIobXMpIDog
MCk7Ci0gIAotICB2YXIgcjggPSByMTsKLSAgCi0gIGlmKCFpc05hTihyMSkgJiYgKDAgPD0gVG9J
bnRlZ2VyKHIxKSkgJiYgKFRvSW50ZWdlcihyMSkgPD0gOTkpKQotICAgIHI4ID0gMTkwMCtyMTsK
LSAgCi0gIHZhciByOSA9IE1ha2VEYXkocjgsIHIyLCByMyk7Ci0gIHZhciByMTAgPSBNYWtlVGlt
ZShyNCwgcjUsIHI2LCByNyk7Ci0gIHZhciByMTEgPSBNYWtlRGF0ZShyOSwgcjEwKTsKLSAgCi0g
IHJldHVybiBUaW1lQ2xpcChVVEMocjExKSk7Ci19Ci0KLQotCi1pZiAoQ29uc3RydWN0RGF0ZSgx
ODk5LCAxMSwgMzEsIDIzLCA1OSwgNTksIDk5OSkgIT09IG5ldyBEYXRlKDE4OTksIDExLCAzMSwg
MjMsIDU5LCA1OSwgOTk5KS52YWx1ZU9mKCkpIHsKLSAgdGVzdEZhaWxlZCgiIzE6IEluY29ycmVj
dCB2YWx1ZSBvZiBEYXRlIik7Ci19Ci0KLWlmIChDb25zdHJ1Y3REYXRlKDE4OTksIDEyLCAxLCAw
LCAwLCAwLCAwKSAhPT0gbmV3IERhdGUoMTg5OSwgMTIsIDEsIDAsIDAsIDAsIDApLnZhbHVlT2Yo
KSkgewotICB0ZXN0RmFpbGVkKCIjMjogSW5jb3JyZWN0IHZhbHVlIG9mIERhdGUiKTsKLX0KLQot
aWYgKENvbnN0cnVjdERhdGUoMTkwMCwgMCwgMSwgMCwgMCwgMCwgMCkgIT09IG5ldyBEYXRlKDE5
MDAsIDAsIDEsIDAsIDAsIDAsIDApLnZhbHVlT2YoKSkgewotICB0ZXN0RmFpbGVkKCIjMzogSW5j
b3JyZWN0IHZhbHVlIG9mIERhdGUiKTsKLX0KLQotaWYgKENvbnN0cnVjdERhdGUoMTk2OSwgMTEs
IDMxLCAyMywgNTksIDU5LCA5OTkpICE9PSBuZXcgRGF0ZSgxOTY5LCAxMSwgMzEsIDIzLCA1OSwg
NTksIDk5OSkudmFsdWVPZigpKSB7Ci0gIHRlc3RGYWlsZWQoIiM0OiBJbmNvcnJlY3QgdmFsdWUg
b2YgRGF0ZSIpOwotfQotCi1pZiAoQ29uc3RydWN0RGF0ZSgxOTY5LCAxMiwgMSwgMCwgMCwgMCwg
MCkgIT09IG5ldyBEYXRlKDE5NjksIDEyLCAxLCAwLCAwLCAwLCAwKS52YWx1ZU9mKCkpIHsKLSAg
dGVzdEZhaWxlZCgiIzU6IEluY29ycmVjdCB2YWx1ZSBvZiBEYXRlIik7Ci19Ci0KLWlmIChDb25z
dHJ1Y3REYXRlKDE5NzAsIDAsIDEsIDAsIDAsIDAsIDApICE9PSBuZXcgRGF0ZSgxOTcwLCAwLCAx
LCAwLCAwLCAwLCAwKS52YWx1ZU9mKCkpIHsKLSAgdGVzdEZhaWxlZCgiIzY6IEluY29ycmVjdCB2
YWx1ZSBvZiBEYXRlIik7Ci19Ci0KLWlmIChDb25zdHJ1Y3REYXRlKDE5OTksIDExLCAzMSwgMjMs
IDU5LCA1OSwgOTk5KSAhPT0gbmV3IERhdGUoMTk5OSwgMTEsIDMxLCAyMywgNTksIDU5LCA5OTkp
LnZhbHVlT2YoKSkgewotICB0ZXN0RmFpbGVkKCIjNzogSW5jb3JyZWN0IHZhbHVlIG9mIERhdGUi
KTsKLX0KLQotaWYgKENvbnN0cnVjdERhdGUoMTk5OSwgMTIsIDEsIDAsIDAsIDAsIDApICE9PSBu
ZXcgRGF0ZSgxOTk5LCAxMiwgMSwgMCwgMCwgMCwgMCkudmFsdWVPZigpKSB7Ci0gIHRlc3RGYWls
ZWQoIiM4OiBJbmNvcnJlY3QgdmFsdWUgb2YgRGF0ZSIpOwotfQotCi1pZiAoQ29uc3RydWN0RGF0
ZSgyMDAwLCAwLCAxLCAwLCAwLCAwLCAwKSAhPT0gbmV3IERhdGUoMjAwMCwgMCwgMSwgMCwgMCwg
MCwgMCkudmFsdWVPZigpKSB7Ci0gIHRlc3RGYWlsZWQoIiM5OiBJbmNvcnJlY3QgdmFsdWUgb2Yg
RGF0ZSIpOwotfQotCi1pZiAoQ29uc3RydWN0RGF0ZSgyMDk5LCAxMSwgMzEsIDIzLCA1OSwgNTks
IDk5OSkgIT09IG5ldyBEYXRlKDIwOTksIDExLCAzMSwgMjMsIDU5LCA1OSwgOTk5KS52YWx1ZU9m
KCkpIHsKLSAgdGVzdEZhaWxlZCgiIzEwOiBJbmNvcnJlY3QgdmFsdWUgb2YgRGF0ZSIpOwotfQot
Ci1pZiAoQ29uc3RydWN0RGF0ZSgyMDk5LCAxMiwgMSwgMCwgMCwgMCwgMCkgIT09IG5ldyBEYXRl
KDIwOTksIDEyLCAxLCAwLCAwLCAwLCAwKS52YWx1ZU9mKCkpIHsKLSAgdGVzdEZhaWxlZCgiIzEx
OiBJbmNvcnJlY3QgdmFsdWUgb2YgRGF0ZSIpOwotfQotCi1pZiAoQ29uc3RydWN0RGF0ZSgyMTAw
LCAwLCAxLCAwLCAwLCAwLCAwKSAhPT0gbmV3IERhdGUoMjEwMCwgMCwgMSwgMCwgMCwgMCwgMCku
dmFsdWVPZigpKSB7Ci0gIHRlc3RGYWlsZWQoIiMxMjogSW5jb3JyZWN0IHZhbHVlIG9mIERhdGUi
KTsKLX0KLQotfSBjYXRjaCAoZXgpIHsKLSAgICBzcHV0bmlrRXhjZXB0aW9uID0gZXg7Ci19Ci0K
LXZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwotPC9zY3JpcHQ+Ci0KLTxzY3JpcHQ+Ci1p
ZiAoIXN1Y2Nlc3NmdWxseVBhcnNlZCkKLSAgICBwcmludFRlc3RGYWlsZWQoJ3N1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyBub3Qgc2V0Jyk7Ci1lbHNlIGlmIChzcHV0bmlrRXhjZXB0aW9uKQotICAgIHBy
aW50VGVzdEZhaWxlZChzcHV0bmlrRXhjZXB0aW9uKTsKLWVsc2UKLSAgICBwcmludFRlc3RQYXNz
ZWQoIiIpOwotdGVzdFByaW50KCc8YnIgLz48c3BhbiBjbGFzcz0icGFzcyI+VEVTVCBDT01QTEVU
RTwvc3Bhbj4nKTsKLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgo=
</data>
<flag name="review"
          id="170697"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>