<?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>161895</bug_id>
          
          <creation_ts>2016-09-13 01:07:59 -0700</creation_ts>
          <short_desc>[JSC] Make the rounding-related nodes support any type</short_desc>
          <delta_ts>2016-09-19 17:50:57 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=162016</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>162021</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ossy</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1229107</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-09-13 01:07:59 -0700</bug_when>
    <thetext>[JSC] Make the rounding-related nodes support any type</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229111</commentid>
    <comment_count>1</comment_count>
      <attachid>288680</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-09-13 01:50:06 -0700</bug_when>
    <thetext>Created attachment 288680
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229209</commentid>
    <comment_count>2</comment_count>
      <attachid>288680</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-09-13 11:03:36 -0700</bug_when>
    <thetext>Comment on attachment 288680
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229738</commentid>
    <comment_count>3</comment_count>
      <attachid>288680</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-14 14:26:36 -0700</bug_when>
    <thetext>Comment on attachment 288680
Patch

Clearing flags on attachment: 288680

Committed r205931: &lt;http://trac.webkit.org/changeset/205931&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229739</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-14 14:26:40 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1229978</commentid>
    <comment_count>5</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-09-15 04:11:32 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 288680 [details]
&gt; Patch
&gt; 
&gt; Clearing flags on attachment: 288680
&gt; 
&gt; Committed r205931: &lt;http://trac.webkit.org/changeset/205931&gt;

The new tests fail on 32 bit platforms, see build.webkit.org for details:
- https://build.webkit.org/builders/Apple%20El%20Capitan%2032-bit%20JSC%20%28BuildAndTest%29/builds/3699
- https://build.webkit.org/builders/Apple%20Yosemite%2032-bit%20JSC%20%28BuildAndTest%29/builds/10652
- https://build.webkit.org/builders/GTK%20Linux%2032-bit%20Release/builds/64031
...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1230003</commentid>
    <comment_count>6</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2016-09-15 08:09:27 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; The new tests fail on 32 bit platforms, see build.webkit.org for details:

Filed https://bugs.webkit.org/show_bug.cgi?id=162016</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1230037</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-15 09:50:35 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 162021</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231392</commentid>
    <comment_count>8</comment_count>
      <attachid>289275</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-09-19 16:23:50 -0700</bug_when>
    <thetext>Created attachment 289275
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231402</commentid>
    <comment_count>9</comment_count>
      <attachid>289275</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-09-19 16:28:50 -0700</bug_when>
    <thetext>Comment on attachment 289275
Patch

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

r=me

&gt; Source/JavaScriptCore/jsc.cpp:1739
&gt; +template&lt;typename ValueType&gt;
&gt; +typename std::enable_if&lt;!std::is_fundamental&lt;ValueType&gt;::value&gt;::type addOption(VM&amp;, JSObject*, Identifier, ValueType) { }
&gt; +
&gt; +template&lt;typename ValueType&gt;
&gt; +typename std::enable_if&lt;std::is_fundamental&lt;ValueType&gt;::value&gt;::type addOption(VM&amp; vm, JSObject* optionsObject, Identifier identifier, ValueType value)
&gt; +{
&gt; +    optionsObject-&gt;putDirect(vm, identifier, JSValue(value));
&gt; +}
&gt; +
&gt; +EncodedJSValue JSC_HOST_CALL functionJSCOptions(ExecState* exec)
&gt; +{
&gt; +    JSObject* optionsObject = constructEmptyObject(exec);
&gt; +#define FOR_EACH_OPTION(type_, name_, defaultValue_, availability_, description_) \
&gt; +    addOption(exec-&gt;vm(), optionsObject, Identifier::fromString(exec, #name_), Options::name_());
&gt; +    JSC_OPTIONS(FOR_EACH_OPTION)
&gt; +#undef FOR_EACH_OPTION
&gt; +    return JSValue::encode(optionsObject);
&gt; +}

Did you mean to include this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231405</commentid>
    <comment_count>10</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-09-19 16:30:17 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Comment on attachment 289275 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=289275&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/jsc.cpp:1739
&gt; &gt; +template&lt;typename ValueType&gt;
&gt; &gt; +typename std::enable_if&lt;!std::is_fundamental&lt;ValueType&gt;::value&gt;::type addOption(VM&amp;, JSObject*, Identifier, ValueType) { }
&gt; &gt; +
&gt; &gt; +template&lt;typename ValueType&gt;
&gt; &gt; +typename std::enable_if&lt;std::is_fundamental&lt;ValueType&gt;::value&gt;::type addOption(VM&amp; vm, JSObject* optionsObject, Identifier identifier, ValueType value)
&gt; &gt; +{
&gt; &gt; +    optionsObject-&gt;putDirect(vm, identifier, JSValue(value));
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +EncodedJSValue JSC_HOST_CALL functionJSCOptions(ExecState* exec)
&gt; &gt; +{
&gt; &gt; +    JSObject* optionsObject = constructEmptyObject(exec);
&gt; &gt; +#define FOR_EACH_OPTION(type_, name_, defaultValue_, availability_, description_) \
&gt; &gt; +    addOption(exec-&gt;vm(), optionsObject, Identifier::fromString(exec, #name_), Options::name_());
&gt; &gt; +    JSC_OPTIONS(FOR_EACH_OPTION)
&gt; &gt; +#undef FOR_EACH_OPTION
&gt; &gt; +    return JSValue::encode(optionsObject);
&gt; &gt; +}
&gt; 
&gt; Did you mean to include this?

Yep. I exposed the JSC options to the tests to change the compilation count limits based on them.

In particular, when we use useMaximalFlushInsertionPhase, we should compile exactly 2 times in the worst case (once to discover the negative zero, then once with the right types).

Filip asked me to update the existing tests to account for FTL-eager too (will do in a follow up).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231468</commentid>
    <comment_count>11</comment_count>
      <attachid>289275</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-19 17:50:52 -0700</bug_when>
    <thetext>Comment on attachment 289275
Patch

Clearing flags on attachment: 289275

Committed r206134: &lt;http://trac.webkit.org/changeset/206134&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231469</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-19 17:50:57 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288680</attachid>
            <date>2016-09-13 01:50:06 -0700</date>
            <delta_ts>2016-09-19 16:23:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-161895-20160913014731.patch</filename>
            <type>text/plain</type>
            <size>75391</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA1ODUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
YmUxYTc0Mzg3YzhhYTQyMGUwMzVlZGNhNTY2ZjFlYjJiMGYzMzRiLi42YTdmOGY1ZmI5OGE5MTg3
OTI0MDQzNTQ2MjBjMWFmZWI3NzZmNGE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NCBAQAorMjAxNi0wOS0xMyAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBbSlNDXSBNYWtlIHRoZSByb3VuZGluZy1yZWxhdGVkIG5vZGVzIHN1
cHBvcnQgYW55IHR5cGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2MTg5NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggY2hhbmdlcyBBcml0aFJvdW5kLCBBcml0aEZsb29yLCBBcml0aENl
aWwgYW5kIEFyaXRoVHJ1bmMKKyAgICAgICAgdG8gc3VwcG9ydCBwb2x5bW9ycGhpYyBpbnB1dCB3
aXRob3V0IGV4aXRpbmcgb24gZW50cnkuCisKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZUludHJpbnNpY0NhbGwpOgorICAgICAgICBUaGUgNCBmdW5jdGlvbnMgaWdub3JlIGFueSBp
bnB1dCBwYXN0IHRoZSBmaXJzdCBhcmd1bWVudC4gSXQgaXMgb2theQorICAgICAgICB0byB1c2Ug
dGhlIG5vZGVzIHdpdGggdGhlIGZpcnN0IGFyZ3VtZW50IGFuZCBsZXQgdGhlIFBoYW50b21zIGtl
ZXAKKyAgICAgICAgdGhlIHJlbWFpbmluZyBhcmd1bWVudHMgbGl2ZS4KKworICAgICAgICAqIGRm
Zy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAg
ICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhh
c2U6OmZpeHVwTm9kZSk6CisgICAgICAgIE91ciBmaXh1cCBoYWQgdGhlIGlzc3VlIHdlIGhhdmUg
c2VlbiBvbiBwcmV2aW91cyBub2RlczogdW5hcnlBcml0aFNob3VsZFNwZWN1bGF0ZUludDMyKCkK
KyAgICAgICAgcHJldmVudHMgdXMgZnJvbSBwaWNraW5nIGEgZ29vZCB0eXBlIGlmIHdlIGRvIG5v
dCBzZWUgYW55IGRvdWJsZS4KKworICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAg
ICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5o
OgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAg
ICAgIFByZWRpY3Rpb24gcHJvcGFnYXRpb24gb2YgdGhvc2Ugbm9kZXMgYXJlIGZ1bGx5IGRldGVy
bWluZWQKKyAgICAgICAgZnJvbSB0aGVpciBmbGFncyBhbmQgcmVzdWx0cydzIHByZWRpY3Rpb24u
IFRoZXkgYXJlIG1vdmVkCisgICAgICAgIHRvIHRoZSBpbnZhcmlhbnQgcHJvY2Vzc2luZy4KKwor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aFJvdW5kaW5nKToKKyAgICAgICAgKiBmdGwvRlRM
TG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZUFyaXRoUm91bmQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
Ojpjb21waWxlQXJpdGhGbG9vcik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
QjM6OmNvbXBpbGVBcml0aENlaWwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0IzOjpjb21waWxlQXJpdGhUcnVuYyk6CisKIDIwMTYtMDktMTIgIEZpbGlwIFBpemxvICA8ZnBp
emxvQGFwcGxlLmNvbT4KIAogICAgICAgICBNYXJrZWRCbG9jayBzaG91bGQgYmUgYWJsZSB0byB1
c2UgZmxpcElmTmVjZXNzYXJ5KCkgYXMgdGhlICJJJ20gbm90IGVtcHR5IiB0cmlnZ2VyCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0
ZXJJbmxpbmVzLmgKaW5kZXggZTdhZjA3MTdhZGYyYWQ3OGNmZDcyNmQ0OThmN2QxMDEwMzY1MTEy
YS4uMjE4ZDVkOTQyMTFlYTFiMDRmNTc3OTE1MzAwNDlkOGI5NDA5ZDk2NiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaApAQCAtOTA1LDE5ICs5MDUsMjMgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAg
ICBjYXNlIEFyaXRoQ2VpbDoKICAgICBjYXNlIEFyaXRoVHJ1bmM6IHsKICAgICAgICAgSlNWYWx1
ZSBvcGVyYW5kID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKLSAgICAgICAgaWYg
KG9wZXJhbmQgJiYgb3BlcmFuZC5pc051bWJlcigpKSB7CisgICAgICAgIGlmIChPcHRpb25hbDxk
b3VibGU+IG51bWJlciA9IG9wZXJhbmQudG9OdW1iZXJGcm9tUHJpbWl0aXZlKCkpIHsKICAgICAg
ICAgICAgIGRvdWJsZSByb3VuZGVkVmFsdWUgPSAwOwogICAgICAgICAgICAgaWYgKG5vZGUtPm9w
KCkgPT0gQXJpdGhSb3VuZCkKLSAgICAgICAgICAgICAgICByb3VuZGVkVmFsdWUgPSBqc1JvdW5k
KG9wZXJhbmQuYXNOdW1iZXIoKSk7CisgICAgICAgICAgICAgICAgcm91bmRlZFZhbHVlID0ganNS
b3VuZCgqbnVtYmVyKTsKICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPm9wKCkgPT0gQXJpdGhG
bG9vcikKLSAgICAgICAgICAgICAgICByb3VuZGVkVmFsdWUgPSBmbG9vcihvcGVyYW5kLmFzTnVt
YmVyKCkpOworICAgICAgICAgICAgICAgIHJvdW5kZWRWYWx1ZSA9IGZsb29yKCpudW1iZXIpOwog
ICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+b3AoKSA9PSBBcml0aENlaWwpCi0gICAgICAgICAg
ICAgICAgcm91bmRlZFZhbHVlID0gY2VpbChvcGVyYW5kLmFzTnVtYmVyKCkpOworICAgICAgICAg
ICAgICAgIHJvdW5kZWRWYWx1ZSA9IGNlaWwoKm51bWJlcik7CiAgICAgICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBBcml0aFRydW5jKTsKLSAgICAg
ICAgICAgICAgICByb3VuZGVkVmFsdWUgPSB0cnVuYyhvcGVyYW5kLmFzTnVtYmVyKCkpOworICAg
ICAgICAgICAgICAgIHJvdW5kZWRWYWx1ZSA9IHRydW5jKCpudW1iZXIpOwogICAgICAgICAgICAg
fQogCisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRV
c2UpIHsKKyAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc051bWJlcihyb3VuZGVk
VmFsdWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGlmIChwcm9kdWNlc0ludGVnZXIobm9kZS0+YXJpdGhSb3VuZGluZ01vZGUoKSkpIHsKICAg
ICAgICAgICAgICAgICBpbnQzMl90IHJvdW5kZWRWYWx1ZUFzSW50MzIgPSBzdGF0aWNfY2FzdDxp
bnQzMl90Pihyb3VuZGVkVmFsdWUpOwogICAgICAgICAgICAgICAgIGlmIChyb3VuZGVkVmFsdWVB
c0ludDMyID09IHJvdW5kZWRWYWx1ZSkgewpAQCAtOTM2LDEwICs5NDAsMTUgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWdu
ZWQgY2xvYmJlckxpbWkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQotICAgICAgICBpZiAocHJvZHVjZXNJbnRlZ2VyKG5vZGUtPmFyaXRoUm91bmRpbmdN
b2RlKCkpKQotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUodHlwZU9m
RG91YmxlUm91bmRpbmcoZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSk7CisgICAgICAg
IGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gRG91YmxlUmVwVXNlKSB7CisgICAgICAg
ICAgICBpZiAocHJvZHVjZXNJbnRlZ2VyKG5vZGUtPmFyaXRoUm91bmRpbmdNb2RlKCkpKQorICAg
ICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzJPbmx5KTsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBEb3VibGVSZXBVc2Up
CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKHR5cGVPZkRvdWJsZVJvdW5k
aW5nKGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkgPT0gVW50eXBlZFVzZSk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUo
U3BlY0Z1bGxOdW1iZXIpOworICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAg
ICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAppbmRleCA4MGExYzJlOTk3NWY3ZmI2NzY5YjExMGEyYTJjMzI1ODMxM2RkMDA5Li4wYjBk
MmRkYjc2M2JhMjFiMTMxNmYzZTliYjY4MGE0ZTcxMzc3OWYxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtMjQ1MCwyNSArMjQ1MCwy
MiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsKE5vZGUqIGNhbGxl
ZSwgaW50IHJlc3VsdE9wZXJhbmQsIEludHJpbgogICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdp
c3RlcihyZXN1bHRPcGVyYW5kKSwgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9jb25z
dGFudE5hTikpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9Ci0gICAgICAg
IGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSAyKSB7Ci0gICAgICAgICAgICBpbnNl
cnRDaGVja3MoKTsKLSAgICAgICAgICAgIE5vZGUqIG9wZXJhbmQgPSBnZXQodmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKTsKLSAgICAgICAgICAgIE5vZGVUeXBl
IG9wOwotICAgICAgICAgICAgaWYgKGludHJpbnNpYyA9PSBSb3VuZEludHJpbnNpYykKLSAgICAg
ICAgICAgICAgICBvcCA9IEFyaXRoUm91bmQ7Ci0gICAgICAgICAgICBlbHNlIGlmIChpbnRyaW5z
aWMgPT0gRmxvb3JJbnRyaW5zaWMpCi0gICAgICAgICAgICAgICAgb3AgPSBBcml0aEZsb29yOwot
ICAgICAgICAgICAgZWxzZSBpZiAoaW50cmluc2ljID09IENlaWxJbnRyaW5zaWMpCi0gICAgICAg
ICAgICAgICAgb3AgPSBBcml0aENlaWw7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBBU1NFUlQoaW50cmluc2ljID09IFRydW5jSW50cmluc2ljKTsKLSAgICAgICAgICAgICAg
ICBvcCA9IEFyaXRoVHJ1bmM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBOb2RlKiByb3Vu
ZE5vZGUgPSBhZGRUb0dyYXBoKG9wLCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgb3Bl
cmFuZCk7Ci0gICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBy
b3VuZE5vZGUpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGluc2VydENoZWNr
cygpOworICAgICAgICBOb2RlKiBvcGVyYW5kID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAgIE5vZGVUeXBlIG9wOworICAgICAgICBp
ZiAoaW50cmluc2ljID09IFJvdW5kSW50cmluc2ljKQorICAgICAgICAgICAgb3AgPSBBcml0aFJv
dW5kOworICAgICAgICBlbHNlIGlmIChpbnRyaW5zaWMgPT0gRmxvb3JJbnRyaW5zaWMpCisgICAg
ICAgICAgICBvcCA9IEFyaXRoRmxvb3I7CisgICAgICAgIGVsc2UgaWYgKGludHJpbnNpYyA9PSBD
ZWlsSW50cmluc2ljKQorICAgICAgICAgICAgb3AgPSBBcml0aENlaWw7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgQVNTRVJUKGludHJpbnNpYyA9PSBUcnVuY0ludHJpbnNpYyk7CisgICAg
ICAgICAgICBvcCA9IEFyaXRoVHJ1bmM7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBOb2RlKiByb3VuZE5vZGUgPSBhZGRUb0dyYXBoKG9wLCBPcEluZm8oMCksIE9w
SW5mbyhwcmVkaWN0aW9uKSwgb3BlcmFuZCk7CisgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0T3BlcmFuZCksIHJvdW5kTm9kZSk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
ICAgICBjYXNlIElNdWxJbnRyaW5zaWM6IHsKICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzICE9IDMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Nsb2JiZXJpemUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5o
CmluZGV4IDU1ZGIwOTRjMDMxM2FmNWZmYTZkYjIxMTk3ZTc2YjUxMzMwNGI3ZGUuLjA0ZjNkMTI3
MzUyMmVjNTBhODRkOWNkNjE1ZDQwMWE0NWZjNjUzMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2xvYmJlcml6ZS5oCkBAIC0zNTgsNyArMzU4LDEyIEBAIHZvaWQgY2xvYmJlcml6
ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25z
dCBXcml0ZUZ1CiAgICAgY2FzZSBBcml0aEZsb29yOgogICAgIGNhc2UgQXJpdGhDZWlsOgogICAg
IGNhc2UgQXJpdGhUcnVuYzoKLSAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlLCBzdGF0aWNfY2Fz
dDx1aW50cHRyX3Q+KG5vZGUtPmFyaXRoUm91bmRpbmdNb2RlKCkpKSk7CisgICAgICAgIGlmIChu
b2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gRG91YmxlUmVwVXNlKQorICAgICAgICAgICAgZGVm
KFB1cmVWYWx1ZShub2RlLCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KG5vZGUtPmFyaXRoUm91bmRp
bmdNb2RlKCkpKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmVhZChXb3JsZCk7Cisg
ICAgICAgICAgICB3cml0ZShIZWFwKTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm47CiAKICAg
ICBjYXNlIENoZWNrQ2VsbDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRml4dXBQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwCmluZGV4IGY1Mzk4OWQ3ODU5NzM0ZTkzZTZkMWRjYjUwNzg2ZTMwMWY1ZjE5MjguLjU3
YWVkZDgwYTFkMjk3MGJlMjM3NDQxZmE2NzJiODMyNGJmMTUyNjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcApAQCAtMzc2LDI0ICszNzYsMjggQEAgcHJp
dmF0ZToKICAgICAgICAgY2FzZSBBcml0aEZsb29yOgogICAgICAgICBjYXNlIEFyaXRoQ2VpbDoK
ICAgICAgICAgY2FzZSBBcml0aFRydW5jOiB7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC51bmFy
eUFyaXRoU2hvdWxkU3BlY3VsYXRlSW50MzIobm9kZSwgRml4dXBQYXNzKSkgeworICAgICAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnQzMk9yQm9vbGVhbigpICYm
IG1fZ3JhcGgucm91bmRTaG91bGRTcGVjdWxhdGVJbnQzMihub2RlLCBGaXh1cFBhc3MpKSB7CiAg
ICAgICAgICAgICAgICAgZml4SW50T3JCb29sZWFuRWRnZShub2RlLT5jaGlsZDEoKSk7CiAgICAg
ICAgICAgICAgICAgaW5zZXJ0Q2hlY2s8SW50MzJVc2U+KG1faW5kZXhJbkJsb2NrLCBub2RlLT5j
aGlsZDEoKS5ub2RlKCkpOwogICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0lkZW50aXR5
KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBm
aXhEb3VibGVPckJvb2xlYW5FZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGlmIChu
b2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTm90Q2VsbCgpKSB7CisgICAgICAgICAgICAg
ICAgZml4RG91YmxlT3JCb29sZWFuRWRnZShub2RlLT5jaGlsZDEoKSk7CiAKLSAgICAgICAgICAg
IGlmIChpc0ludDMyT3JCb29sZWFuU3BlY3VsYXRpb24obm9kZS0+Z2V0SGVhcFByZWRpY3Rpb24o
KSkgJiYgbV9ncmFwaC5yb3VuZFNob3VsZFNwZWN1bGF0ZUludDMyKG5vZGUsIEZpeHVwUGFzcykp
IHsKLSAgICAgICAgICAgICAgICBub2RlLT5zZXRSZXN1bHQoTm9kZVJlc3VsdEludDMyKTsKLSAg
ICAgICAgICAgICAgICBpZiAoYnl0ZWNvZGVDYW5JZ25vcmVOZWdhdGl2ZVplcm8obm9kZS0+YXJp
dGhOb2RlRmxhZ3MoKSkpCi0gICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldEFyaXRoUm91bmRp
bmdNb2RlKEFyaXRoOjpSb3VuZGluZ01vZGU6OkludDMyKTsKLSAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldEFyaXRoUm91bmRpbmdNb2RlKEFyaXRoOjpS
b3VuZGluZ01vZGU6OkludDMyV2l0aE5lZ2F0aXZlWmVyb0NoZWNrKTsKLSAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVzdWx0KE5vZGVSZXN1bHREb3VibGUp
OwotICAgICAgICAgICAgICAgIG5vZGUtPnNldEFyaXRoUm91bmRpbmdNb2RlKEFyaXRoOjpSb3Vu
ZGluZ01vZGU6OkRvdWJsZSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGlz
SW50MzJPckJvb2xlYW5TcGVjdWxhdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKSAmJiBt
X2dyYXBoLnJvdW5kU2hvdWxkU3BlY3VsYXRlSW50MzIobm9kZSwgRml4dXBQYXNzKSkgeworICAg
ICAgICAgICAgICAgICAgICBub2RlLT5zZXRSZXN1bHQoTm9kZVJlc3VsdEludDMyKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGJ5dGVjb2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5vZGUtPmFy
aXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0QXJpdGhS
b3VuZGluZ01vZGUoQXJpdGg6OlJvdW5kaW5nTW9kZTo6SW50MzIpOworICAgICAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRBcml0aFJvdW5kaW5n
TW9kZShBcml0aDo6Um91bmRpbmdNb2RlOjpJbnQzMldpdGhOZWdhdGl2ZVplcm9DaGVjayk7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVz
dWx0KE5vZGVSZXN1bHREb3VibGUpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRBcml0
aFJvdW5kaW5nTW9kZShBcml0aDo6Um91bmRpbmdNb2RlOjpEb3VibGUpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBub2RlLT5jbGVhckZsYWdzKE5vZGVNdXN0R2VuZXJhdGUp
OworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgZml4RWRnZTxVbnR5cGVkVXNl
Pihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKaW5kZXggZGNhMWNhNWYxYjVlNTM3YmRh
MDQ1MDA2MzlmMjQ4YzVhMGI4MzliZi4uZmZlNDFlNzRiYjdmMjJkNzczMzZhN2I2OWQ1ZGExZWFl
MTFlMTQwOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlw
ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaApAQCAtMTU1
LDEwICsxNTUsMTAgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3Jv
KEFyaXRoRlJvdW5kLCBOb2RlUmVzdWx0RG91YmxlIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAg
IG1hY3JvKEFyaXRoUG93LCBOb2RlUmVzdWx0RG91YmxlKSBcCiAgICAgbWFjcm8oQXJpdGhSYW5k
b20sIE5vZGVSZXN1bHREb3VibGUgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCi0gICAgbWFjcm8oQXJp
dGhSb3VuZCwgTm9kZVJlc3VsdE51bWJlcikgXAotICAgIG1hY3JvKEFyaXRoRmxvb3IsIE5vZGVS
ZXN1bHROdW1iZXIpIFwKLSAgICBtYWNybyhBcml0aENlaWwsIE5vZGVSZXN1bHROdW1iZXIpIFwK
LSAgICBtYWNybyhBcml0aFRydW5jLCBOb2RlUmVzdWx0TnVtYmVyKSBcCisgICAgbWFjcm8oQXJp
dGhSb3VuZCwgTm9kZVJlc3VsdE51bWJlciB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNy
byhBcml0aEZsb29yLCBOb2RlUmVzdWx0TnVtYmVyIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAg
IG1hY3JvKEFyaXRoQ2VpbCwgTm9kZVJlc3VsdE51bWJlciB8IE5vZGVNdXN0R2VuZXJhdGUpIFwK
KyAgICBtYWNybyhBcml0aFRydW5jLCBOb2RlUmVzdWx0TnVtYmVyIHwgTm9kZU11c3RHZW5lcmF0
ZSkgXAogICAgIG1hY3JvKEFyaXRoU3FydCwgTm9kZVJlc3VsdERvdWJsZSB8IE5vZGVNdXN0R2Vu
ZXJhdGUpIFwKICAgICBtYWNybyhBcml0aFNpbiwgTm9kZVJlc3VsdERvdWJsZSB8IE5vZGVNdXN0
R2VuZXJhdGUpIFwKICAgICBtYWNybyhBcml0aENvcywgTm9kZVJlc3VsdERvdWJsZSB8IE5vZGVN
dXN0R2VuZXJhdGUpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
Y3BwCmluZGV4IDU2MmM4YTRkMDAxYTY0MjVhN2ViYTk2ZDQxYzc0NTIyODQyZjIzNzguLmNlNTQ2
ZWJjYjg4MzVmNDc4NDQ2M2I1MDg0ZDgwNmIwODAyMzM3NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcApAQCAtNDQyLDYgKzQ0Miw1OCBAQCBkb3VibGUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aFRhbihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRPcAogICAgIHJldHVybiB0YW4oYSk7CiB9CiAKK0VuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhSb3VuZChFeGVjU3RhdGUqIGV4ZWMsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRBcmd1bWVudCkKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsK
KyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOworCisgICAgSlNWYWx1ZSBhcmd1bWVudCA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQXJndW1lbnQpOworICAgIGRvdWJsZSB2YWx1ZU9mQXJn
dW1lbnQgPSBhcmd1bWVudC50b051bWJlcihleGVjKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihqc1JvdW5kKHZhbHVlT2ZBcmd1
bWVudCkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0
aEZsb29yKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEFyZ3VtZW50KQor
eworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2
bSk7CisKKyAgICBKU1ZhbHVlIGFyZ3VtZW50ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRBcmd1
bWVudCk7CisgICAgZG91YmxlIHZhbHVlT2ZBcmd1bWVudCA9IGFyZ3VtZW50LnRvTnVtYmVyKGV4
ZWMpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVtYmVyKGZsb29yKHZhbHVlT2ZBcmd1bWVudCkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aENlaWwoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkQXJndW1lbnQpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKworICAgIEpTVmFsdWUgYXJndW1lbnQgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEFyZ3VtZW50KTsKKyAgICBkb3VibGUgdmFsdWVPZkFyZ3Vt
ZW50ID0gYXJndW1lbnQudG9OdW1iZXIoZXhlYyk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoY2VpbCh2YWx1ZU9mQXJndW1lbnQp
KSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhUcnVu
YyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRBcmd1bWVudCkKK3sKKyAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwor
CisgICAgSlNWYWx1ZSBhcmd1bWVudCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQXJndW1lbnQp
OworICAgIGRvdWJsZSB0cnVuY2F0ZWRWYWx1ZU9mQXJndW1lbnQgPSBhcmd1bWVudC50b0ludGVn
ZXJQcmVzZXJ2ZU5hTihleGVjKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkp
KQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc051bWJlcih0cnVuY2F0ZWRWYWx1ZU9mQXJndW1lbnQpKTsKK30K
Kwogc3RhdGljIEFMV0FZU19JTkxJTkUgRW5jb2RlZEpTVmFsdWUgZ2V0QnlWYWwoRXhlY1N0YXRl
KiBleGVjLCBKU0NlbGwqIGJhc2UsIHVpbnQzMl90IGluZGV4KQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCmluZGV4
IDg2ZTE5MWU2M2UyZDNmNDZkZjcxMDViNDBhODgwYWFlYmI4ZDcwNjIuLjZhYjc2NzU3ZTg4MTJl
Mjc5ZGY1NzA5MDE2ZmEzZjJjOGIyM2MyMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSwgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMSwgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjEsNiArNjEsMTAgQEAgZG91YmxlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhGUm91bmQoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZE9wMSkKIGRvdWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoTG9nKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEpIFdURl9JTlRFUk5BTDsKIGRvdWJs
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoU2luKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcDEpIFdURl9JTlRFUk5BTDsKIGRvdWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkFyaXRoU3FydChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxKSBXVEZf
SU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoUm91
bmQoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1Zh
bHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhGbG9vcihFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25Bcml0aENlaWwoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsK
K0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhUcnVuYyhFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5KSBXVEZfSU5URVJOQUw7CiBF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsQ2VsbChFeGVjU3Rh
dGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHkpIFdURl9JTlRFUk5B
TDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxBcnJheUlu
dChFeGVjU3RhdGUqLCBKU0FycmF5KiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmNwcAppbmRleCA5MzQ0ZjYyNWEwZmQ4N2I5NDAzNTFkZWQ3Njc2YjE0M2Q3NGYxMjBj
Li4zY2Q1MmI5MGNhYTc3NjVlYjRkMjJjMjYxNTUyMGU2YmUyZWUyNmFjIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmNwcApAQCAtMzE4LDE3ICszMTgsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KIAotICAgICAgICBjYXNlIEFyaXRoUm91bmQ6Ci0gICAgICAgIGNhc2Ug
QXJpdGhGbG9vcjoKLSAgICAgICAgY2FzZSBBcml0aENlaWw6Ci0gICAgICAgIGNhc2UgQXJpdGhU
cnVuYzogewotICAgICAgICAgICAgaWYgKGlzSW50MzJPckJvb2xlYW5TcGVjdWxhdGlvbihub2Rl
LT5nZXRIZWFwUHJlZGljdGlvbigpKSAmJiBtX2dyYXBoLnJvdW5kU2hvdWxkU3BlY3VsYXRlSW50
MzIobm9kZSwgbV9wYXNzKSkKLSAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rp
b24oU3BlY0ludDMyT25seSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY2hh
bmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNCeXRlY29kZURvdWJsZSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotCiAgICAgICAgIGNhc2UgQXJpdGhBYnM6IHsKICAgICAgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIGNoaWxkUHJlZGljdGlvbiA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0
aW9uKCk7CiAgICAgICAgICAgICBpZiAoaXNJbnQzMk9yQm9vbGVhblNwZWN1bGF0aW9uKGNoaWxk
UHJlZGljdGlvbikKQEAgLTc3Niw2ICs3NjUsMTggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBBcml0aFJvdW5kOgorICAgICAgICBjYXNl
IEFyaXRoRmxvb3I6CisgICAgICAgIGNhc2UgQXJpdGhDZWlsOgorICAgICAgICBjYXNlIEFyaXRo
VHJ1bmM6IHsKKyAgICAgICAgICAgIGlmIChpc0ludDMyT3JCb29sZWFuU3BlY3VsYXRpb24obV9j
dXJyZW50Tm9kZS0+Z2V0SGVhcFByZWRpY3Rpb24oKSkKKyAgICAgICAgICAgICAgICAmJiBtX2dy
YXBoLnJvdW5kU2hvdWxkU3BlY3VsYXRlSW50MzIobV9jdXJyZW50Tm9kZSwgbV9wYXNzKSkKKyAg
ICAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY0J5dGVjb2RlRG91YmxlKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKICAgICAgICAgY2FzZSBBcml0aFJhbmRv
bTogewogICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjRG91YmxlUmVhbCk7CiAgICAgICAg
ICAgICBicmVhazsKQEAgLTk1MCwxMCArOTUxLDYgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBB
cml0aE11bDoKICAgICAgICAgY2FzZSBBcml0aERpdjoKICAgICAgICAgY2FzZSBBcml0aE1vZDoK
LSAgICAgICAgY2FzZSBBcml0aFJvdW5kOgotICAgICAgICBjYXNlIEFyaXRoRmxvb3I6Ci0gICAg
ICAgIGNhc2UgQXJpdGhDZWlsOgotICAgICAgICBjYXNlIEFyaXRoVHJ1bmM6CiAgICAgICAgIGNh
c2UgQXJpdGhBYnM6CiAgICAgICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgICAgIGNhc2UgVG9UaGlz
OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcApp
bmRleCA2ZjE3MmM3MmY0MWM2OTVhM2I1N2UwYzExYzNlYzRjNjU3NmEyZmJiLi4xNmIzNjc3M2M2
YTU2MDVmMzdmM2M3Yjg5NzNhOTBjZWYyNzMwNzk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcApAQCAtNDkxMCwxMDEgKzQ5MTAsMTI5IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE1vZChOb2RlKiBub2RlKQogCiB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhSb3VuZGluZyhOb2RlKiBub2RlKQogewotICAg
IEFTU0VSVChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gRG91YmxlUmVwVXNlKTsKKyAgICBp
ZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IERvdWJsZVJlcFVzZSkgeworICAgICAgICBT
cGVjdWxhdGVEb3VibGVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgRlBSUmVnIHZhbHVlRlBSID0gdmFsdWUuZnByKCk7CiAKLSAgICBTcGVjdWxhdGVEb3VibGVP
cGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICBGUFJSZWcgdmFsdWVGUFIg
PSB2YWx1ZS5mcHIoKTsKKyAgICAgICAgYXV0byBzZXRSZXN1bHQgPSBbJl0gKEZQUlJlZyByZXN1
bHRGUFIpIHsKKyAgICAgICAgICAgIGlmIChwcm9kdWNlc0ludGVnZXIobm9kZS0+YXJpdGhSb3Vu
ZGluZ01vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgcm91bmRlZFJlc3Vs
dEFzSW50MzIodGhpcyk7CisgICAgICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhp
cyk7CisgICAgICAgICAgICAgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBzY3JhdGNoLmZwcigpOwor
ICAgICAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByb3VuZGVkUmVzdWx0QXNJbnQzMi5n
cHIoKTsKKyAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2Vz
OworICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaENvbnZlcnREb3VibGVUb0ludDMyKHJlc3Vs
dEZQUiwgcmVzdWx0R1BSLCBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hGUFIsIHNob3VsZENoZWNrTmVn
YXRpdmVaZXJvKG5vZGUtPmFyaXRoUm91bmRpbmdNb2RlKCkpKTsKKyAgICAgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCBub2RlLCBmYWlsdXJlQ2Fz
ZXMpOwogCi0gICAgYXV0byBzZXRSZXN1bHQgPSBbJl0gKEZQUlJlZyByZXN1bHRGUFIpIHsKLSAg
ICAgICAgaWYgKHByb2R1Y2VzSW50ZWdlcihub2RlLT5hcml0aFJvdW5kaW5nTW9kZSgpKSkgewot
ICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJvdW5kZWRSZXN1bHRBc0ludDMyKHRoaXMpOwotICAg
ICAgICAgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgICAgICAgICBGUFJSZWcg
c2NyYXRjaEZQUiA9IHNjcmF0Y2guZnByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcm91bmRlZFJlc3VsdEFzSW50MzIuZ3ByKCk7Ci0gICAgICAgICAgICBKSVRDb21waWxlcjo6
SnVtcExpc3QgZmFpbHVyZUNhc2VzOwotICAgICAgICAgICAgbV9qaXQuYnJhbmNoQ29udmVydERv
dWJsZVRvSW50MzIocmVzdWx0RlBSLCByZXN1bHRHUFIsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEZQ
Uiwgc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhSb3VuZGluZ01vZGUoKSkpOwot
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgbm9k
ZSwgZmFpbHVyZUNhc2VzKTsKKyAgICAgICAgICAgICAgICBpbnQzMlJlc3VsdChyZXN1bHRHUFIs
IG5vZGUpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgZG91YmxlUmVzdWx0
KHJlc3VsdEZQUiwgbm9kZSk7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKG1faml0LnN1cHBv
cnRzRmxvYXRpbmdQb2ludFJvdW5kaW5nKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+
b3AoKSkgeworICAgICAgICAgICAgY2FzZSBBcml0aFJvdW5kOiB7CisgICAgICAgICAgICAgICAg
RlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgICAgICBGUFJSZWcgcmVzdWx0
RlBSID0gcmVzdWx0LmZwcigpOworICAgICAgICAgICAgICAgIGlmIChwcm9kdWNlc0ludGVnZXIo
bm9kZS0+YXJpdGhSb3VuZGluZ01vZGUoKSkgJiYgIXNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG5v
ZGUtPmFyaXRoUm91bmRpbmdNb2RlKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXRpYyBj
b25zdCBkb3VibGUgaGFsZkNvbnN0YW50ID0gMC41OworICAgICAgICAgICAgICAgICAgICBtX2pp
dC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZoYWxmQ29uc3RhbnQp
LCByZXN1bHRGUFIpOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5hZGREb3VibGUodmFsdWVG
UFIsIHJlc3VsdEZQUik7CisgICAgICAgICAgICAgICAgICAgIG1faml0LmZsb29yRG91YmxlKHJl
c3VsdEZQUiwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICBtX2ppdC5jZWlsRG91YmxlKHZhbHVlRlBSLCByZXN1bHRGUFIpOworICAgICAg
ICAgICAgICAgICAgICBGUFJUZW1wb3JhcnkgcmVhbFBhcnQodGhpcyk7CisgICAgICAgICAgICAg
ICAgICAgIEZQUlJlZyByZWFsUGFydEZQUiA9IHJlYWxQYXJ0LmZwcigpOworICAgICAgICAgICAg
ICAgICAgICBtX2ppdC5zdWJEb3VibGUocmVzdWx0RlBSLCB2YWx1ZUZQUiwgcmVhbFBhcnRGUFIp
OworCisgICAgICAgICAgICAgICAgICAgIEZQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworICAg
ICAgICAgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IHNjcmF0Y2guZnByKCk7CisgICAg
ICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgaGFsZkNvbnN0YW50ID0gMC41Owor
ICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKCZoYWxmQ29uc3RhbnQpLCBzY3JhdGNoRlBSKTsKKworICAgICAgICAgICAgICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcCBzaG91bGRVc2VDZWlsZWQgPSBtX2ppdC5icmFuY2hEb3Vi
bGUoSklUQ29tcGlsZXI6OkRvdWJsZUxlc3NUaGFuT3JFcXVhbCwgcmVhbFBhcnRGUFIsIHNjcmF0
Y2hGUFIpOworICAgICAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZUNvbnN0
YW50ID0gLTEuMDsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmb25lQ29uc3RhbnQpLCBzY3JhdGNoRlBSKTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9qaXQuYWRkRG91YmxlKHNjcmF0Y2hGUFIsIHJlc3VsdEZQUik7Cisg
ICAgICAgICAgICAgICAgICAgIHNob3VsZFVzZUNlaWxlZC5saW5rKCZtX2ppdCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNldFJlc3VsdChyZXN1bHRGUFIpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaW50MzJSZXN1
bHQocmVzdWx0R1BSLCBub2RlKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBkb3VibGVS
ZXN1bHQocmVzdWx0RlBSLCBub2RlKTsKLSAgICB9OworICAgICAgICAgICAgY2FzZSBBcml0aEZs
b29yOiB7CisgICAgICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHJvdW5kZWQodGhpcyk7CisgICAg
ICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJvdW5kZWQuZnByKCk7CisgICAgICAgICAg
ICAgICAgbV9qaXQuZmxvb3JEb3VibGUodmFsdWVGUFIsIHJlc3VsdEZQUik7CisgICAgICAgICAg
ICAgICAgc2V0UmVzdWx0KHJlc3VsdEZQUik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQogCi0gICAgaWYgKG1faml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludFJvdW5kaW5n
KCkpIHsKLSAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgIGNhc2UgQXJpdGhS
b3VuZDogewotICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAg
ICAgIEZQUlJlZyByZXN1bHRGUFIgPSByZXN1bHQuZnByKCk7Ci0gICAgICAgICAgICBpZiAocHJv
ZHVjZXNJbnRlZ2VyKG5vZGUtPmFyaXRoUm91bmRpbmdNb2RlKCkpICYmICFzaG91bGRDaGVja05l
Z2F0aXZlWmVybyhub2RlLT5hcml0aFJvdW5kaW5nTW9kZSgpKSkgewotICAgICAgICAgICAgICAg
IHN0YXRpYyBjb25zdCBkb3VibGUgaGFsZkNvbnN0YW50ID0gMC41OwotICAgICAgICAgICAgICAg
IG1faml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoJmhhbGZDb25z
dGFudCksIHJlc3VsdEZQUik7Ci0gICAgICAgICAgICAgICAgbV9qaXQuYWRkRG91YmxlKHZhbHVl
RlBSLCByZXN1bHRGUFIpOwotICAgICAgICAgICAgICAgIG1faml0LmZsb29yRG91YmxlKHJlc3Vs
dEZQUiwgcmVzdWx0RlBSKTsKLSAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjYXNl
IEFyaXRoQ2VpbDogeworICAgICAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByb3VuZGVkKHRoaXMp
OworICAgICAgICAgICAgICAgIEZQUlJlZyByZXN1bHRGUFIgPSByb3VuZGVkLmZwcigpOwogICAg
ICAgICAgICAgICAgIG1faml0LmNlaWxEb3VibGUodmFsdWVGUFIsIHJlc3VsdEZQUik7Ci0gICAg
ICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlYWxQYXJ0KHRoaXMpOwotICAgICAgICAgICAgICAg
IEZQUlJlZyByZWFsUGFydEZQUiA9IHJlYWxQYXJ0LmZwcigpOwotICAgICAgICAgICAgICAgIG1f
aml0LnN1YkRvdWJsZShyZXN1bHRGUFIsIHZhbHVlRlBSLCByZWFsUGFydEZQUik7Ci0KLSAgICAg
ICAgICAgICAgICBGUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAgICAgICAgICAgICAgICBG
UFJSZWcgc2NyYXRjaEZQUiA9IHNjcmF0Y2guZnByKCk7Ci0gICAgICAgICAgICAgICAgc3RhdGlj
IGNvbnN0IGRvdWJsZSBoYWxmQ29uc3RhbnQgPSAwLjU7Ci0gICAgICAgICAgICAgICAgbV9qaXQu
bG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmaGFsZkNvbnN0YW50KSwg
c2NyYXRjaEZQUik7Ci0KLSAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBzaG91bGRV
c2VDZWlsZWQgPSBtX2ppdC5icmFuY2hEb3VibGUoSklUQ29tcGlsZXI6OkRvdWJsZUxlc3NUaGFu
T3JFcXVhbCwgcmVhbFBhcnRGUFIsIHNjcmF0Y2hGUFIpOwotICAgICAgICAgICAgICAgIHN0YXRp
YyBjb25zdCBkb3VibGUgb25lQ29uc3RhbnQgPSAtMS4wOwotICAgICAgICAgICAgICAgIG1faml0
LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoJm9uZUNvbnN0YW50KSwg
c2NyYXRjaEZQUik7Ci0gICAgICAgICAgICAgICAgbV9qaXQuYWRkRG91YmxlKHNjcmF0Y2hGUFIs
IHJlc3VsdEZQUik7Ci0gICAgICAgICAgICAgICAgc2hvdWxkVXNlQ2VpbGVkLmxpbmsoJm1faml0
KTsKKyAgICAgICAgICAgICAgICBzZXRSZXN1bHQocmVzdWx0RlBSKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzZXRSZXN1bHQocmVzdWx0RlBS
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQogCi0gICAgICAgIGNhc2UgQXJpdGhG
bG9vcjogewotICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHJvdW5kZWQodGhpcyk7Ci0gICAgICAg
ICAgICBGUFJSZWcgcmVzdWx0RlBSID0gcm91bmRlZC5mcHIoKTsKLSAgICAgICAgICAgIG1faml0
LmZsb29yRG91YmxlKHZhbHVlRlBSLCByZXN1bHRGUFIpOwotICAgICAgICAgICAgc2V0UmVzdWx0
KHJlc3VsdEZQUik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAgICAg
IGNhc2UgQXJpdGhUcnVuYzogeworICAgICAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByb3VuZGVk
KHRoaXMpOworICAgICAgICAgICAgICAgIEZQUlJlZyByZXN1bHRGUFIgPSByb3VuZGVkLmZwcigp
OworICAgICAgICAgICAgICAgIG1faml0LnJvdW5kVG93YXJkWmVyb0RvdWJsZSh2YWx1ZUZQUiwg
cmVzdWx0RlBSKTsKKyAgICAgICAgICAgICAgICBzZXRSZXN1bHQocmVzdWx0RlBSKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAKLSAgICAgICAgY2FzZSBBcml0aENl
aWw6IHsKLSAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByb3VuZGVkKHRoaXMpOwotICAgICAgICAg
ICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJvdW5kZWQuZnByKCk7Ci0gICAgICAgICAgICBtX2ppdC5j
ZWlsRG91YmxlKHZhbHVlRlBSLCByZXN1bHRGUFIpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAg
ICAgICAgIEZQUlJlc3VsdCByb3VuZGVkUmVzdWx0QXNEb3VibGUodGhpcyk7CisgICAgICAgICAg
ICBGUFJSZWcgcmVzdWx0RlBSID0gcm91bmRlZFJlc3VsdEFzRG91YmxlLmZwcigpOworICAgICAg
ICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQXJpdGhSb3VuZCkKKyAgICAgICAgICAgICAgICBjYWxs
T3BlcmF0aW9uKGpzUm91bmQsIHJlc3VsdEZQUiwgdmFsdWVGUFIpOworICAgICAgICAgICAgZWxz
ZSBpZiAobm9kZS0+b3AoKSA9PSBBcml0aEZsb29yKQorICAgICAgICAgICAgICAgIGNhbGxPcGVy
YXRpb24oZmxvb3IsIHJlc3VsdEZQUiwgdmFsdWVGUFIpOworICAgICAgICAgICAgZWxzZSBpZiAo
bm9kZS0+b3AoKSA9PSBBcml0aENlaWwpCisgICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihj
ZWlsLCByZXN1bHRGUFIsIHZhbHVlRlBSKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IEFyaXRoVHJ1bmMpOworICAgICAgICAgICAgICAg
IGNhbGxPcGVyYXRpb24odHJ1bmMsIHJlc3VsdEZQUiwgdmFsdWVGUFIpOworICAgICAgICAgICAg
fQogICAgICAgICAgICAgc2V0UmVzdWx0KHJlc3VsdEZQUik7Ci0gICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgICAgICBjYXNlIEFyaXRo
VHJ1bmM6IHsKLSAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByb3VuZGVkKHRoaXMpOwotICAgICAg
ICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJvdW5kZWQuZnByKCk7Ci0gICAgICAgICAgICBtX2pp
dC5yb3VuZFRvd2FyZFplcm9Eb3VibGUodmFsdWVGUFIsIHJlc3VsdEZQUik7Ci0gICAgICAgICAg
ICBzZXRSZXN1bHQocmVzdWx0RlBSKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQor
ICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgbm9kZS0+Y2hpbGQxKCkudXNlS2lu
ZCgpID09IFVudHlwZWRVc2UpOwogCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgRlBSUmVzdWx0IHJvdW5kZWRSZXN1bHRBc0Rv
dWJsZSh0aGlzKTsKLSAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJvdW5kZWRSZXN1bHRBc0Rv
dWJsZS5mcHIoKTsKLSAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQXJpdGhSb3VuZCkKLSAgICAg
ICAgICAgIGNhbGxPcGVyYXRpb24oanNSb3VuZCwgcmVzdWx0RlBSLCB2YWx1ZUZQUik7Ci0gICAg
ICAgIGVsc2UgaWYgKG5vZGUtPm9wKCkgPT0gQXJpdGhGbG9vcikKLSAgICAgICAgICAgIGNhbGxP
cGVyYXRpb24oZmxvb3IsIHJlc3VsdEZQUiwgdmFsdWVGUFIpOwotICAgICAgICBlbHNlIGlmIChu
b2RlLT5vcCgpID09IEFyaXRoQ2VpbCkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24oY2VpbCwg
cmVzdWx0RlBSLCB2YWx1ZUZQUik7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgQVNTRVJU
KG5vZGUtPm9wKCkgPT0gQXJpdGhUcnVuYyk7Ci0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uKHRy
dW5jLCByZXN1bHRGUFIsIHZhbHVlRlBSKTsKLSAgICAgICAgfQotICAgICAgICBtX2ppdC5leGNl
cHRpb25DaGVjaygpOwotICAgICAgICBzZXRSZXN1bHQocmVzdWx0RlBSKTsKKyAgICBKU1ZhbHVl
T3BlcmFuZCBhcmd1bWVudCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgSlNWYWx1ZVJlZ3Mg
YXJndW1lbnRSZWdzID0gYXJndW1lbnQuanNWYWx1ZVJlZ3MoKTsKKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IEpTVmFsdWVSZWdzKHJlc3VsdC5ncHIoKSk7CisjZWxzZQorICAgIEdQUlRlbXBvcmFy
eSByZXN1bHRUYWcodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcyk7
CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlc3VsdFBheWxvYWQu
Z3ByKCksIHJlc3VsdFRhZy5ncHIoKSk7CisjZW5kaWYKKyAgICBmbHVzaFJlZ2lzdGVycygpOwor
ICAgIEpfSklUT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiA9IG51bGxwdHI7CisgICAgaWYgKG5vZGUt
Pm9wKCkgPT0gQXJpdGhSb3VuZCkKKyAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uQXJpdGhS
b3VuZDsKKyAgICBlbHNlIGlmIChub2RlLT5vcCgpID09IEFyaXRoRmxvb3IpCisgICAgICAgIG9w
ZXJhdGlvbiA9IG9wZXJhdGlvbkFyaXRoRmxvb3I7CisgICAgZWxzZSBpZiAobm9kZS0+b3AoKSA9
PSBBcml0aENlaWwpCisgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvbkFyaXRoQ2VpbDsKKyAg
ICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gQXJpdGhUcnVuYyk7CisgICAg
ICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvbkFyaXRoVHJ1bmM7CiAgICAgfQorICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uLCByZXN1bHRSZWdzLCBhcmd1bWVudFJlZ3MpOworICAgIG1faml0LmV4
Y2VwdGlvbkNoZWNrKCk7CisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKIH0K
IAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoU2luKE5vZGUqIG5vZGUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKaW5kZXggMGIxYTAy
ZjEwMjlhMWM0MjAxYTVlZWQwMGQ4NDMzNWYzMjZjOTZhZi4uMDgwMzdkODA4MmZiODM5M2Y0NTRi
Y2EyNDhlOTQzYTI4ZmQzZWY1MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvQjMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcApAQCAtMjI2Niw2NyArMjI2Niw5MSBAQCBwcml2YXRlOgogCiAgICAg
dm9pZCBjb21waWxlQXJpdGhSb3VuZCgpCiAgICAgewotICAgICAgICBMVmFsdWUgcmVzdWx0ID0g
bnVsbHB0cjsKKyAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IERvdWJs
ZVJlcFVzZSkgeworICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG51bGxwdHI7CisgICAgICAg
ICAgICBpZiAocHJvZHVjZXNJbnRlZ2VyKG1fbm9kZS0+YXJpdGhSb3VuZGluZ01vZGUoKSkgJiYg
IXNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG1fbm9kZS0+YXJpdGhSb3VuZGluZ01vZGUoKSkpIHsK
KyAgICAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQuZG91YmxlRmxvb3IobV9vdXQuZG91
YmxlQWRkKHZhbHVlLCBtX291dC5jb25zdERvdWJsZSgwLjUpKSk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIHJlYWxQYXJ0SXNNb3JlVGhhbkhhbGYg
PSBtX291dC5uZXdCbG9jaygpOworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVh
dGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAKLSAgICAgICAgaWYgKHByb2R1Y2VzSW50ZWdlciht
X25vZGUtPmFyaXRoUm91bmRpbmdNb2RlKCkpICYmICFzaG91bGRDaGVja05lZ2F0aXZlWmVybyht
X25vZGUtPmFyaXRoUm91bmRpbmdNb2RlKCkpKSB7Ci0gICAgICAgICAgICBMVmFsdWUgdmFsdWUg
PSBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICByZXN1bHQgPSBtX291
dC5kb3VibGVGbG9vcihtX291dC5kb3VibGVBZGQodmFsdWUsIG1fb3V0LmNvbnN0RG91YmxlKDAu
NSkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIHJlYWxQYXJ0
SXNNb3JlVGhhbkhhbGYgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgICAgICAgICBMVmFs
dWUgdmFsdWUgPSBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAg
TFZhbHVlIGludGVnZXJWYWx1ZSA9IG1fb3V0LmRvdWJsZUNlaWwodmFsdWUpOworICAgICAgICAg
ICAgICAgIFZhbHVlRnJvbUJsb2NrIGludGVnZXJWYWx1ZVJlc3VsdCA9IG1fb3V0LmFuY2hvcihp
bnRlZ2VyVmFsdWUpOwogCi0gICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dEb3VibGUobV9u
b2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBMVmFsdWUgaW50ZWdlclZhbHVlID0gbV9vdXQu
ZG91YmxlQ2VpbCh2YWx1ZSk7Ci0gICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBpbnRlZ2VyVmFs
dWVSZXN1bHQgPSBtX291dC5hbmNob3IoaW50ZWdlclZhbHVlKTsKKyAgICAgICAgICAgICAgICBM
VmFsdWUgcmVhbFBhcnQgPSBtX291dC5kb3VibGVTdWIoaW50ZWdlclZhbHVlLCB2YWx1ZSk7CiAK
LSAgICAgICAgICAgIExWYWx1ZSByZWFsUGFydCA9IG1fb3V0LmRvdWJsZVN1YihpbnRlZ2VyVmFs
dWUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBtX291dC5icmFuY2gobV9vdXQuZG91YmxlR3Jl
YXRlclRoYW5PclVub3JkZXJlZChyZWFsUGFydCwgbV9vdXQuY29uc3REb3VibGUoMC41KSksIHVu
c3VyZShyZWFsUGFydElzTW9yZVRoYW5IYWxmKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOwogCi0g
ICAgICAgICAgICBtX291dC5icmFuY2gobV9vdXQuZG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJl
ZChyZWFsUGFydCwgbV9vdXQuY29uc3REb3VibGUoMC41KSksIHVuc3VyZShyZWFsUGFydElzTW9y
ZVRoYW5IYWxmKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOworICAgICAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8ocmVhbFBhcnRJc01vcmVUaGFuSGFsZiwg
Y29udGludWF0aW9uKTsKKyAgICAgICAgICAgICAgICBMVmFsdWUgaW50ZWdlclZhbHVlUm91bmRl
ZERvd24gPSBtX291dC5kb3VibGVTdWIoaW50ZWdlclZhbHVlLCBtX291dC5jb25zdERvdWJsZSgx
KSk7CisgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW50ZWdlclZhbHVlUm91bmRlZERv
d25SZXN1bHQgPSBtX291dC5hbmNob3IoaW50ZWdlclZhbHVlUm91bmRlZERvd24pOworICAgICAg
ICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgICAgICAgICBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKIAotICAgICAgICAgICAgTEJhc2lj
QmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhyZWFsUGFydElzTW9yZVRoYW5IYWxmLCBj
b250aW51YXRpb24pOwotICAgICAgICAgICAgTFZhbHVlIGludGVnZXJWYWx1ZVJvdW5kZWREb3du
ID0gbV9vdXQuZG91YmxlU3ViKGludGVnZXJWYWx1ZSwgbV9vdXQuY29uc3REb3VibGUoMSkpOwot
ICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW50ZWdlclZhbHVlUm91bmRlZERvd25SZXN1bHQg
PSBtX291dC5hbmNob3IoaW50ZWdlclZhbHVlUm91bmRlZERvd24pOwotICAgICAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQucGhpKERv
dWJsZSwgaW50ZWdlclZhbHVlUmVzdWx0LCBpbnRlZ2VyVmFsdWVSb3VuZGVkRG93blJlc3VsdCk7
CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJlc3VsdCA9IG1fb3V0LnBoaShEb3VibGUs
IGludGVnZXJWYWx1ZVJlc3VsdCwgaW50ZWdlclZhbHVlUm91bmRlZERvd25SZXN1bHQpOworICAg
ICAgICAgICAgaWYgKHByb2R1Y2VzSW50ZWdlcihtX25vZGUtPmFyaXRoUm91bmRpbmdNb2RlKCkp
KSB7CisgICAgICAgICAgICAgICAgTFZhbHVlIGludGVnZXJWYWx1ZSA9IGNvbnZlcnREb3VibGVU
b0ludDMyKHJlc3VsdCwgc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obV9ub2RlLT5hcml0aFJvdW5k
aW5nTW9kZSgpKSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIoaW50ZWdlclZhbHVlKTsKKyAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHNldERvdWJsZShyZXN1bHQpOworICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHByb2R1Y2VzSW50ZWdl
cihtX25vZGUtPmFyaXRoUm91bmRpbmdNb2RlKCkpKSB7Ci0gICAgICAgICAgICBMVmFsdWUgaW50
ZWdlclZhbHVlID0gY29udmVydERvdWJsZVRvSW50MzIocmVzdWx0LCBzaG91bGRDaGVja05lZ2F0
aXZlWmVybyhtX25vZGUtPmFyaXRoUm91bmRpbmdNb2RlKCkpKTsKLSAgICAgICAgICAgIHNldElu
dDMyKGludGVnZXJWYWx1ZSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgc2V0RG91Ymxl
KHJlc3VsdCk7CisgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBtX25vZGUtPmNo
aWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKTsKKyAgICAgICAgTFZhbHVlIGFyZ3VtZW50
ID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgc2V0SlNWYWx1ZSh2bUNh
bGwoSW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25Bcml0aFJvdW5kKSwgbV9jYWxsRnJh
bWUsIGFyZ3VtZW50KSk7CiAgICAgfQogCiAgICAgdm9pZCBjb21waWxlQXJpdGhGbG9vcigpCiAg
ICAgewotICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSk7
Ci0gICAgICAgIExWYWx1ZSBpbnRlZ2VyVmFsdWUgPSBtX291dC5kb3VibGVGbG9vcih2YWx1ZSk7
Ci0gICAgICAgIGlmIChwcm9kdWNlc0ludGVnZXIobV9ub2RlLT5hcml0aFJvdW5kaW5nTW9kZSgp
KSkKLSAgICAgICAgICAgIHNldEludDMyKGNvbnZlcnREb3VibGVUb0ludDMyKGludGVnZXJWYWx1
ZSwgc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obV9ub2RlLT5hcml0aFJvdW5kaW5nTW9kZSgpKSkp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXREb3VibGUoaW50ZWdlclZhbHVlKTsKKyAg
ICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IERvdWJsZVJlcFVzZSkgewor
ICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICAgICAgTFZhbHVlIGludGVnZXJWYWx1ZSA9IG1fb3V0LmRvdWJsZUZsb29yKHZhbHVl
KTsKKyAgICAgICAgICAgIGlmIChwcm9kdWNlc0ludGVnZXIobV9ub2RlLT5hcml0aFJvdW5kaW5n
TW9kZSgpKSkKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihjb252ZXJ0RG91YmxlVG9JbnQzMihp
bnRlZ2VyVmFsdWUsIHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG1fbm9kZS0+YXJpdGhSb3VuZGlu
Z01vZGUoKSkpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzZXREb3VibGUo
aW50ZWdlclZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBE
RkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgbV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0g
VW50eXBlZFVzZSk7CisgICAgICAgIExWYWx1ZSBhcmd1bWVudCA9IGxvd0pTVmFsdWUobV9ub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKEludDY0LCBtX291dC5vcGVy
YXRpb24ob3BlcmF0aW9uQXJpdGhGbG9vciksIG1fY2FsbEZyYW1lLCBhcmd1bWVudCkpOwogICAg
IH0KIAogICAgIHZvaWQgY29tcGlsZUFyaXRoQ2VpbCgpCiAgICAgewotICAgICAgICBMVmFsdWUg
dmFsdWUgPSBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIExWYWx1ZSBpbnRl
Z2VyVmFsdWUgPSBtX291dC5kb3VibGVDZWlsKHZhbHVlKTsKLSAgICAgICAgaWYgKHByb2R1Y2Vz
SW50ZWdlcihtX25vZGUtPmFyaXRoUm91bmRpbmdNb2RlKCkpKQotICAgICAgICAgICAgc2V0SW50
MzIoY29udmVydERvdWJsZVRvSW50MzIoaW50ZWdlclZhbHVlLCBzaG91bGRDaGVja05lZ2F0aXZl
WmVybyhtX25vZGUtPmFyaXRoUm91bmRpbmdNb2RlKCkpKSk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHNldERvdWJsZShpbnRlZ2VyVmFsdWUpOworICAgICAgICBpZiAobV9ub2RlLT5jaGls
ZDEoKS51c2VLaW5kKCkgPT0gRG91YmxlUmVwVXNlKSB7CisgICAgICAgICAgICBMVmFsdWUgdmFs
dWUgPSBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBMVmFsdWUgaW50
ZWdlclZhbHVlID0gbV9vdXQuZG91YmxlQ2VpbCh2YWx1ZSk7CisgICAgICAgICAgICBpZiAocHJv
ZHVjZXNJbnRlZ2VyKG1fbm9kZS0+YXJpdGhSb3VuZGluZ01vZGUoKSkpCisgICAgICAgICAgICAg
ICAgc2V0SW50MzIoY29udmVydERvdWJsZVRvSW50MzIoaW50ZWdlclZhbHVlLCBzaG91bGRDaGVj
a05lZ2F0aXZlWmVybyhtX25vZGUtPmFyaXRoUm91bmRpbmdNb2RlKCkpKSk7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgc2V0RG91YmxlKGludGVnZXJWYWx1ZSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25v
ZGUsIG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UpOworICAgICAgICBM
VmFsdWUgYXJndW1lbnQgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBz
ZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkFyaXRoQ2Vp
bCksIG1fY2FsbEZyYW1lLCBhcmd1bWVudCkpOwogICAgIH0KIAogICAgIHZvaWQgY29tcGlsZUFy
aXRoVHJ1bmMoKQogICAgIHsKLSAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93RG91YmxlKG1fbm9k
ZS0+Y2hpbGQxKCkpOwotICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuZG91YmxlVHJ1bmMo
dmFsdWUpOwotICAgICAgICBpZiAocHJvZHVjZXNJbnRlZ2VyKG1fbm9kZS0+YXJpdGhSb3VuZGlu
Z01vZGUoKSkpCi0gICAgICAgICAgICBzZXRJbnQzMihjb252ZXJ0RG91YmxlVG9JbnQzMihyZXN1
bHQsIHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG1fbm9kZS0+YXJpdGhSb3VuZGluZ01vZGUoKSkp
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0RG91YmxlKHJlc3VsdCk7CisgICAgICAg
IGlmIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBEb3VibGVSZXBVc2UpIHsKKyAgICAg
ICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5kb3VibGVUcnVuYyh2YWx1ZSk7CisgICAgICAg
ICAgICBpZiAocHJvZHVjZXNJbnRlZ2VyKG1fbm9kZS0+YXJpdGhSb3VuZGluZ01vZGUoKSkpCisg
ICAgICAgICAgICAgICAgc2V0SW50MzIoY29udmVydERvdWJsZVRvSW50MzIocmVzdWx0LCBzaG91
bGRDaGVja05lZ2F0aXZlWmVybyhtX25vZGUtPmFyaXRoUm91bmRpbmdNb2RlKCkpKSk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2V0RG91YmxlKHJlc3VsdCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25v
ZGUsIG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UpOworICAgICAgICBM
VmFsdWUgYXJndW1lbnQgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBz
ZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkFyaXRoVHJ1
bmMpLCBtX2NhbGxGcmFtZSwgYXJndW1lbnQpKTsKICAgICB9CiAKICAgICB2b2lkIGNvbXBpbGVB
cml0aFNxcnQoKQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5n
ZUxvZwppbmRleCA5YjVjN2ZhNjVhYTcwNDZmOTM5MzM4YmQzYjRmMGJjZWQwOGQwYTkwLi4zYzli
MDQxN2JhNTgyYjQ5OGY3MTYxOGM1ODlkYzk2OWZmYzcwOTY3IDEwMDY0NAotLS0gYS9KU1Rlc3Rz
L0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE2
LTA5LTEzICBCZW5qYW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgorCisgICAgICAg
IFtKU0NdIE1ha2UgdGhlIHJvdW5kaW5nLXJlbGF0ZWQgbm9kZXMgc3VwcG9ydCBhbnkgdHlwZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYxODk1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzdHJlc3Mv
YXJpdGgtY2VpbC1vbi12YXJpb3VzLXR5cGVzLmpzOiBBZGRlZC4KKyAgICAgICAgKiBzdHJlc3Mv
YXJpdGgtZmxvb3Itb24tdmFyaW91cy10eXBlcy5qczogQWRkZWQuCisgICAgICAgICogc3RyZXNz
L2FyaXRoLXJvdW5kLW9uLXZhcmlvdXMtdHlwZXMuanM6IEFkZGVkLgorICAgICAgICAqIHN0cmVz
cy9hcml0aC10cnVuYy1vbi12YXJpb3VzLXR5cGVzLmpzOiBBZGRlZC4KKwogMjAxNi0wOS0xMiAg
U2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBTcGVlZCB1cCBGdW5j
dGlvbi5wcm90b3R5cGUuYmluZCBhIGJpdCBieSBtYWtpbmcgaXQgYSBidWlsdGluCmRpZmYgLS1n
aXQgYS9KU1Rlc3RzL3N0cmVzcy9hcml0aC1jZWlsLW9uLXZhcmlvdXMtdHlwZXMuanMgYi9KU1Rl
c3RzL3N0cmVzcy9hcml0aC1jZWlsLW9uLXZhcmlvdXMtdHlwZXMuanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTVk
ZDI3ZGU2NGFiMjFlNmI4MjZmOTM2Nzg0NDMwMTQxNGE3YWM3MwotLS0gL2Rldi9udWxsCisrKyBi
L0pTVGVzdHMvc3RyZXNzL2FyaXRoLWNlaWwtb24tdmFyaW91cy10eXBlcy5qcwpAQCAtMCwwICsx
LDI5NSBAQAorInVzZSBzdHJpY3QiOworCitsZXQgdmFsaWRJbnB1dFRlc3RDYXNlcyA9IFsKKyAg
ICAvLyBpbnB1dCBhcyBzdHJpbmcsIGV4cGVjdGVkIHJlc3VsdCBhcyBzdHJpbmcuCisgICAgWyJ1
bmRlZmluZWQiLCAiTmFOIl0sCisgICAgWyJudWxsIiwgIjAiXSwKKyAgICBbIjAiLCAiMCJdLAor
ICAgIFsiLTAuIiwgIi0wIl0sCisgICAgWyIwLjUiLCAiMSJdLAorICAgIFsiLTAuNSIsICItMCJd
LAorICAgIFsiNCIsICI0Il0sCisgICAgWyI0Mi4xIiwgIjQzIl0sCisgICAgWyI0Mi41IiwgIjQz
Il0sCisgICAgWyI0Mi45IiwgIjQzIl0sCisgICAgWyItNDIuMSIsICItNDIiXSwKKyAgICBbIi00
Mi41IiwgIi00MiJdLAorICAgIFsiLTQyLjkiLCAiLTQyIl0sCisgICAgWyJNYXRoLlBJIiwgIjQi
XSwKKyAgICBbIkluZmluaXR5IiwgIkluZmluaXR5Il0sCisgICAgWyItSW5maW5pdHkiLCAiLUlu
ZmluaXR5Il0sCisgICAgWyJOYU4iLCAiTmFOIl0sCisgICAgWyJcIldlYktpdFwiIiwgIk5hTiJd
LAorICAgIFsiXCI0XCIiLCAiNCJdLAorICAgIFsiXCI0Mi41XCIiLCAiNDMiXSwKKyAgICBbInsg
dmFsdWVPZjogKCkgPT4geyByZXR1cm4gNDsgfSB9IiwgIjQiXSwKKyAgICBbInsgdmFsdWVPZjog
KCkgPT4geyByZXR1cm4gMDsgfSB9IiwgIjAiXSwKKyAgICBbInsgdmFsdWVPZjogKCkgPT4geyBy
ZXR1cm4gLTA7IH0gfSIsICItMCJdLAorICAgIFsieyB2YWx1ZU9mOiAoKSA9PiB7IHJldHVybiAw
LjU7IH0gfSIsICIxIl0sCisgICAgWyJ7IHZhbHVlT2Y6ICgpID0+IHsgcmV0dXJuIC0wLjU7IH0g
fSIsICItMCJdLAorICAgIFsieyB2YWx1ZU9mOiAoKSA9PiB7IHJldHVybiBOdW1iZXIuTUlOX1NB
RkVfSU5URUdFUjsgfSB9IiwgIi05MDA3MTk5MjU0NzQwOTkxIl0sCisgICAgWyJ7IHZhbHVlT2Y6
ICgpID0+IHsgcmV0dXJuIE51bWJlci5NQVhfU0FGRV9JTlRFR0VSOyB9IH0iLCAiOTAwNzE5OTI1
NDc0MDk5MSJdLAorICAgIFsieyB2YWx1ZU9mOiAoKSA9PiB7IHJldHVybiAweDgwMDAwMDAwfDA7
IH0gfSIsICItMjE0NzQ4MzY0OCJdLAorICAgIFsieyB2YWx1ZU9mOiAoKSA9PiB7IHJldHVybiAw
eDdmZmZmZmZmfDA7IH0gfSIsICIyMTQ3NDgzNjQ3Il0sCisgICAgWyJ7IHZhbHVlT2Y6ICgpID0+
IHsgcmV0dXJuICgweDgwMDAwMDAwfDApIC0gMC41OyB9IH0iLCAiLTIxNDc0ODM2NDgiXSwKKyAg
ICBbInsgdmFsdWVPZjogKCkgPT4geyByZXR1cm4gKDB4N2ZmZmZmZmZ8MCkgKyAwLjU7IH0gfSIs
ICIyMTQ3NDgzNjQ4Il0sCitdOworCitsZXQgdmFsaWRJbnB1dFR5cGVkVGVzdENhc2VzID0gdmFs
aWRJbnB1dFRlc3RDYXNlcy5tYXAoKGVsZW1lbnQpID0+IHsgcmV0dXJuIFtldmFsKCIoIiArIGVs
ZW1lbnRbMF0gKyAiKSIpLCBldmFsKGVsZW1lbnRbMV0pXSB9KTsKKworZnVuY3Rpb24gaXNJZGVu
dGljYWwocmVzdWx0LCBleHBlY3RlZCkKK3sKKyAgICBpZiAoZXhwZWN0ZWQgPT09IGV4cGVjdGVk
KSB7CisgICAgICAgIGlmIChyZXN1bHQgIT09IGV4cGVjdGVkKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBpZiAoIWV4cGVjdGVkICYmICgxIC8gZXhwZWN0ZWQpICE9PSAoMSAv
IHJlc3VsdCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIHJldHVybiByZXN1bHQgIT09IHJlc3VsdDsKK30KKworCisvLyBUZXN0
IE1hdGguY2VpbCgpIHdpdGhvdXQgYXJndW1lbnRzLgorZnVuY3Rpb24gb3BhcXVlQ2VpbE5vQXJn
dW1lbnQoKSB7CisgICAgcmV0dXJuIE1hdGguY2VpbCgpOworfQorbm9JbmxpbmUob3BhcXVlQ2Vp
bE5vQXJndW1lbnQpOworbm9PU1JFeGl0RnV6emluZyhvcGFxdWVDZWlsTm9Bcmd1bWVudCk7CisK
K2Z1bmN0aW9uIHRlc3ROb0FyZ3VtZW50KCkgeworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMWU0
OyArK2kpIHsKKyAgICAgICAgbGV0IG91dHB1dCA9IG9wYXF1ZUNlaWxOb0FyZ3VtZW50KCk7Cisg
ICAgICAgIGlmICghaXNJZGVudGljYWwob3V0cHV0LCBOYU4pKSB7CisgICAgICAgICAgICB0aHJv
dyAiRmFpbGVkIG9wYXF1ZUNlaWxOb0FyZ3VtZW50IjsKKyAgICAgICAgfQorICAgIH0KKyAgICBp
ZiAobnVtYmVyT2ZERkdDb21waWxlcyhvcGFxdWVDZWlsTm9Bcmd1bWVudCkgPiAxKQorICAgICAg
ICB0aHJvdyAiVGhlIGNhbGwgd2l0aG91dCBhcmd1bWVudHMgc2hvdWxkIG5ldmVyIGV4aXQuIjsK
K30KK3Rlc3ROb0FyZ3VtZW50KCk7CisKKworLy8gVGVzdCBNYXRoLmNlaWwoKSB3aXRoIGEgdmVy
eSBwb2x5bW9ycGhpYyBpbnB1dC4gQWxsIHRlc3QgY2FzZXMgYXJlIHNlZW4gYXQgZWFjaCBpdGVy
YXRpb24uCitmdW5jdGlvbiBvcGFxdWVBbGxUeXBlc0NlaWwoYXJndW1lbnQpIHsKKyAgICByZXR1
cm4gTWF0aC5jZWlsKGFyZ3VtZW50KTsKK30KK25vSW5saW5lKG9wYXF1ZUFsbFR5cGVzQ2VpbCk7
Citub09TUkV4aXRGdXp6aW5nKG9wYXF1ZUFsbFR5cGVzQ2VpbCk7CisKK2Z1bmN0aW9uIHRlc3RB
bGxUeXBlc0NhbGwoKSB7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxZTM7ICsraSkgeworICAg
ICAgICBmb3IgKGxldCB0ZXN0Q2FzZUlucHV0IG9mIHZhbGlkSW5wdXRUeXBlZFRlc3RDYXNlcykg
eworICAgICAgICAgICAgbGV0IG91dHB1dCA9IG9wYXF1ZUFsbFR5cGVzQ2VpbCh0ZXN0Q2FzZUlu
cHV0WzBdKTsKKyAgICAgICAgICAgIGlmICghaXNJZGVudGljYWwob3V0cHV0LCB0ZXN0Q2FzZUlu
cHV0WzFdKSkKKyAgICAgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RBbGxUeXBlc0NhbGwg
Zm9yIGlucHV0ICIgKyB0ZXN0Q2FzZUlucHV0WzBdICsgIiBleHBlY3RlZCAiICsgdGVzdENhc2VJ
bnB1dFsxXSArICIgZ290ICIgKyBvdXRwdXQ7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG51
bWJlck9mREZHQ29tcGlsZXMob3BhcXVlQWxsVHlwZXNDZWlsKSA+IDMpCisgICAgICAgIHRocm93
ICJXZSBzaG91bGQgaGF2ZSBkZXRlY3RlZCBjZWlsKCkgd2FzIHBvbHltb3JwaGljIGFuZCBnZW5l
cmF0ZWQgYSBnZW5lcmljIHZlcnNpb24uIjsKK30KK3Rlc3RBbGxUeXBlc0NhbGwoKTsKKworCisv
LyBQb2x5bW9ycGhpYyBpbnB1dCBidXQgbmVnYXRpdmUgemVybyBpcyBub3Qgb2JzZXJ2YWJsZS4K
K2Z1bmN0aW9uIG9wYXF1ZUFsbFR5cGVzQ2VpbFdpdGhvdXROZWdhdGl2ZVplcm8oYXJndW1lbnQp
IHsKKyAgICByZXR1cm4gTWF0aC5jZWlsKGFyZ3VtZW50KSArIDA7Cit9Citub0lubGluZShvcGFx
dWVBbGxUeXBlc0NlaWxXaXRob3V0TmVnYXRpdmVaZXJvKTsKK25vT1NSRXhpdEZ1enppbmcob3Bh
cXVlQWxsVHlwZXNDZWlsV2l0aG91dE5lZ2F0aXZlWmVybyk7CisKK2Z1bmN0aW9uIHRlc3RBbGxU
eXBlc1dpdGhvdXROZWdhdGl2ZVplcm9DYWxsKCkgeworICAgIGZvciAobGV0IGkgPSAwOyBpIDwg
MWUzOyArK2kpIHsKKyAgICAgICAgZm9yIChsZXQgdGVzdENhc2VJbnB1dCBvZiB2YWxpZElucHV0
VHlwZWRUZXN0Q2FzZXMpIHsKKyAgICAgICAgICAgIGxldCBvdXRwdXQgPSBvcGFxdWVBbGxUeXBl
c0NlaWxXaXRob3V0TmVnYXRpdmVaZXJvKHRlc3RDYXNlSW5wdXRbMF0pOworICAgICAgICAgICAg
aWYgKCFpc0lkZW50aWNhbChvdXRwdXQsIHRlc3RDYXNlSW5wdXRbMV0gKyAwKSkKKyAgICAgICAg
ICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RBbGxUeXBlc1dpdGhvdXROZWdhdGl2ZVplcm9DYWxs
IGZvciBpbnB1dCAiICsgdGVzdENhc2VJbnB1dFswXSArICIgZXhwZWN0ZWQgIiArIHRlc3RDYXNl
SW5wdXRbMV0gKyAiIGdvdCAiICsgb3V0cHV0OworICAgICAgICB9CisgICAgfQorICAgIGlmIChu
dW1iZXJPZkRGR0NvbXBpbGVzKG9wYXF1ZUFsbFR5cGVzQ2VpbCkgPiAzKQorICAgICAgICB0aHJv
dyAiV2Ugc2hvdWxkIGhhdmUgZGV0ZWN0ZWQgY2VpbCgpIHdhcyBwb2x5bW9ycGhpYyBhbmQgZ2Vu
ZXJhdGVkIGEgZ2VuZXJpYyB2ZXJzaW9uLiI7Cit9Cit0ZXN0QWxsVHlwZXNXaXRob3V0TmVnYXRp
dmVaZXJvQ2FsbCgpOworCisKKy8vIFRlc3QgTWF0aC5jZWlsKCkgb24gYSBjb21wbGV0ZWx5IHR5
cGVkIGlucHV0LiBFdmVyeSBjYWxsIHNlZSBvbmx5IG9uZSB0eXBlLgorZnVuY3Rpb24gdGVzdFNp
bmdsZVR5cGVDYWxsKCkgeworICAgIGZvciAobGV0IHRlc3RDYXNlSW5wdXQgb2YgdmFsaWRJbnB1
dFRlc3RDYXNlcykgeworICAgICAgICBldmFsKGAKKyAgICAgICAgICAgIGZ1bmN0aW9uIG9wYXF1
ZUNlaWwoYXJndW1lbnQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKGFyZ3Vt
ZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5vSW5saW5lKG9wYXF1ZUNlaWwpOwor
ICAgICAgICAgICAgbm9PU1JFeGl0RnV6emluZyhvcGFxdWVDZWlsKTsKKworICAgICAgICAgICAg
Zm9yIChsZXQgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICAgICAgICAgIGlmICghaXNJ
ZGVudGljYWwob3BhcXVlQ2VpbCgke3Rlc3RDYXNlSW5wdXRbMF19KSwgJHt0ZXN0Q2FzZUlucHV0
WzFdfSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0U2luZ2xlVHlw
ZUNhbGwoKSI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVlQ2VpbCkgPiAxKQorICAgICAgICAgICAgICAg
IHRocm93ICJXZSBzaG91bGQgaGF2ZSBjb21waWxlZCBhIHNpbmdsZSBjZWlsIGZvciB0aGUgZXhw
ZWN0ZWQgdHlwZS4iOworICAgICAgICBgKTsKKyAgICB9Cit9Cit0ZXN0U2luZ2xlVHlwZUNhbGwo
KTsKKworCisvLyBUZXN0IE1hdGguY2VpbCgpIG9uIGEgY29tcGxldGVseSB0eXBlZCBpbnB1dCwg
YnV0IHdpdGhvdXQgbmVnYXRpdmUgemVyby4KK2Z1bmN0aW9uIHRlc3RTaW5nbGVUeXBlV2l0aG91
dE5lZ2F0aXZlWmVyb0NhbGwoKSB7CisgICAgZm9yIChsZXQgdGVzdENhc2VJbnB1dCBvZiB2YWxp
ZElucHV0VGVzdENhc2VzKSB7CisgICAgICAgIGV2YWwoYAorICAgICAgICAgICAgZnVuY3Rpb24g
b3BhcXVlQ2VpbChhcmd1bWVudCkgeworICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwo
YXJndW1lbnQpICsgMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5vSW5saW5lKG9wYXF1
ZUNlaWwpOworICAgICAgICAgICAgbm9PU1JFeGl0RnV6emluZyhvcGFxdWVDZWlsKTsKKworICAg
ICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICAgICAgICAg
IGlmICghaXNJZGVudGljYWwob3BhcXVlQ2VpbCgke3Rlc3RDYXNlSW5wdXRbMF19KSwgJHt0ZXN0
Q2FzZUlucHV0WzFdfSArIDApKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93ICJGYWlsZWQg
dGVzdFNpbmdsZVR5cGVXaXRob3V0TmVnYXRpdmVaZXJvQ2FsbCgpIjsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobnVtYmVyT2ZERkdDb21waWxlcyhv
cGFxdWVDZWlsKSA+IDEpCisgICAgICAgICAgICAgICAgdGhyb3cgIldlIHNob3VsZCBoYXZlIGNv
bXBpbGVkIGEgc2luZ2xlIGNlaWwgZm9yIHRoZSBleHBlY3RlZCB0eXBlLiI7CisgICAgICAgIGAp
OworICAgIH0KK30KK3Rlc3RTaW5nbGVUeXBlV2l0aG91dE5lZ2F0aXZlWmVyb0NhbGwoKTsKKwor
CisvLyBUZXN0IE1hdGguY2VpbCgpIG9uIGNvbnN0YW50cworZnVuY3Rpb24gdGVzdENvbnN0YW50
KCkgeworICAgIGZvciAobGV0IHRlc3RDYXNlSW5wdXQgb2YgdmFsaWRJbnB1dFRlc3RDYXNlcykg
eworICAgICAgICBldmFsKGAKKyAgICAgICAgICAgIGZ1bmN0aW9uIG9wYXF1ZUNlaWxPbkNvbnN0
YW50KCkgeworICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwoJHt0ZXN0Q2FzZUlucHV0
WzBdfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBub0lubGluZShvcGFxdWVDZWlsT25D
b25zdGFudCk7CisgICAgICAgICAgICBub09TUkV4aXRGdXp6aW5nKG9wYXF1ZUNlaWxPbkNvbnN0
YW50KTsKKworICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAg
ICAgICAgICAgICAgIGlmICghaXNJZGVudGljYWwob3BhcXVlQ2VpbE9uQ29uc3RhbnQoKSwgJHt0
ZXN0Q2FzZUlucHV0WzFdfSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0
ZXN0Q29uc3RhbnQoKSI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVlQ2VpbE9uQ29uc3RhbnQpID4gMSkK
KyAgICAgICAgICAgICAgICB0aHJvdyAiV2Ugc2hvdWxkIGhhdmUgY29tcGlsZWQgYSBzaW5nbGUg
Y2VpbCBmb3IgdGhlIGV4cGVjdGVkIHR5cGUuIjsKKyAgICAgICAgYCk7CisgICAgfQorfQordGVz
dENvbnN0YW50KCk7CisKKworLy8gVmVyaWZ5IHdlIGNhbGwgdmFsdWVPZigpIGV4YWN0bHkgb25j
ZSBwZXIgY2FsbC4KK2Z1bmN0aW9uIG9wYXF1ZUNlaWxGb3JTaWRlRWZmZWN0cyhhcmd1bWVudCkg
eworICAgIHJldHVybiBNYXRoLmNlaWwoYXJndW1lbnQpOworfQorbm9JbmxpbmUob3BhcXVlQ2Vp
bEZvclNpZGVFZmZlY3RzKTsKK25vT1NSRXhpdEZ1enppbmcob3BhcXVlQ2VpbEZvclNpZGVFZmZl
Y3RzKTsKKworZnVuY3Rpb24gdGVzdFNpZGVFZmZlY3QoKSB7CisgICAgbGV0IHRlc3RPYmplY3Qg
PSB7CisgICAgICAgIGNvdW50ZXI6IDAsCisgICAgICAgIHZhbHVlT2Y6IGZ1bmN0aW9uKCkgeyAr
K3RoaXMuY291bnRlcjsgcmV0dXJuIDE2OyB9CisgICAgfTsKKyAgICBsZXQgY2VpbDE2ID0gTWF0
aC5jZWlsKDE2KTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAg
IGlmIChvcGFxdWVDZWlsRm9yU2lkZUVmZmVjdHModGVzdE9iamVjdCkgIT09IGNlaWwxNikKKyAg
ICAgICAgICAgIHRocm93ICJJbmNvcnJlY3QgcmVzdWx0IGluIHRlc3RTaWRlRWZmZWN0KCkiOwor
ICAgIH0KKyAgICBpZiAodGVzdE9iamVjdC5jb3VudGVyICE9PSAxZTQpCisgICAgICAgIHRocm93
ICJGYWlsZWQgdGVzdFNpZGVFZmZlY3QoKSI7CisgICAgaWYgKG51bWJlck9mREZHQ29tcGlsZXMo
b3BhcXVlQ2VpbEZvclNpZGVFZmZlY3RzKSA+IDEpCisgICAgICAgIHRocm93ICJvcGFxdWVDZWls
Rm9yU2lkZUVmZmVjdHMoKSBpcyBwcmVkaWN0YWJsZSwgaXQgc2hvdWxkIG9ubHkgYmUgY29tcGls
ZWQgb25jZS4iOworfQordGVzdFNpZGVFZmZlY3QoKTsKKworCisvLyBWZXJpZnkgY2VpbCgpIGlz
IG5vdCBzdWJqZWN0IHRvIENTRSBpZiB0aGUgYXJndW1lbnQgaGFzIHNpZGUgZWZmZWN0cy4KK2Z1
bmN0aW9uIG9wYXF1ZUNlaWxGb3JDU0UoYXJndW1lbnQpIHsKKyAgICByZXR1cm4gTWF0aC5jZWls
KGFyZ3VtZW50KSArIE1hdGguY2VpbChhcmd1bWVudCkgKyBNYXRoLmNlaWwoYXJndW1lbnQpOwor
fQorbm9JbmxpbmUob3BhcXVlQ2VpbEZvckNTRSk7Citub09TUkV4aXRGdXp6aW5nKG9wYXF1ZUNl
aWxGb3JDU0UpOworCitmdW5jdGlvbiB0ZXN0Q1NFKCkgeworICAgIGxldCB0ZXN0T2JqZWN0ID0g
eworICAgICAgICBjb3VudGVyOiAwLAorICAgICAgICB2YWx1ZU9mOiBmdW5jdGlvbigpIHsgKyt0
aGlzLmNvdW50ZXI7IHJldHVybiAxNjsgfQorICAgIH07CisgICAgbGV0IGNlaWwxNiA9IE1hdGgu
Y2VpbCgxNik7CisgICAgbGV0IHRocmVlQ2VpbDE2ID0gY2VpbDE2ICsgY2VpbDE2ICsgY2VpbDE2
OworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgaWYgKG9wYXF1
ZUNlaWxGb3JDU0UodGVzdE9iamVjdCkgIT09IHRocmVlQ2VpbDE2KQorICAgICAgICAgICAgdGhy
b3cgIkluY29ycmVjdCByZXN1bHQgaW4gdGVzdENTRSgpIjsKKyAgICB9CisgICAgaWYgKHRlc3RP
YmplY3QuY291bnRlciAhPT0gM2U0KQorICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RDU0UoKSI7
CisgICAgaWYgKG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVlQ2VpbEZvckNTRSkgPiAxKQorICAg
ICAgICB0aHJvdyAib3BhcXVlQ2VpbEZvckNTRSgpIGlzIHByZWRpY3RhYmxlLCBpdCBzaG91bGQg
b25seSBiZSBjb21waWxlZCBvbmNlLiI7Cit9Cit0ZXN0Q1NFKCk7CisKKworLy8gVmVyaWZ5IGNl
aWwoKSBpcyBub3Qgc3ViamVjdCB0byBEQ0UgaWYgdGhlIGFyZ3VtZW50IGhhcyBzaWRlIGVmZmVj
dHMuCitmdW5jdGlvbiBvcGFxdWVDZWlsRm9yRENFKGFyZ3VtZW50KSB7CisgICAgTWF0aC5jZWls
KGFyZ3VtZW50KTsKK30KK25vSW5saW5lKG9wYXF1ZUNlaWxGb3JEQ0UpOworbm9PU1JFeGl0RnV6
emluZyhvcGFxdWVDZWlsRm9yRENFKTsKKworZnVuY3Rpb24gdGVzdERDRSgpIHsKKyAgICBsZXQg
dGVzdE9iamVjdCA9IHsKKyAgICAgICAgY291bnRlcjogMCwKKyAgICAgICAgdmFsdWVPZjogZnVu
Y3Rpb24oKSB7ICsrdGhpcy5jb3VudGVyOyByZXR1cm4gMTY7IH0KKyAgICB9OworICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgb3BhcXVlQ2VpbEZvckRDRSh0ZXN0
T2JqZWN0KTsKKyAgICB9CisgICAgaWYgKHRlc3RPYmplY3QuY291bnRlciAhPT0gMWU0KQorICAg
ICAgICB0aHJvdyAiRmFpbGVkIHRlc3REQ0UoKSI7CisgICAgaWYgKG51bWJlck9mREZHQ29tcGls
ZXMob3BhcXVlQ2VpbEZvckRDRSkgPiAxKQorICAgICAgICB0aHJvdyAib3BhcXVlQ2VpbEZvckRD
RSgpIGlzIHByZWRpY3RhYmxlLCBpdCBzaG91bGQgb25seSBiZSBjb21waWxlZCBvbmNlLiI7Cit9
Cit0ZXN0RENFKCk7CisKKworLy8gVGVzdCBleGNlcHRpb25zIGluIHRoZSBhcmd1bWVudC4KK2Z1
bmN0aW9uIHRlc3RFeGNlcHRpb24oKSB7CisgICAgbGV0IGNvdW50ZXIgPSAwOworICAgIGZ1bmN0
aW9uIG9wYXF1ZUNlaWxXaXRoRXhjZXB0aW9uKGFyZ3VtZW50KSB7CisgICAgICAgIGxldCByZXN1
bHQgPSBNYXRoLmNlaWwoYXJndW1lbnQpOworICAgICAgICArK2NvdW50ZXI7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorICAgIG5vSW5saW5lKG9wYXF1ZUNlaWxXaXRoRXhjZXB0aW9u
KTsKKworICAgIGxldCB0ZXN0T2JqZWN0ID0geyB2YWx1ZU9mOiAoKSA9PiB7ICByZXR1cm4gNjQ7
IH0gfTsKKyAgICBsZXQgY2VpbDY0ID0gTWF0aC5jZWlsKDY0KTsKKworICAgIC8vIFdhcm0gdXAg
d2l0aG91dCBleGNlcHRpb24uCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxZTM7ICsraSkgewor
ICAgICAgICBpZiAob3BhcXVlQ2VpbFdpdGhFeGNlcHRpb24odGVzdE9iamVjdCkgIT09IGNlaWw2
NCkKKyAgICAgICAgICAgIHRocm93ICJJbmNvcnJlY3QgcmVzdWx0IGluIG9wYXF1ZUNlaWxXaXRo
RXhjZXB0aW9uKCkiOworICAgIH0KKworICAgIGxldCB0ZXN0VGhyb3dPYmplY3QgPSB7IHZhbHVl
T2Y6ICgpID0+IHsgdGhyb3cgdGVzdE9iamVjdDsgcmV0dXJuIDY0OyB9IH07CisKKyAgICBmb3Ig
KGxldCBpID0gMDsgaSA8IDFlMjsgKytpKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBp
ZiAob3BhcXVlQ2VpbFdpdGhFeGNlcHRpb24odGVzdFRocm93T2JqZWN0KSAhPT0gOCkKKyAgICAg
ICAgICAgICAgICB0aHJvdyAiVGhpcyBjb2RlIHNob3VsZCBub3QgYmUgcmVhY2hlZCEhIjsKKyAg
ICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgaWYgKGUgIT09IHRlc3RPYmplY3QpIHsK
KyAgICAgICAgICAgICAgICB0aHJvdyAiV3Jvbmcgb2JqZWN0IHRocm93biBmcm9tIG9wYXF1ZUNl
aWxXaXRoRXhjZXB0aW9uLiIKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAg
IGlmIChjb3VudGVyICE9PSAxZTMpIHsKKyAgICAgICAgdGhyb3cgIkludmFsaWQgY291bnQgaW4g
dGVzdEV4Y2VwdGlvbigpIjsKKyAgICB9Cit9Cit0ZXN0RXhjZXB0aW9uKCk7CmRpZmYgLS1naXQg
YS9KU1Rlc3RzL3N0cmVzcy9hcml0aC1mbG9vci1vbi12YXJpb3VzLXR5cGVzLmpzIGIvSlNUZXN0
cy9zdHJlc3MvYXJpdGgtZmxvb3Itb24tdmFyaW91cy10eXBlcy5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMmYz
NjBjZGZmYmVmM2JlMmVmMmNiMzZjZjJiZWZiOTA3MzEwZjYwCi0tLSAvZGV2L251bGwKKysrIGIv
SlNUZXN0cy9zdHJlc3MvYXJpdGgtZmxvb3Itb24tdmFyaW91cy10eXBlcy5qcwpAQCAtMCwwICsx
LDI5NSBAQAorInVzZSBzdHJpY3QiOworCitsZXQgdmFsaWRJbnB1dFRlc3RDYXNlcyA9IFsKKyAg
ICAvLyBpbnB1dCBhcyBzdHJpbmcsIGV4cGVjdGVkIHJlc3VsdCBhcyBzdHJpbmcuCisgICAgWyJ1
bmRlZmluZWQiLCAiTmFOIl0sCisgICAgWyJudWxsIiwgIjAiXSwKKyAgICBbIjAiLCAiMCJdLAor
ICAgIFsiLTAuIiwgIi0wIl0sCisgICAgWyIwLjUiLCAiMCJdLAorICAgIFsiLTAuNSIsICItMSJd
LAorICAgIFsiNCIsICI0Il0sCisgICAgWyI0Mi4xIiwgIjQyIl0sCisgICAgWyI0Mi41IiwgIjQy
Il0sCisgICAgWyI0Mi45IiwgIjQyIl0sCisgICAgWyItNDIuMSIsICItNDMiXSwKKyAgICBbIi00
Mi41IiwgIi00MyJdLAorICAgIFsiLTQyLjkiLCAiLTQzIl0sCisgICAgWyJNYXRoLlBJIiwgIjMi
XSwKKyAgICBbIkluZmluaXR5IiwgIkluZmluaXR5Il0sCisgICAgWyItSW5maW5pdHkiLCAiLUlu
ZmluaXR5Il0sCisgICAgWyJOYU4iLCAiTmFOIl0sCisgICAgWyJcIldlYktpdFwiIiwgIk5hTiJd
LAorICAgIFsiXCI0XCIiLCAiNCJdLAorICAgIFsiXCI0Mi41XCIiLCAiNDIiXSwKKyAgICBbInsg
dmFsdWVPZjogKCkgPT4geyByZXR1cm4gNDsgfSB9IiwgIjQiXSwKKyAgICBbInsgdmFsdWVPZjog
KCkgPT4geyByZXR1cm4gMDsgfSB9IiwgIjAiXSwKKyAgICBbInsgdmFsdWVPZjogKCkgPT4geyBy
ZXR1cm4gLTA7IH0gfSIsICItMCJdLAorICAgIFsieyB2YWx1ZU9mOiAoKSA9PiB7IHJldHVybiAw
LjU7IH0gfSIsICIwIl0sCisgICAgWyJ7IHZhbHVlT2Y6ICgpID0+IHsgcmV0dXJuIC0wLjU7IH0g
fSIsICItMSJdLAorICAgIFsieyB2YWx1ZU9mOiAoKSA9PiB7IHJldHVybiBOdW1iZXIuTUlOX1NB
RkVfSU5URUdFUjsgfSB9IiwgIi05MDA3MTk5MjU0NzQwOTkxIl0sCisgICAgWyJ7IHZhbHVlT2Y6
ICgpID0+IHsgcmV0dXJuIE51bWJlci5NQVhfU0FGRV9JTlRFR0VSOyB9IH0iLCAiOTAwNzE5OTI1
NDc0MDk5MSJdLAorICAgIFsieyB2YWx1ZU9mOiAoKSA9PiB7IHJldHVybiAweDgwMDAwMDAwfDA7
IH0gfSIsICItMjE0NzQ4MzY0OCJdLAorICAgIFsieyB2YWx1ZU9mOiAoKSA9PiB7IHJldHVybiAw
eDdmZmZmZmZmfDA7IH0gfSIsICIyMTQ3NDgzNjQ3Il0sCisgICAgWyJ7IHZhbHVlT2Y6ICgpID0+
IHsgcmV0dXJuICgweDgwMDAwMDAwfDApIC0gMC41OyB9IH0iLCAiLTIxNDc0ODM2NDkiXSwKKyAg
ICBbInsgdmFsdWVPZjogKCkgPT4geyByZXR1cm4gKDB4N2ZmZmZmZmZ8MCkgKyAwLjU7IH0gfSIs
ICIyMTQ3NDgzNjQ3Il0sCitdOworCitsZXQgdmFsaWRJbnB1dFR5cGVkVGVzdENhc2VzID0gdmFs
aWRJbnB1dFRlc3RDYXNlcy5tYXAoKGVsZW1lbnQpID0+IHsgcmV0dXJuIFtldmFsKCIoIiArIGVs
ZW1lbnRbMF0gKyAiKSIpLCBldmFsKGVsZW1lbnRbMV0pXSB9KTsKKworZnVuY3Rpb24gaXNJZGVu
dGljYWwocmVzdWx0LCBleHBlY3RlZCkKK3sKKyAgICBpZiAoZXhwZWN0ZWQgPT09IGV4cGVjdGVk
KSB7CisgICAgICAgIGlmIChyZXN1bHQgIT09IGV4cGVjdGVkKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBpZiAoIWV4cGVjdGVkICYmICgxIC8gZXhwZWN0ZWQpICE9PSAoMSAv
IHJlc3VsdCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIHJldHVybiByZXN1bHQgIT09IHJlc3VsdDsKK30KKworCisvLyBUZXN0
IE1hdGguZmxvb3IoKSB3aXRob3V0IGFyZ3VtZW50cy4KK2Z1bmN0aW9uIG9wYXF1ZUZsb29yTm9B
cmd1bWVudCgpIHsKKyAgICByZXR1cm4gTWF0aC5mbG9vcigpOworfQorbm9JbmxpbmUob3BhcXVl
Rmxvb3JOb0FyZ3VtZW50KTsKK25vT1NSRXhpdEZ1enppbmcob3BhcXVlRmxvb3JOb0FyZ3VtZW50
KTsKKworZnVuY3Rpb24gdGVzdE5vQXJndW1lbnQoKSB7CisgICAgZm9yIChsZXQgaSA9IDA7IGkg
PCAxZTQ7ICsraSkgeworICAgICAgICBsZXQgb3V0cHV0ID0gb3BhcXVlRmxvb3JOb0FyZ3VtZW50
KCk7CisgICAgICAgIGlmICghaXNJZGVudGljYWwob3V0cHV0LCBOYU4pKSB7CisgICAgICAgICAg
ICB0aHJvdyAiRmFpbGVkIG9wYXF1ZUZsb29yTm9Bcmd1bWVudCI7CisgICAgICAgIH0KKyAgICB9
CisgICAgaWYgKG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVlRmxvb3JOb0FyZ3VtZW50KSA+IDEp
CisgICAgICAgIHRocm93ICJUaGUgY2FsbCB3aXRob3V0IGFyZ3VtZW50cyBzaG91bGQgbmV2ZXIg
ZXhpdC4iOworfQordGVzdE5vQXJndW1lbnQoKTsKKworCisvLyBUZXN0IE1hdGguZmxvb3IoKSB3
aXRoIGEgdmVyeSBwb2x5bW9ycGhpYyBpbnB1dC4gQWxsIHRlc3QgY2FzZXMgYXJlIHNlZW4gYXQg
ZWFjaCBpdGVyYXRpb24uCitmdW5jdGlvbiBvcGFxdWVBbGxUeXBlc0Zsb29yKGFyZ3VtZW50KSB7
CisgICAgcmV0dXJuIE1hdGguZmxvb3IoYXJndW1lbnQpOworfQorbm9JbmxpbmUob3BhcXVlQWxs
VHlwZXNGbG9vcik7Citub09TUkV4aXRGdXp6aW5nKG9wYXF1ZUFsbFR5cGVzRmxvb3IpOworCitm
dW5jdGlvbiB0ZXN0QWxsVHlwZXNDYWxsKCkgeworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMWUz
OyArK2kpIHsKKyAgICAgICAgZm9yIChsZXQgdGVzdENhc2VJbnB1dCBvZiB2YWxpZElucHV0VHlw
ZWRUZXN0Q2FzZXMpIHsKKyAgICAgICAgICAgIGxldCBvdXRwdXQgPSBvcGFxdWVBbGxUeXBlc0Zs
b29yKHRlc3RDYXNlSW5wdXRbMF0pOworICAgICAgICAgICAgaWYgKCFpc0lkZW50aWNhbChvdXRw
dXQsIHRlc3RDYXNlSW5wdXRbMV0pKQorICAgICAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVz
dEFsbFR5cGVzQ2FsbCBmb3IgaW5wdXQgIiArIHRlc3RDYXNlSW5wdXRbMF0gKyAiIGV4cGVjdGVk
ICIgKyB0ZXN0Q2FzZUlucHV0WzFdICsgIiBnb3QgIiArIG91dHB1dDsKKyAgICAgICAgfQorICAg
IH0KKyAgICBpZiAobnVtYmVyT2ZERkdDb21waWxlcyhvcGFxdWVBbGxUeXBlc0Zsb29yKSA+IDMp
CisgICAgICAgIHRocm93ICJXZSBzaG91bGQgaGF2ZSBkZXRlY3RlZCBmbG9vcigpIHdhcyBwb2x5
bW9ycGhpYyBhbmQgZ2VuZXJhdGVkIGEgZ2VuZXJpYyB2ZXJzaW9uLiI7Cit9Cit0ZXN0QWxsVHlw
ZXNDYWxsKCk7CisKKworLy8gUG9seW1vcnBoaWMgaW5wdXQgYnV0IG5lZ2F0aXZlIHplcm8gaXMg
bm90IG9ic2VydmFibGUuCitmdW5jdGlvbiBvcGFxdWVBbGxUeXBlc0Zsb29yV2l0aG91dE5lZ2F0
aXZlWmVybyhhcmd1bWVudCkgeworICAgIHJldHVybiBNYXRoLmZsb29yKGFyZ3VtZW50KSArIDA7
Cit9Citub0lubGluZShvcGFxdWVBbGxUeXBlc0Zsb29yV2l0aG91dE5lZ2F0aXZlWmVybyk7Citu
b09TUkV4aXRGdXp6aW5nKG9wYXF1ZUFsbFR5cGVzRmxvb3JXaXRob3V0TmVnYXRpdmVaZXJvKTsK
KworZnVuY3Rpb24gdGVzdEFsbFR5cGVzV2l0aG91dE5lZ2F0aXZlWmVyb0NhbGwoKSB7CisgICAg
Zm9yIChsZXQgaSA9IDA7IGkgPCAxZTM7ICsraSkgeworICAgICAgICBmb3IgKGxldCB0ZXN0Q2Fz
ZUlucHV0IG9mIHZhbGlkSW5wdXRUeXBlZFRlc3RDYXNlcykgeworICAgICAgICAgICAgbGV0IG91
dHB1dCA9IG9wYXF1ZUFsbFR5cGVzRmxvb3JXaXRob3V0TmVnYXRpdmVaZXJvKHRlc3RDYXNlSW5w
dXRbMF0pOworICAgICAgICAgICAgaWYgKCFpc0lkZW50aWNhbChvdXRwdXQsIHRlc3RDYXNlSW5w
dXRbMV0gKyAwKSkKKyAgICAgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RBbGxUeXBlc1dp
dGhvdXROZWdhdGl2ZVplcm9DYWxsIGZvciBpbnB1dCAiICsgdGVzdENhc2VJbnB1dFswXSArICIg
ZXhwZWN0ZWQgIiArIHRlc3RDYXNlSW5wdXRbMV0gKyAiIGdvdCAiICsgb3V0cHV0OworICAgICAg
ICB9CisgICAgfQorICAgIGlmIChudW1iZXJPZkRGR0NvbXBpbGVzKG9wYXF1ZUFsbFR5cGVzRmxv
b3IpID4gMykKKyAgICAgICAgdGhyb3cgIldlIHNob3VsZCBoYXZlIGRldGVjdGVkIGZsb29yKCkg
d2FzIHBvbHltb3JwaGljIGFuZCBnZW5lcmF0ZWQgYSBnZW5lcmljIHZlcnNpb24uIjsKK30KK3Rl
c3RBbGxUeXBlc1dpdGhvdXROZWdhdGl2ZVplcm9DYWxsKCk7CisKKworLy8gVGVzdCBNYXRoLmZs
b29yKCkgb24gYSBjb21wbGV0ZWx5IHR5cGVkIGlucHV0LiBFdmVyeSBjYWxsIHNlZSBvbmx5IG9u
ZSB0eXBlLgorZnVuY3Rpb24gdGVzdFNpbmdsZVR5cGVDYWxsKCkgeworICAgIGZvciAobGV0IHRl
c3RDYXNlSW5wdXQgb2YgdmFsaWRJbnB1dFRlc3RDYXNlcykgeworICAgICAgICBldmFsKGAKKyAg
ICAgICAgICAgIGZ1bmN0aW9uIG9wYXF1ZUZsb29yKGFyZ3VtZW50KSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIE1hdGguZmxvb3IoYXJndW1lbnQpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgbm9JbmxpbmUob3BhcXVlRmxvb3IpOworICAgICAgICAgICAgbm9PU1JFeGl0RnV6emluZyhv
cGFxdWVGbG9vcik7CisKKyAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMWU0OyArK2kp
IHsKKyAgICAgICAgICAgICAgICBpZiAoIWlzSWRlbnRpY2FsKG9wYXF1ZUZsb29yKCR7dGVzdENh
c2VJbnB1dFswXX0pLCAke3Rlc3RDYXNlSW5wdXRbMV19KSkgeworICAgICAgICAgICAgICAgICAg
ICB0aHJvdyAiRmFpbGVkIHRlc3RTaW5nbGVUeXBlQ2FsbCgpIjsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobnVtYmVyT2ZERkdDb21waWxlcyhvcGFx
dWVGbG9vcikgPiAxKQorICAgICAgICAgICAgICAgIHRocm93ICJXZSBzaG91bGQgaGF2ZSBjb21w
aWxlZCBhIHNpbmdsZSBmbG9vciBmb3IgdGhlIGV4cGVjdGVkIHR5cGUuIjsKKyAgICAgICAgYCk7
CisgICAgfQorfQordGVzdFNpbmdsZVR5cGVDYWxsKCk7CisKKworLy8gVGVzdCBNYXRoLmZsb29y
KCkgb24gYSBjb21wbGV0ZWx5IHR5cGVkIGlucHV0LCBidXQgd2l0aG91dCBuZWdhdGl2ZSB6ZXJv
LgorZnVuY3Rpb24gdGVzdFNpbmdsZVR5cGVXaXRob3V0TmVnYXRpdmVaZXJvQ2FsbCgpIHsKKyAg
ICBmb3IgKGxldCB0ZXN0Q2FzZUlucHV0IG9mIHZhbGlkSW5wdXRUZXN0Q2FzZXMpIHsKKyAgICAg
ICAgZXZhbChgCisgICAgICAgICAgICBmdW5jdGlvbiBvcGFxdWVGbG9vcihhcmd1bWVudCkgewor
ICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKGFyZ3VtZW50KSArIDA7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBub0lubGluZShvcGFxdWVGbG9vcik7CisgICAgICAgICAgICBu
b09TUkV4aXRGdXp6aW5nKG9wYXF1ZUZsb29yKTsKKworICAgICAgICAgICAgZm9yIChsZXQgaSA9
IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICAgICAgICAgIGlmICghaXNJZGVudGljYWwob3Bh
cXVlRmxvb3IoJHt0ZXN0Q2FzZUlucHV0WzBdfSksICR7dGVzdENhc2VJbnB1dFsxXX0gKyAwKSkg
eworICAgICAgICAgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RTaW5nbGVUeXBlV2l0aG91
dE5lZ2F0aXZlWmVyb0NhbGwoKSI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVlRmxvb3IpID4gMSkKKyAg
ICAgICAgICAgICAgICB0aHJvdyAiV2Ugc2hvdWxkIGhhdmUgY29tcGlsZWQgYSBzaW5nbGUgZmxv
b3IgZm9yIHRoZSBleHBlY3RlZCB0eXBlLiI7CisgICAgICAgIGApOworICAgIH0KK30KK3Rlc3RT
aW5nbGVUeXBlV2l0aG91dE5lZ2F0aXZlWmVyb0NhbGwoKTsKKworCisvLyBUZXN0IE1hdGguZmxv
b3IoKSBvbiBjb25zdGFudHMKK2Z1bmN0aW9uIHRlc3RDb25zdGFudCgpIHsKKyAgICBmb3IgKGxl
dCB0ZXN0Q2FzZUlucHV0IG9mIHZhbGlkSW5wdXRUZXN0Q2FzZXMpIHsKKyAgICAgICAgZXZhbChg
CisgICAgICAgICAgICBmdW5jdGlvbiBvcGFxdWVGbG9vck9uQ29uc3RhbnQoKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoJHt0ZXN0Q2FzZUlucHV0WzBdfSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBub0lubGluZShvcGFxdWVGbG9vck9uQ29uc3RhbnQpOworICAg
ICAgICAgICAgbm9PU1JFeGl0RnV6emluZyhvcGFxdWVGbG9vck9uQ29uc3RhbnQpOworCisgICAg
ICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgICAgICAgICAg
aWYgKCFpc0lkZW50aWNhbChvcGFxdWVGbG9vck9uQ29uc3RhbnQoKSwgJHt0ZXN0Q2FzZUlucHV0
WzFdfSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0Q29uc3RhbnQo
KSI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG51
bWJlck9mREZHQ29tcGlsZXMob3BhcXVlRmxvb3JPbkNvbnN0YW50KSA+IDEpCisgICAgICAgICAg
ICAgICAgdGhyb3cgIldlIHNob3VsZCBoYXZlIGNvbXBpbGVkIGEgc2luZ2xlIGZsb29yIGZvciB0
aGUgZXhwZWN0ZWQgdHlwZS4iOworICAgICAgICBgKTsKKyAgICB9Cit9Cit0ZXN0Q29uc3RhbnQo
KTsKKworCisvLyBWZXJpZnkgd2UgY2FsbCB2YWx1ZU9mKCkgZXhhY3RseSBvbmNlIHBlciBjYWxs
LgorZnVuY3Rpb24gb3BhcXVlRmxvb3JGb3JTaWRlRWZmZWN0cyhhcmd1bWVudCkgeworICAgIHJl
dHVybiBNYXRoLmZsb29yKGFyZ3VtZW50KTsKK30KK25vSW5saW5lKG9wYXF1ZUZsb29yRm9yU2lk
ZUVmZmVjdHMpOworbm9PU1JFeGl0RnV6emluZyhvcGFxdWVGbG9vckZvclNpZGVFZmZlY3RzKTsK
KworZnVuY3Rpb24gdGVzdFNpZGVFZmZlY3QoKSB7CisgICAgbGV0IHRlc3RPYmplY3QgPSB7Cisg
ICAgICAgIGNvdW50ZXI6IDAsCisgICAgICAgIHZhbHVlT2Y6IGZ1bmN0aW9uKCkgeyArK3RoaXMu
Y291bnRlcjsgcmV0dXJuIDE2OyB9CisgICAgfTsKKyAgICBsZXQgZmxvb3IxNiA9IE1hdGguZmxv
b3IoMTYpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgaWYg
KG9wYXF1ZUZsb29yRm9yU2lkZUVmZmVjdHModGVzdE9iamVjdCkgIT09IGZsb29yMTYpCisgICAg
ICAgICAgICB0aHJvdyAiSW5jb3JyZWN0IHJlc3VsdCBpbiB0ZXN0U2lkZUVmZmVjdCgpIjsKKyAg
ICB9CisgICAgaWYgKHRlc3RPYmplY3QuY291bnRlciAhPT0gMWU0KQorICAgICAgICB0aHJvdyAi
RmFpbGVkIHRlc3RTaWRlRWZmZWN0KCkiOworICAgIGlmIChudW1iZXJPZkRGR0NvbXBpbGVzKG9w
YXF1ZUZsb29yRm9yU2lkZUVmZmVjdHMpID4gMSkKKyAgICAgICAgdGhyb3cgIm9wYXF1ZUZsb29y
Rm9yU2lkZUVmZmVjdHMoKSBpcyBwcmVkaWN0YWJsZSwgaXQgc2hvdWxkIG9ubHkgYmUgY29tcGls
ZWQgb25jZS4iOworfQordGVzdFNpZGVFZmZlY3QoKTsKKworCisvLyBWZXJpZnkgZmxvb3IoKSBp
cyBub3Qgc3ViamVjdCB0byBDU0UgaWYgdGhlIGFyZ3VtZW50IGhhcyBzaWRlIGVmZmVjdHMuCitm
dW5jdGlvbiBvcGFxdWVGbG9vckZvckNTRShhcmd1bWVudCkgeworICAgIHJldHVybiBNYXRoLmZs
b29yKGFyZ3VtZW50KSArIE1hdGguZmxvb3IoYXJndW1lbnQpICsgTWF0aC5mbG9vcihhcmd1bWVu
dCk7Cit9Citub0lubGluZShvcGFxdWVGbG9vckZvckNTRSk7Citub09TUkV4aXRGdXp6aW5nKG9w
YXF1ZUZsb29yRm9yQ1NFKTsKKworZnVuY3Rpb24gdGVzdENTRSgpIHsKKyAgICBsZXQgdGVzdE9i
amVjdCA9IHsKKyAgICAgICAgY291bnRlcjogMCwKKyAgICAgICAgdmFsdWVPZjogZnVuY3Rpb24o
KSB7ICsrdGhpcy5jb3VudGVyOyByZXR1cm4gMTY7IH0KKyAgICB9OworICAgIGxldCBmbG9vcjE2
ID0gTWF0aC5mbG9vcigxNik7CisgICAgbGV0IHRocmVlRmxvb3IxNiA9IGZsb29yMTYgKyBmbG9v
cjE2ICsgZmxvb3IxNjsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAg
ICAgIGlmIChvcGFxdWVGbG9vckZvckNTRSh0ZXN0T2JqZWN0KSAhPT0gdGhyZWVGbG9vcjE2KQor
ICAgICAgICAgICAgdGhyb3cgIkluY29ycmVjdCByZXN1bHQgaW4gdGVzdENTRSgpIjsKKyAgICB9
CisgICAgaWYgKHRlc3RPYmplY3QuY291bnRlciAhPT0gM2U0KQorICAgICAgICB0aHJvdyAiRmFp
bGVkIHRlc3RDU0UoKSI7CisgICAgaWYgKG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVlRmxvb3JG
b3JDU0UpID4gMSkKKyAgICAgICAgdGhyb3cgIm9wYXF1ZUZsb29yRm9yQ1NFKCkgaXMgcHJlZGlj
dGFibGUsIGl0IHNob3VsZCBvbmx5IGJlIGNvbXBpbGVkIG9uY2UuIjsKK30KK3Rlc3RDU0UoKTsK
KworCisvLyBWZXJpZnkgZmxvb3IoKSBpcyBub3Qgc3ViamVjdCB0byBEQ0UgaWYgdGhlIGFyZ3Vt
ZW50IGhhcyBzaWRlIGVmZmVjdHMuCitmdW5jdGlvbiBvcGFxdWVGbG9vckZvckRDRShhcmd1bWVu
dCkgeworICAgIE1hdGguZmxvb3IoYXJndW1lbnQpOworfQorbm9JbmxpbmUob3BhcXVlRmxvb3JG
b3JEQ0UpOworbm9PU1JFeGl0RnV6emluZyhvcGFxdWVGbG9vckZvckRDRSk7CisKK2Z1bmN0aW9u
IHRlc3REQ0UoKSB7CisgICAgbGV0IHRlc3RPYmplY3QgPSB7CisgICAgICAgIGNvdW50ZXI6IDAs
CisgICAgICAgIHZhbHVlT2Y6IGZ1bmN0aW9uKCkgeyArK3RoaXMuY291bnRlcjsgcmV0dXJuIDE2
OyB9CisgICAgfTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAg
IG9wYXF1ZUZsb29yRm9yRENFKHRlc3RPYmplY3QpOworICAgIH0KKyAgICBpZiAodGVzdE9iamVj
dC5jb3VudGVyICE9PSAxZTQpCisgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdERDRSgpIjsKKyAg
ICBpZiAobnVtYmVyT2ZERkdDb21waWxlcyhvcGFxdWVGbG9vckZvckRDRSkgPiAxKQorICAgICAg
ICB0aHJvdyAib3BhcXVlRmxvb3JGb3JEQ0UoKSBpcyBwcmVkaWN0YWJsZSwgaXQgc2hvdWxkIG9u
bHkgYmUgY29tcGlsZWQgb25jZS4iOworfQordGVzdERDRSgpOworCisKKy8vIFRlc3QgZXhjZXB0
aW9ucyBpbiB0aGUgYXJndW1lbnQuCitmdW5jdGlvbiB0ZXN0RXhjZXB0aW9uKCkgeworICAgIGxl
dCBjb3VudGVyID0gMDsKKyAgICBmdW5jdGlvbiBvcGFxdWVGbG9vcldpdGhFeGNlcHRpb24oYXJn
dW1lbnQpIHsKKyAgICAgICAgbGV0IHJlc3VsdCA9IE1hdGguZmxvb3IoYXJndW1lbnQpOworICAg
ICAgICArK2NvdW50ZXI7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIG5vSW5s
aW5lKG9wYXF1ZUZsb29yV2l0aEV4Y2VwdGlvbik7CisKKyAgICBsZXQgdGVzdE9iamVjdCA9IHsg
dmFsdWVPZjogKCkgPT4geyAgcmV0dXJuIDY0OyB9IH07CisgICAgbGV0IGZsb29yNjQgPSBNYXRo
LmZsb29yKDY0KTsKKworICAgIC8vIFdhcm0gdXAgd2l0aG91dCBleGNlcHRpb24uCisgICAgZm9y
IChsZXQgaSA9IDA7IGkgPCAxZTM7ICsraSkgeworICAgICAgICBpZiAob3BhcXVlRmxvb3JXaXRo
RXhjZXB0aW9uKHRlc3RPYmplY3QpICE9PSBmbG9vcjY0KQorICAgICAgICAgICAgdGhyb3cgIklu
Y29ycmVjdCByZXN1bHQgaW4gb3BhcXVlRmxvb3JXaXRoRXhjZXB0aW9uKCkiOworICAgIH0KKwor
ICAgIGxldCB0ZXN0VGhyb3dPYmplY3QgPSB7IHZhbHVlT2Y6ICgpID0+IHsgdGhyb3cgdGVzdE9i
amVjdDsgcmV0dXJuIDY0OyB9IH07CisKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDFlMjsgKytp
KSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAob3BhcXVlRmxvb3JXaXRoRXhjZXB0
aW9uKHRlc3RUaHJvd09iamVjdCkgIT09IDgpCisgICAgICAgICAgICAgICAgdGhyb3cgIlRoaXMg
Y29kZSBzaG91bGQgbm90IGJlIHJlYWNoZWQhISI7CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAg
ICAgICAgICAgIGlmIChlICE9PSB0ZXN0T2JqZWN0KSB7CisgICAgICAgICAgICAgICAgdGhyb3cg
Ildyb25nIG9iamVjdCB0aHJvd24gZnJvbSBvcGFxdWVGbG9vcldpdGhFeGNlcHRpb24uIgorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGNvdW50ZXIgIT09IDFlMykg
eworICAgICAgICB0aHJvdyAiSW52YWxpZCBjb3VudCBpbiB0ZXN0RXhjZXB0aW9uKCkiOworICAg
IH0KK30KK3Rlc3RFeGNlcHRpb24oKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2FyaXRo
LXJvdW5kLW9uLXZhcmlvdXMtdHlwZXMuanMgYi9KU1Rlc3RzL3N0cmVzcy9hcml0aC1yb3VuZC1v
bi12YXJpb3VzLXR5cGVzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM3MTkyMWIzNjM3NjJiYmQyOGFiODUxYWMz
NTAxMTA3NTI0NjhlNGEKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9hcml0aC1y
b3VuZC1vbi12YXJpb3VzLXR5cGVzLmpzCkBAIC0wLDAgKzEsMjk1IEBACisidXNlIHN0cmljdCI7
CisKK2xldCB2YWxpZElucHV0VGVzdENhc2VzID0gWworICAgIC8vIGlucHV0IGFzIHN0cmluZywg
ZXhwZWN0ZWQgcmVzdWx0IGFzIHN0cmluZy4KKyAgICBbInVuZGVmaW5lZCIsICJOYU4iXSwKKyAg
ICBbIm51bGwiLCAiMCJdLAorICAgIFsiMCIsICIwIl0sCisgICAgWyItMC4iLCAiLTAiXSwKKyAg
ICBbIjAuNSIsICIxIl0sCisgICAgWyItMC41IiwgIi0wIl0sCisgICAgWyI0IiwgIjQiXSwKKyAg
ICBbIjQyLjEiLCAiNDIiXSwKKyAgICBbIjQyLjUiLCAiNDMiXSwKKyAgICBbIjQyLjkiLCAiNDMi
XSwKKyAgICBbIi00Mi4xIiwgIi00MiJdLAorICAgIFsiLTQyLjUiLCAiLTQyIl0sCisgICAgWyIt
NDIuOSIsICItNDMiXSwKKyAgICBbIk1hdGguUEkiLCAiMyJdLAorICAgIFsiSW5maW5pdHkiLCAi
SW5maW5pdHkiXSwKKyAgICBbIi1JbmZpbml0eSIsICItSW5maW5pdHkiXSwKKyAgICBbIk5hTiIs
ICJOYU4iXSwKKyAgICBbIlwiV2ViS2l0XCIiLCAiTmFOIl0sCisgICAgWyJcIjRcIiIsICI0Il0s
CisgICAgWyJcIjQyLjVcIiIsICI0MyJdLAorICAgIFsieyB2YWx1ZU9mOiAoKSA9PiB7IHJldHVy
biA0OyB9IH0iLCAiNCJdLAorICAgIFsieyB2YWx1ZU9mOiAoKSA9PiB7IHJldHVybiAwOyB9IH0i
LCAiMCJdLAorICAgIFsieyB2YWx1ZU9mOiAoKSA9PiB7IHJldHVybiAtMDsgfSB9IiwgIi0wIl0s
CisgICAgWyJ7IHZhbHVlT2Y6ICgpID0+IHsgcmV0dXJuIDAuNTsgfSB9IiwgIjEiXSwKKyAgICBb
InsgdmFsdWVPZjogKCkgPT4geyByZXR1cm4gLTAuNTsgfSB9IiwgIi0wIl0sCisgICAgWyJ7IHZh
bHVlT2Y6ICgpID0+IHsgcmV0dXJuIE51bWJlci5NSU5fU0FGRV9JTlRFR0VSOyB9IH0iLCAiLTkw
MDcxOTkyNTQ3NDA5OTEiXSwKKyAgICBbInsgdmFsdWVPZjogKCkgPT4geyByZXR1cm4gTnVtYmVy
Lk1BWF9TQUZFX0lOVEVHRVI7IH0gfSIsICI5MDA3MTk5MjU0NzQwOTkxIl0sCisgICAgWyJ7IHZh
bHVlT2Y6ICgpID0+IHsgcmV0dXJuIDB4ODAwMDAwMDB8MDsgfSB9IiwgIi0yMTQ3NDgzNjQ4Il0s
CisgICAgWyJ7IHZhbHVlT2Y6ICgpID0+IHsgcmV0dXJuIDB4N2ZmZmZmZmZ8MDsgfSB9IiwgIjIx
NDc0ODM2NDciXSwKKyAgICBbInsgdmFsdWVPZjogKCkgPT4geyByZXR1cm4gKDB4ODAwMDAwMDB8
MCkgLSAwLjU7IH0gfSIsICItMjE0NzQ4MzY0OCJdLAorICAgIFsieyB2YWx1ZU9mOiAoKSA9PiB7
IHJldHVybiAoMHg3ZmZmZmZmZnwwKSArIDAuNTsgfSB9IiwgIjIxNDc0ODM2NDgiXSwKK107CisK
K2xldCB2YWxpZElucHV0VHlwZWRUZXN0Q2FzZXMgPSB2YWxpZElucHV0VGVzdENhc2VzLm1hcCgo
ZWxlbWVudCkgPT4geyByZXR1cm4gW2V2YWwoIigiICsgZWxlbWVudFswXSArICIpIiksIGV2YWwo
ZWxlbWVudFsxXSldIH0pOworCitmdW5jdGlvbiBpc0lkZW50aWNhbChyZXN1bHQsIGV4cGVjdGVk
KQoreworICAgIGlmIChleHBlY3RlZCA9PT0gZXhwZWN0ZWQpIHsKKyAgICAgICAgaWYgKHJlc3Vs
dCAhPT0gZXhwZWN0ZWQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICgh
ZXhwZWN0ZWQgJiYgKDEgLyBleHBlY3RlZCkgIT09ICgxIC8gcmVzdWx0KSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJu
IHJlc3VsdCAhPT0gcmVzdWx0OworfQorCisKKy8vIFRlc3QgTWF0aC5yb3VuZCgpIHdpdGhvdXQg
YXJndW1lbnRzLgorZnVuY3Rpb24gb3BhcXVlUm91bmROb0FyZ3VtZW50KCkgeworICAgIHJldHVy
biBNYXRoLnJvdW5kKCk7Cit9Citub0lubGluZShvcGFxdWVSb3VuZE5vQXJndW1lbnQpOworbm9P
U1JFeGl0RnV6emluZyhvcGFxdWVSb3VuZE5vQXJndW1lbnQpOworCitmdW5jdGlvbiB0ZXN0Tm9B
cmd1bWVudCgpIHsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAg
IGxldCBvdXRwdXQgPSBvcGFxdWVSb3VuZE5vQXJndW1lbnQoKTsKKyAgICAgICAgaWYgKCFpc0lk
ZW50aWNhbChvdXRwdXQsIE5hTikpIHsKKyAgICAgICAgICAgIHRocm93ICJGYWlsZWQgb3BhcXVl
Um91bmROb0FyZ3VtZW50IjsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobnVtYmVyT2ZERkdD
b21waWxlcyhvcGFxdWVSb3VuZE5vQXJndW1lbnQpID4gMSkKKyAgICAgICAgdGhyb3cgIlRoZSBj
YWxsIHdpdGhvdXQgYXJndW1lbnRzIHNob3VsZCBuZXZlciBleGl0LiI7Cit9Cit0ZXN0Tm9Bcmd1
bWVudCgpOworCisKKy8vIFRlc3QgTWF0aC5yb3VuZCgpIHdpdGggYSB2ZXJ5IHBvbHltb3JwaGlj
IGlucHV0LiBBbGwgdGVzdCBjYXNlcyBhcmUgc2VlbiBhdCBlYWNoIGl0ZXJhdGlvbi4KK2Z1bmN0
aW9uIG9wYXF1ZUFsbFR5cGVzUm91bmQoYXJndW1lbnQpIHsKKyAgICByZXR1cm4gTWF0aC5yb3Vu
ZChhcmd1bWVudCk7Cit9Citub0lubGluZShvcGFxdWVBbGxUeXBlc1JvdW5kKTsKK25vT1NSRXhp
dEZ1enppbmcob3BhcXVlQWxsVHlwZXNSb3VuZCk7CisKK2Z1bmN0aW9uIHRlc3RBbGxUeXBlc0Nh
bGwoKSB7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxZTM7ICsraSkgeworICAgICAgICBmb3Ig
KGxldCB0ZXN0Q2FzZUlucHV0IG9mIHZhbGlkSW5wdXRUeXBlZFRlc3RDYXNlcykgeworICAgICAg
ICAgICAgbGV0IG91dHB1dCA9IG9wYXF1ZUFsbFR5cGVzUm91bmQodGVzdENhc2VJbnB1dFswXSk7
CisgICAgICAgICAgICBpZiAoIWlzSWRlbnRpY2FsKG91dHB1dCwgdGVzdENhc2VJbnB1dFsxXSkp
CisgICAgICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0QWxsVHlwZXNDYWxsIGZvciBpbnB1
dCAiICsgdGVzdENhc2VJbnB1dFswXSArICIgZXhwZWN0ZWQgIiArIHRlc3RDYXNlSW5wdXRbMV0g
KyAiIGdvdCAiICsgb3V0cHV0OworICAgICAgICB9CisgICAgfQorICAgIGlmIChudW1iZXJPZkRG
R0NvbXBpbGVzKG9wYXF1ZUFsbFR5cGVzUm91bmQpID4gMykKKyAgICAgICAgdGhyb3cgIldlIHNo
b3VsZCBoYXZlIGRldGVjdGVkIHJvdW5kKCkgd2FzIHBvbHltb3JwaGljIGFuZCBnZW5lcmF0ZWQg
YSBnZW5lcmljIHZlcnNpb24uIjsKK30KK3Rlc3RBbGxUeXBlc0NhbGwoKTsKKworCisvLyBQb2x5
bW9ycGhpYyBpbnB1dCBidXQgbmVnYXRpdmUgemVybyBpcyBub3Qgb2JzZXJ2YWJsZS4KK2Z1bmN0
aW9uIG9wYXF1ZUFsbFR5cGVzUm91bmRXaXRob3V0TmVnYXRpdmVaZXJvKGFyZ3VtZW50KSB7Cisg
ICAgcmV0dXJuIE1hdGgucm91bmQoYXJndW1lbnQpICsgMDsKK30KK25vSW5saW5lKG9wYXF1ZUFs
bFR5cGVzUm91bmRXaXRob3V0TmVnYXRpdmVaZXJvKTsKK25vT1NSRXhpdEZ1enppbmcob3BhcXVl
QWxsVHlwZXNSb3VuZFdpdGhvdXROZWdhdGl2ZVplcm8pOworCitmdW5jdGlvbiB0ZXN0QWxsVHlw
ZXNXaXRob3V0TmVnYXRpdmVaZXJvQ2FsbCgpIHsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDFl
MzsgKytpKSB7CisgICAgICAgIGZvciAobGV0IHRlc3RDYXNlSW5wdXQgb2YgdmFsaWRJbnB1dFR5
cGVkVGVzdENhc2VzKSB7CisgICAgICAgICAgICBsZXQgb3V0cHV0ID0gb3BhcXVlQWxsVHlwZXNS
b3VuZFdpdGhvdXROZWdhdGl2ZVplcm8odGVzdENhc2VJbnB1dFswXSk7CisgICAgICAgICAgICBp
ZiAoIWlzSWRlbnRpY2FsKG91dHB1dCwgdGVzdENhc2VJbnB1dFsxXSArIDApKQorICAgICAgICAg
ICAgICAgIHRocm93ICJGYWlsZWQgdGVzdEFsbFR5cGVzV2l0aG91dE5lZ2F0aXZlWmVyb0NhbGwg
Zm9yIGlucHV0ICIgKyB0ZXN0Q2FzZUlucHV0WzBdICsgIiBleHBlY3RlZCAiICsgdGVzdENhc2VJ
bnB1dFsxXSArICIgZ290ICIgKyBvdXRwdXQ7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG51
bWJlck9mREZHQ29tcGlsZXMob3BhcXVlQWxsVHlwZXNSb3VuZCkgPiAzKQorICAgICAgICB0aHJv
dyAiV2Ugc2hvdWxkIGhhdmUgZGV0ZWN0ZWQgcm91bmQoKSB3YXMgcG9seW1vcnBoaWMgYW5kIGdl
bmVyYXRlZCBhIGdlbmVyaWMgdmVyc2lvbi4iOworfQordGVzdEFsbFR5cGVzV2l0aG91dE5lZ2F0
aXZlWmVyb0NhbGwoKTsKKworCisvLyBUZXN0IE1hdGgucm91bmQoKSBvbiBhIGNvbXBsZXRlbHkg
dHlwZWQgaW5wdXQuIEV2ZXJ5IGNhbGwgc2VlIG9ubHkgb25lIHR5cGUuCitmdW5jdGlvbiB0ZXN0
U2luZ2xlVHlwZUNhbGwoKSB7CisgICAgZm9yIChsZXQgdGVzdENhc2VJbnB1dCBvZiB2YWxpZElu
cHV0VGVzdENhc2VzKSB7CisgICAgICAgIGV2YWwoYAorICAgICAgICAgICAgZnVuY3Rpb24gb3Bh
cXVlUm91bmQoYXJndW1lbnQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChh
cmd1bWVudCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBub0lubGluZShvcGFxdWVSb3Vu
ZCk7CisgICAgICAgICAgICBub09TUkV4aXRGdXp6aW5nKG9wYXF1ZVJvdW5kKTsKKworICAgICAg
ICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICAgICAgICAgIGlm
ICghaXNJZGVudGljYWwob3BhcXVlUm91bmQoJHt0ZXN0Q2FzZUlucHV0WzBdfSksICR7dGVzdENh
c2VJbnB1dFsxXX0pKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdFNp
bmdsZVR5cGVDYWxsKCkiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChudW1iZXJPZkRGR0NvbXBpbGVzKG9wYXF1ZVJvdW5kKSA+IDEpCisgICAgICAg
ICAgICAgICAgdGhyb3cgIldlIHNob3VsZCBoYXZlIGNvbXBpbGVkIGEgc2luZ2xlIHJvdW5kIGZv
ciB0aGUgZXhwZWN0ZWQgdHlwZS4iOworICAgICAgICBgKTsKKyAgICB9Cit9Cit0ZXN0U2luZ2xl
VHlwZUNhbGwoKTsKKworCisvLyBUZXN0IE1hdGgucm91bmQoKSBvbiBhIGNvbXBsZXRlbHkgdHlw
ZWQgaW5wdXQsIGJ1dCB3aXRob3V0IG5lZ2F0aXZlIHplcm8uCitmdW5jdGlvbiB0ZXN0U2luZ2xl
VHlwZVdpdGhvdXROZWdhdGl2ZVplcm9DYWxsKCkgeworICAgIGZvciAobGV0IHRlc3RDYXNlSW5w
dXQgb2YgdmFsaWRJbnB1dFRlc3RDYXNlcykgeworICAgICAgICBldmFsKGAKKyAgICAgICAgICAg
IGZ1bmN0aW9uIG9wYXF1ZVJvdW5kKGFyZ3VtZW50KSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IE1hdGgucm91bmQoYXJndW1lbnQpICsgMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5v
SW5saW5lKG9wYXF1ZVJvdW5kKTsKKyAgICAgICAgICAgIG5vT1NSRXhpdEZ1enppbmcob3BhcXVl
Um91bmQpOworCisgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDFlNDsgKytpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCFpc0lkZW50aWNhbChvcGFxdWVSb3VuZCgke3Rlc3RDYXNlSW5w
dXRbMF19KSwgJHt0ZXN0Q2FzZUlucHV0WzFdfSArIDApKSB7CisgICAgICAgICAgICAgICAgICAg
IHRocm93ICJGYWlsZWQgdGVzdFNpbmdsZVR5cGVXaXRob3V0TmVnYXRpdmVaZXJvQ2FsbCgpIjsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobnVtYmVy
T2ZERkdDb21waWxlcyhvcGFxdWVSb3VuZCkgPiAxKQorICAgICAgICAgICAgICAgIHRocm93ICJX
ZSBzaG91bGQgaGF2ZSBjb21waWxlZCBhIHNpbmdsZSByb3VuZCBmb3IgdGhlIGV4cGVjdGVkIHR5
cGUuIjsKKyAgICAgICAgYCk7CisgICAgfQorfQordGVzdFNpbmdsZVR5cGVXaXRob3V0TmVnYXRp
dmVaZXJvQ2FsbCgpOworCisKKy8vIFRlc3QgTWF0aC5yb3VuZCgpIG9uIGNvbnN0YW50cworZnVu
Y3Rpb24gdGVzdENvbnN0YW50KCkgeworICAgIGZvciAobGV0IHRlc3RDYXNlSW5wdXQgb2YgdmFs
aWRJbnB1dFRlc3RDYXNlcykgeworICAgICAgICBldmFsKGAKKyAgICAgICAgICAgIGZ1bmN0aW9u
IG9wYXF1ZVJvdW5kT25Db25zdGFudCgpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5y
b3VuZCgke3Rlc3RDYXNlSW5wdXRbMF19KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5v
SW5saW5lKG9wYXF1ZVJvdW5kT25Db25zdGFudCk7CisgICAgICAgICAgICBub09TUkV4aXRGdXp6
aW5nKG9wYXF1ZVJvdW5kT25Db25zdGFudCk7CisKKyAgICAgICAgICAgIGZvciAobGV0IGkgPSAw
OyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWlzSWRlbnRpY2FsKG9wYXF1
ZVJvdW5kT25Db25zdGFudCgpLCAke3Rlc3RDYXNlSW5wdXRbMV19KSkgeworICAgICAgICAgICAg
ICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RDb25zdGFudCgpIjsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobnVtYmVyT2ZERkdDb21waWxlcyhvcGFx
dWVSb3VuZE9uQ29uc3RhbnQpID4gMSkKKyAgICAgICAgICAgICAgICB0aHJvdyAiV2Ugc2hvdWxk
IGhhdmUgY29tcGlsZWQgYSBzaW5nbGUgcm91bmQgZm9yIHRoZSBleHBlY3RlZCB0eXBlLiI7Cisg
ICAgICAgIGApOworICAgIH0KK30KK3Rlc3RDb25zdGFudCgpOworCisKKy8vIFZlcmlmeSB3ZSBj
YWxsIHZhbHVlT2YoKSBleGFjdGx5IG9uY2UgcGVyIGNhbGwuCitmdW5jdGlvbiBvcGFxdWVSb3Vu
ZEZvclNpZGVFZmZlY3RzKGFyZ3VtZW50KSB7CisgICAgcmV0dXJuIE1hdGgucm91bmQoYXJndW1l
bnQpOworfQorbm9JbmxpbmUob3BhcXVlUm91bmRGb3JTaWRlRWZmZWN0cyk7Citub09TUkV4aXRG
dXp6aW5nKG9wYXF1ZVJvdW5kRm9yU2lkZUVmZmVjdHMpOworCitmdW5jdGlvbiB0ZXN0U2lkZUVm
ZmVjdCgpIHsKKyAgICBsZXQgdGVzdE9iamVjdCA9IHsKKyAgICAgICAgY291bnRlcjogMCwKKyAg
ICAgICAgdmFsdWVPZjogZnVuY3Rpb24oKSB7ICsrdGhpcy5jb3VudGVyOyByZXR1cm4gMTY7IH0K
KyAgICB9OworICAgIGxldCByb3VuZDE2ID0gTWF0aC5yb3VuZCgxNik7CisgICAgZm9yIChsZXQg
aSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICBpZiAob3BhcXVlUm91bmRGb3JTaWRlRWZm
ZWN0cyh0ZXN0T2JqZWN0KSAhPT0gcm91bmQxNikKKyAgICAgICAgICAgIHRocm93ICJJbmNvcnJl
Y3QgcmVzdWx0IGluIHRlc3RTaWRlRWZmZWN0KCkiOworICAgIH0KKyAgICBpZiAodGVzdE9iamVj
dC5jb3VudGVyICE9PSAxZTQpCisgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdFNpZGVFZmZlY3Qo
KSI7CisgICAgaWYgKG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVlUm91bmRGb3JTaWRlRWZmZWN0
cykgPiAxKQorICAgICAgICB0aHJvdyAib3BhcXVlUm91bmRGb3JTaWRlRWZmZWN0cygpIGlzIHBy
ZWRpY3RhYmxlLCBpdCBzaG91bGQgb25seSBiZSBjb21waWxlZCBvbmNlLiI7Cit9Cit0ZXN0U2lk
ZUVmZmVjdCgpOworCisKKy8vIFZlcmlmeSByb3VuZCgpIGlzIG5vdCBzdWJqZWN0IHRvIENTRSBp
ZiB0aGUgYXJndW1lbnQgaGFzIHNpZGUgZWZmZWN0cy4KK2Z1bmN0aW9uIG9wYXF1ZVJvdW5kRm9y
Q1NFKGFyZ3VtZW50KSB7CisgICAgcmV0dXJuIE1hdGgucm91bmQoYXJndW1lbnQpICsgTWF0aC5y
b3VuZChhcmd1bWVudCkgKyBNYXRoLnJvdW5kKGFyZ3VtZW50KTsKK30KK25vSW5saW5lKG9wYXF1
ZVJvdW5kRm9yQ1NFKTsKK25vT1NSRXhpdEZ1enppbmcob3BhcXVlUm91bmRGb3JDU0UpOworCitm
dW5jdGlvbiB0ZXN0Q1NFKCkgeworICAgIGxldCB0ZXN0T2JqZWN0ID0geworICAgICAgICBjb3Vu
dGVyOiAwLAorICAgICAgICB2YWx1ZU9mOiBmdW5jdGlvbigpIHsgKyt0aGlzLmNvdW50ZXI7IHJl
dHVybiAxNjsgfQorICAgIH07CisgICAgbGV0IHJvdW5kMTYgPSBNYXRoLnJvdW5kKDE2KTsKKyAg
ICBsZXQgdGhyZWVSb3VuZDE2ID0gcm91bmQxNiArIHJvdW5kMTYgKyByb3VuZDE2OworICAgIGZv
ciAobGV0IGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgaWYgKG9wYXF1ZVJvdW5kRm9y
Q1NFKHRlc3RPYmplY3QpICE9PSB0aHJlZVJvdW5kMTYpCisgICAgICAgICAgICB0aHJvdyAiSW5j
b3JyZWN0IHJlc3VsdCBpbiB0ZXN0Q1NFKCkiOworICAgIH0KKyAgICBpZiAodGVzdE9iamVjdC5j
b3VudGVyICE9PSAzZTQpCisgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdENTRSgpIjsKKyAgICBp
ZiAobnVtYmVyT2ZERkdDb21waWxlcyhvcGFxdWVSb3VuZEZvckNTRSkgPiAxKQorICAgICAgICB0
aHJvdyAib3BhcXVlUm91bmRGb3JDU0UoKSBpcyBwcmVkaWN0YWJsZSwgaXQgc2hvdWxkIG9ubHkg
YmUgY29tcGlsZWQgb25jZS4iOworfQordGVzdENTRSgpOworCisKKy8vIFZlcmlmeSByb3VuZCgp
IGlzIG5vdCBzdWJqZWN0IHRvIERDRSBpZiB0aGUgYXJndW1lbnQgaGFzIHNpZGUgZWZmZWN0cy4K
K2Z1bmN0aW9uIG9wYXF1ZVJvdW5kRm9yRENFKGFyZ3VtZW50KSB7CisgICAgTWF0aC5yb3VuZChh
cmd1bWVudCk7Cit9Citub0lubGluZShvcGFxdWVSb3VuZEZvckRDRSk7Citub09TUkV4aXRGdXp6
aW5nKG9wYXF1ZVJvdW5kRm9yRENFKTsKKworZnVuY3Rpb24gdGVzdERDRSgpIHsKKyAgICBsZXQg
dGVzdE9iamVjdCA9IHsKKyAgICAgICAgY291bnRlcjogMCwKKyAgICAgICAgdmFsdWVPZjogZnVu
Y3Rpb24oKSB7ICsrdGhpcy5jb3VudGVyOyByZXR1cm4gMTY7IH0KKyAgICB9OworICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgb3BhcXVlUm91bmRGb3JEQ0UodGVz
dE9iamVjdCk7CisgICAgfQorICAgIGlmICh0ZXN0T2JqZWN0LmNvdW50ZXIgIT09IDFlNCkKKyAg
ICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0RENFKCkiOworICAgIGlmIChudW1iZXJPZkRGR0NvbXBp
bGVzKG9wYXF1ZVJvdW5kRm9yRENFKSA+IDEpCisgICAgICAgIHRocm93ICJvcGFxdWVSb3VuZEZv
ckRDRSgpIGlzIHByZWRpY3RhYmxlLCBpdCBzaG91bGQgb25seSBiZSBjb21waWxlZCBvbmNlLiI7
Cit9Cit0ZXN0RENFKCk7CisKKworLy8gVGVzdCBleGNlcHRpb25zIGluIHRoZSBhcmd1bWVudC4K
K2Z1bmN0aW9uIHRlc3RFeGNlcHRpb24oKSB7CisgICAgbGV0IGNvdW50ZXIgPSAwOworICAgIGZ1
bmN0aW9uIG9wYXF1ZVJvdW5kV2l0aEV4Y2VwdGlvbihhcmd1bWVudCkgeworICAgICAgICBsZXQg
cmVzdWx0ID0gTWF0aC5yb3VuZChhcmd1bWVudCk7CisgICAgICAgICsrY291bnRlcjsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgbm9JbmxpbmUob3BhcXVlUm91bmRXaXRoRXhj
ZXB0aW9uKTsKKworICAgIGxldCB0ZXN0T2JqZWN0ID0geyB2YWx1ZU9mOiAoKSA9PiB7ICByZXR1
cm4gNjQ7IH0gfTsKKyAgICBsZXQgcm91bmQ2NCA9IE1hdGgucm91bmQoNjQpOworCisgICAgLy8g
V2FybSB1cCB3aXRob3V0IGV4Y2VwdGlvbi4KKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDFlMzsg
KytpKSB7CisgICAgICAgIGlmIChvcGFxdWVSb3VuZFdpdGhFeGNlcHRpb24odGVzdE9iamVjdCkg
IT09IHJvdW5kNjQpCisgICAgICAgICAgICB0aHJvdyAiSW5jb3JyZWN0IHJlc3VsdCBpbiBvcGFx
dWVSb3VuZFdpdGhFeGNlcHRpb24oKSI7CisgICAgfQorCisgICAgbGV0IHRlc3RUaHJvd09iamVj
dCA9IHsgdmFsdWVPZjogKCkgPT4geyB0aHJvdyB0ZXN0T2JqZWN0OyByZXR1cm4gNjQ7IH0gfTsK
KworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMWUyOyArK2kpIHsKKyAgICAgICAgdHJ5IHsKKyAg
ICAgICAgICAgIGlmIChvcGFxdWVSb3VuZFdpdGhFeGNlcHRpb24odGVzdFRocm93T2JqZWN0KSAh
PT0gOCkKKyAgICAgICAgICAgICAgICB0aHJvdyAiVGhpcyBjb2RlIHNob3VsZCBub3QgYmUgcmVh
Y2hlZCEhIjsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgaWYgKGUgIT09IHRl
c3RPYmplY3QpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyAiV3Jvbmcgb2JqZWN0IHRocm93biBm
cm9tIG9wYXF1ZVJvdW5kV2l0aEV4Y2VwdGlvbi4iCisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAoY291bnRlciAhPT0gMWUzKSB7CisgICAgICAgIHRocm93ICJJbnZh
bGlkIGNvdW50IGluIHRlc3RFeGNlcHRpb24oKSI7CisgICAgfQorfQordGVzdEV4Y2VwdGlvbigp
OwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvYXJpdGgtdHJ1bmMtb24tdmFyaW91cy10eXBl
cy5qcyBiL0pTVGVzdHMvc3RyZXNzL2FyaXRoLXRydW5jLW9uLXZhcmlvdXMtdHlwZXMuanMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNTRjNTM1YjYxOWY4ZWQzMjRlZmI5N2QxNzA1ZTdkOGYwNTIwNjRjMgotLS0gL2Rl
di9udWxsCisrKyBiL0pTVGVzdHMvc3RyZXNzL2FyaXRoLXRydW5jLW9uLXZhcmlvdXMtdHlwZXMu
anMKQEAgLTAsMCArMSwyOTUgQEAKKyJ1c2Ugc3RyaWN0IjsKKworbGV0IHZhbGlkSW5wdXRUZXN0
Q2FzZXMgPSBbCisgICAgLy8gaW5wdXQgYXMgc3RyaW5nLCBleHBlY3RlZCByZXN1bHQgYXMgc3Ry
aW5nLgorICAgIFsidW5kZWZpbmVkIiwgIk5hTiJdLAorICAgIFsibnVsbCIsICIwIl0sCisgICAg
WyIwIiwgIjAiXSwKKyAgICBbIi0wLiIsICItMCJdLAorICAgIFsiMC41IiwgIjAiXSwKKyAgICBb
Ii0wLjUiLCAiLTAiXSwKKyAgICBbIjQiLCAiNCJdLAorICAgIFsiNDIuMSIsICI0MiJdLAorICAg
IFsiNDIuNSIsICI0MiJdLAorICAgIFsiNDIuOSIsICI0MiJdLAorICAgIFsiLTQyLjEiLCAiLTQy
Il0sCisgICAgWyItNDIuNSIsICItNDIiXSwKKyAgICBbIi00Mi45IiwgIi00MiJdLAorICAgIFsi
TWF0aC5QSSIsICIzIl0sCisgICAgWyJJbmZpbml0eSIsICJJbmZpbml0eSJdLAorICAgIFsiLUlu
ZmluaXR5IiwgIi1JbmZpbml0eSJdLAorICAgIFsiTmFOIiwgIk5hTiJdLAorICAgIFsiXCJXZWJL
aXRcIiIsICJOYU4iXSwKKyAgICBbIlwiNFwiIiwgIjQiXSwKKyAgICBbIlwiNDIuNVwiIiwgIjQy
Il0sCisgICAgWyJ7IHZhbHVlT2Y6ICgpID0+IHsgcmV0dXJuIDQ7IH0gfSIsICI0Il0sCisgICAg
WyJ7IHZhbHVlT2Y6ICgpID0+IHsgcmV0dXJuIDA7IH0gfSIsICIwIl0sCisgICAgWyJ7IHZhbHVl
T2Y6ICgpID0+IHsgcmV0dXJuIC0wOyB9IH0iLCAiLTAiXSwKKyAgICBbInsgdmFsdWVPZjogKCkg
PT4geyByZXR1cm4gMC41OyB9IH0iLCAiMCJdLAorICAgIFsieyB2YWx1ZU9mOiAoKSA9PiB7IHJl
dHVybiAtMC41OyB9IH0iLCAiLTAiXSwKKyAgICBbInsgdmFsdWVPZjogKCkgPT4geyByZXR1cm4g
TnVtYmVyLk1JTl9TQUZFX0lOVEVHRVI7IH0gfSIsICItOTAwNzE5OTI1NDc0MDk5MSJdLAorICAg
IFsieyB2YWx1ZU9mOiAoKSA9PiB7IHJldHVybiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjsgfSB9
IiwgIjkwMDcxOTkyNTQ3NDA5OTEiXSwKKyAgICBbInsgdmFsdWVPZjogKCkgPT4geyByZXR1cm4g
MHg4MDAwMDAwMHwwOyB9IH0iLCAiLTIxNDc0ODM2NDgiXSwKKyAgICBbInsgdmFsdWVPZjogKCkg
PT4geyByZXR1cm4gMHg3ZmZmZmZmZnwwOyB9IH0iLCAiMjE0NzQ4MzY0NyJdLAorICAgIFsieyB2
YWx1ZU9mOiAoKSA9PiB7IHJldHVybiAoMHg4MDAwMDAwMHwwKSAtIDAuNTsgfSB9IiwgIi0yMTQ3
NDgzNjQ4Il0sCisgICAgWyJ7IHZhbHVlT2Y6ICgpID0+IHsgcmV0dXJuICgweDdmZmZmZmZmfDAp
ICsgMC41OyB9IH0iLCAiMjE0NzQ4MzY0NyJdLAorXTsKKworbGV0IHZhbGlkSW5wdXRUeXBlZFRl
c3RDYXNlcyA9IHZhbGlkSW5wdXRUZXN0Q2FzZXMubWFwKChlbGVtZW50KSA9PiB7IHJldHVybiBb
ZXZhbCgiKCIgKyBlbGVtZW50WzBdICsgIikiKSwgZXZhbChlbGVtZW50WzFdKV0gfSk7CisKK2Z1
bmN0aW9uIGlzSWRlbnRpY2FsKHJlc3VsdCwgZXhwZWN0ZWQpCit7CisgICAgaWYgKGV4cGVjdGVk
ID09PSBleHBlY3RlZCkgeworICAgICAgICBpZiAocmVzdWx0ICE9PSBleHBlY3RlZCkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFleHBlY3RlZCAmJiAoMSAvIGV4cGVj
dGVkKSAhPT0gKDEgLyByZXN1bHQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0ICE9PSByZXN1bHQ7Cit9
CisKKworLy8gVGVzdCBNYXRoLnRydW5jKCkgd2l0aG91dCBhcmd1bWVudHMuCitmdW5jdGlvbiBv
cGFxdWVUcnVuY05vQXJndW1lbnQoKSB7CisgICAgcmV0dXJuIE1hdGgudHJ1bmMoKTsKK30KK25v
SW5saW5lKG9wYXF1ZVRydW5jTm9Bcmd1bWVudCk7Citub09TUkV4aXRGdXp6aW5nKG9wYXF1ZVRy
dW5jTm9Bcmd1bWVudCk7CisKK2Z1bmN0aW9uIHRlc3ROb0FyZ3VtZW50KCkgeworICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgbGV0IG91dHB1dCA9IG9wYXF1ZVRy
dW5jTm9Bcmd1bWVudCgpOworICAgICAgICBpZiAoIWlzSWRlbnRpY2FsKG91dHB1dCwgTmFOKSkg
eworICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCBvcGFxdWVUcnVuY05vQXJndW1lbnQiOworICAg
ICAgICB9CisgICAgfQorICAgIGlmIChudW1iZXJPZkRGR0NvbXBpbGVzKG9wYXF1ZVRydW5jTm9B
cmd1bWVudCkgPiAxKQorICAgICAgICB0aHJvdyAiVGhlIGNhbGwgd2l0aG91dCBhcmd1bWVudHMg
c2hvdWxkIG5ldmVyIGV4aXQuIjsKK30KK3Rlc3ROb0FyZ3VtZW50KCk7CisKKworLy8gVGVzdCBN
YXRoLnRydW5jKCkgd2l0aCBhIHZlcnkgcG9seW1vcnBoaWMgaW5wdXQuIEFsbCB0ZXN0IGNhc2Vz
IGFyZSBzZWVuIGF0IGVhY2ggaXRlcmF0aW9uLgorZnVuY3Rpb24gb3BhcXVlQWxsVHlwZXNUcnVu
Yyhhcmd1bWVudCkgeworICAgIHJldHVybiBNYXRoLnRydW5jKGFyZ3VtZW50KTsKK30KK25vSW5s
aW5lKG9wYXF1ZUFsbFR5cGVzVHJ1bmMpOworbm9PU1JFeGl0RnV6emluZyhvcGFxdWVBbGxUeXBl
c1RydW5jKTsKKworZnVuY3Rpb24gdGVzdEFsbFR5cGVzQ2FsbCgpIHsKKyAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IDFlMzsgKytpKSB7CisgICAgICAgIGZvciAobGV0IHRlc3RDYXNlSW5wdXQgb2Yg
dmFsaWRJbnB1dFR5cGVkVGVzdENhc2VzKSB7CisgICAgICAgICAgICBsZXQgb3V0cHV0ID0gb3Bh
cXVlQWxsVHlwZXNUcnVuYyh0ZXN0Q2FzZUlucHV0WzBdKTsKKyAgICAgICAgICAgIGlmICghaXNJ
ZGVudGljYWwob3V0cHV0LCB0ZXN0Q2FzZUlucHV0WzFdKSkKKyAgICAgICAgICAgICAgICB0aHJv
dyAiRmFpbGVkIHRlc3RBbGxUeXBlc0NhbGwgZm9yIGlucHV0ICIgKyB0ZXN0Q2FzZUlucHV0WzBd
ICsgIiBleHBlY3RlZCAiICsgdGVzdENhc2VJbnB1dFsxXSArICIgZ290ICIgKyBvdXRwdXQ7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgaWYgKG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVlQWxsVHlw
ZXNUcnVuYykgPiAzKQorICAgICAgICB0aHJvdyAiV2Ugc2hvdWxkIGhhdmUgZGV0ZWN0ZWQgdHJ1
bmMoKSB3YXMgcG9seW1vcnBoaWMgYW5kIGdlbmVyYXRlZCBhIGdlbmVyaWMgdmVyc2lvbi4iOwor
fQordGVzdEFsbFR5cGVzQ2FsbCgpOworCisKKy8vIFBvbHltb3JwaGljIGlucHV0IGJ1dCBuZWdh
dGl2ZSB6ZXJvIGlzIG5vdCBvYnNlcnZhYmxlLgorZnVuY3Rpb24gb3BhcXVlQWxsVHlwZXNUcnVu
Y1dpdGhvdXROZWdhdGl2ZVplcm8oYXJndW1lbnQpIHsKKyAgICByZXR1cm4gTWF0aC50cnVuYyhh
cmd1bWVudCkgKyAwOworfQorbm9JbmxpbmUob3BhcXVlQWxsVHlwZXNUcnVuY1dpdGhvdXROZWdh
dGl2ZVplcm8pOworbm9PU1JFeGl0RnV6emluZyhvcGFxdWVBbGxUeXBlc1RydW5jV2l0aG91dE5l
Z2F0aXZlWmVybyk7CisKK2Z1bmN0aW9uIHRlc3RBbGxUeXBlc1dpdGhvdXROZWdhdGl2ZVplcm9D
YWxsKCkgeworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMWUzOyArK2kpIHsKKyAgICAgICAgZm9y
IChsZXQgdGVzdENhc2VJbnB1dCBvZiB2YWxpZElucHV0VHlwZWRUZXN0Q2FzZXMpIHsKKyAgICAg
ICAgICAgIGxldCBvdXRwdXQgPSBvcGFxdWVBbGxUeXBlc1RydW5jV2l0aG91dE5lZ2F0aXZlWmVy
byh0ZXN0Q2FzZUlucHV0WzBdKTsKKyAgICAgICAgICAgIGlmICghaXNJZGVudGljYWwob3V0cHV0
LCB0ZXN0Q2FzZUlucHV0WzFdICsgMCkpCisgICAgICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0
ZXN0QWxsVHlwZXNXaXRob3V0TmVnYXRpdmVaZXJvQ2FsbCBmb3IgaW5wdXQgIiArIHRlc3RDYXNl
SW5wdXRbMF0gKyAiIGV4cGVjdGVkICIgKyB0ZXN0Q2FzZUlucHV0WzFdICsgIiBnb3QgIiArIG91
dHB1dDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobnVtYmVyT2ZERkdDb21waWxlcyhvcGFx
dWVBbGxUeXBlc1RydW5jKSA+IDMpCisgICAgICAgIHRocm93ICJXZSBzaG91bGQgaGF2ZSBkZXRl
Y3RlZCB0cnVuYygpIHdhcyBwb2x5bW9ycGhpYyBhbmQgZ2VuZXJhdGVkIGEgZ2VuZXJpYyB2ZXJz
aW9uLiI7Cit9Cit0ZXN0QWxsVHlwZXNXaXRob3V0TmVnYXRpdmVaZXJvQ2FsbCgpOworCisKKy8v
IFRlc3QgTWF0aC50cnVuYygpIG9uIGEgY29tcGxldGVseSB0eXBlZCBpbnB1dC4gRXZlcnkgY2Fs
bCBzZWUgb25seSBvbmUgdHlwZS4KK2Z1bmN0aW9uIHRlc3RTaW5nbGVUeXBlQ2FsbCgpIHsKKyAg
ICBmb3IgKGxldCB0ZXN0Q2FzZUlucHV0IG9mIHZhbGlkSW5wdXRUZXN0Q2FzZXMpIHsKKyAgICAg
ICAgZXZhbChgCisgICAgICAgICAgICBmdW5jdGlvbiBvcGFxdWVUcnVuYyhhcmd1bWVudCkgewor
ICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLnRydW5jKGFyZ3VtZW50KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIG5vSW5saW5lKG9wYXF1ZVRydW5jKTsKKyAgICAgICAgICAgIG5vT1NS
RXhpdEZ1enppbmcob3BhcXVlVHJ1bmMpOworCisgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsg
aSA8IDFlNDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFpc0lkZW50aWNhbChvcGFxdWVU
cnVuYygke3Rlc3RDYXNlSW5wdXRbMF19KSwgJHt0ZXN0Q2FzZUlucHV0WzFdfSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0U2luZ2xlVHlwZUNhbGwoKSI7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG51bWJlck9mREZH
Q29tcGlsZXMob3BhcXVlVHJ1bmMpID4gMSkKKyAgICAgICAgICAgICAgICB0aHJvdyAiV2Ugc2hv
dWxkIGhhdmUgY29tcGlsZWQgYSBzaW5nbGUgdHJ1bmMgZm9yIHRoZSBleHBlY3RlZCB0eXBlLiI7
CisgICAgICAgIGApOworICAgIH0KK30KK3Rlc3RTaW5nbGVUeXBlQ2FsbCgpOworCisKKy8vIFRl
c3QgTWF0aC50cnVuYygpIG9uIGEgY29tcGxldGVseSB0eXBlZCBpbnB1dCwgYnV0IHdpdGhvdXQg
bmVnYXRpdmUgemVyby4KK2Z1bmN0aW9uIHRlc3RTaW5nbGVUeXBlV2l0aG91dE5lZ2F0aXZlWmVy
b0NhbGwoKSB7CisgICAgZm9yIChsZXQgdGVzdENhc2VJbnB1dCBvZiB2YWxpZElucHV0VGVzdENh
c2VzKSB7CisgICAgICAgIGV2YWwoYAorICAgICAgICAgICAgZnVuY3Rpb24gb3BhcXVlVHJ1bmMo
YXJndW1lbnQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC50cnVuYyhhcmd1bWVudCkg
LSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbm9JbmxpbmUob3BhcXVlVHJ1bmMpOwor
ICAgICAgICAgICAgbm9PU1JFeGl0RnV6emluZyhvcGFxdWVUcnVuYyk7CisKKyAgICAgICAgICAg
IGZvciAobGV0IGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWlz
SWRlbnRpY2FsKG9wYXF1ZVRydW5jKCR7dGVzdENhc2VJbnB1dFswXX0pLCAke3Rlc3RDYXNlSW5w
dXRbMV19IC0gMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0U2lu
Z2xlVHlwZVdpdGhvdXROZWdhdGl2ZVplcm9DYWxsKCkiOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChudW1iZXJPZkRGR0NvbXBpbGVzKG9wYXF1ZVRy
dW5jKSA+IDEpCisgICAgICAgICAgICAgICAgdGhyb3cgIldlIHNob3VsZCBoYXZlIGNvbXBpbGVk
IGEgc2luZ2xlIHRydW5jIGZvciB0aGUgZXhwZWN0ZWQgdHlwZS4iOworICAgICAgICBgKTsKKyAg
ICB9Cit9Cit0ZXN0U2luZ2xlVHlwZVdpdGhvdXROZWdhdGl2ZVplcm9DYWxsKCk7CisKKworLy8g
VGVzdCBNYXRoLnRydW5jKCkgb24gY29uc3RhbnRzCitmdW5jdGlvbiB0ZXN0Q29uc3RhbnQoKSB7
CisgICAgZm9yIChsZXQgdGVzdENhc2VJbnB1dCBvZiB2YWxpZElucHV0VGVzdENhc2VzKSB7Cisg
ICAgICAgIGV2YWwoYAorICAgICAgICAgICAgZnVuY3Rpb24gb3BhcXVlVHJ1bmNPbkNvbnN0YW50
KCkgeworICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLnRydW5jKCR7dGVzdENhc2VJbnB1dFsw
XX0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbm9JbmxpbmUob3BhcXVlVHJ1bmNPbkNv
bnN0YW50KTsKKyAgICAgICAgICAgIG5vT1NSRXhpdEZ1enppbmcob3BhcXVlVHJ1bmNPbkNvbnN0
YW50KTsKKworICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAg
ICAgICAgICAgICAgIGlmICghaXNJZGVudGljYWwob3BhcXVlVHJ1bmNPbkNvbnN0YW50KCksICR7
dGVzdENhc2VJbnB1dFsxXX0pKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93ICJGYWlsZWQg
dGVzdENvbnN0YW50KCkiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChudW1iZXJPZkRGR0NvbXBpbGVzKG9wYXF1ZVRydW5jT25Db25zdGFudCkgPiAx
KQorICAgICAgICAgICAgICAgIHRocm93ICJXZSBzaG91bGQgaGF2ZSBjb21waWxlZCBhIHNpbmds
ZSB0cnVuYyBmb3IgdGhlIGV4cGVjdGVkIHR5cGUuIjsKKyAgICAgICAgYCk7CisgICAgfQorfQor
dGVzdENvbnN0YW50KCk7CisKKworLy8gVmVyaWZ5IHdlIGNhbGwgdmFsdWVPZigpIGV4YWN0bHkg
b25jZSBwZXIgY2FsbC4KK2Z1bmN0aW9uIG9wYXF1ZVRydW5jRm9yU2lkZUVmZmVjdHMoYXJndW1l
bnQpIHsKKyAgICByZXR1cm4gTWF0aC50cnVuYyhhcmd1bWVudCk7Cit9Citub0lubGluZShvcGFx
dWVUcnVuY0ZvclNpZGVFZmZlY3RzKTsKK25vT1NSRXhpdEZ1enppbmcob3BhcXVlVHJ1bmNGb3JT
aWRlRWZmZWN0cyk7CisKK2Z1bmN0aW9uIHRlc3RTaWRlRWZmZWN0KCkgeworICAgIGxldCB0ZXN0
T2JqZWN0ID0geworICAgICAgICBjb3VudGVyOiAwLAorICAgICAgICB2YWx1ZU9mOiBmdW5jdGlv
bigpIHsgKyt0aGlzLmNvdW50ZXI7IHJldHVybiAxNjsgfQorICAgIH07CisgICAgbGV0IHRydW5j
MTYgPSBNYXRoLnRydW5jKDE2KTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDFlNDsgKytpKSB7
CisgICAgICAgIGlmIChvcGFxdWVUcnVuY0ZvclNpZGVFZmZlY3RzKHRlc3RPYmplY3QpICE9PSB0
cnVuYzE2KQorICAgICAgICAgICAgdGhyb3cgIkluY29ycmVjdCByZXN1bHQgaW4gdGVzdFNpZGVF
ZmZlY3QoKSI7CisgICAgfQorICAgIGlmICh0ZXN0T2JqZWN0LmNvdW50ZXIgIT09IDFlNCkKKyAg
ICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0U2lkZUVmZmVjdCgpIjsKKyAgICBpZiAobnVtYmVyT2ZE
RkdDb21waWxlcyhvcGFxdWVUcnVuY0ZvclNpZGVFZmZlY3RzKSA+IDEpCisgICAgICAgIHRocm93
ICJvcGFxdWVUcnVuY0ZvclNpZGVFZmZlY3RzKCkgaXMgcHJlZGljdGFibGUsIGl0IHNob3VsZCBv
bmx5IGJlIGNvbXBpbGVkIG9uY2UuIjsKK30KK3Rlc3RTaWRlRWZmZWN0KCk7CisKKworLy8gVmVy
aWZ5IHRydW5jKCkgaXMgbm90IHN1YmplY3QgdG8gQ1NFIGlmIHRoZSBhcmd1bWVudCBoYXMgc2lk
ZSBlZmZlY3RzLgorZnVuY3Rpb24gb3BhcXVlVHJ1bmNGb3JDU0UoYXJndW1lbnQpIHsKKyAgICBy
ZXR1cm4gTWF0aC50cnVuYyhhcmd1bWVudCkgKyBNYXRoLnRydW5jKGFyZ3VtZW50KSArIE1hdGgu
dHJ1bmMoYXJndW1lbnQpOworfQorbm9JbmxpbmUob3BhcXVlVHJ1bmNGb3JDU0UpOworbm9PU1JF
eGl0RnV6emluZyhvcGFxdWVUcnVuY0ZvckNTRSk7CisKK2Z1bmN0aW9uIHRlc3RDU0UoKSB7Cisg
ICAgbGV0IHRlc3RPYmplY3QgPSB7CisgICAgICAgIGNvdW50ZXI6IDAsCisgICAgICAgIHZhbHVl
T2Y6IGZ1bmN0aW9uKCkgeyArK3RoaXMuY291bnRlcjsgcmV0dXJuIDE2OyB9CisgICAgfTsKKyAg
ICBsZXQgdHJ1bmMxNiA9IE1hdGgudHJ1bmMoMTYpOworICAgIGxldCB0aHJlZVRydW5jMTYgPSB0
cnVuYzE2ICsgdHJ1bmMxNiArIHRydW5jMTY7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxZTQ7
ICsraSkgeworICAgICAgICBpZiAob3BhcXVlVHJ1bmNGb3JDU0UodGVzdE9iamVjdCkgIT09IHRo
cmVlVHJ1bmMxNikKKyAgICAgICAgICAgIHRocm93ICJJbmNvcnJlY3QgcmVzdWx0IGluIHRlc3RD
U0UoKSI7CisgICAgfQorICAgIGlmICh0ZXN0T2JqZWN0LmNvdW50ZXIgIT09IDNlNCkKKyAgICAg
ICAgdGhyb3cgIkZhaWxlZCB0ZXN0Q1NFKCkiOworICAgIGlmIChudW1iZXJPZkRGR0NvbXBpbGVz
KG9wYXF1ZVRydW5jRm9yQ1NFKSA+IDEpCisgICAgICAgIHRocm93ICJvcGFxdWVUcnVuY0ZvckNT
RSgpIGlzIHByZWRpY3RhYmxlLCBpdCBzaG91bGQgb25seSBiZSBjb21waWxlZCBvbmNlLiI7Cit9
Cit0ZXN0Q1NFKCk7CisKKworLy8gVmVyaWZ5IHRydW5jKCkgaXMgbm90IHN1YmplY3QgdG8gRENF
IGlmIHRoZSBhcmd1bWVudCBoYXMgc2lkZSBlZmZlY3RzLgorZnVuY3Rpb24gb3BhcXVlVHJ1bmNG
b3JEQ0UoYXJndW1lbnQpIHsKKyAgICBNYXRoLnRydW5jKGFyZ3VtZW50KTsKK30KK25vSW5saW5l
KG9wYXF1ZVRydW5jRm9yRENFKTsKK25vT1NSRXhpdEZ1enppbmcob3BhcXVlVHJ1bmNGb3JEQ0Up
OworCitmdW5jdGlvbiB0ZXN0RENFKCkgeworICAgIGxldCB0ZXN0T2JqZWN0ID0geworICAgICAg
ICBjb3VudGVyOiAwLAorICAgICAgICB2YWx1ZU9mOiBmdW5jdGlvbigpIHsgKyt0aGlzLmNvdW50
ZXI7IHJldHVybiAxNjsgfQorICAgIH07CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxZTQ7ICsr
aSkgeworICAgICAgICBvcGFxdWVUcnVuY0ZvckRDRSh0ZXN0T2JqZWN0KTsKKyAgICB9CisgICAg
aWYgKHRlc3RPYmplY3QuY291bnRlciAhPT0gMWU0KQorICAgICAgICB0aHJvdyAiRmFpbGVkIHRl
c3REQ0UoKSI7CisgICAgaWYgKG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVlVHJ1bmNGb3JEQ0Up
ID4gMSkKKyAgICAgICAgdGhyb3cgIm9wYXF1ZVRydW5jRm9yRENFKCkgaXMgcHJlZGljdGFibGUs
IGl0IHNob3VsZCBvbmx5IGJlIGNvbXBpbGVkIG9uY2UuIjsKK30KK3Rlc3REQ0UoKTsKKworCisv
LyBUZXN0IGV4Y2VwdGlvbnMgaW4gdGhlIGFyZ3VtZW50LgorZnVuY3Rpb24gdGVzdEV4Y2VwdGlv
bigpIHsKKyAgICBsZXQgY291bnRlciA9IDA7CisgICAgZnVuY3Rpb24gb3BhcXVlVHJ1bmNXaXRo
RXhjZXB0aW9uKGFyZ3VtZW50KSB7CisgICAgICAgIGxldCByZXN1bHQgPSBNYXRoLnRydW5jKGFy
Z3VtZW50KTsKKyAgICAgICAgKytjb3VudGVyOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKyAgICBub0lubGluZShvcGFxdWVUcnVuY1dpdGhFeGNlcHRpb24pOworCisgICAgbGV0IHRl
c3RPYmplY3QgPSB7IHZhbHVlT2Y6ICgpID0+IHsgIHJldHVybiA2NDsgfSB9OworICAgIGxldCB0
cnVuYzY0ID0gTWF0aC50cnVuYyg2NCk7CisKKyAgICAvLyBXYXJtIHVwIHdpdGhvdXQgZXhjZXB0
aW9uLgorICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMWUzOyArK2kpIHsKKyAgICAgICAgaWYgKG9w
YXF1ZVRydW5jV2l0aEV4Y2VwdGlvbih0ZXN0T2JqZWN0KSAhPT0gdHJ1bmM2NCkKKyAgICAgICAg
ICAgIHRocm93ICJJbmNvcnJlY3QgcmVzdWx0IGluIG9wYXF1ZVRydW5jV2l0aEV4Y2VwdGlvbigp
IjsKKyAgICB9CisKKyAgICBsZXQgdGVzdFRocm93T2JqZWN0ID0geyB2YWx1ZU9mOiAoKSA9PiB7
IHRocm93IHRlc3RPYmplY3Q7IHJldHVybiA2NDsgfSB9OworCisgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCAxZTI7ICsraSkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKG9wYXF1ZVRy
dW5jV2l0aEV4Y2VwdGlvbih0ZXN0VGhyb3dPYmplY3QpICE9PSA4KQorICAgICAgICAgICAgICAg
IHRocm93ICJUaGlzIGNvZGUgc2hvdWxkIG5vdCBiZSByZWFjaGVkISEiOworICAgICAgICB9IGNh
dGNoIChlKSB7CisgICAgICAgICAgICBpZiAoZSAhPT0gdGVzdE9iamVjdCkgeworICAgICAgICAg
ICAgICAgIHRocm93ICJXcm9uZyBvYmplY3QgdGhyb3duIGZyb20gb3BhcXVlVHJ1bmNXaXRoRXhj
ZXB0aW9uLiIKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChjb3Vu
dGVyICE9PSAxZTMpIHsKKyAgICAgICAgdGhyb3cgIkludmFsaWQgY291bnQgaW4gdGVzdEV4Y2Vw
dGlvbigpIjsKKyAgICB9Cit9Cit0ZXN0RXhjZXB0aW9uKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289275</attachid>
            <date>2016-09-19 16:23:50 -0700</date>
            <delta_ts>2016-09-19 17:50:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-161895-20160919162105.patch</filename>
            <type>text/plain</type>
            <size>80001</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA2MTE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
ZmVkMjBkMGNhNGQ2ZjU3NjQ1MTBhNTJlMDRjYjcwODNmYTM5ZGJhLi43NjllZjgxYTI2MmUyYjEw
MzQ5NWIyYmJhZDIyMjlhNTJmMjA0MDg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NCBAQAorMjAxNi0wOS0xOSAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBbSlNDXSBNYWtlIHRoZSByb3VuZGluZy1yZWxhdGVkIG5vZGVzIHN1
cHBvcnQgYW55IHR5cGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2MTg5NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggY2hhbmdlcyBBcml0aFJvdW5kLCBBcml0aEZsb29yLCBBcml0aENl
aWwgYW5kIEFyaXRoVHJ1bmMKKyAgICAgICAgdG8gc3VwcG9ydCBwb2x5bW9ycGhpYyBpbnB1dCB3
aXRob3V0IGV4aXRpbmcgb24gZW50cnkuCisKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZUludHJpbnNpY0NhbGwpOgorICAgICAgICBUaGUgNCBmdW5jdGlvbnMgaWdub3JlIGFueSBp
bnB1dCBwYXN0IHRoZSBmaXJzdCBhcmd1bWVudC4gSXQgaXMgb2theQorICAgICAgICB0byB1c2Ug
dGhlIG5vZGVzIHdpdGggdGhlIGZpcnN0IGFyZ3VtZW50IGFuZCBsZXQgdGhlIFBoYW50b21zIGtl
ZXAKKyAgICAgICAgdGhlIHJlbWFpbmluZyBhcmd1bWVudHMgbGl2ZS4KKworICAgICAgICAqIGRm
Zy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAg
ICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhh
c2U6OmZpeHVwTm9kZSk6CisgICAgICAgIE91ciBmaXh1cCBoYWQgdGhlIGlzc3VlIHdlIGhhdmUg
c2VlbiBvbiBwcmV2aW91cyBub2RlczogdW5hcnlBcml0aFNob3VsZFNwZWN1bGF0ZUludDMyKCkK
KyAgICAgICAgcHJldmVudHMgdXMgZnJvbSBwaWNraW5nIGEgZ29vZCB0eXBlIGlmIHdlIGRvIG5v
dCBzZWUgYW55IGRvdWJsZS4KKworICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAg
ICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5o
OgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAg
ICAgIFByZWRpY3Rpb24gcHJvcGFnYXRpb24gb2YgdGhvc2Ugbm9kZXMgYXJlIGZ1bGx5IGRldGVy
bWluZWQKKyAgICAgICAgZnJvbSB0aGVpciBmbGFncyBhbmQgcmVzdWx0cydzIHByZWRpY3Rpb24u
IFRoZXkgYXJlIG1vdmVkCisgICAgICAgIHRvIHRoZSBpbnZhcmlhbnQgcHJvY2Vzc2luZy4KKwor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aFJvdW5kaW5nKToKKyAgICAgICAgKiBmdGwvRlRM
TG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZUFyaXRoUm91bmQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
Ojpjb21waWxlQXJpdGhGbG9vcik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
QjM6OmNvbXBpbGVBcml0aENlaWwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0IzOjpjb21waWxlQXJpdGhUcnVuYyk6CisKIDIwMTYtMDktMTkgIEtlaXRoIE1pbGxlciAgPGtl
aXRoX21pbGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRlIFdBU00gdG93YXJkcyAweGMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnBy
ZXRlcklubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlcklubGluZXMuaAppbmRleCAxNGI3N2U0NmE5OTIxNTgwMTE1YTQwMDcwY2UxZDExZWMz
ODc5OTE1Li45Mjc1NDcwZTNjNzIzYjM0NWJjZmQ0MzEyMTk3MWI3MDdlMDA1NzA5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJl
dGVySW5saW5lcy5oCkBAIC05MDUsMTkgKzkwNSwyMyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGlt
aQogICAgIGNhc2UgQXJpdGhDZWlsOgogICAgIGNhc2UgQXJpdGhUcnVuYzogewogICAgICAgICBK
U1ZhbHVlIG9wZXJhbmQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwotICAgICAg
ICBpZiAob3BlcmFuZCAmJiBvcGVyYW5kLmlzTnVtYmVyKCkpIHsKKyAgICAgICAgaWYgKE9wdGlv
bmFsPGRvdWJsZT4gbnVtYmVyID0gb3BlcmFuZC50b051bWJlckZyb21QcmltaXRpdmUoKSkgewog
ICAgICAgICAgICAgZG91YmxlIHJvdW5kZWRWYWx1ZSA9IDA7CiAgICAgICAgICAgICBpZiAobm9k
ZS0+b3AoKSA9PSBBcml0aFJvdW5kKQotICAgICAgICAgICAgICAgIHJvdW5kZWRWYWx1ZSA9IGpz
Um91bmQob3BlcmFuZC5hc051bWJlcigpKTsKKyAgICAgICAgICAgICAgICByb3VuZGVkVmFsdWUg
PSBqc1JvdW5kKCpudW1iZXIpOwogICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+b3AoKSA9PSBB
cml0aEZsb29yKQotICAgICAgICAgICAgICAgIHJvdW5kZWRWYWx1ZSA9IGZsb29yKG9wZXJhbmQu
YXNOdW1iZXIoKSk7CisgICAgICAgICAgICAgICAgcm91bmRlZFZhbHVlID0gZmxvb3IoKm51bWJl
cik7CiAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5vcCgpID09IEFyaXRoQ2VpbCkKLSAgICAg
ICAgICAgICAgICByb3VuZGVkVmFsdWUgPSBjZWlsKG9wZXJhbmQuYXNOdW1iZXIoKSk7CisgICAg
ICAgICAgICAgICAgcm91bmRlZFZhbHVlID0gY2VpbCgqbnVtYmVyKTsKICAgICAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IEFyaXRoVHJ1bmMpOwot
ICAgICAgICAgICAgICAgIHJvdW5kZWRWYWx1ZSA9IHRydW5jKG9wZXJhbmQuYXNOdW1iZXIoKSk7
CisgICAgICAgICAgICAgICAgcm91bmRlZFZhbHVlID0gdHJ1bmMoKm51bWJlcik7CiAgICAgICAg
ICAgICB9CiAKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50
eXBlZFVzZSkgeworICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzTnVtYmVyKHJv
dW5kZWRWYWx1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAg
ICAgICAgICAgaWYgKHByb2R1Y2VzSW50ZWdlcihub2RlLT5hcml0aFJvdW5kaW5nTW9kZSgpKSkg
ewogICAgICAgICAgICAgICAgIGludDMyX3Qgcm91bmRlZFZhbHVlQXNJbnQzMiA9IHN0YXRpY19j
YXN0PGludDMyX3Q+KHJvdW5kZWRWYWx1ZSk7CiAgICAgICAgICAgICAgICAgaWYgKHJvdW5kZWRW
YWx1ZUFzSW50MzIgPT0gcm91bmRlZFZhbHVlKSB7CkBAIC05MzYsMTAgKzk0MCwxNSBAQCBib29s
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1
bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICB9Ci0gICAgICAgIGlmIChwcm9kdWNlc0ludGVnZXIobm9kZS0+YXJpdGhSb3Vu
ZGluZ01vZGUoKSkpCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMy
T25seSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZSh0
eXBlT2ZEb3VibGVSb3VuZGluZyhmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKTsKKyAg
ICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBEb3VibGVSZXBVc2UpIHsKKyAg
ICAgICAgICAgIGlmIChwcm9kdWNlc0ludGVnZXIobm9kZS0+YXJpdGhSb3VuZGluZ01vZGUoKSkp
CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOwor
ICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IERvdWJsZVJl
cFVzZSkKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUodHlwZU9mRG91Ymxl
Um91bmRpbmcoZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPmNoaWxkMSgp
LnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
VHlwZShTcGVjRnVsbE51bWJlcik7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCmluZGV4IDU0ZjkwZTdlNTg4MzVmNzBkYThlYzJkNTU2MDhkYTA1ZTc0NDY1ZDku
LjcxYTc0NjE3MmEzYTE0OTQ1ZjgwOTYxZGQ5ODVkNTVhYWE4MzM4Y2YgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC0yNDQxLDI1ICsy
NDQxLDIyIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpY0NhbGwoTm9kZSog
Y2FsbGVlLCBpbnQgcmVzdWx0T3BlcmFuZCwgSW50cmluCiAgICAgICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyht
X2NvbnN0YW50TmFOKSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLSAg
ICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID09IDIpIHsKLSAgICAgICAgICAg
IGluc2VydENoZWNrcygpOwotICAgICAgICAgICAgTm9kZSogb3BlcmFuZCA9IGdldCh2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpOwotICAgICAgICAgICAgTm9k
ZVR5cGUgb3A7Ci0gICAgICAgICAgICBpZiAoaW50cmluc2ljID09IFJvdW5kSW50cmluc2ljKQot
ICAgICAgICAgICAgICAgIG9wID0gQXJpdGhSb3VuZDsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlu
dHJpbnNpYyA9PSBGbG9vckludHJpbnNpYykKLSAgICAgICAgICAgICAgICBvcCA9IEFyaXRoRmxv
b3I7Ci0gICAgICAgICAgICBlbHNlIGlmIChpbnRyaW5zaWMgPT0gQ2VpbEludHJpbnNpYykKLSAg
ICAgICAgICAgICAgICBvcCA9IEFyaXRoQ2VpbDsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgICAgIEFTU0VSVChpbnRyaW5zaWMgPT0gVHJ1bmNJbnRyaW5zaWMpOwotICAgICAgICAg
ICAgICAgIG9wID0gQXJpdGhUcnVuYzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIE5vZGUq
IHJvdW5kTm9kZSA9IGFkZFRvR3JhcGgob3AsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24p
LCBvcGVyYW5kKTsKLSAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFu
ZCksIHJvdW5kTm9kZSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaW5zZXJ0
Q2hlY2tzKCk7CisgICAgICAgIE5vZGUqIG9wZXJhbmQgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgTm9kZVR5cGUgb3A7CisgICAg
ICAgIGlmIChpbnRyaW5zaWMgPT0gUm91bmRJbnRyaW5zaWMpCisgICAgICAgICAgICBvcCA9IEFy
aXRoUm91bmQ7CisgICAgICAgIGVsc2UgaWYgKGludHJpbnNpYyA9PSBGbG9vckludHJpbnNpYykK
KyAgICAgICAgICAgIG9wID0gQXJpdGhGbG9vcjsKKyAgICAgICAgZWxzZSBpZiAoaW50cmluc2lj
ID09IENlaWxJbnRyaW5zaWMpCisgICAgICAgICAgICBvcCA9IEFyaXRoQ2VpbDsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoaW50cmluc2ljID09IFRydW5jSW50cmluc2ljKTsK
KyAgICAgICAgICAgIG9wID0gQXJpdGhUcnVuYzsKICAgICAgICAgfQotICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIE5vZGUqIHJvdW5kTm9kZSA9IGFkZFRvR3JhcGgob3AsIE9wSW5mbygw
KSwgT3BJbmZvKHByZWRpY3Rpb24pLCBvcGVyYW5kKTsKKyAgICAgICAgc2V0KFZpcnR1YWxSZWdp
c3RlcihyZXN1bHRPcGVyYW5kKSwgcm91bmROb2RlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgIGNhc2UgSU11bEludHJpbnNpYzogewogICAgICAgICBpZiAoYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgIT0gMykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlcml6ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVy
aXplLmgKaW5kZXggMTJkNGZiOWYyY2NmNGYwNGVhOTljYzM5ODY5ZjA4YzhlMjBiZDA1Ny4uZjkw
Yzc4NTdmYTZiMTBjOTcyYjQxMWRmMjNiZWZmNzRiNGFlOWRmMCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKQEAgLTM1OSw3ICszNTksMTIgQEAgdm9pZCBjbG9i
YmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQs
IGNvbnN0IFdyaXRlRnUKICAgICBjYXNlIEFyaXRoRmxvb3I6CiAgICAgY2FzZSBBcml0aENlaWw6
CiAgICAgY2FzZSBBcml0aFRydW5jOgotICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUsIHN0YXRp
Y19jYXN0PHVpbnRwdHJfdD4obm9kZS0+YXJpdGhSb3VuZGluZ01vZGUoKSkpKTsKKyAgICAgICAg
aWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBEb3VibGVSZXBVc2UpCisgICAgICAgICAg
ICBkZWYoUHVyZVZhbHVlKG5vZGUsIHN0YXRpY19jYXN0PHVpbnRwdHJfdD4obm9kZS0+YXJpdGhS
b3VuZGluZ01vZGUoKSkpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZWFkKFdvcmxk
KTsKKyAgICAgICAgICAgIHdyaXRlKEhlYXApOworICAgICAgICB9CiAgICAgICAgIHJldHVybjsK
IAogICAgIGNhc2UgQ2hlY2tDZWxsOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGaXh1cFBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4
dXBQaGFzZS5jcHAKaW5kZXggZmMyODlmOWNjOTk1M2Q0YTZkNjBkNzAwYjVmYjllOWEyYTgzM2M2
NC4uZjY4YjE3MTFhNTZmYjA4NTdhYzExMzA3MzRiMzkzZWFjOWQxNWU4NiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCkBAIC0zNzYsMjQgKzM3NiwyOCBA
QCBwcml2YXRlOgogICAgICAgICBjYXNlIEFyaXRoRmxvb3I6CiAgICAgICAgIGNhc2UgQXJpdGhD
ZWlsOgogICAgICAgICBjYXNlIEFyaXRoVHJ1bmM6IHsKLSAgICAgICAgICAgIGlmIChtX2dyYXBo
LnVuYXJ5QXJpdGhTaG91bGRTcGVjdWxhdGVJbnQzMihub2RlLCBGaXh1cFBhc3MpKSB7CisgICAg
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUludDMyT3JCb29sZWFu
KCkgJiYgbV9ncmFwaC5yb3VuZFNob3VsZFNwZWN1bGF0ZUludDMyKG5vZGUsIEZpeHVwUGFzcykp
IHsKICAgICAgICAgICAgICAgICBmaXhJbnRPckJvb2xlYW5FZGdlKG5vZGUtPmNoaWxkMSgpKTsK
ICAgICAgICAgICAgICAgICBpbnNlcnRDaGVjazxJbnQzMlVzZT4obV9pbmRleEluQmxvY2ssIG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvSWRl
bnRpdHkoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGZpeERvdWJsZU9yQm9vbGVhbkVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAg
aWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOb3RDZWxsKCkpIHsKKyAgICAgICAg
ICAgICAgICBmaXhEb3VibGVPckJvb2xlYW5FZGdlKG5vZGUtPmNoaWxkMSgpKTsKIAotICAgICAg
ICAgICAgaWYgKGlzSW50MzJPckJvb2xlYW5TcGVjdWxhdGlvbihub2RlLT5nZXRIZWFwUHJlZGlj
dGlvbigpKSAmJiBtX2dyYXBoLnJvdW5kU2hvdWxkU3BlY3VsYXRlSW50MzIobm9kZSwgRml4dXBQ
YXNzKSkgewotICAgICAgICAgICAgICAgIG5vZGUtPnNldFJlc3VsdChOb2RlUmVzdWx0SW50MzIp
OwotICAgICAgICAgICAgICAgIGlmIChieXRlY29kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2Rl
LT5hcml0aE5vZGVGbGFncygpKSkKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0QXJpdGhS
b3VuZGluZ01vZGUoQXJpdGg6OlJvdW5kaW5nTW9kZTo6SW50MzIpOwotICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0QXJpdGhSb3VuZGluZ01vZGUoQXJp
dGg6OlJvdW5kaW5nTW9kZTo6SW50MzJXaXRoTmVnYXRpdmVaZXJvQ2hlY2spOwotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBub2RlLT5zZXRSZXN1bHQoTm9kZVJlc3VsdERv
dWJsZSk7Ci0gICAgICAgICAgICAgICAgbm9kZS0+c2V0QXJpdGhSb3VuZGluZ01vZGUoQXJpdGg6
OlJvdW5kaW5nTW9kZTo6RG91YmxlKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAoaXNJbnQzMk9yQm9vbGVhblNwZWN1bGF0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkp
ICYmIG1fZ3JhcGgucm91bmRTaG91bGRTcGVjdWxhdGVJbnQzMihub2RlLCBGaXh1cFBhc3MpKSB7
CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldFJlc3VsdChOb2RlUmVzdWx0SW50MzIpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoYnl0ZWNvZGVDYW5JZ25vcmVOZWdhdGl2ZVplcm8obm9k
ZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRB
cml0aFJvdW5kaW5nTW9kZShBcml0aDo6Um91bmRpbmdNb2RlOjpJbnQzMik7CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldEFyaXRoUm91
bmRpbmdNb2RlKEFyaXRoOjpSb3VuZGluZ01vZGU6OkludDMyV2l0aE5lZ2F0aXZlWmVyb0NoZWNr
KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBub2RlLT5z
ZXRSZXN1bHQoTm9kZVJlc3VsdERvdWJsZSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNl
dEFyaXRoUm91bmRpbmdNb2RlKEFyaXRoOjpSb3VuZGluZ01vZGU6OkRvdWJsZSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIG5vZGUtPmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5l
cmF0ZSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBmaXhFZGdlPFVudHlw
ZWRVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAppbmRleCBhNjY1NDg0NjZkZWJk
Y2Q5MTU5NzNhNTgxZjVhNzNlNWE0NmRjMThlLi4wNTBiNjczYzc0MDM3MmY5ZWUwZWE5NzdlNTY0
MTNjZGE2ZDc4NDhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGVUeXBlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCkBA
IC0xNTUsMTAgKzE1NSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAg
bWFjcm8oQXJpdGhGUm91bmQsIE5vZGVSZXN1bHREb3VibGUgfCBOb2RlTXVzdEdlbmVyYXRlKSBc
CiAgICAgbWFjcm8oQXJpdGhQb3csIE5vZGVSZXN1bHREb3VibGUpIFwKICAgICBtYWNybyhBcml0
aFJhbmRvbSwgTm9kZVJlc3VsdERvdWJsZSB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICBtYWNy
byhBcml0aFJvdW5kLCBOb2RlUmVzdWx0TnVtYmVyKSBcCi0gICAgbWFjcm8oQXJpdGhGbG9vciwg
Tm9kZVJlc3VsdE51bWJlcikgXAotICAgIG1hY3JvKEFyaXRoQ2VpbCwgTm9kZVJlc3VsdE51bWJl
cikgXAotICAgIG1hY3JvKEFyaXRoVHJ1bmMsIE5vZGVSZXN1bHROdW1iZXIpIFwKKyAgICBtYWNy
byhBcml0aFJvdW5kLCBOb2RlUmVzdWx0TnVtYmVyIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAg
IG1hY3JvKEFyaXRoRmxvb3IsIE5vZGVSZXN1bHROdW1iZXIgfCBOb2RlTXVzdEdlbmVyYXRlKSBc
CisgICAgbWFjcm8oQXJpdGhDZWlsLCBOb2RlUmVzdWx0TnVtYmVyIHwgTm9kZU11c3RHZW5lcmF0
ZSkgXAorICAgIG1hY3JvKEFyaXRoVHJ1bmMsIE5vZGVSZXN1bHROdW1iZXIgfCBOb2RlTXVzdEdl
bmVyYXRlKSBcCiAgICAgbWFjcm8oQXJpdGhTcXJ0LCBOb2RlUmVzdWx0RG91YmxlIHwgTm9kZU11
c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEFyaXRoU2luLCBOb2RlUmVzdWx0RG91YmxlIHwgTm9k
ZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEFyaXRoQ29zLCBOb2RlUmVzdWx0RG91YmxlIHwg
Tm9kZU11c3RHZW5lcmF0ZSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5jcHAKaW5kZXggNTYyYzhhNGQwMDFhNjQyNWE3ZWJhOTZkNDFjNzQ1MjI4NDJmMjM3OC4u
Y2U1NDZlYmNiODgzNWY0Nzg0NDYzYjUwODRkODA2YjA4MDIzMzc0YSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCkBAIC00NDIsNiArNDQyLDU4IEBAIGRv
dWJsZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoVGFuKEV4ZWNTdGF0ZSogZXhlYywgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZE9wCiAgICAgcmV0dXJuIHRhbihhKTsKIH0KIAorRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aFJvdW5kKEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZEFyZ3VtZW50KQoreworICAgIFZNKiB2bSA9ICZleGVjLT52
bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisKKyAgICBKU1ZhbHVlIGFyZ3Vt
ZW50ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRBcmd1bWVudCk7CisgICAgZG91YmxlIHZhbHVl
T2ZBcmd1bWVudCA9IGFyZ3VtZW50LnRvTnVtYmVyKGV4ZWMpOworICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGpzUm91bmQodmFsdWVP
ZkFyZ3VtZW50KSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkFyaXRoRmxvb3IoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQXJndW1l
bnQpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUoKnZtKTsKKworICAgIEpTVmFsdWUgYXJndW1lbnQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZEFyZ3VtZW50KTsKKyAgICBkb3VibGUgdmFsdWVPZkFyZ3VtZW50ID0gYXJndW1lbnQudG9OdW1i
ZXIoZXhlYyk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNOdW1iZXIoZmxvb3IodmFsdWVPZkFyZ3VtZW50KSkpOworfQorCitFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoQ2VpbChFeGVjU3RhdGUqIGV4ZWMsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRBcmd1bWVudCkKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0o
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOworCisgICAgSlNWYWx1ZSBhcmd1bWVu
dCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQXJndW1lbnQpOworICAgIGRvdWJsZSB2YWx1ZU9m
QXJndW1lbnQgPSBhcmd1bWVudC50b051bWJlcihleGVjKTsKKyAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUo
KSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihjZWlsKHZhbHVlT2ZBcmd1
bWVudCkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0
aFRydW5jKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEFyZ3VtZW50KQor
eworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2
bSk7CisKKyAgICBKU1ZhbHVlIGFyZ3VtZW50ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRBcmd1
bWVudCk7CisgICAgZG91YmxlIHRydW5jYXRlZFZhbHVlT2ZBcmd1bWVudCA9IGFyZ3VtZW50LnRv
SW50ZWdlclByZXNlcnZlTmFOKGV4ZWMpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHRydW5jYXRlZFZhbHVlT2ZBcmd1bWVudCkp
OworfQorCiBzdGF0aWMgQUxXQVlTX0lOTElORSBFbmNvZGVkSlNWYWx1ZSBnZXRCeVZhbChFeGVj
U3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgdWludDMyX3QgaW5kZXgpCiB7CiAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgK
aW5kZXggODZlMTkxZTYzZTJkM2Y0NmRmNzEwNWI0MGE4ODBhYWViYjhkNzA2Mi4uNmFiNzY3NTdl
ODgxMmUyNzlkZjU3MDkwMTZmYTNmMmM4YjIzYzIyYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDExLCAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDExLCAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MSw2ICs2MSwxMCBAQCBkb3Vi
bGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aEZSb3VuZChFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkT3AxKQogZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhM
b2coRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSkgV1RGX0lOVEVSTkFMOwog
ZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhTaW4oRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZE9wMSkgV1RGX0lOVEVSTkFMOwogZG91YmxlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uQXJpdGhTcXJ0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEp
IFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQXJp
dGhSb3VuZChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aEZsb29yKEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkFyaXRoQ2VpbChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVS
TkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aFRydW5jKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHkpIFdURl9JTlRFUk5B
TDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxDZWxsKEV4
ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSkgV1RGX0lO
VEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbEFy
cmF5SW50KEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2UuY3BwCmluZGV4IDQ4NGZmMzhiMzFkYzMxZjQyZWViMzhjN2RiZThmMzZhY2Zk
OGNiZDAuLjA2OTRlMTM1ZGE0ZjYwNDcxMDlhMmY5MjFlMWIzODUyMzhkNmYzYjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2UuY3BwCkBAIC0zMTgsMTcgKzMxOCw2IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGNhc2UgQXJpdGhSb3VuZDoKLSAgICAgICAg
Y2FzZSBBcml0aEZsb29yOgotICAgICAgICBjYXNlIEFyaXRoQ2VpbDoKLSAgICAgICAgY2FzZSBB
cml0aFRydW5jOiB7Ci0gICAgICAgICAgICBpZiAoaXNJbnQzMk9yQm9vbGVhblNwZWN1bGF0aW9u
KG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpICYmIG1fZ3JhcGgucm91bmRTaG91bGRTcGVjdWxh
dGVJbnQzMihub2RlLCBtX3Bhc3MpKQotICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJl
ZGljdGlvbihTcGVjSW50MzJPbmx5KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0J5dGVjb2RlRG91YmxlKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0KICAgICAgICAgY2FzZSBBcml0aEFiczogewogICAgICAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgY2hpbGRQcmVkaWN0aW9uID0gbm9kZS0+Y2hpbGQxKCktPnBy
ZWRpY3Rpb24oKTsKICAgICAgICAgICAgIGlmIChpc0ludDMyT3JCb29sZWFuU3BlY3VsYXRpb24o
Y2hpbGRQcmVkaWN0aW9uKQpAQCAtNzc2LDYgKzc2NSwxOCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIEFyaXRoUm91bmQ6CisgICAgICAg
IGNhc2UgQXJpdGhGbG9vcjoKKyAgICAgICAgY2FzZSBBcml0aENlaWw6CisgICAgICAgIGNhc2Ug
QXJpdGhUcnVuYzogeworICAgICAgICAgICAgaWYgKGlzSW50MzJPckJvb2xlYW5TcGVjdWxhdGlv
bihtX2N1cnJlbnROb2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKQorICAgICAgICAgICAgICAgICYm
IG1fZ3JhcGgucm91bmRTaG91bGRTcGVjdWxhdGVJbnQzMihtX2N1cnJlbnROb2RlLCBtX3Bhc3Mp
KQorICAgICAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY0ludDMyT25seSk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjQnl0ZWNvZGVEb3Vi
bGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwogICAgICAgICBjYXNlIEFyaXRo
UmFuZG9tOiB7CiAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNEb3VibGVSZWFsKTsKICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtOTQ4LDEwICs5NDksNiBAQCBwcml2YXRlOgogICAgICAgICBj
YXNlIEFyaXRoTXVsOgogICAgICAgICBjYXNlIEFyaXRoRGl2OgogICAgICAgICBjYXNlIEFyaXRo
TW9kOgotICAgICAgICBjYXNlIEFyaXRoUm91bmQ6Ci0gICAgICAgIGNhc2UgQXJpdGhGbG9vcjoK
LSAgICAgICAgY2FzZSBBcml0aENlaWw6Ci0gICAgICAgIGNhc2UgQXJpdGhUcnVuYzoKICAgICAg
ICAgY2FzZSBBcml0aEFiczoKICAgICAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgY2FzZSBU
b1RoaXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCmluZGV4IDhhM2I4MzgwZDc3ZTE4OGViZGZlZTg5NmFiZjdlMjRmNjIzZTU1YTAuLjkzYjMy
NTYzOTJkM2MzODJkZTZhMWY0YzZiOTkzMTIyNGVlN2FmYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCkBAIC00OTE1LDEwMSArNDkxNSwx
MjkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoTW9kKE5vZGUqIG5vZGUpCiAK
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aFJvdW5kaW5nKE5vZGUqIG5vZGUpCiB7
Ci0gICAgQVNTRVJUKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBEb3VibGVSZXBVc2UpOwor
ICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gRG91YmxlUmVwVXNlKSB7CisgICAg
ICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICBGUFJSZWcgdmFsdWVGUFIgPSB2YWx1ZS5mcHIoKTsKIAotICAgIFNwZWN1bGF0ZURv
dWJsZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgIEZQUlJlZyB2YWx1
ZUZQUiA9IHZhbHVlLmZwcigpOworICAgICAgICBhdXRvIHNldFJlc3VsdCA9IFsmXSAoRlBSUmVn
IHJlc3VsdEZQUikgeworICAgICAgICAgICAgaWYgKHByb2R1Y2VzSW50ZWdlcihub2RlLT5hcml0
aFJvdW5kaW5nTW9kZSgpKSkgeworICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByb3VuZGVk
UmVzdWx0QXNJbnQzMih0aGlzKTsKKyAgICAgICAgICAgICAgICBGUFJUZW1wb3Jhcnkgc2NyYXRj
aCh0aGlzKTsKKyAgICAgICAgICAgICAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IHNjcmF0Y2guZnBy
KCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJvdW5kZWRSZXN1bHRBc0lu
dDMyLmdwcigpOworICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBmYWlsdXJl
Q2FzZXM7CisgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoQ29udmVydERvdWJsZVRvSW50MzIo
cmVzdWx0RlBSLCByZXN1bHRHUFIsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEZQUiwgc2hvdWxkQ2hl
Y2tOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhSb3VuZGluZ01vZGUoKSkpOworICAgICAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIG5vZGUsIGZhaWx1
cmVDYXNlcyk7CiAKLSAgICBhdXRvIHNldFJlc3VsdCA9IFsmXSAoRlBSUmVnIHJlc3VsdEZQUikg
ewotICAgICAgICBpZiAocHJvZHVjZXNJbnRlZ2VyKG5vZGUtPmFyaXRoUm91bmRpbmdNb2RlKCkp
KSB7Ci0gICAgICAgICAgICBHUFJUZW1wb3Jhcnkgcm91bmRlZFJlc3VsdEFzSW50MzIodGhpcyk7
Ci0gICAgICAgICAgICBGUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAgICAgICAgICAgIEZQ
UlJlZyBzY3JhdGNoRlBSID0gc2NyYXRjaC5mcHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByb3VuZGVkUmVzdWx0QXNJbnQzMi5ncHIoKTsKLSAgICAgICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7Ci0gICAgICAgICAgICBtX2ppdC5icmFuY2hDb252
ZXJ0RG91YmxlVG9JbnQzMihyZXN1bHRGUFIsIHJlc3VsdEdQUiwgZmFpbHVyZUNhc2VzLCBzY3Jh
dGNoRlBSLCBzaG91bGRDaGVja05lZ2F0aXZlWmVybyhub2RlLT5hcml0aFJvdW5kaW5nTW9kZSgp
KSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygp
LCBub2RlLCBmYWlsdXJlQ2FzZXMpOworICAgICAgICAgICAgICAgIGludDMyUmVzdWx0KHJlc3Vs
dEdQUiwgbm9kZSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBkb3VibGVS
ZXN1bHQocmVzdWx0RlBSLCBub2RlKTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAobV9qaXQu
c3VwcG9ydHNGbG9hdGluZ1BvaW50Um91bmRpbmcoKSkgeworICAgICAgICAgICAgc3dpdGNoIChu
b2RlLT5vcCgpKSB7CisgICAgICAgICAgICBjYXNlIEFyaXRoUm91bmQ6IHsKKyAgICAgICAgICAg
ICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgICAgIEZQUlJlZyBy
ZXN1bHRGUFIgPSByZXN1bHQuZnByKCk7CisgICAgICAgICAgICAgICAgaWYgKHByb2R1Y2VzSW50
ZWdlcihub2RlLT5hcml0aFJvdW5kaW5nTW9kZSgpKSAmJiAhc2hvdWxkQ2hlY2tOZWdhdGl2ZVpl
cm8obm9kZS0+YXJpdGhSb3VuZGluZ01vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgc3Rh
dGljIGNvbnN0IGRvdWJsZSBoYWxmQ29uc3RhbnQgPSAwLjU7CisgICAgICAgICAgICAgICAgICAg
IG1faml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoJmhhbGZDb25z
dGFudCksIHJlc3VsdEZQUik7CisgICAgICAgICAgICAgICAgICAgIG1faml0LmFkZERvdWJsZSh2
YWx1ZUZQUiwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuZmxvb3JEb3Vi
bGUocmVzdWx0RlBSLCByZXN1bHRGUFIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIG1faml0LmNlaWxEb3VibGUodmFsdWVGUFIsIHJlc3VsdEZQUik7Cisg
ICAgICAgICAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByZWFsUGFydCh0aGlzKTsKKyAgICAgICAg
ICAgICAgICAgICAgRlBSUmVnIHJlYWxQYXJ0RlBSID0gcmVhbFBhcnQuZnByKCk7CisgICAgICAg
ICAgICAgICAgICAgIG1faml0LnN1YkRvdWJsZShyZXN1bHRGUFIsIHZhbHVlRlBSLCByZWFsUGFy
dEZQUik7CisKKyAgICAgICAgICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7
CisgICAgICAgICAgICAgICAgICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gc2NyYXRjaC5mcHIoKTsK
KyAgICAgICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBoYWxmQ29uc3RhbnQgPSAw
LjU7CisgICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIoJmhhbGZDb25zdGFudCksIHNjcmF0Y2hGUFIpOworCisgICAgICAgICAg
ICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHNob3VsZFVzZUNlaWxlZCA9IG1faml0LmJyYW5j
aERvdWJsZShKSVRDb21waWxlcjo6RG91YmxlTGVzc1RoYW5PckVxdWFsLCByZWFsUGFydEZQUiwg
c2NyYXRjaEZQUik7CisgICAgICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25l
Q29uc3RhbnQgPSAtMS4wOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZvbmVDb25zdGFudCksIHNjcmF0Y2hGUFIpOwor
ICAgICAgICAgICAgICAgICAgICBtX2ppdC5hZGREb3VibGUoc2NyYXRjaEZQUiwgcmVzdWx0RlBS
KTsKKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkVXNlQ2VpbGVkLmxpbmsoJm1faml0KTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0UmVzdWx0KHJlc3VsdEZQUik7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpbnQz
MlJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGRv
dWJsZVJlc3VsdChyZXN1bHRGUFIsIG5vZGUpOwotICAgIH07CisgICAgICAgICAgICBjYXNlIEFy
aXRoRmxvb3I6IHsKKyAgICAgICAgICAgICAgICBGUFJUZW1wb3Jhcnkgcm91bmRlZCh0aGlzKTsK
KyAgICAgICAgICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gcm91bmRlZC5mcHIoKTsKKyAgICAg
ICAgICAgICAgICBtX2ppdC5mbG9vckRvdWJsZSh2YWx1ZUZQUiwgcmVzdWx0RlBSKTsKKyAgICAg
ICAgICAgICAgICBzZXRSZXN1bHQocmVzdWx0RlBSKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CiAKLSAgICBpZiAobV9qaXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50Um91
bmRpbmcoKSkgewotICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgY2FzZSBB
cml0aFJvdW5kOiB7Ci0gICAgICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAg
ICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdC5mcHIoKTsKLSAgICAgICAgICAgIGlm
IChwcm9kdWNlc0ludGVnZXIobm9kZS0+YXJpdGhSb3VuZGluZ01vZGUoKSkgJiYgIXNob3VsZENo
ZWNrTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoUm91bmRpbmdNb2RlKCkpKSB7Ci0gICAgICAgICAg
ICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBoYWxmQ29uc3RhbnQgPSAwLjU7Ci0gICAgICAgICAg
ICAgICAgbV9qaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmaGFs
ZkNvbnN0YW50KSwgcmVzdWx0RlBSKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5hZGREb3VibGUo
dmFsdWVGUFIsIHJlc3VsdEZQUik7Ci0gICAgICAgICAgICAgICAgbV9qaXQuZmxvb3JEb3VibGUo
cmVzdWx0RlBSLCByZXN1bHRGUFIpOwotICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGNhc2UgQXJpdGhDZWlsOiB7CisgICAgICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHJvdW5kZWQo
dGhpcyk7CisgICAgICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJvdW5kZWQuZnByKCk7
CiAgICAgICAgICAgICAgICAgbV9qaXQuY2VpbERvdWJsZSh2YWx1ZUZQUiwgcmVzdWx0RlBSKTsK
LSAgICAgICAgICAgICAgICBGUFJUZW1wb3JhcnkgcmVhbFBhcnQodGhpcyk7Ci0gICAgICAgICAg
ICAgICAgRlBSUmVnIHJlYWxQYXJ0RlBSID0gcmVhbFBhcnQuZnByKCk7Ci0gICAgICAgICAgICAg
ICAgbV9qaXQuc3ViRG91YmxlKHJlc3VsdEZQUiwgdmFsdWVGUFIsIHJlYWxQYXJ0RlBSKTsKLQot
ICAgICAgICAgICAgICAgIEZQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgICAgICAgICAg
ICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gc2NyYXRjaC5mcHIoKTsKLSAgICAgICAgICAgICAgICBz
dGF0aWMgY29uc3QgZG91YmxlIGhhbGZDb25zdGFudCA9IDAuNTsKLSAgICAgICAgICAgICAgICBt
X2ppdC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZoYWxmQ29uc3Rh
bnQpLCBzY3JhdGNoRlBSKTsKLQotICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHNo
b3VsZFVzZUNlaWxlZCA9IG1faml0LmJyYW5jaERvdWJsZShKSVRDb21waWxlcjo6RG91YmxlTGVz
c1RoYW5PckVxdWFsLCByZWFsUGFydEZQUiwgc2NyYXRjaEZQUik7Ci0gICAgICAgICAgICAgICAg
c3RhdGljIGNvbnN0IGRvdWJsZSBvbmVDb25zdGFudCA9IC0xLjA7Ci0gICAgICAgICAgICAgICAg
bV9qaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmb25lQ29uc3Rh
bnQpLCBzY3JhdGNoRlBSKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5hZGREb3VibGUoc2NyYXRj
aEZQUiwgcmVzdWx0RlBSKTsKLSAgICAgICAgICAgICAgICBzaG91bGRVc2VDZWlsZWQubGluaygm
bV9qaXQpOworICAgICAgICAgICAgICAgIHNldFJlc3VsdChyZXN1bHRGUFIpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNldFJlc3VsdChyZXN1
bHRGUFIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CiAKLSAgICAgICAgY2FzZSBB
cml0aEZsb29yOiB7Ci0gICAgICAgICAgICBGUFJUZW1wb3Jhcnkgcm91bmRlZCh0aGlzKTsKLSAg
ICAgICAgICAgIEZQUlJlZyByZXN1bHRGUFIgPSByb3VuZGVkLmZwcigpOwotICAgICAgICAgICAg
bV9qaXQuZmxvb3JEb3VibGUodmFsdWVGUFIsIHJlc3VsdEZQUik7Ci0gICAgICAgICAgICBzZXRS
ZXN1bHQocmVzdWx0RlBSKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAg
ICAgICAgY2FzZSBBcml0aFRydW5jOiB7CisgICAgICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHJv
dW5kZWQodGhpcyk7CisgICAgICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJvdW5kZWQu
ZnByKCk7CisgICAgICAgICAgICAgICAgbV9qaXQucm91bmRUb3dhcmRaZXJvRG91YmxlKHZhbHVl
RlBSLCByZXN1bHRGUFIpOworICAgICAgICAgICAgICAgIHNldFJlc3VsdChyZXN1bHRGUFIpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KIAotICAgICAgICBjYXNlIEFy
aXRoQ2VpbDogewotICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHJvdW5kZWQodGhpcyk7Ci0gICAg
ICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gcm91bmRlZC5mcHIoKTsKLSAgICAgICAgICAgIG1f
aml0LmNlaWxEb3VibGUodmFsdWVGUFIsIHJlc3VsdEZQUik7CisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwor
ICAgICAgICAgICAgRlBSUmVzdWx0IHJvdW5kZWRSZXN1bHRBc0RvdWJsZSh0aGlzKTsKKyAgICAg
ICAgICAgIEZQUlJlZyByZXN1bHRGUFIgPSByb3VuZGVkUmVzdWx0QXNEb3VibGUuZnByKCk7Cisg
ICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBBcml0aFJvdW5kKQorICAgICAgICAgICAgICAg
IGNhbGxPcGVyYXRpb24oanNSb3VuZCwgcmVzdWx0RlBSLCB2YWx1ZUZQUik7CisgICAgICAgICAg
ICBlbHNlIGlmIChub2RlLT5vcCgpID09IEFyaXRoRmxvb3IpCisgICAgICAgICAgICAgICAgY2Fs
bE9wZXJhdGlvbihmbG9vciwgcmVzdWx0RlBSLCB2YWx1ZUZQUik7CisgICAgICAgICAgICBlbHNl
IGlmIChub2RlLT5vcCgpID09IEFyaXRoQ2VpbCkKKyAgICAgICAgICAgICAgICBjYWxsT3BlcmF0
aW9uKGNlaWwsIHJlc3VsdEZQUiwgdmFsdWVGUFIpOworICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gQXJpdGhUcnVuYyk7CisgICAgICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbih0cnVuYywgcmVzdWx0RlBSLCB2YWx1ZUZQUik7CisgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBzZXRSZXN1bHQocmVzdWx0RlBSKTsKLSAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgICAgIGNhc2Ug
QXJpdGhUcnVuYzogewotICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHJvdW5kZWQodGhpcyk7Ci0g
ICAgICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gcm91bmRlZC5mcHIoKTsKLSAgICAgICAgICAg
IG1faml0LnJvdW5kVG93YXJkWmVyb0RvdWJsZSh2YWx1ZUZQUiwgcmVzdWx0RlBSKTsKLSAgICAg
ICAgICAgIHNldFJlc3VsdChyZXN1bHRGUFIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9CisgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCBub2RlLT5jaGlsZDEoKS51
c2VLaW5kKCkgPT0gVW50eXBlZFVzZSk7CiAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ugewot
ICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICBGUFJSZXN1bHQgcm91bmRlZFJlc3Vs
dEFzRG91YmxlKHRoaXMpOwotICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gcm91bmRlZFJlc3Vs
dEFzRG91YmxlLmZwcigpOwotICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBBcml0aFJvdW5kKQot
ICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihqc1JvdW5kLCByZXN1bHRGUFIsIHZhbHVlRlBSKTsK
LSAgICAgICAgZWxzZSBpZiAobm9kZS0+b3AoKSA9PSBBcml0aEZsb29yKQotICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbihmbG9vciwgcmVzdWx0RlBSLCB2YWx1ZUZQUik7Ci0gICAgICAgIGVsc2Ug
aWYgKG5vZGUtPm9wKCkgPT0gQXJpdGhDZWlsKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihj
ZWlsLCByZXN1bHRGUFIsIHZhbHVlRlBSKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBB
U1NFUlQobm9kZS0+b3AoKSA9PSBBcml0aFRydW5jKTsKLSAgICAgICAgICAgIGNhbGxPcGVyYXRp
b24odHJ1bmMsIHJlc3VsdEZQUiwgdmFsdWVGUFIpOwotICAgICAgICB9Ci0gICAgICAgIG1faml0
LmV4Y2VwdGlvbkNoZWNrKCk7Ci0gICAgICAgIHNldFJlc3VsdChyZXN1bHRGUFIpOworICAgIEpT
VmFsdWVPcGVyYW5kIGFyZ3VtZW50KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBKU1ZhbHVl
UmVncyBhcmd1bWVudFJlZ3MgPSBhcmd1bWVudC5qc1ZhbHVlUmVncygpOworI2lmIFVTRShKU1ZB
TFVFNjQpCisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVzdWx0LmdwcigpKTsKKyNlbHNlCisgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0
aGlzKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVzdWx0UGF5
bG9hZC5ncHIoKSwgcmVzdWx0VGFnLmdwcigpKTsKKyNlbmRpZgorICAgIGZsdXNoUmVnaXN0ZXJz
KCk7CisgICAgSl9KSVRPcGVyYXRpb25fRUogb3BlcmF0aW9uID0gbnVsbHB0cjsKKyAgICBpZiAo
bm9kZS0+b3AoKSA9PSBBcml0aFJvdW5kKQorICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25B
cml0aFJvdW5kOworICAgIGVsc2UgaWYgKG5vZGUtPm9wKCkgPT0gQXJpdGhGbG9vcikKKyAgICAg
ICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uQXJpdGhGbG9vcjsKKyAgICBlbHNlIGlmIChub2RlLT5v
cCgpID09IEFyaXRoQ2VpbCkKKyAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uQXJpdGhDZWls
OworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBBcml0aFRydW5jKTsK
KyAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uQXJpdGhUcnVuYzsKICAgICB9CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb24sIHJlc3VsdFJlZ3MsIGFyZ3VtZW50UmVncyk7CisgICAgbV9q
aXQuZXhjZXB0aW9uQ2hlY2soKTsKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUp
OwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhTaW4oTm9kZSogbm9kZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAppbmRleCA2
ZDNkZmFiM2FlZTYzYzBjNTE4NTM2ZGRiYjYwMWRhNzgwNzU2YzBmLi5mNGYxZGFiZjZlMThjZjM1
ZDU1NDVmZmI0ZTE2NTkyMDQyMTYxZWYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvQjMuY3BwCkBAIC0yMjYwLDY3ICsyMjYwLDkxIEBAIHByaXZhdGU6CiAK
ICAgICB2b2lkIGNvbXBpbGVBcml0aFJvdW5kKCkKICAgICB7Ci0gICAgICAgIExWYWx1ZSByZXN1
bHQgPSBudWxscHRyOworICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0g
RG91YmxlUmVwVXNlKSB7CisgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbnVsbHB0cjsKKyAg
ICAgICAgICAgIGlmIChwcm9kdWNlc0ludGVnZXIobV9ub2RlLT5hcml0aFJvdW5kaW5nTW9kZSgp
KSAmJiAhc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obV9ub2RlLT5hcml0aFJvdW5kaW5nTW9kZSgp
KSkgeworICAgICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0RvdWJsZShtX25vZGUtPmNo
aWxkMSgpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtX291dC5kb3VibGVGbG9vcihtX291
dC5kb3VibGVBZGQodmFsdWUsIG1fb3V0LmNvbnN0RG91YmxlKDAuNSkpKTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgcmVhbFBhcnRJc01vcmVUaGFu
SGFsZiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29u
dGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKIAotICAgICAgICBpZiAocHJvZHVjZXNJbnRl
Z2VyKG1fbm9kZS0+YXJpdGhSb3VuZGluZ01vZGUoKSkgJiYgIXNob3VsZENoZWNrTmVnYXRpdmVa
ZXJvKG1fbm9kZS0+YXJpdGhSb3VuZGluZ01vZGUoKSkpIHsKLSAgICAgICAgICAgIExWYWx1ZSB2
YWx1ZSA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIHJlc3VsdCA9
IG1fb3V0LmRvdWJsZUZsb29yKG1fb3V0LmRvdWJsZUFkZCh2YWx1ZSwgbV9vdXQuY29uc3REb3Vi
bGUoMC41KSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgTEJhc2ljQmxvY2sgcmVh
bFBhcnRJc01vcmVUaGFuSGFsZiA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAgICAgICBMQmFz
aWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICAgICAgICAg
IExWYWx1ZSB2YWx1ZSA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAg
ICAgICBMVmFsdWUgaW50ZWdlclZhbHVlID0gbV9vdXQuZG91YmxlQ2VpbCh2YWx1ZSk7CisgICAg
ICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW50ZWdlclZhbHVlUmVzdWx0ID0gbV9vdXQuYW5j
aG9yKGludGVnZXJWYWx1ZSk7CiAKLSAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0RvdWJs
ZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIExWYWx1ZSBpbnRlZ2VyVmFsdWUgPSBt
X291dC5kb3VibGVDZWlsKHZhbHVlKTsKLSAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGludGVn
ZXJWYWx1ZVJlc3VsdCA9IG1fb3V0LmFuY2hvcihpbnRlZ2VyVmFsdWUpOworICAgICAgICAgICAg
ICAgIExWYWx1ZSByZWFsUGFydCA9IG1fb3V0LmRvdWJsZVN1YihpbnRlZ2VyVmFsdWUsIHZhbHVl
KTsKIAotICAgICAgICAgICAgTFZhbHVlIHJlYWxQYXJ0ID0gbV9vdXQuZG91YmxlU3ViKGludGVn
ZXJWYWx1ZSwgdmFsdWUpOworICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5kb3Vi
bGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkKHJlYWxQYXJ0LCBtX291dC5jb25zdERvdWJsZSgwLjUp
KSwgdW5zdXJlKHJlYWxQYXJ0SXNNb3JlVGhhbkhhbGYpLCB1bnN1cmUoY29udGludWF0aW9uKSk7
CiAKLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5kb3VibGVHcmVhdGVyVGhhbk9yVW5v
cmRlcmVkKHJlYWxQYXJ0LCBtX291dC5jb25zdERvdWJsZSgwLjUpKSwgdW5zdXJlKHJlYWxQYXJ0
SXNNb3JlVGhhbkhhbGYpLCB1bnN1cmUoY29udGludWF0aW9uKSk7CisgICAgICAgICAgICAgICAg
TEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhyZWFsUGFydElzTW9yZVRoYW5I
YWxmLCBjb250aW51YXRpb24pOworICAgICAgICAgICAgICAgIExWYWx1ZSBpbnRlZ2VyVmFsdWVS
b3VuZGVkRG93biA9IG1fb3V0LmRvdWJsZVN1YihpbnRlZ2VyVmFsdWUsIG1fb3V0LmNvbnN0RG91
YmxlKDEpKTsKKyAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBpbnRlZ2VyVmFsdWVSb3Vu
ZGVkRG93blJlc3VsdCA9IG1fb3V0LmFuY2hvcihpbnRlZ2VyVmFsdWVSb3VuZGVkRG93bik7Cisg
ICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwogCi0gICAgICAgICAgICBM
QmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHJlYWxQYXJ0SXNNb3JlVGhhbkhh
bGYsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICBMVmFsdWUgaW50ZWdlclZhbHVlUm91bmRl
ZERvd24gPSBtX291dC5kb3VibGVTdWIoaW50ZWdlclZhbHVlLCBtX291dC5jb25zdERvdWJsZSgx
KSk7Ci0gICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBpbnRlZ2VyVmFsdWVSb3VuZGVkRG93blJl
c3VsdCA9IG1fb3V0LmFuY2hvcihpbnRlZ2VyVmFsdWVSb3VuZGVkRG93bik7Ci0gICAgICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhj
b250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtX291dC5w
aGkoRG91YmxlLCBpbnRlZ2VyVmFsdWVSZXN1bHQsIGludGVnZXJWYWx1ZVJvdW5kZWREb3duUmVz
dWx0KTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQucGhpKERv
dWJsZSwgaW50ZWdlclZhbHVlUmVzdWx0LCBpbnRlZ2VyVmFsdWVSb3VuZGVkRG93blJlc3VsdCk7
CisgICAgICAgICAgICBpZiAocHJvZHVjZXNJbnRlZ2VyKG1fbm9kZS0+YXJpdGhSb3VuZGluZ01v
ZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBMVmFsdWUgaW50ZWdlclZhbHVlID0gY29udmVydERv
dWJsZVRvSW50MzIocmVzdWx0LCBzaG91bGRDaGVja05lZ2F0aXZlWmVybyhtX25vZGUtPmFyaXRo
Um91bmRpbmdNb2RlKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihpbnRlZ2VyVmFsdWUp
OworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgc2V0RG91YmxlKHJlc3VsdCk7
CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAocHJvZHVjZXNJ
bnRlZ2VyKG1fbm9kZS0+YXJpdGhSb3VuZGluZ01vZGUoKSkpIHsKLSAgICAgICAgICAgIExWYWx1
ZSBpbnRlZ2VyVmFsdWUgPSBjb252ZXJ0RG91YmxlVG9JbnQzMihyZXN1bHQsIHNob3VsZENoZWNr
TmVnYXRpdmVaZXJvKG1fbm9kZS0+YXJpdGhSb3VuZGluZ01vZGUoKSkpOwotICAgICAgICAgICAg
c2V0SW50MzIoaW50ZWdlclZhbHVlKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBzZXRE
b3VibGUocmVzdWx0KTsKKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIG1fbm9k
ZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UpOworICAgICAgICBMVmFsdWUgYXJn
dW1lbnQgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBzZXRKU1ZhbHVl
KHZtQ2FsbChJbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkFyaXRoUm91bmQpLCBtX2Nh
bGxGcmFtZSwgYXJndW1lbnQpKTsKICAgICB9CiAKICAgICB2b2lkIGNvbXBpbGVBcml0aEZsb29y
KCkKICAgICB7Ci0gICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxk
MSgpKTsKLSAgICAgICAgTFZhbHVlIGludGVnZXJWYWx1ZSA9IG1fb3V0LmRvdWJsZUZsb29yKHZh
bHVlKTsKLSAgICAgICAgaWYgKHByb2R1Y2VzSW50ZWdlcihtX25vZGUtPmFyaXRoUm91bmRpbmdN
b2RlKCkpKQotICAgICAgICAgICAgc2V0SW50MzIoY29udmVydERvdWJsZVRvSW50MzIoaW50ZWdl
clZhbHVlLCBzaG91bGRDaGVja05lZ2F0aXZlWmVybyhtX25vZGUtPmFyaXRoUm91bmRpbmdNb2Rl
KCkpKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNldERvdWJsZShpbnRlZ2VyVmFsdWUp
OworICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gRG91YmxlUmVwVXNl
KSB7CisgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgICAgICBMVmFsdWUgaW50ZWdlclZhbHVlID0gbV9vdXQuZG91YmxlRmxvb3Io
dmFsdWUpOworICAgICAgICAgICAgaWYgKHByb2R1Y2VzSW50ZWdlcihtX25vZGUtPmFyaXRoUm91
bmRpbmdNb2RlKCkpKQorICAgICAgICAgICAgICAgIHNldEludDMyKGNvbnZlcnREb3VibGVUb0lu
dDMyKGludGVnZXJWYWx1ZSwgc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obV9ub2RlLT5hcml0aFJv
dW5kaW5nTW9kZSgpKSkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNldERv
dWJsZShpbnRlZ2VyVmFsdWUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQo
KSA9PSBVbnR5cGVkVXNlKTsKKyAgICAgICAgTFZhbHVlIGFyZ3VtZW50ID0gbG93SlNWYWx1ZSht
X25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG1fb3V0
Lm9wZXJhdGlvbihvcGVyYXRpb25Bcml0aEZsb29yKSwgbV9jYWxsRnJhbWUsIGFyZ3VtZW50KSk7
CiAgICAgfQogCiAgICAgdm9pZCBjb21waWxlQXJpdGhDZWlsKCkKICAgICB7Ci0gICAgICAgIExW
YWx1ZSB2YWx1ZSA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgTFZhbHVl
IGludGVnZXJWYWx1ZSA9IG1fb3V0LmRvdWJsZUNlaWwodmFsdWUpOwotICAgICAgICBpZiAocHJv
ZHVjZXNJbnRlZ2VyKG1fbm9kZS0+YXJpdGhSb3VuZGluZ01vZGUoKSkpCi0gICAgICAgICAgICBz
ZXRJbnQzMihjb252ZXJ0RG91YmxlVG9JbnQzMihpbnRlZ2VyVmFsdWUsIHNob3VsZENoZWNrTmVn
YXRpdmVaZXJvKG1fbm9kZS0+YXJpdGhSb3VuZGluZ01vZGUoKSkpKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgc2V0RG91YmxlKGludGVnZXJWYWx1ZSk7CisgICAgICAgIGlmIChtX25vZGUt
PmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBEb3VibGVSZXBVc2UpIHsKKyAgICAgICAgICAgIExWYWx1
ZSB2YWx1ZSA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIExWYWx1
ZSBpbnRlZ2VyVmFsdWUgPSBtX291dC5kb3VibGVDZWlsKHZhbHVlKTsKKyAgICAgICAgICAgIGlm
IChwcm9kdWNlc0ludGVnZXIobV9ub2RlLT5hcml0aFJvdW5kaW5nTW9kZSgpKSkKKyAgICAgICAg
ICAgICAgICBzZXRJbnQzMihjb252ZXJ0RG91YmxlVG9JbnQzMihpbnRlZ2VyVmFsdWUsIHNob3Vs
ZENoZWNrTmVnYXRpdmVaZXJvKG1fbm9kZS0+YXJpdGhSb3VuZGluZ01vZGUoKSkpKTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzZXREb3VibGUoaW50ZWdlclZhbHVlKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgs
IG1fbm9kZSwgbV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSk7CisgICAg
ICAgIExWYWx1ZSBhcmd1bWVudCA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgIHNldEpTVmFsdWUodm1DYWxsKEludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uQXJp
dGhDZWlsKSwgbV9jYWxsRnJhbWUsIGFyZ3VtZW50KSk7CiAgICAgfQogCiAgICAgdm9pZCBjb21w
aWxlQXJpdGhUcnVuYygpCiAgICAgewotICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dEb3VibGUo
bV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5kb3VibGVU
cnVuYyh2YWx1ZSk7Ci0gICAgICAgIGlmIChwcm9kdWNlc0ludGVnZXIobV9ub2RlLT5hcml0aFJv
dW5kaW5nTW9kZSgpKSkKLSAgICAgICAgICAgIHNldEludDMyKGNvbnZlcnREb3VibGVUb0ludDMy
KHJlc3VsdCwgc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obV9ub2RlLT5hcml0aFJvdW5kaW5nTW9k
ZSgpKSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXREb3VibGUocmVzdWx0KTsKKyAg
ICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IERvdWJsZVJlcFVzZSkgewor
ICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LmRvdWJsZVRydW5jKHZhbHVlKTsKKyAg
ICAgICAgICAgIGlmIChwcm9kdWNlc0ludGVnZXIobV9ub2RlLT5hcml0aFJvdW5kaW5nTW9kZSgp
KSkKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihjb252ZXJ0RG91YmxlVG9JbnQzMihyZXN1bHQs
IHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG1fbm9kZS0+YXJpdGhSb3VuZGluZ01vZGUoKSkpKTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzZXREb3VibGUocmVzdWx0KTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgs
IG1fbm9kZSwgbV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSk7CisgICAg
ICAgIExWYWx1ZSBhcmd1bWVudCA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgIHNldEpTVmFsdWUodm1DYWxsKEludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uQXJp
dGhUcnVuYyksIG1fY2FsbEZyYW1lLCBhcmd1bWVudCkpOwogICAgIH0KIAogICAgIHZvaWQgY29t
cGlsZUFyaXRoU3FydCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCmluZGV4IDA1ZjdmNDE5NTA5MmFjMzM1
ZTAwOGM5YjNlMjhhYzNlNTQzYWQ5ZWEuLjgzZTJmYTJkMjhkM2UzYmUyMjFiOGI2ZTdlMmE3NDk1
NTFlMzZjNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCkBAIC01Miw2ICs1Miw3IEBACiAjaW5jbHVk
ZSAiSlNUeXBlZEFycmF5cy5oIgogI2luY2x1ZGUgIkpTV0FTTU1vZHVsZS5oIgogI2luY2x1ZGUg
IkxMSW50RGF0YS5oIgorI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAi
UGFyc2VyRXJyb3IuaCIKICNpbmNsdWRlICJQcm9maWxlckRhdGFiYXNlLmgiCiAjaW5jbHVkZSAi
U2FtcGxpbmdQcm9maWxlci5oIgpAQCAtNjgsNiArNjksNyBAQAogI2luY2x1ZGUgPHN0ZGxpYi5o
PgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHRocmVhZD4KKyNpbmNsdWRlIDx0eXBl
X3RyYWl0cz4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvTWFp
blRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgpAQCAtNjEyLDYg
KzYxNCw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTm9G
VEwoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvbk5vT1NSRXhpdEZ1enppbmcoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvbk9wdGltaXplTmV4dEludm9jYXRpb24oRXhlY1N0YXRlKik7
CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbk51bWJlck9mREZH
Q29tcGlsZXMoRXhlY1N0YXRlKik7CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBmdW5jdGlvbkpTQ09wdGlvbnMoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJlb3B0aW1pemF0aW9uUmV0cnlDb3VudChFeGVjU3RhdGUq
KTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uVHJhbnNmZXJB
cnJheUJ1ZmZlcihFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uRmFpbE5leHROZXdDb2RlQmxvY2soRXhlY1N0YXRlKik7CkBAIC04MTcsNiAr
ODIwLDcgQEAgcHJvdGVjdGVkOgogICAgICAgICBhZGRGdW5jdGlvbih2bSwgIm5vRlRMIiwgZnVu
Y3Rpb25Ob0ZUTCwgMSk7CiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAibm9PU1JFeGl0RnV6emlu
ZyIsIGZ1bmN0aW9uTm9PU1JFeGl0RnV6emluZywgMSk7CiAgICAgICAgIGFkZEZ1bmN0aW9uKHZt
LCAibnVtYmVyT2ZERkdDb21waWxlcyIsIGZ1bmN0aW9uTnVtYmVyT2ZERkdDb21waWxlcywgMSk7
CisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAianNjT3B0aW9ucyIsIGZ1bmN0aW9uSlNDT3B0aW9u
cywgMCk7CiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAib3B0aW1pemVOZXh0SW52b2NhdGlvbiIs
IGZ1bmN0aW9uT3B0aW1pemVOZXh0SW52b2NhdGlvbiwgMSk7CiAgICAgICAgIGFkZEZ1bmN0aW9u
KHZtLCAicmVvcHRpbWl6YXRpb25SZXRyeUNvdW50IiwgZnVuY3Rpb25SZW9wdGltaXphdGlvblJl
dHJ5Q291bnQsIDEpOwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgInRyYW5zZmVyQXJyYXlCdWZm
ZXIiLCBmdW5jdGlvblRyYW5zZmVyQXJyYXlCdWZmZXIsIDEpOwpAQCAtMTcxNSw2ICsxNzE5LDI1
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25OdW1iZXJPZkRGR0NvbXBp
bGVzKEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG51bWJlck9m
REZHQ29tcGlsZXMoZXhlYykpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGU+Cit0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjppc19mdW5kYW1lbnRhbDxWYWx1ZVR5cGU+Ojp2
YWx1ZT46OnR5cGUgYWRkT3B0aW9uKFZNJiwgSlNPYmplY3QqLCBJZGVudGlmaWVyLCBWYWx1ZVR5
cGUpIHsgfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGU+Cit0eXBlbmFtZSBzdGQ6OmVu
YWJsZV9pZjxzdGQ6OmlzX2Z1bmRhbWVudGFsPFZhbHVlVHlwZT46OnZhbHVlPjo6dHlwZSBhZGRP
cHRpb24oVk0mIHZtLCBKU09iamVjdCogb3B0aW9uc09iamVjdCwgSWRlbnRpZmllciBpZGVudGlm
aWVyLCBWYWx1ZVR5cGUgdmFsdWUpCit7CisgICAgb3B0aW9uc09iamVjdC0+cHV0RGlyZWN0KHZt
LCBpZGVudGlmaWVyLCBKU1ZhbHVlKHZhbHVlKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgZnVuY3Rpb25KU0NPcHRpb25zKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU09i
amVjdCogb3B0aW9uc09iamVjdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOworI2RlZmlu
ZSBGT1JfRUFDSF9PUFRJT04odHlwZV8sIG5hbWVfLCBkZWZhdWx0VmFsdWVfLCBhdmFpbGFiaWxp
dHlfLCBkZXNjcmlwdGlvbl8pIFwKKyAgICBhZGRPcHRpb24oZXhlYy0+dm0oKSwgb3B0aW9uc09i
amVjdCwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAjbmFtZV8pLCBPcHRpb25zOjpuYW1l
XygpKTsKKyAgICBKU0NfT1BUSU9OUyhGT1JfRUFDSF9PUFRJT04pCisjdW5kZWYgRk9SX0VBQ0hf
T1BUSU9OCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShvcHRpb25zT2JqZWN0KTsKK30KKwog
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblJlb3B0aW1pemF0aW9uUmV0cnlD
b3VudChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8
IDEpCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmlu
ZGV4IGNjYTFmNzA5NDk2YzcyOThiOTI1M2E3MjE5YTI1NWM2ODhkMWVmMTkuLmVjZjFlZjgwMWRh
MWMxYWJkNjBmYmU2NWQ0OGRkZTYwNmViMzQzYWIgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdl
TG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTYtMDktMTkg
IEJlbmphbWluIFBvdWxhaW4gIDxicG91bGFpbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0pTQ10g
TWFrZSB0aGUgcm91bmRpbmctcmVsYXRlZCBub2RlcyBzdXBwb3J0IGFueSB0eXBlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjE4OTUKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0cmVzcy9hcml0aC1j
ZWlsLW9uLXZhcmlvdXMtdHlwZXMuanM6IEFkZGVkLgorICAgICAgICAqIHN0cmVzcy9hcml0aC1m
bG9vci1vbi12YXJpb3VzLXR5cGVzLmpzOiBBZGRlZC4KKyAgICAgICAgKiBzdHJlc3MvYXJpdGgt
cm91bmQtb24tdmFyaW91cy10eXBlcy5qczogQWRkZWQuCisgICAgICAgICogc3RyZXNzL2FyaXRo
LXRydW5jLW9uLXZhcmlvdXMtdHlwZXMuanM6IEFkZGVkLgorCiAyMDE2LTA5LTE4ICBZdXN1a2Ug
U3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAgICAgIFtKU0NdIERvIG5vdCBu
ZWVkIHRvIHVzZSBkZWZpbmVQcm9wZXJ0eSB0byBkZWZpbmUgbWV0aG9kcyBmb3Igb2JqZWN0IGxp
dGVyYWxzCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9hcml0aC1jZWlsLW9uLXZhcmlvdXMt
dHlwZXMuanMgYi9KU1Rlc3RzL3N0cmVzcy9hcml0aC1jZWlsLW9uLXZhcmlvdXMtdHlwZXMuanMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uY2ZiNGEzMWNjYzI5MGVmMDUwODkyMTRhMGRkY2E5MTY2MjVlMzVjYQotLS0g
L2Rldi9udWxsCisrKyBiL0pTVGVzdHMvc3RyZXNzL2FyaXRoLWNlaWwtb24tdmFyaW91cy10eXBl
cy5qcwpAQCAtMCwwICsxLDMwNiBAQAorInVzZSBzdHJpY3QiOworCitsZXQgdmFsaWRJbnB1dFRl
c3RDYXNlcyA9IFsKKyAgICAvLyBpbnB1dCBhcyBzdHJpbmcsIGV4cGVjdGVkIHJlc3VsdCBhcyBz
dHJpbmcuCisgICAgWyJ1bmRlZmluZWQiLCAiTmFOIl0sCisgICAgWyJudWxsIiwgIjAiXSwKKyAg
ICBbIjAiLCAiMCJdLAorICAgIFsiLTAuIiwgIi0wIl0sCisgICAgWyIwLjUiLCAiMSJdLAorICAg
IFsiLTAuNSIsICItMCJdLAorICAgIFsiNCIsICI0Il0sCisgICAgWyI0Mi4xIiwgIjQzIl0sCisg
ICAgWyI0Mi41IiwgIjQzIl0sCisgICAgWyI0Mi45IiwgIjQzIl0sCisgICAgWyItNDIuMSIsICIt
NDIiXSwKKyAgICBbIi00Mi41IiwgIi00MiJdLAorICAgIFsiLTQyLjkiLCAiLTQyIl0sCisgICAg
WyJNYXRoLlBJIiwgIjQiXSwKKyAgICBbIkluZmluaXR5IiwgIkluZmluaXR5Il0sCisgICAgWyIt
SW5maW5pdHkiLCAiLUluZmluaXR5Il0sCisgICAgWyJOYU4iLCAiTmFOIl0sCisgICAgWyJcIldl
YktpdFwiIiwgIk5hTiJdLAorICAgIFsiXCI0XCIiLCAiNCJdLAorICAgIFsiXCI0Mi41XCIiLCAi
NDMiXSwKKyAgICBbInsgdmFsdWVPZjogKCkgPT4geyByZXR1cm4gNDsgfSB9IiwgIjQiXSwKKyAg
ICBbInsgdmFsdWVPZjogKCkgPT4geyByZXR1cm4gMDsgfSB9IiwgIjAiXSwKKyAgICBbInsgdmFs
dWVPZjogKCkgPT4geyByZXR1cm4gLTA7IH0gfSIsICItMCJdLAorICAgIFsieyB2YWx1ZU9mOiAo
KSA9PiB7IHJldHVybiAwLjU7IH0gfSIsICIxIl0sCisgICAgWyJ7IHZhbHVlT2Y6ICgpID0+IHsg
cmV0dXJuIC0wLjU7IH0gfSIsICItMCJdLAorICAgIFsieyB2YWx1ZU9mOiAoKSA9PiB7IHJldHVy
biBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUjsgfSB9IiwgIi05MDA3MTk5MjU0NzQwOTkxIl0sCisg
ICAgWyJ7IHZhbHVlT2Y6ICgpID0+IHsgcmV0dXJuIE51bWJlci5NQVhfU0FGRV9JTlRFR0VSOyB9
IH0iLCAiOTAwNzE5OTI1NDc0MDk5MSJdLAorICAgIFsieyB2YWx1ZU9mOiAoKSA9PiB7IHJldHVy
biAweDgwMDAwMDAwfDA7IH0gfSIsICItMjE0NzQ4MzY0OCJdLAorICAgIFsieyB2YWx1ZU9mOiAo
KSA9PiB7IHJldHVybiAweDdmZmZmZmZmfDA7IH0gfSIsICIyMTQ3NDgzNjQ3Il0sCisgICAgWyJ7
IHZhbHVlT2Y6ICgpID0+IHsgcmV0dXJuICgweDgwMDAwMDAwfDApIC0gMC41OyB9IH0iLCAiLTIx
NDc0ODM2NDgiXSwKKyAgICBbInsgdmFsdWVPZjogKCkgPT4geyByZXR1cm4gKDB4N2ZmZmZmZmZ8
MCkgKyAwLjU7IH0gfSIsICIyMTQ3NDgzNjQ4Il0sCitdOworCitsZXQgdmFsaWRJbnB1dFR5cGVk
VGVzdENhc2VzID0gdmFsaWRJbnB1dFRlc3RDYXNlcy5tYXAoKGVsZW1lbnQpID0+IHsgcmV0dXJu
IFtldmFsKCIoIiArIGVsZW1lbnRbMF0gKyAiKSIpLCBldmFsKGVsZW1lbnRbMV0pXSB9KTsKKwor
ZnVuY3Rpb24gaXNJZGVudGljYWwocmVzdWx0LCBleHBlY3RlZCkKK3sKKyAgICBpZiAoZXhwZWN0
ZWQgPT09IGV4cGVjdGVkKSB7CisgICAgICAgIGlmIChyZXN1bHQgIT09IGV4cGVjdGVkKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWV4cGVjdGVkICYmICgxIC8gZXhw
ZWN0ZWQpICE9PSAoMSAvIHJlc3VsdCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiByZXN1bHQgIT09IHJlc3VsdDsK
K30KKworCisvLyBUZXN0IE1hdGguY2VpbCgpIHdpdGhvdXQgYXJndW1lbnRzLgorZnVuY3Rpb24g
b3BhcXVlQ2VpbE5vQXJndW1lbnQoKSB7CisgICAgcmV0dXJuIE1hdGguY2VpbCgpOworfQorbm9J
bmxpbmUob3BhcXVlQ2VpbE5vQXJndW1lbnQpOworbm9PU1JFeGl0RnV6emluZyhvcGFxdWVDZWls
Tm9Bcmd1bWVudCk7CisKK2Z1bmN0aW9uIHRlc3ROb0FyZ3VtZW50KCkgeworICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgbGV0IG91dHB1dCA9IG9wYXF1ZUNlaWxO
b0FyZ3VtZW50KCk7CisgICAgICAgIGlmICghaXNJZGVudGljYWwob3V0cHV0LCBOYU4pKSB7Cisg
ICAgICAgICAgICB0aHJvdyAiRmFpbGVkIG9wYXF1ZUNlaWxOb0FyZ3VtZW50IjsKKyAgICAgICAg
fQorICAgIH0KKyAgICBpZiAobnVtYmVyT2ZERkdDb21waWxlcyhvcGFxdWVDZWlsTm9Bcmd1bWVu
dCkgPiAxKQorICAgICAgICB0aHJvdyAiVGhlIGNhbGwgd2l0aG91dCBhcmd1bWVudHMgc2hvdWxk
IG5ldmVyIGV4aXQuIjsKK30KK3Rlc3ROb0FyZ3VtZW50KCk7CisKKworLy8gVGVzdCBNYXRoLmNl
aWwoKSB3aXRoIGEgdmVyeSBwb2x5bW9ycGhpYyBpbnB1dC4gQWxsIHRlc3QgY2FzZXMgYXJlIHNl
ZW4gYXQgZWFjaCBpdGVyYXRpb24uCitmdW5jdGlvbiBvcGFxdWVBbGxUeXBlc0NlaWwoYXJndW1l
bnQpIHsKKyAgICByZXR1cm4gTWF0aC5jZWlsKGFyZ3VtZW50KTsKK30KK25vSW5saW5lKG9wYXF1
ZUFsbFR5cGVzQ2VpbCk7Citub09TUkV4aXRGdXp6aW5nKG9wYXF1ZUFsbFR5cGVzQ2VpbCk7CisK
K2Z1bmN0aW9uIHRlc3RBbGxUeXBlc0NhbGwoKSB7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAx
ZTM7ICsraSkgeworICAgICAgICBmb3IgKGxldCB0ZXN0Q2FzZUlucHV0IG9mIHZhbGlkSW5wdXRU
eXBlZFRlc3RDYXNlcykgeworICAgICAgICAgICAgbGV0IG91dHB1dCA9IG9wYXF1ZUFsbFR5cGVz
Q2VpbCh0ZXN0Q2FzZUlucHV0WzBdKTsKKyAgICAgICAgICAgIGlmICghaXNJZGVudGljYWwob3V0
cHV0LCB0ZXN0Q2FzZUlucHV0WzFdKSkKKyAgICAgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRl
c3RBbGxUeXBlc0NhbGwgZm9yIGlucHV0ICIgKyB0ZXN0Q2FzZUlucHV0WzBdICsgIiBleHBlY3Rl
ZCAiICsgdGVzdENhc2VJbnB1dFsxXSArICIgZ290ICIgKyBvdXRwdXQ7CisgICAgICAgIH0KKyAg
ICB9CisgICAgaWYgKG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVlQWxsVHlwZXNDZWlsKSA+IDMp
CisgICAgICAgIHRocm93ICJXZSBzaG91bGQgaGF2ZSBkZXRlY3RlZCBjZWlsKCkgd2FzIHBvbHlt
b3JwaGljIGFuZCBnZW5lcmF0ZWQgYSBnZW5lcmljIHZlcnNpb24uIjsKK30KK3Rlc3RBbGxUeXBl
c0NhbGwoKTsKKworCisvLyBQb2x5bW9ycGhpYyBpbnB1dCBidXQgbmVnYXRpdmUgemVybyBpcyBu
b3Qgb2JzZXJ2YWJsZS4KK2Z1bmN0aW9uIG9wYXF1ZUFsbFR5cGVzQ2VpbFdpdGhvdXROZWdhdGl2
ZVplcm8oYXJndW1lbnQpIHsKKyAgICByZXR1cm4gTWF0aC5jZWlsKGFyZ3VtZW50KSArIDA7Cit9
Citub0lubGluZShvcGFxdWVBbGxUeXBlc0NlaWxXaXRob3V0TmVnYXRpdmVaZXJvKTsKK25vT1NS
RXhpdEZ1enppbmcob3BhcXVlQWxsVHlwZXNDZWlsV2l0aG91dE5lZ2F0aXZlWmVybyk7CisKK2Z1
bmN0aW9uIHRlc3RBbGxUeXBlc1dpdGhvdXROZWdhdGl2ZVplcm9DYWxsKCkgeworICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgMWUzOyArK2kpIHsKKyAgICAgICAgZm9yIChsZXQgdGVzdENhc2VJbnB1
dCBvZiB2YWxpZElucHV0VHlwZWRUZXN0Q2FzZXMpIHsKKyAgICAgICAgICAgIGxldCBvdXRwdXQg
PSBvcGFxdWVBbGxUeXBlc0NlaWxXaXRob3V0TmVnYXRpdmVaZXJvKHRlc3RDYXNlSW5wdXRbMF0p
OworICAgICAgICAgICAgaWYgKCFpc0lkZW50aWNhbChvdXRwdXQsIHRlc3RDYXNlSW5wdXRbMV0g
KyAwKSkKKyAgICAgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RBbGxUeXBlc1dpdGhvdXRO
ZWdhdGl2ZVplcm9DYWxsIGZvciBpbnB1dCAiICsgdGVzdENhc2VJbnB1dFswXSArICIgZXhwZWN0
ZWQgIiArIHRlc3RDYXNlSW5wdXRbMV0gKyAiIGdvdCAiICsgb3V0cHV0OworICAgICAgICB9Cisg
ICAgfQorICAgIGlmIChudW1iZXJPZkRGR0NvbXBpbGVzKG9wYXF1ZUFsbFR5cGVzQ2VpbCkgPiAz
KQorICAgICAgICB0aHJvdyAiV2Ugc2hvdWxkIGhhdmUgZGV0ZWN0ZWQgY2VpbCgpIHdhcyBwb2x5
bW9ycGhpYyBhbmQgZ2VuZXJhdGVkIGEgZ2VuZXJpYyB2ZXJzaW9uLiI7Cit9Cit0ZXN0QWxsVHlw
ZXNXaXRob3V0TmVnYXRpdmVaZXJvQ2FsbCgpOworCisKKy8vIFRlc3QgTWF0aC5jZWlsKCkgb24g
YSBjb21wbGV0ZWx5IHR5cGVkIGlucHV0LiBFdmVyeSBjYWxsIHNlZSBvbmx5IG9uZSB0eXBlLgor
ZnVuY3Rpb24gdGVzdFNpbmdsZVR5cGVDYWxsKCkgeworICAgIGZvciAobGV0IHRlc3RDYXNlSW5w
dXQgb2YgdmFsaWRJbnB1dFRlc3RDYXNlcykgeworICAgICAgICBldmFsKGAKKyAgICAgICAgICAg
IGZ1bmN0aW9uIG9wYXF1ZUNlaWwoYXJndW1lbnQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
TWF0aC5jZWlsKGFyZ3VtZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5vSW5saW5l
KG9wYXF1ZUNlaWwpOworICAgICAgICAgICAgbm9PU1JFeGl0RnV6emluZyhvcGFxdWVDZWlsKTsK
KworICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICAg
ICAgICAgIGlmICghaXNJZGVudGljYWwob3BhcXVlQ2VpbCgke3Rlc3RDYXNlSW5wdXRbMF19KSwg
JHt0ZXN0Q2FzZUlucHV0WzFdfSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgIkZhaWxl
ZCB0ZXN0U2luZ2xlVHlwZUNhbGwoKSI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVlQ2VpbCkgPiAxKQor
ICAgICAgICAgICAgICAgIHRocm93ICJXZSBzaG91bGQgaGF2ZSBjb21waWxlZCBhIHNpbmdsZSBj
ZWlsIGZvciB0aGUgZXhwZWN0ZWQgdHlwZS4iOworICAgICAgICBgKTsKKyAgICB9Cit9Cit0ZXN0
U2luZ2xlVHlwZUNhbGwoKTsKKworCitmdW5jdGlvbiBjaGVja0NvbXBpbGVDb3VudEZvclVzZWxl
c3NOZWdhdGl2ZVplcm8odGVzdEZ1bmN0aW9uKQoreworICAgIGlmIChqc2NPcHRpb25zKCkudXNl
TWF4aW1hbEZsdXNoSW5zZXJ0aW9uUGhhc2UpIHsKKyAgICAgICAgLy8gSWYgd2UgZm9yY2VkIGEg
Zmx1c2ggYWZ0ZXIgdGhlIG9wZXJhdGlvbiwgdGhlIG5lZ2F0aXZlIHplcm8gYmVjb21lcworICAg
ICAgICAvLyBvYnNlcnZhYmxlIGFuZCB3ZSBtYXkgYmUgb3Zlcmx5IG9wdGltaXN0aWMuCisgICAg
ICAgIHJldHVybiBudW1iZXJPZkRGR0NvbXBpbGVzKHRlc3RGdW5jdGlvbikgPD0gMjsKKyAgICB9
CisgICAgcmV0dXJuIG51bWJlck9mREZHQ29tcGlsZXModGVzdEZ1bmN0aW9uKSA8PSAxOworfQor
CisKKy8vIFRlc3QgTWF0aC5jZWlsKCkgb24gYSBjb21wbGV0ZWx5IHR5cGVkIGlucHV0LCBidXQg
d2l0aG91dCBuZWdhdGl2ZSB6ZXJvLgorZnVuY3Rpb24gdGVzdFNpbmdsZVR5cGVXaXRob3V0TmVn
YXRpdmVaZXJvQ2FsbCgpIHsKKyAgICBmb3IgKGxldCB0ZXN0Q2FzZUlucHV0IG9mIHZhbGlkSW5w
dXRUZXN0Q2FzZXMpIHsKKyAgICAgICAgZXZhbChgCisgICAgICAgICAgICBmdW5jdGlvbiBvcGFx
dWVDZWlsKGFyZ3VtZW50KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguY2VpbChhcmd1
bWVudCkgKyAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbm9JbmxpbmUob3BhcXVlQ2Vp
bCk7CisgICAgICAgICAgICBub09TUkV4aXRGdXp6aW5nKG9wYXF1ZUNlaWwpOworCisgICAgICAg
ICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYg
KCFpc0lkZW50aWNhbChvcGFxdWVDZWlsKCR7dGVzdENhc2VJbnB1dFswXX0pLCAke3Rlc3RDYXNl
SW5wdXRbMV19ICsgMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0
U2luZ2xlVHlwZVdpdGhvdXROZWdhdGl2ZVplcm9DYWxsKCkiOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghY2hlY2tDb21waWxlQ291bnRGb3JVc2Vs
ZXNzTmVnYXRpdmVaZXJvKG9wYXF1ZUNlaWwpKQorICAgICAgICAgICAgICAgIHRocm93ICJXZSBz
aG91bGQgaGF2ZSBjb21waWxlZCBhIHNpbmdsZSBjZWlsIGZvciB0aGUgZXhwZWN0ZWQgdHlwZS4i
OworICAgICAgICBgKTsKKyAgICB9Cit9Cit0ZXN0U2luZ2xlVHlwZVdpdGhvdXROZWdhdGl2ZVpl
cm9DYWxsKCk7CisKKworLy8gVGVzdCBNYXRoLmNlaWwoKSBvbiBjb25zdGFudHMKK2Z1bmN0aW9u
IHRlc3RDb25zdGFudCgpIHsKKyAgICBmb3IgKGxldCB0ZXN0Q2FzZUlucHV0IG9mIHZhbGlkSW5w
dXRUZXN0Q2FzZXMpIHsKKyAgICAgICAgZXZhbChgCisgICAgICAgICAgICBmdW5jdGlvbiBvcGFx
dWVDZWlsT25Db25zdGFudCgpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKCR7
dGVzdENhc2VJbnB1dFswXX0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbm9JbmxpbmUo
b3BhcXVlQ2VpbE9uQ29uc3RhbnQpOworICAgICAgICAgICAgbm9PU1JFeGl0RnV6emluZyhvcGFx
dWVDZWlsT25Db25zdGFudCk7CisKKyAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMWU0
OyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWlzSWRlbnRpY2FsKG9wYXF1ZUNlaWxPbkNv
bnN0YW50KCksICR7dGVzdENhc2VJbnB1dFsxXX0pKSB7CisgICAgICAgICAgICAgICAgICAgIHRo
cm93ICJGYWlsZWQgdGVzdENvbnN0YW50KCkiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChudW1iZXJPZkRGR0NvbXBpbGVzKG9wYXF1ZUNlaWxPbkNv
bnN0YW50KSA+IDEpCisgICAgICAgICAgICAgICAgdGhyb3cgIldlIHNob3VsZCBoYXZlIGNvbXBp
bGVkIGEgc2luZ2xlIGNlaWwgZm9yIHRoZSBleHBlY3RlZCB0eXBlLiI7CisgICAgICAgIGApOwor
ICAgIH0KK30KK3Rlc3RDb25zdGFudCgpOworCisKKy8vIFZlcmlmeSB3ZSBjYWxsIHZhbHVlT2Yo
KSBleGFjdGx5IG9uY2UgcGVyIGNhbGwuCitmdW5jdGlvbiBvcGFxdWVDZWlsRm9yU2lkZUVmZmVj
dHMoYXJndW1lbnQpIHsKKyAgICByZXR1cm4gTWF0aC5jZWlsKGFyZ3VtZW50KTsKK30KK25vSW5s
aW5lKG9wYXF1ZUNlaWxGb3JTaWRlRWZmZWN0cyk7Citub09TUkV4aXRGdXp6aW5nKG9wYXF1ZUNl
aWxGb3JTaWRlRWZmZWN0cyk7CisKK2Z1bmN0aW9uIHRlc3RTaWRlRWZmZWN0KCkgeworICAgIGxl
dCB0ZXN0T2JqZWN0ID0geworICAgICAgICBjb3VudGVyOiAwLAorICAgICAgICB2YWx1ZU9mOiBm
dW5jdGlvbigpIHsgKyt0aGlzLmNvdW50ZXI7IHJldHVybiAxNjsgfQorICAgIH07CisgICAgbGV0
IGNlaWwxNiA9IE1hdGguY2VpbCgxNik7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxZTQ7ICsr
aSkgeworICAgICAgICBpZiAob3BhcXVlQ2VpbEZvclNpZGVFZmZlY3RzKHRlc3RPYmplY3QpICE9
PSBjZWlsMTYpCisgICAgICAgICAgICB0aHJvdyAiSW5jb3JyZWN0IHJlc3VsdCBpbiB0ZXN0U2lk
ZUVmZmVjdCgpIjsKKyAgICB9CisgICAgaWYgKHRlc3RPYmplY3QuY291bnRlciAhPT0gMWU0KQor
ICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RTaWRlRWZmZWN0KCkiOworICAgIGlmIChudW1iZXJP
ZkRGR0NvbXBpbGVzKG9wYXF1ZUNlaWxGb3JTaWRlRWZmZWN0cykgPiAxKQorICAgICAgICB0aHJv
dyAib3BhcXVlQ2VpbEZvclNpZGVFZmZlY3RzKCkgaXMgcHJlZGljdGFibGUsIGl0IHNob3VsZCBv
bmx5IGJlIGNvbXBpbGVkIG9uY2UuIjsKK30KK3Rlc3RTaWRlRWZmZWN0KCk7CisKKworLy8gVmVy
aWZ5IGNlaWwoKSBpcyBub3Qgc3ViamVjdCB0byBDU0UgaWYgdGhlIGFyZ3VtZW50IGhhcyBzaWRl
IGVmZmVjdHMuCitmdW5jdGlvbiBvcGFxdWVDZWlsRm9yQ1NFKGFyZ3VtZW50KSB7CisgICAgcmV0
dXJuIE1hdGguY2VpbChhcmd1bWVudCkgKyBNYXRoLmNlaWwoYXJndW1lbnQpICsgTWF0aC5jZWls
KGFyZ3VtZW50KTsKK30KK25vSW5saW5lKG9wYXF1ZUNlaWxGb3JDU0UpOworbm9PU1JFeGl0RnV6
emluZyhvcGFxdWVDZWlsRm9yQ1NFKTsKKworZnVuY3Rpb24gdGVzdENTRSgpIHsKKyAgICBsZXQg
dGVzdE9iamVjdCA9IHsKKyAgICAgICAgY291bnRlcjogMCwKKyAgICAgICAgdmFsdWVPZjogZnVu
Y3Rpb24oKSB7ICsrdGhpcy5jb3VudGVyOyByZXR1cm4gMTY7IH0KKyAgICB9OworICAgIGxldCBj
ZWlsMTYgPSBNYXRoLmNlaWwoMTYpOworICAgIGxldCB0aHJlZUNlaWwxNiA9IGNlaWwxNiArIGNl
aWwxNiArIGNlaWwxNjsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAg
ICAgIGlmIChvcGFxdWVDZWlsRm9yQ1NFKHRlc3RPYmplY3QpICE9PSB0aHJlZUNlaWwxNikKKyAg
ICAgICAgICAgIHRocm93ICJJbmNvcnJlY3QgcmVzdWx0IGluIHRlc3RDU0UoKSI7CisgICAgfQor
ICAgIGlmICh0ZXN0T2JqZWN0LmNvdW50ZXIgIT09IDNlNCkKKyAgICAgICAgdGhyb3cgIkZhaWxl
ZCB0ZXN0Q1NFKCkiOworICAgIGlmIChudW1iZXJPZkRGR0NvbXBpbGVzKG9wYXF1ZUNlaWxGb3JD
U0UpID4gMSkKKyAgICAgICAgdGhyb3cgIm9wYXF1ZUNlaWxGb3JDU0UoKSBpcyBwcmVkaWN0YWJs
ZSwgaXQgc2hvdWxkIG9ubHkgYmUgY29tcGlsZWQgb25jZS4iOworfQordGVzdENTRSgpOworCisK
Ky8vIFZlcmlmeSBjZWlsKCkgaXMgbm90IHN1YmplY3QgdG8gRENFIGlmIHRoZSBhcmd1bWVudCBo
YXMgc2lkZSBlZmZlY3RzLgorZnVuY3Rpb24gb3BhcXVlQ2VpbEZvckRDRShhcmd1bWVudCkgewor
ICAgIE1hdGguY2VpbChhcmd1bWVudCk7Cit9Citub0lubGluZShvcGFxdWVDZWlsRm9yRENFKTsK
K25vT1NSRXhpdEZ1enppbmcob3BhcXVlQ2VpbEZvckRDRSk7CisKK2Z1bmN0aW9uIHRlc3REQ0Uo
KSB7CisgICAgbGV0IHRlc3RPYmplY3QgPSB7CisgICAgICAgIGNvdW50ZXI6IDAsCisgICAgICAg
IHZhbHVlT2Y6IGZ1bmN0aW9uKCkgeyArK3RoaXMuY291bnRlcjsgcmV0dXJuIDE2OyB9CisgICAg
fTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgIG9wYXF1ZUNl
aWxGb3JEQ0UodGVzdE9iamVjdCk7CisgICAgfQorICAgIGlmICh0ZXN0T2JqZWN0LmNvdW50ZXIg
IT09IDFlNCkKKyAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0RENFKCkiOworICAgIGlmIChudW1i
ZXJPZkRGR0NvbXBpbGVzKG9wYXF1ZUNlaWxGb3JEQ0UpID4gMSkKKyAgICAgICAgdGhyb3cgIm9w
YXF1ZUNlaWxGb3JEQ0UoKSBpcyBwcmVkaWN0YWJsZSwgaXQgc2hvdWxkIG9ubHkgYmUgY29tcGls
ZWQgb25jZS4iOworfQordGVzdERDRSgpOworCisKKy8vIFRlc3QgZXhjZXB0aW9ucyBpbiB0aGUg
YXJndW1lbnQuCitmdW5jdGlvbiB0ZXN0RXhjZXB0aW9uKCkgeworICAgIGxldCBjb3VudGVyID0g
MDsKKyAgICBmdW5jdGlvbiBvcGFxdWVDZWlsV2l0aEV4Y2VwdGlvbihhcmd1bWVudCkgeworICAg
ICAgICBsZXQgcmVzdWx0ID0gTWF0aC5jZWlsKGFyZ3VtZW50KTsKKyAgICAgICAgKytjb3VudGVy
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBub0lubGluZShvcGFxdWVDZWls
V2l0aEV4Y2VwdGlvbik7CisKKyAgICBsZXQgdGVzdE9iamVjdCA9IHsgdmFsdWVPZjogKCkgPT4g
eyAgcmV0dXJuIDY0OyB9IH07CisgICAgbGV0IGNlaWw2NCA9IE1hdGguY2VpbCg2NCk7CisKKyAg
ICAvLyBXYXJtIHVwIHdpdGhvdXQgZXhjZXB0aW9uLgorICAgIGZvciAobGV0IGkgPSAwOyBpIDwg
MWUzOyArK2kpIHsKKyAgICAgICAgaWYgKG9wYXF1ZUNlaWxXaXRoRXhjZXB0aW9uKHRlc3RPYmpl
Y3QpICE9PSBjZWlsNjQpCisgICAgICAgICAgICB0aHJvdyAiSW5jb3JyZWN0IHJlc3VsdCBpbiBv
cGFxdWVDZWlsV2l0aEV4Y2VwdGlvbigpIjsKKyAgICB9CisKKyAgICBsZXQgdGVzdFRocm93T2Jq
ZWN0ID0geyB2YWx1ZU9mOiAoKSA9PiB7IHRocm93IHRlc3RPYmplY3Q7IHJldHVybiA2NDsgfSB9
OworCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxZTI7ICsraSkgeworICAgICAgICB0cnkgewor
ICAgICAgICAgICAgaWYgKG9wYXF1ZUNlaWxXaXRoRXhjZXB0aW9uKHRlc3RUaHJvd09iamVjdCkg
IT09IDgpCisgICAgICAgICAgICAgICAgdGhyb3cgIlRoaXMgY29kZSBzaG91bGQgbm90IGJlIHJl
YWNoZWQhISI7CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIGlmIChlICE9PSB0
ZXN0T2JqZWN0KSB7CisgICAgICAgICAgICAgICAgdGhyb3cgIldyb25nIG9iamVjdCB0aHJvd24g
ZnJvbSBvcGFxdWVDZWlsV2l0aEV4Y2VwdGlvbi4iCisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAoY291bnRlciAhPT0gMWUzKSB7CisgICAgICAgIHRocm93ICJJbnZh
bGlkIGNvdW50IGluIHRlc3RFeGNlcHRpb24oKSI7CisgICAgfQorfQordGVzdEV4Y2VwdGlvbigp
OwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvYXJpdGgtZmxvb3Itb24tdmFyaW91cy10eXBl
cy5qcyBiL0pTVGVzdHMvc3RyZXNzL2FyaXRoLWZsb29yLW9uLXZhcmlvdXMtdHlwZXMuanMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMmE1OWQ3OTA5ZTRmYTAzMTI3ODkxOTcyZmQyMjg1ZjYyNjdmODVjZgotLS0gL2Rl
di9udWxsCisrKyBiL0pTVGVzdHMvc3RyZXNzL2FyaXRoLWZsb29yLW9uLXZhcmlvdXMtdHlwZXMu
anMKQEAgLTAsMCArMSwzMDYgQEAKKyJ1c2Ugc3RyaWN0IjsKKworbGV0IHZhbGlkSW5wdXRUZXN0
Q2FzZXMgPSBbCisgICAgLy8gaW5wdXQgYXMgc3RyaW5nLCBleHBlY3RlZCByZXN1bHQgYXMgc3Ry
aW5nLgorICAgIFsidW5kZWZpbmVkIiwgIk5hTiJdLAorICAgIFsibnVsbCIsICIwIl0sCisgICAg
WyIwIiwgIjAiXSwKKyAgICBbIi0wLiIsICItMCJdLAorICAgIFsiMC41IiwgIjAiXSwKKyAgICBb
Ii0wLjUiLCAiLTEiXSwKKyAgICBbIjQiLCAiNCJdLAorICAgIFsiNDIuMSIsICI0MiJdLAorICAg
IFsiNDIuNSIsICI0MiJdLAorICAgIFsiNDIuOSIsICI0MiJdLAorICAgIFsiLTQyLjEiLCAiLTQz
Il0sCisgICAgWyItNDIuNSIsICItNDMiXSwKKyAgICBbIi00Mi45IiwgIi00MyJdLAorICAgIFsi
TWF0aC5QSSIsICIzIl0sCisgICAgWyJJbmZpbml0eSIsICJJbmZpbml0eSJdLAorICAgIFsiLUlu
ZmluaXR5IiwgIi1JbmZpbml0eSJdLAorICAgIFsiTmFOIiwgIk5hTiJdLAorICAgIFsiXCJXZWJL
aXRcIiIsICJOYU4iXSwKKyAgICBbIlwiNFwiIiwgIjQiXSwKKyAgICBbIlwiNDIuNVwiIiwgIjQy
Il0sCisgICAgWyJ7IHZhbHVlT2Y6ICgpID0+IHsgcmV0dXJuIDQ7IH0gfSIsICI0Il0sCisgICAg
WyJ7IHZhbHVlT2Y6ICgpID0+IHsgcmV0dXJuIDA7IH0gfSIsICIwIl0sCisgICAgWyJ7IHZhbHVl
T2Y6ICgpID0+IHsgcmV0dXJuIC0wOyB9IH0iLCAiLTAiXSwKKyAgICBbInsgdmFsdWVPZjogKCkg
PT4geyByZXR1cm4gMC41OyB9IH0iLCAiMCJdLAorICAgIFsieyB2YWx1ZU9mOiAoKSA9PiB7IHJl
dHVybiAtMC41OyB9IH0iLCAiLTEiXSwKKyAgICBbInsgdmFsdWVPZjogKCkgPT4geyByZXR1cm4g
TnVtYmVyLk1JTl9TQUZFX0lOVEVHRVI7IH0gfSIsICItOTAwNzE5OTI1NDc0MDk5MSJdLAorICAg
IFsieyB2YWx1ZU9mOiAoKSA9PiB7IHJldHVybiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjsgfSB9
IiwgIjkwMDcxOTkyNTQ3NDA5OTEiXSwKKyAgICBbInsgdmFsdWVPZjogKCkgPT4geyByZXR1cm4g
MHg4MDAwMDAwMHwwOyB9IH0iLCAiLTIxNDc0ODM2NDgiXSwKKyAgICBbInsgdmFsdWVPZjogKCkg
PT4geyByZXR1cm4gMHg3ZmZmZmZmZnwwOyB9IH0iLCAiMjE0NzQ4MzY0NyJdLAorICAgIFsieyB2
YWx1ZU9mOiAoKSA9PiB7IHJldHVybiAoMHg4MDAwMDAwMHwwKSAtIDAuNTsgfSB9IiwgIi0yMTQ3
NDgzNjQ5Il0sCisgICAgWyJ7IHZhbHVlT2Y6ICgpID0+IHsgcmV0dXJuICgweDdmZmZmZmZmfDAp
ICsgMC41OyB9IH0iLCAiMjE0NzQ4MzY0NyJdLAorXTsKKworbGV0IHZhbGlkSW5wdXRUeXBlZFRl
c3RDYXNlcyA9IHZhbGlkSW5wdXRUZXN0Q2FzZXMubWFwKChlbGVtZW50KSA9PiB7IHJldHVybiBb
ZXZhbCgiKCIgKyBlbGVtZW50WzBdICsgIikiKSwgZXZhbChlbGVtZW50WzFdKV0gfSk7CisKK2Z1
bmN0aW9uIGlzSWRlbnRpY2FsKHJlc3VsdCwgZXhwZWN0ZWQpCit7CisgICAgaWYgKGV4cGVjdGVk
ID09PSBleHBlY3RlZCkgeworICAgICAgICBpZiAocmVzdWx0ICE9PSBleHBlY3RlZCkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFleHBlY3RlZCAmJiAoMSAvIGV4cGVj
dGVkKSAhPT0gKDEgLyByZXN1bHQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0ICE9PSByZXN1bHQ7Cit9
CisKKworLy8gVGVzdCBNYXRoLmZsb29yKCkgd2l0aG91dCBhcmd1bWVudHMuCitmdW5jdGlvbiBv
cGFxdWVGbG9vck5vQXJndW1lbnQoKSB7CisgICAgcmV0dXJuIE1hdGguZmxvb3IoKTsKK30KK25v
SW5saW5lKG9wYXF1ZUZsb29yTm9Bcmd1bWVudCk7Citub09TUkV4aXRGdXp6aW5nKG9wYXF1ZUZs
b29yTm9Bcmd1bWVudCk7CisKK2Z1bmN0aW9uIHRlc3ROb0FyZ3VtZW50KCkgeworICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgbGV0IG91dHB1dCA9IG9wYXF1ZUZs
b29yTm9Bcmd1bWVudCgpOworICAgICAgICBpZiAoIWlzSWRlbnRpY2FsKG91dHB1dCwgTmFOKSkg
eworICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCBvcGFxdWVGbG9vck5vQXJndW1lbnQiOworICAg
ICAgICB9CisgICAgfQorICAgIGlmIChudW1iZXJPZkRGR0NvbXBpbGVzKG9wYXF1ZUZsb29yTm9B
cmd1bWVudCkgPiAxKQorICAgICAgICB0aHJvdyAiVGhlIGNhbGwgd2l0aG91dCBhcmd1bWVudHMg
c2hvdWxkIG5ldmVyIGV4aXQuIjsKK30KK3Rlc3ROb0FyZ3VtZW50KCk7CisKKworLy8gVGVzdCBN
YXRoLmZsb29yKCkgd2l0aCBhIHZlcnkgcG9seW1vcnBoaWMgaW5wdXQuIEFsbCB0ZXN0IGNhc2Vz
IGFyZSBzZWVuIGF0IGVhY2ggaXRlcmF0aW9uLgorZnVuY3Rpb24gb3BhcXVlQWxsVHlwZXNGbG9v
cihhcmd1bWVudCkgeworICAgIHJldHVybiBNYXRoLmZsb29yKGFyZ3VtZW50KTsKK30KK25vSW5s
aW5lKG9wYXF1ZUFsbFR5cGVzRmxvb3IpOworbm9PU1JFeGl0RnV6emluZyhvcGFxdWVBbGxUeXBl
c0Zsb29yKTsKKworZnVuY3Rpb24gdGVzdEFsbFR5cGVzQ2FsbCgpIHsKKyAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IDFlMzsgKytpKSB7CisgICAgICAgIGZvciAobGV0IHRlc3RDYXNlSW5wdXQgb2Yg
dmFsaWRJbnB1dFR5cGVkVGVzdENhc2VzKSB7CisgICAgICAgICAgICBsZXQgb3V0cHV0ID0gb3Bh
cXVlQWxsVHlwZXNGbG9vcih0ZXN0Q2FzZUlucHV0WzBdKTsKKyAgICAgICAgICAgIGlmICghaXNJ
ZGVudGljYWwob3V0cHV0LCB0ZXN0Q2FzZUlucHV0WzFdKSkKKyAgICAgICAgICAgICAgICB0aHJv
dyAiRmFpbGVkIHRlc3RBbGxUeXBlc0NhbGwgZm9yIGlucHV0ICIgKyB0ZXN0Q2FzZUlucHV0WzBd
ICsgIiBleHBlY3RlZCAiICsgdGVzdENhc2VJbnB1dFsxXSArICIgZ290ICIgKyBvdXRwdXQ7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgaWYgKG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVlQWxsVHlw
ZXNGbG9vcikgPiAzKQorICAgICAgICB0aHJvdyAiV2Ugc2hvdWxkIGhhdmUgZGV0ZWN0ZWQgZmxv
b3IoKSB3YXMgcG9seW1vcnBoaWMgYW5kIGdlbmVyYXRlZCBhIGdlbmVyaWMgdmVyc2lvbi4iOwor
fQordGVzdEFsbFR5cGVzQ2FsbCgpOworCisKKy8vIFBvbHltb3JwaGljIGlucHV0IGJ1dCBuZWdh
dGl2ZSB6ZXJvIGlzIG5vdCBvYnNlcnZhYmxlLgorZnVuY3Rpb24gb3BhcXVlQWxsVHlwZXNGbG9v
cldpdGhvdXROZWdhdGl2ZVplcm8oYXJndW1lbnQpIHsKKyAgICByZXR1cm4gTWF0aC5mbG9vcihh
cmd1bWVudCkgKyAwOworfQorbm9JbmxpbmUob3BhcXVlQWxsVHlwZXNGbG9vcldpdGhvdXROZWdh
dGl2ZVplcm8pOworbm9PU1JFeGl0RnV6emluZyhvcGFxdWVBbGxUeXBlc0Zsb29yV2l0aG91dE5l
Z2F0aXZlWmVybyk7CisKK2Z1bmN0aW9uIHRlc3RBbGxUeXBlc1dpdGhvdXROZWdhdGl2ZVplcm9D
YWxsKCkgeworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMWUzOyArK2kpIHsKKyAgICAgICAgZm9y
IChsZXQgdGVzdENhc2VJbnB1dCBvZiB2YWxpZElucHV0VHlwZWRUZXN0Q2FzZXMpIHsKKyAgICAg
ICAgICAgIGxldCBvdXRwdXQgPSBvcGFxdWVBbGxUeXBlc0Zsb29yV2l0aG91dE5lZ2F0aXZlWmVy
byh0ZXN0Q2FzZUlucHV0WzBdKTsKKyAgICAgICAgICAgIGlmICghaXNJZGVudGljYWwob3V0cHV0
LCB0ZXN0Q2FzZUlucHV0WzFdICsgMCkpCisgICAgICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0
ZXN0QWxsVHlwZXNXaXRob3V0TmVnYXRpdmVaZXJvQ2FsbCBmb3IgaW5wdXQgIiArIHRlc3RDYXNl
SW5wdXRbMF0gKyAiIGV4cGVjdGVkICIgKyB0ZXN0Q2FzZUlucHV0WzFdICsgIiBnb3QgIiArIG91
dHB1dDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobnVtYmVyT2ZERkdDb21waWxlcyhvcGFx
dWVBbGxUeXBlc0Zsb29yKSA+IDMpCisgICAgICAgIHRocm93ICJXZSBzaG91bGQgaGF2ZSBkZXRl
Y3RlZCBmbG9vcigpIHdhcyBwb2x5bW9ycGhpYyBhbmQgZ2VuZXJhdGVkIGEgZ2VuZXJpYyB2ZXJz
aW9uLiI7Cit9Cit0ZXN0QWxsVHlwZXNXaXRob3V0TmVnYXRpdmVaZXJvQ2FsbCgpOworCisKKy8v
IFRlc3QgTWF0aC5mbG9vcigpIG9uIGEgY29tcGxldGVseSB0eXBlZCBpbnB1dC4gRXZlcnkgY2Fs
bCBzZWUgb25seSBvbmUgdHlwZS4KK2Z1bmN0aW9uIHRlc3RTaW5nbGVUeXBlQ2FsbCgpIHsKKyAg
ICBmb3IgKGxldCB0ZXN0Q2FzZUlucHV0IG9mIHZhbGlkSW5wdXRUZXN0Q2FzZXMpIHsKKyAgICAg
ICAgZXZhbChgCisgICAgICAgICAgICBmdW5jdGlvbiBvcGFxdWVGbG9vcihhcmd1bWVudCkgewor
ICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKGFyZ3VtZW50KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIG5vSW5saW5lKG9wYXF1ZUZsb29yKTsKKyAgICAgICAgICAgIG5vT1NS
RXhpdEZ1enppbmcob3BhcXVlRmxvb3IpOworCisgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsg
aSA8IDFlNDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFpc0lkZW50aWNhbChvcGFxdWVG
bG9vcigke3Rlc3RDYXNlSW5wdXRbMF19KSwgJHt0ZXN0Q2FzZUlucHV0WzFdfSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0U2luZ2xlVHlwZUNhbGwoKSI7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG51bWJlck9mREZH
Q29tcGlsZXMob3BhcXVlRmxvb3IpID4gMSkKKyAgICAgICAgICAgICAgICB0aHJvdyAiV2Ugc2hv
dWxkIGhhdmUgY29tcGlsZWQgYSBzaW5nbGUgZmxvb3IgZm9yIHRoZSBleHBlY3RlZCB0eXBlLiI7
CisgICAgICAgIGApOworICAgIH0KK30KK3Rlc3RTaW5nbGVUeXBlQ2FsbCgpOworCisKK2Z1bmN0
aW9uIGNoZWNrQ29tcGlsZUNvdW50Rm9yVXNlbGVzc05lZ2F0aXZlWmVybyh0ZXN0RnVuY3Rpb24p
Cit7CisgICAgaWYgKGpzY09wdGlvbnMoKS51c2VNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZSkg
eworICAgICAgICAvLyBJZiB3ZSBmb3JjZWQgYSBmbHVzaCBhZnRlciB0aGUgb3BlcmF0aW9uLCB0
aGUgbmVnYXRpdmUgemVybyBiZWNvbWVzCisgICAgICAgIC8vIG9ic2VydmFibGUgYW5kIHdlIG1h
eSBiZSBvdmVybHkgb3B0aW1pc3RpYy4KKyAgICAgICAgcmV0dXJuIG51bWJlck9mREZHQ29tcGls
ZXModGVzdEZ1bmN0aW9uKSA8PSAyOworICAgIH0KKyAgICByZXR1cm4gbnVtYmVyT2ZERkdDb21w
aWxlcyh0ZXN0RnVuY3Rpb24pIDw9IDE7Cit9CisKKworLy8gVGVzdCBNYXRoLmZsb29yKCkgb24g
YSBjb21wbGV0ZWx5IHR5cGVkIGlucHV0LCBidXQgd2l0aG91dCBuZWdhdGl2ZSB6ZXJvLgorZnVu
Y3Rpb24gdGVzdFNpbmdsZVR5cGVXaXRob3V0TmVnYXRpdmVaZXJvQ2FsbCgpIHsKKyAgICBmb3Ig
KGxldCB0ZXN0Q2FzZUlucHV0IG9mIHZhbGlkSW5wdXRUZXN0Q2FzZXMpIHsKKyAgICAgICAgZXZh
bChgCisgICAgICAgICAgICBmdW5jdGlvbiBvcGFxdWVGbG9vcihhcmd1bWVudCkgeworICAgICAg
ICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKGFyZ3VtZW50KSArIDA7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBub0lubGluZShvcGFxdWVGbG9vcik7CisgICAgICAgICAgICBub09TUkV4
aXRGdXp6aW5nKG9wYXF1ZUZsb29yKTsKKworICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkg
PCAxZTQ7ICsraSkgeworICAgICAgICAgICAgICAgIGlmICghaXNJZGVudGljYWwob3BhcXVlRmxv
b3IoJHt0ZXN0Q2FzZUlucHV0WzBdfSksICR7dGVzdENhc2VJbnB1dFsxXX0gKyAwKSkgeworICAg
ICAgICAgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RTaW5nbGVUeXBlV2l0aG91dE5lZ2F0
aXZlWmVyb0NhbGwoKSI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKCFjaGVja0NvbXBpbGVDb3VudEZvclVzZWxlc3NOZWdhdGl2ZVplcm8ob3BhcXVl
Rmxvb3IpKQorICAgICAgICAgICAgICAgIHRocm93ICJXZSBzaG91bGQgaGF2ZSBjb21waWxlZCBh
IHNpbmdsZSBmbG9vciBmb3IgdGhlIGV4cGVjdGVkIHR5cGUuIjsKKyAgICAgICAgYCk7CisgICAg
fQorfQordGVzdFNpbmdsZVR5cGVXaXRob3V0TmVnYXRpdmVaZXJvQ2FsbCgpOworCisKKy8vIFRl
c3QgTWF0aC5mbG9vcigpIG9uIGNvbnN0YW50cworZnVuY3Rpb24gdGVzdENvbnN0YW50KCkgewor
ICAgIGZvciAobGV0IHRlc3RDYXNlSW5wdXQgb2YgdmFsaWRJbnB1dFRlc3RDYXNlcykgeworICAg
ICAgICBldmFsKGAKKyAgICAgICAgICAgIGZ1bmN0aW9uIG9wYXF1ZUZsb29yT25Db25zdGFudCgp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcigke3Rlc3RDYXNlSW5wdXRbMF19
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5vSW5saW5lKG9wYXF1ZUZsb29yT25Db25z
dGFudCk7CisgICAgICAgICAgICBub09TUkV4aXRGdXp6aW5nKG9wYXF1ZUZsb29yT25Db25zdGFu
dCk7CisKKyAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIWlzSWRlbnRpY2FsKG9wYXF1ZUZsb29yT25Db25zdGFudCgpLCAke3Rl
c3RDYXNlSW5wdXRbMV19KSkgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRl
c3RDb25zdGFudCgpIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAobnVtYmVyT2ZERkdDb21waWxlcyhvcGFxdWVGbG9vck9uQ29uc3RhbnQpID4gMSkK
KyAgICAgICAgICAgICAgICB0aHJvdyAiV2Ugc2hvdWxkIGhhdmUgY29tcGlsZWQgYSBzaW5nbGUg
Zmxvb3IgZm9yIHRoZSBleHBlY3RlZCB0eXBlLiI7CisgICAgICAgIGApOworICAgIH0KK30KK3Rl
c3RDb25zdGFudCgpOworCisKKy8vIFZlcmlmeSB3ZSBjYWxsIHZhbHVlT2YoKSBleGFjdGx5IG9u
Y2UgcGVyIGNhbGwuCitmdW5jdGlvbiBvcGFxdWVGbG9vckZvclNpZGVFZmZlY3RzKGFyZ3VtZW50
KSB7CisgICAgcmV0dXJuIE1hdGguZmxvb3IoYXJndW1lbnQpOworfQorbm9JbmxpbmUob3BhcXVl
Rmxvb3JGb3JTaWRlRWZmZWN0cyk7Citub09TUkV4aXRGdXp6aW5nKG9wYXF1ZUZsb29yRm9yU2lk
ZUVmZmVjdHMpOworCitmdW5jdGlvbiB0ZXN0U2lkZUVmZmVjdCgpIHsKKyAgICBsZXQgdGVzdE9i
amVjdCA9IHsKKyAgICAgICAgY291bnRlcjogMCwKKyAgICAgICAgdmFsdWVPZjogZnVuY3Rpb24o
KSB7ICsrdGhpcy5jb3VudGVyOyByZXR1cm4gMTY7IH0KKyAgICB9OworICAgIGxldCBmbG9vcjE2
ID0gTWF0aC5mbG9vcigxNik7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxZTQ7ICsraSkgewor
ICAgICAgICBpZiAob3BhcXVlRmxvb3JGb3JTaWRlRWZmZWN0cyh0ZXN0T2JqZWN0KSAhPT0gZmxv
b3IxNikKKyAgICAgICAgICAgIHRocm93ICJJbmNvcnJlY3QgcmVzdWx0IGluIHRlc3RTaWRlRWZm
ZWN0KCkiOworICAgIH0KKyAgICBpZiAodGVzdE9iamVjdC5jb3VudGVyICE9PSAxZTQpCisgICAg
ICAgIHRocm93ICJGYWlsZWQgdGVzdFNpZGVFZmZlY3QoKSI7CisgICAgaWYgKG51bWJlck9mREZH
Q29tcGlsZXMob3BhcXVlRmxvb3JGb3JTaWRlRWZmZWN0cykgPiAxKQorICAgICAgICB0aHJvdyAi
b3BhcXVlRmxvb3JGb3JTaWRlRWZmZWN0cygpIGlzIHByZWRpY3RhYmxlLCBpdCBzaG91bGQgb25s
eSBiZSBjb21waWxlZCBvbmNlLiI7Cit9Cit0ZXN0U2lkZUVmZmVjdCgpOworCisKKy8vIFZlcmlm
eSBmbG9vcigpIGlzIG5vdCBzdWJqZWN0IHRvIENTRSBpZiB0aGUgYXJndW1lbnQgaGFzIHNpZGUg
ZWZmZWN0cy4KK2Z1bmN0aW9uIG9wYXF1ZUZsb29yRm9yQ1NFKGFyZ3VtZW50KSB7CisgICAgcmV0
dXJuIE1hdGguZmxvb3IoYXJndW1lbnQpICsgTWF0aC5mbG9vcihhcmd1bWVudCkgKyBNYXRoLmZs
b29yKGFyZ3VtZW50KTsKK30KK25vSW5saW5lKG9wYXF1ZUZsb29yRm9yQ1NFKTsKK25vT1NSRXhp
dEZ1enppbmcob3BhcXVlRmxvb3JGb3JDU0UpOworCitmdW5jdGlvbiB0ZXN0Q1NFKCkgeworICAg
IGxldCB0ZXN0T2JqZWN0ID0geworICAgICAgICBjb3VudGVyOiAwLAorICAgICAgICB2YWx1ZU9m
OiBmdW5jdGlvbigpIHsgKyt0aGlzLmNvdW50ZXI7IHJldHVybiAxNjsgfQorICAgIH07CisgICAg
bGV0IGZsb29yMTYgPSBNYXRoLmZsb29yKDE2KTsKKyAgICBsZXQgdGhyZWVGbG9vcjE2ID0gZmxv
b3IxNiArIGZsb29yMTYgKyBmbG9vcjE2OworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMWU0OyAr
K2kpIHsKKyAgICAgICAgaWYgKG9wYXF1ZUZsb29yRm9yQ1NFKHRlc3RPYmplY3QpICE9PSB0aHJl
ZUZsb29yMTYpCisgICAgICAgICAgICB0aHJvdyAiSW5jb3JyZWN0IHJlc3VsdCBpbiB0ZXN0Q1NF
KCkiOworICAgIH0KKyAgICBpZiAodGVzdE9iamVjdC5jb3VudGVyICE9PSAzZTQpCisgICAgICAg
IHRocm93ICJGYWlsZWQgdGVzdENTRSgpIjsKKyAgICBpZiAobnVtYmVyT2ZERkdDb21waWxlcyhv
cGFxdWVGbG9vckZvckNTRSkgPiAxKQorICAgICAgICB0aHJvdyAib3BhcXVlRmxvb3JGb3JDU0Uo
KSBpcyBwcmVkaWN0YWJsZSwgaXQgc2hvdWxkIG9ubHkgYmUgY29tcGlsZWQgb25jZS4iOworfQor
dGVzdENTRSgpOworCisKKy8vIFZlcmlmeSBmbG9vcigpIGlzIG5vdCBzdWJqZWN0IHRvIERDRSBp
ZiB0aGUgYXJndW1lbnQgaGFzIHNpZGUgZWZmZWN0cy4KK2Z1bmN0aW9uIG9wYXF1ZUZsb29yRm9y
RENFKGFyZ3VtZW50KSB7CisgICAgTWF0aC5mbG9vcihhcmd1bWVudCk7Cit9Citub0lubGluZShv
cGFxdWVGbG9vckZvckRDRSk7Citub09TUkV4aXRGdXp6aW5nKG9wYXF1ZUZsb29yRm9yRENFKTsK
KworZnVuY3Rpb24gdGVzdERDRSgpIHsKKyAgICBsZXQgdGVzdE9iamVjdCA9IHsKKyAgICAgICAg
Y291bnRlcjogMCwKKyAgICAgICAgdmFsdWVPZjogZnVuY3Rpb24oKSB7ICsrdGhpcy5jb3VudGVy
OyByZXR1cm4gMTY7IH0KKyAgICB9OworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMWU0OyArK2kp
IHsKKyAgICAgICAgb3BhcXVlRmxvb3JGb3JEQ0UodGVzdE9iamVjdCk7CisgICAgfQorICAgIGlm
ICh0ZXN0T2JqZWN0LmNvdW50ZXIgIT09IDFlNCkKKyAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0
RENFKCkiOworICAgIGlmIChudW1iZXJPZkRGR0NvbXBpbGVzKG9wYXF1ZUZsb29yRm9yRENFKSA+
IDEpCisgICAgICAgIHRocm93ICJvcGFxdWVGbG9vckZvckRDRSgpIGlzIHByZWRpY3RhYmxlLCBp
dCBzaG91bGQgb25seSBiZSBjb21waWxlZCBvbmNlLiI7Cit9Cit0ZXN0RENFKCk7CisKKworLy8g
VGVzdCBleGNlcHRpb25zIGluIHRoZSBhcmd1bWVudC4KK2Z1bmN0aW9uIHRlc3RFeGNlcHRpb24o
KSB7CisgICAgbGV0IGNvdW50ZXIgPSAwOworICAgIGZ1bmN0aW9uIG9wYXF1ZUZsb29yV2l0aEV4
Y2VwdGlvbihhcmd1bWVudCkgeworICAgICAgICBsZXQgcmVzdWx0ID0gTWF0aC5mbG9vcihhcmd1
bWVudCk7CisgICAgICAgICsrY291bnRlcjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisgICAgbm9JbmxpbmUob3BhcXVlRmxvb3JXaXRoRXhjZXB0aW9uKTsKKworICAgIGxldCB0ZXN0
T2JqZWN0ID0geyB2YWx1ZU9mOiAoKSA9PiB7ICByZXR1cm4gNjQ7IH0gfTsKKyAgICBsZXQgZmxv
b3I2NCA9IE1hdGguZmxvb3IoNjQpOworCisgICAgLy8gV2FybSB1cCB3aXRob3V0IGV4Y2VwdGlv
bi4KKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDFlMzsgKytpKSB7CisgICAgICAgIGlmIChvcGFx
dWVGbG9vcldpdGhFeGNlcHRpb24odGVzdE9iamVjdCkgIT09IGZsb29yNjQpCisgICAgICAgICAg
ICB0aHJvdyAiSW5jb3JyZWN0IHJlc3VsdCBpbiBvcGFxdWVGbG9vcldpdGhFeGNlcHRpb24oKSI7
CisgICAgfQorCisgICAgbGV0IHRlc3RUaHJvd09iamVjdCA9IHsgdmFsdWVPZjogKCkgPT4geyB0
aHJvdyB0ZXN0T2JqZWN0OyByZXR1cm4gNjQ7IH0gfTsKKworICAgIGZvciAobGV0IGkgPSAwOyBp
IDwgMWUyOyArK2kpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmIChvcGFxdWVGbG9v
cldpdGhFeGNlcHRpb24odGVzdFRocm93T2JqZWN0KSAhPT0gOCkKKyAgICAgICAgICAgICAgICB0
aHJvdyAiVGhpcyBjb2RlIHNob3VsZCBub3QgYmUgcmVhY2hlZCEhIjsKKyAgICAgICAgfSBjYXRj
aCAoZSkgeworICAgICAgICAgICAgaWYgKGUgIT09IHRlc3RPYmplY3QpIHsKKyAgICAgICAgICAg
ICAgICB0aHJvdyAiV3Jvbmcgb2JqZWN0IHRocm93biBmcm9tIG9wYXF1ZUZsb29yV2l0aEV4Y2Vw
dGlvbi4iCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY291bnRl
ciAhPT0gMWUzKSB7CisgICAgICAgIHRocm93ICJJbnZhbGlkIGNvdW50IGluIHRlc3RFeGNlcHRp
b24oKSI7CisgICAgfQorfQordGVzdEV4Y2VwdGlvbigpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9z
dHJlc3MvYXJpdGgtcm91bmQtb24tdmFyaW91cy10eXBlcy5qcyBiL0pTVGVzdHMvc3RyZXNzL2Fy
aXRoLXJvdW5kLW9uLXZhcmlvdXMtdHlwZXMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjU3NWYyNGIyYmZiZGJk
ODM0NGViZjM5ZWQ1OTE4ZGE3ZjNkMjM0ZgotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvc3Ry
ZXNzL2FyaXRoLXJvdW5kLW9uLXZhcmlvdXMtdHlwZXMuanMKQEAgLTAsMCArMSwzMDYgQEAKKyJ1
c2Ugc3RyaWN0IjsKKworbGV0IHZhbGlkSW5wdXRUZXN0Q2FzZXMgPSBbCisgICAgLy8gaW5wdXQg
YXMgc3RyaW5nLCBleHBlY3RlZCByZXN1bHQgYXMgc3RyaW5nLgorICAgIFsidW5kZWZpbmVkIiwg
Ik5hTiJdLAorICAgIFsibnVsbCIsICIwIl0sCisgICAgWyIwIiwgIjAiXSwKKyAgICBbIi0wLiIs
ICItMCJdLAorICAgIFsiMC41IiwgIjEiXSwKKyAgICBbIi0wLjUiLCAiLTAiXSwKKyAgICBbIjQi
LCAiNCJdLAorICAgIFsiNDIuMSIsICI0MiJdLAorICAgIFsiNDIuNSIsICI0MyJdLAorICAgIFsi
NDIuOSIsICI0MyJdLAorICAgIFsiLTQyLjEiLCAiLTQyIl0sCisgICAgWyItNDIuNSIsICItNDIi
XSwKKyAgICBbIi00Mi45IiwgIi00MyJdLAorICAgIFsiTWF0aC5QSSIsICIzIl0sCisgICAgWyJJ
bmZpbml0eSIsICJJbmZpbml0eSJdLAorICAgIFsiLUluZmluaXR5IiwgIi1JbmZpbml0eSJdLAor
ICAgIFsiTmFOIiwgIk5hTiJdLAorICAgIFsiXCJXZWJLaXRcIiIsICJOYU4iXSwKKyAgICBbIlwi
NFwiIiwgIjQiXSwKKyAgICBbIlwiNDIuNVwiIiwgIjQzIl0sCisgICAgWyJ7IHZhbHVlT2Y6ICgp
ID0+IHsgcmV0dXJuIDQ7IH0gfSIsICI0Il0sCisgICAgWyJ7IHZhbHVlT2Y6ICgpID0+IHsgcmV0
dXJuIDA7IH0gfSIsICIwIl0sCisgICAgWyJ7IHZhbHVlT2Y6ICgpID0+IHsgcmV0dXJuIC0wOyB9
IH0iLCAiLTAiXSwKKyAgICBbInsgdmFsdWVPZjogKCkgPT4geyByZXR1cm4gMC41OyB9IH0iLCAi
MSJdLAorICAgIFsieyB2YWx1ZU9mOiAoKSA9PiB7IHJldHVybiAtMC41OyB9IH0iLCAiLTAiXSwK
KyAgICBbInsgdmFsdWVPZjogKCkgPT4geyByZXR1cm4gTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVI7
IH0gfSIsICItOTAwNzE5OTI1NDc0MDk5MSJdLAorICAgIFsieyB2YWx1ZU9mOiAoKSA9PiB7IHJl
dHVybiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjsgfSB9IiwgIjkwMDcxOTkyNTQ3NDA5OTEiXSwK
KyAgICBbInsgdmFsdWVPZjogKCkgPT4geyByZXR1cm4gMHg4MDAwMDAwMHwwOyB9IH0iLCAiLTIx
NDc0ODM2NDgiXSwKKyAgICBbInsgdmFsdWVPZjogKCkgPT4geyByZXR1cm4gMHg3ZmZmZmZmZnww
OyB9IH0iLCAiMjE0NzQ4MzY0NyJdLAorICAgIFsieyB2YWx1ZU9mOiAoKSA9PiB7IHJldHVybiAo
MHg4MDAwMDAwMHwwKSAtIDAuNTsgfSB9IiwgIi0yMTQ3NDgzNjQ4Il0sCisgICAgWyJ7IHZhbHVl
T2Y6ICgpID0+IHsgcmV0dXJuICgweDdmZmZmZmZmfDApICsgMC41OyB9IH0iLCAiMjE0NzQ4MzY0
OCJdLAorXTsKKworbGV0IHZhbGlkSW5wdXRUeXBlZFRlc3RDYXNlcyA9IHZhbGlkSW5wdXRUZXN0
Q2FzZXMubWFwKChlbGVtZW50KSA9PiB7IHJldHVybiBbZXZhbCgiKCIgKyBlbGVtZW50WzBdICsg
IikiKSwgZXZhbChlbGVtZW50WzFdKV0gfSk7CisKK2Z1bmN0aW9uIGlzSWRlbnRpY2FsKHJlc3Vs
dCwgZXhwZWN0ZWQpCit7CisgICAgaWYgKGV4cGVjdGVkID09PSBleHBlY3RlZCkgeworICAgICAg
ICBpZiAocmVzdWx0ICE9PSBleHBlY3RlZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgaWYgKCFleHBlY3RlZCAmJiAoMSAvIGV4cGVjdGVkKSAhPT0gKDEgLyByZXN1bHQpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICByZXR1cm4gcmVzdWx0ICE9PSByZXN1bHQ7Cit9CisKKworLy8gVGVzdCBNYXRoLnJvdW5k
KCkgd2l0aG91dCBhcmd1bWVudHMuCitmdW5jdGlvbiBvcGFxdWVSb3VuZE5vQXJndW1lbnQoKSB7
CisgICAgcmV0dXJuIE1hdGgucm91bmQoKTsKK30KK25vSW5saW5lKG9wYXF1ZVJvdW5kTm9Bcmd1
bWVudCk7Citub09TUkV4aXRGdXp6aW5nKG9wYXF1ZVJvdW5kTm9Bcmd1bWVudCk7CisKK2Z1bmN0
aW9uIHRlc3ROb0FyZ3VtZW50KCkgeworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMWU0OyArK2kp
IHsKKyAgICAgICAgbGV0IG91dHB1dCA9IG9wYXF1ZVJvdW5kTm9Bcmd1bWVudCgpOworICAgICAg
ICBpZiAoIWlzSWRlbnRpY2FsKG91dHB1dCwgTmFOKSkgeworICAgICAgICAgICAgdGhyb3cgIkZh
aWxlZCBvcGFxdWVSb3VuZE5vQXJndW1lbnQiOworICAgICAgICB9CisgICAgfQorICAgIGlmIChu
dW1iZXJPZkRGR0NvbXBpbGVzKG9wYXF1ZVJvdW5kTm9Bcmd1bWVudCkgPiAxKQorICAgICAgICB0
aHJvdyAiVGhlIGNhbGwgd2l0aG91dCBhcmd1bWVudHMgc2hvdWxkIG5ldmVyIGV4aXQuIjsKK30K
K3Rlc3ROb0FyZ3VtZW50KCk7CisKKworLy8gVGVzdCBNYXRoLnJvdW5kKCkgd2l0aCBhIHZlcnkg
cG9seW1vcnBoaWMgaW5wdXQuIEFsbCB0ZXN0IGNhc2VzIGFyZSBzZWVuIGF0IGVhY2ggaXRlcmF0
aW9uLgorZnVuY3Rpb24gb3BhcXVlQWxsVHlwZXNSb3VuZChhcmd1bWVudCkgeworICAgIHJldHVy
biBNYXRoLnJvdW5kKGFyZ3VtZW50KTsKK30KK25vSW5saW5lKG9wYXF1ZUFsbFR5cGVzUm91bmQp
Oworbm9PU1JFeGl0RnV6emluZyhvcGFxdWVBbGxUeXBlc1JvdW5kKTsKKworZnVuY3Rpb24gdGVz
dEFsbFR5cGVzQ2FsbCgpIHsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDFlMzsgKytpKSB7Cisg
ICAgICAgIGZvciAobGV0IHRlc3RDYXNlSW5wdXQgb2YgdmFsaWRJbnB1dFR5cGVkVGVzdENhc2Vz
KSB7CisgICAgICAgICAgICBsZXQgb3V0cHV0ID0gb3BhcXVlQWxsVHlwZXNSb3VuZCh0ZXN0Q2Fz
ZUlucHV0WzBdKTsKKyAgICAgICAgICAgIGlmICghaXNJZGVudGljYWwob3V0cHV0LCB0ZXN0Q2Fz
ZUlucHV0WzFdKSkKKyAgICAgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RBbGxUeXBlc0Nh
bGwgZm9yIGlucHV0ICIgKyB0ZXN0Q2FzZUlucHV0WzBdICsgIiBleHBlY3RlZCAiICsgdGVzdENh
c2VJbnB1dFsxXSArICIgZ290ICIgKyBvdXRwdXQ7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYg
KG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVlQWxsVHlwZXNSb3VuZCkgPiAzKQorICAgICAgICB0
aHJvdyAiV2Ugc2hvdWxkIGhhdmUgZGV0ZWN0ZWQgcm91bmQoKSB3YXMgcG9seW1vcnBoaWMgYW5k
IGdlbmVyYXRlZCBhIGdlbmVyaWMgdmVyc2lvbi4iOworfQordGVzdEFsbFR5cGVzQ2FsbCgpOwor
CisKKy8vIFBvbHltb3JwaGljIGlucHV0IGJ1dCBuZWdhdGl2ZSB6ZXJvIGlzIG5vdCBvYnNlcnZh
YmxlLgorZnVuY3Rpb24gb3BhcXVlQWxsVHlwZXNSb3VuZFdpdGhvdXROZWdhdGl2ZVplcm8oYXJn
dW1lbnQpIHsKKyAgICByZXR1cm4gTWF0aC5yb3VuZChhcmd1bWVudCkgKyAwOworfQorbm9Jbmxp
bmUob3BhcXVlQWxsVHlwZXNSb3VuZFdpdGhvdXROZWdhdGl2ZVplcm8pOworbm9PU1JFeGl0RnV6
emluZyhvcGFxdWVBbGxUeXBlc1JvdW5kV2l0aG91dE5lZ2F0aXZlWmVybyk7CisKK2Z1bmN0aW9u
IHRlc3RBbGxUeXBlc1dpdGhvdXROZWdhdGl2ZVplcm9DYWxsKCkgeworICAgIGZvciAobGV0IGkg
PSAwOyBpIDwgMWUzOyArK2kpIHsKKyAgICAgICAgZm9yIChsZXQgdGVzdENhc2VJbnB1dCBvZiB2
YWxpZElucHV0VHlwZWRUZXN0Q2FzZXMpIHsKKyAgICAgICAgICAgIGxldCBvdXRwdXQgPSBvcGFx
dWVBbGxUeXBlc1JvdW5kV2l0aG91dE5lZ2F0aXZlWmVybyh0ZXN0Q2FzZUlucHV0WzBdKTsKKyAg
ICAgICAgICAgIGlmICghaXNJZGVudGljYWwob3V0cHV0LCB0ZXN0Q2FzZUlucHV0WzFdICsgMCkp
CisgICAgICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0QWxsVHlwZXNXaXRob3V0TmVnYXRp
dmVaZXJvQ2FsbCBmb3IgaW5wdXQgIiArIHRlc3RDYXNlSW5wdXRbMF0gKyAiIGV4cGVjdGVkICIg
KyB0ZXN0Q2FzZUlucHV0WzFdICsgIiBnb3QgIiArIG91dHB1dDsKKyAgICAgICAgfQorICAgIH0K
KyAgICBpZiAobnVtYmVyT2ZERkdDb21waWxlcyhvcGFxdWVBbGxUeXBlc1JvdW5kKSA+IDMpCisg
ICAgICAgIHRocm93ICJXZSBzaG91bGQgaGF2ZSBkZXRlY3RlZCByb3VuZCgpIHdhcyBwb2x5bW9y
cGhpYyBhbmQgZ2VuZXJhdGVkIGEgZ2VuZXJpYyB2ZXJzaW9uLiI7Cit9Cit0ZXN0QWxsVHlwZXNX
aXRob3V0TmVnYXRpdmVaZXJvQ2FsbCgpOworCisKKy8vIFRlc3QgTWF0aC5yb3VuZCgpIG9uIGEg
Y29tcGxldGVseSB0eXBlZCBpbnB1dC4gRXZlcnkgY2FsbCBzZWUgb25seSBvbmUgdHlwZS4KK2Z1
bmN0aW9uIHRlc3RTaW5nbGVUeXBlQ2FsbCgpIHsKKyAgICBmb3IgKGxldCB0ZXN0Q2FzZUlucHV0
IG9mIHZhbGlkSW5wdXRUZXN0Q2FzZXMpIHsKKyAgICAgICAgZXZhbChgCisgICAgICAgICAgICBm
dW5jdGlvbiBvcGFxdWVSb3VuZChhcmd1bWVudCkgeworICAgICAgICAgICAgICAgIHJldHVybiBN
YXRoLnJvdW5kKGFyZ3VtZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5vSW5saW5l
KG9wYXF1ZVJvdW5kKTsKKyAgICAgICAgICAgIG5vT1NSRXhpdEZ1enppbmcob3BhcXVlUm91bmQp
OworCisgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKCFpc0lkZW50aWNhbChvcGFxdWVSb3VuZCgke3Rlc3RDYXNlSW5wdXRbMF19
KSwgJHt0ZXN0Q2FzZUlucHV0WzFdfSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgIkZh
aWxlZCB0ZXN0U2luZ2xlVHlwZUNhbGwoKSI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVlUm91bmQpID4g
MSkKKyAgICAgICAgICAgICAgICB0aHJvdyAiV2Ugc2hvdWxkIGhhdmUgY29tcGlsZWQgYSBzaW5n
bGUgcm91bmQgZm9yIHRoZSBleHBlY3RlZCB0eXBlLiI7CisgICAgICAgIGApOworICAgIH0KK30K
K3Rlc3RTaW5nbGVUeXBlQ2FsbCgpOworCisKK2Z1bmN0aW9uIGNoZWNrQ29tcGlsZUNvdW50Rm9y
VXNlbGVzc05lZ2F0aXZlWmVybyh0ZXN0RnVuY3Rpb24pCit7CisgICAgaWYgKGpzY09wdGlvbnMo
KS51c2VNYXhpbWFsRmx1c2hJbnNlcnRpb25QaGFzZSkgeworICAgICAgICAvLyBJZiB3ZSBmb3Jj
ZWQgYSBmbHVzaCBhZnRlciB0aGUgb3BlcmF0aW9uLCB0aGUgbmVnYXRpdmUgemVybyBiZWNvbWVz
CisgICAgICAgIC8vIG9ic2VydmFibGUgYW5kIHdlIG1heSBiZSBvdmVybHkgb3B0aW1pc3RpYy4K
KyAgICAgICAgcmV0dXJuIG51bWJlck9mREZHQ29tcGlsZXModGVzdEZ1bmN0aW9uKSA8PSAyOwor
ICAgIH0KKyAgICByZXR1cm4gbnVtYmVyT2ZERkdDb21waWxlcyh0ZXN0RnVuY3Rpb24pIDw9IDE7
Cit9CisKKworLy8gVGVzdCBNYXRoLnJvdW5kKCkgb24gYSBjb21wbGV0ZWx5IHR5cGVkIGlucHV0
LCBidXQgd2l0aG91dCBuZWdhdGl2ZSB6ZXJvLgorZnVuY3Rpb24gdGVzdFNpbmdsZVR5cGVXaXRo
b3V0TmVnYXRpdmVaZXJvQ2FsbCgpIHsKKyAgICBmb3IgKGxldCB0ZXN0Q2FzZUlucHV0IG9mIHZh
bGlkSW5wdXRUZXN0Q2FzZXMpIHsKKyAgICAgICAgZXZhbChgCisgICAgICAgICAgICBmdW5jdGlv
biBvcGFxdWVSb3VuZChhcmd1bWVudCkgeworICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLnJv
dW5kKGFyZ3VtZW50KSArIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBub0lubGluZShv
cGFxdWVSb3VuZCk7CisgICAgICAgICAgICBub09TUkV4aXRGdXp6aW5nKG9wYXF1ZVJvdW5kKTsK
KworICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICAg
ICAgICAgIGlmICghaXNJZGVudGljYWwob3BhcXVlUm91bmQoJHt0ZXN0Q2FzZUlucHV0WzBdfSks
ICR7dGVzdENhc2VJbnB1dFsxXX0gKyAwKSkgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyAi
RmFpbGVkIHRlc3RTaW5nbGVUeXBlV2l0aG91dE5lZ2F0aXZlWmVyb0NhbGwoKSI7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFjaGVja0NvbXBpbGVD
b3VudEZvclVzZWxlc3NOZWdhdGl2ZVplcm8ob3BhcXVlUm91bmQpKQorICAgICAgICAgICAgICAg
IHRocm93ICJXZSBzaG91bGQgaGF2ZSBjb21waWxlZCBhIHNpbmdsZSByb3VuZCBmb3IgdGhlIGV4
cGVjdGVkIHR5cGUuIjsKKyAgICAgICAgYCk7CisgICAgfQorfQordGVzdFNpbmdsZVR5cGVXaXRo
b3V0TmVnYXRpdmVaZXJvQ2FsbCgpOworCisKKy8vIFRlc3QgTWF0aC5yb3VuZCgpIG9uIGNvbnN0
YW50cworZnVuY3Rpb24gdGVzdENvbnN0YW50KCkgeworICAgIGZvciAobGV0IHRlc3RDYXNlSW5w
dXQgb2YgdmFsaWRJbnB1dFRlc3RDYXNlcykgeworICAgICAgICBldmFsKGAKKyAgICAgICAgICAg
IGZ1bmN0aW9uIG9wYXF1ZVJvdW5kT25Db25zdGFudCgpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gTWF0aC5yb3VuZCgke3Rlc3RDYXNlSW5wdXRbMF19KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIG5vSW5saW5lKG9wYXF1ZVJvdW5kT25Db25zdGFudCk7CisgICAgICAgICAgICBub09T
UkV4aXRGdXp6aW5nKG9wYXF1ZVJvdW5kT25Db25zdGFudCk7CisKKyAgICAgICAgICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWlzSWRlbnRp
Y2FsKG9wYXF1ZVJvdW5kT25Db25zdGFudCgpLCAke3Rlc3RDYXNlSW5wdXRbMV19KSkgeworICAg
ICAgICAgICAgICAgICAgICB0aHJvdyAiRmFpbGVkIHRlc3RDb25zdGFudCgpIjsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobnVtYmVyT2ZERkdDb21w
aWxlcyhvcGFxdWVSb3VuZE9uQ29uc3RhbnQpID4gMSkKKyAgICAgICAgICAgICAgICB0aHJvdyAi
V2Ugc2hvdWxkIGhhdmUgY29tcGlsZWQgYSBzaW5nbGUgcm91bmQgZm9yIHRoZSBleHBlY3RlZCB0
eXBlLiI7CisgICAgICAgIGApOworICAgIH0KK30KK3Rlc3RDb25zdGFudCgpOworCisKKy8vIFZl
cmlmeSB3ZSBjYWxsIHZhbHVlT2YoKSBleGFjdGx5IG9uY2UgcGVyIGNhbGwuCitmdW5jdGlvbiBv
cGFxdWVSb3VuZEZvclNpZGVFZmZlY3RzKGFyZ3VtZW50KSB7CisgICAgcmV0dXJuIE1hdGgucm91
bmQoYXJndW1lbnQpOworfQorbm9JbmxpbmUob3BhcXVlUm91bmRGb3JTaWRlRWZmZWN0cyk7Citu
b09TUkV4aXRGdXp6aW5nKG9wYXF1ZVJvdW5kRm9yU2lkZUVmZmVjdHMpOworCitmdW5jdGlvbiB0
ZXN0U2lkZUVmZmVjdCgpIHsKKyAgICBsZXQgdGVzdE9iamVjdCA9IHsKKyAgICAgICAgY291bnRl
cjogMCwKKyAgICAgICAgdmFsdWVPZjogZnVuY3Rpb24oKSB7ICsrdGhpcy5jb3VudGVyOyByZXR1
cm4gMTY7IH0KKyAgICB9OworICAgIGxldCByb3VuZDE2ID0gTWF0aC5yb3VuZCgxNik7CisgICAg
Zm9yIChsZXQgaSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICBpZiAob3BhcXVlUm91bmRG
b3JTaWRlRWZmZWN0cyh0ZXN0T2JqZWN0KSAhPT0gcm91bmQxNikKKyAgICAgICAgICAgIHRocm93
ICJJbmNvcnJlY3QgcmVzdWx0IGluIHRlc3RTaWRlRWZmZWN0KCkiOworICAgIH0KKyAgICBpZiAo
dGVzdE9iamVjdC5jb3VudGVyICE9PSAxZTQpCisgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdFNp
ZGVFZmZlY3QoKSI7CisgICAgaWYgKG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVlUm91bmRGb3JT
aWRlRWZmZWN0cykgPiAxKQorICAgICAgICB0aHJvdyAib3BhcXVlUm91bmRGb3JTaWRlRWZmZWN0
cygpIGlzIHByZWRpY3RhYmxlLCBpdCBzaG91bGQgb25seSBiZSBjb21waWxlZCBvbmNlLiI7Cit9
Cit0ZXN0U2lkZUVmZmVjdCgpOworCisKKy8vIFZlcmlmeSByb3VuZCgpIGlzIG5vdCBzdWJqZWN0
IHRvIENTRSBpZiB0aGUgYXJndW1lbnQgaGFzIHNpZGUgZWZmZWN0cy4KK2Z1bmN0aW9uIG9wYXF1
ZVJvdW5kRm9yQ1NFKGFyZ3VtZW50KSB7CisgICAgcmV0dXJuIE1hdGgucm91bmQoYXJndW1lbnQp
ICsgTWF0aC5yb3VuZChhcmd1bWVudCkgKyBNYXRoLnJvdW5kKGFyZ3VtZW50KTsKK30KK25vSW5s
aW5lKG9wYXF1ZVJvdW5kRm9yQ1NFKTsKK25vT1NSRXhpdEZ1enppbmcob3BhcXVlUm91bmRGb3JD
U0UpOworCitmdW5jdGlvbiB0ZXN0Q1NFKCkgeworICAgIGxldCB0ZXN0T2JqZWN0ID0geworICAg
ICAgICBjb3VudGVyOiAwLAorICAgICAgICB2YWx1ZU9mOiBmdW5jdGlvbigpIHsgKyt0aGlzLmNv
dW50ZXI7IHJldHVybiAxNjsgfQorICAgIH07CisgICAgbGV0IHJvdW5kMTYgPSBNYXRoLnJvdW5k
KDE2KTsKKyAgICBsZXQgdGhyZWVSb3VuZDE2ID0gcm91bmQxNiArIHJvdW5kMTYgKyByb3VuZDE2
OworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgaWYgKG9wYXF1
ZVJvdW5kRm9yQ1NFKHRlc3RPYmplY3QpICE9PSB0aHJlZVJvdW5kMTYpCisgICAgICAgICAgICB0
aHJvdyAiSW5jb3JyZWN0IHJlc3VsdCBpbiB0ZXN0Q1NFKCkiOworICAgIH0KKyAgICBpZiAodGVz
dE9iamVjdC5jb3VudGVyICE9PSAzZTQpCisgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdENTRSgp
IjsKKyAgICBpZiAobnVtYmVyT2ZERkdDb21waWxlcyhvcGFxdWVSb3VuZEZvckNTRSkgPiAxKQor
ICAgICAgICB0aHJvdyAib3BhcXVlUm91bmRGb3JDU0UoKSBpcyBwcmVkaWN0YWJsZSwgaXQgc2hv
dWxkIG9ubHkgYmUgY29tcGlsZWQgb25jZS4iOworfQordGVzdENTRSgpOworCisKKy8vIFZlcmlm
eSByb3VuZCgpIGlzIG5vdCBzdWJqZWN0IHRvIERDRSBpZiB0aGUgYXJndW1lbnQgaGFzIHNpZGUg
ZWZmZWN0cy4KK2Z1bmN0aW9uIG9wYXF1ZVJvdW5kRm9yRENFKGFyZ3VtZW50KSB7CisgICAgTWF0
aC5yb3VuZChhcmd1bWVudCk7Cit9Citub0lubGluZShvcGFxdWVSb3VuZEZvckRDRSk7Citub09T
UkV4aXRGdXp6aW5nKG9wYXF1ZVJvdW5kRm9yRENFKTsKKworZnVuY3Rpb24gdGVzdERDRSgpIHsK
KyAgICBsZXQgdGVzdE9iamVjdCA9IHsKKyAgICAgICAgY291bnRlcjogMCwKKyAgICAgICAgdmFs
dWVPZjogZnVuY3Rpb24oKSB7ICsrdGhpcy5jb3VudGVyOyByZXR1cm4gMTY7IH0KKyAgICB9Owor
ICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgb3BhcXVlUm91bmRG
b3JEQ0UodGVzdE9iamVjdCk7CisgICAgfQorICAgIGlmICh0ZXN0T2JqZWN0LmNvdW50ZXIgIT09
IDFlNCkKKyAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0RENFKCkiOworICAgIGlmIChudW1iZXJP
ZkRGR0NvbXBpbGVzKG9wYXF1ZVJvdW5kRm9yRENFKSA+IDEpCisgICAgICAgIHRocm93ICJvcGFx
dWVSb3VuZEZvckRDRSgpIGlzIHByZWRpY3RhYmxlLCBpdCBzaG91bGQgb25seSBiZSBjb21waWxl
ZCBvbmNlLiI7Cit9Cit0ZXN0RENFKCk7CisKKworLy8gVGVzdCBleGNlcHRpb25zIGluIHRoZSBh
cmd1bWVudC4KK2Z1bmN0aW9uIHRlc3RFeGNlcHRpb24oKSB7CisgICAgbGV0IGNvdW50ZXIgPSAw
OworICAgIGZ1bmN0aW9uIG9wYXF1ZVJvdW5kV2l0aEV4Y2VwdGlvbihhcmd1bWVudCkgeworICAg
ICAgICBsZXQgcmVzdWx0ID0gTWF0aC5yb3VuZChhcmd1bWVudCk7CisgICAgICAgICsrY291bnRl
cjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgbm9JbmxpbmUob3BhcXVlUm91
bmRXaXRoRXhjZXB0aW9uKTsKKworICAgIGxldCB0ZXN0T2JqZWN0ID0geyB2YWx1ZU9mOiAoKSA9
PiB7ICByZXR1cm4gNjQ7IH0gfTsKKyAgICBsZXQgcm91bmQ2NCA9IE1hdGgucm91bmQoNjQpOwor
CisgICAgLy8gV2FybSB1cCB3aXRob3V0IGV4Y2VwdGlvbi4KKyAgICBmb3IgKGxldCBpID0gMDsg
aSA8IDFlMzsgKytpKSB7CisgICAgICAgIGlmIChvcGFxdWVSb3VuZFdpdGhFeGNlcHRpb24odGVz
dE9iamVjdCkgIT09IHJvdW5kNjQpCisgICAgICAgICAgICB0aHJvdyAiSW5jb3JyZWN0IHJlc3Vs
dCBpbiBvcGFxdWVSb3VuZFdpdGhFeGNlcHRpb24oKSI7CisgICAgfQorCisgICAgbGV0IHRlc3RU
aHJvd09iamVjdCA9IHsgdmFsdWVPZjogKCkgPT4geyB0aHJvdyB0ZXN0T2JqZWN0OyByZXR1cm4g
NjQ7IH0gfTsKKworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMWUyOyArK2kpIHsKKyAgICAgICAg
dHJ5IHsKKyAgICAgICAgICAgIGlmIChvcGFxdWVSb3VuZFdpdGhFeGNlcHRpb24odGVzdFRocm93
T2JqZWN0KSAhPT0gOCkKKyAgICAgICAgICAgICAgICB0aHJvdyAiVGhpcyBjb2RlIHNob3VsZCBu
b3QgYmUgcmVhY2hlZCEhIjsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgaWYg
KGUgIT09IHRlc3RPYmplY3QpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyAiV3Jvbmcgb2JqZWN0
IHRocm93biBmcm9tIG9wYXF1ZVJvdW5kV2l0aEV4Y2VwdGlvbi4iCisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY291bnRlciAhPT0gMWUzKSB7CisgICAgICAgIHRo
cm93ICJJbnZhbGlkIGNvdW50IGluIHRlc3RFeGNlcHRpb24oKSI7CisgICAgfQorfQordGVzdEV4
Y2VwdGlvbigpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvYXJpdGgtdHJ1bmMtb24tdmFy
aW91cy10eXBlcy5qcyBiL0pTVGVzdHMvc3RyZXNzL2FyaXRoLXRydW5jLW9uLXZhcmlvdXMtdHlw
ZXMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMjFmMjk5MTMyMzUxYjUxYzgwNzFlYjQzN2Y2ZjcwNGI1MGJkYzUw
NwotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvc3RyZXNzL2FyaXRoLXRydW5jLW9uLXZhcmlv
dXMtdHlwZXMuanMKQEAgLTAsMCArMSwzMDYgQEAKKyJ1c2Ugc3RyaWN0IjsKKworbGV0IHZhbGlk
SW5wdXRUZXN0Q2FzZXMgPSBbCisgICAgLy8gaW5wdXQgYXMgc3RyaW5nLCBleHBlY3RlZCByZXN1
bHQgYXMgc3RyaW5nLgorICAgIFsidW5kZWZpbmVkIiwgIk5hTiJdLAorICAgIFsibnVsbCIsICIw
Il0sCisgICAgWyIwIiwgIjAiXSwKKyAgICBbIi0wLiIsICItMCJdLAorICAgIFsiMC41IiwgIjAi
XSwKKyAgICBbIi0wLjUiLCAiLTAiXSwKKyAgICBbIjQiLCAiNCJdLAorICAgIFsiNDIuMSIsICI0
MiJdLAorICAgIFsiNDIuNSIsICI0MiJdLAorICAgIFsiNDIuOSIsICI0MiJdLAorICAgIFsiLTQy
LjEiLCAiLTQyIl0sCisgICAgWyItNDIuNSIsICItNDIiXSwKKyAgICBbIi00Mi45IiwgIi00MiJd
LAorICAgIFsiTWF0aC5QSSIsICIzIl0sCisgICAgWyJJbmZpbml0eSIsICJJbmZpbml0eSJdLAor
ICAgIFsiLUluZmluaXR5IiwgIi1JbmZpbml0eSJdLAorICAgIFsiTmFOIiwgIk5hTiJdLAorICAg
IFsiXCJXZWJLaXRcIiIsICJOYU4iXSwKKyAgICBbIlwiNFwiIiwgIjQiXSwKKyAgICBbIlwiNDIu
NVwiIiwgIjQyIl0sCisgICAgWyJ7IHZhbHVlT2Y6ICgpID0+IHsgcmV0dXJuIDQ7IH0gfSIsICI0
Il0sCisgICAgWyJ7IHZhbHVlT2Y6ICgpID0+IHsgcmV0dXJuIDA7IH0gfSIsICIwIl0sCisgICAg
WyJ7IHZhbHVlT2Y6ICgpID0+IHsgcmV0dXJuIC0wOyB9IH0iLCAiLTAiXSwKKyAgICBbInsgdmFs
dWVPZjogKCkgPT4geyByZXR1cm4gMC41OyB9IH0iLCAiMCJdLAorICAgIFsieyB2YWx1ZU9mOiAo
KSA9PiB7IHJldHVybiAtMC41OyB9IH0iLCAiLTAiXSwKKyAgICBbInsgdmFsdWVPZjogKCkgPT4g
eyByZXR1cm4gTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVI7IH0gfSIsICItOTAwNzE5OTI1NDc0MDk5
MSJdLAorICAgIFsieyB2YWx1ZU9mOiAoKSA9PiB7IHJldHVybiBOdW1iZXIuTUFYX1NBRkVfSU5U
RUdFUjsgfSB9IiwgIjkwMDcxOTkyNTQ3NDA5OTEiXSwKKyAgICBbInsgdmFsdWVPZjogKCkgPT4g
eyByZXR1cm4gMHg4MDAwMDAwMHwwOyB9IH0iLCAiLTIxNDc0ODM2NDgiXSwKKyAgICBbInsgdmFs
dWVPZjogKCkgPT4geyByZXR1cm4gMHg3ZmZmZmZmZnwwOyB9IH0iLCAiMjE0NzQ4MzY0NyJdLAor
ICAgIFsieyB2YWx1ZU9mOiAoKSA9PiB7IHJldHVybiAoMHg4MDAwMDAwMHwwKSAtIDAuNTsgfSB9
IiwgIi0yMTQ3NDgzNjQ4Il0sCisgICAgWyJ7IHZhbHVlT2Y6ICgpID0+IHsgcmV0dXJuICgweDdm
ZmZmZmZmfDApICsgMC41OyB9IH0iLCAiMjE0NzQ4MzY0NyJdLAorXTsKKworbGV0IHZhbGlkSW5w
dXRUeXBlZFRlc3RDYXNlcyA9IHZhbGlkSW5wdXRUZXN0Q2FzZXMubWFwKChlbGVtZW50KSA9PiB7
IHJldHVybiBbZXZhbCgiKCIgKyBlbGVtZW50WzBdICsgIikiKSwgZXZhbChlbGVtZW50WzFdKV0g
fSk7CisKK2Z1bmN0aW9uIGlzSWRlbnRpY2FsKHJlc3VsdCwgZXhwZWN0ZWQpCit7CisgICAgaWYg
KGV4cGVjdGVkID09PSBleHBlY3RlZCkgeworICAgICAgICBpZiAocmVzdWx0ICE9PSBleHBlY3Rl
ZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFleHBlY3RlZCAmJiAo
MSAvIGV4cGVjdGVkKSAhPT0gKDEgLyByZXN1bHQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0ICE9PSBy
ZXN1bHQ7Cit9CisKKworLy8gVGVzdCBNYXRoLnRydW5jKCkgd2l0aG91dCBhcmd1bWVudHMuCitm
dW5jdGlvbiBvcGFxdWVUcnVuY05vQXJndW1lbnQoKSB7CisgICAgcmV0dXJuIE1hdGgudHJ1bmMo
KTsKK30KK25vSW5saW5lKG9wYXF1ZVRydW5jTm9Bcmd1bWVudCk7Citub09TUkV4aXRGdXp6aW5n
KG9wYXF1ZVRydW5jTm9Bcmd1bWVudCk7CisKK2Z1bmN0aW9uIHRlc3ROb0FyZ3VtZW50KCkgewor
ICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAgICAgbGV0IG91dHB1dCA9
IG9wYXF1ZVRydW5jTm9Bcmd1bWVudCgpOworICAgICAgICBpZiAoIWlzSWRlbnRpY2FsKG91dHB1
dCwgTmFOKSkgeworICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCBvcGFxdWVUcnVuY05vQXJndW1l
bnQiOworICAgICAgICB9CisgICAgfQorICAgIGlmIChudW1iZXJPZkRGR0NvbXBpbGVzKG9wYXF1
ZVRydW5jTm9Bcmd1bWVudCkgPiAxKQorICAgICAgICB0aHJvdyAiVGhlIGNhbGwgd2l0aG91dCBh
cmd1bWVudHMgc2hvdWxkIG5ldmVyIGV4aXQuIjsKK30KK3Rlc3ROb0FyZ3VtZW50KCk7CisKKwor
Ly8gVGVzdCBNYXRoLnRydW5jKCkgd2l0aCBhIHZlcnkgcG9seW1vcnBoaWMgaW5wdXQuIEFsbCB0
ZXN0IGNhc2VzIGFyZSBzZWVuIGF0IGVhY2ggaXRlcmF0aW9uLgorZnVuY3Rpb24gb3BhcXVlQWxs
VHlwZXNUcnVuYyhhcmd1bWVudCkgeworICAgIHJldHVybiBNYXRoLnRydW5jKGFyZ3VtZW50KTsK
K30KK25vSW5saW5lKG9wYXF1ZUFsbFR5cGVzVHJ1bmMpOworbm9PU1JFeGl0RnV6emluZyhvcGFx
dWVBbGxUeXBlc1RydW5jKTsKKworZnVuY3Rpb24gdGVzdEFsbFR5cGVzQ2FsbCgpIHsKKyAgICBm
b3IgKGxldCBpID0gMDsgaSA8IDFlMzsgKytpKSB7CisgICAgICAgIGZvciAobGV0IHRlc3RDYXNl
SW5wdXQgb2YgdmFsaWRJbnB1dFR5cGVkVGVzdENhc2VzKSB7CisgICAgICAgICAgICBsZXQgb3V0
cHV0ID0gb3BhcXVlQWxsVHlwZXNUcnVuYyh0ZXN0Q2FzZUlucHV0WzBdKTsKKyAgICAgICAgICAg
IGlmICghaXNJZGVudGljYWwob3V0cHV0LCB0ZXN0Q2FzZUlucHV0WzFdKSkKKyAgICAgICAgICAg
ICAgICB0aHJvdyAiRmFpbGVkIHRlc3RBbGxUeXBlc0NhbGwgZm9yIGlucHV0ICIgKyB0ZXN0Q2Fz
ZUlucHV0WzBdICsgIiBleHBlY3RlZCAiICsgdGVzdENhc2VJbnB1dFsxXSArICIgZ290ICIgKyBv
dXRwdXQ7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG51bWJlck9mREZHQ29tcGlsZXMob3Bh
cXVlQWxsVHlwZXNUcnVuYykgPiAzKQorICAgICAgICB0aHJvdyAiV2Ugc2hvdWxkIGhhdmUgZGV0
ZWN0ZWQgdHJ1bmMoKSB3YXMgcG9seW1vcnBoaWMgYW5kIGdlbmVyYXRlZCBhIGdlbmVyaWMgdmVy
c2lvbi4iOworfQordGVzdEFsbFR5cGVzQ2FsbCgpOworCisKKy8vIFBvbHltb3JwaGljIGlucHV0
IGJ1dCBuZWdhdGl2ZSB6ZXJvIGlzIG5vdCBvYnNlcnZhYmxlLgorZnVuY3Rpb24gb3BhcXVlQWxs
VHlwZXNUcnVuY1dpdGhvdXROZWdhdGl2ZVplcm8oYXJndW1lbnQpIHsKKyAgICByZXR1cm4gTWF0
aC50cnVuYyhhcmd1bWVudCkgKyAwOworfQorbm9JbmxpbmUob3BhcXVlQWxsVHlwZXNUcnVuY1dp
dGhvdXROZWdhdGl2ZVplcm8pOworbm9PU1JFeGl0RnV6emluZyhvcGFxdWVBbGxUeXBlc1RydW5j
V2l0aG91dE5lZ2F0aXZlWmVybyk7CisKK2Z1bmN0aW9uIHRlc3RBbGxUeXBlc1dpdGhvdXROZWdh
dGl2ZVplcm9DYWxsKCkgeworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMWUzOyArK2kpIHsKKyAg
ICAgICAgZm9yIChsZXQgdGVzdENhc2VJbnB1dCBvZiB2YWxpZElucHV0VHlwZWRUZXN0Q2FzZXMp
IHsKKyAgICAgICAgICAgIGxldCBvdXRwdXQgPSBvcGFxdWVBbGxUeXBlc1RydW5jV2l0aG91dE5l
Z2F0aXZlWmVybyh0ZXN0Q2FzZUlucHV0WzBdKTsKKyAgICAgICAgICAgIGlmICghaXNJZGVudGlj
YWwob3V0cHV0LCB0ZXN0Q2FzZUlucHV0WzFdICsgMCkpCisgICAgICAgICAgICAgICAgdGhyb3cg
IkZhaWxlZCB0ZXN0QWxsVHlwZXNXaXRob3V0TmVnYXRpdmVaZXJvQ2FsbCBmb3IgaW5wdXQgIiAr
IHRlc3RDYXNlSW5wdXRbMF0gKyAiIGV4cGVjdGVkICIgKyB0ZXN0Q2FzZUlucHV0WzFdICsgIiBn
b3QgIiArIG91dHB1dDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobnVtYmVyT2ZERkdDb21w
aWxlcyhvcGFxdWVBbGxUeXBlc1RydW5jKSA+IDMpCisgICAgICAgIHRocm93ICJXZSBzaG91bGQg
aGF2ZSBkZXRlY3RlZCB0cnVuYygpIHdhcyBwb2x5bW9ycGhpYyBhbmQgZ2VuZXJhdGVkIGEgZ2Vu
ZXJpYyB2ZXJzaW9uLiI7Cit9Cit0ZXN0QWxsVHlwZXNXaXRob3V0TmVnYXRpdmVaZXJvQ2FsbCgp
OworCisKKy8vIFRlc3QgTWF0aC50cnVuYygpIG9uIGEgY29tcGxldGVseSB0eXBlZCBpbnB1dC4g
RXZlcnkgY2FsbCBzZWUgb25seSBvbmUgdHlwZS4KK2Z1bmN0aW9uIHRlc3RTaW5nbGVUeXBlQ2Fs
bCgpIHsKKyAgICBmb3IgKGxldCB0ZXN0Q2FzZUlucHV0IG9mIHZhbGlkSW5wdXRUZXN0Q2FzZXMp
IHsKKyAgICAgICAgZXZhbChgCisgICAgICAgICAgICBmdW5jdGlvbiBvcGFxdWVUcnVuYyhhcmd1
bWVudCkgeworICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLnRydW5jKGFyZ3VtZW50KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIG5vSW5saW5lKG9wYXF1ZVRydW5jKTsKKyAgICAgICAg
ICAgIG5vT1NSRXhpdEZ1enppbmcob3BhcXVlVHJ1bmMpOworCisgICAgICAgICAgICBmb3IgKGxl
dCBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFpc0lkZW50aWNh
bChvcGFxdWVUcnVuYygke3Rlc3RDYXNlSW5wdXRbMF19KSwgJHt0ZXN0Q2FzZUlucHV0WzFdfSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0U2luZ2xlVHlwZUNhbGwo
KSI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG51
bWJlck9mREZHQ29tcGlsZXMob3BhcXVlVHJ1bmMpID4gMSkKKyAgICAgICAgICAgICAgICB0aHJv
dyAiRmFpbGVkIHRlc3RTaW5nbGVUeXBlQ2FsbCgpLiBXZSBzaG91bGQgaGF2ZSBjb21waWxlZCBh
IHNpbmdsZSB0cnVuYyBmb3IgdGhlIGV4cGVjdGVkIHR5cGUuIjsKKyAgICAgICAgYCk7CisgICAg
fQorfQordGVzdFNpbmdsZVR5cGVDYWxsKCk7CisKKworZnVuY3Rpb24gY2hlY2tDb21waWxlQ291
bnRGb3JVc2VsZXNzTmVnYXRpdmVaZXJvKHRlc3RGdW5jdGlvbikKK3sKKyAgICBpZiAoanNjT3B0
aW9ucygpLnVzZU1heGltYWxGbHVzaEluc2VydGlvblBoYXNlKSB7CisgICAgICAgIC8vIElmIHdl
IGZvcmNlZCBhIGZsdXNoIGFmdGVyIHRoZSBvcGVyYXRpb24sIHRoZSBuZWdhdGl2ZSB6ZXJvIGJl
Y29tZXMKKyAgICAgICAgLy8gb2JzZXJ2YWJsZSBhbmQgd2UgbWF5IGJlIG92ZXJseSBvcHRpbWlz
dGljLgorICAgICAgICByZXR1cm4gbnVtYmVyT2ZERkdDb21waWxlcyh0ZXN0RnVuY3Rpb24pIDw9
IDI7CisgICAgfQorICAgIHJldHVybiBudW1iZXJPZkRGR0NvbXBpbGVzKHRlc3RGdW5jdGlvbikg
PD0gMTsKK30KKworCisvLyBUZXN0IE1hdGgudHJ1bmMoKSBvbiBhIGNvbXBsZXRlbHkgdHlwZWQg
aW5wdXQsIGJ1dCB3aXRob3V0IG5lZ2F0aXZlIHplcm8uCitmdW5jdGlvbiB0ZXN0U2luZ2xlVHlw
ZVdpdGhvdXROZWdhdGl2ZVplcm9DYWxsKCkgeworICAgIGZvciAobGV0IHRlc3RDYXNlSW5wdXQg
b2YgdmFsaWRJbnB1dFRlc3RDYXNlcykgeworICAgICAgICBldmFsKGAKKyAgICAgICAgICAgIGZ1
bmN0aW9uIG9wYXF1ZVRydW5jKGFyZ3VtZW50KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1h
dGgudHJ1bmMoYXJndW1lbnQpICsgMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5vSW5s
aW5lKG9wYXF1ZVRydW5jKTsKKyAgICAgICAgICAgIG5vT1NSRXhpdEZ1enppbmcob3BhcXVlVHJ1
bmMpOworCisgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCFpc0lkZW50aWNhbChvcGFxdWVUcnVuYygke3Rlc3RDYXNlSW5wdXRb
MF19KSwgJHt0ZXN0Q2FzZUlucHV0WzFdfSArIDApKSB7CisgICAgICAgICAgICAgICAgICAgIHRo
cm93ICJGYWlsZWQgdGVzdFNpbmdsZVR5cGVXaXRob3V0TmVnYXRpdmVaZXJvQ2FsbCgpIjsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWNoZWNrQ29t
cGlsZUNvdW50Rm9yVXNlbGVzc05lZ2F0aXZlWmVybyhvcGFxdWVUcnVuYykpCisgICAgICAgICAg
ICAgICAgdGhyb3cgIkZhaWxlZCB0ZXN0U2luZ2xlVHlwZVdpdGhvdXROZWdhdGl2ZVplcm9DYWxs
KCkuIFdlIHNob3VsZCBoYXZlIGNvbXBpbGVkIGEgc2luZ2xlIHRydW5jIGZvciB0aGUgZXhwZWN0
ZWQgdHlwZS4iOworICAgICAgICBgKTsKKyAgICB9Cit9Cit0ZXN0U2luZ2xlVHlwZVdpdGhvdXRO
ZWdhdGl2ZVplcm9DYWxsKCk7CisKKworLy8gVGVzdCBNYXRoLnRydW5jKCkgb24gY29uc3RhbnRz
CitmdW5jdGlvbiB0ZXN0Q29uc3RhbnQoKSB7CisgICAgZm9yIChsZXQgdGVzdENhc2VJbnB1dCBv
ZiB2YWxpZElucHV0VGVzdENhc2VzKSB7CisgICAgICAgIGV2YWwoYAorICAgICAgICAgICAgZnVu
Y3Rpb24gb3BhcXVlVHJ1bmNPbkNvbnN0YW50KCkgeworICAgICAgICAgICAgICAgIHJldHVybiBN
YXRoLnRydW5jKCR7dGVzdENhc2VJbnB1dFswXX0pOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgbm9JbmxpbmUob3BhcXVlVHJ1bmNPbkNvbnN0YW50KTsKKyAgICAgICAgICAgIG5vT1NSRXhp
dEZ1enppbmcob3BhcXVlVHJ1bmNPbkNvbnN0YW50KTsKKworICAgICAgICAgICAgZm9yIChsZXQg
aSA9IDA7IGkgPCAxZTQ7ICsraSkgeworICAgICAgICAgICAgICAgIGlmICghaXNJZGVudGljYWwo
b3BhcXVlVHJ1bmNPbkNvbnN0YW50KCksICR7dGVzdENhc2VJbnB1dFsxXX0pKSB7CisgICAgICAg
ICAgICAgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdENvbnN0YW50KCkiOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChudW1iZXJPZkRGR0NvbXBpbGVz
KG9wYXF1ZVRydW5jT25Db25zdGFudCkgPiAxKQorICAgICAgICAgICAgICAgIHRocm93ICJGYWls
ZWQgdGVzdENvbnN0YW50KCkuIFdlIHNob3VsZCBoYXZlIGNvbXBpbGVkIGEgc2luZ2xlIHRydW5j
IGZvciB0aGUgZXhwZWN0ZWQgdHlwZS4iOworICAgICAgICBgKTsKKyAgICB9Cit9Cit0ZXN0Q29u
c3RhbnQoKTsKKworCisvLyBWZXJpZnkgd2UgY2FsbCB2YWx1ZU9mKCkgZXhhY3RseSBvbmNlIHBl
ciBjYWxsLgorZnVuY3Rpb24gb3BhcXVlVHJ1bmNGb3JTaWRlRWZmZWN0cyhhcmd1bWVudCkgewor
ICAgIHJldHVybiBNYXRoLnRydW5jKGFyZ3VtZW50KTsKK30KK25vSW5saW5lKG9wYXF1ZVRydW5j
Rm9yU2lkZUVmZmVjdHMpOworbm9PU1JFeGl0RnV6emluZyhvcGFxdWVUcnVuY0ZvclNpZGVFZmZl
Y3RzKTsKKworZnVuY3Rpb24gdGVzdFNpZGVFZmZlY3QoKSB7CisgICAgbGV0IHRlc3RPYmplY3Qg
PSB7CisgICAgICAgIGNvdW50ZXI6IDAsCisgICAgICAgIHZhbHVlT2Y6IGZ1bmN0aW9uKCkgeyAr
K3RoaXMuY291bnRlcjsgcmV0dXJuIDE2OyB9CisgICAgfTsKKyAgICBsZXQgdHJ1bmMxNiA9IE1h
dGgudHJ1bmMoMTYpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMWU0OyArK2kpIHsKKyAgICAg
ICAgaWYgKG9wYXF1ZVRydW5jRm9yU2lkZUVmZmVjdHModGVzdE9iamVjdCkgIT09IHRydW5jMTYp
CisgICAgICAgICAgICB0aHJvdyAiSW5jb3JyZWN0IHJlc3VsdCBpbiB0ZXN0U2lkZUVmZmVjdCgp
IjsKKyAgICB9CisgICAgaWYgKHRlc3RPYmplY3QuY291bnRlciAhPT0gMWU0KQorICAgICAgICB0
aHJvdyAiRmFpbGVkIHRlc3RTaWRlRWZmZWN0KCkiOworICAgIGlmIChudW1iZXJPZkRGR0NvbXBp
bGVzKG9wYXF1ZVRydW5jRm9yU2lkZUVmZmVjdHMpID4gMSkKKyAgICAgICAgdGhyb3cgIm9wYXF1
ZVRydW5jRm9yU2lkZUVmZmVjdHMoKSBpcyBwcmVkaWN0YWJsZSwgaXQgc2hvdWxkIG9ubHkgYmUg
Y29tcGlsZWQgb25jZS4iOworfQordGVzdFNpZGVFZmZlY3QoKTsKKworCisvLyBWZXJpZnkgdHJ1
bmMoKSBpcyBub3Qgc3ViamVjdCB0byBDU0UgaWYgdGhlIGFyZ3VtZW50IGhhcyBzaWRlIGVmZmVj
dHMuCitmdW5jdGlvbiBvcGFxdWVUcnVuY0ZvckNTRShhcmd1bWVudCkgeworICAgIHJldHVybiBN
YXRoLnRydW5jKGFyZ3VtZW50KSArIE1hdGgudHJ1bmMoYXJndW1lbnQpICsgTWF0aC50cnVuYyhh
cmd1bWVudCk7Cit9Citub0lubGluZShvcGFxdWVUcnVuY0ZvckNTRSk7Citub09TUkV4aXRGdXp6
aW5nKG9wYXF1ZVRydW5jRm9yQ1NFKTsKKworZnVuY3Rpb24gdGVzdENTRSgpIHsKKyAgICBsZXQg
dGVzdE9iamVjdCA9IHsKKyAgICAgICAgY291bnRlcjogMCwKKyAgICAgICAgdmFsdWVPZjogZnVu
Y3Rpb24oKSB7ICsrdGhpcy5jb3VudGVyOyByZXR1cm4gMTY7IH0KKyAgICB9OworICAgIGxldCB0
cnVuYzE2ID0gTWF0aC50cnVuYygxNik7CisgICAgbGV0IHRocmVlVHJ1bmMxNiA9IHRydW5jMTYg
KyB0cnVuYzE2ICsgdHJ1bmMxNjsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDFlNDsgKytpKSB7
CisgICAgICAgIGlmIChvcGFxdWVUcnVuY0ZvckNTRSh0ZXN0T2JqZWN0KSAhPT0gdGhyZWVUcnVu
YzE2KQorICAgICAgICAgICAgdGhyb3cgIkluY29ycmVjdCByZXN1bHQgaW4gdGVzdENTRSgpIjsK
KyAgICB9CisgICAgaWYgKHRlc3RPYmplY3QuY291bnRlciAhPT0gM2U0KQorICAgICAgICB0aHJv
dyAiRmFpbGVkIHRlc3RDU0UoKSI7CisgICAgaWYgKG51bWJlck9mREZHQ29tcGlsZXMob3BhcXVl
VHJ1bmNGb3JDU0UpID4gMSkKKyAgICAgICAgdGhyb3cgIm9wYXF1ZVRydW5jRm9yQ1NFKCkgaXMg
cHJlZGljdGFibGUsIGl0IHNob3VsZCBvbmx5IGJlIGNvbXBpbGVkIG9uY2UuIjsKK30KK3Rlc3RD
U0UoKTsKKworCisvLyBWZXJpZnkgdHJ1bmMoKSBpcyBub3Qgc3ViamVjdCB0byBEQ0UgaWYgdGhl
IGFyZ3VtZW50IGhhcyBzaWRlIGVmZmVjdHMuCitmdW5jdGlvbiBvcGFxdWVUcnVuY0ZvckRDRShh
cmd1bWVudCkgeworICAgIE1hdGgudHJ1bmMoYXJndW1lbnQpOworfQorbm9JbmxpbmUob3BhcXVl
VHJ1bmNGb3JEQ0UpOworbm9PU1JFeGl0RnV6emluZyhvcGFxdWVUcnVuY0ZvckRDRSk7CisKK2Z1
bmN0aW9uIHRlc3REQ0UoKSB7CisgICAgbGV0IHRlc3RPYmplY3QgPSB7CisgICAgICAgIGNvdW50
ZXI6IDAsCisgICAgICAgIHZhbHVlT2Y6IGZ1bmN0aW9uKCkgeyArK3RoaXMuY291bnRlcjsgcmV0
dXJuIDE2OyB9CisgICAgfTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDFlNDsgKytpKSB7Cisg
ICAgICAgIG9wYXF1ZVRydW5jRm9yRENFKHRlc3RPYmplY3QpOworICAgIH0KKyAgICBpZiAodGVz
dE9iamVjdC5jb3VudGVyICE9PSAxZTQpCisgICAgICAgIHRocm93ICJGYWlsZWQgdGVzdERDRSgp
IjsKKyAgICBpZiAobnVtYmVyT2ZERkdDb21waWxlcyhvcGFxdWVUcnVuY0ZvckRDRSkgPiAxKQor
ICAgICAgICB0aHJvdyAib3BhcXVlVHJ1bmNGb3JEQ0UoKSBpcyBwcmVkaWN0YWJsZSwgaXQgc2hv
dWxkIG9ubHkgYmUgY29tcGlsZWQgb25jZS4iOworfQordGVzdERDRSgpOworCisKKy8vIFRlc3Qg
ZXhjZXB0aW9ucyBpbiB0aGUgYXJndW1lbnQuCitmdW5jdGlvbiB0ZXN0RXhjZXB0aW9uKCkgewor
ICAgIGxldCBjb3VudGVyID0gMDsKKyAgICBmdW5jdGlvbiBvcGFxdWVUcnVuY1dpdGhFeGNlcHRp
b24oYXJndW1lbnQpIHsKKyAgICAgICAgbGV0IHJlc3VsdCA9IE1hdGgudHJ1bmMoYXJndW1lbnQp
OworICAgICAgICArK2NvdW50ZXI7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAg
IG5vSW5saW5lKG9wYXF1ZVRydW5jV2l0aEV4Y2VwdGlvbik7CisKKyAgICBsZXQgdGVzdE9iamVj
dCA9IHsgdmFsdWVPZjogKCkgPT4geyAgcmV0dXJuIDY0OyB9IH07CisgICAgbGV0IHRydW5jNjQg
PSBNYXRoLnRydW5jKDY0KTsKKworICAgIC8vIFdhcm0gdXAgd2l0aG91dCBleGNlcHRpb24uCisg
ICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxZTM7ICsraSkgeworICAgICAgICBpZiAob3BhcXVlVHJ1
bmNXaXRoRXhjZXB0aW9uKHRlc3RPYmplY3QpICE9PSB0cnVuYzY0KQorICAgICAgICAgICAgdGhy
b3cgIkluY29ycmVjdCByZXN1bHQgaW4gb3BhcXVlVHJ1bmNXaXRoRXhjZXB0aW9uKCkiOworICAg
IH0KKworICAgIGxldCB0ZXN0VGhyb3dPYmplY3QgPSB7IHZhbHVlT2Y6ICgpID0+IHsgdGhyb3cg
dGVzdE9iamVjdDsgcmV0dXJuIDY0OyB9IH07CisKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDFl
MjsgKytpKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAob3BhcXVlVHJ1bmNXaXRo
RXhjZXB0aW9uKHRlc3RUaHJvd09iamVjdCkgIT09IDgpCisgICAgICAgICAgICAgICAgdGhyb3cg
IlRoaXMgY29kZSBzaG91bGQgbm90IGJlIHJlYWNoZWQhISI7CisgICAgICAgIH0gY2F0Y2ggKGUp
IHsKKyAgICAgICAgICAgIGlmIChlICE9PSB0ZXN0T2JqZWN0KSB7CisgICAgICAgICAgICAgICAg
dGhyb3cgIldyb25nIG9iamVjdCB0aHJvd24gZnJvbSBvcGFxdWVUcnVuY1dpdGhFeGNlcHRpb24u
IgorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGNvdW50ZXIgIT09
IDFlMykgeworICAgICAgICB0aHJvdyAiSW52YWxpZCBjb3VudCBpbiB0ZXN0RXhjZXB0aW9uKCki
OworICAgIH0KK30KK3Rlc3RFeGNlcHRpb24oKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>