<?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>228675</bug_id>
          
          <creation_ts>2021-07-30 20:59:22 -0700</creation_ts>
          <short_desc>Add new patterns to instruction selector to utilize AND/EOR/ORR-with-shift supported by ARM64</short_desc>
          <delta_ts>2021-08-02 22:42:27 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yijia Huang">yijia_huang</reporter>
          <assigned_to name="Yijia Huang">yijia_huang</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1781045</commentid>
    <comment_count>0</comment_count>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-07-30 20:59:22 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1781046</commentid>
    <comment_count>1</comment_count>
      <attachid>434688</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-07-30 21:01:57 -0700</bug_when>
    <thetext>Created attachment 434688
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1781048</commentid>
    <comment_count>2</comment_count>
      <attachid>434688</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-07-30 21:24:44 -0700</bug_when>
    <thetext>Comment on attachment 434688
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:3
&gt; +        Add new patternes to instruction selector to utilize AND/EOR/ORR-with-shift and UMULL supported by ARM64

nit: typo: /patternes/patterns/.  Can you fix the bugzilla title as well?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1781074</commentid>
    <comment_count>3</comment_count>
      <attachid>434698</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-07-31 07:53:08 -0700</bug_when>
    <thetext>Created attachment 434698
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1781126</commentid>
    <comment_count>4</comment_count>
      <attachid>434713</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-07-31 20:54:44 -0700</bug_when>
    <thetext>Created attachment 434713
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1781400</commentid>
    <comment_count>5</comment_count>
      <attachid>434713</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-08-02 14:49:00 -0700</bug_when>
    <thetext>Comment on attachment 434713
Patch

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

New bitop+shift selection looks good. One suggestion there.

But I&apos;m confused by changes in call sites of isMergeableValue

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:2675
&gt; +                        if (isMergeableValue(multiplyLeft, SExt32) &amp;&amp; isMergeableValue(multiplyRight, SExt32)) 

How is this behavior change sound? We&apos;re no longer checking canBeInternal, but we&apos;re still calling commitInternal.

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:2678
&gt; +                        if (isMergeableValue(multiplyLeft, ZExt32) &amp;&amp; isMergeableValue(multiplyRight, ZExt32)) 

ditto

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:2753
&gt; +                    if (isMergeableValue(multiplyLeft, SExt32) &amp;&amp; isMergeableValue(multiplyRight, SExt32)) 

ditto

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:2876
&gt; +                    commitInternal(left);
&gt; +                    commitInternal(right);

ditto regarding not checking canBeInternal.

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:2998
&gt; +            // and-with-shift Pattern: n &amp; (m ShiftType amount)

nit: I&apos;d use the names the function uses in this comment:
&quot;and-with-shift Pattern: left &amp; (right ShiftType amount)&quot;

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:3284
&gt; +            auto tryAppendXorWithShift = [&amp;] (Value* left, Value* right) -&gt; bool {

tryAppendXorWithShift and tryAppendAndWithShift and tryAppendOrWithShift are all identical minus the opcodes passed to the opcodeBasedOnShiftKind call. Can we abstract these 3 into a function shared by all? Maybe tryAppendBitOpWithShift or something?

You can still keep all 3 lambdas, just so it&apos;s easier to call with (left, right) and (right, left), but the lambdas can call a shared helper.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1781432</commentid>
    <comment_count>6</comment_count>
      <attachid>434795</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-08-02 15:52:59 -0700</bug_when>
    <thetext>Created attachment 434795
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1781478</commentid>
    <comment_count>7</comment_count>
      <attachid>434806</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-08-02 17:15:27 -0700</bug_when>
    <thetext>Created attachment 434806
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1781505</commentid>
    <comment_count>8</comment_count>
      <attachid>434806</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-08-02 18:55:22 -0700</bug_when>
    <thetext>Comment on attachment 434806
Patch

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

Nice. r=me

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:2550
&gt; +        auto tryAppendBitOpWithShift = [&amp;] (Value* left, Value* right, Air::Opcode opcode) -&gt; bool {
&gt; +            if (!isValidForm(opcode, Arg::Tmp, Arg::Tmp, Arg::Imm, Arg::Tmp))
&gt; +                return false;
&gt; +            if (!canBeInternal(right) || !imm(right-&gt;child(1)) || right-&gt;child(1)-&gt;asInt() &lt; 0)
&gt; +                return false;
&gt; +
&gt; +            uint64_t amount = right-&gt;child(1)-&gt;asInt();
&gt; +            uint64_t datasize = m_value-&gt;type() == Int32 ? 32 : 64;
&gt; +            if (amount &gt;= datasize)
&gt; +                return false;
&gt; +
&gt; +            append(opcode, tmp(left), tmp(right-&gt;child(0)), imm(right-&gt;child(1)), tmp(m_value));
&gt; +            commitInternal(right);
&gt; +            return true;
&gt; +        };

I think the way we normally do this is just by making it a member function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1781508</commentid>
    <comment_count>9</comment_count>
      <attachid>434809</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-08-02 19:17:56 -0700</bug_when>
    <thetext>Created attachment 434809
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1781509</commentid>
    <comment_count>10</comment_count>
      <attachid>434810</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-08-02 19:21:24 -0700</bug_when>
    <thetext>Created attachment 434810
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1781519</commentid>
    <comment_count>11</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-08-02 20:11:45 -0700</bug_when>
    <thetext>Committed r280579 (240201@main): &lt;https://commits.webkit.org/240201@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 434810.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1781520</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-08-02 20:17:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/81441719&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434688</attachid>
            <date>2021-07-30 21:01:57 -0700</date>
            <delta_ts>2021-07-31 07:53:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228675-20210730230156.patch</filename>
            <type>text/plain</type>
            <size>82554</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwNDk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
N2M5NTU4ZWFiZGIxNjY0YzU2YWQyZGU0YWQzNGQ3ZDA3Y2UxNzI1Li4xMzQ5NGVmZTk2ZTE2YWY0
ZTg3MjA4YTQ1NDhjM2VjZjQ2ZTA0OTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4NiBAQAorMjAyMS0wNy0zMCAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQWRkIG5ldyBwYXR0ZXJuZXMgdG8gaW5zdHJ1Y3Rpb24gc2VsZWN0b3Ig
dG8gdXRpbGl6ZSBBTkQvRU9SL09SUi13aXRoLXNoaWZ0IGFuZCBVTVVMTCBzdXBwb3J0ZWQgYnkg
QVJNNjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
ODY3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJBUk02NDo6YW5kTGVmdFNoaWZ0MzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
ckFSTTY0OjphbmRSaWdodFNoaWZ0MzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFS
TTY0OjphbmRVbnNpZ25lZFJpZ2h0U2hpZnQzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyQVJNNjQ6OmFuZExlZnRTaGlmdDY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJB
Uk02NDo6YW5kUmlnaHRTaGlmdDY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02
NDo6YW5kVW5zaWduZWRSaWdodFNoaWZ0NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
ckFSTTY0Ojp4b3JMZWZ0U2hpZnQzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJN
NjQ6OnhvclJpZ2h0U2hpZnQzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6
OnhvclVuc2lnbmVkUmlnaHRTaGlmdDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJB
Uk02NDo6eG9yTGVmdFNoaWZ0NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0
Ojp4b3JSaWdodFNoaWZ0NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojp4
b3JVbnNpZ25lZFJpZ2h0U2hpZnQ2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJN
NjQ6Om9yTGVmdFNoaWZ0MzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpv
clJpZ2h0U2hpZnQzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Om9yVW5z
aWduZWRSaWdodFNoaWZ0MzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpv
ckxlZnRTaGlmdDY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6b3JSaWdo
dFNoaWZ0NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpvclVuc2lnbmVk
UmlnaHRTaGlmdDY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6bXVsdGlw
bHlaZXJvRXh0ZW5kMzIpOgorICAgICAgICAqIGFzc2VtYmxlci90ZXN0bWFzbS5jcHA6CisgICAg
ICAgIChKU0M6OnRlc3RNdWx0aXBseVplcm9FeHRlbmQzMik6CisgICAgICAgIChKU0M6OnRlc3RB
bmRMZWZ0U2hpZnQzMik6CisgICAgICAgIChKU0M6OnRlc3RBbmRSaWdodFNoaWZ0MzIpOgorICAg
ICAgICAoSlNDOjp0ZXN0QW5kVW5zaWduZWRSaWdodFNoaWZ0MzIpOgorICAgICAgICAoSlNDOjp0
ZXN0QW5kTGVmdFNoaWZ0NjQpOgorICAgICAgICAoSlNDOjp0ZXN0QW5kUmlnaHRTaGlmdDY0KToK
KyAgICAgICAgKEpTQzo6dGVzdEFuZFVuc2lnbmVkUmlnaHRTaGlmdDY0KToKKyAgICAgICAgKEpT
Qzo6dGVzdFhvckxlZnRTaGlmdDMyKToKKyAgICAgICAgKEpTQzo6dGVzdFhvclJpZ2h0U2hpZnQz
Mik6CisgICAgICAgIChKU0M6OnRlc3RYb3JVbnNpZ25lZFJpZ2h0U2hpZnQzMik6CisgICAgICAg
IChKU0M6OnRlc3RYb3JMZWZ0U2hpZnQ2NCk6CisgICAgICAgIChKU0M6OnRlc3RYb3JSaWdodFNo
aWZ0NjQpOgorICAgICAgICAoSlNDOjp0ZXN0WG9yVW5zaWduZWRSaWdodFNoaWZ0NjQpOgorICAg
ICAgICAoSlNDOjp0ZXN0T3JMZWZ0U2hpZnQzMik6CisgICAgICAgIChKU0M6OnRlc3RPclJpZ2h0
U2hpZnQzMik6CisgICAgICAgIChKU0M6OnRlc3RPclVuc2lnbmVkUmlnaHRTaGlmdDMyKToKKyAg
ICAgICAgKEpTQzo6dGVzdE9yTGVmdFNoaWZ0NjQpOgorICAgICAgICAoSlNDOjp0ZXN0T3JSaWdo
dFNoaWZ0NjQpOgorICAgICAgICAoSlNDOjp0ZXN0T3JVbnNpZ25lZFJpZ2h0U2hpZnQ2NCk6Cisg
ICAgICAgICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAgICAgKiBiMy9haXIvQWlyT3Bjb2Rl
Lm9wY29kZXM6CisgICAgICAgICogYjMvdGVzdGIzLmg6CisgICAgICAgICogYjMvdGVzdGIzXzIu
Y3BwOgorICAgICAgICAodGVzdE11bEFyZ3MzMlNpZ25FeHRlbmQpOgorICAgICAgICAodGVzdE11
bEFyZ3MzMlplcm9FeHRlbmQpOgorICAgICAgICAodGVzdEFuZExlZnRTaGlmdDMyKToKKyAgICAg
ICAgKHRlc3RBbmRSaWdodFNoaWZ0MzIpOgorICAgICAgICAodGVzdEFuZFVuc2lnbmVkUmlnaHRT
aGlmdDMyKToKKyAgICAgICAgKHRlc3RBbmRMZWZ0U2hpZnQ2NCk6CisgICAgICAgICh0ZXN0QW5k
UmlnaHRTaGlmdDY0KToKKyAgICAgICAgKHRlc3RBbmRVbnNpZ25lZFJpZ2h0U2hpZnQ2NCk6Cisg
ICAgICAgICh0ZXN0WG9yTGVmdFNoaWZ0MzIpOgorICAgICAgICAodGVzdFhvclJpZ2h0U2hpZnQz
Mik6CisgICAgICAgICh0ZXN0WG9yVW5zaWduZWRSaWdodFNoaWZ0MzIpOgorICAgICAgICAodGVz
dFhvckxlZnRTaGlmdDY0KToKKyAgICAgICAgKHRlc3RYb3JSaWdodFNoaWZ0NjQpOgorICAgICAg
ICAodGVzdFhvclVuc2lnbmVkUmlnaHRTaGlmdDY0KToKKyAgICAgICAgKHRlc3RPckxlZnRTaGlm
dDMyKToKKyAgICAgICAgKHRlc3RPclJpZ2h0U2hpZnQzMik6CisgICAgICAgICh0ZXN0T3JVbnNp
Z25lZFJpZ2h0U2hpZnQzMik6CisgICAgICAgICh0ZXN0T3JMZWZ0U2hpZnQ2NCk6CisgICAgICAg
ICh0ZXN0T3JSaWdodFNoaWZ0NjQpOgorICAgICAgICAodGVzdE9yVW5zaWduZWRSaWdodFNoaWZ0
NjQpOgorICAgICAgICAodGVzdEJpdEFuZFplcm9TaGlmdFJpZ2h0QXJnSW1tTWFzazMyKToKKyAg
ICAgICAgKHRlc3RCaXRBbmRaZXJvU2hpZnRSaWdodEFyZ0ltbU1hc2s2NCk6CisgICAgICAgICh0
ZXN0Qml0QW5kQXJncyk6CisgICAgICAgICh0ZXN0Qml0QW5kU2FtZUFyZyk6CisgICAgICAgICh0
ZXN0Qml0QW5kTm90Tm90KToKKyAgICAgICAgKHRlc3RCaXRBbmROb3ROb3QzMik6CisgICAgICAg
ICh0ZXN0Qml0QW5kTm90SW1tKToKKyAgICAgICAgKHRlc3RCaXRBbmROb3RJbW0zMik6CisgICAg
ICAgIChhZGRCaXRUZXN0cyk6CisgICAgICAgICogYjMvdGVzdGIzXzMuY3BwOgorICAgICAgICAo
YWRkQXJnVGVzdHMpOgorCiAyMDIxLTA3LTMwICBZaWppYSBIdWFuZyAgPHlpamlhX2h1YW5nQGFw
cGxlLmNvbT4KIAogICAgICAgICBBZGQgUHJlL1Bvc3QtSW5kZXhlZCBBZGRyZXNzIE1vZGUgdG8g
QWlyIGZvciBBUk02NApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlckFSTTY0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyQVJNNjQuaAppbmRleCBlNmJmYmVjNjAwMWMxMGM2MWU5ZjI2NmVmZjI3
YWQ2ZjEwZTg5ZjhmLi4xM2EyMzhiM2Q4NmIxODkwZDJkZmI2MmQ5MDY5NzRmM2RmYzVkNzc5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQVJNNjQuaApAQCAtNjQ5LDYgKzY0OSw5NiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1i
bGVyLnN1Yjw2ND4oZCwgbiwgbSwgQXNzZW1ibGVyOjpMU1IsIGFtb3VudC5tX3ZhbHVlKTsKICAg
ICB9CiAKKyAgICB2b2lkIGFuZExlZnRTaGlmdDMyKFJlZ2lzdGVySUQgbiwgUmVnaXN0ZXJJRCBt
LCBUcnVzdGVkSW1tMzIgYW1vdW50LCBSZWdpc3RlcklEIGQpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5hbmRfPDMyPihkLCBuLCBtLCBBc3NlbWJsZXI6OkxTTCwgYW1vdW50Lm1fdmFsdWUp
OworICAgIH0KKworICAgIHZvaWQgYW5kUmlnaHRTaGlmdDMyKFJlZ2lzdGVySUQgbiwgUmVnaXN0
ZXJJRCBtLCBUcnVzdGVkSW1tMzIgYW1vdW50LCBSZWdpc3RlcklEIGQpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5hbmRfPDMyPihkLCBuLCBtLCBBc3NlbWJsZXI6OkFTUiwgYW1vdW50Lm1f
dmFsdWUpOworICAgIH0KKworICAgIHZvaWQgYW5kVW5zaWduZWRSaWdodFNoaWZ0MzIoUmVnaXN0
ZXJJRCBuLCBSZWdpc3RlcklEIG0sIFRydXN0ZWRJbW0zMiBhbW91bnQsIFJlZ2lzdGVySUQgZCkK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZF88MzI+KGQsIG4sIG0sIEFzc2VtYmxlcjo6
TFNSLCBhbW91bnQubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBhbmRMZWZ0U2hpZnQ2NChS
ZWdpc3RlcklEIG4sIFJlZ2lzdGVySUQgbSwgVHJ1c3RlZEltbTMyIGFtb3VudCwgUmVnaXN0ZXJJ
RCBkKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kXzw2ND4oZCwgbiwgbSwgQXNzZW1i
bGVyOjpMU0wsIGFtb3VudC5tX3ZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZFJpZ2h0U2hp
ZnQ2NChSZWdpc3RlcklEIG4sIFJlZ2lzdGVySUQgbSwgVHJ1c3RlZEltbTMyIGFtb3VudCwgUmVn
aXN0ZXJJRCBkKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kXzw2ND4oZCwgbiwgbSwg
QXNzZW1ibGVyOjpBU1IsIGFtb3VudC5tX3ZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZFVu
c2lnbmVkUmlnaHRTaGlmdDY0KFJlZ2lzdGVySUQgbiwgUmVnaXN0ZXJJRCBtLCBUcnVzdGVkSW1t
MzIgYW1vdW50LCBSZWdpc3RlcklEIGQpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmRf
PDY0PihkLCBuLCBtLCBBc3NlbWJsZXI6OkxTUiwgYW1vdW50Lm1fdmFsdWUpOworICAgIH0KKwor
ICAgIHZvaWQgeG9yTGVmdFNoaWZ0MzIoUmVnaXN0ZXJJRCBuLCBSZWdpc3RlcklEIG0sIFRydXN0
ZWRJbW0zMiBhbW91bnQsIFJlZ2lzdGVySUQgZCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
LmVvcjwzMj4oZCwgbiwgbSwgQXNzZW1ibGVyOjpMU0wsIGFtb3VudC5tX3ZhbHVlKTsKKyAgICB9
CisKKyAgICB2b2lkIHhvclJpZ2h0U2hpZnQzMihSZWdpc3RlcklEIG4sIFJlZ2lzdGVySUQgbSwg
VHJ1c3RlZEltbTMyIGFtb3VudCwgUmVnaXN0ZXJJRCBkKQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuZW9yPDMyPihkLCBuLCBtLCBBc3NlbWJsZXI6OkFTUiwgYW1vdW50Lm1fdmFsdWUpOwor
ICAgIH0KKworICAgIHZvaWQgeG9yVW5zaWduZWRSaWdodFNoaWZ0MzIoUmVnaXN0ZXJJRCBuLCBS
ZWdpc3RlcklEIG0sIFRydXN0ZWRJbW0zMiBhbW91bnQsIFJlZ2lzdGVySUQgZCkKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmVvcjwzMj4oZCwgbiwgbSwgQXNzZW1ibGVyOjpMU1IsIGFtb3Vu
dC5tX3ZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvckxlZnRTaGlmdDY0KFJlZ2lzdGVySUQg
biwgUmVnaXN0ZXJJRCBtLCBUcnVzdGVkSW1tMzIgYW1vdW50LCBSZWdpc3RlcklEIGQpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5lb3I8NjQ+KGQsIG4sIG0sIEFzc2VtYmxlcjo6TFNMLCBh
bW91bnQubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCB4b3JSaWdodFNoaWZ0NjQoUmVnaXN0
ZXJJRCBuLCBSZWdpc3RlcklEIG0sIFRydXN0ZWRJbW0zMiBhbW91bnQsIFJlZ2lzdGVySUQgZCkK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmVvcjw2ND4oZCwgbiwgbSwgQXNzZW1ibGVyOjpB
U1IsIGFtb3VudC5tX3ZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvclVuc2lnbmVkUmlnaHRT
aGlmdDY0KFJlZ2lzdGVySUQgbiwgUmVnaXN0ZXJJRCBtLCBUcnVzdGVkSW1tMzIgYW1vdW50LCBS
ZWdpc3RlcklEIGQpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5lb3I8NjQ+KGQsIG4sIG0s
IEFzc2VtYmxlcjo6TFNSLCBhbW91bnQubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBvckxl
ZnRTaGlmdDMyKFJlZ2lzdGVySUQgbiwgUmVnaXN0ZXJJRCBtLCBUcnVzdGVkSW1tMzIgYW1vdW50
LCBSZWdpc3RlcklEIGQpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5vcnI8MzI+KGQsIG4s
IG0sIEFzc2VtYmxlcjo6TFNMLCBhbW91bnQubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBv
clJpZ2h0U2hpZnQzMihSZWdpc3RlcklEIG4sIFJlZ2lzdGVySUQgbSwgVHJ1c3RlZEltbTMyIGFt
b3VudCwgUmVnaXN0ZXJJRCBkKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3JyPDMyPihk
LCBuLCBtLCBBc3NlbWJsZXI6OkFTUiwgYW1vdW50Lm1fdmFsdWUpOworICAgIH0KKworICAgIHZv
aWQgb3JVbnNpZ25lZFJpZ2h0U2hpZnQzMihSZWdpc3RlcklEIG4sIFJlZ2lzdGVySUQgbSwgVHJ1
c3RlZEltbTMyIGFtb3VudCwgUmVnaXN0ZXJJRCBkKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIub3JyPDMyPihkLCBuLCBtLCBBc3NlbWJsZXI6OkxTUiwgYW1vdW50Lm1fdmFsdWUpOworICAg
IH0KKworICAgIHZvaWQgb3JMZWZ0U2hpZnQ2NChSZWdpc3RlcklEIG4sIFJlZ2lzdGVySUQgbSwg
VHJ1c3RlZEltbTMyIGFtb3VudCwgUmVnaXN0ZXJJRCBkKQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIub3JyPDY0PihkLCBuLCBtLCBBc3NlbWJsZXI6OkxTTCwgYW1vdW50Lm1fdmFsdWUpOwor
ICAgIH0KKworICAgIHZvaWQgb3JSaWdodFNoaWZ0NjQoUmVnaXN0ZXJJRCBuLCBSZWdpc3RlcklE
IG0sIFRydXN0ZWRJbW0zMiBhbW91bnQsIFJlZ2lzdGVySUQgZCkKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLm9ycjw2ND4oZCwgbiwgbSwgQXNzZW1ibGVyOjpBU1IsIGFtb3VudC5tX3ZhbHVl
KTsKKyAgICB9CisKKyAgICB2b2lkIG9yVW5zaWduZWRSaWdodFNoaWZ0NjQoUmVnaXN0ZXJJRCBu
LCBSZWdpc3RlcklEIG0sIFRydXN0ZWRJbW0zMiBhbW91bnQsIFJlZ2lzdGVySUQgZCkKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLm9ycjw2ND4oZCwgbiwgbSwgQXNzZW1ibGVyOjpMU1IsIGFt
b3VudC5tX3ZhbHVlKTsKKyAgICB9CisKICAgICB2b2lkIGNsZWFyQml0NjQoUmVnaXN0ZXJJRCBi
aXRUb0NsZWFyLCBSZWdpc3RlcklEIGRlc3QsIFJlZ2lzdGVySUQgc2NyYXRjaEZvck1hc2sgPSBJ
bnZhbGlkR1BSUmVnKQogICAgIHsKICAgICAgICAgaWYgKHNjcmF0Y2hGb3JNYXNrID09IEludmFs
aWRHUFJSZWcpCkBAIC04NjMsNiArOTUzLDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJs
ZXIuc211bGwoZGVzdCwgbGVmdCwgcmlnaHQpOwogICAgIH0KIAorICAgIHZvaWQgbXVsdGlwbHla
ZXJvRXh0ZW5kMzIoUmVnaXN0ZXJJRCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0LCBSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci51bXVsbChkZXN0LCBsZWZ0LCByaWdo
dCk7CisgICAgfQorCiAgICAgdm9pZCBkaXYzMihSZWdpc3RlcklEIGRpdmlkZW5kLCBSZWdpc3Rl
cklEIGRpdmlzb3IsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVy
LnNkaXY8MzI+KGRlc3QsIGRpdmlkZW5kLCBkaXZpc29yKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVzdG1hc20uY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAKaW5kZXggMWNhNjk4M2ViNzBkOTY0MGJlNGZiMmYx
MTBlMmY4ZTAxZjM4ZjgzOC4uODk5ZTc2YTI2MTNhOWI3ZWE2MjAwMmEwZDY4NmY2MTViMTE5ZjE5
NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAKQEAg
LTkyMSw2ICs5MjEsMjYgQEAgdm9pZCB0ZXN0TXVsdGlwbHlTaWduRXh0ZW5kMzIoKQogICAgIH0K
IH0KIAordm9pZCB0ZXN0TXVsdGlwbHlaZXJvRXh0ZW5kMzIoKQoreworICAgIGZvciAoYXV0byBu
T3BlcmFuZCA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICBhdXRvIG11bCA9IGNvbXBpbGUo
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9n
dWUoaml0KTsKKworICAgICAgICAgICAgaml0Lm11bHRpcGx5WmVyb0V4dGVuZDMyKEdQUkluZm86
OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUik7CisKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAg
ICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworCisgICAgICAgIGZvciAoYXV0byBtT3BlcmFu
ZCA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICAgICAgdWludDMyX3QgbiA9IG5PcGVyYW5k
OworICAgICAgICAgICAgdWludDMyX3QgbSA9IG1PcGVyYW5kOworICAgICAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPHVpbnQ2NF90PihtdWwsIG4sIG0pLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4obikg
KiBzdGF0aWNfY2FzdDx1aW50NjRfdD4obSkpOworICAgICAgICB9CisgICAgfQorfQorCiB2b2lk
IHRlc3RNdWx0aXBseUFkZFNpZ25FeHRlbmQzMigpCiB7CiAgICAgLy8gZCA9IFNFeHQzMihuKSAq
IFNFeHQzMihtKSArIGEKQEAgLTIzODIsNiArMjQwMiw0NzQgQEAgdm9pZCB0ZXN0TG9hZFByZVBv
c3RJbmRleDY0KCkKICAgICBDSEVDS19FUSh0ZXN0Mig1KSwgMik7CiAgICAgQ0hFQ0tfRVEobnVt
c1syXSwgNSk7CiB9CisKK3ZvaWQgdGVzdEFuZExlZnRTaGlmdDMyKCkKK3sKKyAgICBWZWN0b3I8
aW50MzJfdD4gYW1vdW50cyA9IHsgMCwgMTcsIDMxIH07CisgICAgZm9yIChhdXRvIG4gOiBpbnQz
Mk9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG0gOiBpbnQzMk9wZXJhbmRzKCkpIHsK
KyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAg
ICAgYXV0byBhbmQzMiA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAg
ICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAg
ICAgICAgIGppdC5hbmRMZWZ0U2hpZnQzMihHUFJJbmZvOjphcmd1bWVudEdQUjAsIAorICAgICAg
ICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFtb3VudCksIAorICAgICAgICAg
ICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICAg
ICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICAgICAgICAgIGpp
dC5yZXQoKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIGludDMyX3Qg
bGhzID0gaW52b2tlPGludDMyX3Q+KGFuZDMyLCBuLCBtKTsKKyAgICAgICAgICAgICAgICBpbnQz
Ml90IHJocyA9IG4gJiAobSA8PCBhbW91bnQpOworICAgICAgICAgICAgICAgIENIRUNLX0VRKGxo
cywgcmhzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0
QW5kUmlnaHRTaGlmdDMyKCkKK3sKKyAgICBWZWN0b3I8aW50MzJfdD4gYW1vdW50cyA9IHsgMCwg
MTcsIDMxIH07CisgICAgZm9yIChhdXRvIG4gOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAg
Zm9yIChhdXRvIG0gOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBh
bW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgYXV0byBhbmQzMiA9IGNvbXBpbGUo
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rp
b25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAgICAgICAgIGppdC5hbmRSaWdodFNoaWZ0
MzIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUklu
Zm86OmFyZ3VtZW50R1BSMSwgCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihhbW91bnQpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86
OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGls
b2d1ZShqaXQpOworICAgICAgICAgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICAg
ICAgfSk7CisKKyAgICAgICAgICAgICAgICBpbnQzMl90IGxocyA9IGludm9rZTxpbnQzMl90Pihh
bmQzMiwgbiwgbSk7CisgICAgICAgICAgICAgICAgaW50MzJfdCByaHMgPSBuICYgKG0gPj4gYW1v
dW50KTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUShsaHMsIHJocyk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdEFuZFVuc2lnbmVkUmlnaHRTaGlmdDMy
KCkKK3sKKyAgICBWZWN0b3I8dWludDMyX3Q+IGFtb3VudHMgPSB7IDAsIDE3LCAzMSB9OworICAg
IGZvciAoYXV0byBuIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtIDog
aW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50
cykgeworICAgICAgICAgICAgICAgIGF1dG8gYW5kMzIgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0
KTsKKworICAgICAgICAgICAgICAgICAgICBqaXQuYW5kVW5zaWduZWRSaWdodFNoaWZ0MzIoR1BS
SW5mbzo6YXJndW1lbnRHUFIwLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmFy
Z3VtZW50R1BSMSwgCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihhbW91bnQpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVy
blZhbHVlR1BSKTsKKworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShq
aXQpOworICAgICAgICAgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICAgICAgfSk7
CisKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBsaHMgPSBpbnZva2U8dWludDMyX3Q+KGFuZDMy
LCBuLCBtKTsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCByaHMgPSBzdGF0aWNfY2FzdDx1aW50
MzJfdD4obikgJiAoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG0pID4+IGFtb3VudCk7CisgICAgICAg
ICAgICAgICAgQ0hFQ0tfRVEobGhzLCByaHMpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorfQorCit2b2lkIHRlc3RBbmRMZWZ0U2hpZnQ2NCgpCit7CisgICAgVmVjdG9yPGludDMy
X3Q+IGFtb3VudHMgPSB7IDAsIDM0LCA2MyB9OworICAgIGZvciAoYXV0byBuIDogaW50NjRPcGVy
YW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAg
ICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAgICAgIGF1
dG8gYW5kNjQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgICAgICAg
ICBqaXQuYW5kTGVmdFNoaWZ0NjQoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgCisgICAgICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbW91bnQpLCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgICAgICAg
ICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgICAgICAgICBqaXQucmV0
KCk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICBpbnQ2NF90IGxocyA9
IGludm9rZTxpbnQ2NF90PihhbmQ2NCwgbiwgbSk7CisgICAgICAgICAgICAgICAgaW50NjRfdCBy
aHMgPSBuICYgKG0gPDwgYW1vdW50KTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUShsaHMsIHJo
cyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdEFuZFJp
Z2h0U2hpZnQ2NCgpCit7CisgICAgVmVjdG9yPGludDMyX3Q+IGFtb3VudHMgPSB7IDAsIDM0LCA2
MyB9OworICAgIGZvciAoYXV0byBuIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAo
YXV0byBtIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50
IDogYW1vdW50cykgeworICAgICAgICAgICAgICAgIGF1dG8gYW5kNjQgPSBjb21waWxlKFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJv
bG9ndWUoaml0KTsKKworICAgICAgICAgICAgICAgICAgICBqaXQuYW5kUmlnaHRTaGlmdDY0KEdQ
UkluZm86OmFyZ3VtZW50R1BSMCwgCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjph
cmd1bWVudEdQUjEsIAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoYW1vdW50KSwgCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUo
aml0KTsKKyAgICAgICAgICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICAgICAgICAgIH0p
OworCisgICAgICAgICAgICAgICAgaW50NjRfdCBsaHMgPSBpbnZva2U8aW50NjRfdD4oYW5kNjQs
IG4sIG0pOworICAgICAgICAgICAgICAgIGludDY0X3QgcmhzID0gbiAmIChtID4+IGFtb3VudCk7
CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEobGhzLCByaHMpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RBbmRVbnNpZ25lZFJpZ2h0U2hpZnQ2NCgpCit7
CisgICAgVmVjdG9yPHVpbnQzMl90PiBhbW91bnRzID0geyAwLCAzNCwgNjMgfTsKKyAgICBmb3Ig
KGF1dG8gbiA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbSA6IGludDY0
T3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsK
KyAgICAgICAgICAgICAgICBhdXRvIGFuZDY0ID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYg
aml0KSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisK
KyAgICAgICAgICAgICAgICAgICAgaml0LmFuZFVuc2lnbmVkUmlnaHRTaGlmdDY0KEdQUkluZm86
OmFyZ3VtZW50R1BSMCwgCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjphcmd1bWVu
dEdQUjEsIAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoYW1vdW50KSwgCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUik7CisKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsK
KyAgICAgICAgICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICAgICAgICAgIH0pOworCisg
ICAgICAgICAgICAgICAgdWludDY0X3QgbGhzID0gaW52b2tlPHVpbnQ2NF90PihhbmQ2NCwgbiwg
bSk7CisgICAgICAgICAgICAgICAgdWludDY0X3QgcmhzID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KG4pICYgKHN0YXRpY19jYXN0PHVpbnQ2NF90PihtKSA+PiBhbW91bnQpOworICAgICAgICAgICAg
ICAgIENIRUNLX0VRKGxocywgcmhzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
K30KKwordm9pZCB0ZXN0WG9yTGVmdFNoaWZ0MzIoKQoreworICAgIFZlY3RvcjxpbnQzMl90PiBh
bW91bnRzID0geyAwLCAxNywgMzEgfTsKKyAgICBmb3IgKGF1dG8gbiA6IGludDMyT3BlcmFuZHMo
KSkgeworICAgICAgICBmb3IgKGF1dG8gbSA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICAg
ICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHhv
cjMyID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAg
ICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgICAgICAgICAgaml0
LnhvckxlZnRTaGlmdDMyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgCisgICAgICAgICAgICAgICAg
ICAgICAgICBHUFJJbmZvOjphcmd1bWVudEdQUjEsIAorICAgICAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYW1vdW50KSwgCisgICAgICAgICAgICAgICAgICAg
ICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAgICAgICAgZW1p
dEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgICAgICAgICAgaml0LnJldCgpOwor
ICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgaW50MzJfdCBsaHMgPSBpbnZv
a2U8aW50MzJfdD4oeG9yMzIsIG4sIG0pOworICAgICAgICAgICAgICAgIGludDMyX3QgcmhzID0g
biBeIChtIDw8IGFtb3VudCk7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEobGhzLCByaHMpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RYb3JSaWdodFNo
aWZ0MzIoKQoreworICAgIFZlY3RvcjxpbnQzMl90PiBhbW91bnRzID0geyAwLCAxNywgMzEgfTsK
KyAgICBmb3IgKGF1dG8gbiA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8g
bSA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFt
b3VudHMpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHhvcjMyID0gY29tcGlsZShbPV0gKENDYWxs
SGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3Vl
KGppdCk7CisKKyAgICAgICAgICAgICAgICAgICAgaml0LnhvclJpZ2h0U2hpZnQzMihHUFJJbmZv
Ojphcmd1bWVudEdQUjAsIAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6YXJndW1l
bnRHUFIxLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKGFtb3VudCksIAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpOworCisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7
CisgICAgICAgICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAgICAgICB9KTsKKwor
ICAgICAgICAgICAgICAgIGludDMyX3QgbGhzID0gaW52b2tlPGludDMyX3Q+KHhvcjMyLCBuLCBt
KTsKKyAgICAgICAgICAgICAgICBpbnQzMl90IHJocyA9IG4gXiAobSA+PiBhbW91bnQpOworICAg
ICAgICAgICAgICAgIENIRUNLX0VRKGxocywgcmhzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KK30KKwordm9pZCB0ZXN0WG9yVW5zaWduZWRSaWdodFNoaWZ0MzIoKQoreworICAg
IFZlY3Rvcjx1aW50MzJfdD4gYW1vdW50cyA9IHsgMCwgMTcsIDMxIH07CisgICAgZm9yIChhdXRv
IG4gOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG0gOiBpbnQzMk9wZXJh
bmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAg
ICAgICAgICAgICAgYXV0byB4b3IzMiA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkg
eworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAg
ICAgICAgICAgICAgICAgIGppdC54b3JVbnNpZ25lZFJpZ2h0U2hpZnQzMihHUFJJbmZvOjphcmd1
bWVudEdQUjAsIAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6YXJndW1lbnRHUFIx
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFt
b3VudCksIAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
OworCisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAg
ICAgICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAg
ICAgICAgICAgIHVpbnQzMl90IGxocyA9IGludm9rZTx1aW50MzJfdD4oeG9yMzIsIG4sIG0pOwor
ICAgICAgICAgICAgICAgIHVpbnQzMl90IHJocyA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihuKSBe
IChzdGF0aWNfY2FzdDx1aW50MzJfdD4obSkgPj4gYW1vdW50KTsKKyAgICAgICAgICAgICAgICBD
SEVDS19FUShsaHMsIHJocyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisK
K3ZvaWQgdGVzdFhvckxlZnRTaGlmdDY0KCkKK3sKKyAgICBWZWN0b3I8aW50MzJfdD4gYW1vdW50
cyA9IHsgMCwgMzQsIDYzIH07CisgICAgZm9yIChhdXRvIG4gOiBpbnQ2NE9wZXJhbmRzKCkpIHsK
KyAgICAgICAgZm9yIChhdXRvIG0gOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZv
ciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgYXV0byB4b3I2NCA9
IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgICAgICAgICBl
bWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAgICAgICAgIGppdC54b3JM
ZWZ0U2hpZnQ2NChHUFJJbmZvOjphcmd1bWVudEdQUjAsIAorICAgICAgICAgICAgICAgICAgICAg
ICAgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKGFtb3VudCksIAorICAgICAgICAgICAgICAgICAgICAgICAg
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5j
dGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAg
ICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIGludDY0X3QgbGhzID0gaW52b2tlPGlu
dDY0X3Q+KHhvcjY0LCBuLCBtKTsKKyAgICAgICAgICAgICAgICBpbnQ2NF90IHJocyA9IG4gXiAo
bSA8PCBhbW91bnQpOworICAgICAgICAgICAgICAgIENIRUNLX0VRKGxocywgcmhzKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0WG9yUmlnaHRTaGlmdDY0
KCkKK3sKKyAgICBWZWN0b3I8aW50MzJfdD4gYW1vdW50cyA9IHsgMCwgMzQsIDYzIH07CisgICAg
Zm9yIChhdXRvIG4gOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG0gOiBp
bnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRz
KSB7CisgICAgICAgICAgICAgICAgYXV0byB4b3I2NCA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBl
cnMmIGppdCkgeworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQp
OworCisgICAgICAgICAgICAgICAgICAgIGppdC54b3JSaWdodFNoaWZ0NjQoR1BSSW5mbzo6YXJn
dW1lbnRHUFIwLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BS
MSwgCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihh
bW91bnQpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BS
KTsKKworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAg
ICAgICAgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAg
ICAgICAgICAgICBpbnQ2NF90IGxocyA9IGludm9rZTxpbnQ2NF90Pih4b3I2NCwgbiwgbSk7Cisg
ICAgICAgICAgICAgICAgaW50NjRfdCByaHMgPSBuIF4gKG0gPj4gYW1vdW50KTsKKyAgICAgICAg
ICAgICAgICBDSEVDS19FUShsaHMsIHJocyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK3ZvaWQgdGVzdFhvclVuc2lnbmVkUmlnaHRTaGlmdDY0KCkKK3sKKyAgICBWZWN0
b3I8dWludDMyX3Q+IGFtb3VudHMgPSB7IDAsIDM0LCA2MyB9OworICAgIGZvciAoYXV0byBuIDog
aW50NjRPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtIDogaW50NjRPcGVyYW5kcygp
KSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAg
ICAgICAgIGF1dG8geG9yNjQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAg
ICAgICAgICAgICBqaXQueG9yVW5zaWduZWRSaWdodFNoaWZ0NjQoR1BSSW5mbzo6YXJndW1lbnRH
UFIwLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgCisg
ICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbW91bnQp
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKwor
ICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAg
ICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAg
ICAgICB1aW50NjRfdCBsaHMgPSBpbnZva2U8dWludDY0X3Q+KHhvcjY0LCBuLCBtKTsKKyAgICAg
ICAgICAgICAgICB1aW50NjRfdCByaHMgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4obikgXiAoc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KG0pID4+IGFtb3VudCk7CisgICAgICAgICAgICAgICAgQ0hFQ0tf
RVEobGhzLCByaHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lk
IHRlc3RPckxlZnRTaGlmdDMyKCkKK3sKKyAgICBWZWN0b3I8aW50MzJfdD4gYW1vdW50cyA9IHsg
MCwgMTcsIDMxIH07CisgICAgZm9yIChhdXRvIG4gOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAg
ICAgZm9yIChhdXRvIG0gOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0
byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgYXV0byBvcjMyID0gY29tcGls
ZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5j
dGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgICAgICAgICAgaml0Lm9yTGVmdFNoaWZ0
MzIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUklu
Zm86OmFyZ3VtZW50R1BSMSwgCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihhbW91bnQpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86
OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGls
b2d1ZShqaXQpOworICAgICAgICAgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICAg
ICAgfSk7CisKKyAgICAgICAgICAgICAgICBpbnQzMl90IGxocyA9IGludm9rZTxpbnQzMl90Pihv
cjMyLCBuLCBtKTsKKyAgICAgICAgICAgICAgICBpbnQzMl90IHJocyA9IG4gfCAobSA8PCBhbW91
bnQpOworICAgICAgICAgICAgICAgIENIRUNLX0VRKGxocywgcmhzKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0T3JSaWdodFNoaWZ0MzIoKQoreworICAg
IFZlY3RvcjxpbnQzMl90PiBhbW91bnRzID0geyAwLCAxNywgMzEgfTsKKyAgICBmb3IgKGF1dG8g
biA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbSA6IGludDMyT3BlcmFu
ZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAg
ICAgICAgICAgICBhdXRvIG9yMzIgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsK
KyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAg
ICAgICAgICAgICAgICBqaXQub3JSaWdodFNoaWZ0MzIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCAK
KyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgCisgICAgICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbW91bnQpLCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAg
ICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgICAg
ICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICBp
bnQzMl90IGxocyA9IGludm9rZTxpbnQzMl90PihvcjMyLCBuLCBtKTsKKyAgICAgICAgICAgICAg
ICBpbnQzMl90IHJocyA9IG4gfCAobSA+PiBhbW91bnQpOworICAgICAgICAgICAgICAgIENIRUNL
X0VRKGxocywgcmhzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9p
ZCB0ZXN0T3JVbnNpZ25lZFJpZ2h0U2hpZnQzMigpCit7CisgICAgVmVjdG9yPHVpbnQzMl90PiBh
bW91bnRzID0geyAwLCAxNywgMzEgfTsKKyAgICBmb3IgKGF1dG8gbiA6IGludDMyT3BlcmFuZHMo
KSkgeworICAgICAgICBmb3IgKGF1dG8gbSA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICAg
ICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBhdXRvIG9y
MzIgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgICAgICAgICBqaXQu
b3JVbnNpZ25lZFJpZ2h0U2hpZnQzMihHUFJJbmZvOjphcmd1bWVudEdQUjAsIAorICAgICAgICAg
ICAgICAgICAgICAgICAgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFtb3VudCksIAorICAgICAgICAgICAg
ICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICAgICAg
ICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5y
ZXQoKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIHVpbnQzMl90IGxo
cyA9IGludm9rZTx1aW50MzJfdD4ob3IzMiwgbiwgbSk7CisgICAgICAgICAgICAgICAgdWludDMy
X3QgcmhzID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG4pIHwgKHN0YXRpY19jYXN0PHVpbnQzMl90
PihtKSA+PiBhbW91bnQpOworICAgICAgICAgICAgICAgIENIRUNLX0VRKGxocywgcmhzKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0T3JMZWZ0U2hpZnQ2
NCgpCit7CisgICAgVmVjdG9yPGludDMyX3Q+IGFtb3VudHMgPSB7IDAsIDM0LCA2MyB9OworICAg
IGZvciAoYXV0byBuIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtIDog
aW50NjRPcGVyYW5kcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50
cykgeworICAgICAgICAgICAgICAgIGF1dG8gb3I2NCA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBl
cnMmIGppdCkgeworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQp
OworCisgICAgICAgICAgICAgICAgICAgIGppdC5vckxlZnRTaGlmdDY0KEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCwgCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjphcmd1bWVudEdQUjEs
IAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYW1v
dW50KSwgCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7
CisKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAg
ICAgICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAg
ICAgICAgICAgaW50NjRfdCBsaHMgPSBpbnZva2U8aW50NjRfdD4ob3I2NCwgbiwgbSk7CisgICAg
ICAgICAgICAgICAgaW50NjRfdCByaHMgPSBuIHwgKG0gPDwgYW1vdW50KTsKKyAgICAgICAgICAg
ICAgICBDSEVDS19FUShsaHMsIHJocyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
Cit9CisKK3ZvaWQgdGVzdE9yUmlnaHRTaGlmdDY0KCkKK3sKKyAgICBWZWN0b3I8aW50MzJfdD4g
YW1vdW50cyA9IHsgMCwgMzQsIDYzIH07CisgICAgZm9yIChhdXRvIG4gOiBpbnQ2NE9wZXJhbmRz
KCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG0gOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAg
ICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgYXV0byBv
cjY0ID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAg
ICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgICAgICAgICAgaml0
Lm9yUmlnaHRTaGlmdDY0KEdQUkluZm86OmFyZ3VtZW50R1BSMCwgCisgICAgICAgICAgICAgICAg
ICAgICAgICBHUFJJbmZvOjphcmd1bWVudEdQUjEsIAorICAgICAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYW1vdW50KSwgCisgICAgICAgICAgICAgICAgICAg
ICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAgICAgICAgZW1p
dEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgICAgICAgICAgaml0LnJldCgpOwor
ICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgaW50NjRfdCBsaHMgPSBpbnZv
a2U8aW50NjRfdD4ob3I2NCwgbiwgbSk7CisgICAgICAgICAgICAgICAgaW50NjRfdCByaHMgPSBu
IHwgKG0gPj4gYW1vdW50KTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUShsaHMsIHJocyk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdE9yVW5zaWduZWRS
aWdodFNoaWZ0NjQoKQoreworICAgIFZlY3Rvcjx1aW50MzJfdD4gYW1vdW50cyA9IHsgMCwgMzQs
IDYzIH07CisgICAgZm9yIChhdXRvIG4gOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9y
IChhdXRvIG0gOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91
bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgYXV0byBvcjY0ID0gY29tcGlsZShbPV0g
KENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvblBy
b2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgICAgICAgICAgaml0Lm9yVW5zaWduZWRSaWdodFNo
aWZ0NjQoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQ
UkluZm86OmFyZ3VtZW50R1BSMSwgCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihhbW91bnQpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25F
cGlsb2d1ZShqaXQpOworICAgICAgICAgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAg
ICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBsaHMgPSBpbnZva2U8dWludDY0
X3Q+KG9yNjQsIG4sIG0pOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IHJocyA9IHN0YXRpY19j
YXN0PHVpbnQ2NF90PihuKSB8IChzdGF0aWNfY2FzdDx1aW50NjRfdD4obSkgPj4gYW1vdW50KTsK
KyAgICAgICAgICAgICAgICBDSEVDS19FUShsaHMsIHJocyk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9Cit9CiAjZW5kaWYKIAogI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpIHx8
IENQVShBUk02NCkKQEAgLTQ5MTUsNiArNTQwMyw3IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZp
bHRlcikgV1RGX0lHTk9SRVNfVEhSRUFEX1NBRkVUWV9BTkFMWVNJUwogICAgIFJVTih0ZXN0TG9h
ZFN0b3JlUGFpcjY0SW50NjQoKSk7CiAgICAgUlVOKHRlc3RMb2FkU3RvcmVQYWlyNjREb3VibGUo
KSk7CiAgICAgUlVOKHRlc3RNdWx0aXBseVNpZ25FeHRlbmQzMigpKTsKKyAgICBSVU4odGVzdE11
bHRpcGx5WmVyb0V4dGVuZDMyKCkpOwogCiAgICAgUlVOKHRlc3RTdWIzMkFyZ3MoKSk7CiAgICAg
UlVOKHRlc3RTdWIzMkltbSgpKTsKQEAgLTQ5ODAsNiArNTQ2OSwyNiBAQCB2b2lkIHJ1bihjb25z
dCBjaGFyKiBmaWx0ZXIpIFdURl9JR05PUkVTX1RIUkVBRF9TQUZFVFlfQU5BTFlTSVMKICAgICBS
VU4odGVzdFN0b3JlUHJlUG9zdEluZGV4NjQoKSk7CiAgICAgUlVOKHRlc3RMb2FkUHJlUG9zdElu
ZGV4MzIoKSk7CiAgICAgUlVOKHRlc3RMb2FkUHJlUG9zdEluZGV4NjQoKSk7CisgICAgUlVOKHRl
c3RBbmRMZWZ0U2hpZnQzMigpKTsKKyAgICBSVU4odGVzdEFuZFJpZ2h0U2hpZnQzMigpKTsKKyAg
ICBSVU4odGVzdEFuZFVuc2lnbmVkUmlnaHRTaGlmdDMyKCkpOworICAgIFJVTih0ZXN0QW5kTGVm
dFNoaWZ0NjQoKSk7CisgICAgUlVOKHRlc3RBbmRSaWdodFNoaWZ0NjQoKSk7CisgICAgUlVOKHRl
c3RBbmRVbnNpZ25lZFJpZ2h0U2hpZnQ2NCgpKTsKKworICAgIFJVTih0ZXN0WG9yTGVmdFNoaWZ0
MzIoKSk7CisgICAgUlVOKHRlc3RYb3JSaWdodFNoaWZ0MzIoKSk7CisgICAgUlVOKHRlc3RYb3JV
bnNpZ25lZFJpZ2h0U2hpZnQzMigpKTsKKyAgICBSVU4odGVzdFhvckxlZnRTaGlmdDY0KCkpOwor
ICAgIFJVTih0ZXN0WG9yUmlnaHRTaGlmdDY0KCkpOworICAgIFJVTih0ZXN0WG9yVW5zaWduZWRS
aWdodFNoaWZ0NjQoKSk7CisKKyAgICBSVU4odGVzdE9yTGVmdFNoaWZ0MzIoKSk7CisgICAgUlVO
KHRlc3RPclJpZ2h0U2hpZnQzMigpKTsKKyAgICBSVU4odGVzdE9yVW5zaWduZWRSaWdodFNoaWZ0
MzIoKSk7CisgICAgUlVOKHRlc3RPckxlZnRTaGlmdDY0KCkpOworICAgIFJVTih0ZXN0T3JSaWdo
dFNoaWZ0NjQoKSk7CisgICAgUlVOKHRlc3RPclVuc2lnbmVkUmlnaHRTaGlmdDY0KCkpOwogI2Vu
ZGlmCiAKICNpZiBDUFUoQVJNNjRFKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzTG93ZXJUb0Fpci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRv
QWlyLmNwcAppbmRleCBlYmIwMzUyY2IzMDgwM2RiYzFmZTgxOGUzOTkwYmEzNzQ1NzA2NjM3Li5j
MGMxMGFjODAyN2QzZDE0ZjZlYTYzYjg3N2Q3NjE3ZjVhNGIzYmUwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcApAQCAtMjg1MywyOSArMjg1MywzNiBAQCBwcml2
YXRlOgogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBNdWw6IHsKLSAgICAgICAgICAgIGlmICht
X3ZhbHVlLT50eXBlKCkgPT0gSW50NjQKLSAgICAgICAgICAgICAgICAmJiBpc1ZhbGlkRm9ybShN
dWx0aXBseVNpZ25FeHRlbmQzMiwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OlRtcCkKLSAgICAg
ICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gU0V4dDMyCi0gICAg
ICAgICAgICAgICAgJiYgIW1fbG9ja2VkLmNvbnRhaW5zKG1fdmFsdWUtPmNoaWxkKDApKSkgewot
ICAgICAgICAgICAgICAgIFZhbHVlKiBvcExlZnQgPSBtX3ZhbHVlLT5jaGlsZCgwKTsKLSAgICAg
ICAgICAgICAgICBWYWx1ZSogbGVmdCA9IG9wTGVmdC0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICAg
ICAgVmFsdWUqIG9wUmlnaHQgPSBtX3ZhbHVlLT5jaGlsZCgxKTsKLSAgICAgICAgICAgICAgICBW
YWx1ZSogcmlnaHQgPSBudWxscHRyOwotCi0gICAgICAgICAgICAgICAgaWYgKG9wUmlnaHQtPm9w
Y29kZSgpID09IFNFeHQzMiAmJiAhbV9sb2NrZWQuY29udGFpbnMob3BSaWdodC0+Y2hpbGQoMCkp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gb3BSaWdodC0+Y2hpbGQoMCk7Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNSZXByZXNlbnRhYmxl
QXM8aW50MzJfdD4oKSAmJiAhbV9sb2NrZWQuY29udGFpbnMobV92YWx1ZS0+Y2hpbGQoMSkpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdlIGp1c3QgdXNlIHRoZSA2NC1iaXQgY29uc3QgaW50
IGFzIGEgMzIgYml0IGNvbnN0IGludCBkaXJlY3RseQotICAgICAgICAgICAgICAgICAgICByaWdo
dCA9IG9wUmlnaHQ7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgVmFsdWUqIGxlZnQg
PSBtX3ZhbHVlLT5jaGlsZCgwKTsKKyAgICAgICAgICAgIFZhbHVlKiByaWdodCA9IG1fdmFsdWUt
PmNoaWxkKDEpOwogCi0gICAgICAgICAgICAgICAgaWYgKHJpZ2h0KSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGFwcGVuZChNdWx0aXBseVNpZ25FeHRlbmQzMiwgdG1wKGxlZnQpLCB0bXAocmlnaHQp
LCB0bXAobV92YWx1ZSkpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICBhdXRvIHRyeUFwcGVuZE11bHRpcGx5V2l0aEV4dGVuZCA9IFsmXSAoKSAtPiBib29sIHsKKyAg
ICAgICAgICAgICAgICBhdXRvIHRyeUFpck9wY29kZSA9IFsmXSAoKSAtPiBBaXI6Ok9wY29kZSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT50eXBlKCkgIT0gSW50NjQpCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gQWlyOjpPb3BzOworICAgICAgICAgICAgICAgICAg
ICAvLyBTTVVMTDogZCA9IFNFeHQzMihuKSAqIFNFeHQzMihtKQorICAgICAgICAgICAgICAgICAg
ICBpZiAoaXNNZXJnZWFibGVWYWx1ZShsZWZ0LCBTRXh0MzIsIHRydWUpICYmIGlzTWVyZ2VhYmxl
VmFsdWUocmlnaHQsIFNFeHQzMiwgdHJ1ZSkpIAorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIE11bHRpcGx5U2lnbkV4dGVuZDMyOworICAgICAgICAgICAgICAgICAgICAvLyBVTVVMTDog
ZCA9IFpFeHQzMihuKSAqIFpFeHQzMihtKQorICAgICAgICAgICAgICAgICAgICBpZiAoaXNNZXJn
ZWFibGVWYWx1ZShsZWZ0LCBaRXh0MzIsIHRydWUpICYmIGlzTWVyZ2VhYmxlVmFsdWUocmlnaHQs
IFpFeHQzMiwgdHJ1ZSkpIAorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE11bHRpcGx5
WmVyb0V4dGVuZDMyOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gQWlyOjpPb3BzOworICAg
ICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSB0
cnlBaXJPcGNvZGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0ob3Bjb2RlLCBB
cmc6OlRtcCwgQXJnOjpUbXAsIEFyZzo6VG1wKSkgeworICAgICAgICAgICAgICAgICAgICBhcHBl
bmQob3Bjb2RlLCB0bXAobGVmdC0+Y2hpbGQoMCkpLCB0bXAocmlnaHQtPmNoaWxkKDApKSwgdG1w
KG1fdmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwobGVmdCk7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKHJpZ2h0KTsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYXBwZW5kQmluT3A8TXVsMzIsIE11bDY0LCBNdWxEb3VibGUsIE11bEZsb2F0LCBD
b21tdXRhdGl2ZT4oCi0gICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCksIG1fdmFsdWUt
PmNoaWxkKDEpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
OworCisgICAgICAgICAgICBpZiAodHJ5QXBwZW5kTXVsdGlwbHlXaXRoRXh0ZW5kKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBhcHBlbmRCaW5PcDxNdWwzMiwgTXVs
NjQsIE11bERvdWJsZSwgTXVsRmxvYXQsIENvbW11dGF0aXZlPihsZWZ0LCByaWdodCk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMjk4OCw2ICsyOTk1LDMwIEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBpZiAodHJ5QXBwZW5kQklDKGxlZnQsIHJpZ2h0KSB8fCB0cnlBcHBl
bmRCSUMocmlnaHQsIGxlZnQpKQogICAgICAgICAgICAgICAgIHJldHVybjsKIAorICAgICAgICAg
ICAgLy8gYW5kLXdpdGgtc2hpZnQgUGF0dGVybjogbiAmIChtIFNoaWZ0VHlwZSBhbW91bnQpCisg
ICAgICAgICAgICBhdXRvIHRyeUFwcGVuZEFuZFdpdGhTaGlmdCA9IFsmXSAoVmFsdWUqIGxlZnQs
IFZhbHVlKiByaWdodCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bj
b2RlID0gb3Bjb2RlQmFzZWRPblNoaWZ0S2luZChyaWdodC0+b3Bjb2RlKCksCisgICAgICAgICAg
ICAgICAgICAgIEFuZExlZnRTaGlmdDMyLCBBbmRMZWZ0U2hpZnQ2NCwKKyAgICAgICAgICAgICAg
ICAgICAgQW5kUmlnaHRTaGlmdDMyLCBBbmRSaWdodFNoaWZ0NjQsCisgICAgICAgICAgICAgICAg
ICAgIEFuZFVuc2lnbmVkUmlnaHRTaGlmdDMyLCBBbmRVbnNpZ25lZFJpZ2h0U2hpZnQ2NCk7Cisg
ICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6VG1wLCBBcmc6OlRt
cCwgQXJnOjpJbW0sIEFyZzo6VG1wKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgIGlmICghY2FuQmVJbnRlcm5hbChyaWdodCkgfHwgIWltbShyaWdo
dC0+Y2hpbGQoMSkpIHx8IHJpZ2h0LT5jaGlsZCgxKS0+YXNJbnQoKSA8IDApCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgICAgIHVpbnQ2NF90IGFtb3Vu
dCA9IHJpZ2h0LT5jaGlsZCgxKS0+YXNJbnQoKTsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBk
YXRhc2l6ZSA9IG1fdmFsdWUtPnR5cGUoKSA9PSBJbnQzMiA/IDMyIDogNjQ7CisgICAgICAgICAg
ICAgICAgaWYgKGFtb3VudCA+PSBkYXRhc2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKGxlZnQpLCB0bXAo
cmlnaHQtPmNoaWxkKDApKSwgaW1tKHJpZ2h0LT5jaGlsZCgxKSksIHRtcChtX3ZhbHVlKSk7Cisg
ICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwocmlnaHQpOworICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgaWYgKHRyeUFwcGVuZEFu
ZFdpdGhTaGlmdChsZWZ0LCByaWdodCkgfHwgdHJ5QXBwZW5kQW5kV2l0aFNoaWZ0KHJpZ2h0LCBs
ZWZ0KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgICAgIGFwcGVuZEJpbk9w
PEFuZDMyLCBBbmQ2NCwgQW5kRG91YmxlLCBBbmRGbG9hdCwgQ29tbXV0YXRpdmU+KGxlZnQsIHJp
Z2h0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMzAwMSw3ICszMDMyLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8vICAgICAgICBtYXNrID0gKDEgPDwgbG93V2lkdGgp
IC0gMQogICAgICAgICAgICAgYXV0byB0cnlBcHBlbmRFWFRSID0gWyZdIChWYWx1ZSogbGVmdCwg
VmFsdWUqIHJpZ2h0KSAtPiBib29sIHsKICAgICAgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNv
ZGUgPSBvcGNvZGVGb3JUeXBlKEV4dHJhY3RSZWdpc3RlcjMyLCBFeHRyYWN0UmVnaXN0ZXI2NCwg
bV92YWx1ZS0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRGb3JtKG9wY29k
ZSwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OkltbSwgQXJnOjpUbXApKSAKKyAgICAgICAgICAg
ICAgICBpZiAoIWlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6Oklt
bSwgQXJnOjpUbXApKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICAgICAgaWYgKGxlZnQtPm9wY29kZSgpICE9IFNobCB8fCBsZWZ0LT5jaGlsZCgwKS0+b3Bj
b2RlKCkgIT0gQml0QW5kIHx8IHJpZ2h0LT5vcGNvZGUoKSAhPSBaU2hyKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMTU1LDYgKzMxODYsMzAgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIGlmICh0cnlBcHBlbmRPUk4obGVmdCwgcmlnaHQpIHx8IHRyeUFwcGVuZE9STihy
aWdodCwgbGVmdCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCisgICAgICAgICAgICAvLyBv
ci13aXRoLXNoaWZ0IFBhdHRlcm46IG4gfCAobSBTaGlmdFR5cGUgYW1vdW50KQorICAgICAgICAg
ICAgYXV0byB0cnlBcHBlbmRPcldpdGhTaGlmdCA9IFsmXSAoVmFsdWUqIGxlZnQsIFZhbHVlKiBy
aWdodCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gb3Bj
b2RlQmFzZWRPblNoaWZ0S2luZChyaWdodC0+b3Bjb2RlKCksIAorICAgICAgICAgICAgICAgICAg
ICBPckxlZnRTaGlmdDMyLCBPckxlZnRTaGlmdDY0LCAKKyAgICAgICAgICAgICAgICAgICAgT3JS
aWdodFNoaWZ0MzIsIE9yUmlnaHRTaGlmdDY0LCAKKyAgICAgICAgICAgICAgICAgICAgT3JVbnNp
Z25lZFJpZ2h0U2hpZnQzMiwgT3JVbnNpZ25lZFJpZ2h0U2hpZnQ2NCk7CisgICAgICAgICAgICAg
ICAgaWYgKCFpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJnOjpJbW0s
IEFyZzo6VG1wKSkgCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICBpZiAoIWNhbkJlSW50ZXJuYWwocmlnaHQpIHx8ICFpbW0ocmlnaHQtPmNoaWxkKDEp
KSB8fCByaWdodC0+Y2hpbGQoMSktPmFzSW50KCkgPCAwKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBhbW91bnQgPSByaWdodC0+
Y2hpbGQoMSktPmFzSW50KCk7CisgICAgICAgICAgICAgICAgdWludDY0X3QgZGF0YXNpemUgPSBt
X3ZhbHVlLT50eXBlKCkgPT0gSW50MzIgPyAzMiA6IDY0OworICAgICAgICAgICAgICAgIGlmIChh
bW91bnQgPj0gZGF0YXNpemUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIHRtcChsZWZ0KSwgdG1wKHJpZ2h0LT5jaGls
ZCgwKSksIGltbShyaWdodC0+Y2hpbGQoMSkpLCB0bXAobV92YWx1ZSkpOworICAgICAgICAgICAg
ICAgIGNvbW1pdEludGVybmFsKHJpZ2h0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGlmICh0cnlBcHBlbmRPcldpdGhTaGlmdChs
ZWZ0LCByaWdodCkgfHwgdHJ5QXBwZW5kT3JXaXRoU2hpZnQocmlnaHQsIGxlZnQpKQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKwogICAgICAgICAgICAgYXBwZW5kQmluT3A8T3IzMiwgT3I2NCwg
T3JEb3VibGUsIE9yRmxvYXQsIENvbW11dGF0aXZlPihsZWZ0LCByaWdodCk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KQEAgLTMyMjUsNiArMzI4MCwzMCBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgaWYgKHRyeUFwcGVuZEVPTihsZWZ0LCByaWdodCkgfHwgdHJ5QXBwZW5kRU9OKHJp
Z2h0LCBsZWZ0KSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKKyAgICAgICAgICAgIC8vIHhv
ci13aXRoLXNoaWZ0IFBhdHRlcm46IG4gXiAobSBTaGlmdFR5cGUgYW1vdW50KQorICAgICAgICAg
ICAgYXV0byB0cnlBcHBlbmRYb3JXaXRoU2hpZnQgPSBbJl0gKFZhbHVlKiBsZWZ0LCBWYWx1ZSog
cmlnaHQpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IG9w
Y29kZUJhc2VkT25TaGlmdEtpbmQocmlnaHQtPm9wY29kZSgpLCAKKyAgICAgICAgICAgICAgICAg
ICAgWG9yTGVmdFNoaWZ0MzIsIFhvckxlZnRTaGlmdDY0LCAKKyAgICAgICAgICAgICAgICAgICAg
WG9yUmlnaHRTaGlmdDMyLCBYb3JSaWdodFNoaWZ0NjQsIAorICAgICAgICAgICAgICAgICAgICBY
b3JVbnNpZ25lZFJpZ2h0U2hpZnQzMiwgWG9yVW5zaWduZWRSaWdodFNoaWZ0NjQpOworICAgICAg
ICAgICAgICAgIGlmICghaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFy
Zzo6SW1tLCBBcmc6OlRtcCkpIAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgaWYgKCFjYW5CZUludGVybmFsKHJpZ2h0KSB8fCAhaW1tKHJpZ2h0LT5j
aGlsZCgxKSkgfHwgcmlnaHQtPmNoaWxkKDEpLT5hc0ludCgpIDwgMCkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgdWludDY0X3QgYW1vdW50ID0g
cmlnaHQtPmNoaWxkKDEpLT5hc0ludCgpOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IGRhdGFz
aXplID0gbV92YWx1ZS0+dHlwZSgpID09IEludDMyID8gMzIgOiA2NDsKKyAgICAgICAgICAgICAg
ICBpZiAoYW1vdW50ID49IGRhdGFzaXplKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAobGVmdCksIHRtcChyaWdo
dC0+Y2hpbGQoMCkpLCBpbW0ocmlnaHQtPmNoaWxkKDEpKSwgdG1wKG1fdmFsdWUpKTsKKyAgICAg
ICAgICAgICAgICBjb21taXRJbnRlcm5hbChyaWdodCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBpZiAodHJ5QXBwZW5kWG9yV2l0
aFNoaWZ0KGxlZnQsIHJpZ2h0KSB8fCB0cnlBcHBlbmRYb3JXaXRoU2hpZnQocmlnaHQsIGxlZnQp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICAgICAgYXBwZW5kQmluT3A8WG9y
MzIsIFhvcjY0LCBYb3JEb3VibGUsIFhvckZsb2F0LCBDb21tdXRhdGl2ZT4obGVmdCwgcmlnaHQp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwppbmRleCA0OWZlZDFhYWExOWFmNmRkY2Q5MmMz
MzlmNzBiNTc2ZDBkMzk1ZGRlLi5mODU0NTc1Mzc0M2FmMjVjMmI1ODdlZWJmZGRhNDI1Nzc5ZmRi
ZWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5v
cGNvZGVzCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29k
ZXMKQEAgLTI4NCw2ICsyODQsOSBAQCBhcm02NDogTXVsdGlwbHlOZWdaZXJvRXh0ZW5kMzIgVTpH
OjMyLCBVOkc6MzIsIEQ6Rzo2NAogYXJtNjQ6IE11bHRpcGx5U2lnbkV4dGVuZDMyIFU6RzozMiwg
VTpHOjMyLCBEOkc6NjQKICAgICBUbXAsIFRtcCwgVG1wCiAKK2FybTY0OiBNdWx0aXBseVplcm9F
eHRlbmQzMiBVOkc6MzIsIFU6RzozMiwgRDpHOjY0CisgICAgVG1wLCBUbXAsIFRtcAorCiBhcm02
NDogRGl2MzIgVTpHOjMyLCBVOkc6MzIsIFpEOkc6MzIKICAgICBUbXAsIFRtcCwgVG1wCiAKQEAg
LTk1NSw2ICs5NTgsNjAgQEAgYXJtNjQ6IFN1YlJpZ2h0U2hpZnQ2NCBVOkc6NjQsIFU6Rzo2NCwg
VTpHOjY0LCBEOkc6NjQKIGFybTY0OiBTdWJVbnNpZ25lZFJpZ2h0U2hpZnQ2NCBVOkc6NjQsIFU6
Rzo2NCwgVTpHOjY0LCBEOkc6NjQKICAgICBUbXAsIFRtcCwgSW1tLCBUbXAKIAorYXJtNjQ6IEFu
ZExlZnRTaGlmdDMyIFU6RzozMiwgVTpHOjMyLCBVOkc6MzIsIFpEOkc6MzIKKyAgICBUbXAsIFRt
cCwgSW1tLCBUbXAKKworYXJtNjQ6IEFuZFJpZ2h0U2hpZnQzMiBVOkc6MzIsIFU6RzozMiwgVTpH
OjMyLCBaRDpHOjMyCisgICAgVG1wLCBUbXAsIEltbSwgVG1wCisKK2FybTY0OiBBbmRVbnNpZ25l
ZFJpZ2h0U2hpZnQzMiBVOkc6MzIsIFU6RzozMiwgVTpHOjMyLCBaRDpHOjMyCisgICAgVG1wLCBU
bXAsIEltbSwgVG1wCisKK2FybTY0OiBBbmRMZWZ0U2hpZnQ2NCBVOkc6NjQsIFU6Rzo2NCwgVTpH
OjY0LCBEOkc6NjQKKyAgICBUbXAsIFRtcCwgSW1tLCBUbXAKKworYXJtNjQ6IEFuZFJpZ2h0U2hp
ZnQ2NCBVOkc6NjQsIFU6Rzo2NCwgVTpHOjY0LCBEOkc6NjQKKyAgICBUbXAsIFRtcCwgSW1tLCBU
bXAKKworYXJtNjQ6IEFuZFVuc2lnbmVkUmlnaHRTaGlmdDY0IFU6Rzo2NCwgVTpHOjY0LCBVOkc6
NjQsIEQ6Rzo2NAorICAgIFRtcCwgVG1wLCBJbW0sIFRtcAorCithcm02NDogWG9yTGVmdFNoaWZ0
MzIgVTpHOjMyLCBVOkc6MzIsIFU6RzozMiwgWkQ6RzozMgorICAgIFRtcCwgVG1wLCBJbW0sIFRt
cAorCithcm02NDogWG9yUmlnaHRTaGlmdDMyIFU6RzozMiwgVTpHOjMyLCBVOkc6MzIsIFpEOkc6
MzIKKyAgICBUbXAsIFRtcCwgSW1tLCBUbXAKKworYXJtNjQ6IFhvclVuc2lnbmVkUmlnaHRTaGlm
dDMyIFU6RzozMiwgVTpHOjMyLCBVOkc6MzIsIFpEOkc6MzIKKyAgICBUbXAsIFRtcCwgSW1tLCBU
bXAKKworYXJtNjQ6IFhvckxlZnRTaGlmdDY0IFU6Rzo2NCwgVTpHOjY0LCBVOkc6NjQsIEQ6Rzo2
NAorICAgIFRtcCwgVG1wLCBJbW0sIFRtcAorCithcm02NDogWG9yUmlnaHRTaGlmdDY0IFU6Rzo2
NCwgVTpHOjY0LCBVOkc6NjQsIEQ6Rzo2NAorICAgIFRtcCwgVG1wLCBJbW0sIFRtcAorCithcm02
NDogWG9yVW5zaWduZWRSaWdodFNoaWZ0NjQgVTpHOjY0LCBVOkc6NjQsIFU6Rzo2NCwgRDpHOjY0
CisgICAgVG1wLCBUbXAsIEltbSwgVG1wCisKK2FybTY0OiBPckxlZnRTaGlmdDMyIFU6RzozMiwg
VTpHOjMyLCBVOkc6MzIsIFpEOkc6MzIKKyAgICBUbXAsIFRtcCwgSW1tLCBUbXAKKworYXJtNjQ6
IE9yUmlnaHRTaGlmdDMyIFU6RzozMiwgVTpHOjMyLCBVOkc6MzIsIFpEOkc6MzIKKyAgICBUbXAs
IFRtcCwgSW1tLCBUbXAKKworYXJtNjQ6IE9yVW5zaWduZWRSaWdodFNoaWZ0MzIgVTpHOjMyLCBV
Okc6MzIsIFU6RzozMiwgWkQ6RzozMgorICAgIFRtcCwgVG1wLCBJbW0sIFRtcAorCithcm02NDog
T3JMZWZ0U2hpZnQ2NCBVOkc6NjQsIFU6Rzo2NCwgVTpHOjY0LCBEOkc6NjQKKyAgICBUbXAsIFRt
cCwgSW1tLCBUbXAKKworYXJtNjQ6IE9yUmlnaHRTaGlmdDY0IFU6Rzo2NCwgVTpHOjY0LCBVOkc6
NjQsIEQ6Rzo2NAorICAgIFRtcCwgVG1wLCBJbW0sIFRtcAorCithcm02NDogT3JVbnNpZ25lZFJp
Z2h0U2hpZnQ2NCBVOkc6NjQsIFU6Rzo2NCwgVTpHOjY0LCBEOkc6NjQKKyAgICBUbXAsIFRtcCwg
SW1tLCBUbXAKKwogIyBUaGUgZmlyc3Qgb3BlcmFuZCBpcyByYXguCiAjIEZJWE1FOiBUaGlzIGZv
cm11bGF0aW9uIG1lYW5zIHRoYXQgdGhlIGJvb2xlYW4gcmVzdWx0IGNhbm5vdCBiZSBwdXQgaW4g
ZWF4LCBldmVuIHRob3VnaCBhbGwgdXNlcnMKICMgb2YgdGhpcyB3b3VsZCBiZSBPSyB3aXRoIHRo
YXQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKaW5kZXggNzIxZWIzYWRkNjI3NDhlMmZiMDJk
ZGY0MjU1N2NjNTlkNWQ4ODBlYi4uOWFhNDBkMTIxZWU0ZWNmMjZlOTRmN2U1OWZiMTRmOTM1YmVh
OWNiMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaApAQCAtNDcxLDYgKzQ3MSwyOCBAQCB2
b2lkIHRlc3RTdWJXaXRoVW5zaWduZWRSaWdodFNoaWZ0MzIoKTsKIHZvaWQgdGVzdFN1YldpdGhM
ZWZ0U2hpZnQ2NCgpOwogdm9pZCB0ZXN0U3ViV2l0aFJpZ2h0U2hpZnQ2NCgpOwogdm9pZCB0ZXN0
U3ViV2l0aFVuc2lnbmVkUmlnaHRTaGlmdDY0KCk7CisKK3ZvaWQgdGVzdEFuZExlZnRTaGlmdDMy
KCk7Cit2b2lkIHRlc3RBbmRSaWdodFNoaWZ0MzIoKTsKK3ZvaWQgdGVzdEFuZFVuc2lnbmVkUmln
aHRTaGlmdDMyKCk7Cit2b2lkIHRlc3RBbmRMZWZ0U2hpZnQ2NCgpOwordm9pZCB0ZXN0QW5kUmln
aHRTaGlmdDY0KCk7Cit2b2lkIHRlc3RBbmRVbnNpZ25lZFJpZ2h0U2hpZnQ2NCgpOworCit2b2lk
IHRlc3RYb3JMZWZ0U2hpZnQzMigpOwordm9pZCB0ZXN0WG9yUmlnaHRTaGlmdDMyKCk7Cit2b2lk
IHRlc3RYb3JVbnNpZ25lZFJpZ2h0U2hpZnQzMigpOwordm9pZCB0ZXN0WG9yTGVmdFNoaWZ0NjQo
KTsKK3ZvaWQgdGVzdFhvclJpZ2h0U2hpZnQ2NCgpOwordm9pZCB0ZXN0WG9yVW5zaWduZWRSaWdo
dFNoaWZ0NjQoKTsKKwordm9pZCB0ZXN0T3JMZWZ0U2hpZnQzMigpOwordm9pZCB0ZXN0T3JSaWdo
dFNoaWZ0MzIoKTsKK3ZvaWQgdGVzdE9yVW5zaWduZWRSaWdodFNoaWZ0MzIoKTsKK3ZvaWQgdGVz
dE9yTGVmdFNoaWZ0NjQoKTsKK3ZvaWQgdGVzdE9yUmlnaHRTaGlmdDY0KCk7Cit2b2lkIHRlc3RP
clVuc2lnbmVkUmlnaHRTaGlmdDY0KCk7CisKIHZvaWQgdGVzdFNlbGVjdENvbXBhcmVEb3VibGUo
KTsKIHZvaWQgdGVzdFNlbGVjdENvbXBhcmVGbG9hdChmbG9hdCwgZmxvYXQpOwogdm9pZCB0ZXN0
U2VsZWN0Q29tcGFyZUZsb2F0VG9Eb3VibGUoZmxvYXQsIGZsb2F0KTsKQEAgLTkxNyw3ICs5Mzks
OCBAQCB2b2lkIHRlc3RNdWxOZWdBcmdBcmcoaW50LCBpbnQpOwogdm9pZCB0ZXN0TXVsQXJnSW1t
KGludDY0X3QsIGludDY0X3QpOwogdm9pZCB0ZXN0TXVsSW1tQXJnKGludCwgaW50KTsKIHZvaWQg
dGVzdE11bEFyZ3MzMihpbnQsIGludCk7Ci12b2lkIHRlc3RNdWxBcmdzMzJTaWduRXh0ZW5kKGlu
dCwgaW50KTsKK3ZvaWQgdGVzdE11bEFyZ3MzMlNpZ25FeHRlbmQoKTsKK3ZvaWQgdGVzdE11bEFy
Z3MzMlplcm9FeHRlbmQoKTsKIHZvaWQgdGVzdE11bEltbTMyU2lnbkV4dGVuZChjb25zdCBpbnQs
IGludCk7CiB2b2lkIHRlc3RNdWxMb2FkVHdpY2UoKTsKIHZvaWQgdGVzdE11bEFkZEFyZ3NMZWZ0
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzIuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18yLmNwcAppbmRleCAyNGIzZjgzODcyYTBm
Y2JlNjkzNGYzYmEwYzkxMDdhY2E3MTQwMTU0Li43YTU3NmE4YjNmNDFmYmQ0YTRjMzNmZGM2NDEy
MmQzMDFlZmRhYjZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIz
XzIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMi5jcHAKQEAgLTEy
MjgsMTAgKzEyMjgsMTAgQEAgdm9pZCB0ZXN0TXVsQXJnczMyKGludCBhLCBpbnQgYikKICAgICBD
SEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYywgYSwgYikgPT0gYSAqIGIpOwogfQogCi12b2lk
IHRlc3RNdWxBcmdzMzJTaWduRXh0ZW5kKGludCBhLCBpbnQgYikKK3ZvaWQgdGVzdE11bEFyZ3Mz
MlNpZ25FeHRlbmQoKQogewogICAgIFByb2NlZHVyZSBwcm9jOwotICAgIGlmIChwcm9jLm9wdExl
dmVsKCkgPCAxKQorICAgIGlmIChwcm9jLm9wdExldmVsKCkgPCAyKQogICAgICAgICByZXR1cm47
CiAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKICAgICBWYWx1ZSogYXJn
MSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCkBAIC0xMjQ3LDcgKzEyNDcsNDEgQEAgdm9pZCB0
ZXN0TXVsQXJnczMyU2lnbkV4dGVuZChpbnQgYSwgaW50IGIpCiAKICAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKIAotICAgIENIRUNLKGludm9rZTxsb25nIGludD4oKmNvZGUsIGEs
IGIpID09ICgobG9uZyBpbnQpIGEpICogKChsb25nIGludCkgYikpOworICAgIGZvciAoYXV0byBu
T3BlcmFuZCA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbU9wZXJhbmQg
OiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGludDMyX3QgbiA9IG5PcGVyYW5kLnZh
bHVlOworICAgICAgICAgICAgaW50MzJfdCBtID0gbU9wZXJhbmQudmFsdWU7CisgICAgICAgICAg
ICBDSEVDS19FUShpbnZva2U8aW50NjRfdD4oKmNvZGUsIG4sIG0pLCBzdGF0aWNfY2FzdDxpbnQ2
NF90PihuKSAqIHN0YXRpY19jYXN0PGludDY0X3Q+KG0pKTsKKyAgICAgICAgfQorICAgIH0KK30K
Kwordm9pZCB0ZXN0TXVsQXJnczMyWmVyb0V4dGVuZCgpCit7CisgICAgUHJvY2VkdXJlIHByb2M7
CisgICAgaWYgKHByb2Mub3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKyAgICBCYXNp
Y0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiBhcmcxID0gcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAg
ICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCkpOworICAgIFZhbHVlKiBhcmcyID0gcm9vdC0+YXBwZW5kTmV3PFZh
bHVlPigKKyAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBl
bmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50
R1BSMSkpOworICAgIFZhbHVlKiBsZWZ0ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBa
RXh0MzIsIE9yaWdpbigpLCBhcmcxKTsKKyAgICBWYWx1ZSogcmlnaHQgPSByb290LT5hcHBlbmRO
ZXc8VmFsdWU+KHByb2MsIFpFeHQzMiwgT3JpZ2luKCksIGFyZzIpOworICAgIFZhbHVlKiBtdWwg
PSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIE11bCwgT3JpZ2luKCksIGxlZnQsIHJpZ2h0
KTsKKyAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUocHJvYywgUmV0dXJuLCBPcmlnaW4o
KSwgbXVsKTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworCisgICAgZm9y
IChhdXRvIG5PcGVyYW5kIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBt
T3BlcmFuZCA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICAgICAgdWludDMyX3QgbiA9IG5P
cGVyYW5kLnZhbHVlOworICAgICAgICAgICAgdWludDMyX3QgbSA9IG1PcGVyYW5kLnZhbHVlOwor
ICAgICAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPHVpbnQ2NF90PigqY29kZSwgbiwgbSksIHN0YXRp
Y19jYXN0PHVpbnQ2NF90PihuKSAqIHN0YXRpY19jYXN0PHVpbnQ2NF90PihtKSk7CisgICAgICAg
IH0KKyAgICB9CiB9CiAKIHZvaWQgdGVzdE11bEltbTMyU2lnbkV4dGVuZChjb25zdCBpbnQgYSwg
aW50IGIpCkBAIC01NDYxLDE2NSArNTQ5NSw5MjEgQEAgdm9pZCB0ZXN0U3ViV2l0aFVuc2lnbmVk
UmlnaHRTaGlmdDY0KCkKICAgICB9CiB9CiAKLXZvaWQgdGVzdEJpdEFuZFplcm9TaGlmdFJpZ2h0
QXJnSW1tTWFzazMyKCkKK3ZvaWQgdGVzdEFuZExlZnRTaGlmdDMyKCkKIHsKLSAgICAvLyBUdXJu
IHRoaXM6ICh0bXAgPj4gaW1tKSAmIG1hc2sgCi0gICAgLy8gSW50byB0aGlzOiB0bXAgPj4gaW1t
Ci0gICAgdWludDMyX3QgdG1wID0gMHhmZmZmZmZmZjsKLSAgICBWZWN0b3I8dWludDMyX3Q+IGlt
bXMgPSB7IDQsIDI4LCAzMSB9OwotICAgIFZlY3Rvcjx1aW50MzJfdD4gbWFza3MgPSB7IDB4MGZm
ZmZmZmYsIDB4ZiwgMHhmZmZmIH07CisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0
TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8aW50MzJfdD4gYW1vdW50
cyA9IHsgMSwgMTcsIDMxIH07CiAKLSAgICBhdXRvIHRlc3QgPSBbJl0gKHVpbnQzMl90IGltbSwg
dWludDMyX3QgbWFzaykgeworICAgIC8vIFRlc3QgUGF0dGVybjogZCA9IG4gJiAobSA8PCBhbW91
bnQpCisgICAgYXV0byB0ZXN0ID0gWyZdIChpbnQzMl90IG4sIGludDMyX3QgbSwgaW50MzJfdCBh
bW91bnQpIC0+IGludDMyX3QgewogICAgICAgICBQcm9jZWR1cmUgcHJvYzsKICAgICAgICAgQmFz
aWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKIAotICAgICAgICBWYWx1ZSogdG1wVmFs
dWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICBWYWx1ZSogblZhbHVlID0gcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPigKICAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwg
CiAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOwotICAgICAgICBWYWx1ZSogaW1tVmFsdWUg
PSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgaW1tKTsKLSAg
ICAgICAgVmFsdWUqIGxlZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgWlNo
ciwgT3JpZ2luKCksIHRtcFZhbHVlLCBpbW1WYWx1ZSk7Ci0gICAgICAgIFZhbHVlKiByaWdodFZh
bHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIG1hc2sp
OworICAgICAgICBWYWx1ZSogbVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAg
ICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmRO
ZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BS
MSkpOworICAgICAgICBWYWx1ZSogYW1vdW50VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3Qz
MlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYW1vdW50KTsKKworICAgICAgICBWYWx1ZSogc2hpZnRW
YWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU2hsLCBPcmlnaW4oKSwgbVZhbHVl
LCBhbW91bnRWYWx1ZSk7CiAgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKLSAg
ICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCi0gICAgICAgICAgICByb290LT5hcHBl
bmROZXc8VmFsdWU+KHByb2MsIEJpdEFuZCwgT3JpZ2luKCksIGxlZnRWYWx1ZSwgcmlnaHRWYWx1
ZSkpOworICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgCisgICAgICAgICAgICBy
b290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdEFuZCwgT3JpZ2luKCksIG5WYWx1ZSwgc2hp
ZnRWYWx1ZSkpOwogCiAgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwotICAg
ICAgICBpZiAoaXNBUk02NCgpKQotICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNv
ZGUsICJsc3IiKTsKLSAgICAgICAgdWludDMyX3QgbGhzID0gaW52b2tlPHVpbnQzMl90PigqY29k
ZSwgdG1wKTsKLSAgICAgICAgdWludDMyX3QgcmhzID0gdG1wID4+IGltbTsKLSAgICAgICAgQ0hF
Q0sobGhzID09IHJocyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkpIHsKKyAgICAgICAgICAgIHN0
ZDo6c3RyaW5nIHJlZ2V4KCIuKmFuZC4qLC4qLC4qLC4qbHNsICMiKTsKKyAgICAgICAgICAgIHJl
Z2V4ICs9IHN0ZDo6dG9fc3RyaW5nKGFtb3VudCkgKyAiLioiOworICAgICAgICAgICAgY2hlY2tV
c2VzSW5zdHJ1Y3Rpb24oKmNvZGUsIHJlZ2V4LmNfc3RyKCksIHRydWUpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBpbnZva2U8aW50MzJfdD4oKmNvZGUsIG4sIG0pOwogICAgIH07CiAKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGltbXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHRlc3Qo
aW1tcy5hdChpKSwgbWFza3MuYXQoaSkpOworICAgIGZvciAoYXV0byBuT3BlcmFuZCA6IGludDMy
T3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbU9wZXJhbmQgOiBpbnQzMk9wZXJhbmRz
KCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAg
ICAgICAgICAgaW50MzJfdCBuID0gbk9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgaW50
MzJfdCBtID0gbU9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEodGVzdChu
LCBtLCBhbW91bnQpLCBuICYgKG0gPDwgYW1vdW50KSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CiB9CiAKLXZvaWQgdGVzdEJpdEFuZFplcm9TaGlmdFJpZ2h0QXJnSW1tTWFzazY0
KCkKK3ZvaWQgdGVzdEFuZFJpZ2h0U2hpZnQzMigpCiB7Ci0gICAgLy8gVHVybiB0aGlzOiAodG1w
ID4+IGltbSkgJiBtYXNrIAotICAgIC8vIEludG8gdGhpczogdG1wID4+IGltbQotICAgIHVpbnQ2
NF90IHRtcCA9IDB4ZmZmZmZmZmZmZmZmZmZmZjsKLSAgICBWZWN0b3I8dWludDY0X3Q+IGltbXMg
PSB7IDQsIDYwLCA2MyB9OwotICAgIFZlY3Rvcjx1aW50NjRfdD4gbWFza3MgPSB7IDB4MGZmZmZm
ZmZmZmZmZmZmZiwgMHhmLCAweGZmZmYgfTsKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0
QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIFZlY3RvcjxpbnQzMl90PiBh
bW91bnRzID0geyAxLCAxNywgMzEgfTsKIAotICAgIGF1dG8gdGVzdCA9IFsmXSAodWludDY0X3Qg
aW1tLCB1aW50NjRfdCBtYXNrKSB7CisgICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0gbiAmIChtID4+
IGFtb3VudCkKKyAgICBhdXRvIHRlc3QgPSBbJl0gKGludDMyX3QgbiwgaW50MzJfdCBtLCBpbnQz
Ml90IGFtb3VudCkgLT4gaW50MzJfdCB7CiAgICAgICAgIFByb2NlZHVyZSBwcm9jOwogICAgICAg
ICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOwogCi0gICAgICAgIFZhbHVlKiB0
bXBWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICAgICAgVmFsdWUqIGltbVZhbHVlID0gcm9v
dC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGltbSk7Ci0gICAgICAg
IFZhbHVlKiBsZWZ0VmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFpTaHIsIE9y
aWdpbigpLCB0bXBWYWx1ZSwgaW1tVmFsdWUpOwotICAgICAgICBWYWx1ZSogcmlnaHRWYWx1ZSA9
IHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCBtYXNrKTsKKyAg
ICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAg
ICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFy
Z3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsK
KyAgICAgICAgVmFsdWUqIG1WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAg
ICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEp
KTsKKyAgICAgICAgVmFsdWUqIGFtb3VudFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIGFtb3VudCk7CisKKyAgICAgICAgVmFsdWUqIHNoaWZ0VmFs
dWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNTaHIsIE9yaWdpbigpLCBtVmFsdWUs
IGFtb3VudFZhbHVlKTsKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAotICAg
ICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKLSAgICAgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgbGVmdFZhbHVlLCByaWdodFZhbHVl
KSk7CisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgblZhbHVlLCBzaGlm
dFZhbHVlKSk7CiAKICAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7Ci0gICAg
ICAgIGlmIChpc0FSTTY0KCkpCi0gICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29k
ZSwgImxzciIpOwotICAgICAgICB1aW50NjRfdCBsaHMgPSBpbnZva2U8dWludDY0X3Q+KCpjb2Rl
LCB0bXApOwotICAgICAgICB1aW50NjRfdCByaHMgPSB0bXAgPj4gaW1tOwotICAgICAgICBDSEVD
SyhsaHMgPT0gcmhzKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkgeworICAgICAgICAgICAgc3Rk
OjpzdHJpbmcgcmVnZXgoIi4qYW5kLiosLiosLiosLiphc3IgIyIpOworICAgICAgICAgICAgcmVn
ZXggKz0gc3RkOjp0b19zdHJpbmcoYW1vdW50KSArICIuKiI7CisgICAgICAgICAgICBjaGVja1Vz
ZXNJbnN0cnVjdGlvbigqY29kZSwgcmVnZXguY19zdHIoKSwgdHJ1ZSk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIGludm9rZTxpbnQzMl90PigqY29kZSwgbiwgbSk7CiAgICAgfTsKIAotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW1tcy5zaXplKCk7ICsraSkKLSAgICAgICAgdGVzdChp
bW1zLmF0KGkpLCBtYXNrcy5hdChpKSk7CisgICAgZm9yIChhdXRvIG5PcGVyYW5kIDogaW50MzJP
cGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtT3BlcmFuZCA6IGludDMyT3BlcmFuZHMo
KSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAg
ICAgICAgICBpbnQzMl90IG4gPSBuT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBpbnQz
Ml90IG0gPSBtT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUSh0ZXN0KG4s
IG0sIGFtb3VudCksIG4gJiAobSA+PiBhbW91bnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KIH0KIAotc3RhdGljIHZvaWQgdGVzdEJpdEFuZEFyZ3MoaW50NjRfdCBhLCBpbnQ2
NF90IGIpCit2b2lkIHRlc3RBbmRVbnNpZ25lZFJpZ2h0U2hpZnQzMigpCiB7Ci0gICAgUHJvY2Vk
dXJlIHByb2M7Ci0gICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKLSAgICBy
b290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCi0gICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2lu
KCksCi0gICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCi0gICAgICAgICAgICBwcm9jLCBC
aXRBbmQsIE9yaWdpbigpLAotICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVn
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApLAotICAgICAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjEpKSk7CisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0
TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8dWludDMyX3Q+IGFtb3Vu
dHMgPSB7IDEsIDE3LCAzMSB9OwogCi0gICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ2NF90Pihw
cm9jLCBhLCBiKSA9PSAoYSAmIGIpKTsKLX0KKyAgICAvLyBUZXN0IFBhdHRlcm46IGQgPSBuICYg
KG0gPj4gYW1vdW50KQorICAgIGF1dG8gdGVzdCA9IFsmXSAodWludDMyX3QgbiwgdWludDMyX3Qg
bSwgdWludDMyX3QgYW1vdW50KSAtPiB1aW50MzJfdCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9j
OworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOwogCi1zdGF0aWMg
dm9pZCB0ZXN0Qml0QW5kU2FtZUFyZyhpbnQ2NF90IGEpCi17Ci0gICAgUHJvY2VkdXJlIHByb2M7
Ci0gICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKLSAgICBWYWx1ZSogYXJn
dW1lbnQgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVl
KAotICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAotICAgICAgICByb290LT5hcHBlbmRO
ZXc8VmFsdWU+KAotICAgICAgICAgICAgcHJvYywgQml0QW5kLCBPcmlnaW4oKSwKLSAgICAgICAg
ICAgIGFyZ3VtZW50LAotICAgICAgICAgICAgYXJndW1lbnQpKTsKKyAgICAgICAgVmFsdWUqIG5W
YWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywg
T3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgVmFsdWUq
IG1WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVu
YywgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKTsKKyAgICAgICAgVmFs
dWUqIGFtb3VudFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIGFtb3VudCk7CiAKLSAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludDY0X3Q+KHByb2Ms
IGEpID09IGEpOwotfQorICAgICAgICBWYWx1ZSogc2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5l
dzxWYWx1ZT4ocHJvYywgWlNociwgT3JpZ2luKCksIG1WYWx1ZSwgYW1vdW50VmFsdWUpOworICAg
ICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgICAgICBwcm9jLCBSZXR1
cm4sIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
Qml0QW5kLCBPcmlnaW4oKSwgblZhbHVlLCBzaGlmdFZhbHVlKSk7CiAKLXN0YXRpYyB2b2lkIHRl
c3RCaXRBbmROb3ROb3QoaW50NjRfdCBhLCBpbnQ2NF90IGIpCi17Ci0gICAgUHJvY2VkdXJlIHBy
b2M7Ci0gICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKLSAgICBWYWx1ZSog
YXJnQSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICBWYWx1ZSogYXJnQiA9IHJvb3QtPmFwcGVuZE5l
dzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIx
KTsKLSAgICBWYWx1ZSogbm90QSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0WG9y
LCBPcmlnaW4oKSwgYXJnQSwgcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIC0xKSk7Ci0gICAgVmFsdWUqIG5vdEIgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHBy
b2MsIEJpdFhvciwgT3JpZ2luKCksIGFyZ0IsIHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+
KHByb2MsIE9yaWdpbigpLCAtMSkpOwotICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgK
LSAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKLSAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPigKLSAgICAgICAgICAgIHByb2MsIEJpdEFuZCwgT3JpZ2luKCksCi0gICAgICAgICAg
ICBub3RBLAotICAgICAgICAgICAgbm90QikpOworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxl
UHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkgeworICAgICAgICAgICAgc3RkOjpz
dHJpbmcgcmVnZXgoIi4qYW5kLiosLiosLiosLipsc3IgIyIpOworICAgICAgICAgICAgcmVnZXgg
Kz0gc3RkOjp0b19zdHJpbmcoYW1vdW50KSArICIuKiI7CisgICAgICAgICAgICBjaGVja1VzZXNJ
bnN0cnVjdGlvbigqY29kZSwgcmVnZXguY19zdHIoKSwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIGludm9rZTx1aW50MzJfdD4oKmNvZGUsIG4sIG0pOworICAgIH07CiAKLSAgICBD
SEVDS19FUShjb21waWxlQW5kUnVuPGludDY0X3Q+KHByb2MsIGEsIGIpLCAofmEgJiB+YikpOwor
ICAgIGZvciAoYXV0byBuT3BlcmFuZCA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICBmb3Ig
KGF1dG8gbU9wZXJhbmQgOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0
byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgdWludDMyX3QgbiA9IG5PcGVy
YW5kLnZhbHVlOworICAgICAgICAgICAgICAgIHVpbnQzMl90IG0gPSBtT3BlcmFuZC52YWx1ZTsK
KyAgICAgICAgICAgICAgICBDSEVDS19FUSh0ZXN0KG4sIG0sIGFtb3VudCksIG4gJiAobSA+PiBh
bW91bnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KIH0KIAotc3RhdGljIHZv
aWQgdGVzdEJpdEFuZE5vdE5vdDMyKGludDMyX3QgYSwgaW50MzJfdCBiKQordm9pZCB0ZXN0QW5k
TGVmdFNoaWZ0NjQoKQogewotICAgIFByb2NlZHVyZSBwcm9jOwotICAgIEJhc2ljQmxvY2sqIHJv
b3QgPSBwcm9jLmFkZEJsb2NrKCk7Ci0gICAgVmFsdWUqIGFyZ0EgPSByb290LT5hcHBlbmROZXc8
VmFsdWU+KHByb2MsIFRydW5jLCBPcmlnaW4oKSwgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVn
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKLSAgICBWYWx1
ZSogYXJnQiA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgVHJ1bmMsIE9yaWdpbigpLCBy
b290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86
OmFyZ3VtZW50R1BSMSkpOwotICAgIFZhbHVlKiBub3RBID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBCaXRYb3IsIE9yaWdpbigpLCBhcmdBLCByb290LT5hcHBlbmROZXc8Q29uc3QzMlZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgLTEpKTsKLSAgICBWYWx1ZSogbm90QiA9IHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4ocHJvYywgQml0WG9yLCBPcmlnaW4oKSwgYXJnQiwgcm9vdC0+YXBwZW5kTmV3
PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIC0xKSk7Ci0gICAgcm9vdC0+YXBwZW5kTmV3
Q29udHJvbFZhbHVlKAotICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAotICAgICAgICBy
b290LT5hcHBlbmROZXc8VmFsdWU+KAotICAgICAgICAgICAgcHJvYywgQml0QW5kLCBPcmlnaW4o
KSwKLSAgICAgICAgICAgIG5vdEEsCi0gICAgICAgICAgICBub3RCKSk7CisgICAgaWYgKEpTQzo6
T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKyAgICBW
ZWN0b3I8aW50MzJfdD4gYW1vdW50cyA9IHsgMSwgMzQsIDYzIH07CiAKLSAgICBDSEVDS19FUShj
b21waWxlQW5kUnVuPGludDMyX3Q+KHByb2MsIGEsIGIpLCAofmEgJiB+YikpOwotfQorICAgIC8v
IFRlc3QgUGF0dGVybjogZCA9IG4gJiAobSA8PCBhbW91bnQpCisgICAgYXV0byB0ZXN0ID0gWyZd
IChpbnQ2NF90IG4sIGludDY0X3QgbSwgaW50MzJfdCBhbW91bnQpIC0+IGludDY0X3QgeworICAg
ICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRk
QmxvY2soKTsKIAotc3RhdGljIHZvaWQgdGVzdEJpdEFuZE5vdEltbShpbnQ2NF90IGEsIGludDY0
X3QgYikKLXsKLSAgICBQcm9jZWR1cmUgcHJvYzsKLSAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJv
Yy5hZGRCbG9jaygpOwotICAgIFZhbHVlKiBhcmdBID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50
UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgIFZh
bHVlKiBub3RBID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9yaWdpbigp
LCBhcmdBLCByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgLTEp
KTsKLSAgICBWYWx1ZSogY3N0QiA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBiKTsKLSAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCi0gICAgICAg
IHByb2MsIFJldHVybiwgT3JpZ2luKCksCi0gICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
Ci0gICAgICAgICAgICBwcm9jLCBCaXRBbmQsIE9yaWdpbigpLAotICAgICAgICAgICAgbm90QSwK
LSAgICAgICAgICAgIGNzdEIpKTsKKyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJvb3QtPmFwcGVu
ZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKTsKKyAgICAgICAgVmFsdWUqIG1WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJl
Z1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAg
VmFsdWUqIGFtb3VudFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIGFtb3VudCk7CiAKLSAgICBDSEVDS19FUShjb21waWxlQW5kUnVuPGludDY0X3Q+
KHByb2MsIGEpLCAofmEgJiBiKSk7CisgICAgICAgIFZhbHVlKiBzaGlmdFZhbHVlID0gcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTaGwsIE9yaWdpbigpLCBtVmFsdWUsIGFtb3VudFZhbHVl
KTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICAgICAgcHJv
YywgUmV0dXJuLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIEJpdEFuZCwgT3JpZ2luKCksIG5WYWx1ZSwgc2hpZnRWYWx1ZSkpOworCisgICAgICAg
IGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKSB7
CisgICAgICAgICAgICBzdGQ6OnN0cmluZyByZWdleCgiLiphbmQuKiwuKiwuKiwuKmxzbCAjIik7
CisgICAgICAgICAgICByZWdleCArPSBzdGQ6OnRvX3N0cmluZyhhbW91bnQpICsgIi4qIjsKKyAg
ICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCByZWdleC5jX3N0cigpLCB0cnVl
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW52b2tlPGludDY0X3Q+KCpjb2RlLCBuLCBt
KTsKKyAgICB9OworCisgICAgZm9yIChhdXRvIG5PcGVyYW5kIDogaW50NjRPcGVyYW5kcygpKSB7
CisgICAgICAgIGZvciAoYXV0byBtT3BlcmFuZCA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAg
ICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBpbnQ2
NF90IG4gPSBuT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBpbnQ2NF90IG0gPSBtT3Bl
cmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUSh0ZXN0KG4sIG0sIGFtb3VudCks
IG4gJiAobSA8PCBhbW91bnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KIH0K
IAotc3RhdGljIHZvaWQgdGVzdEJpdEFuZE5vdEltbTMyKGludDMyX3QgYSwgaW50MzJfdCBiKQor
dm9pZCB0ZXN0QW5kUmlnaHRTaGlmdDY0KCkKIHsKLSAgICBQcm9jZWR1cmUgcHJvYzsKLSAgICBC
YXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOwotICAgIFZhbHVlKiBhcmdBID0gcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBUcnVuYywgT3JpZ2luKCksIHJvb3QtPmFwcGVuZE5l
dzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIw
KSk7Ci0gICAgVmFsdWUqIG5vdEEgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdFhv
ciwgT3JpZ2luKCksIGFyZ0EsIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9y
aWdpbigpLCAtMSkpOwotICAgIFZhbHVlKiBjc3RCID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIGIpOwotICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1
ZSgKLSAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKLSAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPigKLSAgICAgICAgICAgIHByb2MsIEJpdEFuZCwgT3JpZ2luKCksCisgICAgaWYg
KEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsK
KyAgICBWZWN0b3I8aW50MzJfdD4gYW1vdW50cyA9IHsgMSwgMzQsIDYzIH07CisKKyAgICAvLyBU
ZXN0IFBhdHRlcm46IGQgPSBuICYgKG0gPj4gYW1vdW50KQorICAgIGF1dG8gdGVzdCA9IFsmXSAo
aW50NjRfdCBuLCBpbnQ2NF90IG0sIGludDMyX3QgYW1vdW50KSAtPiBpbnQ2NF90IHsKKyAgICAg
ICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJs
b2NrKCk7CisKKyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVu
dFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAg
ICAgVmFsdWUqIG1WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgVmFsdWUqIGFtb3Vu
dFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGFt
b3VudCk7CisKKyAgICAgICAgVmFsdWUqIHNoaWZ0VmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFs
dWU+KHByb2MsIFNTaHIsIE9yaWdpbigpLCBtVmFsdWUsIGFtb3VudFZhbHVlKTsKKyAgICAgICAg
cm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBP
cmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdEFu
ZCwgT3JpZ2luKCksIG5WYWx1ZSwgc2hpZnRWYWx1ZSkpOworCisgICAgICAgIGF1dG8gY29kZSA9
IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAgICAg
ICBzdGQ6OnN0cmluZyByZWdleCgiLiphbmQuKiwuKiwuKiwuKmFzciAjIik7CisgICAgICAgICAg
ICByZWdleCArPSBzdGQ6OnRvX3N0cmluZyhhbW91bnQpICsgIi4qIjsKKyAgICAgICAgICAgIGNo
ZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCByZWdleC5jX3N0cigpLCB0cnVlKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gaW52b2tlPGludDY0X3Q+KCpjb2RlLCBuLCBtKTsKKyAgICB9Owor
CisgICAgZm9yIChhdXRvIG5PcGVyYW5kIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAgICAgIGZv
ciAoYXV0byBtT3BlcmFuZCA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChh
dXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBpbnQ2NF90IG4gPSBuT3Bl
cmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBpbnQ2NF90IG0gPSBtT3BlcmFuZC52YWx1ZTsK
KyAgICAgICAgICAgICAgICBDSEVDS19FUSh0ZXN0KG4sIG0sIGFtb3VudCksIG4gJiAobSA+PiBh
bW91bnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0
QW5kVW5zaWduZWRSaWdodFNoaWZ0NjQoKQoreworICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRlZmF1
bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisgICAgVmVjdG9yPHVpbnQzMl90
PiBhbW91bnRzID0geyAxLCAxNywgMzEgfTsKKworICAgIC8vIFRlc3QgUGF0dGVybjogZCA9IG4g
JiAobSA+PiBhbW91bnQpCisgICAgYXV0byB0ZXN0ID0gWyZdICh1aW50NjRfdCBuLCB1aW50NjRf
dCBtLCB1aW50MzJfdCBhbW91bnQpIC0+IHVpbnQ2NF90IHsKKyAgICAgICAgUHJvY2VkdXJlIHBy
b2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICAg
ICAgVmFsdWUqIG5WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgVmFsdWUqIG1WYWx1
ZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgVmFsdWUqIGFtb3VudFZhbHVlID0gcm9vdC0+
YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGFtb3VudCk7CisKKyAgICAg
ICAgVmFsdWUqIHNoaWZ0VmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFpTaHIs
IE9yaWdpbigpLCBtVmFsdWUsIGFtb3VudFZhbHVlKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3
Q29udHJvbFZhbHVlKAorICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgCisgICAg
ICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdEFuZCwgT3JpZ2luKCksIG5W
YWx1ZSwgc2hpZnRWYWx1ZSkpOworCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHBy
b2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyBy
ZWdleCgiLiphbmQuKiwuKiwuKiwuKmxzciAjIik7CisgICAgICAgICAgICByZWdleCArPSBzdGQ6
OnRvX3N0cmluZyhhbW91bnQpICsgIi4qIjsKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0
aW9uKCpjb2RlLCByZWdleC5jX3N0cigpLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gaW52b2tlPHVpbnQ2NF90PigqY29kZSwgbiwgbSk7CisgICAgfTsKKworICAgIGZvciAoYXV0
byBuT3BlcmFuZCA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbU9wZXJh
bmQgOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBh
bW91bnRzKSB7CisgICAgICAgICAgICAgICAgdWludDY0X3QgbiA9IG5PcGVyYW5kLnZhbHVlOwor
ICAgICAgICAgICAgICAgIHVpbnQ2NF90IG0gPSBtT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAg
ICAgICBDSEVDS19FUSh0ZXN0KG4sIG0sIGFtb3VudCksIG4gJiAobSA+PiBhbW91bnQpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0WG9yTGVmdFNoaWZ0
MzIoKQoreworICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQor
ICAgICAgICByZXR1cm47CisgICAgVmVjdG9yPGludDMyX3Q+IGFtb3VudHMgPSB7IDEsIDE3LCAz
MSB9OworCisgICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0gbiBeIChtIDw8IGFtb3VudCkKKyAgICBh
dXRvIHRlc3QgPSBbJl0gKGludDMyX3QgbiwgaW50MzJfdCBtLCBpbnQzMl90IGFtb3VudCkgLT4g
aW50MzJfdCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiBy
b290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBuVmFsdWUgPSByb290LT5h
cHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLCAKKyAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgIFZhbHVlKiBtVmFsdWUgPSByb290
LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLCAK
KyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmln
aW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSk7CisgICAgICAgIFZhbHVlKiBhbW91bnRWYWx1
ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBhbW91bnQp
OworCisgICAgICAgIFZhbHVlKiBzaGlmdFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihw
cm9jLCBTaGwsIE9yaWdpbigpLCBtVmFsdWUsIGFtb3VudFZhbHVlKTsKKyAgICAgICAgcm9vdC0+
YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4o
KSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdFhvciwgT3Jp
Z2luKCksIG5WYWx1ZSwgc2hpZnRWYWx1ZSkpOworCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBp
bGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAgICAgICBzdGQ6
OnN0cmluZyByZWdleCgiLiplb3IuKiwuKiwuKiwuKmxzbCAjIik7CisgICAgICAgICAgICByZWdl
eCArPSBzdGQ6OnRvX3N0cmluZyhhbW91bnQpICsgIi4qIjsKKyAgICAgICAgICAgIGNoZWNrVXNl
c0luc3RydWN0aW9uKCpjb2RlLCByZWdleC5jX3N0cigpLCB0cnVlKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gaW52b2tlPGludDMyX3Q+KCpjb2RlLCBuLCBtKTsKKyAgICB9OworCisgICAg
Zm9yIChhdXRvIG5PcGVyYW5kIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0
byBtT3BlcmFuZCA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFt
b3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBpbnQzMl90IG4gPSBuT3BlcmFuZC52
YWx1ZTsKKyAgICAgICAgICAgICAgICBpbnQzMl90IG0gPSBtT3BlcmFuZC52YWx1ZTsKKyAgICAg
ICAgICAgICAgICBDSEVDS19FUSh0ZXN0KG4sIG0sIGFtb3VudCksIG4gXiAobSA8PCBhbW91bnQp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0WG9yUmln
aHRTaGlmdDMyKCkKK3sKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgp
IDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIFZlY3RvcjxpbnQzMl90PiBhbW91bnRzID0geyAx
LCAxNywgMzEgfTsKKworICAgIC8vIFRlc3QgUGF0dGVybjogZCA9IG4gXiAobSA+PiBhbW91bnQp
CisgICAgYXV0byB0ZXN0ID0gWyZdIChpbnQzMl90IG4sIGludDMyX3QgbSwgaW50MzJfdCBhbW91
bnQpIC0+IGludDMyX3QgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNC
bG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgICAgICBWYWx1ZSogblZhbHVlID0g
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4o
KSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICBWYWx1ZSogbVZhbHVl
ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmln
aW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkpOworICAgICAgICBWYWx1ZSogYW1v
dW50VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
YW1vdW50KTsKKworICAgICAgICBWYWx1ZSogc2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4ocHJvYywgU1NociwgT3JpZ2luKCksIG1WYWx1ZSwgYW1vdW50VmFsdWUpOworICAgICAg
ICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4s
IE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0
WG9yLCBPcmlnaW4oKSwgblZhbHVlLCBzaGlmdFZhbHVlKSk7CisKKyAgICAgICAgYXV0byBjb2Rl
ID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkpIHsKKyAgICAgICAg
ICAgIHN0ZDo6c3RyaW5nIHJlZ2V4KCIuKmVvci4qLC4qLC4qLC4qYXNyICMiKTsKKyAgICAgICAg
ICAgIHJlZ2V4ICs9IHN0ZDo6dG9fc3RyaW5nKGFtb3VudCkgKyAiLioiOworICAgICAgICAgICAg
Y2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsIHJlZ2V4LmNfc3RyKCksIHRydWUpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBpbnZva2U8aW50MzJfdD4oKmNvZGUsIG4sIG0pOworICAgIH07
CisKKyAgICBmb3IgKGF1dG8gbk9wZXJhbmQgOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAg
Zm9yIChhdXRvIG1PcGVyYW5kIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgICAgICBmb3Ig
KGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAgICAgIGludDMyX3QgbiA9IG5P
cGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIGludDMyX3QgbSA9IG1PcGVyYW5kLnZhbHVl
OworICAgICAgICAgICAgICAgIENIRUNLX0VRKHRlc3QobiwgbSwgYW1vdW50KSwgbiBeIChtID4+
IGFtb3VudCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRl
c3RYb3JVbnNpZ25lZFJpZ2h0U2hpZnQzMigpCit7CisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVm
YXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8dWludDMy
X3Q+IGFtb3VudHMgPSB7IDEsIDE3LCAzMSB9OworCisgICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0g
biBeIChtID4+IGFtb3VudCkKKyAgICBhdXRvIHRlc3QgPSBbJl0gKHVpbnQzMl90IG4sIHVpbnQz
Ml90IG0sIHVpbnQzMl90IGFtb3VudCkgLT4gdWludDMyX3QgeworICAgICAgICBQcm9jZWR1cmUg
cHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAg
ICAgICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAg
IHByb2MsIFRydW5jLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJn
dW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOwor
ICAgICAgICBWYWx1ZSogbVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAg
ICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8
QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkp
OworICAgICAgICBWYWx1ZSogYW1vdW50VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgYW1vdW50KTsKKworICAgICAgICBWYWx1ZSogc2hpZnRWYWx1
ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgWlNociwgT3JpZ2luKCksIG1WYWx1ZSwg
YW1vdW50VmFsdWUpOworICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAg
ICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4ocHJvYywgQml0WG9yLCBPcmlnaW4oKSwgblZhbHVlLCBzaGlmdFZhbHVlKSk7
CisKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgICAgIGlmIChp
c0FSTTY0KCkpIHsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHJlZ2V4KCIuKmVvci4qLC4qLC4q
LC4qbHNyICMiKTsKKyAgICAgICAgICAgIHJlZ2V4ICs9IHN0ZDo6dG9fc3RyaW5nKGFtb3VudCkg
KyAiLioiOworICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsIHJlZ2V4LmNf
c3RyKCksIHRydWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBpbnZva2U8dWludDMyX3Q+
KCpjb2RlLCBuLCBtKTsKKyAgICB9OworCisgICAgZm9yIChhdXRvIG5PcGVyYW5kIDogaW50MzJP
cGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtT3BlcmFuZCA6IGludDMyT3BlcmFuZHMo
KSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAg
ICAgICAgICB1aW50MzJfdCBuID0gbk9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgdWlu
dDMyX3QgbSA9IG1PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIENIRUNLX0VRKHRlc3Qo
biwgbSwgYW1vdW50KSwgbiBeIChtID4+IGFtb3VudCkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorfQorCit2b2lkIHRlc3RYb3JMZWZ0U2hpZnQ2NCgpCit7CisgICAgaWYgKEpT
Qzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKyAg
ICBWZWN0b3I8aW50MzJfdD4gYW1vdW50cyA9IHsgMSwgMzQsIDYzIH07CisKKyAgICAvLyBUZXN0
IFBhdHRlcm46IGQgPSBuIF4gKG0gPDwgYW1vdW50KQorICAgIGF1dG8gdGVzdCA9IFsmXSAoaW50
NjRfdCBuLCBpbnQ2NF90IG0sIGludDMyX3QgYW1vdW50KSAtPiBpbnQ2NF90IHsKKyAgICAgICAg
UHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2Nr
KCk7CisKKyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJl
Z1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAg
VmFsdWUqIG1WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgVmFsdWUqIGFtb3VudFZh
bHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGFtb3Vu
dCk7CisKKyAgICAgICAgVmFsdWUqIHNoaWZ0VmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIFNobCwgT3JpZ2luKCksIG1WYWx1ZSwgYW1vdW50VmFsdWUpOworICAgICAgICByb290
LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdp
bigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0WG9yLCBP
cmlnaW4oKSwgblZhbHVlLCBzaGlmdFZhbHVlKSk7CisKKyAgICAgICAgYXV0byBjb2RlID0gY29t
cGlsZVByb2MocHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkpIHsKKyAgICAgICAgICAgIHN0
ZDo6c3RyaW5nIHJlZ2V4KCIuKmVvci4qLC4qLC4qLC4qbHNsICMiKTsKKyAgICAgICAgICAgIHJl
Z2V4ICs9IHN0ZDo6dG9fc3RyaW5nKGFtb3VudCkgKyAiLioiOworICAgICAgICAgICAgY2hlY2tV
c2VzSW5zdHJ1Y3Rpb24oKmNvZGUsIHJlZ2V4LmNfc3RyKCksIHRydWUpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBpbnZva2U8aW50NjRfdD4oKmNvZGUsIG4sIG0pOworICAgIH07CisKKyAg
ICBmb3IgKGF1dG8gbk9wZXJhbmQgOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChh
dXRvIG1PcGVyYW5kIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8g
YW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAgICAgIGludDY0X3QgbiA9IG5PcGVyYW5k
LnZhbHVlOworICAgICAgICAgICAgICAgIGludDY0X3QgbSA9IG1PcGVyYW5kLnZhbHVlOworICAg
ICAgICAgICAgICAgIENIRUNLX0VRKHRlc3QobiwgbSwgYW1vdW50KSwgbiBeIChtIDw8IGFtb3Vu
dCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RYb3JS
aWdodFNoaWZ0NjQoKQoreworICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVs
KCkgPCAyKQorICAgICAgICByZXR1cm47CisgICAgVmVjdG9yPGludDMyX3Q+IGFtb3VudHMgPSB7
IDEsIDM0LCA2MyB9OworCisgICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0gbiBeIChtID4+IGFtb3Vu
dCkKKyAgICBhdXRvIHRlc3QgPSBbJl0gKGludDY0X3QgbiwgaW50NjRfdCBtLCBpbnQzMl90IGFt
b3VudCkgLT4gaW50NjRfdCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNp
Y0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBuVmFsdWUg
PSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIFZhbHVlKiBtVmFsdWUgPSByb290LT5hcHBlbmRO
ZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BS
MSk7CisgICAgICAgIFZhbHVlKiBhbW91bnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMy
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBhbW91bnQpOworCisgICAgICAgIFZhbHVlKiBzaGlmdFZh
bHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTU2hyLCBPcmlnaW4oKSwgbVZhbHVl
LCBhbW91bnRWYWx1ZSk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAg
ICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9yaWdpbigpLCBuVmFsdWUsIHNoaWZ0VmFsdWUp
KTsKKworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYg
KGlzQVJNNjQoKSkgeworICAgICAgICAgICAgc3RkOjpzdHJpbmcgcmVnZXgoIi4qZW9yLiosLios
LiosLiphc3IgIyIpOworICAgICAgICAgICAgcmVnZXggKz0gc3RkOjp0b19zdHJpbmcoYW1vdW50
KSArICIuKiI7CisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgcmVnZXgu
Y19zdHIoKSwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQ2NF90
PigqY29kZSwgbiwgbSk7CisgICAgfTsKKworICAgIGZvciAoYXV0byBuT3BlcmFuZCA6IGludDY0
T3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbU9wZXJhbmQgOiBpbnQ2NE9wZXJhbmRz
KCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAg
ICAgICAgICAgaW50NjRfdCBuID0gbk9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgaW50
NjRfdCBtID0gbU9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEodGVzdChu
LCBtLCBhbW91bnQpLCBuIF4gKG0gPj4gYW1vdW50KSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdFhvclVuc2lnbmVkUmlnaHRTaGlmdDY0KCkKK3sKKyAg
ICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0
dXJuOworICAgIFZlY3Rvcjx1aW50MzJfdD4gYW1vdW50cyA9IHsgMSwgMTcsIDMxIH07CisKKyAg
ICAvLyBUZXN0IFBhdHRlcm46IGQgPSBuIF4gKG0gPj4gYW1vdW50KQorICAgIGF1dG8gdGVzdCA9
IFsmXSAodWludDY0X3QgbiwgdWludDY0X3QgbSwgdWludDMyX3QgYW1vdW50KSAtPiB1aW50NjRf
dCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0g
cHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBuVmFsdWUgPSByb290LT5hcHBlbmRO
ZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BS
MCk7CisgICAgICAgIFZhbHVlKiBtVmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIFZh
bHVlKiBhbW91bnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9y
aWdpbigpLCBhbW91bnQpOworCisgICAgICAgIFZhbHVlKiBzaGlmdFZhbHVlID0gcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBaU2hyLCBPcmlnaW4oKSwgbVZhbHVlLCBhbW91bnRWYWx1ZSk7
CisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgICAgIHByb2Ms
IFJldHVybiwgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihw
cm9jLCBCaXRYb3IsIE9yaWdpbigpLCBuVmFsdWUsIHNoaWZ0VmFsdWUpKTsKKworICAgICAgICBh
dXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkgewor
ICAgICAgICAgICAgc3RkOjpzdHJpbmcgcmVnZXgoIi4qZW9yLiosLiosLiosLipsc3IgIyIpOwor
ICAgICAgICAgICAgcmVnZXggKz0gc3RkOjp0b19zdHJpbmcoYW1vdW50KSArICIuKiI7CisgICAg
ICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgcmVnZXguY19zdHIoKSwgdHJ1ZSk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGludm9rZTx1aW50NjRfdD4oKmNvZGUsIG4sIG0p
OworICAgIH07CisKKyAgICBmb3IgKGF1dG8gbk9wZXJhbmQgOiBpbnQ2NE9wZXJhbmRzKCkpIHsK
KyAgICAgICAgZm9yIChhdXRvIG1PcGVyYW5kIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAgICAg
ICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAgICAgIHVpbnQ2
NF90IG4gPSBuT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBtID0gbU9w
ZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEodGVzdChuLCBtLCBhbW91bnQp
LCBuIF4gKG0gPj4gYW1vdW50KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9
CisKK3ZvaWQgdGVzdE9yTGVmdFNoaWZ0MzIoKQoreworICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRl
ZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisgICAgVmVjdG9yPGludDMy
X3Q+IGFtb3VudHMgPSB7IDEsIDE3LCAzMSB9OworCisgICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0g
biB8IChtIDw8IGFtb3VudCkKKyAgICBhdXRvIHRlc3QgPSBbJl0gKGludDMyX3QgbiwgaW50MzJf
dCBtLCBpbnQzMl90IGFtb3VudCkgLT4gaW50MzJfdCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9j
OworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAg
IFZhbHVlKiBuVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJv
YywgVHJ1bmMsIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVu
dFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAg
ICAgIFZhbHVlKiBtVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAg
cHJvYywgVHJ1bmMsIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1
bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSk7Cisg
ICAgICAgIFZhbHVlKiBhbW91bnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBhbW91bnQpOworCisgICAgICAgIFZhbHVlKiBzaGlmdFZhbHVlID0g
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTaGwsIE9yaWdpbigpLCBtVmFsdWUsIGFtb3Vu
dFZhbHVlKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICAg
ICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8
VmFsdWU+KHByb2MsIEJpdE9yLCBPcmlnaW4oKSwgblZhbHVlLCBzaGlmdFZhbHVlKSk7CisKKyAg
ICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0
KCkpIHsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHJlZ2V4KCIuKm9yci4qLC4qLC4qLC4qbHNs
ICMiKTsKKyAgICAgICAgICAgIHJlZ2V4ICs9IHN0ZDo6dG9fc3RyaW5nKGFtb3VudCkgKyAiLioi
OworICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsIHJlZ2V4LmNfc3RyKCks
IHRydWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBpbnZva2U8aW50MzJfdD4oKmNvZGUs
IG4sIG0pOworICAgIH07CisKKyAgICBmb3IgKGF1dG8gbk9wZXJhbmQgOiBpbnQzMk9wZXJhbmRz
KCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG1PcGVyYW5kIDogaW50MzJPcGVyYW5kcygpKSB7Cisg
ICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAgICAg
IGludDMyX3QgbiA9IG5PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIGludDMyX3QgbSA9
IG1PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIENIRUNLX0VRKHRlc3QobiwgbSwgYW1v
dW50KSwgbiB8IChtIDw8IGFtb3VudCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorfQorCit2b2lkIHRlc3RPclJpZ2h0U2hpZnQzMigpCit7CisgICAgaWYgKEpTQzo6T3B0aW9u
czo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8
aW50MzJfdD4gYW1vdW50cyA9IHsgMSwgMTcsIDMxIH07CisKKyAgICAvLyBUZXN0IFBhdHRlcm46
IGQgPSBuIHwgKG0gPj4gYW1vdW50KQorICAgIGF1dG8gdGVzdCA9IFsmXSAoaW50MzJfdCBuLCBp
bnQzMl90IG0sIGludDMyX3QgYW1vdW50KSAtPiBpbnQzMl90IHsKKyAgICAgICAgUHJvY2VkdXJl
IHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAg
ICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAg
ICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFy
Z3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsK
KyAgICAgICAgVmFsdWUqIG1WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAg
ICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEp
KTsKKyAgICAgICAgVmFsdWUqIGFtb3VudFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIGFtb3VudCk7CisKKyAgICAgICAgVmFsdWUqIHNoaWZ0VmFs
dWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNTaHIsIE9yaWdpbigpLCBtVmFsdWUs
IGFtb3VudFZhbHVlKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAg
ICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBl
bmROZXc8VmFsdWU+KHByb2MsIEJpdE9yLCBPcmlnaW4oKSwgblZhbHVlLCBzaGlmdFZhbHVlKSk7
CisKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgICAgIGlmIChp
c0FSTTY0KCkpIHsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHJlZ2V4KCIuKm9yci4qLC4qLC4q
LC4qYXNyICMiKTsKKyAgICAgICAgICAgIHJlZ2V4ICs9IHN0ZDo6dG9fc3RyaW5nKGFtb3VudCkg
KyAiLioiOworICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsIHJlZ2V4LmNf
c3RyKCksIHRydWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBpbnZva2U8aW50MzJfdD4o
KmNvZGUsIG4sIG0pOworICAgIH07CisKKyAgICBmb3IgKGF1dG8gbk9wZXJhbmQgOiBpbnQzMk9w
ZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG1PcGVyYW5kIDogaW50MzJPcGVyYW5kcygp
KSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAg
ICAgICAgIGludDMyX3QgbiA9IG5PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIGludDMy
X3QgbSA9IG1PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIENIRUNLX0VRKHRlc3Qobiwg
bSwgYW1vdW50KSwgbiB8IChtID4+IGFtb3VudCkpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorfQorCit2b2lkIHRlc3RPclVuc2lnbmVkUmlnaHRTaGlmdDMyKCkKK3sKKyAgICBp
ZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJu
OworICAgIFZlY3Rvcjx1aW50MzJfdD4gYW1vdW50cyA9IHsgMSwgMTcsIDMxIH07CisKKyAgICAv
LyBUZXN0IFBhdHRlcm46IGQgPSBuIHwgKG0gPj4gYW1vdW50KQorICAgIGF1dG8gdGVzdCA9IFsm
XSAodWludDMyX3QgbiwgdWludDMyX3QgbSwgdWludDMyX3QgYW1vdW50KSAtPiB1aW50MzJfdCB7
CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJv
Yy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBuVmFsdWUgPSByb290LT5hcHBlbmROZXc8
VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLCAKKyAgICAgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgIFZhbHVlKiBtVmFsdWUgPSByb290LT5hcHBlbmRO
ZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLCAKKyAgICAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIxKSk7CisgICAgICAgIFZhbHVlKiBhbW91bnRWYWx1ZSA9IHJvb3Qt
PmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBhbW91bnQpOworCisgICAg
ICAgIFZhbHVlKiBzaGlmdFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBaU2hy
LCBPcmlnaW4oKSwgbVZhbHVlLCBhbW91bnRWYWx1ZSk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5l
d0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksIAorICAg
ICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRPciwgT3JpZ2luKCksIG5W
YWx1ZSwgc2hpZnRWYWx1ZSkpOworCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHBy
b2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyBy
ZWdleCgiLipvcnIuKiwuKiwuKiwuKmxzciAjIik7CisgICAgICAgICAgICByZWdleCArPSBzdGQ6
OnRvX3N0cmluZyhhbW91bnQpICsgIi4qIjsKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0
aW9uKCpjb2RlLCByZWdleC5jX3N0cigpLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gaW52b2tlPHVpbnQzMl90PigqY29kZSwgbiwgbSk7CisgICAgfTsKKworICAgIGZvciAoYXV0
byBuT3BlcmFuZCA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbU9wZXJh
bmQgOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBh
bW91bnRzKSB7CisgICAgICAgICAgICAgICAgdWludDMyX3QgbiA9IG5PcGVyYW5kLnZhbHVlOwor
ICAgICAgICAgICAgICAgIHVpbnQzMl90IG0gPSBtT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAg
ICAgICBDSEVDS19FUSh0ZXN0KG4sIG0sIGFtb3VudCksIG4gfCAobSA+PiBhbW91bnQpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0T3JMZWZ0U2hpZnQ2
NCgpCit7CisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisg
ICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8aW50MzJfdD4gYW1vdW50cyA9IHsgMSwgMzQsIDYz
IH07CisKKyAgICAvLyBUZXN0IFBhdHRlcm46IGQgPSBuIHwgKG0gPDwgYW1vdW50KQorICAgIGF1
dG8gdGVzdCA9IFsmXSAoaW50NjRfdCBuLCBpbnQ2NF90IG0sIGludDMyX3QgYW1vdW50KSAtPiBp
bnQ2NF90IHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJv
b3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJvb3QtPmFw
cGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKKyAgICAgICAgVmFsdWUqIG1WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVu
dFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAg
ICAgVmFsdWUqIGFtb3VudFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIGFtb3VudCk7CisKKyAgICAgICAgVmFsdWUqIHNoaWZ0VmFsdWUgPSByb290
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNobCwgT3JpZ2luKCksIG1WYWx1ZSwgYW1vdW50VmFs
dWUpOworICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgICAgICBw
cm9jLCBSZXR1cm4sIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgQml0T3IsIE9yaWdpbigpLCBuVmFsdWUsIHNoaWZ0VmFsdWUpKTsKKworICAgICAg
ICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkg
eworICAgICAgICAgICAgc3RkOjpzdHJpbmcgcmVnZXgoIi4qb3JyLiosLiosLiosLipsc2wgIyIp
OworICAgICAgICAgICAgcmVnZXggKz0gc3RkOjp0b19zdHJpbmcoYW1vdW50KSArICIuKiI7Cisg
ICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgcmVnZXguY19zdHIoKSwgdHJ1
ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQ2NF90PigqY29kZSwgbiwg
bSk7CisgICAgfTsKKworICAgIGZvciAoYXV0byBuT3BlcmFuZCA6IGludDY0T3BlcmFuZHMoKSkg
eworICAgICAgICBmb3IgKGF1dG8gbU9wZXJhbmQgOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAg
ICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgaW50
NjRfdCBuID0gbk9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgaW50NjRfdCBtID0gbU9w
ZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEodGVzdChuLCBtLCBhbW91bnQp
LCBuIHwgKG0gPDwgYW1vdW50KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9
CisKK3ZvaWQgdGVzdE9yUmlnaHRTaGlmdDY0KCkKK3sKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpk
ZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIFZlY3RvcjxpbnQz
Ml90PiBhbW91bnRzID0geyAxLCAzNCwgNjMgfTsKKworICAgIC8vIFRlc3QgUGF0dGVybjogZCA9
IG4gfCAobSA+PiBhbW91bnQpCisgICAgYXV0byB0ZXN0ID0gWyZdIChpbnQ2NF90IG4sIGludDY0
X3QgbSwgaW50MzJfdCBhbW91bnQpIC0+IGludDY0X3QgeworICAgICAgICBQcm9jZWR1cmUgcHJv
YzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgICAg
ICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBWYWx1ZSogbVZhbHVl
ID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBWYWx1ZSogYW1vdW50VmFsdWUgPSByb290LT5h
cHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYW1vdW50KTsKKworICAgICAg
ICBWYWx1ZSogc2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU1Nociwg
T3JpZ2luKCksIG1WYWx1ZSwgYW1vdW50VmFsdWUpOworICAgICAgICByb290LT5hcHBlbmROZXdD
b250cm9sVmFsdWUoCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCAKKyAgICAg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0T3IsIE9yaWdpbigpLCBuVmFs
dWUsIHNoaWZ0VmFsdWUpKTsKKworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9j
KTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkgeworICAgICAgICAgICAgc3RkOjpzdHJpbmcgcmVn
ZXgoIi4qb3JyLiosLiosLiosLiphc3IgIyIpOworICAgICAgICAgICAgcmVnZXggKz0gc3RkOjp0
b19zdHJpbmcoYW1vdW50KSArICIuKiI7CisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlv
bigqY29kZSwgcmVnZXguY19zdHIoKSwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IGludm9rZTxpbnQ2NF90PigqY29kZSwgbiwgbSk7CisgICAgfTsKKworICAgIGZvciAoYXV0byBu
T3BlcmFuZCA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbU9wZXJhbmQg
OiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91
bnRzKSB7CisgICAgICAgICAgICAgICAgaW50NjRfdCBuID0gbk9wZXJhbmQudmFsdWU7CisgICAg
ICAgICAgICAgICAgaW50NjRfdCBtID0gbU9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAg
Q0hFQ0tfRVEodGVzdChuLCBtLCBhbW91bnQpLCBuIHwgKG0gPj4gYW1vdW50KSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdE9yVW5zaWduZWRSaWdodFNo
aWZ0NjQoKQoreworICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAy
KQorICAgICAgICByZXR1cm47CisgICAgVmVjdG9yPHVpbnQzMl90PiBhbW91bnRzID0geyAxLCAx
NywgMzEgfTsKKworICAgIC8vIFRlc3QgUGF0dGVybjogZCA9IG4gfCAobSA+PiBhbW91bnQpCisg
ICAgYXV0byB0ZXN0ID0gWyZdICh1aW50NjRfdCBuLCB1aW50NjRfdCBtLCB1aW50MzJfdCBhbW91
bnQpIC0+IHVpbnQ2NF90IHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2lj
QmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9
IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgVmFsdWUqIG1WYWx1ZSA9IHJvb3QtPmFwcGVuZE5l
dzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIx
KTsKKyAgICAgICAgVmFsdWUqIGFtb3VudFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIGFtb3VudCk7CisKKyAgICAgICAgVmFsdWUqIHNoaWZ0VmFs
dWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFpTaHIsIE9yaWdpbigpLCBtVmFsdWUs
IGFtb3VudFZhbHVlKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAg
ICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBl
bmROZXc8VmFsdWU+KHByb2MsIEJpdE9yLCBPcmlnaW4oKSwgblZhbHVlLCBzaGlmdFZhbHVlKSk7
CisKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgICAgIGlmIChp
c0FSTTY0KCkpIHsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHJlZ2V4KCIuKm9yci4qLC4qLC4q
LC4qbHNyICMiKTsKKyAgICAgICAgICAgIHJlZ2V4ICs9IHN0ZDo6dG9fc3RyaW5nKGFtb3VudCkg
KyAiLioiOworICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsIHJlZ2V4LmNf
c3RyKCksIHRydWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBpbnZva2U8dWludDY0X3Q+
KCpjb2RlLCBuLCBtKTsKKyAgICB9OworCisgICAgZm9yIChhdXRvIG5PcGVyYW5kIDogaW50NjRP
cGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtT3BlcmFuZCA6IGludDY0T3BlcmFuZHMo
KSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAg
ICAgICAgICB1aW50NjRfdCBuID0gbk9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgdWlu
dDY0X3QgbSA9IG1PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIENIRUNLX0VRKHRlc3Qo
biwgbSwgYW1vdW50KSwgbiB8IChtID4+IGFtb3VudCkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorfQorCit2b2lkIHRlc3RCaXRBbmRaZXJvU2hpZnRSaWdodEFyZ0ltbU1hc2sz
MigpCit7CisgICAgLy8gVHVybiB0aGlzOiAodG1wID4+IGltbSkgJiBtYXNrIAorICAgIC8vIElu
dG8gdGhpczogdG1wID4+IGltbQorICAgIHVpbnQzMl90IHRtcCA9IDB4ZmZmZmZmZmY7CisgICAg
VmVjdG9yPHVpbnQzMl90PiBpbW1zID0geyA0LCAyOCwgMzEgfTsKKyAgICBWZWN0b3I8dWludDMy
X3Q+IG1hc2tzID0geyAweDBmZmZmZmZmLCAweGYsIDB4ZmZmZiB9OworCisgICAgYXV0byB0ZXN0
ID0gWyZdICh1aW50MzJfdCBpbW0sIHVpbnQzMl90IG1hc2spIHsKKyAgICAgICAgUHJvY2VkdXJl
IHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAg
ICAgICAgVmFsdWUqIHRtcFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAg
ICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8
QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkp
OworICAgICAgICBWYWx1ZSogaW1tVmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgaW1tKTsKKyAgICAgICAgVmFsdWUqIGxlZnRWYWx1ZSA9IHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgWlNociwgT3JpZ2luKCksIHRtcFZhbHVlLCBpbW1WYWx1
ZSk7CisgICAgICAgIFZhbHVlKiByaWdodFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIG1hc2spOworICAgICAgICByb290LT5hcHBlbmROZXdDb250
cm9sVmFsdWUoCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRBbmQsIE9yaWdpbigpLCBsZWZ0VmFs
dWUsIHJpZ2h0VmFsdWUpKTsKKworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9j
KTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0
aW9uKCpjb2RlLCAibHNyIik7CisgICAgICAgIHVpbnQzMl90IGxocyA9IGludm9rZTx1aW50MzJf
dD4oKmNvZGUsIHRtcCk7CisgICAgICAgIHVpbnQzMl90IHJocyA9IHRtcCA+PiBpbW07CisgICAg
ICAgIENIRUNLKGxocyA9PSByaHMpOworICAgIH07CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGltbXMuc2l6ZSgpOyArK2kpCisgICAgICAgIHRlc3QoaW1tcy5hdChpKSwgbWFza3MuYXQo
aSkpOworfQorCit2b2lkIHRlc3RCaXRBbmRaZXJvU2hpZnRSaWdodEFyZ0ltbU1hc2s2NCgpCit7
CisgICAgLy8gVHVybiB0aGlzOiAodG1wID4+IGltbSkgJiBtYXNrIAorICAgIC8vIEludG8gdGhp
czogdG1wID4+IGltbQorICAgIHVpbnQ2NF90IHRtcCA9IDB4ZmZmZmZmZmZmZmZmZmZmZjsKKyAg
ICBWZWN0b3I8dWludDY0X3Q+IGltbXMgPSB7IDQsIDYwLCA2MyB9OworICAgIFZlY3Rvcjx1aW50
NjRfdD4gbWFza3MgPSB7IDB4MGZmZmZmZmZmZmZmZmZmZiwgMHhmLCAweGZmZmYgfTsKKworICAg
IGF1dG8gdGVzdCA9IFsmXSAodWludDY0X3QgaW1tLCB1aW50NjRfdCBtYXNrKSB7CisgICAgICAg
IFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9j
aygpOworCisgICAgICAgIFZhbHVlKiB0bXBWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVu
dFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAg
ICAgVmFsdWUqIGltbVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIGltbSk7CisgICAgICAgIFZhbHVlKiBsZWZ0VmFsdWUgPSByb290LT5hcHBlbmRO
ZXc8VmFsdWU+KHByb2MsIFpTaHIsIE9yaWdpbigpLCB0bXBWYWx1ZSwgaW1tVmFsdWUpOworICAg
ICAgICBWYWx1ZSogcmlnaHRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBtYXNrKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVl
KAorICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgbGVmdFZhbHVlLCByaWdo
dFZhbHVlKSk7CisKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAg
ICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29k
ZSwgImxzciIpOworICAgICAgICB1aW50NjRfdCBsaHMgPSBpbnZva2U8dWludDY0X3Q+KCpjb2Rl
LCB0bXApOworICAgICAgICB1aW50NjRfdCByaHMgPSB0bXAgPj4gaW1tOworICAgICAgICBDSEVD
SyhsaHMgPT0gcmhzKTsKKyAgICB9OworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbW1z
LnNpemUoKTsgKytpKQorICAgICAgICB0ZXN0KGltbXMuYXQoaSksIG1hc2tzLmF0KGkpKTsKK30K
Kworc3RhdGljIHZvaWQgdGVzdEJpdEFuZEFyZ3MoaW50NjRfdCBhLCBpbnQ2NF90IGIpCit7Cisg
ICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2so
KTsKKyAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgIHByb2MsIFJldHVy
biwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAg
ICBwcm9jLCBCaXRBbmQsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFy
Z3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApLAor
ICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKSk7CisKKyAgICBDSEVDSyhjb21waWxlQW5kUnVu
PGludDY0X3Q+KHByb2MsIGEsIGIpID09IChhICYgYikpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0
Qml0QW5kU2FtZUFyZyhpbnQ2NF90IGEpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFz
aWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSogYXJndW1lbnQgPSBy
b290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86
OmFyZ3VtZW50R1BSMCk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAg
ICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+
KAorICAgICAgICAgICAgcHJvYywgQml0QW5kLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIGFyZ3Vt
ZW50LAorICAgICAgICAgICAgYXJndW1lbnQpKTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48
aW50NjRfdD4ocHJvYywgYSkgPT0gYSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RCaXRBbmROb3RO
b3QoaW50NjRfdCBhLCBpbnQ2NF90IGIpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFz
aWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSogYXJnQSA9IHJvb3Qt
PmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIwKTsKKyAgICBWYWx1ZSogYXJnQiA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJl
Z1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICBWYWx1
ZSogbm90QSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0WG9yLCBPcmlnaW4oKSwg
YXJnQSwgcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIC0xKSk7
CisgICAgVmFsdWUqIG5vdEIgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdFhvciwg
T3JpZ2luKCksIGFyZ0IsIHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdp
bigpLCAtMSkpOworICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgcHJv
YywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAg
ICAgICAgICAgIHByb2MsIEJpdEFuZCwgT3JpZ2luKCksCisgICAgICAgICAgICBub3RBLAorICAg
ICAgICAgICAgbm90QikpOworCisgICAgQ0hFQ0tfRVEoY29tcGlsZUFuZFJ1bjxpbnQ2NF90Pihw
cm9jLCBhLCBiKSwgKH5hICYgfmIpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEJpdEFuZE5vdE5v
dDMyKGludDMyX3QgYSwgaW50MzJfdCBiKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJh
c2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIGFyZ0EgPSByb290
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFRydW5jLCBPcmlnaW4oKSwgcm9vdC0+YXBwZW5kTmV3
PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
KTsKKyAgICBWYWx1ZSogYXJnQiA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgVHJ1bmMs
IE9yaWdpbigpLCByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkpOworICAgIFZhbHVlKiBub3RBID0gcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9yaWdpbigpLCBhcmdBLCByb290LT5hcHBlbmRO
ZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgLTEpKTsKKyAgICBWYWx1ZSogbm90QiA9
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0WG9yLCBPcmlnaW4oKSwgYXJnQiwgcm9v
dC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIC0xKSk7CisgICAgcm9v
dC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigp
LAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgQml0
QW5kLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIG5vdEEsCisgICAgICAgICAgICBub3RCKSk7CisK
KyAgICBDSEVDS19FUShjb21waWxlQW5kUnVuPGludDMyX3Q+KHByb2MsIGEsIGIpLCAofmEgJiB+
YikpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0Qml0QW5kTm90SW1tKGludDY0X3QgYSwgaW50NjRf
dCBiKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9j
LmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIGFyZ0EgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRS
ZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgVmFs
dWUqIG5vdEEgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCks
IGFyZ0EsIHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCAtMSkp
OworICAgIFZhbHVlKiBjc3RCID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIGIpOworICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAg
cHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigK
KyAgICAgICAgICAgIHByb2MsIEJpdEFuZCwgT3JpZ2luKCksCisgICAgICAgICAgICBub3RBLAor
ICAgICAgICAgICAgY3N0QikpOworCisgICAgQ0hFQ0tfRVEoY29tcGlsZUFuZFJ1bjxpbnQ2NF90
Pihwcm9jLCBhKSwgKH5hICYgYikpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0Qml0QW5kTm90SW1t
MzIoaW50MzJfdCBhLCBpbnQzMl90IGIpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFz
aWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSogYXJnQSA9IHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgVHJ1bmMsIE9yaWdpbigpLCByb290LT5hcHBlbmROZXc8
QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkp
OworICAgIFZhbHVlKiBub3RBID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3Is
IE9yaWdpbigpLCBhcmdBLCByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmln
aW4oKSwgLTEpKTsKKyAgICBWYWx1ZSogY3N0QiA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBiKTsKKyAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUo
CisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5l
dzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBCaXRBbmQsIE9yaWdpbigpLAogICAgICAgICAg
ICAgbm90QSwKICAgICAgICAgICAgIGNzdEIpKTsKIApAQCAtNjM4OSw2ICs3MTc5LDI4IEBAIHZv
aWQgYWRkQml0VGVzdHMoY29uc3QgY2hhciogZmlsdGVyLCBEZXF1ZTxSZWZQdHI8U2hhcmVkVGFz
azx2b2lkKCk+Pj4mIHRhc2tzKQogICAgIFJVTih0ZXN0U3ViV2l0aExlZnRTaGlmdDY0KCkpOwog
ICAgIFJVTih0ZXN0U3ViV2l0aFJpZ2h0U2hpZnQ2NCgpKTsKICAgICBSVU4odGVzdFN1YldpdGhV
bnNpZ25lZFJpZ2h0U2hpZnQ2NCgpKTsKKworICAgIFJVTih0ZXN0QW5kTGVmdFNoaWZ0MzIoKSk7
CisgICAgUlVOKHRlc3RBbmRSaWdodFNoaWZ0MzIoKSk7CisgICAgUlVOKHRlc3RBbmRVbnNpZ25l
ZFJpZ2h0U2hpZnQzMigpKTsKKyAgICBSVU4odGVzdEFuZExlZnRTaGlmdDY0KCkpOworICAgIFJV
Tih0ZXN0QW5kUmlnaHRTaGlmdDY0KCkpOworICAgIFJVTih0ZXN0QW5kVW5zaWduZWRSaWdodFNo
aWZ0NjQoKSk7CisKKyAgICBSVU4odGVzdFhvckxlZnRTaGlmdDMyKCkpOworICAgIFJVTih0ZXN0
WG9yUmlnaHRTaGlmdDMyKCkpOworICAgIFJVTih0ZXN0WG9yVW5zaWduZWRSaWdodFNoaWZ0MzIo
KSk7CisgICAgUlVOKHRlc3RYb3JMZWZ0U2hpZnQ2NCgpKTsKKyAgICBSVU4odGVzdFhvclJpZ2h0
U2hpZnQ2NCgpKTsKKyAgICBSVU4odGVzdFhvclVuc2lnbmVkUmlnaHRTaGlmdDY0KCkpOworCisg
ICAgUlVOKHRlc3RPckxlZnRTaGlmdDMyKCkpOworICAgIFJVTih0ZXN0T3JSaWdodFNoaWZ0MzIo
KSk7CisgICAgUlVOKHRlc3RPclVuc2lnbmVkUmlnaHRTaGlmdDMyKCkpOworICAgIFJVTih0ZXN0
T3JMZWZ0U2hpZnQ2NCgpKTsKKyAgICBSVU4odGVzdE9yUmlnaHRTaGlmdDY0KCkpOworICAgIFJV
Tih0ZXN0T3JVbnNpZ25lZFJpZ2h0U2hpZnQ2NCgpKTsKKwogICAgIFJVTih0ZXN0Qml0QW5kWmVy
b1NoaWZ0UmlnaHRBcmdJbW1NYXNrMzIoKSk7CiAgICAgUlVOKHRlc3RCaXRBbmRaZXJvU2hpZnRS
aWdodEFyZ0ltbU1hc2s2NCgpKTsKICAgICBSVU4odGVzdEJpdEFuZEFyZ3MoNDMsIDQzKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNwcAppbmRleCBiODliMDE5ZmQ4YmY1ZjA3MTJm
NDY2ODY1MGY2MWNkZjgxZGE0YzgzLi41MDVmZDYzOTAzY2U4ZjIyNDJkZTYwMzYzMjg5MjkwY2E4
ODE5YTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMy5jcHAKQEAgLTM3MzAsMTAg
KzM3MzAsOCBAQCB2b2lkIGFkZEFyZ1Rlc3RzKGNvbnN0IGNoYXIqIGZpbHRlciwgRGVxdWU8UmVm
UHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4+JiB0YXNrcykKICAgICBSVU4odGVzdE11bEFyZ3MzMigx
LCAyKSk7CiAgICAgUlVOKHRlc3RNdWxBcmdzMzIoMHhGRkZGRkZGRiwgMHhGRkZGRkZGRikpOwog
ICAgIFJVTih0ZXN0TXVsQXJnczMyKDB4RkZGRkZGRkUsIDB4RkZGRkZGRkYpKTsKLSAgICBSVU4o
dGVzdE11bEFyZ3MzMlNpZ25FeHRlbmQoMSwgMSkpOwotICAgIFJVTih0ZXN0TXVsQXJnczMyU2ln
bkV4dGVuZCgxLCAyKSk7Ci0gICAgUlVOKHRlc3RNdWxBcmdzMzJTaWduRXh0ZW5kKDB4RkZGRkZG
RkYsIDB4RkZGRkZGRkYpKTsKLSAgICBSVU4odGVzdE11bEFyZ3MzMlNpZ25FeHRlbmQoMHhGRkZG
RkZGRSwgMHhGRkZGRkZGRikpOworICAgIFJVTih0ZXN0TXVsQXJnczMyU2lnbkV4dGVuZCgpKTsK
KyAgICBSVU4odGVzdE11bEFyZ3MzMlplcm9FeHRlbmQoKSk7CiAgICAgUlVOKHRlc3RNdWxMb2Fk
VHdpY2UoKSk7CiAgICAgUlVOKHRlc3RNdWxBZGRBcmdzTGVmdCgpKTsKICAgICBSVU4odGVzdE11
bEFkZEFyZ3NSaWdodCgpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434698</attachid>
            <date>2021-07-31 07:53:08 -0700</date>
            <delta_ts>2021-07-31 20:54:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228675-20210731095307.patch</filename>
            <type>text/plain</type>
            <size>85893</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwNDk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
N2M5NTU4ZWFiZGIxNjY0YzU2YWQyZGU0YWQzNGQ3ZDA3Y2UxNzI1Li5mYjMzZDVkNmE3ZmVlZGI0
MjljNDRkMzUwMjc0YzY3MGFmZWE2MWViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxODUgQEAKKzIwMjEtMDctMzEgIFlpamlhIEh1YW5nICA8eWlqaWFfaHVhbmdAYXBwbGUu
Y29tPgorCisgICAgICAgIEFkZCBuZXcgcGF0dGVybnMgdG8gaW5zdHJ1Y3Rpb24gc2VsZWN0b3Ig
dG8gdXRpbGl6ZSBBTkQvRU9SL09SUi13aXRoLXNoaWZ0IGFuZCBVTVVMTCBzdXBwb3J0ZWQgYnkg
QVJNNjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
ODY3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJp
dHdpc2UgQU5EIChzaGlmdGVkIHJlZ2lzdGVyKSBwZXJmb3JtcyBhIGJpdHdpc2UgQU5EIG9mIGEg
cmVnaXN0ZXIgdmFsdWUgYW5kIGFuIG9wdGlvbmFsbHktc2hpZnRlZCAKKyAgICAgICAgcmVnaXN0
ZXIgdmFsdWUsIGFuZCB3cml0ZXMgdGhlIHJlc3VsdCB0byB0aGUgZGVzdGluYXRpb24gcmVnaXN0
ZXIuCisKKyAgICAgICAgICAgIGFuZCB3ZCB3biB3bSBTaGlmdFR5cGUgI2Ftb3VudAorCisgICAg
ICAgIFRoZSBlcXVpdmFsZW50IHBhdHRlcm4gaXM6IG4gJiAobSBTaGlmdFR5cGUgYW1vdW50KQor
CisgICAgICAgIEdpdmVuIEIzIElSOiAKKyAgICAgICAgSW50IEAwID0gQXJndW1lbnRSZWcoJXgw
KQorICAgICAgICBJbnQgQDEgPSBBcmd1bWVudFJlZygleDEpCisgICAgICAgIEludCBAMiA9IENv
bnN0MzIoNjMpCisgICAgICAgIEludCBAMyA9IFNobChAMSwgJDYzKEAyKSkKKyAgICAgICAgSW50
IEA0ID0gQml0QW5kKEAwLCBAMykKKyAgICAgICAgVm9pZEA1ID0gUmV0dXJuKEA0LCBUZXJtaW5h
bCkKKworICAgICAgICAvLyBPbGQgb3B0aW1pemVkIEFJUgorICAgICAgICBMc2hpZnQgJXgxLCAk
NjMsICV4MSwgQDMKKyAgICAgICAgQW5kICAgICV4MCwgJXgxLCAleDAsIEA0CisgICAgICAgIFJl
dCAgICAleDAsICAgICAgICAgICBANQorCisgICAgICAgIC8vIE5ldyBvcHRpbWl6ZWQgQUlSCisg
ICAgICAgIEFuZExlZnRTaGlmdCAleDAsICV4MSwgJDYzLCAleDAsIEA0CisgICAgICAgIFJldCAg
ICAgICAgICAleDAsICAgICAgICAgICAgICAgIEA1CisKKyAgICAgICAgQml0d2lzZSBFeGNsdXNp
dmUgT1IgKHNoaWZ0ZWQgcmVnaXN0ZXIpIHBlcmZvcm1zIGEgYml0d2lzZSBFeGNsdXNpdmUgT1Ig
b2YgYSByZWdpc3RlciB2YWx1ZSBhbmQgYW4gCisgICAgICAgIG9wdGlvbmFsbHktc2hpZnRlZCBy
ZWdpc3RlciB2YWx1ZSwgYW5kIHdyaXRlcyB0aGUgcmVzdWx0IHRvIHRoZSBkZXN0aW5hdGlvbiBy
ZWdpc3Rlci4KKworICAgICAgICAgICAgZW9yIHdkIHduIHdtIFNoaWZ0VHlwZSAjYW1vdW50CisK
KyAgICAgICAgVGhlIGVxdWl2YWxlbnQgcGF0dGVybiBpczogbiBeIChtIFNoaWZ0VHlwZSBhbW91
bnQpCisKKyAgICAgICAgR2l2ZW4gQjMgSVI6CisgICAgICAgIEludCBAMCA9IEFyZ3VtZW50UmVn
KCV4MCkKKyAgICAgICAgSW50IEAxID0gQXJndW1lbnRSZWcoJXgxKQorICAgICAgICBJbnQgQDIg
PSBDb25zdDMyKDYzKQorICAgICAgICBJbnQgQDMgPSBTaGwoQDEsICQ2MyhAMikpCisgICAgICAg
IEludCBANCA9IEJpdFhvcihAMCwgQDMpCisgICAgICAgIFZvaWRANSA9IFJldHVybihANCwgVGVy
bWluYWwpCisKKyAgICAgICAgLy8gT2xkIG9wdGltaXplZCBBSVIKKyAgICAgICAgTHNoaWZ0ICV4
MSwgJDYzLCAleDEsIEAzCisgICAgICAgIFhvciAgICAleDAsICV4MSwgJXgwLCBANAorICAgICAg
ICBSZXQgICAgJXgwLCAgICAgICAgICAgQDUKKworICAgICAgICAvLyBOZXcgb3B0aW1pemVkIEFJ
UiAKKyAgICAgICAgWG9yTGVmdFNoaWZ0ICV4MCwgJXgxLCAkNjMsICV4MCwgQDQKKyAgICAgICAg
UmV0ICAgICAgICAgICV4MCwgICAgICAgICAgICAgICAgQDUKKworICAgICAgICBCaXR3aXNlIE9S
IChzaGlmdGVkIHJlZ2lzdGVyKSBwZXJmb3JtcyBhIGJpdHdpc2UgKGluY2x1c2l2ZSkgT1Igb2Yg
YSByZWdpc3RlciB2YWx1ZSBhbmQgYW4gCisgICAgICAgIG9wdGlvbmFsbHktc2hpZnRlZCByZWdp
c3RlciB2YWx1ZSwgYW5kIHdyaXRlcyB0aGUgcmVzdWx0IHRvIHRoZSBkZXN0aW5hdGlvbiByZWdp
c3Rlci4KKworICAgICAgICAgICAgb3JyIHdkIHduIHdtIFNoaWZ0VHlwZSAjYW1vdW50CisKKyAg
ICAgICAgVGhlIGVxdWl2YWxlbnQgcGF0dGVybiBpczogbiB8IChtIFNoaWZ0VHlwZSBhbW91bnQp
CisKKyAgICAgICAgR2l2ZW4gQjMgSVI6CisgICAgICAgIEludCBAMCA9IEFyZ3VtZW50UmVnKCV4
MCkKKyAgICAgICAgSW50IEAxID0gQXJndW1lbnRSZWcoJXgxKQorICAgICAgICBJbnQgQDIgPSBD
b25zdDMyKDYzKQorICAgICAgICBJbnQgQDMgPSBTaGwoQDEsICQ2MyhAMikpCisgICAgICAgIElu
dCBANCA9IEJpdE9yKEAwLCBAMykKKyAgICAgICAgVm9pZEA1ID0gUmV0dXJuKEA0LCBUZXJtaW5h
bCkKKworICAgICAgICAvLyBPbGQgb3B0aW1pemVkIEFJUgorICAgICAgICBMc2hpZnQgJXgxLCAk
NjMsICV4MSwgQDMKKyAgICAgICAgT3IgICAgICV4MCwgJXgxLCAleDAsIEA0CisgICAgICAgIFJl
dCAgICAleDAsICAgICAgICAgICBANQorCisgICAgICAgIC8vIE5ldyBvcHRpbWl6ZWQgQUlSIAor
ICAgICAgICBPckxlZnRTaGlmdCAleDAsICV4MSwgJDYzLCAleDAsIEA0CisgICAgICAgIFJldCAg
ICAgICAgICV4MCwgICAgICAgICAgICAgICAgQDUKKworICAgICAgICBVbnNpZ25lZCBNdWx0aXBs
eSBMb25nIG11bHRpcGxpZXMgdHdvIDMyLWJpdCByZWdpc3RlciB2YWx1ZXMsIGFuZCB3cml0ZXMg
dGhlIHJlc3VsdCB0byB0aGUgZGVzdGluYXRpb24gCisgICAgICAgIHJlZ2lzdGVyLiBUaGlzIGlu
c3RydWN0aW9uIGlzIGFuIGFsaWFzIG9mIHRoZSBVTUFEREwgaW5zdHJ1Y3Rpb24uCisKKyAgICAg
ICAgICAgIHVtdWxsIHhkIHduIHdtCisKKyAgICAgICAgVGhlIGVxdWl2YWxlbnQgcGF0dGVybiBp
czogZCA9IFpFeHQzMihuKSAqIFpFeHQzMihtKQorCisgICAgICAgIEdpdmVuIEIzIElSOgorICAg
ICAgICBJbnQgQDAgPSBBcmd1bWVudFJlZygleDApCisgICAgICAgIEludCBAMSA9IFRydW5jKEAw
KQorICAgICAgICBJbnQgQDIgPSBBcmd1bWVudFJlZygleDEpCisgICAgICAgIEludCBAMyA9IFRy
dW5jKEAyKQorICAgICAgICBJbnQgQDQgPSBaRXh0MzIoQDEpCisgICAgICAgIEludCBANSA9IFpF
eHQzMihAMykKKyAgICAgICAgSW50IEA2ID0gTXVsKEA0LCBANSkKKyAgICAgICAgVm9pZEA3ID0g
UmV0dXJuKEA2LCBUZXJtaW5hbCkKKworICAgICAgICAvLyBPbGQgb3B0aW1pemVkIEFJUgorICAg
ICAgICBNb3ZlICAgJXgwLCAleDAsICAgICAgQDQKKyAgICAgICAgTW92ZSAgICV4MSwgJXgxLCAg
ICAgIEA1CisgICAgICAgIE11bCAgICAleDAsICV4MSwgJXgwLCBANgorICAgICAgICBSZXQgICAg
JXgwLCAgICAgICAgICAgQDcKKworICAgICAgICAvLyBOZXcgb3B0aW1pemVkIEFJUiAKKyAgICAg
ICAgTXVsdGlwbHlaZXJvRXh0ZW5kICV4MCwgJXgxLCAleDAsIEA2CisgICAgICAgIFJldCAgICAg
ICAgICAgICAgICAleDAsICAgICAgICAgICBANworCisgICAgICAgICogYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyQVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6YW5k
TGVmdFNoaWZ0MzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjphbmRSaWdo
dFNoaWZ0MzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjphbmRVbnNpZ25l
ZFJpZ2h0U2hpZnQzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OmFuZExl
ZnRTaGlmdDY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6YW5kUmlnaHRT
aGlmdDY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6YW5kVW5zaWduZWRS
aWdodFNoaWZ0NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojp4b3JMZWZ0
U2hpZnQzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnhvclJpZ2h0U2hp
ZnQzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnhvclVuc2lnbmVkUmln
aHRTaGlmdDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6eG9yTGVmdFNo
aWZ0NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojp4b3JSaWdodFNoaWZ0
NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojp4b3JVbnNpZ25lZFJpZ2h0
U2hpZnQ2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Om9yTGVmdFNoaWZ0
MzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpvclJpZ2h0U2hpZnQzMik6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Om9yVW5zaWduZWRSaWdodFNoaWZ0
MzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpvckxlZnRTaGlmdDY0KToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6b3JSaWdodFNoaWZ0NjQpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpvclVuc2lnbmVkUmlnaHRTaGlmdDY0KToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6bXVsdGlwbHlaZXJvRXh0ZW5kMzIp
OgorICAgICAgICAqIGFzc2VtYmxlci90ZXN0bWFzbS5jcHA6CisgICAgICAgIChKU0M6OnRlc3RN
dWx0aXBseVplcm9FeHRlbmQzMik6CisgICAgICAgIChKU0M6OnRlc3RBbmRMZWZ0U2hpZnQzMik6
CisgICAgICAgIChKU0M6OnRlc3RBbmRSaWdodFNoaWZ0MzIpOgorICAgICAgICAoSlNDOjp0ZXN0
QW5kVW5zaWduZWRSaWdodFNoaWZ0MzIpOgorICAgICAgICAoSlNDOjp0ZXN0QW5kTGVmdFNoaWZ0
NjQpOgorICAgICAgICAoSlNDOjp0ZXN0QW5kUmlnaHRTaGlmdDY0KToKKyAgICAgICAgKEpTQzo6
dGVzdEFuZFVuc2lnbmVkUmlnaHRTaGlmdDY0KToKKyAgICAgICAgKEpTQzo6dGVzdFhvckxlZnRT
aGlmdDMyKToKKyAgICAgICAgKEpTQzo6dGVzdFhvclJpZ2h0U2hpZnQzMik6CisgICAgICAgIChK
U0M6OnRlc3RYb3JVbnNpZ25lZFJpZ2h0U2hpZnQzMik6CisgICAgICAgIChKU0M6OnRlc3RYb3JM
ZWZ0U2hpZnQ2NCk6CisgICAgICAgIChKU0M6OnRlc3RYb3JSaWdodFNoaWZ0NjQpOgorICAgICAg
ICAoSlNDOjp0ZXN0WG9yVW5zaWduZWRSaWdodFNoaWZ0NjQpOgorICAgICAgICAoSlNDOjp0ZXN0
T3JMZWZ0U2hpZnQzMik6CisgICAgICAgIChKU0M6OnRlc3RPclJpZ2h0U2hpZnQzMik6CisgICAg
ICAgIChKU0M6OnRlc3RPclVuc2lnbmVkUmlnaHRTaGlmdDMyKToKKyAgICAgICAgKEpTQzo6dGVz
dE9yTGVmdFNoaWZ0NjQpOgorICAgICAgICAoSlNDOjp0ZXN0T3JSaWdodFNoaWZ0NjQpOgorICAg
ICAgICAoSlNDOjp0ZXN0T3JVbnNpZ25lZFJpZ2h0U2hpZnQ2NCk6CisgICAgICAgICogYjMvQjNM
b3dlclRvQWlyLmNwcDoKKyAgICAgICAgKiBiMy9haXIvQWlyT3Bjb2RlLm9wY29kZXM6CisgICAg
ICAgICogYjMvdGVzdGIzLmg6CisgICAgICAgICogYjMvdGVzdGIzXzIuY3BwOgorICAgICAgICAo
dGVzdE11bEFyZ3MzMlNpZ25FeHRlbmQpOgorICAgICAgICAodGVzdE11bEFyZ3MzMlplcm9FeHRl
bmQpOgorICAgICAgICAodGVzdEFuZExlZnRTaGlmdDMyKToKKyAgICAgICAgKHRlc3RBbmRSaWdo
dFNoaWZ0MzIpOgorICAgICAgICAodGVzdEFuZFVuc2lnbmVkUmlnaHRTaGlmdDMyKToKKyAgICAg
ICAgKHRlc3RBbmRMZWZ0U2hpZnQ2NCk6CisgICAgICAgICh0ZXN0QW5kUmlnaHRTaGlmdDY0KToK
KyAgICAgICAgKHRlc3RBbmRVbnNpZ25lZFJpZ2h0U2hpZnQ2NCk6CisgICAgICAgICh0ZXN0WG9y
TGVmdFNoaWZ0MzIpOgorICAgICAgICAodGVzdFhvclJpZ2h0U2hpZnQzMik6CisgICAgICAgICh0
ZXN0WG9yVW5zaWduZWRSaWdodFNoaWZ0MzIpOgorICAgICAgICAodGVzdFhvckxlZnRTaGlmdDY0
KToKKyAgICAgICAgKHRlc3RYb3JSaWdodFNoaWZ0NjQpOgorICAgICAgICAodGVzdFhvclVuc2ln
bmVkUmlnaHRTaGlmdDY0KToKKyAgICAgICAgKHRlc3RPckxlZnRTaGlmdDMyKToKKyAgICAgICAg
KHRlc3RPclJpZ2h0U2hpZnQzMik6CisgICAgICAgICh0ZXN0T3JVbnNpZ25lZFJpZ2h0U2hpZnQz
Mik6CisgICAgICAgICh0ZXN0T3JMZWZ0U2hpZnQ2NCk6CisgICAgICAgICh0ZXN0T3JSaWdodFNo
aWZ0NjQpOgorICAgICAgICAodGVzdE9yVW5zaWduZWRSaWdodFNoaWZ0NjQpOgorICAgICAgICAo
dGVzdEJpdEFuZFplcm9TaGlmdFJpZ2h0QXJnSW1tTWFzazMyKToKKyAgICAgICAgKHRlc3RCaXRB
bmRaZXJvU2hpZnRSaWdodEFyZ0ltbU1hc2s2NCk6CisgICAgICAgICh0ZXN0Qml0QW5kQXJncyk6
CisgICAgICAgICh0ZXN0Qml0QW5kU2FtZUFyZyk6CisgICAgICAgICh0ZXN0Qml0QW5kTm90Tm90
KToKKyAgICAgICAgKHRlc3RCaXRBbmROb3ROb3QzMik6CisgICAgICAgICh0ZXN0Qml0QW5kTm90
SW1tKToKKyAgICAgICAgKHRlc3RCaXRBbmROb3RJbW0zMik6CisgICAgICAgIChhZGRCaXRUZXN0
cyk6CisgICAgICAgICogYjMvdGVzdGIzXzMuY3BwOgorICAgICAgICAoYWRkQXJnVGVzdHMpOgor
CiAyMDIxLTA3LTMwICBZaWppYSBIdWFuZyAgPHlpamlhX2h1YW5nQGFwcGxlLmNvbT4KIAogICAg
ICAgICBBZGQgUHJlL1Bvc3QtSW5kZXhlZCBBZGRyZXNzIE1vZGUgdG8gQWlyIGZvciBBUk02NApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ckFSTTY0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjQuaAppbmRleCBlNmJmYmVjNjAwMWMxMGM2MWU5ZjI2NmVmZjI3YWQ2ZjEwZTg5ZjhmLi4x
M2EyMzhiM2Q4NmIxODkwZDJkZmI2MmQ5MDY5NzRmM2RmYzVkNzc5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaApAQCAt
NjQ5LDYgKzY0OSw5NiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLnN1Yjw2ND4oZCwg
biwgbSwgQXNzZW1ibGVyOjpMU1IsIGFtb3VudC5tX3ZhbHVlKTsKICAgICB9CiAKKyAgICB2b2lk
IGFuZExlZnRTaGlmdDMyKFJlZ2lzdGVySUQgbiwgUmVnaXN0ZXJJRCBtLCBUcnVzdGVkSW1tMzIg
YW1vdW50LCBSZWdpc3RlcklEIGQpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmRfPDMy
PihkLCBuLCBtLCBBc3NlbWJsZXI6OkxTTCwgYW1vdW50Lm1fdmFsdWUpOworICAgIH0KKworICAg
IHZvaWQgYW5kUmlnaHRTaGlmdDMyKFJlZ2lzdGVySUQgbiwgUmVnaXN0ZXJJRCBtLCBUcnVzdGVk
SW1tMzIgYW1vdW50LCBSZWdpc3RlcklEIGQpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5h
bmRfPDMyPihkLCBuLCBtLCBBc3NlbWJsZXI6OkFTUiwgYW1vdW50Lm1fdmFsdWUpOworICAgIH0K
KworICAgIHZvaWQgYW5kVW5zaWduZWRSaWdodFNoaWZ0MzIoUmVnaXN0ZXJJRCBuLCBSZWdpc3Rl
cklEIG0sIFRydXN0ZWRJbW0zMiBhbW91bnQsIFJlZ2lzdGVySUQgZCkKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLmFuZF88MzI+KGQsIG4sIG0sIEFzc2VtYmxlcjo6TFNSLCBhbW91bnQubV92
YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBhbmRMZWZ0U2hpZnQ2NChSZWdpc3RlcklEIG4sIFJl
Z2lzdGVySUQgbSwgVHJ1c3RlZEltbTMyIGFtb3VudCwgUmVnaXN0ZXJJRCBkKQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIuYW5kXzw2ND4oZCwgbiwgbSwgQXNzZW1ibGVyOjpMU0wsIGFtb3Vu
dC5tX3ZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZFJpZ2h0U2hpZnQ2NChSZWdpc3RlcklE
IG4sIFJlZ2lzdGVySUQgbSwgVHJ1c3RlZEltbTMyIGFtb3VudCwgUmVnaXN0ZXJJRCBkKQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kXzw2ND4oZCwgbiwgbSwgQXNzZW1ibGVyOjpBU1Is
IGFtb3VudC5tX3ZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZFVuc2lnbmVkUmlnaHRTaGlm
dDY0KFJlZ2lzdGVySUQgbiwgUmVnaXN0ZXJJRCBtLCBUcnVzdGVkSW1tMzIgYW1vdW50LCBSZWdp
c3RlcklEIGQpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmRfPDY0PihkLCBuLCBtLCBB
c3NlbWJsZXI6OkxTUiwgYW1vdW50Lm1fdmFsdWUpOworICAgIH0KKworICAgIHZvaWQgeG9yTGVm
dFNoaWZ0MzIoUmVnaXN0ZXJJRCBuLCBSZWdpc3RlcklEIG0sIFRydXN0ZWRJbW0zMiBhbW91bnQs
IFJlZ2lzdGVySUQgZCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmVvcjwzMj4oZCwgbiwg
bSwgQXNzZW1ibGVyOjpMU0wsIGFtb3VudC5tX3ZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIHhv
clJpZ2h0U2hpZnQzMihSZWdpc3RlcklEIG4sIFJlZ2lzdGVySUQgbSwgVHJ1c3RlZEltbTMyIGFt
b3VudCwgUmVnaXN0ZXJJRCBkKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuZW9yPDMyPihk
LCBuLCBtLCBBc3NlbWJsZXI6OkFTUiwgYW1vdW50Lm1fdmFsdWUpOworICAgIH0KKworICAgIHZv
aWQgeG9yVW5zaWduZWRSaWdodFNoaWZ0MzIoUmVnaXN0ZXJJRCBuLCBSZWdpc3RlcklEIG0sIFRy
dXN0ZWRJbW0zMiBhbW91bnQsIFJlZ2lzdGVySUQgZCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLmVvcjwzMj4oZCwgbiwgbSwgQXNzZW1ibGVyOjpMU1IsIGFtb3VudC5tX3ZhbHVlKTsKKyAg
ICB9CisKKyAgICB2b2lkIHhvckxlZnRTaGlmdDY0KFJlZ2lzdGVySUQgbiwgUmVnaXN0ZXJJRCBt
LCBUcnVzdGVkSW1tMzIgYW1vdW50LCBSZWdpc3RlcklEIGQpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5lb3I8NjQ+KGQsIG4sIG0sIEFzc2VtYmxlcjo6TFNMLCBhbW91bnQubV92YWx1ZSk7
CisgICAgfQorCisgICAgdm9pZCB4b3JSaWdodFNoaWZ0NjQoUmVnaXN0ZXJJRCBuLCBSZWdpc3Rl
cklEIG0sIFRydXN0ZWRJbW0zMiBhbW91bnQsIFJlZ2lzdGVySUQgZCkKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLmVvcjw2ND4oZCwgbiwgbSwgQXNzZW1ibGVyOjpBU1IsIGFtb3VudC5tX3Zh
bHVlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvclVuc2lnbmVkUmlnaHRTaGlmdDY0KFJlZ2lzdGVy
SUQgbiwgUmVnaXN0ZXJJRCBtLCBUcnVzdGVkSW1tMzIgYW1vdW50LCBSZWdpc3RlcklEIGQpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5lb3I8NjQ+KGQsIG4sIG0sIEFzc2VtYmxlcjo6TFNS
LCBhbW91bnQubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBvckxlZnRTaGlmdDMyKFJlZ2lz
dGVySUQgbiwgUmVnaXN0ZXJJRCBtLCBUcnVzdGVkSW1tMzIgYW1vdW50LCBSZWdpc3RlcklEIGQp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5vcnI8MzI+KGQsIG4sIG0sIEFzc2VtYmxlcjo6
TFNMLCBhbW91bnQubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBvclJpZ2h0U2hpZnQzMihS
ZWdpc3RlcklEIG4sIFJlZ2lzdGVySUQgbSwgVHJ1c3RlZEltbTMyIGFtb3VudCwgUmVnaXN0ZXJJ
RCBkKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3JyPDMyPihkLCBuLCBtLCBBc3NlbWJs
ZXI6OkFTUiwgYW1vdW50Lm1fdmFsdWUpOworICAgIH0KKworICAgIHZvaWQgb3JVbnNpZ25lZFJp
Z2h0U2hpZnQzMihSZWdpc3RlcklEIG4sIFJlZ2lzdGVySUQgbSwgVHJ1c3RlZEltbTMyIGFtb3Vu
dCwgUmVnaXN0ZXJJRCBkKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3JyPDMyPihkLCBu
LCBtLCBBc3NlbWJsZXI6OkxTUiwgYW1vdW50Lm1fdmFsdWUpOworICAgIH0KKworICAgIHZvaWQg
b3JMZWZ0U2hpZnQ2NChSZWdpc3RlcklEIG4sIFJlZ2lzdGVySUQgbSwgVHJ1c3RlZEltbTMyIGFt
b3VudCwgUmVnaXN0ZXJJRCBkKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3JyPDY0Pihk
LCBuLCBtLCBBc3NlbWJsZXI6OkxTTCwgYW1vdW50Lm1fdmFsdWUpOworICAgIH0KKworICAgIHZv
aWQgb3JSaWdodFNoaWZ0NjQoUmVnaXN0ZXJJRCBuLCBSZWdpc3RlcklEIG0sIFRydXN0ZWRJbW0z
MiBhbW91bnQsIFJlZ2lzdGVySUQgZCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ycjw2
ND4oZCwgbiwgbSwgQXNzZW1ibGVyOjpBU1IsIGFtb3VudC5tX3ZhbHVlKTsKKyAgICB9CisKKyAg
ICB2b2lkIG9yVW5zaWduZWRSaWdodFNoaWZ0NjQoUmVnaXN0ZXJJRCBuLCBSZWdpc3RlcklEIG0s
IFRydXN0ZWRJbW0zMiBhbW91bnQsIFJlZ2lzdGVySUQgZCkKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLm9ycjw2ND4oZCwgbiwgbSwgQXNzZW1ibGVyOjpMU1IsIGFtb3VudC5tX3ZhbHVlKTsK
KyAgICB9CisKICAgICB2b2lkIGNsZWFyQml0NjQoUmVnaXN0ZXJJRCBiaXRUb0NsZWFyLCBSZWdp
c3RlcklEIGRlc3QsIFJlZ2lzdGVySUQgc2NyYXRjaEZvck1hc2sgPSBJbnZhbGlkR1BSUmVnKQog
ICAgIHsKICAgICAgICAgaWYgKHNjcmF0Y2hGb3JNYXNrID09IEludmFsaWRHUFJSZWcpCkBAIC04
NjMsNiArOTUzLDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIuc211bGwoZGVzdCwg
bGVmdCwgcmlnaHQpOwogICAgIH0KIAorICAgIHZvaWQgbXVsdGlwbHlaZXJvRXh0ZW5kMzIoUmVn
aXN0ZXJJRCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0LCBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci51bXVsbChkZXN0LCBsZWZ0LCByaWdodCk7CisgICAgfQorCiAg
ICAgdm9pZCBkaXYzMihSZWdpc3RlcklEIGRpdmlkZW5kLCBSZWdpc3RlcklEIGRpdmlzb3IsIFJl
Z2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLnNkaXY8MzI+KGRlc3Qs
IGRpdmlkZW5kLCBkaXZpc29yKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvdGVzdG1hc20uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90
ZXN0bWFzbS5jcHAKaW5kZXggMWNhNjk4M2ViNzBkOTY0MGJlNGZiMmYxMTBlMmY4ZTAxZjM4Zjgz
OC4uODk5ZTc2YTI2MTNhOWI3ZWE2MjAwMmEwZDY4NmY2MTViMTE5ZjE5NSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAKQEAgLTkyMSw2ICs5MjEsMjYg
QEAgdm9pZCB0ZXN0TXVsdGlwbHlTaWduRXh0ZW5kMzIoKQogICAgIH0KIH0KIAordm9pZCB0ZXN0
TXVsdGlwbHlaZXJvRXh0ZW5kMzIoKQoreworICAgIGZvciAoYXV0byBuT3BlcmFuZCA6IGludDMy
T3BlcmFuZHMoKSkgeworICAgICAgICBhdXRvIG11bCA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBl
cnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAg
ICAgICAgICAgaml0Lm11bHRpcGx5WmVyb0V4dGVuZDMyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwg
R1BSSW5mbzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAg
ICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICBqaXQucmV0KCk7
CisgICAgICAgIH0pOworCisgICAgICAgIGZvciAoYXV0byBtT3BlcmFuZCA6IGludDMyT3BlcmFu
ZHMoKSkgeworICAgICAgICAgICAgdWludDMyX3QgbiA9IG5PcGVyYW5kOworICAgICAgICAgICAg
dWludDMyX3QgbSA9IG1PcGVyYW5kOworICAgICAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPHVpbnQ2
NF90PihtdWwsIG4sIG0pLCBzdGF0aWNfY2FzdDx1aW50NjRfdD4obikgKiBzdGF0aWNfY2FzdDx1
aW50NjRfdD4obSkpOworICAgICAgICB9CisgICAgfQorfQorCiB2b2lkIHRlc3RNdWx0aXBseUFk
ZFNpZ25FeHRlbmQzMigpCiB7CiAgICAgLy8gZCA9IFNFeHQzMihuKSAqIFNFeHQzMihtKSArIGEK
QEAgLTIzODIsNiArMjQwMiw0NzQgQEAgdm9pZCB0ZXN0TG9hZFByZVBvc3RJbmRleDY0KCkKICAg
ICBDSEVDS19FUSh0ZXN0Mig1KSwgMik7CiAgICAgQ0hFQ0tfRVEobnVtc1syXSwgNSk7CiB9CisK
K3ZvaWQgdGVzdEFuZExlZnRTaGlmdDMyKCkKK3sKKyAgICBWZWN0b3I8aW50MzJfdD4gYW1vdW50
cyA9IHsgMCwgMTcsIDMxIH07CisgICAgZm9yIChhdXRvIG4gOiBpbnQzMk9wZXJhbmRzKCkpIHsK
KyAgICAgICAgZm9yIChhdXRvIG0gOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZv
ciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgYXV0byBhbmQzMiA9
IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgICAgICAgICBl
bWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAgICAgICAgIGppdC5hbmRM
ZWZ0U2hpZnQzMihHUFJJbmZvOjphcmd1bWVudEdQUjAsIAorICAgICAgICAgICAgICAgICAgICAg
ICAgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKGFtb3VudCksIAorICAgICAgICAgICAgICAgICAgICAgICAg
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5j
dGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAg
ICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIGludDMyX3QgbGhzID0gaW52b2tlPGlu
dDMyX3Q+KGFuZDMyLCBuLCBtKTsKKyAgICAgICAgICAgICAgICBpbnQzMl90IHJocyA9IG4gJiAo
bSA8PCBhbW91bnQpOworICAgICAgICAgICAgICAgIENIRUNLX0VRKGxocywgcmhzKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0QW5kUmlnaHRTaGlmdDMy
KCkKK3sKKyAgICBWZWN0b3I8aW50MzJfdD4gYW1vdW50cyA9IHsgMCwgMTcsIDMxIH07CisgICAg
Zm9yIChhdXRvIG4gOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG0gOiBp
bnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRz
KSB7CisgICAgICAgICAgICAgICAgYXV0byBhbmQzMiA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBl
cnMmIGppdCkgeworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQp
OworCisgICAgICAgICAgICAgICAgICAgIGppdC5hbmRSaWdodFNoaWZ0MzIoR1BSSW5mbzo6YXJn
dW1lbnRHUFIwLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BS
MSwgCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihh
bW91bnQpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BS
KTsKKworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAg
ICAgICAgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAg
ICAgICAgICAgICBpbnQzMl90IGxocyA9IGludm9rZTxpbnQzMl90PihhbmQzMiwgbiwgbSk7Cisg
ICAgICAgICAgICAgICAgaW50MzJfdCByaHMgPSBuICYgKG0gPj4gYW1vdW50KTsKKyAgICAgICAg
ICAgICAgICBDSEVDS19FUShsaHMsIHJocyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK3ZvaWQgdGVzdEFuZFVuc2lnbmVkUmlnaHRTaGlmdDMyKCkKK3sKKyAgICBWZWN0
b3I8dWludDMyX3Q+IGFtb3VudHMgPSB7IDAsIDE3LCAzMSB9OworICAgIGZvciAoYXV0byBuIDog
aW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtIDogaW50MzJPcGVyYW5kcygp
KSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAg
ICAgICAgIGF1dG8gYW5kMzIgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAg
ICAgICAgICAgICBqaXQuYW5kVW5zaWduZWRSaWdodFNoaWZ0MzIoR1BSSW5mbzo6YXJndW1lbnRH
UFIwLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgCisg
ICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbW91bnQp
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKwor
ICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAg
ICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAg
ICAgICB1aW50MzJfdCBsaHMgPSBpbnZva2U8dWludDMyX3Q+KGFuZDMyLCBuLCBtKTsKKyAgICAg
ICAgICAgICAgICB1aW50MzJfdCByaHMgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4obikgJiAoc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KG0pID4+IGFtb3VudCk7CisgICAgICAgICAgICAgICAgQ0hFQ0tf
RVEobGhzLCByaHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lk
IHRlc3RBbmRMZWZ0U2hpZnQ2NCgpCit7CisgICAgVmVjdG9yPGludDMyX3Q+IGFtb3VudHMgPSB7
IDAsIDM0LCA2MyB9OworICAgIGZvciAoYXV0byBuIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAg
ICAgIGZvciAoYXV0byBtIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1
dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAgICAgIGF1dG8gYW5kNjQgPSBjb21w
aWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1
bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgICAgICAgICBqaXQuYW5kTGVmdFNo
aWZ0NjQoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQ
UkluZm86OmFyZ3VtZW50R1BSMSwgCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihhbW91bnQpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25F
cGlsb2d1ZShqaXQpOworICAgICAgICAgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAg
ICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICBpbnQ2NF90IGxocyA9IGludm9rZTxpbnQ2NF90
PihhbmQ2NCwgbiwgbSk7CisgICAgICAgICAgICAgICAgaW50NjRfdCByaHMgPSBuICYgKG0gPDwg
YW1vdW50KTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUShsaHMsIHJocyk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdEFuZFJpZ2h0U2hpZnQ2NCgpCit7
CisgICAgVmVjdG9yPGludDMyX3Q+IGFtb3VudHMgPSB7IDAsIDM0LCA2MyB9OworICAgIGZvciAo
YXV0byBuIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtIDogaW50NjRP
cGVyYW5kcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgewor
ICAgICAgICAgICAgICAgIGF1dG8gYW5kNjQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBq
aXQpIHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKwor
ICAgICAgICAgICAgICAgICAgICBqaXQuYW5kUmlnaHRTaGlmdDY0KEdQUkluZm86OmFyZ3VtZW50
R1BSMCwgCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjphcmd1bWVudEdQUjEsIAor
ICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYW1vdW50
KSwgCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisK
KyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAg
ICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAg
ICAgICAgaW50NjRfdCBsaHMgPSBpbnZva2U8aW50NjRfdD4oYW5kNjQsIG4sIG0pOworICAgICAg
ICAgICAgICAgIGludDY0X3QgcmhzID0gbiAmIChtID4+IGFtb3VudCk7CisgICAgICAgICAgICAg
ICAgQ0hFQ0tfRVEobGhzLCByaHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
fQorCit2b2lkIHRlc3RBbmRVbnNpZ25lZFJpZ2h0U2hpZnQ2NCgpCit7CisgICAgVmVjdG9yPHVp
bnQzMl90PiBhbW91bnRzID0geyAwLCAzNCwgNjMgfTsKKyAgICBmb3IgKGF1dG8gbiA6IGludDY0
T3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbSA6IGludDY0T3BlcmFuZHMoKSkgewor
ICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAg
ICBhdXRvIGFuZDY0ID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAg
ICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgICAg
ICAgICAgaml0LmFuZFVuc2lnbmVkUmlnaHRTaGlmdDY0KEdQUkluZm86OmFyZ3VtZW50R1BSMCwg
CisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjphcmd1bWVudEdQUjEsIAorICAgICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYW1vdW50KSwgCisg
ICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAg
ICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgICAg
ICAgICAgaml0LnJldCgpOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAg
dWludDY0X3QgbGhzID0gaW52b2tlPHVpbnQ2NF90PihhbmQ2NCwgbiwgbSk7CisgICAgICAgICAg
ICAgICAgdWludDY0X3QgcmhzID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG4pICYgKHN0YXRpY19j
YXN0PHVpbnQ2NF90PihtKSA+PiBhbW91bnQpOworICAgICAgICAgICAgICAgIENIRUNLX0VRKGxo
cywgcmhzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0
WG9yTGVmdFNoaWZ0MzIoKQoreworICAgIFZlY3RvcjxpbnQzMl90PiBhbW91bnRzID0geyAwLCAx
NywgMzEgfTsKKyAgICBmb3IgKGF1dG8gbiA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICBm
b3IgKGF1dG8gbSA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFt
b3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHhvcjMyID0gY29tcGlsZShb
PV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlv
blByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgICAgICAgICAgaml0LnhvckxlZnRTaGlmdDMy
KEdQUkluZm86OmFyZ3VtZW50R1BSMCwgCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZv
Ojphcmd1bWVudEdQUjEsIAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoYW1vdW50KSwgCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9n
dWUoaml0KTsKKyAgICAgICAgICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICAgICAgICAg
IH0pOworCisgICAgICAgICAgICAgICAgaW50MzJfdCBsaHMgPSBpbnZva2U8aW50MzJfdD4oeG9y
MzIsIG4sIG0pOworICAgICAgICAgICAgICAgIGludDMyX3QgcmhzID0gbiBeIChtIDw8IGFtb3Vu
dCk7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEobGhzLCByaHMpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RYb3JSaWdodFNoaWZ0MzIoKQoreworICAg
IFZlY3RvcjxpbnQzMl90PiBhbW91bnRzID0geyAwLCAxNywgMzEgfTsKKyAgICBmb3IgKGF1dG8g
biA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbSA6IGludDMyT3BlcmFu
ZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAg
ICAgICAgICAgICBhdXRvIHhvcjMyID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7
CisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAg
ICAgICAgICAgICAgICAgaml0LnhvclJpZ2h0U2hpZnQzMihHUFJJbmZvOjphcmd1bWVudEdQUjAs
IAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFtb3VudCksIAor
ICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAg
ICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICAg
ICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAg
IGludDMyX3QgbGhzID0gaW52b2tlPGludDMyX3Q+KHhvcjMyLCBuLCBtKTsKKyAgICAgICAgICAg
ICAgICBpbnQzMl90IHJocyA9IG4gXiAobSA+PiBhbW91bnQpOworICAgICAgICAgICAgICAgIENI
RUNLX0VRKGxocywgcmhzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwor
dm9pZCB0ZXN0WG9yVW5zaWduZWRSaWdodFNoaWZ0MzIoKQoreworICAgIFZlY3Rvcjx1aW50MzJf
dD4gYW1vdW50cyA9IHsgMCwgMTcsIDMxIH07CisgICAgZm9yIChhdXRvIG4gOiBpbnQzMk9wZXJh
bmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG0gOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAg
ICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgYXV0
byB4b3IzMiA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAg
ICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAgICAgICAg
IGppdC54b3JVbnNpZ25lZFJpZ2h0U2hpZnQzMihHUFJJbmZvOjphcmd1bWVudEdQUjAsIAorICAg
ICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFtb3VudCksIAorICAgICAg
ICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAg
ICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICAgICAgICAg
IGppdC5yZXQoKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIHVpbnQz
Ml90IGxocyA9IGludm9rZTx1aW50MzJfdD4oeG9yMzIsIG4sIG0pOworICAgICAgICAgICAgICAg
IHVpbnQzMl90IHJocyA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihuKSBeIChzdGF0aWNfY2FzdDx1
aW50MzJfdD4obSkgPj4gYW1vdW50KTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUShsaHMsIHJo
cyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdFhvckxl
ZnRTaGlmdDY0KCkKK3sKKyAgICBWZWN0b3I8aW50MzJfdD4gYW1vdW50cyA9IHsgMCwgMzQsIDYz
IH07CisgICAgZm9yIChhdXRvIG4gOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChh
dXRvIG0gOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQg
OiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgYXV0byB4b3I2NCA9IGNvbXBpbGUoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9s
b2d1ZShqaXQpOworCisgICAgICAgICAgICAgICAgICAgIGppdC54b3JMZWZ0U2hpZnQ2NChHUFJJ
bmZvOjphcmd1bWVudEdQUjAsIAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6YXJn
dW1lbnRHUFIxLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKGFtb3VudCksIAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpOworCisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGpp
dCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAgICAgICB9KTsK
KworICAgICAgICAgICAgICAgIGludDY0X3QgbGhzID0gaW52b2tlPGludDY0X3Q+KHhvcjY0LCBu
LCBtKTsKKyAgICAgICAgICAgICAgICBpbnQ2NF90IHJocyA9IG4gXiAobSA8PCBhbW91bnQpOwor
ICAgICAgICAgICAgICAgIENIRUNLX0VRKGxocywgcmhzKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0WG9yUmlnaHRTaGlmdDY0KCkKK3sKKyAgICBWZWN0
b3I8aW50MzJfdD4gYW1vdW50cyA9IHsgMCwgMzQsIDYzIH07CisgICAgZm9yIChhdXRvIG4gOiBp
bnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG0gOiBpbnQ2NE9wZXJhbmRzKCkp
IHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAg
ICAgICAgYXV0byB4b3I2NCA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAg
ICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAg
ICAgICAgICAgIGppdC54b3JSaWdodFNoaWZ0NjQoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgCisgICAgICAgICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbW91bnQpLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAg
ICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgICAgICAg
ICBqaXQucmV0KCk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICBpbnQ2
NF90IGxocyA9IGludm9rZTxpbnQ2NF90Pih4b3I2NCwgbiwgbSk7CisgICAgICAgICAgICAgICAg
aW50NjRfdCByaHMgPSBuIF4gKG0gPj4gYW1vdW50KTsKKyAgICAgICAgICAgICAgICBDSEVDS19F
UShsaHMsIHJocyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQg
dGVzdFhvclVuc2lnbmVkUmlnaHRTaGlmdDY0KCkKK3sKKyAgICBWZWN0b3I8dWludDMyX3Q+IGFt
b3VudHMgPSB7IDAsIDM0LCA2MyB9OworICAgIGZvciAoYXV0byBuIDogaW50NjRPcGVyYW5kcygp
KSB7CisgICAgICAgIGZvciAoYXV0byBtIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAgICAgICAg
ICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAgICAgIGF1dG8geG9y
NjQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgICAgICAgICBqaXQu
eG9yVW5zaWduZWRSaWdodFNoaWZ0NjQoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgCisgICAgICAgICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbW91bnQpLCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgICAg
ICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgICAgICAgICBqaXQu
cmV0KCk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBs
aHMgPSBpbnZva2U8dWludDY0X3Q+KHhvcjY0LCBuLCBtKTsKKyAgICAgICAgICAgICAgICB1aW50
NjRfdCByaHMgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4obikgXiAoc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KG0pID4+IGFtb3VudCk7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEobGhzLCByaHMpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RPckxlZnRTaGlm
dDMyKCkKK3sKKyAgICBWZWN0b3I8aW50MzJfdD4gYW1vdW50cyA9IHsgMCwgMTcsIDMxIH07Cisg
ICAgZm9yIChhdXRvIG4gOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG0g
OiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91
bnRzKSB7CisgICAgICAgICAgICAgICAgYXV0byBvcjMyID0gY29tcGlsZShbPV0gKENDYWxsSGVs
cGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGpp
dCk7CisKKyAgICAgICAgICAgICAgICAgICAgaml0Lm9yTGVmdFNoaWZ0MzIoR1BSSW5mbzo6YXJn
dW1lbnRHUFIwLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BS
MSwgCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihh
bW91bnQpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BS
KTsKKworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAg
ICAgICAgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAg
ICAgICAgICAgICBpbnQzMl90IGxocyA9IGludm9rZTxpbnQzMl90PihvcjMyLCBuLCBtKTsKKyAg
ICAgICAgICAgICAgICBpbnQzMl90IHJocyA9IG4gfCAobSA8PCBhbW91bnQpOworICAgICAgICAg
ICAgICAgIENIRUNLX0VRKGxocywgcmhzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KK30KKwordm9pZCB0ZXN0T3JSaWdodFNoaWZ0MzIoKQoreworICAgIFZlY3RvcjxpbnQzMl90
PiBhbW91bnRzID0geyAwLCAxNywgMzEgfTsKKyAgICBmb3IgKGF1dG8gbiA6IGludDMyT3BlcmFu
ZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbSA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAg
ICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBhdXRv
IG9yMzIgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgICAgICAgICBq
aXQub3JSaWdodFNoaWZ0MzIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgCisgICAgICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbW91bnQpLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgICAgICAgICBl
bWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgICAgICAgICBqaXQucmV0KCk7
CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICBpbnQzMl90IGxocyA9IGlu
dm9rZTxpbnQzMl90PihvcjMyLCBuLCBtKTsKKyAgICAgICAgICAgICAgICBpbnQzMl90IHJocyA9
IG4gfCAobSA+PiBhbW91bnQpOworICAgICAgICAgICAgICAgIENIRUNLX0VRKGxocywgcmhzKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0T3JVbnNpZ25l
ZFJpZ2h0U2hpZnQzMigpCit7CisgICAgVmVjdG9yPHVpbnQzMl90PiBhbW91bnRzID0geyAwLCAx
NywgMzEgfTsKKyAgICBmb3IgKGF1dG8gbiA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICBm
b3IgKGF1dG8gbSA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFt
b3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBhdXRvIG9yMzIgPSBjb21waWxlKFs9
XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9u
UHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgICAgICAgICBqaXQub3JVbnNpZ25lZFJpZ2h0
U2hpZnQzMihHUFJJbmZvOjphcmd1bWVudEdQUjAsIAorICAgICAgICAgICAgICAgICAgICAgICAg
R1BSSW5mbzo6YXJndW1lbnRHUFIxLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKGFtb3VudCksIAorICAgICAgICAgICAgICAgICAgICAgICAgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlv
bkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAg
ICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIHVpbnQzMl90IGxocyA9IGludm9rZTx1aW50
MzJfdD4ob3IzMiwgbiwgbSk7CisgICAgICAgICAgICAgICAgdWludDMyX3QgcmhzID0gc3RhdGlj
X2Nhc3Q8dWludDMyX3Q+KG4pIHwgKHN0YXRpY19jYXN0PHVpbnQzMl90PihtKSA+PiBhbW91bnQp
OworICAgICAgICAgICAgICAgIENIRUNLX0VRKGxocywgcmhzKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0T3JMZWZ0U2hpZnQ2NCgpCit7CisgICAgVmVj
dG9yPGludDMyX3Q+IGFtb3VudHMgPSB7IDAsIDM0LCA2MyB9OworICAgIGZvciAoYXV0byBuIDog
aW50NjRPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtIDogaW50NjRPcGVyYW5kcygp
KSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAg
ICAgICAgIGF1dG8gb3I2NCA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAg
ICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAg
ICAgICAgICAgIGppdC5vckxlZnRTaGlmdDY0KEdQUkluZm86OmFyZ3VtZW50R1BSMCwgCisgICAg
ICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjphcmd1bWVudEdQUjEsIAorICAgICAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYW1vdW50KSwgCisgICAgICAg
ICAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAg
ICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgICAgICAgICAg
aml0LnJldCgpOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgaW50NjRf
dCBsaHMgPSBpbnZva2U8aW50NjRfdD4ob3I2NCwgbiwgbSk7CisgICAgICAgICAgICAgICAgaW50
NjRfdCByaHMgPSBuIHwgKG0gPDwgYW1vdW50KTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUShs
aHMsIHJocyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgdGVz
dE9yUmlnaHRTaGlmdDY0KCkKK3sKKyAgICBWZWN0b3I8aW50MzJfdD4gYW1vdW50cyA9IHsgMCwg
MzQsIDYzIH07CisgICAgZm9yIChhdXRvIG4gOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAg
Zm9yIChhdXRvIG0gOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBh
bW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgYXV0byBvcjY0ID0gY29tcGlsZShb
PV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlv
blByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgICAgICAgICAgaml0Lm9yUmlnaHRTaGlmdDY0
KEdQUkluZm86OmFyZ3VtZW50R1BSMCwgCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZv
Ojphcmd1bWVudEdQUjEsIAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoYW1vdW50KSwgCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9n
dWUoaml0KTsKKyAgICAgICAgICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICAgICAgICAg
IH0pOworCisgICAgICAgICAgICAgICAgaW50NjRfdCBsaHMgPSBpbnZva2U8aW50NjRfdD4ob3I2
NCwgbiwgbSk7CisgICAgICAgICAgICAgICAgaW50NjRfdCByaHMgPSBuIHwgKG0gPj4gYW1vdW50
KTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUShsaHMsIHJocyk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdE9yVW5zaWduZWRSaWdodFNoaWZ0NjQoKQor
eworICAgIFZlY3Rvcjx1aW50MzJfdD4gYW1vdW50cyA9IHsgMCwgMzQsIDYzIH07CisgICAgZm9y
IChhdXRvIG4gOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG0gOiBpbnQ2
NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7
CisgICAgICAgICAgICAgICAgYXV0byBvcjY0ID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYg
aml0KSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisK
KyAgICAgICAgICAgICAgICAgICAgaml0Lm9yVW5zaWduZWRSaWdodFNoaWZ0NjQoR1BSSW5mbzo6
YXJndW1lbnRHUFIwLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50
R1BSMSwgCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihhbW91bnQpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVl
R1BSKTsKKworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOwor
ICAgICAgICAgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAg
ICAgICAgICAgICAgICB1aW50NjRfdCBsaHMgPSBpbnZva2U8dWludDY0X3Q+KG9yNjQsIG4sIG0p
OworICAgICAgICAgICAgICAgIHVpbnQ2NF90IHJocyA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pihu
KSB8IChzdGF0aWNfY2FzdDx1aW50NjRfdD4obSkgPj4gYW1vdW50KTsKKyAgICAgICAgICAgICAg
ICBDSEVDS19FUShsaHMsIHJocyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9
CiAjZW5kaWYKIAogI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpIHx8IENQVShBUk02NCkKQEAg
LTQ5MTUsNiArNTQwMyw3IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikgV1RGX0lHTk9S
RVNfVEhSRUFEX1NBRkVUWV9BTkFMWVNJUwogICAgIFJVTih0ZXN0TG9hZFN0b3JlUGFpcjY0SW50
NjQoKSk7CiAgICAgUlVOKHRlc3RMb2FkU3RvcmVQYWlyNjREb3VibGUoKSk7CiAgICAgUlVOKHRl
c3RNdWx0aXBseVNpZ25FeHRlbmQzMigpKTsKKyAgICBSVU4odGVzdE11bHRpcGx5WmVyb0V4dGVu
ZDMyKCkpOwogCiAgICAgUlVOKHRlc3RTdWIzMkFyZ3MoKSk7CiAgICAgUlVOKHRlc3RTdWIzMklt
bSgpKTsKQEAgLTQ5ODAsNiArNTQ2OSwyNiBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIp
IFdURl9JR05PUkVTX1RIUkVBRF9TQUZFVFlfQU5BTFlTSVMKICAgICBSVU4odGVzdFN0b3JlUHJl
UG9zdEluZGV4NjQoKSk7CiAgICAgUlVOKHRlc3RMb2FkUHJlUG9zdEluZGV4MzIoKSk7CiAgICAg
UlVOKHRlc3RMb2FkUHJlUG9zdEluZGV4NjQoKSk7CisgICAgUlVOKHRlc3RBbmRMZWZ0U2hpZnQz
MigpKTsKKyAgICBSVU4odGVzdEFuZFJpZ2h0U2hpZnQzMigpKTsKKyAgICBSVU4odGVzdEFuZFVu
c2lnbmVkUmlnaHRTaGlmdDMyKCkpOworICAgIFJVTih0ZXN0QW5kTGVmdFNoaWZ0NjQoKSk7Cisg
ICAgUlVOKHRlc3RBbmRSaWdodFNoaWZ0NjQoKSk7CisgICAgUlVOKHRlc3RBbmRVbnNpZ25lZFJp
Z2h0U2hpZnQ2NCgpKTsKKworICAgIFJVTih0ZXN0WG9yTGVmdFNoaWZ0MzIoKSk7CisgICAgUlVO
KHRlc3RYb3JSaWdodFNoaWZ0MzIoKSk7CisgICAgUlVOKHRlc3RYb3JVbnNpZ25lZFJpZ2h0U2hp
ZnQzMigpKTsKKyAgICBSVU4odGVzdFhvckxlZnRTaGlmdDY0KCkpOworICAgIFJVTih0ZXN0WG9y
UmlnaHRTaGlmdDY0KCkpOworICAgIFJVTih0ZXN0WG9yVW5zaWduZWRSaWdodFNoaWZ0NjQoKSk7
CisKKyAgICBSVU4odGVzdE9yTGVmdFNoaWZ0MzIoKSk7CisgICAgUlVOKHRlc3RPclJpZ2h0U2hp
ZnQzMigpKTsKKyAgICBSVU4odGVzdE9yVW5zaWduZWRSaWdodFNoaWZ0MzIoKSk7CisgICAgUlVO
KHRlc3RPckxlZnRTaGlmdDY0KCkpOworICAgIFJVTih0ZXN0T3JSaWdodFNoaWZ0NjQoKSk7Cisg
ICAgUlVOKHRlc3RPclVuc2lnbmVkUmlnaHRTaGlmdDY0KCkpOwogI2VuZGlmCiAKICNpZiBDUFUo
QVJNNjRFKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fp
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAppbmRleCBl
YmIwMzUyY2IzMDgwM2RiYzFmZTgxOGUzOTkwYmEzNzQ1NzA2NjM3Li5hM2IwM2YzZjEwMjAwNzE3
ZWM0Zjg1NmJmOGU0YmUwZDhlZjk1MzJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNMb3dlclRvQWlyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNM
b3dlclRvQWlyLmNwcApAQCAtMjg1MywyOSArMjg1MywzNiBAQCBwcml2YXRlOgogICAgICAgICB9
CiAKICAgICAgICAgY2FzZSBNdWw6IHsKLSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT50eXBlKCkg
PT0gSW50NjQKLSAgICAgICAgICAgICAgICAmJiBpc1ZhbGlkRm9ybShNdWx0aXBseVNpZ25FeHRl
bmQzMiwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OlRtcCkKLSAgICAgICAgICAgICAgICAmJiBt
X3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gU0V4dDMyCi0gICAgICAgICAgICAgICAgJiYg
IW1fbG9ja2VkLmNvbnRhaW5zKG1fdmFsdWUtPmNoaWxkKDApKSkgewotICAgICAgICAgICAgICAg
IFZhbHVlKiBvcExlZnQgPSBtX3ZhbHVlLT5jaGlsZCgwKTsKLSAgICAgICAgICAgICAgICBWYWx1
ZSogbGVmdCA9IG9wTGVmdC0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICAgICAgVmFsdWUqIG9wUmln
aHQgPSBtX3ZhbHVlLT5jaGlsZCgxKTsKLSAgICAgICAgICAgICAgICBWYWx1ZSogcmlnaHQgPSBu
dWxscHRyOwotCi0gICAgICAgICAgICAgICAgaWYgKG9wUmlnaHQtPm9wY29kZSgpID09IFNFeHQz
MiAmJiAhbV9sb2NrZWQuY29udGFpbnMob3BSaWdodC0+Y2hpbGQoMCkpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJpZ2h0ID0gb3BSaWdodC0+Y2hpbGQoMCk7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNSZXByZXNlbnRhYmxlQXM8aW50MzJfdD4oKSAm
JiAhbV9sb2NrZWQuY29udGFpbnMobV92YWx1ZS0+Y2hpbGQoMSkpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIC8vIFdlIGp1c3QgdXNlIHRoZSA2NC1iaXQgY29uc3QgaW50IGFzIGEgMzIgYml0IGNv
bnN0IGludCBkaXJlY3RseQotICAgICAgICAgICAgICAgICAgICByaWdodCA9IG9wUmlnaHQ7Ci0g
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgVmFsdWUqIGxlZnQgPSBtX3ZhbHVlLT5jaGls
ZCgwKTsKKyAgICAgICAgICAgIFZhbHVlKiByaWdodCA9IG1fdmFsdWUtPmNoaWxkKDEpOwogCi0g
ICAgICAgICAgICAgICAgaWYgKHJpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZChN
dWx0aXBseVNpZ25FeHRlbmQzMiwgdG1wKGxlZnQpLCB0bXAocmlnaHQpLCB0bXAobV92YWx1ZSkp
OwotICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBhdXRvIHRyeUFwcGVu
ZE11bHRpcGx5V2l0aEV4dGVuZCA9IFsmXSAoKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICBh
dXRvIHRyeUFpck9wY29kZSA9IFsmXSAoKSAtPiBBaXI6Ok9wY29kZSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChtX3ZhbHVlLT50eXBlKCkgIT0gSW50NjQpCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gQWlyOjpPb3BzOworICAgICAgICAgICAgICAgICAgICAvLyBTTVVMTDogZCA9
IFNFeHQzMihuKSAqIFNFeHQzMihtKQorICAgICAgICAgICAgICAgICAgICBpZiAoaXNNZXJnZWFi
bGVWYWx1ZShsZWZ0LCBTRXh0MzIsIHRydWUpICYmIGlzTWVyZ2VhYmxlVmFsdWUocmlnaHQsIFNF
eHQzMiwgdHJ1ZSkpIAorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE11bHRpcGx5U2ln
bkV4dGVuZDMyOworICAgICAgICAgICAgICAgICAgICAvLyBVTVVMTDogZCA9IFpFeHQzMihuKSAq
IFpFeHQzMihtKQorICAgICAgICAgICAgICAgICAgICBpZiAoaXNNZXJnZWFibGVWYWx1ZShsZWZ0
LCBaRXh0MzIsIHRydWUpICYmIGlzTWVyZ2VhYmxlVmFsdWUocmlnaHQsIFpFeHQzMiwgdHJ1ZSkp
IAorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE11bHRpcGx5WmVyb0V4dGVuZDMyOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gQWlyOjpPb3BzOworICAgICAgICAgICAgICAgIH07
CisKKyAgICAgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSB0cnlBaXJPcGNvZGUoKTsK
KyAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpU
bXAsIEFyZzo6VG1wKSkgeworICAgICAgICAgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAo
bGVmdC0+Y2hpbGQoMCkpLCB0bXAocmlnaHQtPmNoaWxkKDApKSwgdG1wKG1fdmFsdWUpKTsKKyAg
ICAgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwobGVmdCk7CisgICAgICAgICAgICAgICAg
ICAgIGNvbW1pdEludGVybmFsKHJpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXBwZW5k
QmluT3A8TXVsMzIsIE11bDY0LCBNdWxEb3VibGUsIE11bEZsb2F0LCBDb21tdXRhdGl2ZT4oCi0g
ICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9OworCisgICAgICAgICAg
ICBpZiAodHJ5QXBwZW5kTXVsdGlwbHlXaXRoRXh0ZW5kKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgICAgICBhcHBlbmRCaW5PcDxNdWwzMiwgTXVsNjQsIE11bERvdWJsZSwg
TXVsRmxvYXQsIENvbW11dGF0aXZlPihsZWZ0LCByaWdodCk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KIApAQCAtMjk4OCw2ICsyOTk1LDMwIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBpZiAodHJ5QXBwZW5kQklDKGxlZnQsIHJpZ2h0KSB8fCB0cnlBcHBlbmRCSUMocmlnaHQsIGxl
ZnQpKQogICAgICAgICAgICAgICAgIHJldHVybjsKIAorICAgICAgICAgICAgLy8gYW5kLXdpdGgt
c2hpZnQgUGF0dGVybjogbiAmIChtIFNoaWZ0VHlwZSBhbW91bnQpCisgICAgICAgICAgICBhdXRv
IHRyeUFwcGVuZEFuZFdpdGhTaGlmdCA9IFsmXSAoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkg
LT4gYm9vbCB7CisgICAgICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gb3Bjb2RlQmFz
ZWRPblNoaWZ0S2luZChyaWdodC0+b3Bjb2RlKCksCisgICAgICAgICAgICAgICAgICAgIEFuZExl
ZnRTaGlmdDMyLCBBbmRMZWZ0U2hpZnQ2NCwKKyAgICAgICAgICAgICAgICAgICAgQW5kUmlnaHRT
aGlmdDMyLCBBbmRSaWdodFNoaWZ0NjQsCisgICAgICAgICAgICAgICAgICAgIEFuZFVuc2lnbmVk
UmlnaHRTaGlmdDMyLCBBbmRVbnNpZ25lZFJpZ2h0U2hpZnQ2NCk7CisgICAgICAgICAgICAgICAg
aWYgKCFpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJnOjpJbW0sIEFy
Zzo6VG1wKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgIGlmICghY2FuQmVJbnRlcm5hbChyaWdodCkgfHwgIWltbShyaWdodC0+Y2hpbGQoMSkpIHx8
IHJpZ2h0LT5jaGlsZCgxKS0+YXNJbnQoKSA8IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICAgICAgICAgIHVpbnQ2NF90IGFtb3VudCA9IHJpZ2h0LT5jaGls
ZCgxKS0+YXNJbnQoKTsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBkYXRhc2l6ZSA9IG1fdmFs
dWUtPnR5cGUoKSA9PSBJbnQzMiA/IDMyIDogNjQ7CisgICAgICAgICAgICAgICAgaWYgKGFtb3Vu
dCA+PSBkYXRhc2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKGxlZnQpLCB0bXAocmlnaHQtPmNoaWxkKDAp
KSwgaW1tKHJpZ2h0LT5jaGlsZCgxKSksIHRtcChtX3ZhbHVlKSk7CisgICAgICAgICAgICAgICAg
Y29tbWl0SW50ZXJuYWwocmlnaHQpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgfTsKKworICAgICAgICAgICAgaWYgKHRyeUFwcGVuZEFuZFdpdGhTaGlmdChsZWZ0
LCByaWdodCkgfHwgdHJ5QXBwZW5kQW5kV2l0aFNoaWZ0KHJpZ2h0LCBsZWZ0KSkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisKICAgICAgICAgICAgIGFwcGVuZEJpbk9wPEFuZDMyLCBBbmQ2NCwg
QW5kRG91YmxlLCBBbmRGbG9hdCwgQ29tbXV0YXRpdmU+KGxlZnQsIHJpZ2h0KTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMzAwMSw3ICszMDMyLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIC8vICAgICAgICBtYXNrID0gKDEgPDwgbG93V2lkdGgpIC0gMQogICAgICAgICAg
ICAgYXV0byB0cnlBcHBlbmRFWFRSID0gWyZdIChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KSAt
PiBib29sIHsKICAgICAgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBvcGNvZGVGb3JU
eXBlKEV4dHJhY3RSZWdpc3RlcjMyLCBFeHRyYWN0UmVnaXN0ZXI2NCwgbV92YWx1ZS0+dHlwZSgp
KTsKLSAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIEFy
Zzo6VG1wLCBBcmc6OkltbSwgQXJnOjpUbXApKSAKKyAgICAgICAgICAgICAgICBpZiAoIWlzVmFs
aWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OkltbSwgQXJnOjpUbXApKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgaWYgKGxl
ZnQtPm9wY29kZSgpICE9IFNobCB8fCBsZWZ0LT5jaGlsZCgwKS0+b3Bjb2RlKCkgIT0gQml0QW5k
IHx8IHJpZ2h0LT5vcGNvZGUoKSAhPSBaU2hyKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0zMTU1LDYgKzMxODYsMzAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmICh0
cnlBcHBlbmRPUk4obGVmdCwgcmlnaHQpIHx8IHRyeUFwcGVuZE9STihyaWdodCwgbGVmdCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogCisgICAgICAgICAgICAvLyBvcnItd2l0aC1zaGlmdCBQ
YXR0ZXJuOiBuIHwgKG0gU2hpZnRUeXBlIGFtb3VudCkKKyAgICAgICAgICAgIGF1dG8gdHJ5QXBw
ZW5kT3JXaXRoU2hpZnQgPSBbJl0gKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpIC0+IGJvb2wg
eworICAgICAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IG9wY29kZUJhc2VkT25TaGlm
dEtpbmQocmlnaHQtPm9wY29kZSgpLCAKKyAgICAgICAgICAgICAgICAgICAgT3JMZWZ0U2hpZnQz
MiwgT3JMZWZ0U2hpZnQ2NCwgCisgICAgICAgICAgICAgICAgICAgIE9yUmlnaHRTaGlmdDMyLCBP
clJpZ2h0U2hpZnQ2NCwgCisgICAgICAgICAgICAgICAgICAgIE9yVW5zaWduZWRSaWdodFNoaWZ0
MzIsIE9yVW5zaWduZWRSaWdodFNoaWZ0NjQpOworICAgICAgICAgICAgICAgIGlmICghaXNWYWxp
ZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFyZzo6SW1tLCBBcmc6OlRtcCkpIAor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKCFj
YW5CZUludGVybmFsKHJpZ2h0KSB8fCAhaW1tKHJpZ2h0LT5jaGlsZCgxKSkgfHwgcmlnaHQtPmNo
aWxkKDEpLT5hc0ludCgpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgICAgICAgICAgdWludDY0X3QgYW1vdW50ID0gcmlnaHQtPmNoaWxkKDEpLT5hc0lu
dCgpOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IGRhdGFzaXplID0gbV92YWx1ZS0+dHlwZSgp
ID09IEludDMyID8gMzIgOiA2NDsKKyAgICAgICAgICAgICAgICBpZiAoYW1vdW50ID49IGRhdGFz
aXplKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAg
ICBhcHBlbmQob3Bjb2RlLCB0bXAobGVmdCksIHRtcChyaWdodC0+Y2hpbGQoMCkpLCBpbW0ocmln
aHQtPmNoaWxkKDEpKSwgdG1wKG1fdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBjb21taXRJbnRl
cm5hbChyaWdodCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9
OworCisgICAgICAgICAgICBpZiAodHJ5QXBwZW5kT3JXaXRoU2hpZnQobGVmdCwgcmlnaHQpIHx8
IHRyeUFwcGVuZE9yV2l0aFNoaWZ0KHJpZ2h0LCBsZWZ0KSkKKyAgICAgICAgICAgICAgICByZXR1
cm47CisKICAgICAgICAgICAgIGFwcGVuZEJpbk9wPE9yMzIsIE9yNjQsIE9yRG91YmxlLCBPckZs
b2F0LCBDb21tdXRhdGl2ZT4obGVmdCwgcmlnaHQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CkBAIC0zMjI1LDYgKzMyODAsMzAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmICh0
cnlBcHBlbmRFT04obGVmdCwgcmlnaHQpIHx8IHRyeUFwcGVuZEVPTihyaWdodCwgbGVmdCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogCisgICAgICAgICAgICAvLyBlb3Itd2l0aC1zaGlmdCBQ
YXR0ZXJuOiBuIF4gKG0gU2hpZnRUeXBlIGFtb3VudCkKKyAgICAgICAgICAgIGF1dG8gdHJ5QXBw
ZW5kWG9yV2l0aFNoaWZ0ID0gWyZdIChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KSAtPiBib29s
IHsKKyAgICAgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBvcGNvZGVCYXNlZE9uU2hp
ZnRLaW5kKHJpZ2h0LT5vcGNvZGUoKSwgCisgICAgICAgICAgICAgICAgICAgIFhvckxlZnRTaGlm
dDMyLCBYb3JMZWZ0U2hpZnQ2NCwgCisgICAgICAgICAgICAgICAgICAgIFhvclJpZ2h0U2hpZnQz
MiwgWG9yUmlnaHRTaGlmdDY0LCAKKyAgICAgICAgICAgICAgICAgICAgWG9yVW5zaWduZWRSaWdo
dFNoaWZ0MzIsIFhvclVuc2lnbmVkUmlnaHRTaGlmdDY0KTsKKyAgICAgICAgICAgICAgICBpZiAo
IWlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OkltbSwgQXJnOjpU
bXApKSAKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAg
IGlmICghY2FuQmVJbnRlcm5hbChyaWdodCkgfHwgIWltbShyaWdodC0+Y2hpbGQoMSkpIHx8IHJp
Z2h0LT5jaGlsZCgxKS0+YXNJbnQoKSA8IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICAgICAgICAgIHVpbnQ2NF90IGFtb3VudCA9IHJpZ2h0LT5jaGlsZCgx
KS0+YXNJbnQoKTsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBkYXRhc2l6ZSA9IG1fdmFsdWUt
PnR5cGUoKSA9PSBJbnQzMiA/IDMyIDogNjQ7CisgICAgICAgICAgICAgICAgaWYgKGFtb3VudCA+
PSBkYXRhc2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
ICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKGxlZnQpLCB0bXAocmlnaHQtPmNoaWxkKDApKSwg
aW1tKHJpZ2h0LT5jaGlsZCgxKSksIHRtcChtX3ZhbHVlKSk7CisgICAgICAgICAgICAgICAgY29t
bWl0SW50ZXJuYWwocmlnaHQpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgfTsKKworICAgICAgICAgICAgaWYgKHRyeUFwcGVuZFhvcldpdGhTaGlmdChsZWZ0LCBy
aWdodCkgfHwgdHJ5QXBwZW5kWG9yV2l0aFNoaWZ0KHJpZ2h0LCBsZWZ0KSkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisKICAgICAgICAgICAgIGFwcGVuZEJpbk9wPFhvcjMyLCBYb3I2NCwgWG9y
RG91YmxlLCBYb3JGbG9hdCwgQ29tbXV0YXRpdmU+KGxlZnQsIHJpZ2h0KTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJPcGNvZGUub3Bjb2RlcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
T3Bjb2RlLm9wY29kZXMKaW5kZXggNDlmZWQxYWFhMTlhZjZkZGNkOTJjMzM5ZjcwYjU3NmQwZDM5
NWRkZS4uZjg1NDU3NTM3NDNhZjI1YzJiNTg3ZWViZmRkYTQyNTc3OWZkYmVjMiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcworKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCkBAIC0yODQsNiAr
Mjg0LDkgQEAgYXJtNjQ6IE11bHRpcGx5TmVnWmVyb0V4dGVuZDMyIFU6RzozMiwgVTpHOjMyLCBE
Okc6NjQKIGFybTY0OiBNdWx0aXBseVNpZ25FeHRlbmQzMiBVOkc6MzIsIFU6RzozMiwgRDpHOjY0
CiAgICAgVG1wLCBUbXAsIFRtcAogCithcm02NDogTXVsdGlwbHlaZXJvRXh0ZW5kMzIgVTpHOjMy
LCBVOkc6MzIsIEQ6Rzo2NAorICAgIFRtcCwgVG1wLCBUbXAKKwogYXJtNjQ6IERpdjMyIFU6Rzoz
MiwgVTpHOjMyLCBaRDpHOjMyCiAgICAgVG1wLCBUbXAsIFRtcAogCkBAIC05NTUsNiArOTU4LDYw
IEBAIGFybTY0OiBTdWJSaWdodFNoaWZ0NjQgVTpHOjY0LCBVOkc6NjQsIFU6Rzo2NCwgRDpHOjY0
CiBhcm02NDogU3ViVW5zaWduZWRSaWdodFNoaWZ0NjQgVTpHOjY0LCBVOkc6NjQsIFU6Rzo2NCwg
RDpHOjY0CiAgICAgVG1wLCBUbXAsIEltbSwgVG1wCiAKK2FybTY0OiBBbmRMZWZ0U2hpZnQzMiBV
Okc6MzIsIFU6RzozMiwgVTpHOjMyLCBaRDpHOjMyCisgICAgVG1wLCBUbXAsIEltbSwgVG1wCisK
K2FybTY0OiBBbmRSaWdodFNoaWZ0MzIgVTpHOjMyLCBVOkc6MzIsIFU6RzozMiwgWkQ6RzozMgor
ICAgIFRtcCwgVG1wLCBJbW0sIFRtcAorCithcm02NDogQW5kVW5zaWduZWRSaWdodFNoaWZ0MzIg
VTpHOjMyLCBVOkc6MzIsIFU6RzozMiwgWkQ6RzozMgorICAgIFRtcCwgVG1wLCBJbW0sIFRtcAor
Cithcm02NDogQW5kTGVmdFNoaWZ0NjQgVTpHOjY0LCBVOkc6NjQsIFU6Rzo2NCwgRDpHOjY0Cisg
ICAgVG1wLCBUbXAsIEltbSwgVG1wCisKK2FybTY0OiBBbmRSaWdodFNoaWZ0NjQgVTpHOjY0LCBV
Okc6NjQsIFU6Rzo2NCwgRDpHOjY0CisgICAgVG1wLCBUbXAsIEltbSwgVG1wCisKK2FybTY0OiBB
bmRVbnNpZ25lZFJpZ2h0U2hpZnQ2NCBVOkc6NjQsIFU6Rzo2NCwgVTpHOjY0LCBEOkc6NjQKKyAg
ICBUbXAsIFRtcCwgSW1tLCBUbXAKKworYXJtNjQ6IFhvckxlZnRTaGlmdDMyIFU6RzozMiwgVTpH
OjMyLCBVOkc6MzIsIFpEOkc6MzIKKyAgICBUbXAsIFRtcCwgSW1tLCBUbXAKKworYXJtNjQ6IFhv
clJpZ2h0U2hpZnQzMiBVOkc6MzIsIFU6RzozMiwgVTpHOjMyLCBaRDpHOjMyCisgICAgVG1wLCBU
bXAsIEltbSwgVG1wCisKK2FybTY0OiBYb3JVbnNpZ25lZFJpZ2h0U2hpZnQzMiBVOkc6MzIsIFU6
RzozMiwgVTpHOjMyLCBaRDpHOjMyCisgICAgVG1wLCBUbXAsIEltbSwgVG1wCisKK2FybTY0OiBY
b3JMZWZ0U2hpZnQ2NCBVOkc6NjQsIFU6Rzo2NCwgVTpHOjY0LCBEOkc6NjQKKyAgICBUbXAsIFRt
cCwgSW1tLCBUbXAKKworYXJtNjQ6IFhvclJpZ2h0U2hpZnQ2NCBVOkc6NjQsIFU6Rzo2NCwgVTpH
OjY0LCBEOkc6NjQKKyAgICBUbXAsIFRtcCwgSW1tLCBUbXAKKworYXJtNjQ6IFhvclVuc2lnbmVk
UmlnaHRTaGlmdDY0IFU6Rzo2NCwgVTpHOjY0LCBVOkc6NjQsIEQ6Rzo2NAorICAgIFRtcCwgVG1w
LCBJbW0sIFRtcAorCithcm02NDogT3JMZWZ0U2hpZnQzMiBVOkc6MzIsIFU6RzozMiwgVTpHOjMy
LCBaRDpHOjMyCisgICAgVG1wLCBUbXAsIEltbSwgVG1wCisKK2FybTY0OiBPclJpZ2h0U2hpZnQz
MiBVOkc6MzIsIFU6RzozMiwgVTpHOjMyLCBaRDpHOjMyCisgICAgVG1wLCBUbXAsIEltbSwgVG1w
CisKK2FybTY0OiBPclVuc2lnbmVkUmlnaHRTaGlmdDMyIFU6RzozMiwgVTpHOjMyLCBVOkc6MzIs
IFpEOkc6MzIKKyAgICBUbXAsIFRtcCwgSW1tLCBUbXAKKworYXJtNjQ6IE9yTGVmdFNoaWZ0NjQg
VTpHOjY0LCBVOkc6NjQsIFU6Rzo2NCwgRDpHOjY0CisgICAgVG1wLCBUbXAsIEltbSwgVG1wCisK
K2FybTY0OiBPclJpZ2h0U2hpZnQ2NCBVOkc6NjQsIFU6Rzo2NCwgVTpHOjY0LCBEOkc6NjQKKyAg
ICBUbXAsIFRtcCwgSW1tLCBUbXAKKworYXJtNjQ6IE9yVW5zaWduZWRSaWdodFNoaWZ0NjQgVTpH
OjY0LCBVOkc6NjQsIFU6Rzo2NCwgRDpHOjY0CisgICAgVG1wLCBUbXAsIEltbSwgVG1wCisKICMg
VGhlIGZpcnN0IG9wZXJhbmQgaXMgcmF4LgogIyBGSVhNRTogVGhpcyBmb3JtdWxhdGlvbiBtZWFu
cyB0aGF0IHRoZSBib29sZWFuIHJlc3VsdCBjYW5ub3QgYmUgcHV0IGluIGVheCwgZXZlbiB0aG91
Z2ggYWxsIHVzZXJzCiAjIG9mIHRoaXMgd291bGQgYmUgT0sgd2l0aCB0aGF0LgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL3Rlc3RiMy5oCmluZGV4IDcyMWViM2FkZDYyNzQ4ZTJmYjAyZGRmNDI1NTdjYzU5ZDVk
ODgwZWIuLjlhYTQwZDEyMWVlNGVjZjI2ZTk0ZjdlNTlmYjE0ZjkzNWJlYTljYjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvdGVzdGIzLmgKQEAgLTQ3MSw2ICs0NzEsMjggQEAgdm9pZCB0ZXN0U3ViV2l0
aFVuc2lnbmVkUmlnaHRTaGlmdDMyKCk7CiB2b2lkIHRlc3RTdWJXaXRoTGVmdFNoaWZ0NjQoKTsK
IHZvaWQgdGVzdFN1YldpdGhSaWdodFNoaWZ0NjQoKTsKIHZvaWQgdGVzdFN1YldpdGhVbnNpZ25l
ZFJpZ2h0U2hpZnQ2NCgpOworCit2b2lkIHRlc3RBbmRMZWZ0U2hpZnQzMigpOwordm9pZCB0ZXN0
QW5kUmlnaHRTaGlmdDMyKCk7Cit2b2lkIHRlc3RBbmRVbnNpZ25lZFJpZ2h0U2hpZnQzMigpOwor
dm9pZCB0ZXN0QW5kTGVmdFNoaWZ0NjQoKTsKK3ZvaWQgdGVzdEFuZFJpZ2h0U2hpZnQ2NCgpOwor
dm9pZCB0ZXN0QW5kVW5zaWduZWRSaWdodFNoaWZ0NjQoKTsKKwordm9pZCB0ZXN0WG9yTGVmdFNo
aWZ0MzIoKTsKK3ZvaWQgdGVzdFhvclJpZ2h0U2hpZnQzMigpOwordm9pZCB0ZXN0WG9yVW5zaWdu
ZWRSaWdodFNoaWZ0MzIoKTsKK3ZvaWQgdGVzdFhvckxlZnRTaGlmdDY0KCk7Cit2b2lkIHRlc3RY
b3JSaWdodFNoaWZ0NjQoKTsKK3ZvaWQgdGVzdFhvclVuc2lnbmVkUmlnaHRTaGlmdDY0KCk7CisK
K3ZvaWQgdGVzdE9yTGVmdFNoaWZ0MzIoKTsKK3ZvaWQgdGVzdE9yUmlnaHRTaGlmdDMyKCk7Cit2
b2lkIHRlc3RPclVuc2lnbmVkUmlnaHRTaGlmdDMyKCk7Cit2b2lkIHRlc3RPckxlZnRTaGlmdDY0
KCk7Cit2b2lkIHRlc3RPclJpZ2h0U2hpZnQ2NCgpOwordm9pZCB0ZXN0T3JVbnNpZ25lZFJpZ2h0
U2hpZnQ2NCgpOworCiB2b2lkIHRlc3RTZWxlY3RDb21wYXJlRG91YmxlKCk7CiB2b2lkIHRlc3RT
ZWxlY3RDb21wYXJlRmxvYXQoZmxvYXQsIGZsb2F0KTsKIHZvaWQgdGVzdFNlbGVjdENvbXBhcmVG
bG9hdFRvRG91YmxlKGZsb2F0LCBmbG9hdCk7CkBAIC05MTcsNyArOTM5LDggQEAgdm9pZCB0ZXN0
TXVsTmVnQXJnQXJnKGludCwgaW50KTsKIHZvaWQgdGVzdE11bEFyZ0ltbShpbnQ2NF90LCBpbnQ2
NF90KTsKIHZvaWQgdGVzdE11bEltbUFyZyhpbnQsIGludCk7CiB2b2lkIHRlc3RNdWxBcmdzMzIo
aW50LCBpbnQpOwotdm9pZCB0ZXN0TXVsQXJnczMyU2lnbkV4dGVuZChpbnQsIGludCk7Cit2b2lk
IHRlc3RNdWxBcmdzMzJTaWduRXh0ZW5kKCk7Cit2b2lkIHRlc3RNdWxBcmdzMzJaZXJvRXh0ZW5k
KCk7CiB2b2lkIHRlc3RNdWxJbW0zMlNpZ25FeHRlbmQoY29uc3QgaW50LCBpbnQpOwogdm9pZCB0
ZXN0TXVsTG9hZFR3aWNlKCk7CiB2b2lkIHRlc3RNdWxBZGRBcmdzTGVmdCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18yLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy90ZXN0YjNfMi5jcHAKaW5kZXggMjRiM2Y4Mzg3MmEwZmNiZTY5MzRmM2JhMGM5
MTA3YWNhNzE0MDE1NC4uNTEzNjgxN2YyY2I0OWExZjI1YTZiMjU1NmM1MDkzMGNjYzg1ZGQ4YyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18yLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzIuY3BwCkBAIC0xMjI4LDEwICsxMjI4LDEw
IEBAIHZvaWQgdGVzdE11bEFyZ3MzMihpbnQgYSwgaW50IGIpCiAgICAgQ0hFQ0soY29tcGlsZUFu
ZFJ1bjxpbnQ+KHByb2MsIGEsIGIpID09IGEgKiBiKTsKIH0KIAotdm9pZCB0ZXN0TXVsQXJnczMy
U2lnbkV4dGVuZChpbnQgYSwgaW50IGIpCit2b2lkIHRlc3RNdWxBcmdzMzJTaWduRXh0ZW5kKCkK
IHsKICAgICBQcm9jZWR1cmUgcHJvYzsKLSAgICBpZiAocHJvYy5vcHRMZXZlbCgpIDwgMSkKKyAg
ICBpZiAocHJvYy5vcHRMZXZlbCgpIDwgMikKICAgICAgICAgcmV0dXJuOwogICAgIEJhc2ljQmxv
Y2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CiAgICAgVmFsdWUqIGFyZzEgPSByb290LT5hcHBl
bmROZXc8VmFsdWU+KApAQCAtMTI0Niw4ICsxMjQ2LDQ2IEBAIHZvaWQgdGVzdE11bEFyZ3MzMlNp
Z25FeHRlbmQoaW50IGEsIGludCBiKQogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShw
cm9jLCBSZXR1cm4sIE9yaWdpbigpLCBtdWwpOwogCiAgICAgYXV0byBjb2RlID0gY29tcGlsZVBy
b2MocHJvYyk7CisgICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rp
b24oKmNvZGUsICJzbXVsbCIpOworCisgICAgZm9yIChhdXRvIG5PcGVyYW5kIDogaW50MzJPcGVy
YW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtT3BlcmFuZCA6IGludDMyT3BlcmFuZHMoKSkg
eworICAgICAgICAgICAgaW50MzJfdCBuID0gbk9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICBp
bnQzMl90IG0gPSBtT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgIENIRUNLX0VRKGludm9rZTxp
bnQ2NF90PigqY29kZSwgbiwgbSksIHN0YXRpY19jYXN0PGludDY0X3Q+KG4pICogc3RhdGljX2Nh
c3Q8aW50NjRfdD4obSkpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RNdWxBcmdz
MzJaZXJvRXh0ZW5kKCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBpZiAocHJvYy5vcHRM
ZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9j
LmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIGFyZzEgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAor
ICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxB
cmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7
CisgICAgVmFsdWUqIGFyZzIgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICBwcm9j
LCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1Zh
bHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSk7CisgICAgVmFsdWUq
IGxlZnQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFpFeHQzMiwgT3JpZ2luKCksIGFy
ZzEpOworICAgIFZhbHVlKiByaWdodCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgWkV4
dDMyLCBPcmlnaW4oKSwgYXJnMik7CisgICAgVmFsdWUqIG11bCA9IHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4ocHJvYywgTXVsLCBPcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJvb3QtPmFwcGVu
ZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBtdWwpOworCisgICAgYXV0
byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAg
Y2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJ1bXVsbCIpOwogCi0gICAgQ0hFQ0soaW52b2tl
PGxvbmcgaW50PigqY29kZSwgYSwgYikgPT0gKChsb25nIGludCkgYSkgKiAoKGxvbmcgaW50KSBi
KSk7CisgICAgZm9yIChhdXRvIG5PcGVyYW5kIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAg
IGZvciAoYXV0byBtT3BlcmFuZCA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICAgICAgdWlu
dDMyX3QgbiA9IG5PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgdWludDMyX3QgbSA9IG1PcGVy
YW5kLnZhbHVlOworICAgICAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPHVpbnQ2NF90PigqY29kZSwg
biwgbSksIHN0YXRpY19jYXN0PHVpbnQ2NF90PihuKSAqIHN0YXRpY19jYXN0PHVpbnQ2NF90Piht
KSk7CisgICAgICAgIH0KKyAgICB9CiB9CiAKIHZvaWQgdGVzdE11bEltbTMyU2lnbkV4dGVuZChj
b25zdCBpbnQgYSwgaW50IGIpCkBAIC01NDYxLDE2MyArNTQ5OSw5MTkgQEAgdm9pZCB0ZXN0U3Vi
V2l0aFVuc2lnbmVkUmlnaHRTaGlmdDY0KCkKICAgICB9CiB9CiAKLXZvaWQgdGVzdEJpdEFuZFpl
cm9TaGlmdFJpZ2h0QXJnSW1tTWFzazMyKCkKK3ZvaWQgdGVzdEFuZExlZnRTaGlmdDMyKCkKIHsK
LSAgICAvLyBUdXJuIHRoaXM6ICh0bXAgPj4gaW1tKSAmIG1hc2sgCi0gICAgLy8gSW50byB0aGlz
OiB0bXAgPj4gaW1tCi0gICAgdWludDMyX3QgdG1wID0gMHhmZmZmZmZmZjsKLSAgICBWZWN0b3I8
dWludDMyX3Q+IGltbXMgPSB7IDQsIDI4LCAzMSB9OwotICAgIFZlY3Rvcjx1aW50MzJfdD4gbWFz
a3MgPSB7IDB4MGZmZmZmZmYsIDB4ZiwgMHhmZmZmIH07CisgICAgaWYgKEpTQzo6T3B0aW9uczo6
ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8aW50
MzJfdD4gYW1vdW50cyA9IHsgMSwgMTcsIDMxIH07CiAKLSAgICBhdXRvIHRlc3QgPSBbJl0gKHVp
bnQzMl90IGltbSwgdWludDMyX3QgbWFzaykgeworICAgIC8vIFRlc3QgUGF0dGVybjogZCA9IG4g
JiAobSA8PCBhbW91bnQpCisgICAgYXV0byB0ZXN0ID0gWyZdIChpbnQzMl90IG4sIGludDMyX3Qg
bSwgaW50MzJfdCBhbW91bnQpIC0+IGludDMyX3QgewogICAgICAgICBQcm9jZWR1cmUgcHJvYzsK
ICAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKIAotICAgICAgICBW
YWx1ZSogdG1wVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICBWYWx1ZSog
blZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKICAgICAgICAgICAgIHByb2MsIFRydW5j
LCBPcmlnaW4oKSwgCiAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOwotICAgICAgICBWYWx1
ZSogaW1tVmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgaW1tKTsKLSAgICAgICAgVmFsdWUqIGxlZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgWlNociwgT3JpZ2luKCksIHRtcFZhbHVlLCBpbW1WYWx1ZSk7Ci0gICAgICAgIFZh
bHVlKiByaWdodFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIG1hc2spOworICAgICAgICBWYWx1ZSogbVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZh
bHVlPigKKyAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwgCisgICAgICAgICAgICBy
b290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86
OmFyZ3VtZW50R1BSMSkpOworICAgICAgICBWYWx1ZSogYW1vdW50VmFsdWUgPSByb290LT5hcHBl
bmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYW1vdW50KTsKKworICAgICAgICBW
YWx1ZSogc2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU2hsLCBPcmln
aW4oKSwgbVZhbHVlLCBhbW91bnRWYWx1ZSk7CiAgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRy
b2xWYWx1ZSgKLSAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCi0gICAgICAgICAg
ICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdEFuZCwgT3JpZ2luKCksIGxlZnRWYWx1
ZSwgcmlnaHRWYWx1ZSkpOworICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgCisg
ICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdEFuZCwgT3JpZ2luKCks
IG5WYWx1ZSwgc2hpZnRWYWx1ZSkpOwogCiAgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9j
KHByb2MpOwotICAgICAgICBpZiAoaXNBUk02NCgpKQotICAgICAgICAgICAgY2hlY2tVc2VzSW5z
dHJ1Y3Rpb24oKmNvZGUsICJsc3IiKTsKLSAgICAgICAgdWludDMyX3QgbGhzID0gaW52b2tlPHVp
bnQzMl90PigqY29kZSwgdG1wKTsKLSAgICAgICAgdWludDMyX3QgcmhzID0gdG1wID4+IGltbTsK
LSAgICAgICAgQ0hFQ0sobGhzID09IHJocyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkpIHsKKyAg
ICAgICAgICAgIHN0ZDo6c3RyaW5nIHJlZ2V4KCIuKmFuZC4qLC4qLC4qLC4qbHNsICMiKTsKKyAg
ICAgICAgICAgIHJlZ2V4ICs9IHN0ZDo6dG9fc3RyaW5nKGFtb3VudCkgKyAiLioiOworICAgICAg
ICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsIHJlZ2V4LmNfc3RyKCksIHRydWUpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBpbnZva2U8aW50MzJfdD4oKmNvZGUsIG4sIG0pOwog
ICAgIH07CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGltbXMuc2l6ZSgpOyArK2kpCi0g
ICAgICAgIHRlc3QoaW1tcy5hdChpKSwgbWFza3MuYXQoaSkpOworICAgIGZvciAoYXV0byBuT3Bl
cmFuZCA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbU9wZXJhbmQgOiBp
bnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRz
KSB7CisgICAgICAgICAgICAgICAgaW50MzJfdCBuID0gbk9wZXJhbmQudmFsdWU7CisgICAgICAg
ICAgICAgICAgaW50MzJfdCBtID0gbU9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgQ0hF
Q0tfRVEodGVzdChuLCBtLCBhbW91bnQpLCBuICYgKG0gPDwgYW1vdW50KSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CiB9CiAKLXZvaWQgdGVzdEJpdEFuZFplcm9TaGlmdFJpZ2h0
QXJnSW1tTWFzazY0KCkKK3ZvaWQgdGVzdEFuZFJpZ2h0U2hpZnQzMigpCiB7Ci0gICAgLy8gVHVy
biB0aGlzOiAodG1wID4+IGltbSkgJiBtYXNrIAotICAgIC8vIEludG8gdGhpczogdG1wID4+IGlt
bQotICAgIHVpbnQ2NF90IHRtcCA9IDB4ZmZmZmZmZmZmZmZmZmZmZjsKLSAgICBWZWN0b3I8dWlu
dDY0X3Q+IGltbXMgPSB7IDQsIDYwLCA2MyB9OwotICAgIFZlY3Rvcjx1aW50NjRfdD4gbWFza3Mg
PSB7IDB4MGZmZmZmZmZmZmZmZmZmZiwgMHhmLCAweGZmZmYgfTsKKyAgICBpZiAoSlNDOjpPcHRp
b25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIFZlY3Rv
cjxpbnQzMl90PiBhbW91bnRzID0geyAxLCAxNywgMzEgfTsKIAotICAgIGF1dG8gdGVzdCA9IFsm
XSAodWludDY0X3QgaW1tLCB1aW50NjRfdCBtYXNrKSB7CisgICAgLy8gVGVzdCBQYXR0ZXJuOiBk
ID0gbiAmIChtID4+IGFtb3VudCkKKyAgICBhdXRvIHRlc3QgPSBbJl0gKGludDMyX3QgbiwgaW50
MzJfdCBtLCBpbnQzMl90IGFtb3VudCkgLT4gaW50MzJfdCB7CiAgICAgICAgIFByb2NlZHVyZSBw
cm9jOwogICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOwogCi0gICAg
ICAgIFZhbHVlKiB0bXBWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICAgICAgVmFsdWUqIGlt
bVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGlt
bSk7Ci0gICAgICAgIFZhbHVlKiBsZWZ0VmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHBy
b2MsIFpTaHIsIE9yaWdpbigpLCB0bXBWYWx1ZSwgaW1tVmFsdWUpOwotICAgICAgICBWYWx1ZSog
cmlnaHRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigp
LCBtYXNrKTsKKyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
CisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjApKTsKKyAgICAgICAgVmFsdWUqIG1WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjEpKTsKKyAgICAgICAgVmFsdWUqIGFtb3VudFZhbHVlID0gcm9vdC0+YXBwZW5k
TmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGFtb3VudCk7CisKKyAgICAgICAgVmFs
dWUqIHNoaWZ0VmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNTaHIsIE9yaWdp
bigpLCBtVmFsdWUsIGFtb3VudFZhbHVlKTsKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJv
bFZhbHVlKAotICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKLSAgICAgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgbGVmdFZhbHVl
LCByaWdodFZhbHVlKSk7CisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCAKKyAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwg
blZhbHVlLCBzaGlmdFZhbHVlKSk7CiAKICAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2Mo
cHJvYyk7Ci0gICAgICAgIGlmIChpc0FSTTY0KCkpCi0gICAgICAgICAgICBjaGVja1VzZXNJbnN0
cnVjdGlvbigqY29kZSwgImxzciIpOwotICAgICAgICB1aW50NjRfdCBsaHMgPSBpbnZva2U8dWlu
dDY0X3Q+KCpjb2RlLCB0bXApOwotICAgICAgICB1aW50NjRfdCByaHMgPSB0bXAgPj4gaW1tOwot
ICAgICAgICBDSEVDSyhsaHMgPT0gcmhzKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkgeworICAg
ICAgICAgICAgc3RkOjpzdHJpbmcgcmVnZXgoIi4qYW5kLiosLiosLiosLiphc3IgIyIpOworICAg
ICAgICAgICAgcmVnZXggKz0gc3RkOjp0b19zdHJpbmcoYW1vdW50KSArICIuKiI7CisgICAgICAg
ICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgcmVnZXguY19zdHIoKSwgdHJ1ZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQzMl90PigqY29kZSwgbiwgbSk7CiAg
ICAgfTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW1tcy5zaXplKCk7ICsraSkKLSAg
ICAgICAgdGVzdChpbW1zLmF0KGkpLCBtYXNrcy5hdChpKSk7CisgICAgZm9yIChhdXRvIG5PcGVy
YW5kIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtT3BlcmFuZCA6IGlu
dDMyT3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMp
IHsKKyAgICAgICAgICAgICAgICBpbnQzMl90IG4gPSBuT3BlcmFuZC52YWx1ZTsKKyAgICAgICAg
ICAgICAgICBpbnQzMl90IG0gPSBtT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBDSEVD
S19FUSh0ZXN0KG4sIG0sIGFtb3VudCksIG4gJiAobSA+PiBhbW91bnQpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KIH0KIAotc3RhdGljIHZvaWQgdGVzdEJpdEFuZEFyZ3MoaW50
NjRfdCBhLCBpbnQ2NF90IGIpCit2b2lkIHRlc3RBbmRVbnNpZ25lZFJpZ2h0U2hpZnQzMigpCiB7
Ci0gICAgUHJvY2VkdXJlIHByb2M7Ci0gICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxv
Y2soKTsKLSAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCi0gICAgICAgIHByb2MsIFJl
dHVybiwgT3JpZ2luKCksCi0gICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCi0gICAgICAg
ICAgICBwcm9jLCBCaXRBbmQsIE9yaWdpbigpLAotICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
LAotICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9y
aWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKSk7CisgICAgaWYgKEpTQzo6T3B0aW9uczo6
ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8dWlu
dDMyX3Q+IGFtb3VudHMgPSB7IDEsIDE3LCAzMSB9OwogCi0gICAgQ0hFQ0soY29tcGlsZUFuZFJ1
bjxpbnQ2NF90Pihwcm9jLCBhLCBiKSA9PSAoYSAmIGIpKTsKLX0KKyAgICAvLyBUZXN0IFBhdHRl
cm46IGQgPSBuICYgKG0gPj4gYW1vdW50KQorICAgIGF1dG8gdGVzdCA9IFsmXSAodWludDMyX3Qg
biwgdWludDMyX3QgbSwgdWludDMyX3QgYW1vdW50KSAtPiB1aW50MzJfdCB7CisgICAgICAgIFBy
b2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygp
OwogCi1zdGF0aWMgdm9pZCB0ZXN0Qml0QW5kU2FtZUFyZyhpbnQ2NF90IGEpCi17Ci0gICAgUHJv
Y2VkdXJlIHByb2M7Ci0gICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKLSAg
ICBWYWx1ZSogYXJndW1lbnQgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgcm9vdC0+YXBwZW5kTmV3
Q29udHJvbFZhbHVlKAotICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAotICAgICAgICBy
b290LT5hcHBlbmROZXc8VmFsdWU+KAotICAgICAgICAgICAgcHJvYywgQml0QW5kLCBPcmlnaW4o
KSwKLSAgICAgICAgICAgIGFyZ3VtZW50LAotICAgICAgICAgICAgYXJndW1lbnQpKTsKKyAgICAg
ICAgVmFsdWUqIG5WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBw
cm9jLCBUcnVuYywgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3Vt
ZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAg
ICAgICAgVmFsdWUqIG1WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAg
ICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFy
Z3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKTsK
KyAgICAgICAgVmFsdWUqIGFtb3VudFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIGFtb3VudCk7CiAKLSAgICBDSEVDSyhjb21waWxlQW5kUnVuPGlu
dDY0X3Q+KHByb2MsIGEpID09IGEpOwotfQorICAgICAgICBWYWx1ZSogc2hpZnRWYWx1ZSA9IHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgWlNociwgT3JpZ2luKCksIG1WYWx1ZSwgYW1vdW50
VmFsdWUpOworICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgICAg
ICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgblZhbHVlLCBzaGlmdFZhbHVlKSk7CiAKLXN0
YXRpYyB2b2lkIHRlc3RCaXRBbmROb3ROb3QoaW50NjRfdCBhLCBpbnQ2NF90IGIpCi17Ci0gICAg
UHJvY2VkdXJlIHByb2M7Ci0gICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsK
LSAgICBWYWx1ZSogYXJnQSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICBWYWx1ZSogYXJnQiA9IHJv
b3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIxKTsKLSAgICBWYWx1ZSogbm90QSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgQml0WG9yLCBPcmlnaW4oKSwgYXJnQSwgcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIC0xKSk7Ci0gICAgVmFsdWUqIG5vdEIgPSByb290LT5hcHBlbmRO
ZXc8VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIGFyZ0IsIHJvb3QtPmFwcGVuZE5ldzxD
b25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCAtMSkpOwotICAgIHJvb3QtPmFwcGVuZE5ld0Nv
bnRyb2xWYWx1ZSgKLSAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKLSAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPigKLSAgICAgICAgICAgIHByb2MsIEJpdEFuZCwgT3JpZ2luKCks
Ci0gICAgICAgICAgICBub3RBLAotICAgICAgICAgICAgbm90QikpOworICAgICAgICBhdXRvIGNv
ZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkgeworICAgICAg
ICAgICAgc3RkOjpzdHJpbmcgcmVnZXgoIi4qYW5kLiosLiosLiosLipsc3IgIyIpOworICAgICAg
ICAgICAgcmVnZXggKz0gc3RkOjp0b19zdHJpbmcoYW1vdW50KSArICIuKiI7CisgICAgICAgICAg
ICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgcmVnZXguY19zdHIoKSwgdHJ1ZSk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGludm9rZTx1aW50MzJfdD4oKmNvZGUsIG4sIG0pOworICAg
IH07CiAKLSAgICBDSEVDS19FUShjb21waWxlQW5kUnVuPGludDY0X3Q+KHByb2MsIGEsIGIpLCAo
fmEgJiB+YikpOworICAgIGZvciAoYXV0byBuT3BlcmFuZCA6IGludDMyT3BlcmFuZHMoKSkgewor
ICAgICAgICBmb3IgKGF1dG8gbU9wZXJhbmQgOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAg
ICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgdWludDMy
X3QgbiA9IG5PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIHVpbnQzMl90IG0gPSBtT3Bl
cmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUSh0ZXN0KG4sIG0sIGFtb3VudCks
IG4gJiAobSA+PiBhbW91bnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KIH0K
IAotc3RhdGljIHZvaWQgdGVzdEJpdEFuZE5vdE5vdDMyKGludDMyX3QgYSwgaW50MzJfdCBiKQor
dm9pZCB0ZXN0QW5kTGVmdFNoaWZ0NjQoKQogewotICAgIFByb2NlZHVyZSBwcm9jOwotICAgIEJh
c2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7Ci0gICAgVmFsdWUqIGFyZ0EgPSByb290
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFRydW5jLCBPcmlnaW4oKSwgcm9vdC0+YXBwZW5kTmV3
PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
KTsKLSAgICBWYWx1ZSogYXJnQiA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgVHJ1bmMs
IE9yaWdpbigpLCByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkpOwotICAgIFZhbHVlKiBub3RBID0gcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9yaWdpbigpLCBhcmdBLCByb290LT5hcHBlbmRO
ZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgLTEpKTsKLSAgICBWYWx1ZSogbm90QiA9
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0WG9yLCBPcmlnaW4oKSwgYXJnQiwgcm9v
dC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIC0xKSk7Ci0gICAgcm9v
dC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAotICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigp
LAotICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAotICAgICAgICAgICAgcHJvYywgQml0
QW5kLCBPcmlnaW4oKSwKLSAgICAgICAgICAgIG5vdEEsCi0gICAgICAgICAgICBub3RCKSk7Cisg
ICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJl
dHVybjsKKyAgICBWZWN0b3I8aW50MzJfdD4gYW1vdW50cyA9IHsgMSwgMzQsIDYzIH07CiAKLSAg
ICBDSEVDS19FUShjb21waWxlQW5kUnVuPGludDMyX3Q+KHByb2MsIGEsIGIpLCAofmEgJiB+Yikp
OwotfQorICAgIC8vIFRlc3QgUGF0dGVybjogZCA9IG4gJiAobSA8PCBhbW91bnQpCisgICAgYXV0
byB0ZXN0ID0gWyZdIChpbnQ2NF90IG4sIGludDY0X3QgbSwgaW50MzJfdCBhbW91bnQpIC0+IGlu
dDY0X3QgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9v
dCA9IHByb2MuYWRkQmxvY2soKTsKIAotc3RhdGljIHZvaWQgdGVzdEJpdEFuZE5vdEltbShpbnQ2
NF90IGEsIGludDY0X3QgYikKLXsKLSAgICBQcm9jZWR1cmUgcHJvYzsKLSAgICBCYXNpY0Jsb2Nr
KiByb290ID0gcHJvYy5hZGRCbG9jaygpOwotICAgIFZhbHVlKiBhcmdBID0gcm9vdC0+YXBwZW5k
TmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApOwotICAgIFZhbHVlKiBub3RBID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRY
b3IsIE9yaWdpbigpLCBhcmdBLCByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgLTEpKTsKLSAgICBWYWx1ZSogY3N0QiA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBiKTsKLSAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFs
dWUoCi0gICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCi0gICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4oCi0gICAgICAgICAgICBwcm9jLCBCaXRBbmQsIE9yaWdpbigpLAotICAgICAg
ICAgICAgbm90QSwKLSAgICAgICAgICAgIGNzdEIpKTsKKyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9
IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgVmFsdWUqIG1WYWx1ZSA9IHJvb3QtPmFwcGVuZE5l
dzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIx
KTsKKyAgICAgICAgVmFsdWUqIGFtb3VudFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIGFtb3VudCk7CiAKLSAgICBDSEVDS19FUShjb21waWxlQW5k
UnVuPGludDY0X3Q+KHByb2MsIGEpLCAofmEgJiBiKSk7CisgICAgICAgIFZhbHVlKiBzaGlmdFZh
bHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTaGwsIE9yaWdpbigpLCBtVmFsdWUs
IGFtb3VudFZhbHVlKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAg
ICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBl
bmROZXc8VmFsdWU+KHByb2MsIEJpdEFuZCwgT3JpZ2luKCksIG5WYWx1ZSwgc2hpZnRWYWx1ZSkp
OworCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAo
aXNBUk02NCgpKSB7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyByZWdleCgiLiphbmQuKiwuKiwu
KiwuKmxzbCAjIik7CisgICAgICAgICAgICByZWdleCArPSBzdGQ6OnRvX3N0cmluZyhhbW91bnQp
ICsgIi4qIjsKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCByZWdleC5j
X3N0cigpLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW52b2tlPGludDY0X3Q+
KCpjb2RlLCBuLCBtKTsKKyAgICB9OworCisgICAgZm9yIChhdXRvIG5PcGVyYW5kIDogaW50NjRP
cGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtT3BlcmFuZCA6IGludDY0T3BlcmFuZHMo
KSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAg
ICAgICAgICBpbnQ2NF90IG4gPSBuT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBpbnQ2
NF90IG0gPSBtT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUSh0ZXN0KG4s
IG0sIGFtb3VudCksIG4gJiAobSA8PCBhbW91bnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KIH0KIAotc3RhdGljIHZvaWQgdGVzdEJpdEFuZE5vdEltbTMyKGludDMyX3QgYSwg
aW50MzJfdCBiKQordm9pZCB0ZXN0QW5kUmlnaHRTaGlmdDY0KCkKIHsKLSAgICBQcm9jZWR1cmUg
cHJvYzsKLSAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOwotICAgIFZhbHVl
KiBhcmdBID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBUcnVuYywgT3JpZ2luKCksIHJv
b3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIwKSk7Ci0gICAgVmFsdWUqIG5vdEEgPSByb290LT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIGFyZ0EsIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFs
dWU+KHByb2MsIE9yaWdpbigpLCAtMSkpOwotICAgIFZhbHVlKiBjc3RCID0gcm9vdC0+YXBwZW5k
TmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGIpOwotICAgIHJvb3QtPmFwcGVuZE5l
d0NvbnRyb2xWYWx1ZSgKLSAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICBpZiAo
SlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOwor
ICAgIFZlY3RvcjxpbnQzMl90PiBhbW91bnRzID0geyAxLCAzNCwgNjMgfTsKKworICAgIC8vIFRl
c3QgUGF0dGVybjogZCA9IG4gJiAobSA+PiBhbW91bnQpCisgICAgYXV0byB0ZXN0ID0gWyZdIChp
bnQ2NF90IG4sIGludDY0X3QgbSwgaW50MzJfdCBhbW91bnQpIC0+IGludDY0X3QgeworICAgICAg
ICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxv
Y2soKTsKKworICAgICAgICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50
UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAg
ICBWYWx1ZSogbVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBWYWx1ZSogYW1vdW50
VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYW1v
dW50KTsKKworICAgICAgICBWYWx1ZSogc2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgU1NociwgT3JpZ2luKCksIG1WYWx1ZSwgYW1vdW50VmFsdWUpOworICAgICAgICBy
b290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9y
aWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5k
LCBPcmlnaW4oKSwgblZhbHVlLCBzaGlmdFZhbHVlKSk7CisKKyAgICAgICAgYXV0byBjb2RlID0g
Y29tcGlsZVByb2MocHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkpIHsKKyAgICAgICAgICAg
IHN0ZDo6c3RyaW5nIHJlZ2V4KCIuKmFuZC4qLC4qLC4qLC4qYXNyICMiKTsKKyAgICAgICAgICAg
IHJlZ2V4ICs9IHN0ZDo6dG9fc3RyaW5nKGFtb3VudCkgKyAiLioiOworICAgICAgICAgICAgY2hl
Y2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsIHJlZ2V4LmNfc3RyKCksIHRydWUpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBpbnZva2U8aW50NjRfdD4oKmNvZGUsIG4sIG0pOworICAgIH07CisK
KyAgICBmb3IgKGF1dG8gbk9wZXJhbmQgOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9y
IChhdXRvIG1PcGVyYW5kIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1
dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAgICAgIGludDY0X3QgbiA9IG5PcGVy
YW5kLnZhbHVlOworICAgICAgICAgICAgICAgIGludDY0X3QgbSA9IG1PcGVyYW5kLnZhbHVlOwor
ICAgICAgICAgICAgICAgIENIRUNLX0VRKHRlc3QobiwgbSwgYW1vdW50KSwgbiAmIChtID4+IGFt
b3VudCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RB
bmRVbnNpZ25lZFJpZ2h0U2hpZnQ2NCgpCit7CisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVs
dEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8dWludDMyX3Q+
IGFtb3VudHMgPSB7IDEsIDE3LCAzMSB9OworCisgICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0gbiAm
IChtID4+IGFtb3VudCkKKyAgICBhdXRvIHRlc3QgPSBbJl0gKHVpbnQ2NF90IG4sIHVpbnQ2NF90
IG0sIHVpbnQzMl90IGFtb3VudCkgLT4gdWludDY0X3QgeworICAgICAgICBQcm9jZWR1cmUgcHJv
YzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgICAg
ICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBWYWx1ZSogbVZhbHVl
ID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBWYWx1ZSogYW1vdW50VmFsdWUgPSByb290LT5h
cHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYW1vdW50KTsKKworICAgICAg
ICBWYWx1ZSogc2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgWlNociwg
T3JpZ2luKCksIG1WYWx1ZSwgYW1vdW50VmFsdWUpOworICAgICAgICByb290LT5hcHBlbmROZXdD
b250cm9sVmFsdWUoCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCAKKyAgICAg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgblZh
bHVlLCBzaGlmdFZhbHVlKSk7CisKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJv
Yyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkpIHsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHJl
Z2V4KCIuKmFuZC4qLC4qLC4qLC4qbHNyICMiKTsKKyAgICAgICAgICAgIHJlZ2V4ICs9IHN0ZDo6
dG9fc3RyaW5nKGFtb3VudCkgKyAiLioiOworICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rp
b24oKmNvZGUsIHJlZ2V4LmNfc3RyKCksIHRydWUpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBpbnZva2U8dWludDY0X3Q+KCpjb2RlLCBuLCBtKTsKKyAgICB9OworCisgICAgZm9yIChhdXRv
IG5PcGVyYW5kIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtT3BlcmFu
ZCA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFt
b3VudHMpIHsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBuID0gbk9wZXJhbmQudmFsdWU7Cisg
ICAgICAgICAgICAgICAgdWludDY0X3QgbSA9IG1PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAg
ICAgIENIRUNLX0VRKHRlc3QobiwgbSwgYW1vdW50KSwgbiAmIChtID4+IGFtb3VudCkpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RYb3JMZWZ0U2hpZnQz
MigpCit7CisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisg
ICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8aW50MzJfdD4gYW1vdW50cyA9IHsgMSwgMTcsIDMx
IH07CisKKyAgICAvLyBUZXN0IFBhdHRlcm46IGQgPSBuIF4gKG0gPDwgYW1vdW50KQorICAgIGF1
dG8gdGVzdCA9IFsmXSAoaW50MzJfdCBuLCBpbnQzMl90IG0sIGludDMyX3QgYW1vdW50KSAtPiBp
bnQzMl90IHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJv
b3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAorICAg
ICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgVmFsdWUqIG1WYWx1ZSA9IHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAor
ICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKTsKKyAgICAgICAgVmFsdWUqIGFtb3VudFZhbHVl
ID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGFtb3VudCk7
CisKKyAgICAgICAgVmFsdWUqIHNoaWZ0VmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHBy
b2MsIFNobCwgT3JpZ2luKCksIG1WYWx1ZSwgYW1vdW50VmFsdWUpOworICAgICAgICByb290LT5h
cHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigp
LCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0WG9yLCBPcmln
aW4oKSwgblZhbHVlLCBzaGlmdFZhbHVlKSk7CisKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGls
ZVByb2MocHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkpIHsKKyAgICAgICAgICAgIHN0ZDo6
c3RyaW5nIHJlZ2V4KCIuKmVvci4qLC4qLC4qLC4qbHNsICMiKTsKKyAgICAgICAgICAgIHJlZ2V4
ICs9IHN0ZDo6dG9fc3RyaW5nKGFtb3VudCkgKyAiLioiOworICAgICAgICAgICAgY2hlY2tVc2Vz
SW5zdHJ1Y3Rpb24oKmNvZGUsIHJlZ2V4LmNfc3RyKCksIHRydWUpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBpbnZva2U8aW50MzJfdD4oKmNvZGUsIG4sIG0pOworICAgIH07CisKKyAgICBm
b3IgKGF1dG8gbk9wZXJhbmQgOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRv
IG1PcGVyYW5kIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1v
dW50IDogYW1vdW50cykgeworICAgICAgICAgICAgICAgIGludDMyX3QgbiA9IG5PcGVyYW5kLnZh
bHVlOworICAgICAgICAgICAgICAgIGludDMyX3QgbSA9IG1PcGVyYW5kLnZhbHVlOworICAgICAg
ICAgICAgICAgIENIRUNLX0VRKHRlc3QobiwgbSwgYW1vdW50KSwgbiBeIChtIDw8IGFtb3VudCkp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RYb3JSaWdo
dFNoaWZ0MzIoKQoreworICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkg
PCAyKQorICAgICAgICByZXR1cm47CisgICAgVmVjdG9yPGludDMyX3Q+IGFtb3VudHMgPSB7IDEs
IDE3LCAzMSB9OworCisgICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0gbiBeIChtID4+IGFtb3VudCkK
KyAgICBhdXRvIHRlc3QgPSBbJl0gKGludDMyX3QgbiwgaW50MzJfdCBtLCBpbnQzMl90IGFtb3Vu
dCkgLT4gaW50MzJfdCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Js
b2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBuVmFsdWUgPSBy
b290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigp
LCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgIFZhbHVlKiBtVmFsdWUg
PSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdp
bigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSk7CisgICAgICAgIFZhbHVlKiBhbW91
bnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBh
bW91bnQpOworCisgICAgICAgIFZhbHVlKiBzaGlmdFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZh
bHVlPihwcm9jLCBTU2hyLCBPcmlnaW4oKSwgbVZhbHVlLCBhbW91bnRWYWx1ZSk7CisgICAgICAg
IHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgICAgIHByb2MsIFJldHVybiwg
T3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRY
b3IsIE9yaWdpbigpLCBuVmFsdWUsIHNoaWZ0VmFsdWUpKTsKKworICAgICAgICBhdXRvIGNvZGUg
PSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkgeworICAgICAgICAg
ICAgc3RkOjpzdHJpbmcgcmVnZXgoIi4qZW9yLiosLiosLiosLiphc3IgIyIpOworICAgICAgICAg
ICAgcmVnZXggKz0gc3RkOjp0b19zdHJpbmcoYW1vdW50KSArICIuKiI7CisgICAgICAgICAgICBj
aGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgcmVnZXguY19zdHIoKSwgdHJ1ZSk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQzMl90PigqY29kZSwgbiwgbSk7CisgICAgfTsK
KworICAgIGZvciAoYXV0byBuT3BlcmFuZCA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICBm
b3IgKGF1dG8gbU9wZXJhbmQgOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAo
YXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgaW50MzJfdCBuID0gbk9w
ZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgaW50MzJfdCBtID0gbU9wZXJhbmQudmFsdWU7
CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEodGVzdChuLCBtLCBhbW91bnQpLCBuIF4gKG0gPj4g
YW1vdW50KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgdGVz
dFhvclVuc2lnbmVkUmlnaHRTaGlmdDMyKCkKK3sKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZh
dWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIFZlY3Rvcjx1aW50MzJf
dD4gYW1vdW50cyA9IHsgMSwgMTcsIDMxIH07CisKKyAgICAvLyBUZXN0IFBhdHRlcm46IGQgPSBu
IF4gKG0gPj4gYW1vdW50KQorICAgIGF1dG8gdGVzdCA9IFsmXSAodWludDMyX3QgbiwgdWludDMy
X3QgbSwgdWludDMyX3QgYW1vdW50KSAtPiB1aW50MzJfdCB7CisgICAgICAgIFByb2NlZHVyZSBw
cm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAg
ICAgIFZhbHVlKiBuVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAg
cHJvYywgVHJ1bmMsIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1
bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7Cisg
ICAgICAgIFZhbHVlKiBtVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAg
ICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxB
cmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSk7
CisgICAgICAgIFZhbHVlKiBhbW91bnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBhbW91bnQpOworCisgICAgICAgIFZhbHVlKiBzaGlmdFZhbHVl
ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBaU2hyLCBPcmlnaW4oKSwgbVZhbHVlLCBh
bW91bnRWYWx1ZSk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAg
ICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9yaWdpbigpLCBuVmFsdWUsIHNoaWZ0VmFsdWUpKTsK
KworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlz
QVJNNjQoKSkgeworICAgICAgICAgICAgc3RkOjpzdHJpbmcgcmVnZXgoIi4qZW9yLiosLiosLios
Lipsc3IgIyIpOworICAgICAgICAgICAgcmVnZXggKz0gc3RkOjp0b19zdHJpbmcoYW1vdW50KSAr
ICIuKiI7CisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgcmVnZXguY19z
dHIoKSwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGludm9rZTx1aW50MzJfdD4o
KmNvZGUsIG4sIG0pOworICAgIH07CisKKyAgICBmb3IgKGF1dG8gbk9wZXJhbmQgOiBpbnQzMk9w
ZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG1PcGVyYW5kIDogaW50MzJPcGVyYW5kcygp
KSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAg
ICAgICAgIHVpbnQzMl90IG4gPSBuT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICB1aW50
MzJfdCBtID0gbU9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEodGVzdChu
LCBtLCBhbW91bnQpLCBuIF4gKG0gPj4gYW1vdW50KSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdFhvckxlZnRTaGlmdDY0KCkKK3sKKyAgICBpZiAoSlND
OjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAg
IFZlY3RvcjxpbnQzMl90PiBhbW91bnRzID0geyAxLCAzNCwgNjMgfTsKKworICAgIC8vIFRlc3Qg
UGF0dGVybjogZCA9IG4gXiAobSA8PCBhbW91bnQpCisgICAgYXV0byB0ZXN0ID0gWyZdIChpbnQ2
NF90IG4sIGludDY0X3QgbSwgaW50MzJfdCBhbW91bnQpIC0+IGludDY0X3QgeworICAgICAgICBQ
cm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2so
KTsKKworICAgICAgICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVn
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBW
YWx1ZSogbVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9y
aWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBWYWx1ZSogYW1vdW50VmFs
dWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYW1vdW50
KTsKKworICAgICAgICBWYWx1ZSogc2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgU2hsLCBPcmlnaW4oKSwgbVZhbHVlLCBhbW91bnRWYWx1ZSk7CisgICAgICAgIHJvb3Qt
PmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2lu
KCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9y
aWdpbigpLCBuVmFsdWUsIHNoaWZ0VmFsdWUpKTsKKworICAgICAgICBhdXRvIGNvZGUgPSBjb21w
aWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkgeworICAgICAgICAgICAgc3Rk
OjpzdHJpbmcgcmVnZXgoIi4qZW9yLiosLiosLiosLipsc2wgIyIpOworICAgICAgICAgICAgcmVn
ZXggKz0gc3RkOjp0b19zdHJpbmcoYW1vdW50KSArICIuKiI7CisgICAgICAgICAgICBjaGVja1Vz
ZXNJbnN0cnVjdGlvbigqY29kZSwgcmVnZXguY19zdHIoKSwgdHJ1ZSk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIGludm9rZTxpbnQ2NF90PigqY29kZSwgbiwgbSk7CisgICAgfTsKKworICAg
IGZvciAoYXV0byBuT3BlcmFuZCA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1
dG8gbU9wZXJhbmQgOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBh
bW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgaW50NjRfdCBuID0gbk9wZXJhbmQu
dmFsdWU7CisgICAgICAgICAgICAgICAgaW50NjRfdCBtID0gbU9wZXJhbmQudmFsdWU7CisgICAg
ICAgICAgICAgICAgQ0hFQ0tfRVEodGVzdChuLCBtLCBhbW91bnQpLCBuIF4gKG0gPDwgYW1vdW50
KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdFhvclJp
Z2h0U2hpZnQ2NCgpCit7CisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwo
KSA8IDIpCisgICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8aW50MzJfdD4gYW1vdW50cyA9IHsg
MSwgMzQsIDYzIH07CisKKyAgICAvLyBUZXN0IFBhdHRlcm46IGQgPSBuIF4gKG0gPj4gYW1vdW50
KQorICAgIGF1dG8gdGVzdCA9IFsmXSAoaW50NjRfdCBuLCBpbnQ2NF90IG0sIGludDMyX3QgYW1v
dW50KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2lj
QmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9
IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgVmFsdWUqIG1WYWx1ZSA9IHJvb3QtPmFwcGVuZE5l
dzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIx
KTsKKyAgICAgICAgVmFsdWUqIGFtb3VudFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIGFtb3VudCk7CisKKyAgICAgICAgVmFsdWUqIHNoaWZ0VmFs
dWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNTaHIsIE9yaWdpbigpLCBtVmFsdWUs
IGFtb3VudFZhbHVlKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAg
ICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBl
bmROZXc8VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIG5WYWx1ZSwgc2hpZnRWYWx1ZSkp
OworCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAo
aXNBUk02NCgpKSB7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyByZWdleCgiLiplb3IuKiwuKiwu
KiwuKmFzciAjIik7CisgICAgICAgICAgICByZWdleCArPSBzdGQ6OnRvX3N0cmluZyhhbW91bnQp
ICsgIi4qIjsKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCByZWdleC5j
X3N0cigpLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW52b2tlPGludDY0X3Q+
KCpjb2RlLCBuLCBtKTsKKyAgICB9OworCisgICAgZm9yIChhdXRvIG5PcGVyYW5kIDogaW50NjRP
cGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtT3BlcmFuZCA6IGludDY0T3BlcmFuZHMo
KSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAg
ICAgICAgICBpbnQ2NF90IG4gPSBuT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBpbnQ2
NF90IG0gPSBtT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUSh0ZXN0KG4s
IG0sIGFtb3VudCksIG4gXiAobSA+PiBhbW91bnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KK30KKwordm9pZCB0ZXN0WG9yVW5zaWduZWRSaWdodFNoaWZ0NjQoKQoreworICAg
IGlmIChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1
cm47CisgICAgVmVjdG9yPHVpbnQzMl90PiBhbW91bnRzID0geyAxLCAxNywgMzEgfTsKKworICAg
IC8vIFRlc3QgUGF0dGVybjogZCA9IG4gXiAobSA+PiBhbW91bnQpCisgICAgYXV0byB0ZXN0ID0g
WyZdICh1aW50NjRfdCBuLCB1aW50NjRfdCBtLCB1aW50MzJfdCBhbW91bnQpIC0+IHVpbnQ2NF90
IHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBw
cm9jLmFkZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJvb3QtPmFwcGVuZE5l
dzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIw
KTsKKyAgICAgICAgVmFsdWUqIG1WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1Zh
bHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgVmFs
dWUqIGFtb3VudFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIGFtb3VudCk7CisKKyAgICAgICAgVmFsdWUqIHNoaWZ0VmFsdWUgPSByb290LT5hcHBl
bmROZXc8VmFsdWU+KHByb2MsIFpTaHIsIE9yaWdpbigpLCBtVmFsdWUsIGFtb3VudFZhbHVlKTsK
KyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICAgICAgcHJvYywg
UmV0dXJuLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHBy
b2MsIEJpdFhvciwgT3JpZ2luKCksIG5WYWx1ZSwgc2hpZnRWYWx1ZSkpOworCisgICAgICAgIGF1
dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKSB7Cisg
ICAgICAgICAgICBzdGQ6OnN0cmluZyByZWdleCgiLiplb3IuKiwuKiwuKiwuKmxzciAjIik7Cisg
ICAgICAgICAgICByZWdleCArPSBzdGQ6OnRvX3N0cmluZyhhbW91bnQpICsgIi4qIjsKKyAgICAg
ICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCByZWdleC5jX3N0cigpLCB0cnVlKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW52b2tlPHVpbnQ2NF90PigqY29kZSwgbiwgbSk7
CisgICAgfTsKKworICAgIGZvciAoYXV0byBuT3BlcmFuZCA6IGludDY0T3BlcmFuZHMoKSkgewor
ICAgICAgICBmb3IgKGF1dG8gbU9wZXJhbmQgOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAg
ICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgdWludDY0
X3QgbiA9IG5PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IG0gPSBtT3Bl
cmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUSh0ZXN0KG4sIG0sIGFtb3VudCks
IG4gXiAobSA+PiBhbW91bnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30K
Kwordm9pZCB0ZXN0T3JMZWZ0U2hpZnQzMigpCit7CisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVm
YXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8aW50MzJf
dD4gYW1vdW50cyA9IHsgMSwgMTcsIDMxIH07CisKKyAgICAvLyBUZXN0IFBhdHRlcm46IGQgPSBu
IHwgKG0gPDwgYW1vdW50KQorICAgIGF1dG8gdGVzdCA9IFsmXSAoaW50MzJfdCBuLCBpbnQzMl90
IG0sIGludDMyX3QgYW1vdW50KSAtPiBpbnQzMl90IHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7
CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICAgICAg
VmFsdWUqIG5WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9j
LCBUcnVuYywgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50
UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAg
ICAgVmFsdWUqIG1WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBw
cm9jLCBUcnVuYywgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3Vt
ZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKTsKKyAg
ICAgICAgVmFsdWUqIGFtb3VudFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIGFtb3VudCk7CisKKyAgICAgICAgVmFsdWUqIHNoaWZ0VmFsdWUgPSBy
b290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNobCwgT3JpZ2luKCksIG1WYWx1ZSwgYW1vdW50
VmFsdWUpOworICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgICAg
ICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4ocHJvYywgQml0T3IsIE9yaWdpbigpLCBuVmFsdWUsIHNoaWZ0VmFsdWUpKTsKKworICAg
ICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQo
KSkgeworICAgICAgICAgICAgc3RkOjpzdHJpbmcgcmVnZXgoIi4qb3JyLiosLiosLiosLipsc2wg
IyIpOworICAgICAgICAgICAgcmVnZXggKz0gc3RkOjp0b19zdHJpbmcoYW1vdW50KSArICIuKiI7
CisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgcmVnZXguY19zdHIoKSwg
dHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQzMl90PigqY29kZSwg
biwgbSk7CisgICAgfTsKKworICAgIGZvciAoYXV0byBuT3BlcmFuZCA6IGludDMyT3BlcmFuZHMo
KSkgeworICAgICAgICBmb3IgKGF1dG8gbU9wZXJhbmQgOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAg
ICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAg
aW50MzJfdCBuID0gbk9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgaW50MzJfdCBtID0g
bU9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEodGVzdChuLCBtLCBhbW91
bnQpLCBuIHwgKG0gPDwgYW1vdW50KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
Cit9CisKK3ZvaWQgdGVzdE9yUmlnaHRTaGlmdDMyKCkKK3sKKyAgICBpZiAoSlNDOjpPcHRpb25z
OjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIFZlY3Rvcjxp
bnQzMl90PiBhbW91bnRzID0geyAxLCAxNywgMzEgfTsKKworICAgIC8vIFRlc3QgUGF0dGVybjog
ZCA9IG4gfCAobSA+PiBhbW91bnQpCisgICAgYXV0byB0ZXN0ID0gWyZdIChpbnQzMl90IG4sIGlu
dDMyX3QgbSwgaW50MzJfdCBhbW91bnQpIC0+IGludDMyX3QgeworICAgICAgICBQcm9jZWR1cmUg
cHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAg
ICAgICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAg
IHByb2MsIFRydW5jLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJn
dW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOwor
ICAgICAgICBWYWx1ZSogbVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAg
ICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8
QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkp
OworICAgICAgICBWYWx1ZSogYW1vdW50VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgYW1vdW50KTsKKworICAgICAgICBWYWx1ZSogc2hpZnRWYWx1
ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU1NociwgT3JpZ2luKCksIG1WYWx1ZSwg
YW1vdW50VmFsdWUpOworICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAg
ICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4ocHJvYywgQml0T3IsIE9yaWdpbigpLCBuVmFsdWUsIHNoaWZ0VmFsdWUpKTsK
KworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlz
QVJNNjQoKSkgeworICAgICAgICAgICAgc3RkOjpzdHJpbmcgcmVnZXgoIi4qb3JyLiosLiosLios
Liphc3IgIyIpOworICAgICAgICAgICAgcmVnZXggKz0gc3RkOjp0b19zdHJpbmcoYW1vdW50KSAr
ICIuKiI7CisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgcmVnZXguY19z
dHIoKSwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQzMl90Pigq
Y29kZSwgbiwgbSk7CisgICAgfTsKKworICAgIGZvciAoYXV0byBuT3BlcmFuZCA6IGludDMyT3Bl
cmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbU9wZXJhbmQgOiBpbnQzMk9wZXJhbmRzKCkp
IHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAg
ICAgICAgaW50MzJfdCBuID0gbk9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgaW50MzJf
dCBtID0gbU9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEodGVzdChuLCBt
LCBhbW91bnQpLCBuIHwgKG0gPj4gYW1vdW50KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9Cit9CisKK3ZvaWQgdGVzdE9yVW5zaWduZWRSaWdodFNoaWZ0MzIoKQoreworICAgIGlm
IChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47
CisgICAgVmVjdG9yPHVpbnQzMl90PiBhbW91bnRzID0geyAxLCAxNywgMzEgfTsKKworICAgIC8v
IFRlc3QgUGF0dGVybjogZCA9IG4gfCAobSA+PiBhbW91bnQpCisgICAgYXV0byB0ZXN0ID0gWyZd
ICh1aW50MzJfdCBuLCB1aW50MzJfdCBtLCB1aW50MzJfdCBhbW91bnQpIC0+IHVpbnQzMl90IHsK
KyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9j
LmFkZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAorICAgICAgICAgICAg
cm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApKTsKKyAgICAgICAgVmFsdWUqIG1WYWx1ZSA9IHJvb3QtPmFwcGVuZE5l
dzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAorICAgICAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjEpKTsKKyAgICAgICAgVmFsdWUqIGFtb3VudFZhbHVlID0gcm9vdC0+
YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGFtb3VudCk7CisKKyAgICAg
ICAgVmFsdWUqIHNoaWZ0VmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFpTaHIs
IE9yaWdpbigpLCBtVmFsdWUsIGFtb3VudFZhbHVlKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3
Q29udHJvbFZhbHVlKAorICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgCisgICAg
ICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdE9yLCBPcmlnaW4oKSwgblZh
bHVlLCBzaGlmdFZhbHVlKSk7CisKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJv
Yyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkpIHsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHJl
Z2V4KCIuKm9yci4qLC4qLC4qLC4qbHNyICMiKTsKKyAgICAgICAgICAgIHJlZ2V4ICs9IHN0ZDo6
dG9fc3RyaW5nKGFtb3VudCkgKyAiLioiOworICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rp
b24oKmNvZGUsIHJlZ2V4LmNfc3RyKCksIHRydWUpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBpbnZva2U8dWludDMyX3Q+KCpjb2RlLCBuLCBtKTsKKyAgICB9OworCisgICAgZm9yIChhdXRv
IG5PcGVyYW5kIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtT3BlcmFu
ZCA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFt
b3VudHMpIHsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBuID0gbk9wZXJhbmQudmFsdWU7Cisg
ICAgICAgICAgICAgICAgdWludDMyX3QgbSA9IG1PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAg
ICAgIENIRUNLX0VRKHRlc3QobiwgbSwgYW1vdW50KSwgbiB8IChtID4+IGFtb3VudCkpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RPckxlZnRTaGlmdDY0
KCkKK3sKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAg
ICAgICAgcmV0dXJuOworICAgIFZlY3RvcjxpbnQzMl90PiBhbW91bnRzID0geyAxLCAzNCwgNjMg
fTsKKworICAgIC8vIFRlc3QgUGF0dGVybjogZCA9IG4gfCAobSA8PCBhbW91bnQpCisgICAgYXV0
byB0ZXN0ID0gWyZdIChpbnQ2NF90IG4sIGludDY0X3QgbSwgaW50MzJfdCBhbW91bnQpIC0+IGlu
dDY0X3QgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9v
dCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgICAgICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBw
ZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApOworICAgICAgICBWYWx1ZSogbVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50
UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAg
ICBWYWx1ZSogYW1vdW50VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgYW1vdW50KTsKKworICAgICAgICBWYWx1ZSogc2hpZnRWYWx1ZSA9IHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU2hsLCBPcmlnaW4oKSwgbVZhbHVlLCBhbW91bnRWYWx1
ZSk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgICAgIHBy
b2MsIFJldHVybiwgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBCaXRPciwgT3JpZ2luKCksIG5WYWx1ZSwgc2hpZnRWYWx1ZSkpOworCisgICAgICAg
IGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKSB7
CisgICAgICAgICAgICBzdGQ6OnN0cmluZyByZWdleCgiLipvcnIuKiwuKiwuKiwuKmxzbCAjIik7
CisgICAgICAgICAgICByZWdleCArPSBzdGQ6OnRvX3N0cmluZyhhbW91bnQpICsgIi4qIjsKKyAg
ICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCByZWdleC5jX3N0cigpLCB0cnVl
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW52b2tlPGludDY0X3Q+KCpjb2RlLCBuLCBt
KTsKKyAgICB9OworCisgICAgZm9yIChhdXRvIG5PcGVyYW5kIDogaW50NjRPcGVyYW5kcygpKSB7
CisgICAgICAgIGZvciAoYXV0byBtT3BlcmFuZCA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAg
ICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBpbnQ2
NF90IG4gPSBuT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBpbnQ2NF90IG0gPSBtT3Bl
cmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUSh0ZXN0KG4sIG0sIGFtb3VudCks
IG4gfCAobSA8PCBhbW91bnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30K
Kwordm9pZCB0ZXN0T3JSaWdodFNoaWZ0NjQoKQoreworICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRl
ZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisgICAgVmVjdG9yPGludDMy
X3Q+IGFtb3VudHMgPSB7IDEsIDM0LCA2MyB9OworCisgICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0g
biB8IChtID4+IGFtb3VudCkKKyAgICBhdXRvIHRlc3QgPSBbJl0gKGludDY0X3QgbiwgaW50NjRf
dCBtLCBpbnQzMl90IGFtb3VudCkgLT4gaW50NjRfdCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9j
OworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAg
IFZhbHVlKiBuVmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIFZhbHVlKiBtVmFsdWUg
PSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIFZhbHVlKiBhbW91bnRWYWx1ZSA9IHJvb3QtPmFw
cGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBhbW91bnQpOworCisgICAgICAg
IFZhbHVlKiBzaGlmdFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTU2hyLCBP
cmlnaW4oKSwgbVZhbHVlLCBhbW91bnRWYWx1ZSk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0Nv
bnRyb2xWYWx1ZSgKKyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksIAorICAgICAg
ICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRPciwgT3JpZ2luKCksIG5WYWx1
ZSwgc2hpZnRWYWx1ZSkpOworCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2Mp
OworICAgICAgICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyByZWdl
eCgiLipvcnIuKiwuKiwuKiwuKmFzciAjIik7CisgICAgICAgICAgICByZWdleCArPSBzdGQ6OnRv
X3N0cmluZyhhbW91bnQpICsgIi4qIjsKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9u
KCpjb2RlLCByZWdleC5jX3N0cigpLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
aW52b2tlPGludDY0X3Q+KCpjb2RlLCBuLCBtKTsKKyAgICB9OworCisgICAgZm9yIChhdXRvIG5P
cGVyYW5kIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtT3BlcmFuZCA6
IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3Vu
dHMpIHsKKyAgICAgICAgICAgICAgICBpbnQ2NF90IG4gPSBuT3BlcmFuZC52YWx1ZTsKKyAgICAg
ICAgICAgICAgICBpbnQ2NF90IG0gPSBtT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBD
SEVDS19FUSh0ZXN0KG4sIG0sIGFtb3VudCksIG4gfCAobSA+PiBhbW91bnQpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0T3JVbnNpZ25lZFJpZ2h0U2hp
ZnQ2NCgpCit7CisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIp
CisgICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8dWludDMyX3Q+IGFtb3VudHMgPSB7IDEsIDE3
LCAzMSB9OworCisgICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0gbiB8IChtID4+IGFtb3VudCkKKyAg
ICBhdXRvIHRlc3QgPSBbJl0gKHVpbnQ2NF90IG4sIHVpbnQ2NF90IG0sIHVpbnQzMl90IGFtb3Vu
dCkgLT4gdWludDY0X3QgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNC
bG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgICAgICBWYWx1ZSogblZhbHVlID0g
cm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApOworICAgICAgICBWYWx1ZSogbVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3
PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEp
OworICAgICAgICBWYWx1ZSogYW1vdW50VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgYW1vdW50KTsKKworICAgICAgICBWYWx1ZSogc2hpZnRWYWx1
ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgWlNociwgT3JpZ2luKCksIG1WYWx1ZSwg
YW1vdW50VmFsdWUpOworICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAg
ICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4ocHJvYywgQml0T3IsIE9yaWdpbigpLCBuVmFsdWUsIHNoaWZ0VmFsdWUpKTsK
KworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlz
QVJNNjQoKSkgeworICAgICAgICAgICAgc3RkOjpzdHJpbmcgcmVnZXgoIi4qb3JyLiosLiosLios
Lipsc3IgIyIpOworICAgICAgICAgICAgcmVnZXggKz0gc3RkOjp0b19zdHJpbmcoYW1vdW50KSAr
ICIuKiI7CisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgcmVnZXguY19z
dHIoKSwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGludm9rZTx1aW50NjRfdD4o
KmNvZGUsIG4sIG0pOworICAgIH07CisKKyAgICBmb3IgKGF1dG8gbk9wZXJhbmQgOiBpbnQ2NE9w
ZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG1PcGVyYW5kIDogaW50NjRPcGVyYW5kcygp
KSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAg
ICAgICAgIHVpbnQ2NF90IG4gPSBuT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICB1aW50
NjRfdCBtID0gbU9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEodGVzdChu
LCBtLCBhbW91bnQpLCBuIHwgKG0gPj4gYW1vdW50KSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdEJpdEFuZFplcm9TaGlmdFJpZ2h0QXJnSW1tTWFzazMy
KCkKK3sKKyAgICAvLyBUdXJuIHRoaXM6ICh0bXAgPj4gaW1tKSAmIG1hc2sgCisgICAgLy8gSW50
byB0aGlzOiB0bXAgPj4gaW1tCisgICAgdWludDMyX3QgdG1wID0gMHhmZmZmZmZmZjsKKyAgICBW
ZWN0b3I8dWludDMyX3Q+IGltbXMgPSB7IDQsIDI4LCAzMSB9OworICAgIFZlY3Rvcjx1aW50MzJf
dD4gbWFza3MgPSB7IDB4MGZmZmZmZmYsIDB4ZiwgMHhmZmZmIH07CisKKyAgICBhdXRvIHRlc3Qg
PSBbJl0gKHVpbnQzMl90IGltbSwgdWludDMyX3QgbWFzaykgeworICAgICAgICBQcm9jZWR1cmUg
cHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAg
ICAgICBWYWx1ZSogdG1wVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAg
ICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxB
cmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7
CisgICAgICAgIFZhbHVlKiBpbW1WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBpbW0pOworICAgICAgICBWYWx1ZSogbGVmdFZhbHVlID0gcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBaU2hyLCBPcmlnaW4oKSwgdG1wVmFsdWUsIGltbVZhbHVl
KTsKKyAgICAgICAgVmFsdWUqIHJpZ2h0VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgbWFzayk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRy
b2xWYWx1ZSgKKyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgICAg
ICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdEFuZCwgT3JpZ2luKCksIGxlZnRWYWx1
ZSwgcmlnaHRWYWx1ZSkpOworCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2Mp
OworICAgICAgICBpZiAoaXNBUk02NCgpKQorICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rp
b24oKmNvZGUsICJsc3IiKTsKKyAgICAgICAgdWludDMyX3QgbGhzID0gaW52b2tlPHVpbnQzMl90
PigqY29kZSwgdG1wKTsKKyAgICAgICAgdWludDMyX3QgcmhzID0gdG1wID4+IGltbTsKKyAgICAg
ICAgQ0hFQ0sobGhzID09IHJocyk7CisgICAgfTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgaW1tcy5zaXplKCk7ICsraSkKKyAgICAgICAgdGVzdChpbW1zLmF0KGkpLCBtYXNrcy5hdChp
KSk7Cit9CisKK3ZvaWQgdGVzdEJpdEFuZFplcm9TaGlmdFJpZ2h0QXJnSW1tTWFzazY0KCkKK3sK
KyAgICAvLyBUdXJuIHRoaXM6ICh0bXAgPj4gaW1tKSAmIG1hc2sgCisgICAgLy8gSW50byB0aGlz
OiB0bXAgPj4gaW1tCisgICAgdWludDY0X3QgdG1wID0gMHhmZmZmZmZmZmZmZmZmZmZmOworICAg
IFZlY3Rvcjx1aW50NjRfdD4gaW1tcyA9IHsgNCwgNjAsIDYzIH07CisgICAgVmVjdG9yPHVpbnQ2
NF90PiBtYXNrcyA9IHsgMHgwZmZmZmZmZmZmZmZmZmZmLCAweGYsIDB4ZmZmZiB9OworCisgICAg
YXV0byB0ZXN0ID0gWyZdICh1aW50NjRfdCBpbW0sIHVpbnQ2NF90IG1hc2spIHsKKyAgICAgICAg
UHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2Nr
KCk7CisKKyAgICAgICAgVmFsdWUqIHRtcFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50
UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAg
ICBWYWx1ZSogaW1tVmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgaW1tKTsKKyAgICAgICAgVmFsdWUqIGxlZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5l
dzxWYWx1ZT4ocHJvYywgWlNociwgT3JpZ2luKCksIHRtcFZhbHVlLCBpbW1WYWx1ZSk7CisgICAg
ICAgIFZhbHVlKiByaWdodFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIG1hc2spOworICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUo
CisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRBbmQsIE9yaWdpbigpLCBsZWZ0VmFsdWUsIHJpZ2h0
VmFsdWUpKTsKKworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAg
ICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2Rl
LCAibHNyIik7CisgICAgICAgIHVpbnQ2NF90IGxocyA9IGludm9rZTx1aW50NjRfdD4oKmNvZGUs
IHRtcCk7CisgICAgICAgIHVpbnQ2NF90IHJocyA9IHRtcCA+PiBpbW07CisgICAgICAgIENIRUNL
KGxocyA9PSByaHMpOworICAgIH07CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGltbXMu
c2l6ZSgpOyArK2kpCisgICAgICAgIHRlc3QoaW1tcy5hdChpKSwgbWFza3MuYXQoaSkpOworfQor
CitzdGF0aWMgdm9pZCB0ZXN0Qml0QW5kQXJncyhpbnQ2NF90IGEsIGludDY0X3QgYikKK3sKKyAg
ICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygp
OworICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgcHJvYywgUmV0dXJu
LCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAg
IHByb2MsIEJpdEFuZCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJn
dW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCksCisg
ICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkpKTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48
aW50NjRfdD4ocHJvYywgYSwgYikgPT0gKGEgJiBiKSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RC
aXRBbmRTYW1lQXJnKGludDY0X3QgYSkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNp
Y0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiBhcmd1bWVudCA9IHJv
b3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIwKTsKKyAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAg
IHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
CisgICAgICAgICAgICBwcm9jLCBCaXRBbmQsIE9yaWdpbigpLAorICAgICAgICAgICAgYXJndW1l
bnQsCisgICAgICAgICAgICBhcmd1bWVudCkpOworCisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxp
bnQ2NF90Pihwcm9jLCBhKSA9PSBhKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEJpdEFuZE5vdE5v
dChpbnQ2NF90IGEsIGludDY0X3QgYikKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNp
Y0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiBhcmdBID0gcm9vdC0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjApOworICAgIFZhbHVlKiBhcmdCID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVn
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIFZhbHVl
KiBub3RBID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9yaWdpbigpLCBh
cmdBLCByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgLTEpKTsK
KyAgICBWYWx1ZSogbm90QiA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0WG9yLCBP
cmlnaW4oKSwgYXJnQiwgcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIC0xKSk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICBwcm9j
LCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAg
ICAgICAgICAgcHJvYywgQml0QW5kLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIG5vdEEsCisgICAg
ICAgICAgICBub3RCKSk7CisKKyAgICBDSEVDS19FUShjb21waWxlQW5kUnVuPGludDY0X3Q+KHBy
b2MsIGEsIGIpLCAofmEgJiB+YikpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0Qml0QW5kTm90Tm90
MzIoaW50MzJfdCBhLCBpbnQzMl90IGIpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFz
aWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSogYXJnQSA9IHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgVHJ1bmMsIE9yaWdpbigpLCByb290LT5hcHBlbmROZXc8
QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkp
OworICAgIFZhbHVlKiBhcmdCID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBUcnVuYywg
T3JpZ2luKCksIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSk7CisgICAgVmFsdWUqIG5vdEEgPSByb290LT5hcHBl
bmROZXc8VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIGFyZ0EsIHJvb3QtPmFwcGVuZE5l
dzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAtMSkpOworICAgIFZhbHVlKiBub3RCID0g
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9yaWdpbigpLCBhcmdCLCByb290
LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgLTEpKTsKKyAgICByb290
LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCks
CisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBCaXRB
bmQsIE9yaWdpbigpLAorICAgICAgICAgICAgbm90QSwKKyAgICAgICAgICAgIG5vdEIpKTsKKwor
ICAgIENIRUNLX0VRKGNvbXBpbGVBbmRSdW48aW50MzJfdD4ocHJvYywgYSwgYiksICh+YSAmIH5i
KSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RCaXRBbmROb3RJbW0oaW50NjRfdCBhLCBpbnQ2NF90
IGIpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2Mu
YWRkQmxvY2soKTsKKyAgICBWYWx1ZSogYXJnQSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJl
Z1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBWYWx1
ZSogbm90QSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0WG9yLCBPcmlnaW4oKSwg
YXJnQSwgcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIC0xKSk7
CisgICAgVmFsdWUqIGNzdEIgPSByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgYik7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICBw
cm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAor
ICAgICAgICAgICAgcHJvYywgQml0QW5kLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIG5vdEEsCisg
ICAgICAgICAgICBjc3RCKSk7CisKKyAgICBDSEVDS19FUShjb21waWxlQW5kUnVuPGludDY0X3Q+
KHByb2MsIGEpLCAofmEgJiBiKSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RCaXRBbmROb3RJbW0z
MihpbnQzMl90IGEsIGludDMyX3QgYikKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNp
Y0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiBhcmdBID0gcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBUcnVuYywgT3JpZ2luKCksIHJvb3QtPmFwcGVuZE5ldzxB
cmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7
CisgICAgVmFsdWUqIG5vdEEgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdFhvciwg
T3JpZ2luKCksIGFyZ0EsIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdp
bigpLCAtMSkpOworICAgIFZhbHVlKiBjc3RCID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIGIpOworICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgK
KyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPigKICAgICAgICAgICAgIHByb2MsIEJpdEFuZCwgT3JpZ2luKCksCiAgICAgICAgICAg
ICBub3RBLApAQCAtNjM4OSw2ICs3MTgzLDI4IEBAIHZvaWQgYWRkQml0VGVzdHMoY29uc3QgY2hh
ciogZmlsdGVyLCBEZXF1ZTxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+Pj4mIHRhc2tzKQogICAg
IFJVTih0ZXN0U3ViV2l0aExlZnRTaGlmdDY0KCkpOwogICAgIFJVTih0ZXN0U3ViV2l0aFJpZ2h0
U2hpZnQ2NCgpKTsKICAgICBSVU4odGVzdFN1YldpdGhVbnNpZ25lZFJpZ2h0U2hpZnQ2NCgpKTsK
KworICAgIFJVTih0ZXN0QW5kTGVmdFNoaWZ0MzIoKSk7CisgICAgUlVOKHRlc3RBbmRSaWdodFNo
aWZ0MzIoKSk7CisgICAgUlVOKHRlc3RBbmRVbnNpZ25lZFJpZ2h0U2hpZnQzMigpKTsKKyAgICBS
VU4odGVzdEFuZExlZnRTaGlmdDY0KCkpOworICAgIFJVTih0ZXN0QW5kUmlnaHRTaGlmdDY0KCkp
OworICAgIFJVTih0ZXN0QW5kVW5zaWduZWRSaWdodFNoaWZ0NjQoKSk7CisKKyAgICBSVU4odGVz
dFhvckxlZnRTaGlmdDMyKCkpOworICAgIFJVTih0ZXN0WG9yUmlnaHRTaGlmdDMyKCkpOworICAg
IFJVTih0ZXN0WG9yVW5zaWduZWRSaWdodFNoaWZ0MzIoKSk7CisgICAgUlVOKHRlc3RYb3JMZWZ0
U2hpZnQ2NCgpKTsKKyAgICBSVU4odGVzdFhvclJpZ2h0U2hpZnQ2NCgpKTsKKyAgICBSVU4odGVz
dFhvclVuc2lnbmVkUmlnaHRTaGlmdDY0KCkpOworCisgICAgUlVOKHRlc3RPckxlZnRTaGlmdDMy
KCkpOworICAgIFJVTih0ZXN0T3JSaWdodFNoaWZ0MzIoKSk7CisgICAgUlVOKHRlc3RPclVuc2ln
bmVkUmlnaHRTaGlmdDMyKCkpOworICAgIFJVTih0ZXN0T3JMZWZ0U2hpZnQ2NCgpKTsKKyAgICBS
VU4odGVzdE9yUmlnaHRTaGlmdDY0KCkpOworICAgIFJVTih0ZXN0T3JVbnNpZ25lZFJpZ2h0U2hp
ZnQ2NCgpKTsKKwogICAgIFJVTih0ZXN0Qml0QW5kWmVyb1NoaWZ0UmlnaHRBcmdJbW1NYXNrMzIo
KSk7CiAgICAgUlVOKHRlc3RCaXRBbmRaZXJvU2hpZnRSaWdodEFyZ0ltbU1hc2s2NCgpKTsKICAg
ICBSVU4odGVzdEJpdEFuZEFyZ3MoNDMsIDQzKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3Ri
M18zLmNwcAppbmRleCBiODliMDE5ZmQ4YmY1ZjA3MTJmNDY2ODY1MGY2MWNkZjgxZGE0YzgzLi41
MDVmZDYzOTAzY2U4ZjIyNDJkZTYwMzYzMjg5MjkwY2E4ODE5YTczIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy90ZXN0YjNfMy5jcHAKQEAgLTM3MzAsMTAgKzM3MzAsOCBAQCB2b2lkIGFkZEFyZ1Rl
c3RzKGNvbnN0IGNoYXIqIGZpbHRlciwgRGVxdWU8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4+
JiB0YXNrcykKICAgICBSVU4odGVzdE11bEFyZ3MzMigxLCAyKSk7CiAgICAgUlVOKHRlc3RNdWxB
cmdzMzIoMHhGRkZGRkZGRiwgMHhGRkZGRkZGRikpOwogICAgIFJVTih0ZXN0TXVsQXJnczMyKDB4
RkZGRkZGRkUsIDB4RkZGRkZGRkYpKTsKLSAgICBSVU4odGVzdE11bEFyZ3MzMlNpZ25FeHRlbmQo
MSwgMSkpOwotICAgIFJVTih0ZXN0TXVsQXJnczMyU2lnbkV4dGVuZCgxLCAyKSk7Ci0gICAgUlVO
KHRlc3RNdWxBcmdzMzJTaWduRXh0ZW5kKDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYpKTsKLSAgICBS
VU4odGVzdE11bEFyZ3MzMlNpZ25FeHRlbmQoMHhGRkZGRkZGRSwgMHhGRkZGRkZGRikpOworICAg
IFJVTih0ZXN0TXVsQXJnczMyU2lnbkV4dGVuZCgpKTsKKyAgICBSVU4odGVzdE11bEFyZ3MzMlpl
cm9FeHRlbmQoKSk7CiAgICAgUlVOKHRlc3RNdWxMb2FkVHdpY2UoKSk7CiAgICAgUlVOKHRlc3RN
dWxBZGRBcmdzTGVmdCgpKTsKICAgICBSVU4odGVzdE11bEFkZEFyZ3NSaWdodCgpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434713</attachid>
            <date>2021-07-31 20:54:44 -0700</date>
            <delta_ts>2021-08-02 15:52:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228675-20210731225443.patch</filename>
            <type>text/plain</type>
            <size>89592</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwNDk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
N2M5NTU4ZWFiZGIxNjY0YzU2YWQyZGU0YWQzNGQ3ZDA3Y2UxNzI1Li5kOWYxM2I1MzYwYjQxZTk3
YzhkNjY4NWE1ODg4MTg1N2JjMjYxZGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxODUgQEAKKzIwMjEtMDctMzEgIFlpamlhIEh1YW5nICA8eWlqaWFfaHVhbmdAYXBwbGUu
Y29tPgorCisgICAgICAgIEFkZCBuZXcgcGF0dGVybnMgdG8gaW5zdHJ1Y3Rpb24gc2VsZWN0b3Ig
dG8gdXRpbGl6ZSBBTkQvRU9SL09SUi13aXRoLXNoaWZ0IGFuZCBVTVVMTCBzdXBwb3J0ZWQgYnkg
QVJNNjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
ODY3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJp
dHdpc2UgQU5EIChzaGlmdGVkIHJlZ2lzdGVyKSBwZXJmb3JtcyBhIGJpdHdpc2UgQU5EIG9mIGEg
cmVnaXN0ZXIgdmFsdWUgYW5kIGFuIG9wdGlvbmFsbHktc2hpZnRlZCAKKyAgICAgICAgcmVnaXN0
ZXIgdmFsdWUsIGFuZCB3cml0ZXMgdGhlIHJlc3VsdCB0byB0aGUgZGVzdGluYXRpb24gcmVnaXN0
ZXIuCisKKyAgICAgICAgICAgIGFuZCB3ZCB3biB3bSBTaGlmdFR5cGUgI2Ftb3VudAorCisgICAg
ICAgIFRoZSBlcXVpdmFsZW50IHBhdHRlcm4gaXM6IG4gJiAobSBTaGlmdFR5cGUgYW1vdW50KQor
CisgICAgICAgIEdpdmVuIEIzIElSOgorICAgICAgICBJbnQgQDAgPSBBcmd1bWVudFJlZygleDAp
CisgICAgICAgIEludCBAMSA9IEFyZ3VtZW50UmVnKCV4MSkKKyAgICAgICAgSW50IEAyID0gQ29u
c3QzMig2MykKKyAgICAgICAgSW50IEAzID0gU2hsKEAxLCAkNjMoQDIpKQorICAgICAgICBJbnQg
QDQgPSBCaXRBbmQoQDAsIEAzKQorICAgICAgICBWb2lkQDUgPSBSZXR1cm4oQDQsIFRlcm1pbmFs
KQorCisgICAgICAgIC8vIE9sZCBvcHRpbWl6ZWQgQUlSCisgICAgICAgIExzaGlmdCAleDEsICQ2
MywgJXgxLCBAMworICAgICAgICBBbmQgICAgJXgwLCAleDEsICV4MCwgQDQKKyAgICAgICAgUmV0
ICAgICV4MCwgICAgICAgICAgIEA1CisKKyAgICAgICAgLy8gTmV3IG9wdGltaXplZCBBSVIKKyAg
ICAgICAgQW5kTGVmdFNoaWZ0ICV4MCwgJXgxLCAkNjMsICV4MCwgQDQKKyAgICAgICAgUmV0ICAg
ICAgICAgICV4MCwgICAgICAgICAgICAgICAgQDUKKworICAgICAgICBCaXR3aXNlIEV4Y2x1c2l2
ZSBPUiAoc2hpZnRlZCByZWdpc3RlcikgcGVyZm9ybXMgYSBiaXR3aXNlIEV4Y2x1c2l2ZSBPUiBv
ZiBhIHJlZ2lzdGVyIHZhbHVlIGFuZCBhbiAKKyAgICAgICAgb3B0aW9uYWxseS1zaGlmdGVkIHJl
Z2lzdGVyIHZhbHVlLCBhbmQgd3JpdGVzIHRoZSByZXN1bHQgdG8gdGhlIGRlc3RpbmF0aW9uIHJl
Z2lzdGVyLgorCisgICAgICAgICAgICBlb3Igd2Qgd24gd20gU2hpZnRUeXBlICNhbW91bnQKKwor
ICAgICAgICBUaGUgZXF1aXZhbGVudCBwYXR0ZXJuIGlzOiBuIF4gKG0gU2hpZnRUeXBlIGFtb3Vu
dCkKKworICAgICAgICBHaXZlbiBCMyBJUjoKKyAgICAgICAgSW50IEAwID0gQXJndW1lbnRSZWco
JXgwKQorICAgICAgICBJbnQgQDEgPSBBcmd1bWVudFJlZygleDEpCisgICAgICAgIEludCBAMiA9
IENvbnN0MzIoNjMpCisgICAgICAgIEludCBAMyA9IFNobChAMSwgJDYzKEAyKSkKKyAgICAgICAg
SW50IEA0ID0gQml0WG9yKEAwLCBAMykKKyAgICAgICAgVm9pZEA1ID0gUmV0dXJuKEA0LCBUZXJt
aW5hbCkKKworICAgICAgICAvLyBPbGQgb3B0aW1pemVkIEFJUgorICAgICAgICBMc2hpZnQgJXgx
LCAkNjMsICV4MSwgQDMKKyAgICAgICAgWG9yICAgICV4MCwgJXgxLCAleDAsIEA0CisgICAgICAg
IFJldCAgICAleDAsICAgICAgICAgICBANQorCisgICAgICAgIC8vIE5ldyBvcHRpbWl6ZWQgQUlS
CisgICAgICAgIFhvckxlZnRTaGlmdCAleDAsICV4MSwgJDYzLCAleDAsIEA0CisgICAgICAgIFJl
dCAgICAgICAgICAleDAsICAgICAgICAgICAgICAgIEA1CisKKyAgICAgICAgQml0d2lzZSBPUiAo
c2hpZnRlZCByZWdpc3RlcikgcGVyZm9ybXMgYSBiaXR3aXNlIChpbmNsdXNpdmUpIE9SIG9mIGEg
cmVnaXN0ZXIgdmFsdWUgYW5kIGFuIAorICAgICAgICBvcHRpb25hbGx5LXNoaWZ0ZWQgcmVnaXN0
ZXIgdmFsdWUsIGFuZCB3cml0ZXMgdGhlIHJlc3VsdCB0byB0aGUgZGVzdGluYXRpb24gcmVnaXN0
ZXIuCisKKyAgICAgICAgICAgIG9yciB3ZCB3biB3bSBTaGlmdFR5cGUgI2Ftb3VudAorCisgICAg
ICAgIFRoZSBlcXVpdmFsZW50IHBhdHRlcm4gaXM6IG4gfCAobSBTaGlmdFR5cGUgYW1vdW50KQor
CisgICAgICAgIEdpdmVuIEIzIElSOgorICAgICAgICBJbnQgQDAgPSBBcmd1bWVudFJlZygleDAp
CisgICAgICAgIEludCBAMSA9IEFyZ3VtZW50UmVnKCV4MSkKKyAgICAgICAgSW50IEAyID0gQ29u
c3QzMig2MykKKyAgICAgICAgSW50IEAzID0gU2hsKEAxLCAkNjMoQDIpKQorICAgICAgICBJbnQg
QDQgPSBCaXRPcihAMCwgQDMpCisgICAgICAgIFZvaWRANSA9IFJldHVybihANCwgVGVybWluYWwp
CisKKyAgICAgICAgLy8gT2xkIG9wdGltaXplZCBBSVIKKyAgICAgICAgTHNoaWZ0ICV4MSwgJDYz
LCAleDEsIEAzCisgICAgICAgIE9yICAgICAleDAsICV4MSwgJXgwLCBANAorICAgICAgICBSZXQg
ICAgJXgwLCAgICAgICAgICAgQDUKKworICAgICAgICAvLyBOZXcgb3B0aW1pemVkIEFJUgorICAg
ICAgICBPckxlZnRTaGlmdCAleDAsICV4MSwgJDYzLCAleDAsIEA0CisgICAgICAgIFJldCAgICAg
ICAgICV4MCwgICAgICAgICAgICAgICAgQDUKKworICAgICAgICBVbnNpZ25lZCBNdWx0aXBseSBM
b25nIG11bHRpcGxpZXMgdHdvIDMyLWJpdCByZWdpc3RlciB2YWx1ZXMsIGFuZCB3cml0ZXMgdGhl
IHJlc3VsdCB0byB0aGUgZGVzdGluYXRpb24gCisgICAgICAgIHJlZ2lzdGVyLiBUaGlzIGluc3Ry
dWN0aW9uIGlzIGFuIGFsaWFzIG9mIHRoZSBVTUFEREwgaW5zdHJ1Y3Rpb24uCisKKyAgICAgICAg
ICAgIHVtdWxsIHhkIHduIHdtCisKKyAgICAgICAgVGhlIGVxdWl2YWxlbnQgcGF0dGVybiBpczog
ZCA9IFpFeHQzMihuKSAqIFpFeHQzMihtKQorCisgICAgICAgIEdpdmVuIEIzIElSOgorICAgICAg
ICBJbnQgQDAgPSBBcmd1bWVudFJlZygleDApCisgICAgICAgIEludCBAMSA9IFRydW5jKEAwKQor
ICAgICAgICBJbnQgQDIgPSBBcmd1bWVudFJlZygleDEpCisgICAgICAgIEludCBAMyA9IFRydW5j
KEAyKQorICAgICAgICBJbnQgQDQgPSBaRXh0MzIoQDEpCisgICAgICAgIEludCBANSA9IFpFeHQz
MihAMykKKyAgICAgICAgSW50IEA2ID0gTXVsKEA0LCBANSkKKyAgICAgICAgVm9pZEA3ID0gUmV0
dXJuKEA2LCBUZXJtaW5hbCkKKworICAgICAgICAvLyBPbGQgb3B0aW1pemVkIEFJUgorICAgICAg
ICBNb3ZlICAgJXgwLCAleDAsICAgICAgQDQKKyAgICAgICAgTW92ZSAgICV4MSwgJXgxLCAgICAg
IEA1CisgICAgICAgIE11bCAgICAleDAsICV4MSwgJXgwLCBANgorICAgICAgICBSZXQgICAgJXgw
LCAgICAgICAgICAgQDcKKworICAgICAgICAvLyBOZXcgb3B0aW1pemVkIEFJUgorICAgICAgICBN
dWx0aXBseVplcm9FeHRlbmQgJXgwLCAleDEsICV4MCwgQDYKKyAgICAgICAgUmV0ICAgICAgICAg
ICAgICAgICV4MCwgICAgICAgICAgIEA3CisKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJBUk02NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjphbmRMZWZ0
U2hpZnQzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OmFuZFJpZ2h0U2hp
ZnQzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OmFuZFVuc2lnbmVkUmln
aHRTaGlmdDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6YW5kTGVmdFNo
aWZ0NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjphbmRSaWdodFNoaWZ0
NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjphbmRVbnNpZ25lZFJpZ2h0
U2hpZnQ2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnhvckxlZnRTaGlm
dDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6eG9yUmlnaHRTaGlmdDMy
KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6eG9yVW5zaWduZWRSaWdodFNo
aWZ0MzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojp4b3JMZWZ0U2hpZnQ2
NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnhvclJpZ2h0U2hpZnQ2NCk6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnhvclVuc2lnbmVkUmlnaHRTaGlm
dDY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6b3JMZWZ0U2hpZnQzMik6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Om9yUmlnaHRTaGlmdDMyKToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6b3JVbnNpZ25lZFJpZ2h0U2hpZnQzMik6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Om9yTGVmdFNoaWZ0NjQpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpvclJpZ2h0U2hpZnQ2NCk6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Om9yVW5zaWduZWRSaWdodFNoaWZ0NjQpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjptdWx0aXBseVplcm9FeHRlbmQzMik6Cisg
ICAgICAgICogYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcDoKKyAgICAgICAgKEpTQzo6dGVzdE11bHRp
cGx5WmVyb0V4dGVuZDMyKToKKyAgICAgICAgKEpTQzo6dGVzdEFuZExlZnRTaGlmdDMyKToKKyAg
ICAgICAgKEpTQzo6dGVzdEFuZFJpZ2h0U2hpZnQzMik6CisgICAgICAgIChKU0M6OnRlc3RBbmRV
bnNpZ25lZFJpZ2h0U2hpZnQzMik6CisgICAgICAgIChKU0M6OnRlc3RBbmRMZWZ0U2hpZnQ2NCk6
CisgICAgICAgIChKU0M6OnRlc3RBbmRSaWdodFNoaWZ0NjQpOgorICAgICAgICAoSlNDOjp0ZXN0
QW5kVW5zaWduZWRSaWdodFNoaWZ0NjQpOgorICAgICAgICAoSlNDOjp0ZXN0WG9yTGVmdFNoaWZ0
MzIpOgorICAgICAgICAoSlNDOjp0ZXN0WG9yUmlnaHRTaGlmdDMyKToKKyAgICAgICAgKEpTQzo6
dGVzdFhvclVuc2lnbmVkUmlnaHRTaGlmdDMyKToKKyAgICAgICAgKEpTQzo6dGVzdFhvckxlZnRT
aGlmdDY0KToKKyAgICAgICAgKEpTQzo6dGVzdFhvclJpZ2h0U2hpZnQ2NCk6CisgICAgICAgIChK
U0M6OnRlc3RYb3JVbnNpZ25lZFJpZ2h0U2hpZnQ2NCk6CisgICAgICAgIChKU0M6OnRlc3RPckxl
ZnRTaGlmdDMyKToKKyAgICAgICAgKEpTQzo6dGVzdE9yUmlnaHRTaGlmdDMyKToKKyAgICAgICAg
KEpTQzo6dGVzdE9yVW5zaWduZWRSaWdodFNoaWZ0MzIpOgorICAgICAgICAoSlNDOjp0ZXN0T3JM
ZWZ0U2hpZnQ2NCk6CisgICAgICAgIChKU0M6OnRlc3RPclJpZ2h0U2hpZnQ2NCk6CisgICAgICAg
IChKU0M6OnRlc3RPclVuc2lnbmVkUmlnaHRTaGlmdDY0KToKKyAgICAgICAgKiBiMy9CM0xvd2Vy
VG9BaXIuY3BwOgorICAgICAgICAqIGIzL2Fpci9BaXJPcGNvZGUub3Bjb2RlczoKKyAgICAgICAg
KiBiMy90ZXN0YjMuaDoKKyAgICAgICAgKiBiMy90ZXN0YjNfMi5jcHA6CisgICAgICAgICh0ZXN0
TXVsQXJnczMyU2lnbkV4dGVuZCk6CisgICAgICAgICh0ZXN0TXVsQXJnczMyWmVyb0V4dGVuZCk6
CisgICAgICAgICh0ZXN0QW5kTGVmdFNoaWZ0MzIpOgorICAgICAgICAodGVzdEFuZFJpZ2h0U2hp
ZnQzMik6CisgICAgICAgICh0ZXN0QW5kVW5zaWduZWRSaWdodFNoaWZ0MzIpOgorICAgICAgICAo
dGVzdEFuZExlZnRTaGlmdDY0KToKKyAgICAgICAgKHRlc3RBbmRSaWdodFNoaWZ0NjQpOgorICAg
ICAgICAodGVzdEFuZFVuc2lnbmVkUmlnaHRTaGlmdDY0KToKKyAgICAgICAgKHRlc3RYb3JMZWZ0
U2hpZnQzMik6CisgICAgICAgICh0ZXN0WG9yUmlnaHRTaGlmdDMyKToKKyAgICAgICAgKHRlc3RY
b3JVbnNpZ25lZFJpZ2h0U2hpZnQzMik6CisgICAgICAgICh0ZXN0WG9yTGVmdFNoaWZ0NjQpOgor
ICAgICAgICAodGVzdFhvclJpZ2h0U2hpZnQ2NCk6CisgICAgICAgICh0ZXN0WG9yVW5zaWduZWRS
aWdodFNoaWZ0NjQpOgorICAgICAgICAodGVzdE9yTGVmdFNoaWZ0MzIpOgorICAgICAgICAodGVz
dE9yUmlnaHRTaGlmdDMyKToKKyAgICAgICAgKHRlc3RPclVuc2lnbmVkUmlnaHRTaGlmdDMyKToK
KyAgICAgICAgKHRlc3RPckxlZnRTaGlmdDY0KToKKyAgICAgICAgKHRlc3RPclJpZ2h0U2hpZnQ2
NCk6CisgICAgICAgICh0ZXN0T3JVbnNpZ25lZFJpZ2h0U2hpZnQ2NCk6CisgICAgICAgICh0ZXN0
Qml0QW5kWmVyb1NoaWZ0UmlnaHRBcmdJbW1NYXNrMzIpOgorICAgICAgICAodGVzdEJpdEFuZFpl
cm9TaGlmdFJpZ2h0QXJnSW1tTWFzazY0KToKKyAgICAgICAgKHRlc3RCaXRBbmRBcmdzKToKKyAg
ICAgICAgKHRlc3RCaXRBbmRTYW1lQXJnKToKKyAgICAgICAgKHRlc3RCaXRBbmROb3ROb3QpOgor
ICAgICAgICAodGVzdEJpdEFuZE5vdE5vdDMyKToKKyAgICAgICAgKHRlc3RCaXRBbmROb3RJbW0p
OgorICAgICAgICAodGVzdEJpdEFuZE5vdEltbTMyKToKKyAgICAgICAgKGFkZEJpdFRlc3RzKToK
KyAgICAgICAgKiBiMy90ZXN0YjNfMy5jcHA6CisgICAgICAgIChhZGRBcmdUZXN0cyk6CisKIDIw
MjEtMDctMzAgIFlpamlhIEh1YW5nICA8eWlqaWFfaHVhbmdAYXBwbGUuY29tPgogCiAgICAgICAg
IEFkZCBQcmUvUG9zdC1JbmRleGVkIEFkZHJlc3MgTW9kZSB0byBBaXIgZm9yIEFSTTY0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJN
NjQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02
NC5oCmluZGV4IGU2YmZiZWM2MDAxYzEwYzYxZTlmMjY2ZWZmMjdhZDZmMTBlODlmOGYuLjEzYTIz
OGIzZDg2YjE4OTBkMmRmYjYyZDkwNjk3NGYzZGZjNWQ3NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCkBAIC02NDks
NiArNjQ5LDk2IEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIuc3ViPDY0PihkLCBuLCBt
LCBBc3NlbWJsZXI6OkxTUiwgYW1vdW50Lm1fdmFsdWUpOwogICAgIH0KIAorICAgIHZvaWQgYW5k
TGVmdFNoaWZ0MzIoUmVnaXN0ZXJJRCBuLCBSZWdpc3RlcklEIG0sIFRydXN0ZWRJbW0zMiBhbW91
bnQsIFJlZ2lzdGVySUQgZCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZF88MzI+KGQs
IG4sIG0sIEFzc2VtYmxlcjo6TFNMLCBhbW91bnQubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9p
ZCBhbmRSaWdodFNoaWZ0MzIoUmVnaXN0ZXJJRCBuLCBSZWdpc3RlcklEIG0sIFRydXN0ZWRJbW0z
MiBhbW91bnQsIFJlZ2lzdGVySUQgZCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZF88
MzI+KGQsIG4sIG0sIEFzc2VtYmxlcjo6QVNSLCBhbW91bnQubV92YWx1ZSk7CisgICAgfQorCisg
ICAgdm9pZCBhbmRVbnNpZ25lZFJpZ2h0U2hpZnQzMihSZWdpc3RlcklEIG4sIFJlZ2lzdGVySUQg
bSwgVHJ1c3RlZEltbTMyIGFtb3VudCwgUmVnaXN0ZXJJRCBkKQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIuYW5kXzwzMj4oZCwgbiwgbSwgQXNzZW1ibGVyOjpMU1IsIGFtb3VudC5tX3ZhbHVl
KTsKKyAgICB9CisKKyAgICB2b2lkIGFuZExlZnRTaGlmdDY0KFJlZ2lzdGVySUQgbiwgUmVnaXN0
ZXJJRCBtLCBUcnVzdGVkSW1tMzIgYW1vdW50LCBSZWdpc3RlcklEIGQpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5hbmRfPDY0PihkLCBuLCBtLCBBc3NlbWJsZXI6OkxTTCwgYW1vdW50Lm1f
dmFsdWUpOworICAgIH0KKworICAgIHZvaWQgYW5kUmlnaHRTaGlmdDY0KFJlZ2lzdGVySUQgbiwg
UmVnaXN0ZXJJRCBtLCBUcnVzdGVkSW1tMzIgYW1vdW50LCBSZWdpc3RlcklEIGQpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5hbmRfPDY0PihkLCBuLCBtLCBBc3NlbWJsZXI6OkFTUiwgYW1v
dW50Lm1fdmFsdWUpOworICAgIH0KKworICAgIHZvaWQgYW5kVW5zaWduZWRSaWdodFNoaWZ0NjQo
UmVnaXN0ZXJJRCBuLCBSZWdpc3RlcklEIG0sIFRydXN0ZWRJbW0zMiBhbW91bnQsIFJlZ2lzdGVy
SUQgZCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZF88NjQ+KGQsIG4sIG0sIEFzc2Vt
Ymxlcjo6TFNSLCBhbW91bnQubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCB4b3JMZWZ0U2hp
ZnQzMihSZWdpc3RlcklEIG4sIFJlZ2lzdGVySUQgbSwgVHJ1c3RlZEltbTMyIGFtb3VudCwgUmVn
aXN0ZXJJRCBkKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuZW9yPDMyPihkLCBuLCBtLCBB
c3NlbWJsZXI6OkxTTCwgYW1vdW50Lm1fdmFsdWUpOworICAgIH0KKworICAgIHZvaWQgeG9yUmln
aHRTaGlmdDMyKFJlZ2lzdGVySUQgbiwgUmVnaXN0ZXJJRCBtLCBUcnVzdGVkSW1tMzIgYW1vdW50
LCBSZWdpc3RlcklEIGQpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5lb3I8MzI+KGQsIG4s
IG0sIEFzc2VtYmxlcjo6QVNSLCBhbW91bnQubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCB4
b3JVbnNpZ25lZFJpZ2h0U2hpZnQzMihSZWdpc3RlcklEIG4sIFJlZ2lzdGVySUQgbSwgVHJ1c3Rl
ZEltbTMyIGFtb3VudCwgUmVnaXN0ZXJJRCBkKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
ZW9yPDMyPihkLCBuLCBtLCBBc3NlbWJsZXI6OkxTUiwgYW1vdW50Lm1fdmFsdWUpOworICAgIH0K
KworICAgIHZvaWQgeG9yTGVmdFNoaWZ0NjQoUmVnaXN0ZXJJRCBuLCBSZWdpc3RlcklEIG0sIFRy
dXN0ZWRJbW0zMiBhbW91bnQsIFJlZ2lzdGVySUQgZCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLmVvcjw2ND4oZCwgbiwgbSwgQXNzZW1ibGVyOjpMU0wsIGFtb3VudC5tX3ZhbHVlKTsKKyAg
ICB9CisKKyAgICB2b2lkIHhvclJpZ2h0U2hpZnQ2NChSZWdpc3RlcklEIG4sIFJlZ2lzdGVySUQg
bSwgVHJ1c3RlZEltbTMyIGFtb3VudCwgUmVnaXN0ZXJJRCBkKQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIuZW9yPDY0PihkLCBuLCBtLCBBc3NlbWJsZXI6OkFTUiwgYW1vdW50Lm1fdmFsdWUp
OworICAgIH0KKworICAgIHZvaWQgeG9yVW5zaWduZWRSaWdodFNoaWZ0NjQoUmVnaXN0ZXJJRCBu
LCBSZWdpc3RlcklEIG0sIFRydXN0ZWRJbW0zMiBhbW91bnQsIFJlZ2lzdGVySUQgZCkKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLmVvcjw2ND4oZCwgbiwgbSwgQXNzZW1ibGVyOjpMU1IsIGFt
b3VudC5tX3ZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIG9yTGVmdFNoaWZ0MzIoUmVnaXN0ZXJJ
RCBuLCBSZWdpc3RlcklEIG0sIFRydXN0ZWRJbW0zMiBhbW91bnQsIFJlZ2lzdGVySUQgZCkKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ycjwzMj4oZCwgbiwgbSwgQXNzZW1ibGVyOjpMU0ws
IGFtb3VudC5tX3ZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIG9yUmlnaHRTaGlmdDMyKFJlZ2lz
dGVySUQgbiwgUmVnaXN0ZXJJRCBtLCBUcnVzdGVkSW1tMzIgYW1vdW50LCBSZWdpc3RlcklEIGQp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5vcnI8MzI+KGQsIG4sIG0sIEFzc2VtYmxlcjo6
QVNSLCBhbW91bnQubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBvclVuc2lnbmVkUmlnaHRT
aGlmdDMyKFJlZ2lzdGVySUQgbiwgUmVnaXN0ZXJJRCBtLCBUcnVzdGVkSW1tMzIgYW1vdW50LCBS
ZWdpc3RlcklEIGQpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5vcnI8MzI+KGQsIG4sIG0s
IEFzc2VtYmxlcjo6TFNSLCBhbW91bnQubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBvckxl
ZnRTaGlmdDY0KFJlZ2lzdGVySUQgbiwgUmVnaXN0ZXJJRCBtLCBUcnVzdGVkSW1tMzIgYW1vdW50
LCBSZWdpc3RlcklEIGQpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5vcnI8NjQ+KGQsIG4s
IG0sIEFzc2VtYmxlcjo6TFNMLCBhbW91bnQubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBv
clJpZ2h0U2hpZnQ2NChSZWdpc3RlcklEIG4sIFJlZ2lzdGVySUQgbSwgVHJ1c3RlZEltbTMyIGFt
b3VudCwgUmVnaXN0ZXJJRCBkKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3JyPDY0Pihk
LCBuLCBtLCBBc3NlbWJsZXI6OkFTUiwgYW1vdW50Lm1fdmFsdWUpOworICAgIH0KKworICAgIHZv
aWQgb3JVbnNpZ25lZFJpZ2h0U2hpZnQ2NChSZWdpc3RlcklEIG4sIFJlZ2lzdGVySUQgbSwgVHJ1
c3RlZEltbTMyIGFtb3VudCwgUmVnaXN0ZXJJRCBkKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIub3JyPDY0PihkLCBuLCBtLCBBc3NlbWJsZXI6OkxTUiwgYW1vdW50Lm1fdmFsdWUpOworICAg
IH0KKwogICAgIHZvaWQgY2xlYXJCaXQ2NChSZWdpc3RlcklEIGJpdFRvQ2xlYXIsIFJlZ2lzdGVy
SUQgZGVzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoRm9yTWFzayA9IEludmFsaWRHUFJSZWcpCiAgICAg
ewogICAgICAgICBpZiAoc2NyYXRjaEZvck1hc2sgPT0gSW52YWxpZEdQUlJlZykKQEAgLTg2Myw2
ICs5NTMsMTEgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5zbXVsbChkZXN0LCBsZWZ0
LCByaWdodCk7CiAgICAgfQogCisgICAgdm9pZCBtdWx0aXBseVplcm9FeHRlbmQzMihSZWdpc3Rl
cklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLnVtdWxsKGRlc3QsIGxlZnQsIHJpZ2h0KTsKKyAgICB9CisKICAgICB2
b2lkIGRpdjMyKFJlZ2lzdGVySUQgZGl2aWRlbmQsIFJlZ2lzdGVySUQgZGl2aXNvciwgUmVnaXN0
ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIuc2RpdjwzMj4oZGVzdCwgZGl2
aWRlbmQsIGRpdmlzb3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci90ZXN0bWFzbS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3Rt
YXNtLmNwcAppbmRleCAxY2E2OTgzZWI3MGQ5NjQwYmU0ZmIyZjExMGUyZjhlMDFmMzhmODM4Li44
OTllNzZhMjYxM2E5YjdlYTYyMDAyYTBkNjg2ZjYxNWIxMTlmMTk1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcApAQCAtOTIxLDYgKzkyMSwyNiBAQCB2
b2lkIHRlc3RNdWx0aXBseVNpZ25FeHRlbmQzMigpCiAgICAgfQogfQogCit2b2lkIHRlc3RNdWx0
aXBseVplcm9FeHRlbmQzMigpCit7CisgICAgZm9yIChhdXRvIG5PcGVyYW5kIDogaW50MzJPcGVy
YW5kcygpKSB7CisgICAgICAgIGF1dG8gbXVsID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYg
aml0KSB7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAg
ICAgICBqaXQubXVsdGlwbHlaZXJvRXh0ZW5kMzIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAg
ICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAg
ICAgICAgfSk7CisKKyAgICAgICAgZm9yIChhdXRvIG1PcGVyYW5kIDogaW50MzJPcGVyYW5kcygp
KSB7CisgICAgICAgICAgICB1aW50MzJfdCBuID0gbk9wZXJhbmQ7CisgICAgICAgICAgICB1aW50
MzJfdCBtID0gbU9wZXJhbmQ7CisgICAgICAgICAgICBDSEVDS19FUShpbnZva2U8dWludDY0X3Q+
KG11bCwgbiwgbSksIHN0YXRpY19jYXN0PHVpbnQ2NF90PihuKSAqIHN0YXRpY19jYXN0PHVpbnQ2
NF90PihtKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKIHZvaWQgdGVzdE11bHRpcGx5QWRkU2ln
bkV4dGVuZDMyKCkKIHsKICAgICAvLyBkID0gU0V4dDMyKG4pICogU0V4dDMyKG0pICsgYQpAQCAt
MjM4Miw2ICsyNDAyLDQ3NCBAQCB2b2lkIHRlc3RMb2FkUHJlUG9zdEluZGV4NjQoKQogICAgIENI
RUNLX0VRKHRlc3QyKDUpLCAyKTsKICAgICBDSEVDS19FUShudW1zWzJdLCA1KTsKIH0KKwordm9p
ZCB0ZXN0QW5kTGVmdFNoaWZ0MzIoKQoreworICAgIFZlY3RvcjxpbnQzMl90PiBhbW91bnRzID0g
eyAwLCAxNywgMzEgfTsKKyAgICBmb3IgKGF1dG8gbiA6IGludDMyT3BlcmFuZHMoKSkgeworICAg
ICAgICBmb3IgKGF1dG8gbSA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChh
dXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGFuZDMyID0gY29t
cGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRG
dW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgICAgICAgICAgaml0LmFuZExlZnRT
aGlmdDMyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgCisgICAgICAgICAgICAgICAgICAgICAgICBH
UFJJbmZvOjphcmd1bWVudEdQUjEsIAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoYW1vdW50KSwgCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9u
RXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICAg
ICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgaW50MzJfdCBsaHMgPSBpbnZva2U8aW50MzJf
dD4oYW5kMzIsIG4sIG0pOworICAgICAgICAgICAgICAgIGludDMyX3QgcmhzID0gbiAmIChtIDw8
IGFtb3VudCk7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEobGhzLCByaHMpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RBbmRSaWdodFNoaWZ0MzIoKQor
eworICAgIFZlY3RvcjxpbnQzMl90PiBhbW91bnRzID0geyAwLCAxNywgMzEgfTsKKyAgICBmb3Ig
KGF1dG8gbiA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbSA6IGludDMy
T3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsK
KyAgICAgICAgICAgICAgICBhdXRvIGFuZDMyID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYg
aml0KSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisK
KyAgICAgICAgICAgICAgICAgICAgaml0LmFuZFJpZ2h0U2hpZnQzMihHUFJJbmZvOjphcmd1bWVu
dEdQUjAsIAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCAK
KyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFtb3Vu
dCksIAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwor
CisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAg
ICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAg
ICAgICAgIGludDMyX3QgbGhzID0gaW52b2tlPGludDMyX3Q+KGFuZDMyLCBuLCBtKTsKKyAgICAg
ICAgICAgICAgICBpbnQzMl90IHJocyA9IG4gJiAobSA+PiBhbW91bnQpOworICAgICAgICAgICAg
ICAgIENIRUNLX0VRKGxocywgcmhzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
K30KKwordm9pZCB0ZXN0QW5kVW5zaWduZWRSaWdodFNoaWZ0MzIoKQoreworICAgIFZlY3Rvcjx1
aW50MzJfdD4gYW1vdW50cyA9IHsgMCwgMTcsIDMxIH07CisgICAgZm9yIChhdXRvIG4gOiBpbnQz
Mk9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG0gOiBpbnQzMk9wZXJhbmRzKCkpIHsK
KyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAg
ICAgYXV0byBhbmQzMiA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAg
ICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAg
ICAgICAgIGppdC5hbmRVbnNpZ25lZFJpZ2h0U2hpZnQzMihHUFJJbmZvOjphcmd1bWVudEdQUjAs
IAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFtb3VudCksIAor
ICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAg
ICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICAg
ICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAg
IHVpbnQzMl90IGxocyA9IGludm9rZTx1aW50MzJfdD4oYW5kMzIsIG4sIG0pOworICAgICAgICAg
ICAgICAgIHVpbnQzMl90IHJocyA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihuKSAmIChzdGF0aWNf
Y2FzdDx1aW50MzJfdD4obSkgPj4gYW1vdW50KTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUShs
aHMsIHJocyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgdGVz
dEFuZExlZnRTaGlmdDY0KCkKK3sKKyAgICBWZWN0b3I8aW50MzJfdD4gYW1vdW50cyA9IHsgMCwg
MzQsIDYzIH07CisgICAgZm9yIChhdXRvIG4gOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAg
Zm9yIChhdXRvIG0gOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBh
bW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgYXV0byBhbmQ2NCA9IGNvbXBpbGUo
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rp
b25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAgICAgICAgIGppdC5hbmRMZWZ0U2hpZnQ2
NChHUFJJbmZvOjphcmd1bWVudEdQUjAsIAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5m
bzo6YXJndW1lbnRHUFIxLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKGFtb3VudCksIAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxv
Z3VlKGppdCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAgICAg
ICB9KTsKKworICAgICAgICAgICAgICAgIGludDY0X3QgbGhzID0gaW52b2tlPGludDY0X3Q+KGFu
ZDY0LCBuLCBtKTsKKyAgICAgICAgICAgICAgICBpbnQ2NF90IHJocyA9IG4gJiAobSA8PCBhbW91
bnQpOworICAgICAgICAgICAgICAgIENIRUNLX0VRKGxocywgcmhzKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0QW5kUmlnaHRTaGlmdDY0KCkKK3sKKyAg
ICBWZWN0b3I8aW50MzJfdD4gYW1vdW50cyA9IHsgMCwgMzQsIDYzIH07CisgICAgZm9yIChhdXRv
IG4gOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG0gOiBpbnQ2NE9wZXJh
bmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAg
ICAgICAgICAgICAgYXV0byBhbmQ2NCA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkg
eworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAg
ICAgICAgICAgICAgICAgIGppdC5hbmRSaWdodFNoaWZ0NjQoR1BSSW5mbzo6YXJndW1lbnRHUFIw
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgCisgICAg
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbW91bnQpLCAK
KyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAg
ICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAg
ICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAg
ICBpbnQ2NF90IGxocyA9IGludm9rZTxpbnQ2NF90PihhbmQ2NCwgbiwgbSk7CisgICAgICAgICAg
ICAgICAgaW50NjRfdCByaHMgPSBuICYgKG0gPj4gYW1vdW50KTsKKyAgICAgICAgICAgICAgICBD
SEVDS19FUShsaHMsIHJocyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisK
K3ZvaWQgdGVzdEFuZFVuc2lnbmVkUmlnaHRTaGlmdDY0KCkKK3sKKyAgICBWZWN0b3I8dWludDMy
X3Q+IGFtb3VudHMgPSB7IDAsIDM0LCA2MyB9OworICAgIGZvciAoYXV0byBuIDogaW50NjRPcGVy
YW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAg
ICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAgICAgIGF1
dG8gYW5kNjQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgICAgICAg
ICBqaXQuYW5kVW5zaWduZWRSaWdodFNoaWZ0NjQoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgCisgICAgICAgICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbW91bnQpLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAg
ICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgICAgICAg
ICBqaXQucmV0KCk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICB1aW50
NjRfdCBsaHMgPSBpbnZva2U8dWludDY0X3Q+KGFuZDY0LCBuLCBtKTsKKyAgICAgICAgICAgICAg
ICB1aW50NjRfdCByaHMgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4obikgJiAoc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KG0pID4+IGFtb3VudCk7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEobGhzLCBy
aHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RYb3JM
ZWZ0U2hpZnQzMigpCit7CisgICAgVmVjdG9yPGludDMyX3Q+IGFtb3VudHMgPSB7IDAsIDE3LCAz
MSB9OworICAgIGZvciAoYXV0byBuIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAo
YXV0byBtIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50
IDogYW1vdW50cykgeworICAgICAgICAgICAgICAgIGF1dG8geG9yMzIgPSBjb21waWxlKFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJv
bG9ndWUoaml0KTsKKworICAgICAgICAgICAgICAgICAgICBqaXQueG9yTGVmdFNoaWZ0MzIoR1BS
SW5mbzo6YXJndW1lbnRHUFIwLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmFy
Z3VtZW50R1BSMSwgCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihhbW91bnQpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVy
blZhbHVlR1BSKTsKKworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShq
aXQpOworICAgICAgICAgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICAgICAgfSk7
CisKKyAgICAgICAgICAgICAgICBpbnQzMl90IGxocyA9IGludm9rZTxpbnQzMl90Pih4b3IzMiwg
biwgbSk7CisgICAgICAgICAgICAgICAgaW50MzJfdCByaHMgPSBuIF4gKG0gPDwgYW1vdW50KTsK
KyAgICAgICAgICAgICAgICBDSEVDS19FUShsaHMsIHJocyk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdFhvclJpZ2h0U2hpZnQzMigpCit7CisgICAgVmVj
dG9yPGludDMyX3Q+IGFtb3VudHMgPSB7IDAsIDE3LCAzMSB9OworICAgIGZvciAoYXV0byBuIDog
aW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtIDogaW50MzJPcGVyYW5kcygp
KSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAg
ICAgICAgIGF1dG8geG9yMzIgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAg
ICAgICAgICAgICBqaXQueG9yUmlnaHRTaGlmdDMyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgCisg
ICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjphcmd1bWVudEdQUjEsIAorICAgICAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYW1vdW50KSwgCisgICAg
ICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAg
ICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgICAgICAg
ICAgaml0LnJldCgpOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgaW50
MzJfdCBsaHMgPSBpbnZva2U8aW50MzJfdD4oeG9yMzIsIG4sIG0pOworICAgICAgICAgICAgICAg
IGludDMyX3QgcmhzID0gbiBeIChtID4+IGFtb3VudCk7CisgICAgICAgICAgICAgICAgQ0hFQ0tf
RVEobGhzLCByaHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lk
IHRlc3RYb3JVbnNpZ25lZFJpZ2h0U2hpZnQzMigpCit7CisgICAgVmVjdG9yPHVpbnQzMl90PiBh
bW91bnRzID0geyAwLCAxNywgMzEgfTsKKyAgICBmb3IgKGF1dG8gbiA6IGludDMyT3BlcmFuZHMo
KSkgeworICAgICAgICBmb3IgKGF1dG8gbSA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICAg
ICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHhv
cjMyID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAg
ICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgICAgICAgICAgaml0
LnhvclVuc2lnbmVkUmlnaHRTaGlmdDMyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgCisgICAgICAg
ICAgICAgICAgICAgICAgICBHUFJJbmZvOjphcmd1bWVudEdQUjEsIAorICAgICAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYW1vdW50KSwgCisgICAgICAgICAg
ICAgICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAg
ICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgICAgICAgICAgaml0
LnJldCgpOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgdWludDMyX3Qg
bGhzID0gaW52b2tlPHVpbnQzMl90Pih4b3IzMiwgbiwgbSk7CisgICAgICAgICAgICAgICAgdWlu
dDMyX3QgcmhzID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG4pIF4gKHN0YXRpY19jYXN0PHVpbnQz
Ml90PihtKSA+PiBhbW91bnQpOworICAgICAgICAgICAgICAgIENIRUNLX0VRKGxocywgcmhzKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0WG9yTGVmdFNo
aWZ0NjQoKQoreworICAgIFZlY3RvcjxpbnQzMl90PiBhbW91bnRzID0geyAwLCAzNCwgNjMgfTsK
KyAgICBmb3IgKGF1dG8gbiA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8g
bSA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFt
b3VudHMpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHhvcjY0ID0gY29tcGlsZShbPV0gKENDYWxs
SGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3Vl
KGppdCk7CisKKyAgICAgICAgICAgICAgICAgICAgaml0LnhvckxlZnRTaGlmdDY0KEdQUkluZm86
OmFyZ3VtZW50R1BSMCwgCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjphcmd1bWVu
dEdQUjEsIAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoYW1vdW50KSwgCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUik7CisKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsK
KyAgICAgICAgICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICAgICAgICAgIH0pOworCisg
ICAgICAgICAgICAgICAgaW50NjRfdCBsaHMgPSBpbnZva2U8aW50NjRfdD4oeG9yNjQsIG4sIG0p
OworICAgICAgICAgICAgICAgIGludDY0X3QgcmhzID0gbiBeIChtIDw8IGFtb3VudCk7CisgICAg
ICAgICAgICAgICAgQ0hFQ0tfRVEobGhzLCByaHMpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorfQorCit2b2lkIHRlc3RYb3JSaWdodFNoaWZ0NjQoKQoreworICAgIFZlY3Rvcjxp
bnQzMl90PiBhbW91bnRzID0geyAwLCAzNCwgNjMgfTsKKyAgICBmb3IgKGF1dG8gbiA6IGludDY0
T3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbSA6IGludDY0T3BlcmFuZHMoKSkgewor
ICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAg
ICBhdXRvIHhvcjY0ID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAg
ICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgICAg
ICAgICAgaml0LnhvclJpZ2h0U2hpZnQ2NChHUFJJbmZvOjphcmd1bWVudEdQUjAsIAorICAgICAg
ICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFtb3VudCksIAorICAgICAgICAg
ICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICAg
ICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICAgICAgICAgIGpp
dC5yZXQoKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIGludDY0X3Qg
bGhzID0gaW52b2tlPGludDY0X3Q+KHhvcjY0LCBuLCBtKTsKKyAgICAgICAgICAgICAgICBpbnQ2
NF90IHJocyA9IG4gXiAobSA+PiBhbW91bnQpOworICAgICAgICAgICAgICAgIENIRUNLX0VRKGxo
cywgcmhzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0
WG9yVW5zaWduZWRSaWdodFNoaWZ0NjQoKQoreworICAgIFZlY3Rvcjx1aW50MzJfdD4gYW1vdW50
cyA9IHsgMCwgMzQsIDYzIH07CisgICAgZm9yIChhdXRvIG4gOiBpbnQ2NE9wZXJhbmRzKCkpIHsK
KyAgICAgICAgZm9yIChhdXRvIG0gOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZv
ciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgYXV0byB4b3I2NCA9
IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgICAgICAgICBl
bWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAgICAgICAgIGppdC54b3JV
bnNpZ25lZFJpZ2h0U2hpZnQ2NChHUFJJbmZvOjphcmd1bWVudEdQUjAsIAorICAgICAgICAgICAg
ICAgICAgICAgICAgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCAKKyAgICAgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFtb3VudCksIAorICAgICAgICAgICAgICAg
ICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICAgICAgICAg
IGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5yZXQo
KTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIHVpbnQ2NF90IGxocyA9
IGludm9rZTx1aW50NjRfdD4oeG9yNjQsIG4sIG0pOworICAgICAgICAgICAgICAgIHVpbnQ2NF90
IHJocyA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihuKSBeIChzdGF0aWNfY2FzdDx1aW50NjRfdD4o
bSkgPj4gYW1vdW50KTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUShsaHMsIHJocyk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdE9yTGVmdFNoaWZ0MzIo
KQoreworICAgIFZlY3RvcjxpbnQzMl90PiBhbW91bnRzID0geyAwLCAxNywgMzEgfTsKKyAgICBm
b3IgKGF1dG8gbiA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbSA6IGlu
dDMyT3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMp
IHsKKyAgICAgICAgICAgICAgICBhdXRvIG9yMzIgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsK
KworICAgICAgICAgICAgICAgICAgICBqaXQub3JMZWZ0U2hpZnQzMihHUFJJbmZvOjphcmd1bWVu
dEdQUjAsIAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCAK
KyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFtb3Vu
dCksIAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwor
CisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAg
ICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAg
ICAgICAgIGludDMyX3QgbGhzID0gaW52b2tlPGludDMyX3Q+KG9yMzIsIG4sIG0pOworICAgICAg
ICAgICAgICAgIGludDMyX3QgcmhzID0gbiB8IChtIDw8IGFtb3VudCk7CisgICAgICAgICAgICAg
ICAgQ0hFQ0tfRVEobGhzLCByaHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
fQorCit2b2lkIHRlc3RPclJpZ2h0U2hpZnQzMigpCit7CisgICAgVmVjdG9yPGludDMyX3Q+IGFt
b3VudHMgPSB7IDAsIDE3LCAzMSB9OworICAgIGZvciAoYXV0byBuIDogaW50MzJPcGVyYW5kcygp
KSB7CisgICAgICAgIGZvciAoYXV0byBtIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgICAg
ICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAgICAgIGF1dG8gb3Iz
MiA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgICAgICAg
ICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAgICAgICAgIGppdC5v
clJpZ2h0U2hpZnQzMihHUFJJbmZvOjphcmd1bWVudEdQUjAsIAorICAgICAgICAgICAgICAgICAg
ICAgICAgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFtb3VudCksIAorICAgICAgICAgICAgICAgICAgICAg
ICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICAgICAgICAgIGVtaXRG
dW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAg
ICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIGludDMyX3QgbGhzID0gaW52b2tl
PGludDMyX3Q+KG9yMzIsIG4sIG0pOworICAgICAgICAgICAgICAgIGludDMyX3QgcmhzID0gbiB8
IChtID4+IGFtb3VudCk7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEobGhzLCByaHMpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RPclVuc2lnbmVkUmln
aHRTaGlmdDMyKCkKK3sKKyAgICBWZWN0b3I8dWludDMyX3Q+IGFtb3VudHMgPSB7IDAsIDE3LCAz
MSB9OworICAgIGZvciAoYXV0byBuIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAo
YXV0byBtIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50
IDogYW1vdW50cykgeworICAgICAgICAgICAgICAgIGF1dG8gb3IzMiA9IGNvbXBpbGUoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9s
b2d1ZShqaXQpOworCisgICAgICAgICAgICAgICAgICAgIGppdC5vclVuc2lnbmVkUmlnaHRTaGlm
dDMyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJ
bmZvOjphcmd1bWVudEdQUjEsIAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoYW1vdW50KSwgCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBp
bG9ndWUoaml0KTsKKyAgICAgICAgICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICAgICAg
ICAgIH0pOworCisgICAgICAgICAgICAgICAgdWludDMyX3QgbGhzID0gaW52b2tlPHVpbnQzMl90
PihvcjMyLCBuLCBtKTsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCByaHMgPSBzdGF0aWNfY2Fz
dDx1aW50MzJfdD4obikgfCAoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG0pID4+IGFtb3VudCk7Cisg
ICAgICAgICAgICAgICAgQ0hFQ0tfRVEobGhzLCByaHMpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorfQorCit2b2lkIHRlc3RPckxlZnRTaGlmdDY0KCkKK3sKKyAgICBWZWN0b3I8
aW50MzJfdD4gYW1vdW50cyA9IHsgMCwgMzQsIDYzIH07CisgICAgZm9yIChhdXRvIG4gOiBpbnQ2
NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG0gOiBpbnQ2NE9wZXJhbmRzKCkpIHsK
KyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAg
ICAgYXV0byBvcjY0ID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAg
ICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgICAg
ICAgICAgaml0Lm9yTGVmdFNoaWZ0NjQoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgCisgICAgICAgICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbW91bnQpLCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgICAg
ICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgICAgICAgICBqaXQu
cmV0KCk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICBpbnQ2NF90IGxo
cyA9IGludm9rZTxpbnQ2NF90PihvcjY0LCBuLCBtKTsKKyAgICAgICAgICAgICAgICBpbnQ2NF90
IHJocyA9IG4gfCAobSA8PCBhbW91bnQpOworICAgICAgICAgICAgICAgIENIRUNLX0VRKGxocywg
cmhzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0T3JS
aWdodFNoaWZ0NjQoKQoreworICAgIFZlY3RvcjxpbnQzMl90PiBhbW91bnRzID0geyAwLCAzNCwg
NjMgfTsKKyAgICBmb3IgKGF1dG8gbiA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICBmb3Ig
KGF1dG8gbSA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3Vu
dCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBhdXRvIG9yNjQgPSBjb21waWxlKFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJv
bG9ndWUoaml0KTsKKworICAgICAgICAgICAgICAgICAgICBqaXQub3JSaWdodFNoaWZ0NjQoR1BS
SW5mbzo6YXJndW1lbnRHUFIwLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmFy
Z3VtZW50R1BSMSwgCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihhbW91bnQpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVy
blZhbHVlR1BSKTsKKworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShq
aXQpOworICAgICAgICAgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICAgICAgfSk7
CisKKyAgICAgICAgICAgICAgICBpbnQ2NF90IGxocyA9IGludm9rZTxpbnQ2NF90PihvcjY0LCBu
LCBtKTsKKyAgICAgICAgICAgICAgICBpbnQ2NF90IHJocyA9IG4gfCAobSA+PiBhbW91bnQpOwor
ICAgICAgICAgICAgICAgIENIRUNLX0VRKGxocywgcmhzKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0T3JVbnNpZ25lZFJpZ2h0U2hpZnQ2NCgpCit7Cisg
ICAgVmVjdG9yPHVpbnQzMl90PiBhbW91bnRzID0geyAwLCAzNCwgNjMgfTsKKyAgICBmb3IgKGF1
dG8gbiA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbSA6IGludDY0T3Bl
cmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAg
ICAgICAgICAgICAgICBhdXRvIG9yNjQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQp
IHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAg
ICAgICAgICAgICAgICAgICBqaXQub3JVbnNpZ25lZFJpZ2h0U2hpZnQ2NChHUFJJbmZvOjphcmd1
bWVudEdQUjAsIAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6YXJndW1lbnRHUFIx
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFt
b3VudCksIAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
OworCisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAg
ICAgICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAg
ICAgICAgICAgIHVpbnQ2NF90IGxocyA9IGludm9rZTx1aW50NjRfdD4ob3I2NCwgbiwgbSk7Cisg
ICAgICAgICAgICAgICAgdWludDY0X3QgcmhzID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG4pIHwg
KHN0YXRpY19jYXN0PHVpbnQ2NF90PihtKSA+PiBhbW91bnQpOworICAgICAgICAgICAgICAgIENI
RUNLX0VRKGxocywgcmhzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KICNl
bmRpZgogCiAjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkgfHwgQ1BVKEFSTTY0KQpAQCAtNDkx
NSw2ICs1NDAzLDcgQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKSBXVEZfSUdOT1JFU19U
SFJFQURfU0FGRVRZX0FOQUxZU0lTCiAgICAgUlVOKHRlc3RMb2FkU3RvcmVQYWlyNjRJbnQ2NCgp
KTsKICAgICBSVU4odGVzdExvYWRTdG9yZVBhaXI2NERvdWJsZSgpKTsKICAgICBSVU4odGVzdE11
bHRpcGx5U2lnbkV4dGVuZDMyKCkpOworICAgIFJVTih0ZXN0TXVsdGlwbHlaZXJvRXh0ZW5kMzIo
KSk7CiAKICAgICBSVU4odGVzdFN1YjMyQXJncygpKTsKICAgICBSVU4odGVzdFN1YjMySW1tKCkp
OwpAQCAtNDk4MCw2ICs1NDY5LDI2IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikgV1RG
X0lHTk9SRVNfVEhSRUFEX1NBRkVUWV9BTkFMWVNJUwogICAgIFJVTih0ZXN0U3RvcmVQcmVQb3N0
SW5kZXg2NCgpKTsKICAgICBSVU4odGVzdExvYWRQcmVQb3N0SW5kZXgzMigpKTsKICAgICBSVU4o
dGVzdExvYWRQcmVQb3N0SW5kZXg2NCgpKTsKKyAgICBSVU4odGVzdEFuZExlZnRTaGlmdDMyKCkp
OworICAgIFJVTih0ZXN0QW5kUmlnaHRTaGlmdDMyKCkpOworICAgIFJVTih0ZXN0QW5kVW5zaWdu
ZWRSaWdodFNoaWZ0MzIoKSk7CisgICAgUlVOKHRlc3RBbmRMZWZ0U2hpZnQ2NCgpKTsKKyAgICBS
VU4odGVzdEFuZFJpZ2h0U2hpZnQ2NCgpKTsKKyAgICBSVU4odGVzdEFuZFVuc2lnbmVkUmlnaHRT
aGlmdDY0KCkpOworCisgICAgUlVOKHRlc3RYb3JMZWZ0U2hpZnQzMigpKTsKKyAgICBSVU4odGVz
dFhvclJpZ2h0U2hpZnQzMigpKTsKKyAgICBSVU4odGVzdFhvclVuc2lnbmVkUmlnaHRTaGlmdDMy
KCkpOworICAgIFJVTih0ZXN0WG9yTGVmdFNoaWZ0NjQoKSk7CisgICAgUlVOKHRlc3RYb3JSaWdo
dFNoaWZ0NjQoKSk7CisgICAgUlVOKHRlc3RYb3JVbnNpZ25lZFJpZ2h0U2hpZnQ2NCgpKTsKKwor
ICAgIFJVTih0ZXN0T3JMZWZ0U2hpZnQzMigpKTsKKyAgICBSVU4odGVzdE9yUmlnaHRTaGlmdDMy
KCkpOworICAgIFJVTih0ZXN0T3JVbnNpZ25lZFJpZ2h0U2hpZnQzMigpKTsKKyAgICBSVU4odGVz
dE9yTGVmdFNoaWZ0NjQoKSk7CisgICAgUlVOKHRlc3RPclJpZ2h0U2hpZnQ2NCgpKTsKKyAgICBS
VU4odGVzdE9yVW5zaWduZWRSaWdodFNoaWZ0NjQoKSk7CiAjZW5kaWYKIAogI2lmIENQVShBUk02
NEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCmluZGV4IGViYjAz
NTJjYjMwODAzZGJjMWZlODE4ZTM5OTBiYTM3NDU3MDY2MzcuLmUxNmYzZjZhMmZjODdjMTY1ZTYx
ZWZiMzI4ZDMwMDMyMWZhMmZkMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0xvd2VyVG9BaXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2Vy
VG9BaXIuY3BwCkBAIC00OTksNyArNDk5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogCi0gICAgYm9vbCBpc01lcmdlYWJsZVZhbHVlKFZhbHVlKiB2LCBCMzo6T3Bj
b2RlIGIzT3Bjb2RlLCBib29sIGNoZWNrQ2FuQmVJbnRlcm5hbCkKKyAgICBib29sIGlzTWVyZ2Vh
YmxlVmFsdWUoVmFsdWUqIHYsIEIzOjpPcGNvZGUgYjNPcGNvZGUsIGJvb2wgY2hlY2tDYW5CZUlu
dGVybmFsID0gZmFsc2UpCiAgICAgeyAKICAgICAgICAgaWYgKHYtPm9wY29kZSgpICE9IGIzT3Bj
b2RlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTE2LDkgKzUxNiw5IEBAIHByaXZh
dGU6CiAjaWYgQ1BVKEFSTTY0KQogICAgICAgICAvLyBNYXliZSwgdGhlIGlkZWFsIGFwcHJvYWNo
IGlzIHRvIGludHJvZHVjZSBhIGRlY29yYXRvciAoSW5kZXhARVhUKSB0byB0aGUgQWlyIG9wZXJh
bmQgCiAgICAgICAgIC8vIHRvIHByb3ZpZGUgYW4gZXh0ZW5zaW9uIG9wcG9ydHVuaXR5IGZvciB0
aGUgc3BlY2lmaWMgZm9ybSB1bmRlciB0aGUgQWlyIG9wY29kZS4KLSAgICAgICAgaWYgKGlzTWVy
Z2VhYmxlVmFsdWUoaW5kZXgsIFpFeHQzMiwgZmFsc2UpKQorICAgICAgICBpZiAoaXNNZXJnZWFi
bGVWYWx1ZShpbmRleCwgWkV4dDMyKSkKICAgICAgICAgICAgIHJldHVybiBBcmc6OmluZGV4KGJh
c2UsIHRtcChpbmRleC0+Y2hpbGQoMCkpLCBzY2FsZSwgb2Zmc2V0LCBNYWNyb0Fzc2VtYmxlcjo6
RXh0ZW5kOjpaRXh0MzIpOwotICAgICAgICBpZiAoaXNNZXJnZWFibGVWYWx1ZShpbmRleCwgU0V4
dDMyLCBmYWxzZSkpCisgICAgICAgIGlmIChpc01lcmdlYWJsZVZhbHVlKGluZGV4LCBTRXh0MzIp
KQogICAgICAgICAgICAgcmV0dXJuIEFyZzo6aW5kZXgoYmFzZSwgdG1wKGluZGV4LT5jaGlsZCgw
KSksIHNjYWxlLCBvZmZzZXQsIE1hY3JvQXNzZW1ibGVyOjpFeHRlbmQ6OlNFeHQzMik7CiAjZW5k
aWYKICAgICAgICAgcmV0dXJuIEFyZzo6aW5kZXgoYmFzZSwgdG1wKGluZGV4KSwgc2NhbGUsIG9m
ZnNldCk7CkBAIC0yNjcyLDEwICsyNjcyLDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoYWlyT3Bjb2RlICE9IE11bHRpcGx5QWRkNjQpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEFpcjo6T29wczsKICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFNNQURETDogZCA9IFNFeHQzMihuKSAqIFNFeHQzMihtKSArIGEKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChpc01lcmdlYWJsZVZhbHVlKG11bHRpcGx5TGVmdCwgU0V4dDMyLCB0cnVlKSAm
JiBpc01lcmdlYWJsZVZhbHVlKG11bHRpcGx5UmlnaHQsIFNFeHQzMiwgdHJ1ZSkpIAorICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGlzTWVyZ2VhYmxlVmFsdWUobXVsdGlwbHlMZWZ0LCBTRXh0
MzIpICYmIGlzTWVyZ2VhYmxlVmFsdWUobXVsdGlwbHlSaWdodCwgU0V4dDMyKSkgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE11bHRpcGx5QWRkU2lnbkV4dGVuZDMyOwogICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gVU1BRERMOiBkID0gWkV4dDMyKG4pICogWkV4dDMyKG0p
ICsgYQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTWVyZ2VhYmxlVmFsdWUobXVsdGlw
bHlMZWZ0LCBaRXh0MzIsIHRydWUpICYmIGlzTWVyZ2VhYmxlVmFsdWUobXVsdGlwbHlSaWdodCwg
WkV4dDMyLCB0cnVlKSkgCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNNZXJnZWFibGVW
YWx1ZShtdWx0aXBseUxlZnQsIFpFeHQzMikgJiYgaXNNZXJnZWFibGVWYWx1ZShtdWx0aXBseVJp
Z2h0LCBaRXh0MzIpKSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTXVsdGlw
bHlBZGRaZXJvRXh0ZW5kMzI7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQWlyOjpP
b3BzOwogICAgICAgICAgICAgICAgICAgICB9OwpAQCAtMjc1MCwxMCArMjc1MCwxMCBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgICAgICBpZiAoYWlyT3Bjb2RlICE9IE11bHRpcGx5U3ViNjQp
CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQWlyOjpPb3BzOwogICAgICAgICAgICAg
ICAgICAgICAvLyBTTVNVQkw6IGQgPSBhIC0gU0V4dDMyKG4pICogU0V4dDMyKG0pCi0gICAgICAg
ICAgICAgICAgICAgIGlmIChpc01lcmdlYWJsZVZhbHVlKG11bHRpcGx5TGVmdCwgU0V4dDMyLCB0
cnVlKSAmJiBpc01lcmdlYWJsZVZhbHVlKG11bHRpcGx5UmlnaHQsIFNFeHQzMiwgdHJ1ZSkpIAor
ICAgICAgICAgICAgICAgICAgICBpZiAoaXNNZXJnZWFibGVWYWx1ZShtdWx0aXBseUxlZnQsIFNF
eHQzMikgJiYgaXNNZXJnZWFibGVWYWx1ZShtdWx0aXBseVJpZ2h0LCBTRXh0MzIpKSAKICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBNdWx0aXBseVN1YlNpZ25FeHRlbmQzMjsKICAgICAg
ICAgICAgICAgICAgICAgLy8gVU1TVUJMOiBkID0gYSAtIFpFeHQzMihuKSAqIFpFeHQzMihtKQot
ICAgICAgICAgICAgICAgICAgICBpZiAoaXNNZXJnZWFibGVWYWx1ZShtdWx0aXBseUxlZnQsIFpF
eHQzMiwgdHJ1ZSkgJiYgaXNNZXJnZWFibGVWYWx1ZShtdWx0aXBseVJpZ2h0LCBaRXh0MzIsIHRy
dWUpKSAKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzTWVyZ2VhYmxlVmFsdWUobXVsdGlwbHlM
ZWZ0LCBaRXh0MzIpICYmIGlzTWVyZ2VhYmxlVmFsdWUobXVsdGlwbHlSaWdodCwgWkV4dDMyKSkg
CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTXVsdGlwbHlTdWJaZXJvRXh0ZW5kMzI7
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBaXI6Ok9vcHM7CiAgICAgICAgICAgICAgICAg
fTsKQEAgLTI4MTksMTAgKzI4MTksMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
aWYgKGFpck9wY29kZSAhPSBNdWx0aXBseU5lZzY0KQogICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEFpcjo6T29wczsKICAgICAgICAgICAgICAgICAgICAgLy8gU01ORUdMOiBkID0gLShT
RXh0MzIobikgKiBTRXh0MzIobSkpCi0gICAgICAgICAgICAgICAgICAgIGlmIChpc01lcmdlYWJs
ZVZhbHVlKG11bHRpcGx5TGVmdCwgU0V4dDMyLCB0cnVlKSAmJiBpc01lcmdlYWJsZVZhbHVlKG11
bHRpcGx5UmlnaHQsIFNFeHQzMiwgdHJ1ZSkpIAorICAgICAgICAgICAgICAgICAgICBpZiAoaXNN
ZXJnZWFibGVWYWx1ZShtdWx0aXBseUxlZnQsIFNFeHQzMikgJiYgaXNNZXJnZWFibGVWYWx1ZSht
dWx0aXBseVJpZ2h0LCBTRXh0MzIpKSAKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBN
dWx0aXBseU5lZ1NpZ25FeHRlbmQzMjsKICAgICAgICAgICAgICAgICAgICAgLy8gVU1ORUdMOiBk
ID0gLShaRXh0MzIobikgKiBaRXh0MzIobSkpCi0gICAgICAgICAgICAgICAgICAgIGlmIChpc01l
cmdlYWJsZVZhbHVlKG11bHRpcGx5TGVmdCwgWkV4dDMyLCB0cnVlKSAmJiBpc01lcmdlYWJsZVZh
bHVlKG11bHRpcGx5UmlnaHQsIFpFeHQzMiwgdHJ1ZSkpIAorICAgICAgICAgICAgICAgICAgICBp
ZiAoaXNNZXJnZWFibGVWYWx1ZShtdWx0aXBseUxlZnQsIFpFeHQzMikgJiYgaXNNZXJnZWFibGVW
YWx1ZShtdWx0aXBseVJpZ2h0LCBaRXh0MzIpKSAKICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBNdWx0aXBseU5lZ1plcm9FeHRlbmQzMjsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEFpcjo6T29wczsKICAgICAgICAgICAgICAgICB9OwpAQCAtMjg1MywyOSArMjg1MywzNiBAQCBw
cml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBNdWw6IHsKLSAgICAgICAgICAgIGlm
IChtX3ZhbHVlLT50eXBlKCkgPT0gSW50NjQKLSAgICAgICAgICAgICAgICAmJiBpc1ZhbGlkRm9y
bShNdWx0aXBseVNpZ25FeHRlbmQzMiwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OlRtcCkKLSAg
ICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gU0V4dDMyCi0g
ICAgICAgICAgICAgICAgJiYgIW1fbG9ja2VkLmNvbnRhaW5zKG1fdmFsdWUtPmNoaWxkKDApKSkg
ewotICAgICAgICAgICAgICAgIFZhbHVlKiBvcExlZnQgPSBtX3ZhbHVlLT5jaGlsZCgwKTsKLSAg
ICAgICAgICAgICAgICBWYWx1ZSogbGVmdCA9IG9wTGVmdC0+Y2hpbGQoMCk7Ci0gICAgICAgICAg
ICAgICAgVmFsdWUqIG9wUmlnaHQgPSBtX3ZhbHVlLT5jaGlsZCgxKTsKLSAgICAgICAgICAgICAg
ICBWYWx1ZSogcmlnaHQgPSBudWxscHRyOwotCi0gICAgICAgICAgICAgICAgaWYgKG9wUmlnaHQt
Pm9wY29kZSgpID09IFNFeHQzMiAmJiAhbV9sb2NrZWQuY29udGFpbnMob3BSaWdodC0+Y2hpbGQo
MCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gb3BSaWdodC0+Y2hpbGQoMCk7Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNSZXByZXNlbnRh
YmxlQXM8aW50MzJfdD4oKSAmJiAhbV9sb2NrZWQuY29udGFpbnMobV92YWx1ZS0+Y2hpbGQoMSkp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdlIGp1c3QgdXNlIHRoZSA2NC1iaXQgY29uc3Qg
aW50IGFzIGEgMzIgYml0IGNvbnN0IGludCBkaXJlY3RseQotICAgICAgICAgICAgICAgICAgICBy
aWdodCA9IG9wUmlnaHQ7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgVmFsdWUqIGxl
ZnQgPSBtX3ZhbHVlLT5jaGlsZCgwKTsKKyAgICAgICAgICAgIFZhbHVlKiByaWdodCA9IG1fdmFs
dWUtPmNoaWxkKDEpOwogCi0gICAgICAgICAgICAgICAgaWYgKHJpZ2h0KSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGFwcGVuZChNdWx0aXBseVNpZ25FeHRlbmQzMiwgdG1wKGxlZnQpLCB0bXAocmln
aHQpLCB0bXAobV92YWx1ZSkpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICBhdXRvIHRyeUFwcGVuZE11bHRpcGx5V2l0aEV4dGVuZCA9IFsmXSAoKSAtPiBib29sIHsK
KyAgICAgICAgICAgICAgICBhdXRvIHRyeUFpck9wY29kZSA9IFsmXSAoKSAtPiBBaXI6Ok9wY29k
ZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT50eXBlKCkgIT0gSW50NjQpCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQWlyOjpPb3BzOworICAgICAgICAgICAgICAg
ICAgICAvLyBTTVVMTDogZCA9IFNFeHQzMihuKSAqIFNFeHQzMihtKQorICAgICAgICAgICAgICAg
ICAgICBpZiAoaXNNZXJnZWFibGVWYWx1ZShsZWZ0LCBTRXh0MzIpICYmIGlzTWVyZ2VhYmxlVmFs
dWUocmlnaHQsIFNFeHQzMikpIAorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE11bHRp
cGx5U2lnbkV4dGVuZDMyOworICAgICAgICAgICAgICAgICAgICAvLyBVTVVMTDogZCA9IFpFeHQz
MihuKSAqIFpFeHQzMihtKQorICAgICAgICAgICAgICAgICAgICBpZiAoaXNNZXJnZWFibGVWYWx1
ZShsZWZ0LCBaRXh0MzIpICYmIGlzTWVyZ2VhYmxlVmFsdWUocmlnaHQsIFpFeHQzMikpIAorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE11bHRpcGx5WmVyb0V4dGVuZDMyOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gQWlyOjpPb3BzOworICAgICAgICAgICAgICAgIH07CisKKyAg
ICAgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSB0cnlBaXJPcGNvZGUoKTsKKyAgICAg
ICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFy
Zzo6VG1wKSkgeworICAgICAgICAgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAobGVmdC0+
Y2hpbGQoMCkpLCB0bXAocmlnaHQtPmNoaWxkKDApKSwgdG1wKG1fdmFsdWUpKTsKKyAgICAgICAg
ICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwobGVmdCk7CisgICAgICAgICAgICAgICAgICAgIGNv
bW1pdEludGVybmFsKHJpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXBwZW5kQmluT3A8
TXVsMzIsIE11bDY0LCBNdWxEb3VibGUsIE11bEZsb2F0LCBDb21tdXRhdGl2ZT4oCi0gICAgICAg
ICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBpZiAo
dHJ5QXBwZW5kTXVsdGlwbHlXaXRoRXh0ZW5kKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgICAgICBhcHBlbmRCaW5PcDxNdWwzMiwgTXVsNjQsIE11bERvdWJsZSwgTXVsRmxv
YXQsIENvbW11dGF0aXZlPihsZWZ0LCByaWdodCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KIApAQCAtMjk4OCw2ICsyOTk1LDMwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAo
dHJ5QXBwZW5kQklDKGxlZnQsIHJpZ2h0KSB8fCB0cnlBcHBlbmRCSUMocmlnaHQsIGxlZnQpKQog
ICAgICAgICAgICAgICAgIHJldHVybjsKIAorICAgICAgICAgICAgLy8gYW5kLXdpdGgtc2hpZnQg
UGF0dGVybjogbiAmIChtIFNoaWZ0VHlwZSBhbW91bnQpCisgICAgICAgICAgICBhdXRvIHRyeUFw
cGVuZEFuZFdpdGhTaGlmdCA9IFsmXSAoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkgLT4gYm9v
bCB7CisgICAgICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gb3Bjb2RlQmFzZWRPblNo
aWZ0S2luZChyaWdodC0+b3Bjb2RlKCksCisgICAgICAgICAgICAgICAgICAgIEFuZExlZnRTaGlm
dDMyLCBBbmRMZWZ0U2hpZnQ2NCwKKyAgICAgICAgICAgICAgICAgICAgQW5kUmlnaHRTaGlmdDMy
LCBBbmRSaWdodFNoaWZ0NjQsCisgICAgICAgICAgICAgICAgICAgIEFuZFVuc2lnbmVkUmlnaHRT
aGlmdDMyLCBBbmRVbnNpZ25lZFJpZ2h0U2hpZnQ2NCk7CisgICAgICAgICAgICAgICAgaWYgKCFp
c1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJnOjpJbW0sIEFyZzo6VG1w
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGlm
ICghY2FuQmVJbnRlcm5hbChyaWdodCkgfHwgIWltbShyaWdodC0+Y2hpbGQoMSkpIHx8IHJpZ2h0
LT5jaGlsZCgxKS0+YXNJbnQoKSA8IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICAgICAgICAgIHVpbnQ2NF90IGFtb3VudCA9IHJpZ2h0LT5jaGlsZCgxKS0+
YXNJbnQoKTsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBkYXRhc2l6ZSA9IG1fdmFsdWUtPnR5
cGUoKSA9PSBJbnQzMiA/IDMyIDogNjQ7CisgICAgICAgICAgICAgICAgaWYgKGFtb3VudCA+PSBk
YXRhc2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAg
ICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKGxlZnQpLCB0bXAocmlnaHQtPmNoaWxkKDApKSwgaW1t
KHJpZ2h0LT5jaGlsZCgxKSksIHRtcChtX3ZhbHVlKSk7CisgICAgICAgICAgICAgICAgY29tbWl0
SW50ZXJuYWwocmlnaHQpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgfTsKKworICAgICAgICAgICAgaWYgKHRyeUFwcGVuZEFuZFdpdGhTaGlmdChsZWZ0LCByaWdo
dCkgfHwgdHJ5QXBwZW5kQW5kV2l0aFNoaWZ0KHJpZ2h0LCBsZWZ0KSkKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisKICAgICAgICAgICAgIGFwcGVuZEJpbk9wPEFuZDMyLCBBbmQ2NCwgQW5kRG91
YmxlLCBBbmRGbG9hdCwgQ29tbXV0YXRpdmU+KGxlZnQsIHJpZ2h0KTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQpAQCAtMzAwMSw3ICszMDMyLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIC8vICAgICAgICBtYXNrID0gKDEgPDwgbG93V2lkdGgpIC0gMQogICAgICAgICAgICAgYXV0
byB0cnlBcHBlbmRFWFRSID0gWyZdIChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KSAtPiBib29s
IHsKICAgICAgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBvcGNvZGVGb3JUeXBlKEV4
dHJhY3RSZWdpc3RlcjMyLCBFeHRyYWN0UmVnaXN0ZXI2NCwgbV92YWx1ZS0+dHlwZSgpKTsKLSAg
ICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIEFyZzo6VG1w
LCBBcmc6OkltbSwgQXJnOjpUbXApKSAKKyAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRGb3Jt
KG9wY29kZSwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OkltbSwgQXJnOjpUbXApKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgaWYgKGxlZnQtPm9w
Y29kZSgpICE9IFNobCB8fCBsZWZ0LT5jaGlsZCgwKS0+b3Bjb2RlKCkgIT0gQml0QW5kIHx8IHJp
Z2h0LT5vcGNvZGUoKSAhPSBaU2hyKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC0zMTU1LDYgKzMxODYsMzAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmICh0cnlBcHBl
bmRPUk4obGVmdCwgcmlnaHQpIHx8IHRyeUFwcGVuZE9STihyaWdodCwgbGVmdCkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogCisgICAgICAgICAgICAvLyBvcnItd2l0aC1zaGlmdCBQYXR0ZXJu
OiBuIHwgKG0gU2hpZnRUeXBlIGFtb3VudCkKKyAgICAgICAgICAgIGF1dG8gdHJ5QXBwZW5kT3JX
aXRoU2hpZnQgPSBbJl0gKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpIC0+IGJvb2wgeworICAg
ICAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IG9wY29kZUJhc2VkT25TaGlmdEtpbmQo
cmlnaHQtPm9wY29kZSgpLCAKKyAgICAgICAgICAgICAgICAgICAgT3JMZWZ0U2hpZnQzMiwgT3JM
ZWZ0U2hpZnQ2NCwgCisgICAgICAgICAgICAgICAgICAgIE9yUmlnaHRTaGlmdDMyLCBPclJpZ2h0
U2hpZnQ2NCwgCisgICAgICAgICAgICAgICAgICAgIE9yVW5zaWduZWRSaWdodFNoaWZ0MzIsIE9y
VW5zaWduZWRSaWdodFNoaWZ0NjQpOworICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZEZvcm0o
b3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFyZzo6SW1tLCBBcmc6OlRtcCkpIAorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKCFjYW5CZUlu
dGVybmFsKHJpZ2h0KSB8fCAhaW1tKHJpZ2h0LT5jaGlsZCgxKSkgfHwgcmlnaHQtPmNoaWxkKDEp
LT5hc0ludCgpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgICAgICAgICAgdWludDY0X3QgYW1vdW50ID0gcmlnaHQtPmNoaWxkKDEpLT5hc0ludCgpOwor
ICAgICAgICAgICAgICAgIHVpbnQ2NF90IGRhdGFzaXplID0gbV92YWx1ZS0+dHlwZSgpID09IElu
dDMyID8gMzIgOiA2NDsKKyAgICAgICAgICAgICAgICBpZiAoYW1vdW50ID49IGRhdGFzaXplKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICBhcHBl
bmQob3Bjb2RlLCB0bXAobGVmdCksIHRtcChyaWdodC0+Y2hpbGQoMCkpLCBpbW0ocmlnaHQtPmNo
aWxkKDEpKSwgdG1wKG1fdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbChy
aWdodCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9OworCisg
ICAgICAgICAgICBpZiAodHJ5QXBwZW5kT3JXaXRoU2hpZnQobGVmdCwgcmlnaHQpIHx8IHRyeUFw
cGVuZE9yV2l0aFNoaWZ0KHJpZ2h0LCBsZWZ0KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisK
ICAgICAgICAgICAgIGFwcGVuZEJpbk9wPE9yMzIsIE9yNjQsIE9yRG91YmxlLCBPckZsb2F0LCBD
b21tdXRhdGl2ZT4obGVmdCwgcmlnaHQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CkBAIC0zMjI1LDYgKzMyODAsMzAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmICh0cnlBcHBl
bmRFT04obGVmdCwgcmlnaHQpIHx8IHRyeUFwcGVuZEVPTihyaWdodCwgbGVmdCkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogCisgICAgICAgICAgICAvLyBlb3Itd2l0aC1zaGlmdCBQYXR0ZXJu
OiBuIF4gKG0gU2hpZnRUeXBlIGFtb3VudCkKKyAgICAgICAgICAgIGF1dG8gdHJ5QXBwZW5kWG9y
V2l0aFNoaWZ0ID0gWyZdIChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KSAtPiBib29sIHsKKyAg
ICAgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBvcGNvZGVCYXNlZE9uU2hpZnRLaW5k
KHJpZ2h0LT5vcGNvZGUoKSwgCisgICAgICAgICAgICAgICAgICAgIFhvckxlZnRTaGlmdDMyLCBY
b3JMZWZ0U2hpZnQ2NCwgCisgICAgICAgICAgICAgICAgICAgIFhvclJpZ2h0U2hpZnQzMiwgWG9y
UmlnaHRTaGlmdDY0LCAKKyAgICAgICAgICAgICAgICAgICAgWG9yVW5zaWduZWRSaWdodFNoaWZ0
MzIsIFhvclVuc2lnbmVkUmlnaHRTaGlmdDY0KTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzVmFs
aWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OkltbSwgQXJnOjpUbXApKSAK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGlmICgh
Y2FuQmVJbnRlcm5hbChyaWdodCkgfHwgIWltbShyaWdodC0+Y2hpbGQoMSkpIHx8IHJpZ2h0LT5j
aGlsZCgxKS0+YXNJbnQoKSA8IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICAgICAgICAgIHVpbnQ2NF90IGFtb3VudCA9IHJpZ2h0LT5jaGlsZCgxKS0+YXNJ
bnQoKTsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBkYXRhc2l6ZSA9IG1fdmFsdWUtPnR5cGUo
KSA9PSBJbnQzMiA/IDMyIDogNjQ7CisgICAgICAgICAgICAgICAgaWYgKGFtb3VudCA+PSBkYXRh
c2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAg
ICAgYXBwZW5kKG9wY29kZSwgdG1wKGxlZnQpLCB0bXAocmlnaHQtPmNoaWxkKDApKSwgaW1tKHJp
Z2h0LT5jaGlsZCgxKSksIHRtcChtX3ZhbHVlKSk7CisgICAgICAgICAgICAgICAgY29tbWl0SW50
ZXJuYWwocmlnaHQpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
fTsKKworICAgICAgICAgICAgaWYgKHRyeUFwcGVuZFhvcldpdGhTaGlmdChsZWZ0LCByaWdodCkg
fHwgdHJ5QXBwZW5kWG9yV2l0aFNoaWZ0KHJpZ2h0LCBsZWZ0KSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisKICAgICAgICAgICAgIGFwcGVuZEJpbk9wPFhvcjMyLCBYb3I2NCwgWG9yRG91Ymxl
LCBYb3JGbG9hdCwgQ29tbXV0YXRpdmU+KGxlZnQsIHJpZ2h0KTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJPcGNvZGUub3Bjb2RlcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2Rl
Lm9wY29kZXMKaW5kZXggNDlmZWQxYWFhMTlhZjZkZGNkOTJjMzM5ZjcwYjU3NmQwZDM5NWRkZS4u
Zjg1NDU3NTM3NDNhZjI1YzJiNTg3ZWViZmRkYTQyNTc3OWZkYmVjMiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcworKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCkBAIC0yODQsNiArMjg0LDkg
QEAgYXJtNjQ6IE11bHRpcGx5TmVnWmVyb0V4dGVuZDMyIFU6RzozMiwgVTpHOjMyLCBEOkc6NjQK
IGFybTY0OiBNdWx0aXBseVNpZ25FeHRlbmQzMiBVOkc6MzIsIFU6RzozMiwgRDpHOjY0CiAgICAg
VG1wLCBUbXAsIFRtcAogCithcm02NDogTXVsdGlwbHlaZXJvRXh0ZW5kMzIgVTpHOjMyLCBVOkc6
MzIsIEQ6Rzo2NAorICAgIFRtcCwgVG1wLCBUbXAKKwogYXJtNjQ6IERpdjMyIFU6RzozMiwgVTpH
OjMyLCBaRDpHOjMyCiAgICAgVG1wLCBUbXAsIFRtcAogCkBAIC05NTUsNiArOTU4LDYwIEBAIGFy
bTY0OiBTdWJSaWdodFNoaWZ0NjQgVTpHOjY0LCBVOkc6NjQsIFU6Rzo2NCwgRDpHOjY0CiBhcm02
NDogU3ViVW5zaWduZWRSaWdodFNoaWZ0NjQgVTpHOjY0LCBVOkc6NjQsIFU6Rzo2NCwgRDpHOjY0
CiAgICAgVG1wLCBUbXAsIEltbSwgVG1wCiAKK2FybTY0OiBBbmRMZWZ0U2hpZnQzMiBVOkc6MzIs
IFU6RzozMiwgVTpHOjMyLCBaRDpHOjMyCisgICAgVG1wLCBUbXAsIEltbSwgVG1wCisKK2FybTY0
OiBBbmRSaWdodFNoaWZ0MzIgVTpHOjMyLCBVOkc6MzIsIFU6RzozMiwgWkQ6RzozMgorICAgIFRt
cCwgVG1wLCBJbW0sIFRtcAorCithcm02NDogQW5kVW5zaWduZWRSaWdodFNoaWZ0MzIgVTpHOjMy
LCBVOkc6MzIsIFU6RzozMiwgWkQ6RzozMgorICAgIFRtcCwgVG1wLCBJbW0sIFRtcAorCithcm02
NDogQW5kTGVmdFNoaWZ0NjQgVTpHOjY0LCBVOkc6NjQsIFU6Rzo2NCwgRDpHOjY0CisgICAgVG1w
LCBUbXAsIEltbSwgVG1wCisKK2FybTY0OiBBbmRSaWdodFNoaWZ0NjQgVTpHOjY0LCBVOkc6NjQs
IFU6Rzo2NCwgRDpHOjY0CisgICAgVG1wLCBUbXAsIEltbSwgVG1wCisKK2FybTY0OiBBbmRVbnNp
Z25lZFJpZ2h0U2hpZnQ2NCBVOkc6NjQsIFU6Rzo2NCwgVTpHOjY0LCBEOkc6NjQKKyAgICBUbXAs
IFRtcCwgSW1tLCBUbXAKKworYXJtNjQ6IFhvckxlZnRTaGlmdDMyIFU6RzozMiwgVTpHOjMyLCBV
Okc6MzIsIFpEOkc6MzIKKyAgICBUbXAsIFRtcCwgSW1tLCBUbXAKKworYXJtNjQ6IFhvclJpZ2h0
U2hpZnQzMiBVOkc6MzIsIFU6RzozMiwgVTpHOjMyLCBaRDpHOjMyCisgICAgVG1wLCBUbXAsIElt
bSwgVG1wCisKK2FybTY0OiBYb3JVbnNpZ25lZFJpZ2h0U2hpZnQzMiBVOkc6MzIsIFU6RzozMiwg
VTpHOjMyLCBaRDpHOjMyCisgICAgVG1wLCBUbXAsIEltbSwgVG1wCisKK2FybTY0OiBYb3JMZWZ0
U2hpZnQ2NCBVOkc6NjQsIFU6Rzo2NCwgVTpHOjY0LCBEOkc6NjQKKyAgICBUbXAsIFRtcCwgSW1t
LCBUbXAKKworYXJtNjQ6IFhvclJpZ2h0U2hpZnQ2NCBVOkc6NjQsIFU6Rzo2NCwgVTpHOjY0LCBE
Okc6NjQKKyAgICBUbXAsIFRtcCwgSW1tLCBUbXAKKworYXJtNjQ6IFhvclVuc2lnbmVkUmlnaHRT
aGlmdDY0IFU6Rzo2NCwgVTpHOjY0LCBVOkc6NjQsIEQ6Rzo2NAorICAgIFRtcCwgVG1wLCBJbW0s
IFRtcAorCithcm02NDogT3JMZWZ0U2hpZnQzMiBVOkc6MzIsIFU6RzozMiwgVTpHOjMyLCBaRDpH
OjMyCisgICAgVG1wLCBUbXAsIEltbSwgVG1wCisKK2FybTY0OiBPclJpZ2h0U2hpZnQzMiBVOkc6
MzIsIFU6RzozMiwgVTpHOjMyLCBaRDpHOjMyCisgICAgVG1wLCBUbXAsIEltbSwgVG1wCisKK2Fy
bTY0OiBPclVuc2lnbmVkUmlnaHRTaGlmdDMyIFU6RzozMiwgVTpHOjMyLCBVOkc6MzIsIFpEOkc6
MzIKKyAgICBUbXAsIFRtcCwgSW1tLCBUbXAKKworYXJtNjQ6IE9yTGVmdFNoaWZ0NjQgVTpHOjY0
LCBVOkc6NjQsIFU6Rzo2NCwgRDpHOjY0CisgICAgVG1wLCBUbXAsIEltbSwgVG1wCisKK2FybTY0
OiBPclJpZ2h0U2hpZnQ2NCBVOkc6NjQsIFU6Rzo2NCwgVTpHOjY0LCBEOkc6NjQKKyAgICBUbXAs
IFRtcCwgSW1tLCBUbXAKKworYXJtNjQ6IE9yVW5zaWduZWRSaWdodFNoaWZ0NjQgVTpHOjY0LCBV
Okc6NjQsIFU6Rzo2NCwgRDpHOjY0CisgICAgVG1wLCBUbXAsIEltbSwgVG1wCisKICMgVGhlIGZp
cnN0IG9wZXJhbmQgaXMgcmF4LgogIyBGSVhNRTogVGhpcyBmb3JtdWxhdGlvbiBtZWFucyB0aGF0
IHRoZSBib29sZWFuIHJlc3VsdCBjYW5ub3QgYmUgcHV0IGluIGVheCwgZXZlbiB0aG91Z2ggYWxs
IHVzZXJzCiAjIG9mIHRoaXMgd291bGQgYmUgT0sgd2l0aCB0aGF0LgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L3Rlc3RiMy5oCmluZGV4IDcyMWViM2FkZDYyNzQ4ZTJmYjAyZGRmNDI1NTdjYzU5ZDVkODgwZWIu
LjlhYTQwZDEyMWVlNGVjZjI2ZTk0ZjdlNTlmYjE0ZjkzNWJlYTljYjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvdGVzdGIzLmgKQEAgLTQ3MSw2ICs0NzEsMjggQEAgdm9pZCB0ZXN0U3ViV2l0aFVuc2ln
bmVkUmlnaHRTaGlmdDMyKCk7CiB2b2lkIHRlc3RTdWJXaXRoTGVmdFNoaWZ0NjQoKTsKIHZvaWQg
dGVzdFN1YldpdGhSaWdodFNoaWZ0NjQoKTsKIHZvaWQgdGVzdFN1YldpdGhVbnNpZ25lZFJpZ2h0
U2hpZnQ2NCgpOworCit2b2lkIHRlc3RBbmRMZWZ0U2hpZnQzMigpOwordm9pZCB0ZXN0QW5kUmln
aHRTaGlmdDMyKCk7Cit2b2lkIHRlc3RBbmRVbnNpZ25lZFJpZ2h0U2hpZnQzMigpOwordm9pZCB0
ZXN0QW5kTGVmdFNoaWZ0NjQoKTsKK3ZvaWQgdGVzdEFuZFJpZ2h0U2hpZnQ2NCgpOwordm9pZCB0
ZXN0QW5kVW5zaWduZWRSaWdodFNoaWZ0NjQoKTsKKwordm9pZCB0ZXN0WG9yTGVmdFNoaWZ0MzIo
KTsKK3ZvaWQgdGVzdFhvclJpZ2h0U2hpZnQzMigpOwordm9pZCB0ZXN0WG9yVW5zaWduZWRSaWdo
dFNoaWZ0MzIoKTsKK3ZvaWQgdGVzdFhvckxlZnRTaGlmdDY0KCk7Cit2b2lkIHRlc3RYb3JSaWdo
dFNoaWZ0NjQoKTsKK3ZvaWQgdGVzdFhvclVuc2lnbmVkUmlnaHRTaGlmdDY0KCk7CisKK3ZvaWQg
dGVzdE9yTGVmdFNoaWZ0MzIoKTsKK3ZvaWQgdGVzdE9yUmlnaHRTaGlmdDMyKCk7Cit2b2lkIHRl
c3RPclVuc2lnbmVkUmlnaHRTaGlmdDMyKCk7Cit2b2lkIHRlc3RPckxlZnRTaGlmdDY0KCk7Cit2
b2lkIHRlc3RPclJpZ2h0U2hpZnQ2NCgpOwordm9pZCB0ZXN0T3JVbnNpZ25lZFJpZ2h0U2hpZnQ2
NCgpOworCiB2b2lkIHRlc3RTZWxlY3RDb21wYXJlRG91YmxlKCk7CiB2b2lkIHRlc3RTZWxlY3RD
b21wYXJlRmxvYXQoZmxvYXQsIGZsb2F0KTsKIHZvaWQgdGVzdFNlbGVjdENvbXBhcmVGbG9hdFRv
RG91YmxlKGZsb2F0LCBmbG9hdCk7CkBAIC05MTcsNyArOTM5LDggQEAgdm9pZCB0ZXN0TXVsTmVn
QXJnQXJnKGludCwgaW50KTsKIHZvaWQgdGVzdE11bEFyZ0ltbShpbnQ2NF90LCBpbnQ2NF90KTsK
IHZvaWQgdGVzdE11bEltbUFyZyhpbnQsIGludCk7CiB2b2lkIHRlc3RNdWxBcmdzMzIoaW50LCBp
bnQpOwotdm9pZCB0ZXN0TXVsQXJnczMyU2lnbkV4dGVuZChpbnQsIGludCk7Cit2b2lkIHRlc3RN
dWxBcmdzMzJTaWduRXh0ZW5kKCk7Cit2b2lkIHRlc3RNdWxBcmdzMzJaZXJvRXh0ZW5kKCk7CiB2
b2lkIHRlc3RNdWxJbW0zMlNpZ25FeHRlbmQoY29uc3QgaW50LCBpbnQpOwogdm9pZCB0ZXN0TXVs
TG9hZFR3aWNlKCk7CiB2b2lkIHRlc3RNdWxBZGRBcmdzTGVmdCgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy90ZXN0YjNfMi5jcHAKaW5kZXggMjRiM2Y4Mzg3MmEwZmNiZTY5MzRmM2JhMGM5MTA3YWNh
NzE0MDE1NC4uNTEzNjgxN2YyY2I0OWExZjI1YTZiMjU1NmM1MDkzMGNjYzg1ZGQ4YyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18yLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzIuY3BwCkBAIC0xMjI4LDEwICsxMjI4LDEwIEBAIHZv
aWQgdGVzdE11bEFyZ3MzMihpbnQgYSwgaW50IGIpCiAgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxp
bnQ+KHByb2MsIGEsIGIpID09IGEgKiBiKTsKIH0KIAotdm9pZCB0ZXN0TXVsQXJnczMyU2lnbkV4
dGVuZChpbnQgYSwgaW50IGIpCit2b2lkIHRlc3RNdWxBcmdzMzJTaWduRXh0ZW5kKCkKIHsKICAg
ICBQcm9jZWR1cmUgcHJvYzsKLSAgICBpZiAocHJvYy5vcHRMZXZlbCgpIDwgMSkKKyAgICBpZiAo
cHJvYy5vcHRMZXZlbCgpIDwgMikKICAgICAgICAgcmV0dXJuOwogICAgIEJhc2ljQmxvY2sqIHJv
b3QgPSBwcm9jLmFkZEJsb2NrKCk7CiAgICAgVmFsdWUqIGFyZzEgPSByb290LT5hcHBlbmROZXc8
VmFsdWU+KApAQCAtMTI0Niw4ICsxMjQ2LDQ2IEBAIHZvaWQgdGVzdE11bEFyZ3MzMlNpZ25FeHRl
bmQoaW50IGEsIGludCBiKQogICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShwcm9jLCBS
ZXR1cm4sIE9yaWdpbigpLCBtdWwpOwogCiAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJv
Yyk7CisgICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNv
ZGUsICJzbXVsbCIpOworCisgICAgZm9yIChhdXRvIG5PcGVyYW5kIDogaW50MzJPcGVyYW5kcygp
KSB7CisgICAgICAgIGZvciAoYXV0byBtT3BlcmFuZCA6IGludDMyT3BlcmFuZHMoKSkgeworICAg
ICAgICAgICAgaW50MzJfdCBuID0gbk9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICBpbnQzMl90
IG0gPSBtT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgIENIRUNLX0VRKGludm9rZTxpbnQ2NF90
PigqY29kZSwgbiwgbSksIHN0YXRpY19jYXN0PGludDY0X3Q+KG4pICogc3RhdGljX2Nhc3Q8aW50
NjRfdD4obSkpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RNdWxBcmdzMzJaZXJv
RXh0ZW5kKCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBpZiAocHJvYy5vcHRMZXZlbCgp
IDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJs
b2NrKCk7CisgICAgVmFsdWUqIGFyZzEgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAg
ICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVu
dFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAg
VmFsdWUqIGFyZzIgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICBwcm9jLCBUcnVu
YywgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSk7CisgICAgVmFsdWUqIGxlZnQg
PSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFpFeHQzMiwgT3JpZ2luKCksIGFyZzEpOwor
ICAgIFZhbHVlKiByaWdodCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgWkV4dDMyLCBP
cmlnaW4oKSwgYXJnMik7CisgICAgVmFsdWUqIG11bCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgTXVsLCBPcmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIHJvb3QtPmFwcGVuZE5ld0Nv
bnRyb2xWYWx1ZShwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBtdWwpOworCisgICAgYXV0byBjb2Rl
ID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgaWYgKGlzQVJNNjQoKSkKKyAgICAgICAgY2hlY2tV
c2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJ1bXVsbCIpOwogCi0gICAgQ0hFQ0soaW52b2tlPGxvbmcg
aW50PigqY29kZSwgYSwgYikgPT0gKChsb25nIGludCkgYSkgKiAoKGxvbmcgaW50KSBiKSk7Cisg
ICAgZm9yIChhdXRvIG5PcGVyYW5kIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAo
YXV0byBtT3BlcmFuZCA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICAgICAgdWludDMyX3Qg
biA9IG5PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgdWludDMyX3QgbSA9IG1PcGVyYW5kLnZh
bHVlOworICAgICAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPHVpbnQ2NF90PigqY29kZSwgbiwgbSks
IHN0YXRpY19jYXN0PHVpbnQ2NF90PihuKSAqIHN0YXRpY19jYXN0PHVpbnQ2NF90PihtKSk7Cisg
ICAgICAgIH0KKyAgICB9CiB9CiAKIHZvaWQgdGVzdE11bEltbTMyU2lnbkV4dGVuZChjb25zdCBp
bnQgYSwgaW50IGIpCkBAIC01NDYxLDE2MyArNTQ5OSw5MTkgQEAgdm9pZCB0ZXN0U3ViV2l0aFVu
c2lnbmVkUmlnaHRTaGlmdDY0KCkKICAgICB9CiB9CiAKLXZvaWQgdGVzdEJpdEFuZFplcm9TaGlm
dFJpZ2h0QXJnSW1tTWFzazMyKCkKK3ZvaWQgdGVzdEFuZExlZnRTaGlmdDMyKCkKIHsKLSAgICAv
LyBUdXJuIHRoaXM6ICh0bXAgPj4gaW1tKSAmIG1hc2sgCi0gICAgLy8gSW50byB0aGlzOiB0bXAg
Pj4gaW1tCi0gICAgdWludDMyX3QgdG1wID0gMHhmZmZmZmZmZjsKLSAgICBWZWN0b3I8dWludDMy
X3Q+IGltbXMgPSB7IDQsIDI4LCAzMSB9OwotICAgIFZlY3Rvcjx1aW50MzJfdD4gbWFza3MgPSB7
IDB4MGZmZmZmZmYsIDB4ZiwgMHhmZmZmIH07CisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVs
dEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8aW50MzJfdD4g
YW1vdW50cyA9IHsgMSwgMTcsIDMxIH07CiAKLSAgICBhdXRvIHRlc3QgPSBbJl0gKHVpbnQzMl90
IGltbSwgdWludDMyX3QgbWFzaykgeworICAgIC8vIFRlc3QgUGF0dGVybjogZCA9IG4gJiAobSA8
PCBhbW91bnQpCisgICAgYXV0byB0ZXN0ID0gWyZdIChpbnQzMl90IG4sIGludDMyX3QgbSwgaW50
MzJfdCBhbW91bnQpIC0+IGludDMyX3QgewogICAgICAgICBQcm9jZWR1cmUgcHJvYzsKICAgICAg
ICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKIAotICAgICAgICBWYWx1ZSog
dG1wVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICBWYWx1ZSogblZhbHVl
ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKICAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmln
aW4oKSwgCiAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOwotICAgICAgICBWYWx1ZSogaW1t
VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgaW1t
KTsKLSAgICAgICAgVmFsdWUqIGxlZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJv
YywgWlNociwgT3JpZ2luKCksIHRtcFZhbHVlLCBpbW1WYWx1ZSk7Ci0gICAgICAgIFZhbHVlKiBy
aWdodFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IG1hc2spOworICAgICAgICBWYWx1ZSogbVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigK
KyAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5h
cHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSkpOworICAgICAgICBWYWx1ZSogYW1vdW50VmFsdWUgPSByb290LT5hcHBlbmROZXc8
Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYW1vdW50KTsKKworICAgICAgICBWYWx1ZSog
c2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU2hsLCBPcmlnaW4oKSwg
bVZhbHVlLCBhbW91bnRWYWx1ZSk7CiAgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1
ZSgKLSAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCi0gICAgICAgICAgICByb290
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdEFuZCwgT3JpZ2luKCksIGxlZnRWYWx1ZSwgcmln
aHRWYWx1ZSkpOworICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgCisgICAgICAg
ICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdEFuZCwgT3JpZ2luKCksIG5WYWx1
ZSwgc2hpZnRWYWx1ZSkpOwogCiAgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2Mp
OwotICAgICAgICBpZiAoaXNBUk02NCgpKQotICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rp
b24oKmNvZGUsICJsc3IiKTsKLSAgICAgICAgdWludDMyX3QgbGhzID0gaW52b2tlPHVpbnQzMl90
PigqY29kZSwgdG1wKTsKLSAgICAgICAgdWludDMyX3QgcmhzID0gdG1wID4+IGltbTsKLSAgICAg
ICAgQ0hFQ0sobGhzID09IHJocyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkpIHsKKyAgICAgICAg
ICAgIHN0ZDo6c3RyaW5nIHJlZ2V4KCIuKmFuZC4qLC4qLC4qLC4qbHNsICMiKTsKKyAgICAgICAg
ICAgIHJlZ2V4ICs9IHN0ZDo6dG9fc3RyaW5nKGFtb3VudCkgKyAiLioiOworICAgICAgICAgICAg
Y2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsIHJlZ2V4LmNfc3RyKCksIHRydWUpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBpbnZva2U8aW50MzJfdD4oKmNvZGUsIG4sIG0pOwogICAgIH07
CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGltbXMuc2l6ZSgpOyArK2kpCi0gICAgICAg
IHRlc3QoaW1tcy5hdChpKSwgbWFza3MuYXQoaSkpOworICAgIGZvciAoYXV0byBuT3BlcmFuZCA6
IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbU9wZXJhbmQgOiBpbnQzMk9w
ZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7Cisg
ICAgICAgICAgICAgICAgaW50MzJfdCBuID0gbk9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAg
ICAgaW50MzJfdCBtID0gbU9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEo
dGVzdChuLCBtLCBhbW91bnQpLCBuICYgKG0gPDwgYW1vdW50KSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CiB9CiAKLXZvaWQgdGVzdEJpdEFuZFplcm9TaGlmdFJpZ2h0QXJnSW1t
TWFzazY0KCkKK3ZvaWQgdGVzdEFuZFJpZ2h0U2hpZnQzMigpCiB7Ci0gICAgLy8gVHVybiB0aGlz
OiAodG1wID4+IGltbSkgJiBtYXNrIAotICAgIC8vIEludG8gdGhpczogdG1wID4+IGltbQotICAg
IHVpbnQ2NF90IHRtcCA9IDB4ZmZmZmZmZmZmZmZmZmZmZjsKLSAgICBWZWN0b3I8dWludDY0X3Q+
IGltbXMgPSB7IDQsIDYwLCA2MyB9OwotICAgIFZlY3Rvcjx1aW50NjRfdD4gbWFza3MgPSB7IDB4
MGZmZmZmZmZmZmZmZmZmZiwgMHhmLCAweGZmZmYgfTsKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpk
ZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIFZlY3RvcjxpbnQz
Ml90PiBhbW91bnRzID0geyAxLCAxNywgMzEgfTsKIAotICAgIGF1dG8gdGVzdCA9IFsmXSAodWlu
dDY0X3QgaW1tLCB1aW50NjRfdCBtYXNrKSB7CisgICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0gbiAm
IChtID4+IGFtb3VudCkKKyAgICBhdXRvIHRlc3QgPSBbJl0gKGludDMyX3QgbiwgaW50MzJfdCBt
LCBpbnQzMl90IGFtb3VudCkgLT4gaW50MzJfdCB7CiAgICAgICAgIFByb2NlZHVyZSBwcm9jOwog
ICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOwogCi0gICAgICAgIFZh
bHVlKiB0bXBWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICAgICAgVmFsdWUqIGltbVZhbHVl
ID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGltbSk7Ci0g
ICAgICAgIFZhbHVlKiBsZWZ0VmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFpT
aHIsIE9yaWdpbigpLCB0bXBWYWx1ZSwgaW1tVmFsdWUpOwotICAgICAgICBWYWx1ZSogcmlnaHRW
YWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCBtYXNr
KTsKKyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAg
ICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApKTsKKyAgICAgICAgVmFsdWUqIG1WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisg
ICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjEpKTsKKyAgICAgICAgVmFsdWUqIGFtb3VudFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENv
bnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGFtb3VudCk7CisKKyAgICAgICAgVmFsdWUqIHNo
aWZ0VmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNTaHIsIE9yaWdpbigpLCBt
VmFsdWUsIGFtb3VudFZhbHVlKTsKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVl
KAotICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKLSAgICAgICAgICAgIHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgbGVmdFZhbHVlLCByaWdo
dFZhbHVlKSk7CisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCAKKyAgICAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgblZhbHVl
LCBzaGlmdFZhbHVlKSk7CiAKICAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7
Ci0gICAgICAgIGlmIChpc0FSTTY0KCkpCi0gICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlv
bigqY29kZSwgImxzciIpOwotICAgICAgICB1aW50NjRfdCBsaHMgPSBpbnZva2U8dWludDY0X3Q+
KCpjb2RlLCB0bXApOwotICAgICAgICB1aW50NjRfdCByaHMgPSB0bXAgPj4gaW1tOwotICAgICAg
ICBDSEVDSyhsaHMgPT0gcmhzKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkgeworICAgICAgICAg
ICAgc3RkOjpzdHJpbmcgcmVnZXgoIi4qYW5kLiosLiosLiosLiphc3IgIyIpOworICAgICAgICAg
ICAgcmVnZXggKz0gc3RkOjp0b19zdHJpbmcoYW1vdW50KSArICIuKiI7CisgICAgICAgICAgICBj
aGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgcmVnZXguY19zdHIoKSwgdHJ1ZSk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQzMl90PigqY29kZSwgbiwgbSk7CiAgICAgfTsK
IAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW1tcy5zaXplKCk7ICsraSkKLSAgICAgICAg
dGVzdChpbW1zLmF0KGkpLCBtYXNrcy5hdChpKSk7CisgICAgZm9yIChhdXRvIG5PcGVyYW5kIDog
aW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtT3BlcmFuZCA6IGludDMyT3Bl
cmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAg
ICAgICAgICAgICAgICBpbnQzMl90IG4gPSBuT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAg
ICBpbnQzMl90IG0gPSBtT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUSh0
ZXN0KG4sIG0sIGFtb3VudCksIG4gJiAobSA+PiBhbW91bnQpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KIH0KIAotc3RhdGljIHZvaWQgdGVzdEJpdEFuZEFyZ3MoaW50NjRfdCBh
LCBpbnQ2NF90IGIpCit2b2lkIHRlc3RBbmRVbnNpZ25lZFJpZ2h0U2hpZnQzMigpCiB7Ci0gICAg
UHJvY2VkdXJlIHByb2M7Ci0gICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsK
LSAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCi0gICAgICAgIHByb2MsIFJldHVybiwg
T3JpZ2luKCksCi0gICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCi0gICAgICAgICAgICBw
cm9jLCBCaXRBbmQsIE9yaWdpbigpLAotICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3Vt
ZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApLAotICAg
ICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKSk7CisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVs
dEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8dWludDMyX3Q+
IGFtb3VudHMgPSB7IDEsIDE3LCAzMSB9OwogCi0gICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ2
NF90Pihwcm9jLCBhLCBiKSA9PSAoYSAmIGIpKTsKLX0KKyAgICAvLyBUZXN0IFBhdHRlcm46IGQg
PSBuICYgKG0gPj4gYW1vdW50KQorICAgIGF1dG8gdGVzdCA9IFsmXSAodWludDMyX3QgbiwgdWlu
dDMyX3QgbSwgdWludDMyX3QgYW1vdW50KSAtPiB1aW50MzJfdCB7CisgICAgICAgIFByb2NlZHVy
ZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOwogCi1z
dGF0aWMgdm9pZCB0ZXN0Qml0QW5kU2FtZUFyZyhpbnQ2NF90IGEpCi17Ci0gICAgUHJvY2VkdXJl
IHByb2M7Ci0gICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKLSAgICBWYWx1
ZSogYXJndW1lbnQgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgcm9vdC0+YXBwZW5kTmV3Q29udHJv
bFZhbHVlKAotICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAotICAgICAgICByb290LT5h
cHBlbmROZXc8VmFsdWU+KAotICAgICAgICAgICAgcHJvYywgQml0QW5kLCBPcmlnaW4oKSwKLSAg
ICAgICAgICAgIGFyZ3VtZW50LAotICAgICAgICAgICAgYXJndW1lbnQpKTsKKyAgICAgICAgVmFs
dWUqIG5WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBU
cnVuYywgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVn
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAg
VmFsdWUqIG1WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9j
LCBUcnVuYywgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50
UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKTsKKyAgICAg
ICAgVmFsdWUqIGFtb3VudFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIGFtb3VudCk7CiAKLSAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludDY0X3Q+
KHByb2MsIGEpID09IGEpOwotfQorICAgICAgICBWYWx1ZSogc2hpZnRWYWx1ZSA9IHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4ocHJvYywgWlNociwgT3JpZ2luKCksIG1WYWx1ZSwgYW1vdW50VmFsdWUp
OworICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgICAgICBwcm9j
LCBSZXR1cm4sIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgQml0QW5kLCBPcmlnaW4oKSwgblZhbHVlLCBzaGlmdFZhbHVlKSk7CiAKLXN0YXRpYyB2
b2lkIHRlc3RCaXRBbmROb3ROb3QoaW50NjRfdCBhLCBpbnQ2NF90IGIpCi17Ci0gICAgUHJvY2Vk
dXJlIHByb2M7Ci0gICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKLSAgICBW
YWx1ZSogYXJnQSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmln
aW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICBWYWx1ZSogYXJnQiA9IHJvb3QtPmFw
cGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIxKTsKLSAgICBWYWx1ZSogbm90QSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
Qml0WG9yLCBPcmlnaW4oKSwgYXJnQSwgcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIC0xKSk7Ci0gICAgVmFsdWUqIG5vdEIgPSByb290LT5hcHBlbmROZXc8VmFs
dWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIGFyZ0IsIHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0
VmFsdWU+KHByb2MsIE9yaWdpbigpLCAtMSkpOwotICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xW
YWx1ZSgKLSAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKLSAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPigKLSAgICAgICAgICAgIHByb2MsIEJpdEFuZCwgT3JpZ2luKCksCi0gICAg
ICAgICAgICBub3RBLAotICAgICAgICAgICAgbm90QikpOworICAgICAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkgeworICAgICAgICAgICAg
c3RkOjpzdHJpbmcgcmVnZXgoIi4qYW5kLiosLiosLiosLipsc3IgIyIpOworICAgICAgICAgICAg
cmVnZXggKz0gc3RkOjp0b19zdHJpbmcoYW1vdW50KSArICIuKiI7CisgICAgICAgICAgICBjaGVj
a1VzZXNJbnN0cnVjdGlvbigqY29kZSwgcmVnZXguY19zdHIoKSwgdHJ1ZSk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIGludm9rZTx1aW50MzJfdD4oKmNvZGUsIG4sIG0pOworICAgIH07CiAK
LSAgICBDSEVDS19FUShjb21waWxlQW5kUnVuPGludDY0X3Q+KHByb2MsIGEsIGIpLCAofmEgJiB+
YikpOworICAgIGZvciAoYXV0byBuT3BlcmFuZCA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAg
ICBmb3IgKGF1dG8gbU9wZXJhbmQgOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZv
ciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgdWludDMyX3QgbiA9
IG5PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIHVpbnQzMl90IG0gPSBtT3BlcmFuZC52
YWx1ZTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUSh0ZXN0KG4sIG0sIGFtb3VudCksIG4gJiAo
bSA+PiBhbW91bnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KIH0KIAotc3Rh
dGljIHZvaWQgdGVzdEJpdEFuZE5vdE5vdDMyKGludDMyX3QgYSwgaW50MzJfdCBiKQordm9pZCB0
ZXN0QW5kTGVmdFNoaWZ0NjQoKQogewotICAgIFByb2NlZHVyZSBwcm9jOwotICAgIEJhc2ljQmxv
Y2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7Ci0gICAgVmFsdWUqIGFyZ0EgPSByb290LT5hcHBl
bmROZXc8VmFsdWU+KHByb2MsIFRydW5jLCBPcmlnaW4oKSwgcm9vdC0+YXBwZW5kTmV3PEFyZ3Vt
ZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKLSAg
ICBWYWx1ZSogYXJnQiA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgVHJ1bmMsIE9yaWdp
bigpLCByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMSkpOwotICAgIFZhbHVlKiBub3RBID0gcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9yaWdpbigpLCBhcmdBLCByb290LT5hcHBlbmROZXc8Q29u
c3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgLTEpKTsKLSAgICBWYWx1ZSogbm90QiA9IHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0WG9yLCBPcmlnaW4oKSwgYXJnQiwgcm9vdC0+YXBw
ZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIC0xKSk7Ci0gICAgcm9vdC0+YXBw
ZW5kTmV3Q29udHJvbFZhbHVlKAotICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAotICAg
ICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAotICAgICAgICAgICAgcHJvYywgQml0QW5kLCBP
cmlnaW4oKSwKLSAgICAgICAgICAgIG5vdEEsCi0gICAgICAgICAgICBub3RCKSk7CisgICAgaWYg
KEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsK
KyAgICBWZWN0b3I8aW50MzJfdD4gYW1vdW50cyA9IHsgMSwgMzQsIDYzIH07CiAKLSAgICBDSEVD
S19FUShjb21waWxlQW5kUnVuPGludDMyX3Q+KHByb2MsIGEsIGIpLCAofmEgJiB+YikpOwotfQor
ICAgIC8vIFRlc3QgUGF0dGVybjogZCA9IG4gJiAobSA8PCBhbW91bnQpCisgICAgYXV0byB0ZXN0
ID0gWyZdIChpbnQ2NF90IG4sIGludDY0X3QgbSwgaW50MzJfdCBhbW91bnQpIC0+IGludDY0X3Qg
eworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHBy
b2MuYWRkQmxvY2soKTsKIAotc3RhdGljIHZvaWQgdGVzdEJpdEFuZE5vdEltbShpbnQ2NF90IGEs
IGludDY0X3QgYikKLXsKLSAgICBQcm9jZWR1cmUgcHJvYzsKLSAgICBCYXNpY0Jsb2NrKiByb290
ID0gcHJvYy5hZGRCbG9jaygpOwotICAgIFZhbHVlKiBhcmdBID0gcm9vdC0+YXBwZW5kTmV3PEFy
Z3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwot
ICAgIFZhbHVlKiBub3RBID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9y
aWdpbigpLCBhcmdBLCByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgLTEpKTsKLSAgICBWYWx1ZSogY3N0QiA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+
KHByb2MsIE9yaWdpbigpLCBiKTsKLSAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCi0g
ICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCi0gICAgICAgIHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4oCi0gICAgICAgICAgICBwcm9jLCBCaXRBbmQsIE9yaWdpbigpLAotICAgICAgICAgICAg
bm90QSwKLSAgICAgICAgICAgIGNzdEIpKTsKKyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJvb3Qt
PmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIwKTsKKyAgICAgICAgVmFsdWUqIG1WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1
bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAg
ICAgICAgVmFsdWUqIGFtb3VudFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIGFtb3VudCk7CiAKLSAgICBDSEVDS19FUShjb21waWxlQW5kUnVuPGlu
dDY0X3Q+KHByb2MsIGEpLCAofmEgJiBiKSk7CisgICAgICAgIFZhbHVlKiBzaGlmdFZhbHVlID0g
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTaGwsIE9yaWdpbigpLCBtVmFsdWUsIGFtb3Vu
dFZhbHVlKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICAg
ICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8
VmFsdWU+KHByb2MsIEJpdEFuZCwgT3JpZ2luKCksIG5WYWx1ZSwgc2hpZnRWYWx1ZSkpOworCisg
ICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02
NCgpKSB7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyByZWdleCgiLiphbmQuKiwuKiwuKiwuKmxz
bCAjIik7CisgICAgICAgICAgICByZWdleCArPSBzdGQ6OnRvX3N0cmluZyhhbW91bnQpICsgIi4q
IjsKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCByZWdleC5jX3N0cigp
LCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW52b2tlPGludDY0X3Q+KCpjb2Rl
LCBuLCBtKTsKKyAgICB9OworCisgICAgZm9yIChhdXRvIG5PcGVyYW5kIDogaW50NjRPcGVyYW5k
cygpKSB7CisgICAgICAgIGZvciAoYXV0byBtT3BlcmFuZCA6IGludDY0T3BlcmFuZHMoKSkgewor
ICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAg
ICBpbnQ2NF90IG4gPSBuT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBpbnQ2NF90IG0g
PSBtT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUSh0ZXN0KG4sIG0sIGFt
b3VudCksIG4gJiAobSA8PCBhbW91bnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KIH0KIAotc3RhdGljIHZvaWQgdGVzdEJpdEFuZE5vdEltbTMyKGludDMyX3QgYSwgaW50MzJf
dCBiKQordm9pZCB0ZXN0QW5kUmlnaHRTaGlmdDY0KCkKIHsKLSAgICBQcm9jZWR1cmUgcHJvYzsK
LSAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOwotICAgIFZhbHVlKiBhcmdB
ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBUcnVuYywgT3JpZ2luKCksIHJvb3QtPmFw
cGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKSk7Ci0gICAgVmFsdWUqIG5vdEEgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2Ms
IEJpdFhvciwgT3JpZ2luKCksIGFyZ0EsIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCAtMSkpOwotICAgIFZhbHVlKiBjc3RCID0gcm9vdC0+YXBwZW5kTmV3PENv
bnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGIpOwotICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRy
b2xWYWx1ZSgKLSAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICBpZiAoSlNDOjpP
cHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIFZl
Y3RvcjxpbnQzMl90PiBhbW91bnRzID0geyAxLCAzNCwgNjMgfTsKKworICAgIC8vIFRlc3QgUGF0
dGVybjogZCA9IG4gJiAobSA+PiBhbW91bnQpCisgICAgYXV0byB0ZXN0ID0gWyZdIChpbnQ2NF90
IG4sIGludDY0X3QgbSwgaW50MzJfdCBhbW91bnQpIC0+IGludDY0X3QgeworICAgICAgICBQcm9j
ZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsK
KworICAgICAgICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBWYWx1
ZSogbVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBWYWx1ZSogYW1vdW50VmFsdWUg
PSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYW1vdW50KTsK
KworICAgICAgICBWYWx1ZSogc2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJv
YywgU1NociwgT3JpZ2luKCksIG1WYWx1ZSwgYW1vdW50VmFsdWUpOworICAgICAgICByb290LT5h
cHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigp
LCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmln
aW4oKSwgblZhbHVlLCBzaGlmdFZhbHVlKSk7CisKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGls
ZVByb2MocHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkpIHsKKyAgICAgICAgICAgIHN0ZDo6
c3RyaW5nIHJlZ2V4KCIuKmFuZC4qLC4qLC4qLC4qYXNyICMiKTsKKyAgICAgICAgICAgIHJlZ2V4
ICs9IHN0ZDo6dG9fc3RyaW5nKGFtb3VudCkgKyAiLioiOworICAgICAgICAgICAgY2hlY2tVc2Vz
SW5zdHJ1Y3Rpb24oKmNvZGUsIHJlZ2V4LmNfc3RyKCksIHRydWUpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBpbnZva2U8aW50NjRfdD4oKmNvZGUsIG4sIG0pOworICAgIH07CisKKyAgICBm
b3IgKGF1dG8gbk9wZXJhbmQgOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRv
IG1PcGVyYW5kIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1v
dW50IDogYW1vdW50cykgeworICAgICAgICAgICAgICAgIGludDY0X3QgbiA9IG5PcGVyYW5kLnZh
bHVlOworICAgICAgICAgICAgICAgIGludDY0X3QgbSA9IG1PcGVyYW5kLnZhbHVlOworICAgICAg
ICAgICAgICAgIENIRUNLX0VRKHRlc3QobiwgbSwgYW1vdW50KSwgbiAmIChtID4+IGFtb3VudCkp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RBbmRVbnNp
Z25lZFJpZ2h0U2hpZnQ2NCgpCit7CisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0
TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8dWludDMyX3Q+IGFtb3Vu
dHMgPSB7IDEsIDE3LCAzMSB9OworCisgICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0gbiAmIChtID4+
IGFtb3VudCkKKyAgICBhdXRvIHRlc3QgPSBbJl0gKHVpbnQ2NF90IG4sIHVpbnQ2NF90IG0sIHVp
bnQzMl90IGFtb3VudCkgLT4gdWludDY0X3QgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAg
ICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgICAgICBWYWx1
ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBWYWx1ZSogbVZhbHVlID0gcm9v
dC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjEpOworICAgICAgICBWYWx1ZSogYW1vdW50VmFsdWUgPSByb290LT5hcHBlbmRO
ZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYW1vdW50KTsKKworICAgICAgICBWYWx1
ZSogc2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgWlNociwgT3JpZ2lu
KCksIG1WYWx1ZSwgYW1vdW50VmFsdWUpOworICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9s
VmFsdWUoCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCAKKyAgICAgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgblZhbHVlLCBz
aGlmdFZhbHVlKSk7CisKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7Cisg
ICAgICAgIGlmIChpc0FSTTY0KCkpIHsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHJlZ2V4KCIu
KmFuZC4qLC4qLC4qLC4qbHNyICMiKTsKKyAgICAgICAgICAgIHJlZ2V4ICs9IHN0ZDo6dG9fc3Ry
aW5nKGFtb3VudCkgKyAiLioiOworICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNv
ZGUsIHJlZ2V4LmNfc3RyKCksIHRydWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBpbnZv
a2U8dWludDY0X3Q+KCpjb2RlLCBuLCBtKTsKKyAgICB9OworCisgICAgZm9yIChhdXRvIG5PcGVy
YW5kIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtT3BlcmFuZCA6IGlu
dDY0T3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMp
IHsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBuID0gbk9wZXJhbmQudmFsdWU7CisgICAgICAg
ICAgICAgICAgdWludDY0X3QgbSA9IG1PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIENI
RUNLX0VRKHRlc3QobiwgbSwgYW1vdW50KSwgbiAmIChtID4+IGFtb3VudCkpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RYb3JMZWZ0U2hpZnQzMigpCit7
CisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAg
IHJldHVybjsKKyAgICBWZWN0b3I8aW50MzJfdD4gYW1vdW50cyA9IHsgMSwgMTcsIDMxIH07CisK
KyAgICAvLyBUZXN0IFBhdHRlcm46IGQgPSBuIF4gKG0gPDwgYW1vdW50KQorICAgIGF1dG8gdGVz
dCA9IFsmXSAoaW50MzJfdCBuLCBpbnQzMl90IG0sIGludDMyX3QgYW1vdW50KSAtPiBpbnQzMl90
IHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBw
cm9jLmFkZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJvb3QtPmFwcGVuZE5l
dzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAorICAgICAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgVmFsdWUqIG1WYWx1ZSA9IHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAorICAgICAg
ICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBH
UFJJbmZvOjphcmd1bWVudEdQUjEpKTsKKyAgICAgICAgVmFsdWUqIGFtb3VudFZhbHVlID0gcm9v
dC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGFtb3VudCk7CisKKyAg
ICAgICAgVmFsdWUqIHNoaWZ0VmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNo
bCwgT3JpZ2luKCksIG1WYWx1ZSwgYW1vdW50VmFsdWUpOworICAgICAgICByb290LT5hcHBlbmRO
ZXdDb250cm9sVmFsdWUoCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCAKKyAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0WG9yLCBPcmlnaW4oKSwg
blZhbHVlLCBzaGlmdFZhbHVlKSk7CisKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2Mo
cHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkpIHsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5n
IHJlZ2V4KCIuKmVvci4qLC4qLC4qLC4qbHNsICMiKTsKKyAgICAgICAgICAgIHJlZ2V4ICs9IHN0
ZDo6dG9fc3RyaW5nKGFtb3VudCkgKyAiLioiOworICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1
Y3Rpb24oKmNvZGUsIHJlZ2V4LmNfc3RyKCksIHRydWUpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBpbnZva2U8aW50MzJfdD4oKmNvZGUsIG4sIG0pOworICAgIH07CisKKyAgICBmb3IgKGF1
dG8gbk9wZXJhbmQgOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG1PcGVy
YW5kIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDog
YW1vdW50cykgeworICAgICAgICAgICAgICAgIGludDMyX3QgbiA9IG5PcGVyYW5kLnZhbHVlOwor
ICAgICAgICAgICAgICAgIGludDMyX3QgbSA9IG1PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAg
ICAgIENIRUNLX0VRKHRlc3QobiwgbSwgYW1vdW50KSwgbiBeIChtIDw8IGFtb3VudCkpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RYb3JSaWdodFNoaWZ0
MzIoKQoreworICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQor
ICAgICAgICByZXR1cm47CisgICAgVmVjdG9yPGludDMyX3Q+IGFtb3VudHMgPSB7IDEsIDE3LCAz
MSB9OworCisgICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0gbiBeIChtID4+IGFtb3VudCkKKyAgICBh
dXRvIHRlc3QgPSBbJl0gKGludDMyX3QgbiwgaW50MzJfdCBtLCBpbnQzMl90IGFtb3VudCkgLT4g
aW50MzJfdCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiBy
b290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBuVmFsdWUgPSByb290LT5h
cHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLCAKKyAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgIFZhbHVlKiBtVmFsdWUgPSByb290
LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLCAK
KyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmln
aW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSk7CisgICAgICAgIFZhbHVlKiBhbW91bnRWYWx1
ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBhbW91bnQp
OworCisgICAgICAgIFZhbHVlKiBzaGlmdFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihw
cm9jLCBTU2hyLCBPcmlnaW4oKSwgbVZhbHVlLCBhbW91bnRWYWx1ZSk7CisgICAgICAgIHJvb3Qt
PmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2lu
KCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9y
aWdpbigpLCBuVmFsdWUsIHNoaWZ0VmFsdWUpKTsKKworICAgICAgICBhdXRvIGNvZGUgPSBjb21w
aWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkgeworICAgICAgICAgICAgc3Rk
OjpzdHJpbmcgcmVnZXgoIi4qZW9yLiosLiosLiosLiphc3IgIyIpOworICAgICAgICAgICAgcmVn
ZXggKz0gc3RkOjp0b19zdHJpbmcoYW1vdW50KSArICIuKiI7CisgICAgICAgICAgICBjaGVja1Vz
ZXNJbnN0cnVjdGlvbigqY29kZSwgcmVnZXguY19zdHIoKSwgdHJ1ZSk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIGludm9rZTxpbnQzMl90PigqY29kZSwgbiwgbSk7CisgICAgfTsKKworICAg
IGZvciAoYXV0byBuT3BlcmFuZCA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1
dG8gbU9wZXJhbmQgOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBh
bW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgaW50MzJfdCBuID0gbk9wZXJhbmQu
dmFsdWU7CisgICAgICAgICAgICAgICAgaW50MzJfdCBtID0gbU9wZXJhbmQudmFsdWU7CisgICAg
ICAgICAgICAgICAgQ0hFQ0tfRVEodGVzdChuLCBtLCBhbW91bnQpLCBuIF4gKG0gPj4gYW1vdW50
KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdFhvclVu
c2lnbmVkUmlnaHRTaGlmdDMyKCkKK3sKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNP
cHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIFZlY3Rvcjx1aW50MzJfdD4gYW1v
dW50cyA9IHsgMSwgMTcsIDMxIH07CisKKyAgICAvLyBUZXN0IFBhdHRlcm46IGQgPSBuIF4gKG0g
Pj4gYW1vdW50KQorICAgIGF1dG8gdGVzdCA9IFsmXSAodWludDMyX3QgbiwgdWludDMyX3QgbSwg
dWludDMyX3QgYW1vdW50KSAtPiB1aW50MzJfdCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOwor
ICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIFZh
bHVlKiBuVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywg
VHJ1bmMsIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJl
Z1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAg
IFZhbHVlKiBtVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJv
YywgVHJ1bmMsIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVu
dFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSk7CisgICAg
ICAgIFZhbHVlKiBhbW91bnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBhbW91bnQpOworCisgICAgICAgIFZhbHVlKiBzaGlmdFZhbHVlID0gcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBaU2hyLCBPcmlnaW4oKSwgbVZhbHVlLCBhbW91bnRW
YWx1ZSk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgICAg
IHByb2MsIFJldHVybiwgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZh
bHVlPihwcm9jLCBCaXRYb3IsIE9yaWdpbigpLCBuVmFsdWUsIHNoaWZ0VmFsdWUpKTsKKworICAg
ICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQo
KSkgeworICAgICAgICAgICAgc3RkOjpzdHJpbmcgcmVnZXgoIi4qZW9yLiosLiosLiosLipsc3Ig
IyIpOworICAgICAgICAgICAgcmVnZXggKz0gc3RkOjp0b19zdHJpbmcoYW1vdW50KSArICIuKiI7
CisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgcmVnZXguY19zdHIoKSwg
dHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGludm9rZTx1aW50MzJfdD4oKmNvZGUs
IG4sIG0pOworICAgIH07CisKKyAgICBmb3IgKGF1dG8gbk9wZXJhbmQgOiBpbnQzMk9wZXJhbmRz
KCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG1PcGVyYW5kIDogaW50MzJPcGVyYW5kcygpKSB7Cisg
ICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAgICAg
IHVpbnQzMl90IG4gPSBuT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBt
ID0gbU9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEodGVzdChuLCBtLCBh
bW91bnQpLCBuIF4gKG0gPj4gYW1vdW50KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK3ZvaWQgdGVzdFhvckxlZnRTaGlmdDY0KCkKK3sKKyAgICBpZiAoSlNDOjpPcHRp
b25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIFZlY3Rv
cjxpbnQzMl90PiBhbW91bnRzID0geyAxLCAzNCwgNjMgfTsKKworICAgIC8vIFRlc3QgUGF0dGVy
bjogZCA9IG4gXiAobSA8PCBhbW91bnQpCisgICAgYXV0byB0ZXN0ID0gWyZdIChpbnQ2NF90IG4s
IGludDY0X3QgbSwgaW50MzJfdCBhbW91bnQpIC0+IGludDY0X3QgeworICAgICAgICBQcm9jZWR1
cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKwor
ICAgICAgICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBWYWx1ZSog
bVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBWYWx1ZSogYW1vdW50VmFsdWUgPSBy
b290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYW1vdW50KTsKKwor
ICAgICAgICBWYWx1ZSogc2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
U2hsLCBPcmlnaW4oKSwgbVZhbHVlLCBhbW91bnRWYWx1ZSk7CisgICAgICAgIHJvb3QtPmFwcGVu
ZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksIAor
ICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9yaWdpbigp
LCBuVmFsdWUsIHNoaWZ0VmFsdWUpKTsKKworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJv
Yyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkgeworICAgICAgICAgICAgc3RkOjpzdHJp
bmcgcmVnZXgoIi4qZW9yLiosLiosLiosLipsc2wgIyIpOworICAgICAgICAgICAgcmVnZXggKz0g
c3RkOjp0b19zdHJpbmcoYW1vdW50KSArICIuKiI7CisgICAgICAgICAgICBjaGVja1VzZXNJbnN0
cnVjdGlvbigqY29kZSwgcmVnZXguY19zdHIoKSwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIGludm9rZTxpbnQ2NF90PigqY29kZSwgbiwgbSk7CisgICAgfTsKKworICAgIGZvciAo
YXV0byBuT3BlcmFuZCA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbU9w
ZXJhbmQgOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQg
OiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgaW50NjRfdCBuID0gbk9wZXJhbmQudmFsdWU7
CisgICAgICAgICAgICAgICAgaW50NjRfdCBtID0gbU9wZXJhbmQudmFsdWU7CisgICAgICAgICAg
ICAgICAgQ0hFQ0tfRVEodGVzdChuLCBtLCBhbW91bnQpLCBuIF4gKG0gPDwgYW1vdW50KSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdFhvclJpZ2h0U2hp
ZnQ2NCgpCit7CisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIp
CisgICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8aW50MzJfdD4gYW1vdW50cyA9IHsgMSwgMzQs
IDYzIH07CisKKyAgICAvLyBUZXN0IFBhdHRlcm46IGQgPSBuIF4gKG0gPj4gYW1vdW50KQorICAg
IGF1dG8gdGVzdCA9IFsmXSAoaW50NjRfdCBuLCBpbnQ2NF90IG0sIGludDMyX3QgYW1vdW50KSAt
PiBpbnQ2NF90IHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sq
IHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJvb3Qt
PmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIwKTsKKyAgICAgICAgVmFsdWUqIG1WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1
bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAg
ICAgICAgVmFsdWUqIGFtb3VudFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIGFtb3VudCk7CisKKyAgICAgICAgVmFsdWUqIHNoaWZ0VmFsdWUgPSBy
b290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNTaHIsIE9yaWdpbigpLCBtVmFsdWUsIGFtb3Vu
dFZhbHVlKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICAg
ICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8
VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIG5WYWx1ZSwgc2hpZnRWYWx1ZSkpOworCisg
ICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02
NCgpKSB7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyByZWdleCgiLiplb3IuKiwuKiwuKiwuKmFz
ciAjIik7CisgICAgICAgICAgICByZWdleCArPSBzdGQ6OnRvX3N0cmluZyhhbW91bnQpICsgIi4q
IjsKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCByZWdleC5jX3N0cigp
LCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW52b2tlPGludDY0X3Q+KCpjb2Rl
LCBuLCBtKTsKKyAgICB9OworCisgICAgZm9yIChhdXRvIG5PcGVyYW5kIDogaW50NjRPcGVyYW5k
cygpKSB7CisgICAgICAgIGZvciAoYXV0byBtT3BlcmFuZCA6IGludDY0T3BlcmFuZHMoKSkgewor
ICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAg
ICBpbnQ2NF90IG4gPSBuT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBpbnQ2NF90IG0g
PSBtT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUSh0ZXN0KG4sIG0sIGFt
b3VudCksIG4gXiAobSA+PiBhbW91bnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KK30KKwordm9pZCB0ZXN0WG9yVW5zaWduZWRSaWdodFNoaWZ0NjQoKQoreworICAgIGlmIChK
U0M6Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47Cisg
ICAgVmVjdG9yPHVpbnQzMl90PiBhbW91bnRzID0geyAxLCAxNywgMzEgfTsKKworICAgIC8vIFRl
c3QgUGF0dGVybjogZCA9IG4gXiAobSA+PiBhbW91bnQpCisgICAgYXV0byB0ZXN0ID0gWyZdICh1
aW50NjRfdCBuLCB1aW50NjRfdCBtLCB1aW50MzJfdCBhbW91bnQpIC0+IHVpbnQ2NF90IHsKKyAg
ICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFk
ZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1
bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAg
ICAgICAgVmFsdWUqIG1WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgVmFsdWUqIGFt
b3VudFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IGFtb3VudCk7CisKKyAgICAgICAgVmFsdWUqIHNoaWZ0VmFsdWUgPSByb290LT5hcHBlbmROZXc8
VmFsdWU+KHByb2MsIFpTaHIsIE9yaWdpbigpLCBtVmFsdWUsIGFtb3VudFZhbHVlKTsKKyAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICAgICAgcHJvYywgUmV0dXJu
LCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJp
dFhvciwgT3JpZ2luKCksIG5WYWx1ZSwgc2hpZnRWYWx1ZSkpOworCisgICAgICAgIGF1dG8gY29k
ZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAg
ICAgICBzdGQ6OnN0cmluZyByZWdleCgiLiplb3IuKiwuKiwuKiwuKmxzciAjIik7CisgICAgICAg
ICAgICByZWdleCArPSBzdGQ6OnRvX3N0cmluZyhhbW91bnQpICsgIi4qIjsKKyAgICAgICAgICAg
IGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCByZWdleC5jX3N0cigpLCB0cnVlKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gaW52b2tlPHVpbnQ2NF90PigqY29kZSwgbiwgbSk7CisgICAg
fTsKKworICAgIGZvciAoYXV0byBuT3BlcmFuZCA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAg
ICBmb3IgKGF1dG8gbU9wZXJhbmQgOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZv
ciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgdWludDY0X3QgbiA9
IG5PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IG0gPSBtT3BlcmFuZC52
YWx1ZTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUSh0ZXN0KG4sIG0sIGFtb3VudCksIG4gXiAo
bSA+PiBhbW91bnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9p
ZCB0ZXN0T3JMZWZ0U2hpZnQzMigpCit7CisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIz
T3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8aW50MzJfdD4gYW1v
dW50cyA9IHsgMSwgMTcsIDMxIH07CisKKyAgICAvLyBUZXN0IFBhdHRlcm46IGQgPSBuIHwgKG0g
PDwgYW1vdW50KQorICAgIGF1dG8gdGVzdCA9IFsmXSAoaW50MzJfdCBuLCBpbnQzMl90IG0sIGlu
dDMyX3QgYW1vdW50KSAtPiBpbnQzMl90IHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAg
ICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUq
IG5WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVu
YywgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgVmFs
dWUqIG1WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBU
cnVuYywgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVn
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKTsKKyAgICAgICAg
VmFsdWUqIGFtb3VudFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIGFtb3VudCk7CisKKyAgICAgICAgVmFsdWUqIHNoaWZ0VmFsdWUgPSByb290LT5h
cHBlbmROZXc8VmFsdWU+KHByb2MsIFNobCwgT3JpZ2luKCksIG1WYWx1ZSwgYW1vdW50VmFsdWUp
OworICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgICAgICBwcm9j
LCBSZXR1cm4sIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgQml0T3IsIE9yaWdpbigpLCBuVmFsdWUsIHNoaWZ0VmFsdWUpKTsKKworICAgICAgICBh
dXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkgewor
ICAgICAgICAgICAgc3RkOjpzdHJpbmcgcmVnZXgoIi4qb3JyLiosLiosLiosLipsc2wgIyIpOwor
ICAgICAgICAgICAgcmVnZXggKz0gc3RkOjp0b19zdHJpbmcoYW1vdW50KSArICIuKiI7CisgICAg
ICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgcmVnZXguY19zdHIoKSwgdHJ1ZSk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQzMl90PigqY29kZSwgbiwgbSk7
CisgICAgfTsKKworICAgIGZvciAoYXV0byBuT3BlcmFuZCA6IGludDMyT3BlcmFuZHMoKSkgewor
ICAgICAgICBmb3IgKGF1dG8gbU9wZXJhbmQgOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAg
ICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgaW50MzJf
dCBuID0gbk9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgaW50MzJfdCBtID0gbU9wZXJh
bmQudmFsdWU7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEodGVzdChuLCBtLCBhbW91bnQpLCBu
IHwgKG0gPDwgYW1vdW50KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisK
K3ZvaWQgdGVzdE9yUmlnaHRTaGlmdDMyKCkKK3sKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZh
dWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIFZlY3RvcjxpbnQzMl90
PiBhbW91bnRzID0geyAxLCAxNywgMzEgfTsKKworICAgIC8vIFRlc3QgUGF0dGVybjogZCA9IG4g
fCAobSA+PiBhbW91bnQpCisgICAgYXV0byB0ZXN0ID0gWyZdIChpbnQzMl90IG4sIGludDMyX3Qg
bSwgaW50MzJfdCBhbW91bnQpIC0+IGludDMyX3QgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsK
KyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgICAgICBW
YWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2Ms
IFRydW5jLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRS
ZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAg
ICBWYWx1ZSogbVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHBy
b2MsIFRydW5jLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1l
bnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkpOworICAg
ICAgICBWYWx1ZSogYW1vdW50VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgYW1vdW50KTsKKworICAgICAgICBWYWx1ZSogc2hpZnRWYWx1ZSA9IHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU1NociwgT3JpZ2luKCksIG1WYWx1ZSwgYW1vdW50
VmFsdWUpOworICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgICAg
ICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4ocHJvYywgQml0T3IsIE9yaWdpbigpLCBuVmFsdWUsIHNoaWZ0VmFsdWUpKTsKKworICAg
ICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQo
KSkgeworICAgICAgICAgICAgc3RkOjpzdHJpbmcgcmVnZXgoIi4qb3JyLiosLiosLiosLiphc3Ig
IyIpOworICAgICAgICAgICAgcmVnZXggKz0gc3RkOjp0b19zdHJpbmcoYW1vdW50KSArICIuKiI7
CisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgcmVnZXguY19zdHIoKSwg
dHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQzMl90PigqY29kZSwg
biwgbSk7CisgICAgfTsKKworICAgIGZvciAoYXV0byBuT3BlcmFuZCA6IGludDMyT3BlcmFuZHMo
KSkgeworICAgICAgICBmb3IgKGF1dG8gbU9wZXJhbmQgOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAg
ICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAg
aW50MzJfdCBuID0gbk9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgaW50MzJfdCBtID0g
bU9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEodGVzdChuLCBtLCBhbW91
bnQpLCBuIHwgKG0gPj4gYW1vdW50KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
Cit9CisKK3ZvaWQgdGVzdE9yVW5zaWduZWRSaWdodFNoaWZ0MzIoKQoreworICAgIGlmIChKU0M6
Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisgICAg
VmVjdG9yPHVpbnQzMl90PiBhbW91bnRzID0geyAxLCAxNywgMzEgfTsKKworICAgIC8vIFRlc3Qg
UGF0dGVybjogZCA9IG4gfCAobSA+PiBhbW91bnQpCisgICAgYXV0byB0ZXN0ID0gWyZdICh1aW50
MzJfdCBuLCB1aW50MzJfdCBtLCB1aW50MzJfdCBhbW91bnQpIC0+IHVpbnQzMl90IHsKKyAgICAg
ICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJs
b2NrKCk7CisKKyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
CisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjApKTsKKyAgICAgICAgVmFsdWUqIG1WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjEpKTsKKyAgICAgICAgVmFsdWUqIGFtb3VudFZhbHVlID0gcm9vdC0+YXBwZW5k
TmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGFtb3VudCk7CisKKyAgICAgICAgVmFs
dWUqIHNoaWZ0VmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFpTaHIsIE9yaWdp
bigpLCBtVmFsdWUsIGFtb3VudFZhbHVlKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJv
bFZhbHVlKAorICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgCisgICAgICAgICAg
ICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdE9yLCBPcmlnaW4oKSwgblZhbHVlLCBz
aGlmdFZhbHVlKSk7CisKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7Cisg
ICAgICAgIGlmIChpc0FSTTY0KCkpIHsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHJlZ2V4KCIu
Km9yci4qLC4qLC4qLC4qbHNyICMiKTsKKyAgICAgICAgICAgIHJlZ2V4ICs9IHN0ZDo6dG9fc3Ry
aW5nKGFtb3VudCkgKyAiLioiOworICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNv
ZGUsIHJlZ2V4LmNfc3RyKCksIHRydWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBpbnZv
a2U8dWludDMyX3Q+KCpjb2RlLCBuLCBtKTsKKyAgICB9OworCisgICAgZm9yIChhdXRvIG5PcGVy
YW5kIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtT3BlcmFuZCA6IGlu
dDMyT3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMp
IHsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBuID0gbk9wZXJhbmQudmFsdWU7CisgICAgICAg
ICAgICAgICAgdWludDMyX3QgbSA9IG1PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIENI
RUNLX0VRKHRlc3QobiwgbSwgYW1vdW50KSwgbiB8IChtID4+IGFtb3VudCkpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RPckxlZnRTaGlmdDY0KCkKK3sK
KyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAg
cmV0dXJuOworICAgIFZlY3RvcjxpbnQzMl90PiBhbW91bnRzID0geyAxLCAzNCwgNjMgfTsKKwor
ICAgIC8vIFRlc3QgUGF0dGVybjogZCA9IG4gfCAobSA8PCBhbW91bnQpCisgICAgYXV0byB0ZXN0
ID0gWyZdIChpbnQ2NF90IG4sIGludDY0X3QgbSwgaW50MzJfdCBhbW91bnQpIC0+IGludDY0X3Qg
eworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHBy
b2MuYWRkQmxvY2soKTsKKworICAgICAgICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3
PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
OworICAgICAgICBWYWx1ZSogbVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBWYWx1
ZSogYW1vdW50VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmln
aW4oKSwgYW1vdW50KTsKKworICAgICAgICBWYWx1ZSogc2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4ocHJvYywgU2hsLCBPcmlnaW4oKSwgbVZhbHVlLCBhbW91bnRWYWx1ZSk7Cisg
ICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgICAgIHByb2MsIFJl
dHVybiwgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9j
LCBCaXRPciwgT3JpZ2luKCksIG5WYWx1ZSwgc2hpZnRWYWx1ZSkpOworCisgICAgICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKSB7CisgICAg
ICAgICAgICBzdGQ6OnN0cmluZyByZWdleCgiLipvcnIuKiwuKiwuKiwuKmxzbCAjIik7CisgICAg
ICAgICAgICByZWdleCArPSBzdGQ6OnRvX3N0cmluZyhhbW91bnQpICsgIi4qIjsKKyAgICAgICAg
ICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCByZWdleC5jX3N0cigpLCB0cnVlKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gaW52b2tlPGludDY0X3Q+KCpjb2RlLCBuLCBtKTsKKyAg
ICB9OworCisgICAgZm9yIChhdXRvIG5PcGVyYW5kIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAg
ICAgIGZvciAoYXV0byBtT3BlcmFuZCA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICAgICAg
Zm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBpbnQ2NF90IG4g
PSBuT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBpbnQ2NF90IG0gPSBtT3BlcmFuZC52
YWx1ZTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUSh0ZXN0KG4sIG0sIGFtb3VudCksIG4gfCAo
bSA8PCBhbW91bnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9p
ZCB0ZXN0T3JSaWdodFNoaWZ0NjQoKQoreworICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRC
M09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisgICAgVmVjdG9yPGludDMyX3Q+IGFt
b3VudHMgPSB7IDEsIDM0LCA2MyB9OworCisgICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0gbiB8ICht
ID4+IGFtb3VudCkKKyAgICBhdXRvIHRlc3QgPSBbJl0gKGludDY0X3QgbiwgaW50NjRfdCBtLCBp
bnQzMl90IGFtb3VudCkgLT4gaW50NjRfdCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAg
ICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVl
KiBuVmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIFZhbHVlKiBtVmFsdWUgPSByb290
LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFy
Z3VtZW50R1BSMSk7CisgICAgICAgIFZhbHVlKiBhbW91bnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5l
dzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBhbW91bnQpOworCisgICAgICAgIFZhbHVl
KiBzaGlmdFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTU2hyLCBPcmlnaW4o
KSwgbVZhbHVlLCBhbW91bnRWYWx1ZSk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xW
YWx1ZSgKKyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksIAorICAgICAgICAgICAg
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRPciwgT3JpZ2luKCksIG5WYWx1ZSwgc2hp
ZnRWYWx1ZSkpOworCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAg
ICAgICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyByZWdleCgiLipv
cnIuKiwuKiwuKiwuKmFzciAjIik7CisgICAgICAgICAgICByZWdleCArPSBzdGQ6OnRvX3N0cmlu
ZyhhbW91bnQpICsgIi4qIjsKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2Rl
LCByZWdleC5jX3N0cigpLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW52b2tl
PGludDY0X3Q+KCpjb2RlLCBuLCBtKTsKKyAgICB9OworCisgICAgZm9yIChhdXRvIG5PcGVyYW5k
IDogaW50NjRPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtT3BlcmFuZCA6IGludDY0
T3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsK
KyAgICAgICAgICAgICAgICBpbnQ2NF90IG4gPSBuT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAg
ICAgICBpbnQ2NF90IG0gPSBtT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBDSEVDS19F
USh0ZXN0KG4sIG0sIGFtb3VudCksIG4gfCAobSA+PiBhbW91bnQpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0T3JVbnNpZ25lZFJpZ2h0U2hpZnQ2NCgp
Cit7CisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAg
ICAgIHJldHVybjsKKyAgICBWZWN0b3I8dWludDMyX3Q+IGFtb3VudHMgPSB7IDEsIDE3LCAzMSB9
OworCisgICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0gbiB8IChtID4+IGFtb3VudCkKKyAgICBhdXRv
IHRlc3QgPSBbJl0gKHVpbnQ2NF90IG4sIHVpbnQ2NF90IG0sIHVpbnQzMl90IGFtb3VudCkgLT4g
dWludDY0X3QgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayog
cm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgICAgICBWYWx1ZSogblZhbHVlID0gcm9vdC0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjApOworICAgICAgICBWYWx1ZSogbVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3Vt
ZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAg
ICAgICBWYWx1ZSogYW1vdW50VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgYW1vdW50KTsKKworICAgICAgICBWYWx1ZSogc2hpZnRWYWx1ZSA9IHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgWlNociwgT3JpZ2luKCksIG1WYWx1ZSwgYW1vdW50
VmFsdWUpOworICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgICAg
ICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4ocHJvYywgQml0T3IsIE9yaWdpbigpLCBuVmFsdWUsIHNoaWZ0VmFsdWUpKTsKKworICAg
ICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQo
KSkgeworICAgICAgICAgICAgc3RkOjpzdHJpbmcgcmVnZXgoIi4qb3JyLiosLiosLiosLipsc3Ig
IyIpOworICAgICAgICAgICAgcmVnZXggKz0gc3RkOjp0b19zdHJpbmcoYW1vdW50KSArICIuKiI7
CisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgcmVnZXguY19zdHIoKSwg
dHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGludm9rZTx1aW50NjRfdD4oKmNvZGUs
IG4sIG0pOworICAgIH07CisKKyAgICBmb3IgKGF1dG8gbk9wZXJhbmQgOiBpbnQ2NE9wZXJhbmRz
KCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG1PcGVyYW5kIDogaW50NjRPcGVyYW5kcygpKSB7Cisg
ICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAgICAg
IHVpbnQ2NF90IG4gPSBuT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBt
ID0gbU9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEodGVzdChuLCBtLCBh
bW91bnQpLCBuIHwgKG0gPj4gYW1vdW50KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK3ZvaWQgdGVzdEJpdEFuZFplcm9TaGlmdFJpZ2h0QXJnSW1tTWFzazMyKCkKK3sK
KyAgICAvLyBUdXJuIHRoaXM6ICh0bXAgPj4gaW1tKSAmIG1hc2sgCisgICAgLy8gSW50byB0aGlz
OiB0bXAgPj4gaW1tCisgICAgdWludDMyX3QgdG1wID0gMHhmZmZmZmZmZjsKKyAgICBWZWN0b3I8
dWludDMyX3Q+IGltbXMgPSB7IDQsIDI4LCAzMSB9OworICAgIFZlY3Rvcjx1aW50MzJfdD4gbWFz
a3MgPSB7IDB4MGZmZmZmZmYsIDB4ZiwgMHhmZmZmIH07CisKKyAgICBhdXRvIHRlc3QgPSBbJl0g
KHVpbnQzMl90IGltbSwgdWludDMyX3QgbWFzaykgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsK
KyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgICAgICBW
YWx1ZSogdG1wVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJv
YywgVHJ1bmMsIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVu
dFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAg
ICAgIFZhbHVlKiBpbW1WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBpbW0pOworICAgICAgICBWYWx1ZSogbGVmdFZhbHVlID0gcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPihwcm9jLCBaU2hyLCBPcmlnaW4oKSwgdG1wVmFsdWUsIGltbVZhbHVlKTsKKyAg
ICAgICAgVmFsdWUqIHJpZ2h0VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgbWFzayk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1
ZSgKKyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgICAgICByb290
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdEFuZCwgT3JpZ2luKCksIGxlZnRWYWx1ZSwgcmln
aHRWYWx1ZSkpOworCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAg
ICAgICBpZiAoaXNBUk02NCgpKQorICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNv
ZGUsICJsc3IiKTsKKyAgICAgICAgdWludDMyX3QgbGhzID0gaW52b2tlPHVpbnQzMl90PigqY29k
ZSwgdG1wKTsKKyAgICAgICAgdWludDMyX3QgcmhzID0gdG1wID4+IGltbTsKKyAgICAgICAgQ0hF
Q0sobGhzID09IHJocyk7CisgICAgfTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW1t
cy5zaXplKCk7ICsraSkKKyAgICAgICAgdGVzdChpbW1zLmF0KGkpLCBtYXNrcy5hdChpKSk7Cit9
CisKK3ZvaWQgdGVzdEJpdEFuZFplcm9TaGlmdFJpZ2h0QXJnSW1tTWFzazY0KCkKK3sKKyAgICAv
LyBUdXJuIHRoaXM6ICh0bXAgPj4gaW1tKSAmIG1hc2sgCisgICAgLy8gSW50byB0aGlzOiB0bXAg
Pj4gaW1tCisgICAgdWludDY0X3QgdG1wID0gMHhmZmZmZmZmZmZmZmZmZmZmOworICAgIFZlY3Rv
cjx1aW50NjRfdD4gaW1tcyA9IHsgNCwgNjAsIDYzIH07CisgICAgVmVjdG9yPHVpbnQ2NF90PiBt
YXNrcyA9IHsgMHgwZmZmZmZmZmZmZmZmZmZmLCAweGYsIDB4ZmZmZiB9OworCisgICAgYXV0byB0
ZXN0ID0gWyZdICh1aW50NjRfdCBpbW0sIHVpbnQ2NF90IG1hc2spIHsKKyAgICAgICAgUHJvY2Vk
dXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisK
KyAgICAgICAgVmFsdWUqIHRtcFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBWYWx1
ZSogaW1tVmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgaW1tKTsKKyAgICAgICAgVmFsdWUqIGxlZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgWlNociwgT3JpZ2luKCksIHRtcFZhbHVlLCBpbW1WYWx1ZSk7CisgICAgICAgIFZh
bHVlKiByaWdodFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIG1hc2spOworICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAg
ICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPihwcm9jLCBCaXRBbmQsIE9yaWdpbigpLCBsZWZ0VmFsdWUsIHJpZ2h0VmFsdWUp
KTsKKworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYg
KGlzQVJNNjQoKSkKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAibHNy
Iik7CisgICAgICAgIHVpbnQ2NF90IGxocyA9IGludm9rZTx1aW50NjRfdD4oKmNvZGUsIHRtcCk7
CisgICAgICAgIHVpbnQ2NF90IHJocyA9IHRtcCA+PiBpbW07CisgICAgICAgIENIRUNLKGxocyA9
PSByaHMpOworICAgIH07CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGltbXMuc2l6ZSgp
OyArK2kpCisgICAgICAgIHRlc3QoaW1tcy5hdChpKSwgbWFza3MuYXQoaSkpOworfQorCitzdGF0
aWMgdm9pZCB0ZXN0Qml0QW5kQXJncyhpbnQ2NF90IGEsIGludDY0X3QgYikKK3sKKyAgICBQcm9j
ZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAg
IHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmln
aW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2Ms
IEJpdEFuZCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRS
ZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCksCisgICAgICAg
ICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMSkpKTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50NjRf
dD4ocHJvYywgYSwgYikgPT0gKGEgJiBiKSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RCaXRBbmRT
YW1lQXJnKGludDY0X3QgYSkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2Nr
KiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiBhcmd1bWVudCA9IHJvb3QtPmFw
cGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKKyAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgIHByb2Ms
IFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAg
ICAgICAgICBwcm9jLCBCaXRBbmQsIE9yaWdpbigpLAorICAgICAgICAgICAgYXJndW1lbnQsCisg
ICAgICAgICAgICBhcmd1bWVudCkpOworCisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ2NF90
Pihwcm9jLCBhKSA9PSBhKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEJpdEFuZE5vdE5vdChpbnQ2
NF90IGEsIGludDY0X3QgYikKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2Nr
KiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiBhcmdBID0gcm9vdC0+YXBwZW5k
TmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApOworICAgIFZhbHVlKiBhcmdCID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIFZhbHVlKiBub3RB
ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9yaWdpbigpLCBhcmdBLCBy
b290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgLTEpKTsKKyAgICBW
YWx1ZSogbm90QiA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0WG9yLCBPcmlnaW4o
KSwgYXJnQiwgcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIC0x
KSk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICBwcm9jLCBSZXR1
cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAg
ICAgcHJvYywgQml0QW5kLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIG5vdEEsCisgICAgICAgICAg
ICBub3RCKSk7CisKKyAgICBDSEVDS19FUShjb21waWxlQW5kUnVuPGludDY0X3Q+KHByb2MsIGEs
IGIpLCAofmEgJiB+YikpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0Qml0QW5kTm90Tm90MzIoaW50
MzJfdCBhLCBpbnQzMl90IGIpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9j
ayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSogYXJnQSA9IHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4ocHJvYywgVHJ1bmMsIE9yaWdpbigpLCByb290LT5hcHBlbmROZXc8QXJndW1l
bnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAg
IFZhbHVlKiBhcmdCID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBUcnVuYywgT3JpZ2lu
KCksIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIxKSk7CisgICAgVmFsdWUqIG5vdEEgPSByb290LT5hcHBlbmROZXc8
VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIGFyZ0EsIHJvb3QtPmFwcGVuZE5ldzxDb25z
dDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAtMSkpOworICAgIFZhbHVlKiBub3RCID0gcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9yaWdpbigpLCBhcmdCLCByb290LT5hcHBl
bmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgLTEpKTsKKyAgICByb290LT5hcHBl
bmROZXdDb250cm9sVmFsdWUoCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBCaXRBbmQsIE9y
aWdpbigpLAorICAgICAgICAgICAgbm90QSwKKyAgICAgICAgICAgIG5vdEIpKTsKKworICAgIENI
RUNLX0VRKGNvbXBpbGVBbmRSdW48aW50MzJfdD4ocHJvYywgYSwgYiksICh+YSAmIH5iKSk7Cit9
CisKK3N0YXRpYyB2b2lkIHRlc3RCaXRBbmROb3RJbW0oaW50NjRfdCBhLCBpbnQ2NF90IGIpCit7
CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxv
Y2soKTsKKyAgICBWYWx1ZSogYXJnQSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBWYWx1ZSogbm90
QSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0WG9yLCBPcmlnaW4oKSwgYXJnQSwg
cm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIC0xKSk7CisgICAg
VmFsdWUqIGNzdEIgPSByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgYik7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICBwcm9jLCBS
ZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAg
ICAgICAgcHJvYywgQml0QW5kLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIG5vdEEsCisgICAgICAg
ICAgICBjc3RCKSk7CisKKyAgICBDSEVDS19FUShjb21waWxlQW5kUnVuPGludDY0X3Q+KHByb2Ms
IGEpLCAofmEgJiBiKSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RCaXRBbmROb3RJbW0zMihpbnQz
Ml90IGEsIGludDMyX3QgYikKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2Nr
KiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiBhcmdBID0gcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPihwcm9jLCBUcnVuYywgT3JpZ2luKCksIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVu
dFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAg
VmFsdWUqIG5vdEEgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2lu
KCksIGFyZ0EsIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAt
MSkpOworICAgIFZhbHVlKiBjc3RCID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIGIpOworICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAg
ICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVl
PigKICAgICAgICAgICAgIHByb2MsIEJpdEFuZCwgT3JpZ2luKCksCiAgICAgICAgICAgICBub3RB
LApAQCAtNjM4OSw2ICs3MTgzLDI4IEBAIHZvaWQgYWRkQml0VGVzdHMoY29uc3QgY2hhciogZmls
dGVyLCBEZXF1ZTxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+Pj4mIHRhc2tzKQogICAgIFJVTih0
ZXN0U3ViV2l0aExlZnRTaGlmdDY0KCkpOwogICAgIFJVTih0ZXN0U3ViV2l0aFJpZ2h0U2hpZnQ2
NCgpKTsKICAgICBSVU4odGVzdFN1YldpdGhVbnNpZ25lZFJpZ2h0U2hpZnQ2NCgpKTsKKworICAg
IFJVTih0ZXN0QW5kTGVmdFNoaWZ0MzIoKSk7CisgICAgUlVOKHRlc3RBbmRSaWdodFNoaWZ0MzIo
KSk7CisgICAgUlVOKHRlc3RBbmRVbnNpZ25lZFJpZ2h0U2hpZnQzMigpKTsKKyAgICBSVU4odGVz
dEFuZExlZnRTaGlmdDY0KCkpOworICAgIFJVTih0ZXN0QW5kUmlnaHRTaGlmdDY0KCkpOworICAg
IFJVTih0ZXN0QW5kVW5zaWduZWRSaWdodFNoaWZ0NjQoKSk7CisKKyAgICBSVU4odGVzdFhvckxl
ZnRTaGlmdDMyKCkpOworICAgIFJVTih0ZXN0WG9yUmlnaHRTaGlmdDMyKCkpOworICAgIFJVTih0
ZXN0WG9yVW5zaWduZWRSaWdodFNoaWZ0MzIoKSk7CisgICAgUlVOKHRlc3RYb3JMZWZ0U2hpZnQ2
NCgpKTsKKyAgICBSVU4odGVzdFhvclJpZ2h0U2hpZnQ2NCgpKTsKKyAgICBSVU4odGVzdFhvclVu
c2lnbmVkUmlnaHRTaGlmdDY0KCkpOworCisgICAgUlVOKHRlc3RPckxlZnRTaGlmdDMyKCkpOwor
ICAgIFJVTih0ZXN0T3JSaWdodFNoaWZ0MzIoKSk7CisgICAgUlVOKHRlc3RPclVuc2lnbmVkUmln
aHRTaGlmdDMyKCkpOworICAgIFJVTih0ZXN0T3JMZWZ0U2hpZnQ2NCgpKTsKKyAgICBSVU4odGVz
dE9yUmlnaHRTaGlmdDY0KCkpOworICAgIFJVTih0ZXN0T3JVbnNpZ25lZFJpZ2h0U2hpZnQ2NCgp
KTsKKwogICAgIFJVTih0ZXN0Qml0QW5kWmVyb1NoaWZ0UmlnaHRBcmdJbW1NYXNrMzIoKSk7CiAg
ICAgUlVOKHRlc3RCaXRBbmRaZXJvU2hpZnRSaWdodEFyZ0ltbU1hc2s2NCgpKTsKICAgICBSVU4o
dGVzdEJpdEFuZEFyZ3MoNDMsIDQzKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvdGVzdGIzXzMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNw
cAppbmRleCBiODliMDE5ZmQ4YmY1ZjA3MTJmNDY2ODY1MGY2MWNkZjgxZGE0YzgzLi41MDVmZDYz
OTAzY2U4ZjIyNDJkZTYwMzYzMjg5MjkwY2E4ODE5YTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My90ZXN0YjNfMy5jcHAKQEAgLTM3MzAsMTAgKzM3MzAsOCBAQCB2b2lkIGFkZEFyZ1Rlc3RzKGNv
bnN0IGNoYXIqIGZpbHRlciwgRGVxdWU8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4+JiB0YXNr
cykKICAgICBSVU4odGVzdE11bEFyZ3MzMigxLCAyKSk7CiAgICAgUlVOKHRlc3RNdWxBcmdzMzIo
MHhGRkZGRkZGRiwgMHhGRkZGRkZGRikpOwogICAgIFJVTih0ZXN0TXVsQXJnczMyKDB4RkZGRkZG
RkUsIDB4RkZGRkZGRkYpKTsKLSAgICBSVU4odGVzdE11bEFyZ3MzMlNpZ25FeHRlbmQoMSwgMSkp
OwotICAgIFJVTih0ZXN0TXVsQXJnczMyU2lnbkV4dGVuZCgxLCAyKSk7Ci0gICAgUlVOKHRlc3RN
dWxBcmdzMzJTaWduRXh0ZW5kKDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYpKTsKLSAgICBSVU4odGVz
dE11bEFyZ3MzMlNpZ25FeHRlbmQoMHhGRkZGRkZGRSwgMHhGRkZGRkZGRikpOworICAgIFJVTih0
ZXN0TXVsQXJnczMyU2lnbkV4dGVuZCgpKTsKKyAgICBSVU4odGVzdE11bEFyZ3MzMlplcm9FeHRl
bmQoKSk7CiAgICAgUlVOKHRlc3RNdWxMb2FkVHdpY2UoKSk7CiAgICAgUlVOKHRlc3RNdWxBZGRB
cmdzTGVmdCgpKTsKICAgICBSVU4odGVzdE11bEFkZEFyZ3NSaWdodCgpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434795</attachid>
            <date>2021-08-02 15:52:59 -0700</date>
            <delta_ts>2021-08-02 17:15:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228675-20210802175258.patch</filename>
            <type>text/plain</type>
            <size>93227</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwNDk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
N2M5NTU4ZWFiZGIxNjY0YzU2YWQyZGU0YWQzNGQ3ZDA3Y2UxNzI1Li5kOWYxM2I1MzYwYjQxZTk3
YzhkNjY4NWE1ODg4MTg1N2JjMjYxZGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxODUgQEAKKzIwMjEtMDctMzEgIFlpamlhIEh1YW5nICA8eWlqaWFfaHVhbmdAYXBwbGUu
Y29tPgorCisgICAgICAgIEFkZCBuZXcgcGF0dGVybnMgdG8gaW5zdHJ1Y3Rpb24gc2VsZWN0b3Ig
dG8gdXRpbGl6ZSBBTkQvRU9SL09SUi13aXRoLXNoaWZ0IGFuZCBVTVVMTCBzdXBwb3J0ZWQgYnkg
QVJNNjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
ODY3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJp
dHdpc2UgQU5EIChzaGlmdGVkIHJlZ2lzdGVyKSBwZXJmb3JtcyBhIGJpdHdpc2UgQU5EIG9mIGEg
cmVnaXN0ZXIgdmFsdWUgYW5kIGFuIG9wdGlvbmFsbHktc2hpZnRlZCAKKyAgICAgICAgcmVnaXN0
ZXIgdmFsdWUsIGFuZCB3cml0ZXMgdGhlIHJlc3VsdCB0byB0aGUgZGVzdGluYXRpb24gcmVnaXN0
ZXIuCisKKyAgICAgICAgICAgIGFuZCB3ZCB3biB3bSBTaGlmdFR5cGUgI2Ftb3VudAorCisgICAg
ICAgIFRoZSBlcXVpdmFsZW50IHBhdHRlcm4gaXM6IG4gJiAobSBTaGlmdFR5cGUgYW1vdW50KQor
CisgICAgICAgIEdpdmVuIEIzIElSOgorICAgICAgICBJbnQgQDAgPSBBcmd1bWVudFJlZygleDAp
CisgICAgICAgIEludCBAMSA9IEFyZ3VtZW50UmVnKCV4MSkKKyAgICAgICAgSW50IEAyID0gQ29u
c3QzMig2MykKKyAgICAgICAgSW50IEAzID0gU2hsKEAxLCAkNjMoQDIpKQorICAgICAgICBJbnQg
QDQgPSBCaXRBbmQoQDAsIEAzKQorICAgICAgICBWb2lkQDUgPSBSZXR1cm4oQDQsIFRlcm1pbmFs
KQorCisgICAgICAgIC8vIE9sZCBvcHRpbWl6ZWQgQUlSCisgICAgICAgIExzaGlmdCAleDEsICQ2
MywgJXgxLCBAMworICAgICAgICBBbmQgICAgJXgwLCAleDEsICV4MCwgQDQKKyAgICAgICAgUmV0
ICAgICV4MCwgICAgICAgICAgIEA1CisKKyAgICAgICAgLy8gTmV3IG9wdGltaXplZCBBSVIKKyAg
ICAgICAgQW5kTGVmdFNoaWZ0ICV4MCwgJXgxLCAkNjMsICV4MCwgQDQKKyAgICAgICAgUmV0ICAg
ICAgICAgICV4MCwgICAgICAgICAgICAgICAgQDUKKworICAgICAgICBCaXR3aXNlIEV4Y2x1c2l2
ZSBPUiAoc2hpZnRlZCByZWdpc3RlcikgcGVyZm9ybXMgYSBiaXR3aXNlIEV4Y2x1c2l2ZSBPUiBv
ZiBhIHJlZ2lzdGVyIHZhbHVlIGFuZCBhbiAKKyAgICAgICAgb3B0aW9uYWxseS1zaGlmdGVkIHJl
Z2lzdGVyIHZhbHVlLCBhbmQgd3JpdGVzIHRoZSByZXN1bHQgdG8gdGhlIGRlc3RpbmF0aW9uIHJl
Z2lzdGVyLgorCisgICAgICAgICAgICBlb3Igd2Qgd24gd20gU2hpZnRUeXBlICNhbW91bnQKKwor
ICAgICAgICBUaGUgZXF1aXZhbGVudCBwYXR0ZXJuIGlzOiBuIF4gKG0gU2hpZnRUeXBlIGFtb3Vu
dCkKKworICAgICAgICBHaXZlbiBCMyBJUjoKKyAgICAgICAgSW50IEAwID0gQXJndW1lbnRSZWco
JXgwKQorICAgICAgICBJbnQgQDEgPSBBcmd1bWVudFJlZygleDEpCisgICAgICAgIEludCBAMiA9
IENvbnN0MzIoNjMpCisgICAgICAgIEludCBAMyA9IFNobChAMSwgJDYzKEAyKSkKKyAgICAgICAg
SW50IEA0ID0gQml0WG9yKEAwLCBAMykKKyAgICAgICAgVm9pZEA1ID0gUmV0dXJuKEA0LCBUZXJt
aW5hbCkKKworICAgICAgICAvLyBPbGQgb3B0aW1pemVkIEFJUgorICAgICAgICBMc2hpZnQgJXgx
LCAkNjMsICV4MSwgQDMKKyAgICAgICAgWG9yICAgICV4MCwgJXgxLCAleDAsIEA0CisgICAgICAg
IFJldCAgICAleDAsICAgICAgICAgICBANQorCisgICAgICAgIC8vIE5ldyBvcHRpbWl6ZWQgQUlS
CisgICAgICAgIFhvckxlZnRTaGlmdCAleDAsICV4MSwgJDYzLCAleDAsIEA0CisgICAgICAgIFJl
dCAgICAgICAgICAleDAsICAgICAgICAgICAgICAgIEA1CisKKyAgICAgICAgQml0d2lzZSBPUiAo
c2hpZnRlZCByZWdpc3RlcikgcGVyZm9ybXMgYSBiaXR3aXNlIChpbmNsdXNpdmUpIE9SIG9mIGEg
cmVnaXN0ZXIgdmFsdWUgYW5kIGFuIAorICAgICAgICBvcHRpb25hbGx5LXNoaWZ0ZWQgcmVnaXN0
ZXIgdmFsdWUsIGFuZCB3cml0ZXMgdGhlIHJlc3VsdCB0byB0aGUgZGVzdGluYXRpb24gcmVnaXN0
ZXIuCisKKyAgICAgICAgICAgIG9yciB3ZCB3biB3bSBTaGlmdFR5cGUgI2Ftb3VudAorCisgICAg
ICAgIFRoZSBlcXVpdmFsZW50IHBhdHRlcm4gaXM6IG4gfCAobSBTaGlmdFR5cGUgYW1vdW50KQor
CisgICAgICAgIEdpdmVuIEIzIElSOgorICAgICAgICBJbnQgQDAgPSBBcmd1bWVudFJlZygleDAp
CisgICAgICAgIEludCBAMSA9IEFyZ3VtZW50UmVnKCV4MSkKKyAgICAgICAgSW50IEAyID0gQ29u
c3QzMig2MykKKyAgICAgICAgSW50IEAzID0gU2hsKEAxLCAkNjMoQDIpKQorICAgICAgICBJbnQg
QDQgPSBCaXRPcihAMCwgQDMpCisgICAgICAgIFZvaWRANSA9IFJldHVybihANCwgVGVybWluYWwp
CisKKyAgICAgICAgLy8gT2xkIG9wdGltaXplZCBBSVIKKyAgICAgICAgTHNoaWZ0ICV4MSwgJDYz
LCAleDEsIEAzCisgICAgICAgIE9yICAgICAleDAsICV4MSwgJXgwLCBANAorICAgICAgICBSZXQg
ICAgJXgwLCAgICAgICAgICAgQDUKKworICAgICAgICAvLyBOZXcgb3B0aW1pemVkIEFJUgorICAg
ICAgICBPckxlZnRTaGlmdCAleDAsICV4MSwgJDYzLCAleDAsIEA0CisgICAgICAgIFJldCAgICAg
ICAgICV4MCwgICAgICAgICAgICAgICAgQDUKKworICAgICAgICBVbnNpZ25lZCBNdWx0aXBseSBM
b25nIG11bHRpcGxpZXMgdHdvIDMyLWJpdCByZWdpc3RlciB2YWx1ZXMsIGFuZCB3cml0ZXMgdGhl
IHJlc3VsdCB0byB0aGUgZGVzdGluYXRpb24gCisgICAgICAgIHJlZ2lzdGVyLiBUaGlzIGluc3Ry
dWN0aW9uIGlzIGFuIGFsaWFzIG9mIHRoZSBVTUFEREwgaW5zdHJ1Y3Rpb24uCisKKyAgICAgICAg
ICAgIHVtdWxsIHhkIHduIHdtCisKKyAgICAgICAgVGhlIGVxdWl2YWxlbnQgcGF0dGVybiBpczog
ZCA9IFpFeHQzMihuKSAqIFpFeHQzMihtKQorCisgICAgICAgIEdpdmVuIEIzIElSOgorICAgICAg
ICBJbnQgQDAgPSBBcmd1bWVudFJlZygleDApCisgICAgICAgIEludCBAMSA9IFRydW5jKEAwKQor
ICAgICAgICBJbnQgQDIgPSBBcmd1bWVudFJlZygleDEpCisgICAgICAgIEludCBAMyA9IFRydW5j
KEAyKQorICAgICAgICBJbnQgQDQgPSBaRXh0MzIoQDEpCisgICAgICAgIEludCBANSA9IFpFeHQz
MihAMykKKyAgICAgICAgSW50IEA2ID0gTXVsKEA0LCBANSkKKyAgICAgICAgVm9pZEA3ID0gUmV0
dXJuKEA2LCBUZXJtaW5hbCkKKworICAgICAgICAvLyBPbGQgb3B0aW1pemVkIEFJUgorICAgICAg
ICBNb3ZlICAgJXgwLCAleDAsICAgICAgQDQKKyAgICAgICAgTW92ZSAgICV4MSwgJXgxLCAgICAg
IEA1CisgICAgICAgIE11bCAgICAleDAsICV4MSwgJXgwLCBANgorICAgICAgICBSZXQgICAgJXgw
LCAgICAgICAgICAgQDcKKworICAgICAgICAvLyBOZXcgb3B0aW1pemVkIEFJUgorICAgICAgICBN
dWx0aXBseVplcm9FeHRlbmQgJXgwLCAleDEsICV4MCwgQDYKKyAgICAgICAgUmV0ICAgICAgICAg
ICAgICAgICV4MCwgICAgICAgICAgIEA3CisKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJBUk02NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjphbmRMZWZ0
U2hpZnQzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OmFuZFJpZ2h0U2hp
ZnQzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OmFuZFVuc2lnbmVkUmln
aHRTaGlmdDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6YW5kTGVmdFNo
aWZ0NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjphbmRSaWdodFNoaWZ0
NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjphbmRVbnNpZ25lZFJpZ2h0
U2hpZnQ2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnhvckxlZnRTaGlm
dDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6eG9yUmlnaHRTaGlmdDMy
KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6eG9yVW5zaWduZWRSaWdodFNo
aWZ0MzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojp4b3JMZWZ0U2hpZnQ2
NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnhvclJpZ2h0U2hpZnQ2NCk6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnhvclVuc2lnbmVkUmlnaHRTaGlm
dDY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6b3JMZWZ0U2hpZnQzMik6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Om9yUmlnaHRTaGlmdDMyKToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6b3JVbnNpZ25lZFJpZ2h0U2hpZnQzMik6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Om9yTGVmdFNoaWZ0NjQpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpvclJpZ2h0U2hpZnQ2NCk6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Om9yVW5zaWduZWRSaWdodFNoaWZ0NjQpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjptdWx0aXBseVplcm9FeHRlbmQzMik6Cisg
ICAgICAgICogYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcDoKKyAgICAgICAgKEpTQzo6dGVzdE11bHRp
cGx5WmVyb0V4dGVuZDMyKToKKyAgICAgICAgKEpTQzo6dGVzdEFuZExlZnRTaGlmdDMyKToKKyAg
ICAgICAgKEpTQzo6dGVzdEFuZFJpZ2h0U2hpZnQzMik6CisgICAgICAgIChKU0M6OnRlc3RBbmRV
bnNpZ25lZFJpZ2h0U2hpZnQzMik6CisgICAgICAgIChKU0M6OnRlc3RBbmRMZWZ0U2hpZnQ2NCk6
CisgICAgICAgIChKU0M6OnRlc3RBbmRSaWdodFNoaWZ0NjQpOgorICAgICAgICAoSlNDOjp0ZXN0
QW5kVW5zaWduZWRSaWdodFNoaWZ0NjQpOgorICAgICAgICAoSlNDOjp0ZXN0WG9yTGVmdFNoaWZ0
MzIpOgorICAgICAgICAoSlNDOjp0ZXN0WG9yUmlnaHRTaGlmdDMyKToKKyAgICAgICAgKEpTQzo6
dGVzdFhvclVuc2lnbmVkUmlnaHRTaGlmdDMyKToKKyAgICAgICAgKEpTQzo6dGVzdFhvckxlZnRT
aGlmdDY0KToKKyAgICAgICAgKEpTQzo6dGVzdFhvclJpZ2h0U2hpZnQ2NCk6CisgICAgICAgIChK
U0M6OnRlc3RYb3JVbnNpZ25lZFJpZ2h0U2hpZnQ2NCk6CisgICAgICAgIChKU0M6OnRlc3RPckxl
ZnRTaGlmdDMyKToKKyAgICAgICAgKEpTQzo6dGVzdE9yUmlnaHRTaGlmdDMyKToKKyAgICAgICAg
KEpTQzo6dGVzdE9yVW5zaWduZWRSaWdodFNoaWZ0MzIpOgorICAgICAgICAoSlNDOjp0ZXN0T3JM
ZWZ0U2hpZnQ2NCk6CisgICAgICAgIChKU0M6OnRlc3RPclJpZ2h0U2hpZnQ2NCk6CisgICAgICAg
IChKU0M6OnRlc3RPclVuc2lnbmVkUmlnaHRTaGlmdDY0KToKKyAgICAgICAgKiBiMy9CM0xvd2Vy
VG9BaXIuY3BwOgorICAgICAgICAqIGIzL2Fpci9BaXJPcGNvZGUub3Bjb2RlczoKKyAgICAgICAg
KiBiMy90ZXN0YjMuaDoKKyAgICAgICAgKiBiMy90ZXN0YjNfMi5jcHA6CisgICAgICAgICh0ZXN0
TXVsQXJnczMyU2lnbkV4dGVuZCk6CisgICAgICAgICh0ZXN0TXVsQXJnczMyWmVyb0V4dGVuZCk6
CisgICAgICAgICh0ZXN0QW5kTGVmdFNoaWZ0MzIpOgorICAgICAgICAodGVzdEFuZFJpZ2h0U2hp
ZnQzMik6CisgICAgICAgICh0ZXN0QW5kVW5zaWduZWRSaWdodFNoaWZ0MzIpOgorICAgICAgICAo
dGVzdEFuZExlZnRTaGlmdDY0KToKKyAgICAgICAgKHRlc3RBbmRSaWdodFNoaWZ0NjQpOgorICAg
ICAgICAodGVzdEFuZFVuc2lnbmVkUmlnaHRTaGlmdDY0KToKKyAgICAgICAgKHRlc3RYb3JMZWZ0
U2hpZnQzMik6CisgICAgICAgICh0ZXN0WG9yUmlnaHRTaGlmdDMyKToKKyAgICAgICAgKHRlc3RY
b3JVbnNpZ25lZFJpZ2h0U2hpZnQzMik6CisgICAgICAgICh0ZXN0WG9yTGVmdFNoaWZ0NjQpOgor
ICAgICAgICAodGVzdFhvclJpZ2h0U2hpZnQ2NCk6CisgICAgICAgICh0ZXN0WG9yVW5zaWduZWRS
aWdodFNoaWZ0NjQpOgorICAgICAgICAodGVzdE9yTGVmdFNoaWZ0MzIpOgorICAgICAgICAodGVz
dE9yUmlnaHRTaGlmdDMyKToKKyAgICAgICAgKHRlc3RPclVuc2lnbmVkUmlnaHRTaGlmdDMyKToK
KyAgICAgICAgKHRlc3RPckxlZnRTaGlmdDY0KToKKyAgICAgICAgKHRlc3RPclJpZ2h0U2hpZnQ2
NCk6CisgICAgICAgICh0ZXN0T3JVbnNpZ25lZFJpZ2h0U2hpZnQ2NCk6CisgICAgICAgICh0ZXN0
Qml0QW5kWmVyb1NoaWZ0UmlnaHRBcmdJbW1NYXNrMzIpOgorICAgICAgICAodGVzdEJpdEFuZFpl
cm9TaGlmdFJpZ2h0QXJnSW1tTWFzazY0KToKKyAgICAgICAgKHRlc3RCaXRBbmRBcmdzKToKKyAg
ICAgICAgKHRlc3RCaXRBbmRTYW1lQXJnKToKKyAgICAgICAgKHRlc3RCaXRBbmROb3ROb3QpOgor
ICAgICAgICAodGVzdEJpdEFuZE5vdE5vdDMyKToKKyAgICAgICAgKHRlc3RCaXRBbmROb3RJbW0p
OgorICAgICAgICAodGVzdEJpdEFuZE5vdEltbTMyKToKKyAgICAgICAgKGFkZEJpdFRlc3RzKToK
KyAgICAgICAgKiBiMy90ZXN0YjNfMy5jcHA6CisgICAgICAgIChhZGRBcmdUZXN0cyk6CisKIDIw
MjEtMDctMzAgIFlpamlhIEh1YW5nICA8eWlqaWFfaHVhbmdAYXBwbGUuY29tPgogCiAgICAgICAg
IEFkZCBQcmUvUG9zdC1JbmRleGVkIEFkZHJlc3MgTW9kZSB0byBBaXIgZm9yIEFSTTY0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJN
NjQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02
NC5oCmluZGV4IGU2YmZiZWM2MDAxYzEwYzYxZTlmMjY2ZWZmMjdhZDZmMTBlODlmOGYuLjEzYTIz
OGIzZDg2YjE4OTBkMmRmYjYyZDkwNjk3NGYzZGZjNWQ3NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCkBAIC02NDks
NiArNjQ5LDk2IEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIuc3ViPDY0PihkLCBuLCBt
LCBBc3NlbWJsZXI6OkxTUiwgYW1vdW50Lm1fdmFsdWUpOwogICAgIH0KIAorICAgIHZvaWQgYW5k
TGVmdFNoaWZ0MzIoUmVnaXN0ZXJJRCBuLCBSZWdpc3RlcklEIG0sIFRydXN0ZWRJbW0zMiBhbW91
bnQsIFJlZ2lzdGVySUQgZCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZF88MzI+KGQs
IG4sIG0sIEFzc2VtYmxlcjo6TFNMLCBhbW91bnQubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9p
ZCBhbmRSaWdodFNoaWZ0MzIoUmVnaXN0ZXJJRCBuLCBSZWdpc3RlcklEIG0sIFRydXN0ZWRJbW0z
MiBhbW91bnQsIFJlZ2lzdGVySUQgZCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZF88
MzI+KGQsIG4sIG0sIEFzc2VtYmxlcjo6QVNSLCBhbW91bnQubV92YWx1ZSk7CisgICAgfQorCisg
ICAgdm9pZCBhbmRVbnNpZ25lZFJpZ2h0U2hpZnQzMihSZWdpc3RlcklEIG4sIFJlZ2lzdGVySUQg
bSwgVHJ1c3RlZEltbTMyIGFtb3VudCwgUmVnaXN0ZXJJRCBkKQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIuYW5kXzwzMj4oZCwgbiwgbSwgQXNzZW1ibGVyOjpMU1IsIGFtb3VudC5tX3ZhbHVl
KTsKKyAgICB9CisKKyAgICB2b2lkIGFuZExlZnRTaGlmdDY0KFJlZ2lzdGVySUQgbiwgUmVnaXN0
ZXJJRCBtLCBUcnVzdGVkSW1tMzIgYW1vdW50LCBSZWdpc3RlcklEIGQpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5hbmRfPDY0PihkLCBuLCBtLCBBc3NlbWJsZXI6OkxTTCwgYW1vdW50Lm1f
dmFsdWUpOworICAgIH0KKworICAgIHZvaWQgYW5kUmlnaHRTaGlmdDY0KFJlZ2lzdGVySUQgbiwg
UmVnaXN0ZXJJRCBtLCBUcnVzdGVkSW1tMzIgYW1vdW50LCBSZWdpc3RlcklEIGQpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5hbmRfPDY0PihkLCBuLCBtLCBBc3NlbWJsZXI6OkFTUiwgYW1v
dW50Lm1fdmFsdWUpOworICAgIH0KKworICAgIHZvaWQgYW5kVW5zaWduZWRSaWdodFNoaWZ0NjQo
UmVnaXN0ZXJJRCBuLCBSZWdpc3RlcklEIG0sIFRydXN0ZWRJbW0zMiBhbW91bnQsIFJlZ2lzdGVy
SUQgZCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZF88NjQ+KGQsIG4sIG0sIEFzc2Vt
Ymxlcjo6TFNSLCBhbW91bnQubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCB4b3JMZWZ0U2hp
ZnQzMihSZWdpc3RlcklEIG4sIFJlZ2lzdGVySUQgbSwgVHJ1c3RlZEltbTMyIGFtb3VudCwgUmVn
aXN0ZXJJRCBkKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuZW9yPDMyPihkLCBuLCBtLCBB
c3NlbWJsZXI6OkxTTCwgYW1vdW50Lm1fdmFsdWUpOworICAgIH0KKworICAgIHZvaWQgeG9yUmln
aHRTaGlmdDMyKFJlZ2lzdGVySUQgbiwgUmVnaXN0ZXJJRCBtLCBUcnVzdGVkSW1tMzIgYW1vdW50
LCBSZWdpc3RlcklEIGQpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5lb3I8MzI+KGQsIG4s
IG0sIEFzc2VtYmxlcjo6QVNSLCBhbW91bnQubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCB4
b3JVbnNpZ25lZFJpZ2h0U2hpZnQzMihSZWdpc3RlcklEIG4sIFJlZ2lzdGVySUQgbSwgVHJ1c3Rl
ZEltbTMyIGFtb3VudCwgUmVnaXN0ZXJJRCBkKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
ZW9yPDMyPihkLCBuLCBtLCBBc3NlbWJsZXI6OkxTUiwgYW1vdW50Lm1fdmFsdWUpOworICAgIH0K
KworICAgIHZvaWQgeG9yTGVmdFNoaWZ0NjQoUmVnaXN0ZXJJRCBuLCBSZWdpc3RlcklEIG0sIFRy
dXN0ZWRJbW0zMiBhbW91bnQsIFJlZ2lzdGVySUQgZCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLmVvcjw2ND4oZCwgbiwgbSwgQXNzZW1ibGVyOjpMU0wsIGFtb3VudC5tX3ZhbHVlKTsKKyAg
ICB9CisKKyAgICB2b2lkIHhvclJpZ2h0U2hpZnQ2NChSZWdpc3RlcklEIG4sIFJlZ2lzdGVySUQg
bSwgVHJ1c3RlZEltbTMyIGFtb3VudCwgUmVnaXN0ZXJJRCBkKQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIuZW9yPDY0PihkLCBuLCBtLCBBc3NlbWJsZXI6OkFTUiwgYW1vdW50Lm1fdmFsdWUp
OworICAgIH0KKworICAgIHZvaWQgeG9yVW5zaWduZWRSaWdodFNoaWZ0NjQoUmVnaXN0ZXJJRCBu
LCBSZWdpc3RlcklEIG0sIFRydXN0ZWRJbW0zMiBhbW91bnQsIFJlZ2lzdGVySUQgZCkKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLmVvcjw2ND4oZCwgbiwgbSwgQXNzZW1ibGVyOjpMU1IsIGFt
b3VudC5tX3ZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIG9yTGVmdFNoaWZ0MzIoUmVnaXN0ZXJJ
RCBuLCBSZWdpc3RlcklEIG0sIFRydXN0ZWRJbW0zMiBhbW91bnQsIFJlZ2lzdGVySUQgZCkKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ycjwzMj4oZCwgbiwgbSwgQXNzZW1ibGVyOjpMU0ws
IGFtb3VudC5tX3ZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIG9yUmlnaHRTaGlmdDMyKFJlZ2lz
dGVySUQgbiwgUmVnaXN0ZXJJRCBtLCBUcnVzdGVkSW1tMzIgYW1vdW50LCBSZWdpc3RlcklEIGQp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5vcnI8MzI+KGQsIG4sIG0sIEFzc2VtYmxlcjo6
QVNSLCBhbW91bnQubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBvclVuc2lnbmVkUmlnaHRT
aGlmdDMyKFJlZ2lzdGVySUQgbiwgUmVnaXN0ZXJJRCBtLCBUcnVzdGVkSW1tMzIgYW1vdW50LCBS
ZWdpc3RlcklEIGQpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5vcnI8MzI+KGQsIG4sIG0s
IEFzc2VtYmxlcjo6TFNSLCBhbW91bnQubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBvckxl
ZnRTaGlmdDY0KFJlZ2lzdGVySUQgbiwgUmVnaXN0ZXJJRCBtLCBUcnVzdGVkSW1tMzIgYW1vdW50
LCBSZWdpc3RlcklEIGQpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5vcnI8NjQ+KGQsIG4s
IG0sIEFzc2VtYmxlcjo6TFNMLCBhbW91bnQubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBv
clJpZ2h0U2hpZnQ2NChSZWdpc3RlcklEIG4sIFJlZ2lzdGVySUQgbSwgVHJ1c3RlZEltbTMyIGFt
b3VudCwgUmVnaXN0ZXJJRCBkKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3JyPDY0Pihk
LCBuLCBtLCBBc3NlbWJsZXI6OkFTUiwgYW1vdW50Lm1fdmFsdWUpOworICAgIH0KKworICAgIHZv
aWQgb3JVbnNpZ25lZFJpZ2h0U2hpZnQ2NChSZWdpc3RlcklEIG4sIFJlZ2lzdGVySUQgbSwgVHJ1
c3RlZEltbTMyIGFtb3VudCwgUmVnaXN0ZXJJRCBkKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIub3JyPDY0PihkLCBuLCBtLCBBc3NlbWJsZXI6OkxTUiwgYW1vdW50Lm1fdmFsdWUpOworICAg
IH0KKwogICAgIHZvaWQgY2xlYXJCaXQ2NChSZWdpc3RlcklEIGJpdFRvQ2xlYXIsIFJlZ2lzdGVy
SUQgZGVzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoRm9yTWFzayA9IEludmFsaWRHUFJSZWcpCiAgICAg
ewogICAgICAgICBpZiAoc2NyYXRjaEZvck1hc2sgPT0gSW52YWxpZEdQUlJlZykKQEAgLTg2Myw2
ICs5NTMsMTEgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5zbXVsbChkZXN0LCBsZWZ0
LCByaWdodCk7CiAgICAgfQogCisgICAgdm9pZCBtdWx0aXBseVplcm9FeHRlbmQzMihSZWdpc3Rl
cklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLnVtdWxsKGRlc3QsIGxlZnQsIHJpZ2h0KTsKKyAgICB9CisKICAgICB2
b2lkIGRpdjMyKFJlZ2lzdGVySUQgZGl2aWRlbmQsIFJlZ2lzdGVySUQgZGl2aXNvciwgUmVnaXN0
ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIuc2RpdjwzMj4oZGVzdCwgZGl2
aWRlbmQsIGRpdmlzb3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci90ZXN0bWFzbS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3Rt
YXNtLmNwcAppbmRleCAxY2E2OTgzZWI3MGQ5NjQwYmU0ZmIyZjExMGUyZjhlMDFmMzhmODM4Li44
OTllNzZhMjYxM2E5YjdlYTYyMDAyYTBkNjg2ZjYxNWIxMTlmMTk1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcApAQCAtOTIxLDYgKzkyMSwyNiBAQCB2
b2lkIHRlc3RNdWx0aXBseVNpZ25FeHRlbmQzMigpCiAgICAgfQogfQogCit2b2lkIHRlc3RNdWx0
aXBseVplcm9FeHRlbmQzMigpCit7CisgICAgZm9yIChhdXRvIG5PcGVyYW5kIDogaW50MzJPcGVy
YW5kcygpKSB7CisgICAgICAgIGF1dG8gbXVsID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYg
aml0KSB7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAg
ICAgICBqaXQubXVsdGlwbHlaZXJvRXh0ZW5kMzIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAg
ICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAg
ICAgICAgfSk7CisKKyAgICAgICAgZm9yIChhdXRvIG1PcGVyYW5kIDogaW50MzJPcGVyYW5kcygp
KSB7CisgICAgICAgICAgICB1aW50MzJfdCBuID0gbk9wZXJhbmQ7CisgICAgICAgICAgICB1aW50
MzJfdCBtID0gbU9wZXJhbmQ7CisgICAgICAgICAgICBDSEVDS19FUShpbnZva2U8dWludDY0X3Q+
KG11bCwgbiwgbSksIHN0YXRpY19jYXN0PHVpbnQ2NF90PihuKSAqIHN0YXRpY19jYXN0PHVpbnQ2
NF90PihtKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKIHZvaWQgdGVzdE11bHRpcGx5QWRkU2ln
bkV4dGVuZDMyKCkKIHsKICAgICAvLyBkID0gU0V4dDMyKG4pICogU0V4dDMyKG0pICsgYQpAQCAt
MjM4Miw2ICsyNDAyLDQ3NCBAQCB2b2lkIHRlc3RMb2FkUHJlUG9zdEluZGV4NjQoKQogICAgIENI
RUNLX0VRKHRlc3QyKDUpLCAyKTsKICAgICBDSEVDS19FUShudW1zWzJdLCA1KTsKIH0KKwordm9p
ZCB0ZXN0QW5kTGVmdFNoaWZ0MzIoKQoreworICAgIFZlY3RvcjxpbnQzMl90PiBhbW91bnRzID0g
eyAwLCAxNywgMzEgfTsKKyAgICBmb3IgKGF1dG8gbiA6IGludDMyT3BlcmFuZHMoKSkgeworICAg
ICAgICBmb3IgKGF1dG8gbSA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChh
dXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGFuZDMyID0gY29t
cGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRG
dW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgICAgICAgICAgaml0LmFuZExlZnRT
aGlmdDMyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgCisgICAgICAgICAgICAgICAgICAgICAgICBH
UFJJbmZvOjphcmd1bWVudEdQUjEsIAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoYW1vdW50KSwgCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9u
RXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICAg
ICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgaW50MzJfdCBsaHMgPSBpbnZva2U8aW50MzJf
dD4oYW5kMzIsIG4sIG0pOworICAgICAgICAgICAgICAgIGludDMyX3QgcmhzID0gbiAmIChtIDw8
IGFtb3VudCk7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEobGhzLCByaHMpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RBbmRSaWdodFNoaWZ0MzIoKQor
eworICAgIFZlY3RvcjxpbnQzMl90PiBhbW91bnRzID0geyAwLCAxNywgMzEgfTsKKyAgICBmb3Ig
KGF1dG8gbiA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbSA6IGludDMy
T3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsK
KyAgICAgICAgICAgICAgICBhdXRvIGFuZDMyID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYg
aml0KSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisK
KyAgICAgICAgICAgICAgICAgICAgaml0LmFuZFJpZ2h0U2hpZnQzMihHUFJJbmZvOjphcmd1bWVu
dEdQUjAsIAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCAK
KyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFtb3Vu
dCksIAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwor
CisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAg
ICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAg
ICAgICAgIGludDMyX3QgbGhzID0gaW52b2tlPGludDMyX3Q+KGFuZDMyLCBuLCBtKTsKKyAgICAg
ICAgICAgICAgICBpbnQzMl90IHJocyA9IG4gJiAobSA+PiBhbW91bnQpOworICAgICAgICAgICAg
ICAgIENIRUNLX0VRKGxocywgcmhzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
K30KKwordm9pZCB0ZXN0QW5kVW5zaWduZWRSaWdodFNoaWZ0MzIoKQoreworICAgIFZlY3Rvcjx1
aW50MzJfdD4gYW1vdW50cyA9IHsgMCwgMTcsIDMxIH07CisgICAgZm9yIChhdXRvIG4gOiBpbnQz
Mk9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG0gOiBpbnQzMk9wZXJhbmRzKCkpIHsK
KyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAg
ICAgYXV0byBhbmQzMiA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAg
ICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAg
ICAgICAgIGppdC5hbmRVbnNpZ25lZFJpZ2h0U2hpZnQzMihHUFJJbmZvOjphcmd1bWVudEdQUjAs
IAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFtb3VudCksIAor
ICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAg
ICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICAg
ICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAg
IHVpbnQzMl90IGxocyA9IGludm9rZTx1aW50MzJfdD4oYW5kMzIsIG4sIG0pOworICAgICAgICAg
ICAgICAgIHVpbnQzMl90IHJocyA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihuKSAmIChzdGF0aWNf
Y2FzdDx1aW50MzJfdD4obSkgPj4gYW1vdW50KTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUShs
aHMsIHJocyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgdGVz
dEFuZExlZnRTaGlmdDY0KCkKK3sKKyAgICBWZWN0b3I8aW50MzJfdD4gYW1vdW50cyA9IHsgMCwg
MzQsIDYzIH07CisgICAgZm9yIChhdXRvIG4gOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAg
Zm9yIChhdXRvIG0gOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBh
bW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgYXV0byBhbmQ2NCA9IGNvbXBpbGUo
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rp
b25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAgICAgICAgIGppdC5hbmRMZWZ0U2hpZnQ2
NChHUFJJbmZvOjphcmd1bWVudEdQUjAsIAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5m
bzo6YXJndW1lbnRHUFIxLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKGFtb3VudCksIAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxv
Z3VlKGppdCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAgICAg
ICB9KTsKKworICAgICAgICAgICAgICAgIGludDY0X3QgbGhzID0gaW52b2tlPGludDY0X3Q+KGFu
ZDY0LCBuLCBtKTsKKyAgICAgICAgICAgICAgICBpbnQ2NF90IHJocyA9IG4gJiAobSA8PCBhbW91
bnQpOworICAgICAgICAgICAgICAgIENIRUNLX0VRKGxocywgcmhzKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0QW5kUmlnaHRTaGlmdDY0KCkKK3sKKyAg
ICBWZWN0b3I8aW50MzJfdD4gYW1vdW50cyA9IHsgMCwgMzQsIDYzIH07CisgICAgZm9yIChhdXRv
IG4gOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG0gOiBpbnQ2NE9wZXJh
bmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAg
ICAgICAgICAgICAgYXV0byBhbmQ2NCA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkg
eworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAg
ICAgICAgICAgICAgICAgIGppdC5hbmRSaWdodFNoaWZ0NjQoR1BSSW5mbzo6YXJndW1lbnRHUFIw
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgCisgICAg
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbW91bnQpLCAK
KyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAg
ICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAg
ICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAg
ICBpbnQ2NF90IGxocyA9IGludm9rZTxpbnQ2NF90PihhbmQ2NCwgbiwgbSk7CisgICAgICAgICAg
ICAgICAgaW50NjRfdCByaHMgPSBuICYgKG0gPj4gYW1vdW50KTsKKyAgICAgICAgICAgICAgICBD
SEVDS19FUShsaHMsIHJocyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisK
K3ZvaWQgdGVzdEFuZFVuc2lnbmVkUmlnaHRTaGlmdDY0KCkKK3sKKyAgICBWZWN0b3I8dWludDMy
X3Q+IGFtb3VudHMgPSB7IDAsIDM0LCA2MyB9OworICAgIGZvciAoYXV0byBuIDogaW50NjRPcGVy
YW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAg
ICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAgICAgIGF1
dG8gYW5kNjQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgICAgICAg
ICBqaXQuYW5kVW5zaWduZWRSaWdodFNoaWZ0NjQoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgCisgICAgICAgICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbW91bnQpLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAg
ICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgICAgICAg
ICBqaXQucmV0KCk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICB1aW50
NjRfdCBsaHMgPSBpbnZva2U8dWludDY0X3Q+KGFuZDY0LCBuLCBtKTsKKyAgICAgICAgICAgICAg
ICB1aW50NjRfdCByaHMgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4obikgJiAoc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KG0pID4+IGFtb3VudCk7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEobGhzLCBy
aHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RYb3JM
ZWZ0U2hpZnQzMigpCit7CisgICAgVmVjdG9yPGludDMyX3Q+IGFtb3VudHMgPSB7IDAsIDE3LCAz
MSB9OworICAgIGZvciAoYXV0byBuIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAo
YXV0byBtIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50
IDogYW1vdW50cykgeworICAgICAgICAgICAgICAgIGF1dG8geG9yMzIgPSBjb21waWxlKFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJv
bG9ndWUoaml0KTsKKworICAgICAgICAgICAgICAgICAgICBqaXQueG9yTGVmdFNoaWZ0MzIoR1BS
SW5mbzo6YXJndW1lbnRHUFIwLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmFy
Z3VtZW50R1BSMSwgCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihhbW91bnQpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVy
blZhbHVlR1BSKTsKKworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShq
aXQpOworICAgICAgICAgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICAgICAgfSk7
CisKKyAgICAgICAgICAgICAgICBpbnQzMl90IGxocyA9IGludm9rZTxpbnQzMl90Pih4b3IzMiwg
biwgbSk7CisgICAgICAgICAgICAgICAgaW50MzJfdCByaHMgPSBuIF4gKG0gPDwgYW1vdW50KTsK
KyAgICAgICAgICAgICAgICBDSEVDS19FUShsaHMsIHJocyk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdFhvclJpZ2h0U2hpZnQzMigpCit7CisgICAgVmVj
dG9yPGludDMyX3Q+IGFtb3VudHMgPSB7IDAsIDE3LCAzMSB9OworICAgIGZvciAoYXV0byBuIDog
aW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtIDogaW50MzJPcGVyYW5kcygp
KSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAg
ICAgICAgIGF1dG8geG9yMzIgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAg
ICAgICAgICAgICBqaXQueG9yUmlnaHRTaGlmdDMyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgCisg
ICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjphcmd1bWVudEdQUjEsIAorICAgICAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYW1vdW50KSwgCisgICAg
ICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAg
ICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgICAgICAg
ICAgaml0LnJldCgpOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgaW50
MzJfdCBsaHMgPSBpbnZva2U8aW50MzJfdD4oeG9yMzIsIG4sIG0pOworICAgICAgICAgICAgICAg
IGludDMyX3QgcmhzID0gbiBeIChtID4+IGFtb3VudCk7CisgICAgICAgICAgICAgICAgQ0hFQ0tf
RVEobGhzLCByaHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lk
IHRlc3RYb3JVbnNpZ25lZFJpZ2h0U2hpZnQzMigpCit7CisgICAgVmVjdG9yPHVpbnQzMl90PiBh
bW91bnRzID0geyAwLCAxNywgMzEgfTsKKyAgICBmb3IgKGF1dG8gbiA6IGludDMyT3BlcmFuZHMo
KSkgeworICAgICAgICBmb3IgKGF1dG8gbSA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICAg
ICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHhv
cjMyID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAg
ICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgICAgICAgICAgaml0
LnhvclVuc2lnbmVkUmlnaHRTaGlmdDMyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgCisgICAgICAg
ICAgICAgICAgICAgICAgICBHUFJJbmZvOjphcmd1bWVudEdQUjEsIAorICAgICAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYW1vdW50KSwgCisgICAgICAgICAg
ICAgICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAg
ICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgICAgICAgICAgaml0
LnJldCgpOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgdWludDMyX3Qg
bGhzID0gaW52b2tlPHVpbnQzMl90Pih4b3IzMiwgbiwgbSk7CisgICAgICAgICAgICAgICAgdWlu
dDMyX3QgcmhzID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG4pIF4gKHN0YXRpY19jYXN0PHVpbnQz
Ml90PihtKSA+PiBhbW91bnQpOworICAgICAgICAgICAgICAgIENIRUNLX0VRKGxocywgcmhzKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0WG9yTGVmdFNo
aWZ0NjQoKQoreworICAgIFZlY3RvcjxpbnQzMl90PiBhbW91bnRzID0geyAwLCAzNCwgNjMgfTsK
KyAgICBmb3IgKGF1dG8gbiA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8g
bSA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFt
b3VudHMpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHhvcjY0ID0gY29tcGlsZShbPV0gKENDYWxs
SGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3Vl
KGppdCk7CisKKyAgICAgICAgICAgICAgICAgICAgaml0LnhvckxlZnRTaGlmdDY0KEdQUkluZm86
OmFyZ3VtZW50R1BSMCwgCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjphcmd1bWVu
dEdQUjEsIAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoYW1vdW50KSwgCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUik7CisKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsK
KyAgICAgICAgICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICAgICAgICAgIH0pOworCisg
ICAgICAgICAgICAgICAgaW50NjRfdCBsaHMgPSBpbnZva2U8aW50NjRfdD4oeG9yNjQsIG4sIG0p
OworICAgICAgICAgICAgICAgIGludDY0X3QgcmhzID0gbiBeIChtIDw8IGFtb3VudCk7CisgICAg
ICAgICAgICAgICAgQ0hFQ0tfRVEobGhzLCByaHMpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorfQorCit2b2lkIHRlc3RYb3JSaWdodFNoaWZ0NjQoKQoreworICAgIFZlY3Rvcjxp
bnQzMl90PiBhbW91bnRzID0geyAwLCAzNCwgNjMgfTsKKyAgICBmb3IgKGF1dG8gbiA6IGludDY0
T3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbSA6IGludDY0T3BlcmFuZHMoKSkgewor
ICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAg
ICBhdXRvIHhvcjY0ID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAg
ICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgICAg
ICAgICAgaml0LnhvclJpZ2h0U2hpZnQ2NChHUFJJbmZvOjphcmd1bWVudEdQUjAsIAorICAgICAg
ICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFtb3VudCksIAorICAgICAgICAg
ICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICAg
ICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICAgICAgICAgIGpp
dC5yZXQoKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIGludDY0X3Qg
bGhzID0gaW52b2tlPGludDY0X3Q+KHhvcjY0LCBuLCBtKTsKKyAgICAgICAgICAgICAgICBpbnQ2
NF90IHJocyA9IG4gXiAobSA+PiBhbW91bnQpOworICAgICAgICAgICAgICAgIENIRUNLX0VRKGxo
cywgcmhzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0
WG9yVW5zaWduZWRSaWdodFNoaWZ0NjQoKQoreworICAgIFZlY3Rvcjx1aW50MzJfdD4gYW1vdW50
cyA9IHsgMCwgMzQsIDYzIH07CisgICAgZm9yIChhdXRvIG4gOiBpbnQ2NE9wZXJhbmRzKCkpIHsK
KyAgICAgICAgZm9yIChhdXRvIG0gOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZv
ciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgYXV0byB4b3I2NCA9
IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgICAgICAgICBl
bWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAgICAgICAgIGppdC54b3JV
bnNpZ25lZFJpZ2h0U2hpZnQ2NChHUFJJbmZvOjphcmd1bWVudEdQUjAsIAorICAgICAgICAgICAg
ICAgICAgICAgICAgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCAKKyAgICAgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFtb3VudCksIAorICAgICAgICAgICAgICAg
ICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICAgICAgICAg
IGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5yZXQo
KTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIHVpbnQ2NF90IGxocyA9
IGludm9rZTx1aW50NjRfdD4oeG9yNjQsIG4sIG0pOworICAgICAgICAgICAgICAgIHVpbnQ2NF90
IHJocyA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihuKSBeIChzdGF0aWNfY2FzdDx1aW50NjRfdD4o
bSkgPj4gYW1vdW50KTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUShsaHMsIHJocyk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdE9yTGVmdFNoaWZ0MzIo
KQoreworICAgIFZlY3RvcjxpbnQzMl90PiBhbW91bnRzID0geyAwLCAxNywgMzEgfTsKKyAgICBm
b3IgKGF1dG8gbiA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbSA6IGlu
dDMyT3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMp
IHsKKyAgICAgICAgICAgICAgICBhdXRvIG9yMzIgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsK
KworICAgICAgICAgICAgICAgICAgICBqaXQub3JMZWZ0U2hpZnQzMihHUFJJbmZvOjphcmd1bWVu
dEdQUjAsIAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCAK
KyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFtb3Vu
dCksIAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwor
CisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAg
ICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAg
ICAgICAgIGludDMyX3QgbGhzID0gaW52b2tlPGludDMyX3Q+KG9yMzIsIG4sIG0pOworICAgICAg
ICAgICAgICAgIGludDMyX3QgcmhzID0gbiB8IChtIDw8IGFtb3VudCk7CisgICAgICAgICAgICAg
ICAgQ0hFQ0tfRVEobGhzLCByaHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
fQorCit2b2lkIHRlc3RPclJpZ2h0U2hpZnQzMigpCit7CisgICAgVmVjdG9yPGludDMyX3Q+IGFt
b3VudHMgPSB7IDAsIDE3LCAzMSB9OworICAgIGZvciAoYXV0byBuIDogaW50MzJPcGVyYW5kcygp
KSB7CisgICAgICAgIGZvciAoYXV0byBtIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgICAg
ICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAgICAgIGF1dG8gb3Iz
MiA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgICAgICAg
ICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAgICAgICAgIGppdC5v
clJpZ2h0U2hpZnQzMihHUFJJbmZvOjphcmd1bWVudEdQUjAsIAorICAgICAgICAgICAgICAgICAg
ICAgICAgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFtb3VudCksIAorICAgICAgICAgICAgICAgICAgICAg
ICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICAgICAgICAgIGVtaXRG
dW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAg
ICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIGludDMyX3QgbGhzID0gaW52b2tl
PGludDMyX3Q+KG9yMzIsIG4sIG0pOworICAgICAgICAgICAgICAgIGludDMyX3QgcmhzID0gbiB8
IChtID4+IGFtb3VudCk7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEobGhzLCByaHMpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RPclVuc2lnbmVkUmln
aHRTaGlmdDMyKCkKK3sKKyAgICBWZWN0b3I8dWludDMyX3Q+IGFtb3VudHMgPSB7IDAsIDE3LCAz
MSB9OworICAgIGZvciAoYXV0byBuIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAo
YXV0byBtIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50
IDogYW1vdW50cykgeworICAgICAgICAgICAgICAgIGF1dG8gb3IzMiA9IGNvbXBpbGUoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9s
b2d1ZShqaXQpOworCisgICAgICAgICAgICAgICAgICAgIGppdC5vclVuc2lnbmVkUmlnaHRTaGlm
dDMyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJ
bmZvOjphcmd1bWVudEdQUjEsIAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoYW1vdW50KSwgCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBp
bG9ndWUoaml0KTsKKyAgICAgICAgICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICAgICAg
ICAgIH0pOworCisgICAgICAgICAgICAgICAgdWludDMyX3QgbGhzID0gaW52b2tlPHVpbnQzMl90
PihvcjMyLCBuLCBtKTsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCByaHMgPSBzdGF0aWNfY2Fz
dDx1aW50MzJfdD4obikgfCAoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG0pID4+IGFtb3VudCk7Cisg
ICAgICAgICAgICAgICAgQ0hFQ0tfRVEobGhzLCByaHMpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorfQorCit2b2lkIHRlc3RPckxlZnRTaGlmdDY0KCkKK3sKKyAgICBWZWN0b3I8
aW50MzJfdD4gYW1vdW50cyA9IHsgMCwgMzQsIDYzIH07CisgICAgZm9yIChhdXRvIG4gOiBpbnQ2
NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG0gOiBpbnQ2NE9wZXJhbmRzKCkpIHsK
KyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAg
ICAgYXV0byBvcjY0ID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAg
ICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgICAg
ICAgICAgaml0Lm9yTGVmdFNoaWZ0NjQoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgCisgICAgICAgICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbW91bnQpLCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgICAg
ICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgICAgICAgICBqaXQu
cmV0KCk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICBpbnQ2NF90IGxo
cyA9IGludm9rZTxpbnQ2NF90PihvcjY0LCBuLCBtKTsKKyAgICAgICAgICAgICAgICBpbnQ2NF90
IHJocyA9IG4gfCAobSA8PCBhbW91bnQpOworICAgICAgICAgICAgICAgIENIRUNLX0VRKGxocywg
cmhzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0T3JS
aWdodFNoaWZ0NjQoKQoreworICAgIFZlY3RvcjxpbnQzMl90PiBhbW91bnRzID0geyAwLCAzNCwg
NjMgfTsKKyAgICBmb3IgKGF1dG8gbiA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICBmb3Ig
KGF1dG8gbSA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3Vu
dCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBhdXRvIG9yNjQgPSBjb21waWxlKFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJv
bG9ndWUoaml0KTsKKworICAgICAgICAgICAgICAgICAgICBqaXQub3JSaWdodFNoaWZ0NjQoR1BS
SW5mbzo6YXJndW1lbnRHUFIwLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmFy
Z3VtZW50R1BSMSwgCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihhbW91bnQpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVy
blZhbHVlR1BSKTsKKworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShq
aXQpOworICAgICAgICAgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICAgICAgfSk7
CisKKyAgICAgICAgICAgICAgICBpbnQ2NF90IGxocyA9IGludm9rZTxpbnQ2NF90PihvcjY0LCBu
LCBtKTsKKyAgICAgICAgICAgICAgICBpbnQ2NF90IHJocyA9IG4gfCAobSA+PiBhbW91bnQpOwor
ICAgICAgICAgICAgICAgIENIRUNLX0VRKGxocywgcmhzKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0T3JVbnNpZ25lZFJpZ2h0U2hpZnQ2NCgpCit7Cisg
ICAgVmVjdG9yPHVpbnQzMl90PiBhbW91bnRzID0geyAwLCAzNCwgNjMgfTsKKyAgICBmb3IgKGF1
dG8gbiA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbSA6IGludDY0T3Bl
cmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAg
ICAgICAgICAgICAgICBhdXRvIG9yNjQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQp
IHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAg
ICAgICAgICAgICAgICAgICBqaXQub3JVbnNpZ25lZFJpZ2h0U2hpZnQ2NChHUFJJbmZvOjphcmd1
bWVudEdQUjAsIAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6YXJndW1lbnRHUFIx
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFt
b3VudCksIAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
OworCisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAg
ICAgICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAg
ICAgICAgICAgIHVpbnQ2NF90IGxocyA9IGludm9rZTx1aW50NjRfdD4ob3I2NCwgbiwgbSk7Cisg
ICAgICAgICAgICAgICAgdWludDY0X3QgcmhzID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG4pIHwg
KHN0YXRpY19jYXN0PHVpbnQ2NF90PihtKSA+PiBhbW91bnQpOworICAgICAgICAgICAgICAgIENI
RUNLX0VRKGxocywgcmhzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KICNl
bmRpZgogCiAjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkgfHwgQ1BVKEFSTTY0KQpAQCAtNDkx
NSw2ICs1NDAzLDcgQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKSBXVEZfSUdOT1JFU19U
SFJFQURfU0FGRVRZX0FOQUxZU0lTCiAgICAgUlVOKHRlc3RMb2FkU3RvcmVQYWlyNjRJbnQ2NCgp
KTsKICAgICBSVU4odGVzdExvYWRTdG9yZVBhaXI2NERvdWJsZSgpKTsKICAgICBSVU4odGVzdE11
bHRpcGx5U2lnbkV4dGVuZDMyKCkpOworICAgIFJVTih0ZXN0TXVsdGlwbHlaZXJvRXh0ZW5kMzIo
KSk7CiAKICAgICBSVU4odGVzdFN1YjMyQXJncygpKTsKICAgICBSVU4odGVzdFN1YjMySW1tKCkp
OwpAQCAtNDk4MCw2ICs1NDY5LDI2IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikgV1RG
X0lHTk9SRVNfVEhSRUFEX1NBRkVUWV9BTkFMWVNJUwogICAgIFJVTih0ZXN0U3RvcmVQcmVQb3N0
SW5kZXg2NCgpKTsKICAgICBSVU4odGVzdExvYWRQcmVQb3N0SW5kZXgzMigpKTsKICAgICBSVU4o
dGVzdExvYWRQcmVQb3N0SW5kZXg2NCgpKTsKKyAgICBSVU4odGVzdEFuZExlZnRTaGlmdDMyKCkp
OworICAgIFJVTih0ZXN0QW5kUmlnaHRTaGlmdDMyKCkpOworICAgIFJVTih0ZXN0QW5kVW5zaWdu
ZWRSaWdodFNoaWZ0MzIoKSk7CisgICAgUlVOKHRlc3RBbmRMZWZ0U2hpZnQ2NCgpKTsKKyAgICBS
VU4odGVzdEFuZFJpZ2h0U2hpZnQ2NCgpKTsKKyAgICBSVU4odGVzdEFuZFVuc2lnbmVkUmlnaHRT
aGlmdDY0KCkpOworCisgICAgUlVOKHRlc3RYb3JMZWZ0U2hpZnQzMigpKTsKKyAgICBSVU4odGVz
dFhvclJpZ2h0U2hpZnQzMigpKTsKKyAgICBSVU4odGVzdFhvclVuc2lnbmVkUmlnaHRTaGlmdDMy
KCkpOworICAgIFJVTih0ZXN0WG9yTGVmdFNoaWZ0NjQoKSk7CisgICAgUlVOKHRlc3RYb3JSaWdo
dFNoaWZ0NjQoKSk7CisgICAgUlVOKHRlc3RYb3JVbnNpZ25lZFJpZ2h0U2hpZnQ2NCgpKTsKKwor
ICAgIFJVTih0ZXN0T3JMZWZ0U2hpZnQzMigpKTsKKyAgICBSVU4odGVzdE9yUmlnaHRTaGlmdDMy
KCkpOworICAgIFJVTih0ZXN0T3JVbnNpZ25lZFJpZ2h0U2hpZnQzMigpKTsKKyAgICBSVU4odGVz
dE9yTGVmdFNoaWZ0NjQoKSk7CisgICAgUlVOKHRlc3RPclJpZ2h0U2hpZnQ2NCgpKTsKKyAgICBS
VU4odGVzdE9yVW5zaWduZWRSaWdodFNoaWZ0NjQoKSk7CiAjZW5kaWYKIAogI2lmIENQVShBUk02
NEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCmluZGV4IGViYjAz
NTJjYjMwODAzZGJjMWZlODE4ZTM5OTBiYTM3NDU3MDY2MzcuLmQ2NTZhMzMxYjg4NjA2OTEwZWMy
NGJlNzE0YTU4YjlmNWFhOGFhMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0xvd2VyVG9BaXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2Vy
VG9BaXIuY3BwCkBAIC00OTksNyArNDk5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogCi0gICAgYm9vbCBpc01lcmdlYWJsZVZhbHVlKFZhbHVlKiB2LCBCMzo6T3Bj
b2RlIGIzT3Bjb2RlLCBib29sIGNoZWNrQ2FuQmVJbnRlcm5hbCkKKyAgICBib29sIGlzTWVyZ2Vh
YmxlVmFsdWUoVmFsdWUqIHYsIEIzOjpPcGNvZGUgYjNPcGNvZGUsIGJvb2wgY2hlY2tDYW5CZUlu
dGVybmFsID0gZmFsc2UpCiAgICAgeyAKICAgICAgICAgaWYgKHYtPm9wY29kZSgpICE9IGIzT3Bj
b2RlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTE2LDkgKzUxNiw5IEBAIHByaXZh
dGU6CiAjaWYgQ1BVKEFSTTY0KQogICAgICAgICAvLyBNYXliZSwgdGhlIGlkZWFsIGFwcHJvYWNo
IGlzIHRvIGludHJvZHVjZSBhIGRlY29yYXRvciAoSW5kZXhARVhUKSB0byB0aGUgQWlyIG9wZXJh
bmQgCiAgICAgICAgIC8vIHRvIHByb3ZpZGUgYW4gZXh0ZW5zaW9uIG9wcG9ydHVuaXR5IGZvciB0
aGUgc3BlY2lmaWMgZm9ybSB1bmRlciB0aGUgQWlyIG9wY29kZS4KLSAgICAgICAgaWYgKGlzTWVy
Z2VhYmxlVmFsdWUoaW5kZXgsIFpFeHQzMiwgZmFsc2UpKQorICAgICAgICBpZiAoaXNNZXJnZWFi
bGVWYWx1ZShpbmRleCwgWkV4dDMyKSkKICAgICAgICAgICAgIHJldHVybiBBcmc6OmluZGV4KGJh
c2UsIHRtcChpbmRleC0+Y2hpbGQoMCkpLCBzY2FsZSwgb2Zmc2V0LCBNYWNyb0Fzc2VtYmxlcjo6
RXh0ZW5kOjpaRXh0MzIpOwotICAgICAgICBpZiAoaXNNZXJnZWFibGVWYWx1ZShpbmRleCwgU0V4
dDMyLCBmYWxzZSkpCisgICAgICAgIGlmIChpc01lcmdlYWJsZVZhbHVlKGluZGV4LCBTRXh0MzIp
KQogICAgICAgICAgICAgcmV0dXJuIEFyZzo6aW5kZXgoYmFzZSwgdG1wKGluZGV4LT5jaGlsZCgw
KSksIHNjYWxlLCBvZmZzZXQsIE1hY3JvQXNzZW1ibGVyOjpFeHRlbmQ6OlNFeHQzMik7CiAjZW5k
aWYKICAgICAgICAgcmV0dXJuIEFyZzo6aW5kZXgoYmFzZSwgdG1wKGluZGV4KSwgc2NhbGUsIG9m
ZnNldCk7CkBAIC0yNTMyLDYgKzI1MzIsMjMgQEAgcHJpdmF0ZToKICAgICB2b2lkIGxvd2VyKCkK
ICAgICB7CiAgICAgICAgIHVzaW5nIG5hbWVzcGFjZSBBaXI7CisKKyAgICAgICAgYXV0byB0cnlB
cHBlbmRCaXRPcFdpdGhTaGlmdCA9IFsmXSAoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgQWly
OjpPcGNvZGUgb3Bjb2RlKSAtPiBib29sIHsKKyAgICAgICAgICAgIGlmICghaXNWYWxpZEZvcm0o
b3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFyZzo6SW1tLCBBcmc6OlRtcCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFjYW5CZUludGVybmFsKHJp
Z2h0KSB8fCAhaW1tKHJpZ2h0LT5jaGlsZCgxKSkgfHwgcmlnaHQtPmNoaWxkKDEpLT5hc0ludCgp
IDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIHVpbnQ2
NF90IGFtb3VudCA9IHJpZ2h0LT5jaGlsZCgxKS0+YXNJbnQoKTsKKyAgICAgICAgICAgIHVpbnQ2
NF90IGRhdGFzaXplID0gbV92YWx1ZS0+dHlwZSgpID09IEludDMyID8gMzIgOiA2NDsKKyAgICAg
ICAgICAgIGlmIChhbW91bnQgPj0gZGF0YXNpemUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAobGVmdCksIHRtcChyaWdodC0+
Y2hpbGQoMCkpLCBpbW0ocmlnaHQtPmNoaWxkKDEpKSwgdG1wKG1fdmFsdWUpKTsKKyAgICAgICAg
ICAgIGNvbW1pdEludGVybmFsKHJpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9OworCiAgICAgICAgIHN3aXRjaCAobV92YWx1ZS0+b3Bjb2RlKCkpIHsKICAgICAgICAg
Y2FzZSBCMzo6Tm9wOiB7CiAgICAgICAgICAgICAvLyBZZXMsIHdlIHdpbGwgdG90YWxseSBzZWUg
Tm9wJ3MgYmVjYXVzZSBzb21lIHBoYXNlcyB3aWxsIHJlcGxhY2VXaXRoTm9wKCkgaW5zdGVhZCBv
ZgpAQCAtMjY3MiwxMCArMjY4OSwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGFpck9wY29kZSAhPSBNdWx0aXBseUFkZDY0KQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBBaXI6Ok9vcHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTTUFE
REw6IGQgPSBTRXh0MzIobikgKiBTRXh0MzIobSkgKyBhCi0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoaXNNZXJnZWFibGVWYWx1ZShtdWx0aXBseUxlZnQsIFNFeHQzMiwgdHJ1ZSkgJiYgaXNN
ZXJnZWFibGVWYWx1ZShtdWx0aXBseVJpZ2h0LCBTRXh0MzIsIHRydWUpKSAKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChpc01lcmdlYWJsZVZhbHVlKG11bHRpcGx5TGVmdCwgU0V4dDMyKSAm
JiBpc01lcmdlYWJsZVZhbHVlKG11bHRpcGx5UmlnaHQsIFNFeHQzMikpIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBNdWx0aXBseUFkZFNpZ25FeHRlbmQzMjsKICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFVNQURETDogZCA9IFpFeHQzMihuKSAqIFpFeHQzMihtKSArIGEK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc01lcmdlYWJsZVZhbHVlKG11bHRpcGx5TGVm
dCwgWkV4dDMyLCB0cnVlKSAmJiBpc01lcmdlYWJsZVZhbHVlKG11bHRpcGx5UmlnaHQsIFpFeHQz
MiwgdHJ1ZSkpIAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTWVyZ2VhYmxlVmFsdWUo
bXVsdGlwbHlMZWZ0LCBaRXh0MzIpICYmIGlzTWVyZ2VhYmxlVmFsdWUobXVsdGlwbHlSaWdodCwg
WkV4dDMyKSkgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE11bHRpcGx5QWRk
WmVyb0V4dGVuZDMyOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFpcjo6T29wczsK
ICAgICAgICAgICAgICAgICAgICAgfTsKQEAgLTI2ODMsOCArMjcwMCw2IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG5ld0Fpck9wY29kZSA9IHRyeU5ld0Fpck9w
Y29kZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0obmV3QWlyT3Bjb2Rl
LCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OlRtcCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGFwcGVuZChuZXdBaXJPcGNvZGUsIHRtcChtdWx0aXBseUxlZnQtPmNoaWxk
KDApKSwgdG1wKG11bHRpcGx5UmlnaHQtPmNoaWxkKDApKSwgdG1wKHJpZ2h0KSwgdG1wKG1fdmFs
dWUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKG11bHRpcGx5TGVm
dCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbChtdWx0aXBseVJpZ2h0
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKGxlZnQpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAg
LTI3MDQsMjUgKzI3MTksMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmICh0cnlNdWx0aXBs
eUFkZCgpKQogICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgLy8gYWRkLXdp
dGgtc2hpZnQgUGF0dGVybjogbiArIChtIFNoaWZ0VHlwZSBhbW91bnQpCisgICAgICAgICAgICAv
LyBhZGQtd2l0aC1zaGlmdCBQYXR0ZXJuOiBsZWZ0ICsgKHJpZ2h0IFNoaWZ0VHlwZSBhbW91bnQp
CiAgICAgICAgICAgICBhdXRvIHRyeUFwcGVuZEFkZFdpdGhTaGlmdCA9IFsmXSAoVmFsdWUqIGxl
ZnQsIFZhbHVlKiByaWdodCkgLT4gYm9vbCB7CiAgICAgICAgICAgICAgICAgQWlyOjpPcGNvZGUg
b3Bjb2RlID0gb3Bjb2RlQmFzZWRPblNoaWZ0S2luZChyaWdodC0+b3Bjb2RlKCksIAogICAgICAg
ICAgICAgICAgICAgICBBZGRMZWZ0U2hpZnQzMiwgQWRkTGVmdFNoaWZ0NjQsIAogICAgICAgICAg
ICAgICAgICAgICBBZGRSaWdodFNoaWZ0MzIsIEFkZFJpZ2h0U2hpZnQ2NCwgCiAgICAgICAgICAg
ICAgICAgICAgIEFkZFVuc2lnbmVkUmlnaHRTaGlmdDMyLCBBZGRVbnNpZ25lZFJpZ2h0U2hpZnQ2
NCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6VG1wLCBB
cmc6OlRtcCwgQXJnOjpJbW0sIEFyZzo6VG1wKSkgCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgICAgICBpZiAoIWNhbkJlSW50ZXJuYWwocmlnaHQpIHx8ICFp
bW0ocmlnaHQtPmNoaWxkKDEpKSB8fCByaWdodC0+Y2hpbGQoMSktPmFzSW50KCkgPCAwKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgICAgICB1aW50NjRf
dCBhbW91bnQgPSByaWdodC0+Y2hpbGQoMSktPmFzSW50KCk7Ci0gICAgICAgICAgICAgICAgdWlu
dDY0X3QgZGF0YXNpemUgPSBtX3ZhbHVlLT50eXBlKCkgPT0gSW50MzIgPyAzMiA6IDY0OwotICAg
ICAgICAgICAgICAgIGlmIChhbW91bnQgPj0gZGF0YXNpemUpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIHRtcChsZWZ0
KSwgdG1wKHJpZ2h0LT5jaGlsZCgwKSksIGltbShyaWdodC0+Y2hpbGQoMSkpLCB0bXAobV92YWx1
ZSkpOwotICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKHJpZ2h0KTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ5QXBwZW5kQml0T3BX
aXRoU2hpZnQobGVmdCwgcmlnaHQsIG9wY29kZSk7CiAgICAgICAgICAgICB9OwogCiAgICAgICAg
ICAgICBpZiAodHJ5QXBwZW5kQWRkV2l0aFNoaWZ0KGxlZnQsIHJpZ2h0KSB8fCB0cnlBcHBlbmRB
ZGRXaXRoU2hpZnQocmlnaHQsIGxlZnQpKQpAQCAtMjc1MCwxMCArMjc1MywxMCBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICBpZiAoYWlyT3Bjb2RlICE9IE11bHRpcGx5U3ViNjQpCiAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQWlyOjpPb3BzOwogICAgICAgICAgICAgICAg
ICAgICAvLyBTTVNVQkw6IGQgPSBhIC0gU0V4dDMyKG4pICogU0V4dDMyKG0pCi0gICAgICAgICAg
ICAgICAgICAgIGlmIChpc01lcmdlYWJsZVZhbHVlKG11bHRpcGx5TGVmdCwgU0V4dDMyLCB0cnVl
KSAmJiBpc01lcmdlYWJsZVZhbHVlKG11bHRpcGx5UmlnaHQsIFNFeHQzMiwgdHJ1ZSkpIAorICAg
ICAgICAgICAgICAgICAgICBpZiAoaXNNZXJnZWFibGVWYWx1ZShtdWx0aXBseUxlZnQsIFNFeHQz
MikgJiYgaXNNZXJnZWFibGVWYWx1ZShtdWx0aXBseVJpZ2h0LCBTRXh0MzIpKSAKICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBNdWx0aXBseVN1YlNpZ25FeHRlbmQzMjsKICAgICAgICAg
ICAgICAgICAgICAgLy8gVU1TVUJMOiBkID0gYSAtIFpFeHQzMihuKSAqIFpFeHQzMihtKQotICAg
ICAgICAgICAgICAgICAgICBpZiAoaXNNZXJnZWFibGVWYWx1ZShtdWx0aXBseUxlZnQsIFpFeHQz
MiwgdHJ1ZSkgJiYgaXNNZXJnZWFibGVWYWx1ZShtdWx0aXBseVJpZ2h0LCBaRXh0MzIsIHRydWUp
KSAKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzTWVyZ2VhYmxlVmFsdWUobXVsdGlwbHlMZWZ0
LCBaRXh0MzIpICYmIGlzTWVyZ2VhYmxlVmFsdWUobXVsdGlwbHlSaWdodCwgWkV4dDMyKSkgCiAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTXVsdGlwbHlTdWJaZXJvRXh0ZW5kMzI7CiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBBaXI6Ok9vcHM7CiAgICAgICAgICAgICAgICAgfTsK
QEAgLTI3NjEsOCArMjc2NCw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgQWlyOjpPcGNv
ZGUgbmV3QWlyT3Bjb2RlID0gdHJ5TmV3QWlyT3Bjb2RlKCk7CiAgICAgICAgICAgICAgICAgaWYg
KGlzVmFsaWRGb3JtKG5ld0Fpck9wY29kZSwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OlRtcCwg
QXJnOjpUbXApKSB7CiAgICAgICAgICAgICAgICAgICAgIGFwcGVuZChuZXdBaXJPcGNvZGUsIHRt
cChtdWx0aXBseUxlZnQtPmNoaWxkKDApKSwgdG1wKG11bHRpcGx5UmlnaHQtPmNoaWxkKDApKSwg
dG1wKGxlZnQpLCB0bXAobV92YWx1ZSkpOwotICAgICAgICAgICAgICAgICAgICBjb21taXRJbnRl
cm5hbChtdWx0aXBseUxlZnQpOwotICAgICAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbCht
dWx0aXBseVJpZ2h0KTsKICAgICAgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwocmlnaHQp
OwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CkBA
IC0yNzc5LDI4ICsyNzgwLDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAodHJ5QXBwZW5k
TXVsdGlwbHlTdWIoKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIC8v
IHN1Yi13aXRoLXNoaWZ0IFBhdHRlcm46IG4gLSAobSBTaGlmdFR5cGUgYW1vdW50KQotICAgICAg
ICAgICAgYXV0byB0cnlBcHBlbmRTdWJBbmRTaGlmdCA9IFsmXSAoKSAtPiBib29sIHsKLSAgICAg
ICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBvcGNvZGVCYXNlZE9uU2hpZnRLaW5kKHJp
Z2h0LT5vcGNvZGUoKSwgCisgICAgICAgICAgICAvLyBzdWItd2l0aC1zaGlmdCBQYXR0ZXJuOiBs
ZWZ0IC0gKHJpZ2h0IFNoaWZ0VHlwZSBhbW91bnQpCisgICAgICAgICAgICBBaXI6Ok9wY29kZSBv
cGNvZGUgPSBvcGNvZGVCYXNlZE9uU2hpZnRLaW5kKHJpZ2h0LT5vcGNvZGUoKSwgCiAgICAgICAg
ICAgICAgICAgICAgIFN1YkxlZnRTaGlmdDMyLCBTdWJMZWZ0U2hpZnQ2NCwgCiAgICAgICAgICAg
ICAgICAgICAgIFN1YlJpZ2h0U2hpZnQzMiwgU3ViUmlnaHRTaGlmdDY0LCAKICAgICAgICAgICAg
ICAgICAgICAgU3ViVW5zaWduZWRSaWdodFNoaWZ0MzIsIFN1YlVuc2lnbmVkUmlnaHRTaGlmdDY0
KTsKLSAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIEFy
Zzo6VG1wLCBBcmc6OkltbSwgQXJnOjpUbXApKSAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgICAgIGlmICghY2FuQmVJbnRlcm5hbChyaWdodCkgfHwgIWlt
bShyaWdodC0+Y2hpbGQoMSkpIHx8IHJpZ2h0LT5jaGlsZCgxKS0+YXNJbnQoKSA8IDApCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgICAgIHVpbnQ2NF90
IGFtb3VudCA9IHJpZ2h0LT5jaGlsZCgxKS0+YXNJbnQoKTsKLSAgICAgICAgICAgICAgICB1aW50
NjRfdCBkYXRhc2l6ZSA9IG1fdmFsdWUtPnR5cGUoKSA9PSBJbnQzMiA/IDMyIDogNjQ7Ci0gICAg
ICAgICAgICAgICAgaWYgKGFtb3VudCA+PSBkYXRhc2l6ZSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKGxlZnQp
LCB0bXAocmlnaHQtPmNoaWxkKDApKSwgaW1tKHJpZ2h0LT5jaGlsZCgxKSksIHRtcChtX3ZhbHVl
KSk7Ci0gICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwocmlnaHQpOwotICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgaWYgKHRyeUFw
cGVuZFN1YkFuZFNoaWZ0KCkpCisgICAgICAgICAgICBpZiAodHJ5QXBwZW5kQml0T3BXaXRoU2hp
ZnQobGVmdCwgcmlnaHQsIG9wY29kZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAg
ICAgICAgICBhcHBlbmRCaW5PcDxTdWIzMiwgU3ViNjQsIFN1YkRvdWJsZSwgU3ViRmxvYXQ+KGxl
ZnQsIHJpZ2h0KTsKQEAgLTI4MTksMTAgKzI4MDQsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGFpck9wY29kZSAhPSBNdWx0aXBseU5lZzY0KQogICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEFpcjo6T29wczsKICAgICAgICAgICAgICAgICAgICAgLy8gU01ORUdM
OiBkID0gLShTRXh0MzIobikgKiBTRXh0MzIobSkpCi0gICAgICAgICAgICAgICAgICAgIGlmIChp
c01lcmdlYWJsZVZhbHVlKG11bHRpcGx5TGVmdCwgU0V4dDMyLCB0cnVlKSAmJiBpc01lcmdlYWJs
ZVZhbHVlKG11bHRpcGx5UmlnaHQsIFNFeHQzMiwgdHJ1ZSkpIAorICAgICAgICAgICAgICAgICAg
ICBpZiAoaXNNZXJnZWFibGVWYWx1ZShtdWx0aXBseUxlZnQsIFNFeHQzMikgJiYgaXNNZXJnZWFi
bGVWYWx1ZShtdWx0aXBseVJpZ2h0LCBTRXh0MzIpKSAKICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBNdWx0aXBseU5lZ1NpZ25FeHRlbmQzMjsKICAgICAgICAgICAgICAgICAgICAgLy8g
VU1ORUdMOiBkID0gLShaRXh0MzIobikgKiBaRXh0MzIobSkpCi0gICAgICAgICAgICAgICAgICAg
IGlmIChpc01lcmdlYWJsZVZhbHVlKG11bHRpcGx5TGVmdCwgWkV4dDMyLCB0cnVlKSAmJiBpc01l
cmdlYWJsZVZhbHVlKG11bHRpcGx5UmlnaHQsIFpFeHQzMiwgdHJ1ZSkpIAorICAgICAgICAgICAg
ICAgICAgICBpZiAoaXNNZXJnZWFibGVWYWx1ZShtdWx0aXBseUxlZnQsIFpFeHQzMikgJiYgaXNN
ZXJnZWFibGVWYWx1ZShtdWx0aXBseVJpZ2h0LCBaRXh0MzIpKSAKICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBNdWx0aXBseU5lZ1plcm9FeHRlbmQzMjsKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEFpcjo6T29wczsKICAgICAgICAgICAgICAgICB9OwpAQCAtMjgzMCw4ICsyODE1
LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBBaXI6Ok9wY29kZSBuZXdBaXJPcGNvZGUg
PSB0cnlOZXdBaXJPcGNvZGUoKTsKICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0obmV3
QWlyT3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFyZzo6VG1wKSkgewogICAgICAgICAgICAg
ICAgICAgICBhcHBlbmQobmV3QWlyT3Bjb2RlLCB0bXAobXVsdGlwbHlMZWZ0LT5jaGlsZCgwKSks
IHRtcChtdWx0aXBseVJpZ2h0LT5jaGlsZCgwKSksIHRtcChtX3ZhbHVlKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGNvbW1pdEludGVybmFsKG11bHRpcGx5TGVmdCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGNvbW1pdEludGVybmFsKG11bHRpcGx5UmlnaHQpOwogICAgICAgICAgICAgICAgICAgICBj
b21taXRJbnRlcm5hbChtX3ZhbHVlLT5jaGlsZCgwKSk7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KQEAgLTI4NTMsMjkgKzI4MzYsMzQgQEAgcHJp
dmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgTXVsOiB7Ci0gICAgICAgICAgICBpZiAo
bV92YWx1ZS0+dHlwZSgpID09IEludDY0Ci0gICAgICAgICAgICAgICAgJiYgaXNWYWxpZEZvcm0o
TXVsdGlwbHlTaWduRXh0ZW5kMzIsIEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJnOjpUbXApCi0gICAg
ICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IFNFeHQzMgotICAg
ICAgICAgICAgICAgICYmICFtX2xvY2tlZC5jb250YWlucyhtX3ZhbHVlLT5jaGlsZCgwKSkpIHsK
LSAgICAgICAgICAgICAgICBWYWx1ZSogb3BMZWZ0ID0gbV92YWx1ZS0+Y2hpbGQoMCk7Ci0gICAg
ICAgICAgICAgICAgVmFsdWUqIGxlZnQgPSBvcExlZnQtPmNoaWxkKDApOwotICAgICAgICAgICAg
ICAgIFZhbHVlKiBvcFJpZ2h0ID0gbV92YWx1ZS0+Y2hpbGQoMSk7Ci0gICAgICAgICAgICAgICAg
VmFsdWUqIHJpZ2h0ID0gbnVsbHB0cjsKLQotICAgICAgICAgICAgICAgIGlmIChvcFJpZ2h0LT5v
cGNvZGUoKSA9PSBTRXh0MzIgJiYgIW1fbG9ja2VkLmNvbnRhaW5zKG9wUmlnaHQtPmNoaWxkKDAp
KSkgewotICAgICAgICAgICAgICAgICAgICByaWdodCA9IG9wUmlnaHQtPmNoaWxkKDApOwotICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmlzUmVwcmVzZW50YWJs
ZUFzPGludDMyX3Q+KCkgJiYgIW1fbG9ja2VkLmNvbnRhaW5zKG1fdmFsdWUtPmNoaWxkKDEpKSkg
ewotICAgICAgICAgICAgICAgICAgICAvLyBXZSBqdXN0IHVzZSB0aGUgNjQtYml0IGNvbnN0IGlu
dCBhcyBhIDMyIGJpdCBjb25zdCBpbnQgZGlyZWN0bHkKLSAgICAgICAgICAgICAgICAgICAgcmln
aHQgPSBvcFJpZ2h0OwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFZhbHVlKiBsZWZ0
ID0gbV92YWx1ZS0+Y2hpbGQoMCk7CisgICAgICAgICAgICBWYWx1ZSogcmlnaHQgPSBtX3ZhbHVl
LT5jaGlsZCgxKTsKIAotICAgICAgICAgICAgICAgIGlmIChyaWdodCkgewotICAgICAgICAgICAg
ICAgICAgICBhcHBlbmQoTXVsdGlwbHlTaWduRXh0ZW5kMzIsIHRtcChsZWZ0KSwgdG1wKHJpZ2h0
KSwgdG1wKG1fdmFsdWUpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgYXV0byB0cnlBcHBlbmRNdWx0aXBseVdpdGhFeHRlbmQgPSBbJl0gKCkgLT4gYm9vbCB7Cisg
ICAgICAgICAgICAgICAgYXV0byB0cnlBaXJPcGNvZGUgPSBbJl0gKCkgLT4gQWlyOjpPcGNvZGUg
eworICAgICAgICAgICAgICAgICAgICBpZiAobV92YWx1ZS0+dHlwZSgpICE9IEludDY0KQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFpcjo6T29wczsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gU01VTEw6IGQgPSBTRXh0MzIobikgKiBTRXh0MzIobSkKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzTWVyZ2VhYmxlVmFsdWUobGVmdCwgU0V4dDMyKSAmJiBpc01lcmdlYWJsZVZhbHVl
KHJpZ2h0LCBTRXh0MzIpKSAKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBNdWx0aXBs
eVNpZ25FeHRlbmQzMjsKKyAgICAgICAgICAgICAgICAgICAgLy8gVU1VTEw6IGQgPSBaRXh0MzIo
bikgKiBaRXh0MzIobSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzTWVyZ2VhYmxlVmFsdWUo
bGVmdCwgWkV4dDMyKSAmJiBpc01lcmdlYWJsZVZhbHVlKHJpZ2h0LCBaRXh0MzIpKSAKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBNdWx0aXBseVplcm9FeHRlbmQzMjsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEFpcjo6T29wczsKKyAgICAgICAgICAgICAgICB9OworCisgICAg
ICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gdHJ5QWlyT3Bjb2RlKCk7CisgICAgICAg
ICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6
OlRtcCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKGxlZnQtPmNo
aWxkKDApKSwgdG1wKHJpZ2h0LT5jaGlsZCgwKSksIHRtcChtX3ZhbHVlKSk7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGFwcGVuZEJpbk9wPE11bDMyLCBNdWw2NCwgTXVsRG91YmxlLCBNdWxGbG9h
dCwgQ29tbXV0YXRpdmU+KAotICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLCBtX3Zh
bHVlLT5jaGlsZCgxKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgfTsKKworICAgICAgICAgICAgaWYgKHRyeUFwcGVuZE11bHRpcGx5V2l0aEV4dGVuZCgpKQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgYXBwZW5kQmluT3A8TXVsMzIs
IE11bDY0LCBNdWxEb3VibGUsIE11bEZsb2F0LCBDb21tdXRhdGl2ZT4obGVmdCwgcmlnaHQpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTI5ODgsNiArMjk3NiwxOCBAQCBw
cml2YXRlOgogICAgICAgICAgICAgaWYgKHRyeUFwcGVuZEJJQyhsZWZ0LCByaWdodCkgfHwgdHJ5
QXBwZW5kQklDKHJpZ2h0LCBsZWZ0KSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKKyAgICAg
ICAgICAgIC8vIGFuZC13aXRoLXNoaWZ0IFBhdHRlcm46IGxlZnQgJiAocmlnaHQgU2hpZnRUeXBl
IGFtb3VudCkKKyAgICAgICAgICAgIGF1dG8gdHJ5QXBwZW5kQW5kV2l0aFNoaWZ0ID0gWyZdIChW
YWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICBBaXI6
Ok9wY29kZSBvcGNvZGUgPSBvcGNvZGVCYXNlZE9uU2hpZnRLaW5kKHJpZ2h0LT5vcGNvZGUoKSwK
KyAgICAgICAgICAgICAgICAgICAgQW5kTGVmdFNoaWZ0MzIsIEFuZExlZnRTaGlmdDY0LAorICAg
ICAgICAgICAgICAgICAgICBBbmRSaWdodFNoaWZ0MzIsIEFuZFJpZ2h0U2hpZnQ2NCwKKyAgICAg
ICAgICAgICAgICAgICAgQW5kVW5zaWduZWRSaWdodFNoaWZ0MzIsIEFuZFVuc2lnbmVkUmlnaHRT
aGlmdDY0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ5QXBwZW5kQml0T3BXaXRoU2hpZnQo
bGVmdCwgcmlnaHQsIG9wY29kZSk7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBpZiAo
dHJ5QXBwZW5kQW5kV2l0aFNoaWZ0KGxlZnQsIHJpZ2h0KSB8fCB0cnlBcHBlbmRBbmRXaXRoU2hp
ZnQocmlnaHQsIGxlZnQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICAgICAg
YXBwZW5kQmluT3A8QW5kMzIsIEFuZDY0LCBBbmREb3VibGUsIEFuZEZsb2F0LCBDb21tdXRhdGl2
ZT4obGVmdCwgcmlnaHQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0zMDAx
LDcgKzMwMDEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgLy8gICAgICAgIG1hc2sgPSAoMSA8
PCBsb3dXaWR0aCkgLSAxCiAgICAgICAgICAgICBhdXRvIHRyeUFwcGVuZEVYVFIgPSBbJl0gKFZh
bHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpIC0+IGJvb2wgewogICAgICAgICAgICAgICAgIEFpcjo6
T3Bjb2RlIG9wY29kZSA9IG9wY29kZUZvclR5cGUoRXh0cmFjdFJlZ2lzdGVyMzIsIEV4dHJhY3RS
ZWdpc3RlcjY0LCBtX3ZhbHVlLT50eXBlKCkpOwotICAgICAgICAgICAgICAgIGlmICghaXNWYWxp
ZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFyZzo6SW1tLCBBcmc6OlRtcCkpIAor
ICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpU
bXAsIEFyZzo6SW1tLCBBcmc6OlRtcCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgICAgICAgICBpZiAobGVmdC0+b3Bjb2RlKCkgIT0gU2hsIHx8IGxlZnQtPmNo
aWxkKDApLT5vcGNvZGUoKSAhPSBCaXRBbmQgfHwgcmlnaHQtPm9wY29kZSgpICE9IFpTaHIpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMxNTUsNiArMzE1NSwxOCBAQCBw
cml2YXRlOgogICAgICAgICAgICAgaWYgKHRyeUFwcGVuZE9STihsZWZ0LCByaWdodCkgfHwgdHJ5
QXBwZW5kT1JOKHJpZ2h0LCBsZWZ0KSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKKyAgICAg
ICAgICAgIC8vIG9yci13aXRoLXNoaWZ0IFBhdHRlcm46IGxlZnQgfCAocmlnaHQgU2hpZnRUeXBl
IGFtb3VudCkKKyAgICAgICAgICAgIGF1dG8gdHJ5QXBwZW5kT3JXaXRoU2hpZnQgPSBbJl0gKFZh
bHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIEFpcjo6
T3Bjb2RlIG9wY29kZSA9IG9wY29kZUJhc2VkT25TaGlmdEtpbmQocmlnaHQtPm9wY29kZSgpLCAK
KyAgICAgICAgICAgICAgICAgICAgT3JMZWZ0U2hpZnQzMiwgT3JMZWZ0U2hpZnQ2NCwgCisgICAg
ICAgICAgICAgICAgICAgIE9yUmlnaHRTaGlmdDMyLCBPclJpZ2h0U2hpZnQ2NCwgCisgICAgICAg
ICAgICAgICAgICAgIE9yVW5zaWduZWRSaWdodFNoaWZ0MzIsIE9yVW5zaWduZWRSaWdodFNoaWZ0
NjQpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnlBcHBlbmRCaXRPcFdpdGhTaGlmdChsZWZ0
LCByaWdodCwgb3Bjb2RlKTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGlmICh0cnlB
cHBlbmRPcldpdGhTaGlmdChsZWZ0LCByaWdodCkgfHwgdHJ5QXBwZW5kT3JXaXRoU2hpZnQocmln
aHQsIGxlZnQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICAgICAgYXBwZW5k
QmluT3A8T3IzMiwgT3I2NCwgT3JEb3VibGUsIE9yRmxvYXQsIENvbW11dGF0aXZlPihsZWZ0LCBy
aWdodCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTMyMjUsNiArMzIzNywx
OCBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKHRyeUFwcGVuZEVPTihsZWZ0LCByaWdodCkg
fHwgdHJ5QXBwZW5kRU9OKHJpZ2h0LCBsZWZ0KSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAK
KyAgICAgICAgICAgIC8vIGVvci13aXRoLXNoaWZ0IFBhdHRlcm46IGxlZnQgXiAocmlnaHQgU2hp
ZnRUeXBlIGFtb3VudCkKKyAgICAgICAgICAgIGF1dG8gdHJ5QXBwZW5kWG9yV2l0aFNoaWZ0ID0g
WyZdIChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KSAtPiBib29sIHsKKyAgICAgICAgICAgICAg
ICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBvcGNvZGVCYXNlZE9uU2hpZnRLaW5kKHJpZ2h0LT5vcGNv
ZGUoKSwgCisgICAgICAgICAgICAgICAgICAgIFhvckxlZnRTaGlmdDMyLCBYb3JMZWZ0U2hpZnQ2
NCwgCisgICAgICAgICAgICAgICAgICAgIFhvclJpZ2h0U2hpZnQzMiwgWG9yUmlnaHRTaGlmdDY0
LCAKKyAgICAgICAgICAgICAgICAgICAgWG9yVW5zaWduZWRSaWdodFNoaWZ0MzIsIFhvclVuc2ln
bmVkUmlnaHRTaGlmdDY0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ5QXBwZW5kQml0T3BX
aXRoU2hpZnQobGVmdCwgcmlnaHQsIG9wY29kZSk7CisgICAgICAgICAgICB9OworCisgICAgICAg
ICAgICBpZiAodHJ5QXBwZW5kWG9yV2l0aFNoaWZ0KGxlZnQsIHJpZ2h0KSB8fCB0cnlBcHBlbmRY
b3JXaXRoU2hpZnQocmlnaHQsIGxlZnQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKwogICAg
ICAgICAgICAgYXBwZW5kQmluT3A8WG9yMzIsIFhvcjY0LCBYb3JEb3VibGUsIFhvckZsb2F0LCBD
b21tdXRhdGl2ZT4obGVmdCwgcmlnaHQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNv
ZGVzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwppbmRl
eCA0OWZlZDFhYWExOWFmNmRkY2Q5MmMzMzlmNzBiNTc2ZDBkMzk1ZGRlLi5mODU0NTc1Mzc0M2Fm
MjVjMmI1ODdlZWJmZGRhNDI1Nzc5ZmRiZWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKQEAgLTI4NCw2ICsyODQsOSBAQCBhcm02NDogTXVs
dGlwbHlOZWdaZXJvRXh0ZW5kMzIgVTpHOjMyLCBVOkc6MzIsIEQ6Rzo2NAogYXJtNjQ6IE11bHRp
cGx5U2lnbkV4dGVuZDMyIFU6RzozMiwgVTpHOjMyLCBEOkc6NjQKICAgICBUbXAsIFRtcCwgVG1w
CiAKK2FybTY0OiBNdWx0aXBseVplcm9FeHRlbmQzMiBVOkc6MzIsIFU6RzozMiwgRDpHOjY0Cisg
ICAgVG1wLCBUbXAsIFRtcAorCiBhcm02NDogRGl2MzIgVTpHOjMyLCBVOkc6MzIsIFpEOkc6MzIK
ICAgICBUbXAsIFRtcCwgVG1wCiAKQEAgLTk1NSw2ICs5NTgsNjAgQEAgYXJtNjQ6IFN1YlJpZ2h0
U2hpZnQ2NCBVOkc6NjQsIFU6Rzo2NCwgVTpHOjY0LCBEOkc6NjQKIGFybTY0OiBTdWJVbnNpZ25l
ZFJpZ2h0U2hpZnQ2NCBVOkc6NjQsIFU6Rzo2NCwgVTpHOjY0LCBEOkc6NjQKICAgICBUbXAsIFRt
cCwgSW1tLCBUbXAKIAorYXJtNjQ6IEFuZExlZnRTaGlmdDMyIFU6RzozMiwgVTpHOjMyLCBVOkc6
MzIsIFpEOkc6MzIKKyAgICBUbXAsIFRtcCwgSW1tLCBUbXAKKworYXJtNjQ6IEFuZFJpZ2h0U2hp
ZnQzMiBVOkc6MzIsIFU6RzozMiwgVTpHOjMyLCBaRDpHOjMyCisgICAgVG1wLCBUbXAsIEltbSwg
VG1wCisKK2FybTY0OiBBbmRVbnNpZ25lZFJpZ2h0U2hpZnQzMiBVOkc6MzIsIFU6RzozMiwgVTpH
OjMyLCBaRDpHOjMyCisgICAgVG1wLCBUbXAsIEltbSwgVG1wCisKK2FybTY0OiBBbmRMZWZ0U2hp
ZnQ2NCBVOkc6NjQsIFU6Rzo2NCwgVTpHOjY0LCBEOkc6NjQKKyAgICBUbXAsIFRtcCwgSW1tLCBU
bXAKKworYXJtNjQ6IEFuZFJpZ2h0U2hpZnQ2NCBVOkc6NjQsIFU6Rzo2NCwgVTpHOjY0LCBEOkc6
NjQKKyAgICBUbXAsIFRtcCwgSW1tLCBUbXAKKworYXJtNjQ6IEFuZFVuc2lnbmVkUmlnaHRTaGlm
dDY0IFU6Rzo2NCwgVTpHOjY0LCBVOkc6NjQsIEQ6Rzo2NAorICAgIFRtcCwgVG1wLCBJbW0sIFRt
cAorCithcm02NDogWG9yTGVmdFNoaWZ0MzIgVTpHOjMyLCBVOkc6MzIsIFU6RzozMiwgWkQ6Rzoz
MgorICAgIFRtcCwgVG1wLCBJbW0sIFRtcAorCithcm02NDogWG9yUmlnaHRTaGlmdDMyIFU6Rzoz
MiwgVTpHOjMyLCBVOkc6MzIsIFpEOkc6MzIKKyAgICBUbXAsIFRtcCwgSW1tLCBUbXAKKworYXJt
NjQ6IFhvclVuc2lnbmVkUmlnaHRTaGlmdDMyIFU6RzozMiwgVTpHOjMyLCBVOkc6MzIsIFpEOkc6
MzIKKyAgICBUbXAsIFRtcCwgSW1tLCBUbXAKKworYXJtNjQ6IFhvckxlZnRTaGlmdDY0IFU6Rzo2
NCwgVTpHOjY0LCBVOkc6NjQsIEQ6Rzo2NAorICAgIFRtcCwgVG1wLCBJbW0sIFRtcAorCithcm02
NDogWG9yUmlnaHRTaGlmdDY0IFU6Rzo2NCwgVTpHOjY0LCBVOkc6NjQsIEQ6Rzo2NAorICAgIFRt
cCwgVG1wLCBJbW0sIFRtcAorCithcm02NDogWG9yVW5zaWduZWRSaWdodFNoaWZ0NjQgVTpHOjY0
LCBVOkc6NjQsIFU6Rzo2NCwgRDpHOjY0CisgICAgVG1wLCBUbXAsIEltbSwgVG1wCisKK2FybTY0
OiBPckxlZnRTaGlmdDMyIFU6RzozMiwgVTpHOjMyLCBVOkc6MzIsIFpEOkc6MzIKKyAgICBUbXAs
IFRtcCwgSW1tLCBUbXAKKworYXJtNjQ6IE9yUmlnaHRTaGlmdDMyIFU6RzozMiwgVTpHOjMyLCBV
Okc6MzIsIFpEOkc6MzIKKyAgICBUbXAsIFRtcCwgSW1tLCBUbXAKKworYXJtNjQ6IE9yVW5zaWdu
ZWRSaWdodFNoaWZ0MzIgVTpHOjMyLCBVOkc6MzIsIFU6RzozMiwgWkQ6RzozMgorICAgIFRtcCwg
VG1wLCBJbW0sIFRtcAorCithcm02NDogT3JMZWZ0U2hpZnQ2NCBVOkc6NjQsIFU6Rzo2NCwgVTpH
OjY0LCBEOkc6NjQKKyAgICBUbXAsIFRtcCwgSW1tLCBUbXAKKworYXJtNjQ6IE9yUmlnaHRTaGlm
dDY0IFU6Rzo2NCwgVTpHOjY0LCBVOkc6NjQsIEQ6Rzo2NAorICAgIFRtcCwgVG1wLCBJbW0sIFRt
cAorCithcm02NDogT3JVbnNpZ25lZFJpZ2h0U2hpZnQ2NCBVOkc6NjQsIFU6Rzo2NCwgVTpHOjY0
LCBEOkc6NjQKKyAgICBUbXAsIFRtcCwgSW1tLCBUbXAKKwogIyBUaGUgZmlyc3Qgb3BlcmFuZCBp
cyByYXguCiAjIEZJWE1FOiBUaGlzIGZvcm11bGF0aW9uIG1lYW5zIHRoYXQgdGhlIGJvb2xlYW4g
cmVzdWx0IGNhbm5vdCBiZSBwdXQgaW4gZWF4LCBldmVuIHRob3VnaCBhbGwgdXNlcnMKICMgb2Yg
dGhpcyB3b3VsZCBiZSBPSyB3aXRoIHRoYXQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvdGVzdGIzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKaW5k
ZXggNzIxZWIzYWRkNjI3NDhlMmZiMDJkZGY0MjU1N2NjNTlkNWQ4ODBlYi4uOWFhNDBkMTIxZWU0
ZWNmMjZlOTRmN2U1OWZiMTRmOTM1YmVhOWNiMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL3Rlc3RiMy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMu
aApAQCAtNDcxLDYgKzQ3MSwyOCBAQCB2b2lkIHRlc3RTdWJXaXRoVW5zaWduZWRSaWdodFNoaWZ0
MzIoKTsKIHZvaWQgdGVzdFN1YldpdGhMZWZ0U2hpZnQ2NCgpOwogdm9pZCB0ZXN0U3ViV2l0aFJp
Z2h0U2hpZnQ2NCgpOwogdm9pZCB0ZXN0U3ViV2l0aFVuc2lnbmVkUmlnaHRTaGlmdDY0KCk7CisK
K3ZvaWQgdGVzdEFuZExlZnRTaGlmdDMyKCk7Cit2b2lkIHRlc3RBbmRSaWdodFNoaWZ0MzIoKTsK
K3ZvaWQgdGVzdEFuZFVuc2lnbmVkUmlnaHRTaGlmdDMyKCk7Cit2b2lkIHRlc3RBbmRMZWZ0U2hp
ZnQ2NCgpOwordm9pZCB0ZXN0QW5kUmlnaHRTaGlmdDY0KCk7Cit2b2lkIHRlc3RBbmRVbnNpZ25l
ZFJpZ2h0U2hpZnQ2NCgpOworCit2b2lkIHRlc3RYb3JMZWZ0U2hpZnQzMigpOwordm9pZCB0ZXN0
WG9yUmlnaHRTaGlmdDMyKCk7Cit2b2lkIHRlc3RYb3JVbnNpZ25lZFJpZ2h0U2hpZnQzMigpOwor
dm9pZCB0ZXN0WG9yTGVmdFNoaWZ0NjQoKTsKK3ZvaWQgdGVzdFhvclJpZ2h0U2hpZnQ2NCgpOwor
dm9pZCB0ZXN0WG9yVW5zaWduZWRSaWdodFNoaWZ0NjQoKTsKKwordm9pZCB0ZXN0T3JMZWZ0U2hp
ZnQzMigpOwordm9pZCB0ZXN0T3JSaWdodFNoaWZ0MzIoKTsKK3ZvaWQgdGVzdE9yVW5zaWduZWRS
aWdodFNoaWZ0MzIoKTsKK3ZvaWQgdGVzdE9yTGVmdFNoaWZ0NjQoKTsKK3ZvaWQgdGVzdE9yUmln
aHRTaGlmdDY0KCk7Cit2b2lkIHRlc3RPclVuc2lnbmVkUmlnaHRTaGlmdDY0KCk7CisKIHZvaWQg
dGVzdFNlbGVjdENvbXBhcmVEb3VibGUoKTsKIHZvaWQgdGVzdFNlbGVjdENvbXBhcmVGbG9hdChm
bG9hdCwgZmxvYXQpOwogdm9pZCB0ZXN0U2VsZWN0Q29tcGFyZUZsb2F0VG9Eb3VibGUoZmxvYXQs
IGZsb2F0KTsKQEAgLTkxNyw3ICs5MzksOCBAQCB2b2lkIHRlc3RNdWxOZWdBcmdBcmcoaW50LCBp
bnQpOwogdm9pZCB0ZXN0TXVsQXJnSW1tKGludDY0X3QsIGludDY0X3QpOwogdm9pZCB0ZXN0TXVs
SW1tQXJnKGludCwgaW50KTsKIHZvaWQgdGVzdE11bEFyZ3MzMihpbnQsIGludCk7Ci12b2lkIHRl
c3RNdWxBcmdzMzJTaWduRXh0ZW5kKGludCwgaW50KTsKK3ZvaWQgdGVzdE11bEFyZ3MzMlNpZ25F
eHRlbmQoKTsKK3ZvaWQgdGVzdE11bEFyZ3MzMlplcm9FeHRlbmQoKTsKIHZvaWQgdGVzdE11bElt
bTMyU2lnbkV4dGVuZChjb25zdCBpbnQsIGludCk7CiB2b2lkIHRlc3RNdWxMb2FkVHdpY2UoKTsK
IHZvaWQgdGVzdE11bEFkZEFyZ3NMZWZ0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvdGVzdGIzXzIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18y
LmNwcAppbmRleCAyNGIzZjgzODcyYTBmY2JlNjkzNGYzYmEwYzkxMDdhY2E3MTQwMTU0Li41MTM2
ODE3ZjJjYjQ5YTFmMjVhNmIyNTU2YzUwOTMwY2NjODVkZDhjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy90ZXN0YjNfMi5jcHAKQEAgLTEyMjgsMTAgKzEyMjgsMTAgQEAgdm9pZCB0ZXN0TXVsQXJn
czMyKGludCBhLCBpbnQgYikKICAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYywgYSwg
YikgPT0gYSAqIGIpOwogfQogCi12b2lkIHRlc3RNdWxBcmdzMzJTaWduRXh0ZW5kKGludCBhLCBp
bnQgYikKK3ZvaWQgdGVzdE11bEFyZ3MzMlNpZ25FeHRlbmQoKQogewogICAgIFByb2NlZHVyZSBw
cm9jOwotICAgIGlmIChwcm9jLm9wdExldmVsKCkgPCAxKQorICAgIGlmIChwcm9jLm9wdExldmVs
KCkgPCAyKQogICAgICAgICByZXR1cm47CiAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRk
QmxvY2soKTsKICAgICBWYWx1ZSogYXJnMSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCkBAIC0x
MjQ2LDggKzEyNDYsNDYgQEAgdm9pZCB0ZXN0TXVsQXJnczMyU2lnbkV4dGVuZChpbnQgYSwgaW50
IGIpCiAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHByb2MsIFJldHVybiwgT3JpZ2lu
KCksIG11bCk7CiAKICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICBpZiAo
aXNBUk02NCgpKQorICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgInNtdWxsIik7
CisKKyAgICBmb3IgKGF1dG8gbk9wZXJhbmQgOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAg
Zm9yIChhdXRvIG1PcGVyYW5kIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgICAgICBpbnQz
Ml90IG4gPSBuT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgIGludDMyX3QgbSA9IG1PcGVyYW5k
LnZhbHVlOworICAgICAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGludDY0X3Q+KCpjb2RlLCBuLCBt
KSwgc3RhdGljX2Nhc3Q8aW50NjRfdD4obikgKiBzdGF0aWNfY2FzdDxpbnQ2NF90PihtKSk7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdE11bEFyZ3MzMlplcm9FeHRlbmQoKQorewor
ICAgIFByb2NlZHVyZSBwcm9jOworICAgIGlmIChwcm9jLm9wdExldmVsKCkgPCAyKQorICAgICAg
ICByZXR1cm47CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBW
YWx1ZSogYXJnMSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgIHByb2MsIFRydW5j
LCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICBWYWx1ZSogYXJnMiA9
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwK
KyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKTsKKyAgICBWYWx1ZSogbGVmdCA9IHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4ocHJvYywgWkV4dDMyLCBPcmlnaW4oKSwgYXJnMSk7CisgICAgVmFsdWUqIHJp
Z2h0ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBaRXh0MzIsIE9yaWdpbigpLCBhcmcy
KTsKKyAgICBWYWx1ZSogbXVsID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBNdWwsIE9y
aWdpbigpLCBsZWZ0LCByaWdodCk7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKHBy
b2MsIFJldHVybiwgT3JpZ2luKCksIG11bCk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJv
Yyhwcm9jKTsKKyAgICBpZiAoaXNBUk02NCgpKQorICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlv
bigqY29kZSwgInVtdWxsIik7CiAKLSAgICBDSEVDSyhpbnZva2U8bG9uZyBpbnQ+KCpjb2RlLCBh
LCBiKSA9PSAoKGxvbmcgaW50KSBhKSAqICgobG9uZyBpbnQpIGIpKTsKKyAgICBmb3IgKGF1dG8g
bk9wZXJhbmQgOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG1PcGVyYW5k
IDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgICAgICB1aW50MzJfdCBuID0gbk9wZXJhbmQu
dmFsdWU7CisgICAgICAgICAgICB1aW50MzJfdCBtID0gbU9wZXJhbmQudmFsdWU7CisgICAgICAg
ICAgICBDSEVDS19FUShpbnZva2U8dWludDY0X3Q+KCpjb2RlLCBuLCBtKSwgc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KG4pICogc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG0pKTsKKyAgICAgICAgfQorICAg
IH0KIH0KIAogdm9pZCB0ZXN0TXVsSW1tMzJTaWduRXh0ZW5kKGNvbnN0IGludCBhLCBpbnQgYikK
QEAgLTU0NjEsMTYzICs1NDk5LDkxOSBAQCB2b2lkIHRlc3RTdWJXaXRoVW5zaWduZWRSaWdodFNo
aWZ0NjQoKQogICAgIH0KIH0KIAotdm9pZCB0ZXN0Qml0QW5kWmVyb1NoaWZ0UmlnaHRBcmdJbW1N
YXNrMzIoKQordm9pZCB0ZXN0QW5kTGVmdFNoaWZ0MzIoKQogewotICAgIC8vIFR1cm4gdGhpczog
KHRtcCA+PiBpbW0pICYgbWFzayAKLSAgICAvLyBJbnRvIHRoaXM6IHRtcCA+PiBpbW0KLSAgICB1
aW50MzJfdCB0bXAgPSAweGZmZmZmZmZmOwotICAgIFZlY3Rvcjx1aW50MzJfdD4gaW1tcyA9IHsg
NCwgMjgsIDMxIH07Ci0gICAgVmVjdG9yPHVpbnQzMl90PiBtYXNrcyA9IHsgMHgwZmZmZmZmZiwg
MHhmLCAweGZmZmYgfTsKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgp
IDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIFZlY3RvcjxpbnQzMl90PiBhbW91bnRzID0geyAx
LCAxNywgMzEgfTsKIAotICAgIGF1dG8gdGVzdCA9IFsmXSAodWludDMyX3QgaW1tLCB1aW50MzJf
dCBtYXNrKSB7CisgICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0gbiAmIChtIDw8IGFtb3VudCkKKyAg
ICBhdXRvIHRlc3QgPSBbJl0gKGludDMyX3QgbiwgaW50MzJfdCBtLCBpbnQzMl90IGFtb3VudCkg
LT4gaW50MzJfdCB7CiAgICAgICAgIFByb2NlZHVyZSBwcm9jOwogICAgICAgICBCYXNpY0Jsb2Nr
KiByb290ID0gcHJvYy5hZGRCbG9jaygpOwogCi0gICAgICAgIFZhbHVlKiB0bXBWYWx1ZSA9IHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgIFZhbHVlKiBuVmFsdWUgPSByb290LT5hcHBl
bmROZXc8VmFsdWU+KAogICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLCAKICAgICAg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7Ci0gICAgICAgIFZhbHVlKiBpbW1WYWx1ZSA9IHJvb3Qt
PmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBpbW0pOwotICAgICAgICBW
YWx1ZSogbGVmdFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBaU2hyLCBPcmln
aW4oKSwgdG1wVmFsdWUsIGltbVZhbHVlKTsKLSAgICAgICAgVmFsdWUqIHJpZ2h0VmFsdWUgPSBy
b290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbWFzayk7CisgICAg
ICAgIFZhbHVlKiBtVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAg
cHJvYywgVHJ1bmMsIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1
bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSk7Cisg
ICAgICAgIFZhbHVlKiBhbW91bnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBhbW91bnQpOworCisgICAgICAgIFZhbHVlKiBzaGlmdFZhbHVlID0g
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTaGwsIE9yaWdpbigpLCBtVmFsdWUsIGFtb3Vu
dFZhbHVlKTsKICAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAotICAgICAgICAg
ICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKLSAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgbGVmdFZhbHVlLCByaWdodFZhbHVlKSk7Cisg
ICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgblZhbHVlLCBzaGlmdFZhbHVl
KSk7CiAKICAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7Ci0gICAgICAgIGlm
IChpc0FSTTY0KCkpCi0gICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgImxz
ciIpOwotICAgICAgICB1aW50MzJfdCBsaHMgPSBpbnZva2U8dWludDMyX3Q+KCpjb2RlLCB0bXAp
OwotICAgICAgICB1aW50MzJfdCByaHMgPSB0bXAgPj4gaW1tOwotICAgICAgICBDSEVDSyhsaHMg
PT0gcmhzKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkgeworICAgICAgICAgICAgc3RkOjpzdHJp
bmcgcmVnZXgoIi4qYW5kLiosLiosLiosLipsc2wgIyIpOworICAgICAgICAgICAgcmVnZXggKz0g
c3RkOjp0b19zdHJpbmcoYW1vdW50KSArICIuKiI7CisgICAgICAgICAgICBjaGVja1VzZXNJbnN0
cnVjdGlvbigqY29kZSwgcmVnZXguY19zdHIoKSwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIGludm9rZTxpbnQzMl90PigqY29kZSwgbiwgbSk7CiAgICAgfTsKIAotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgaW1tcy5zaXplKCk7ICsraSkKLSAgICAgICAgdGVzdChpbW1zLmF0
KGkpLCBtYXNrcy5hdChpKSk7CisgICAgZm9yIChhdXRvIG5PcGVyYW5kIDogaW50MzJPcGVyYW5k
cygpKSB7CisgICAgICAgIGZvciAoYXV0byBtT3BlcmFuZCA6IGludDMyT3BlcmFuZHMoKSkgewor
ICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAg
ICBpbnQzMl90IG4gPSBuT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBpbnQzMl90IG0g
PSBtT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUSh0ZXN0KG4sIG0sIGFt
b3VudCksIG4gJiAobSA8PCBhbW91bnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KIH0KIAotdm9pZCB0ZXN0Qml0QW5kWmVyb1NoaWZ0UmlnaHRBcmdJbW1NYXNrNjQoKQordm9p
ZCB0ZXN0QW5kUmlnaHRTaGlmdDMyKCkKIHsKLSAgICAvLyBUdXJuIHRoaXM6ICh0bXAgPj4gaW1t
KSAmIG1hc2sgCi0gICAgLy8gSW50byB0aGlzOiB0bXAgPj4gaW1tCi0gICAgdWludDY0X3QgdG1w
ID0gMHhmZmZmZmZmZmZmZmZmZmZmOwotICAgIFZlY3Rvcjx1aW50NjRfdD4gaW1tcyA9IHsgNCwg
NjAsIDYzIH07Ci0gICAgVmVjdG9yPHVpbnQ2NF90PiBtYXNrcyA9IHsgMHgwZmZmZmZmZmZmZmZm
ZmZmLCAweGYsIDB4ZmZmZiB9OworICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExl
dmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisgICAgVmVjdG9yPGludDMyX3Q+IGFtb3VudHMg
PSB7IDEsIDE3LCAzMSB9OwogCi0gICAgYXV0byB0ZXN0ID0gWyZdICh1aW50NjRfdCBpbW0sIHVp
bnQ2NF90IG1hc2spIHsKKyAgICAvLyBUZXN0IFBhdHRlcm46IGQgPSBuICYgKG0gPj4gYW1vdW50
KQorICAgIGF1dG8gdGVzdCA9IFsmXSAoaW50MzJfdCBuLCBpbnQzMl90IG0sIGludDMyX3QgYW1v
dW50KSAtPiBpbnQzMl90IHsKICAgICAgICAgUHJvY2VkdXJlIHByb2M7CiAgICAgICAgIEJhc2lj
QmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CiAKLSAgICAgICAgVmFsdWUqIHRtcFZhbHVl
ID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjApOwotICAgICAgICBWYWx1ZSogaW1tVmFsdWUgPSByb290LT5hcHBl
bmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgaW1tKTsKLSAgICAgICAgVmFsdWUq
IGxlZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgWlNociwgT3JpZ2luKCks
IHRtcFZhbHVlLCBpbW1WYWx1ZSk7Ci0gICAgICAgIFZhbHVlKiByaWdodFZhbHVlID0gcm9vdC0+
YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIG1hc2spOworICAgICAgICBW
YWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2Ms
IFRydW5jLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRS
ZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAg
ICBWYWx1ZSogbVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHBy
b2MsIFRydW5jLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1l
bnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkpOworICAg
ICAgICBWYWx1ZSogYW1vdW50VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgYW1vdW50KTsKKworICAgICAgICBWYWx1ZSogc2hpZnRWYWx1ZSA9IHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU1NociwgT3JpZ2luKCksIG1WYWx1ZSwgYW1vdW50
VmFsdWUpOwogICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCi0gICAgICAgICAg
ICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAotICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZh
bHVlPihwcm9jLCBCaXRBbmQsIE9yaWdpbigpLCBsZWZ0VmFsdWUsIHJpZ2h0VmFsdWUpKTsKKyAg
ICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRBbmQsIE9yaWdpbigpLCBuVmFsdWUsIHNoaWZ0VmFsdWUp
KTsKIAogICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKLSAgICAgICAgaWYg
KGlzQVJNNjQoKSkKLSAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAibHNy
Iik7Ci0gICAgICAgIHVpbnQ2NF90IGxocyA9IGludm9rZTx1aW50NjRfdD4oKmNvZGUsIHRtcCk7
Ci0gICAgICAgIHVpbnQ2NF90IHJocyA9IHRtcCA+PiBpbW07Ci0gICAgICAgIENIRUNLKGxocyA9
PSByaHMpOworICAgICAgICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAgICAgICBzdGQ6OnN0cmlu
ZyByZWdleCgiLiphbmQuKiwuKiwuKiwuKmFzciAjIik7CisgICAgICAgICAgICByZWdleCArPSBz
dGQ6OnRvX3N0cmluZyhhbW91bnQpICsgIi4qIjsKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3Ry
dWN0aW9uKCpjb2RlLCByZWdleC5jX3N0cigpLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gaW52b2tlPGludDMyX3Q+KCpjb2RlLCBuLCBtKTsKICAgICB9OwogCi0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBpbW1zLnNpemUoKTsgKytpKQotICAgICAgICB0ZXN0KGltbXMuYXQo
aSksIG1hc2tzLmF0KGkpKTsKKyAgICBmb3IgKGF1dG8gbk9wZXJhbmQgOiBpbnQzMk9wZXJhbmRz
KCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG1PcGVyYW5kIDogaW50MzJPcGVyYW5kcygpKSB7Cisg
ICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAgICAg
IGludDMyX3QgbiA9IG5PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIGludDMyX3QgbSA9
IG1PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIENIRUNLX0VRKHRlc3QobiwgbSwgYW1v
dW50KSwgbiAmIChtID4+IGFtb3VudCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQogfQogCi1zdGF0aWMgdm9pZCB0ZXN0Qml0QW5kQXJncyhpbnQ2NF90IGEsIGludDY0X3QgYikK
K3ZvaWQgdGVzdEFuZFVuc2lnbmVkUmlnaHRTaGlmdDMyKCkKIHsKLSAgICBQcm9jZWR1cmUgcHJv
YzsKLSAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOwotICAgIHJvb3QtPmFw
cGVuZE5ld0NvbnRyb2xWYWx1ZSgKLSAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKLSAg
ICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKLSAgICAgICAgICAgIHByb2MsIEJpdEFuZCwg
T3JpZ2luKCksCi0gICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCksCi0gICAgICAgICAgICByb290
LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFy
Z3VtZW50R1BSMSkpKTsKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgp
IDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIFZlY3Rvcjx1aW50MzJfdD4gYW1vdW50cyA9IHsg
MSwgMTcsIDMxIH07CiAKLSAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludDY0X3Q+KHByb2MsIGEs
IGIpID09IChhICYgYikpOwotfQorICAgIC8vIFRlc3QgUGF0dGVybjogZCA9IG4gJiAobSA+PiBh
bW91bnQpCisgICAgYXV0byB0ZXN0ID0gWyZdICh1aW50MzJfdCBuLCB1aW50MzJfdCBtLCB1aW50
MzJfdCBhbW91bnQpIC0+IHVpbnQzMl90IHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAg
ICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CiAKLXN0YXRpYyB2b2lkIHRl
c3RCaXRBbmRTYW1lQXJnKGludDY0X3QgYSkKLXsKLSAgICBQcm9jZWR1cmUgcHJvYzsKLSAgICBC
YXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOwotICAgIFZhbHVlKiBhcmd1bWVudCA9
IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIwKTsKLSAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCi0gICAg
ICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCi0gICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4oCi0gICAgICAgICAgICBwcm9jLCBCaXRBbmQsIE9yaWdpbigpLAotICAgICAgICAgICAgYXJn
dW1lbnQsCi0gICAgICAgICAgICBhcmd1bWVudCkpOworICAgICAgICBWYWx1ZSogblZhbHVlID0g
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4o
KSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICBWYWx1ZSogbVZhbHVl
ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmln
aW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkpOworICAgICAgICBWYWx1ZSogYW1v
dW50VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
YW1vdW50KTsKIAotICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50NjRfdD4ocHJvYywgYSkgPT0g
YSk7Ci19CisgICAgICAgIFZhbHVlKiBzaGlmdFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBaU2hyLCBPcmlnaW4oKSwgbVZhbHVlLCBhbW91bnRWYWx1ZSk7CisgICAgICAgIHJv
b3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3Jp
Z2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRBbmQs
IE9yaWdpbigpLCBuVmFsdWUsIHNoaWZ0VmFsdWUpKTsKIAotc3RhdGljIHZvaWQgdGVzdEJpdEFu
ZE5vdE5vdChpbnQ2NF90IGEsIGludDY0X3QgYikKLXsKLSAgICBQcm9jZWR1cmUgcHJvYzsKLSAg
ICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOwotICAgIFZhbHVlKiBhcmdBID0g
cm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApOwotICAgIFZhbHVlKiBhcmdCID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3Vt
ZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwotICAg
IFZhbHVlKiBub3RBID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9yaWdp
bigpLCBhcmdBLCByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
LTEpKTsKLSAgICBWYWx1ZSogbm90QiA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0
WG9yLCBPcmlnaW4oKSwgYXJnQiwgcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIC0xKSk7Ci0gICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAotICAgICAg
ICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAotICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+
KAotICAgICAgICAgICAgcHJvYywgQml0QW5kLCBPcmlnaW4oKSwKLSAgICAgICAgICAgIG5vdEEs
Ci0gICAgICAgICAgICBub3RCKSk7CisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHBy
b2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyBy
ZWdleCgiLiphbmQuKiwuKiwuKiwuKmxzciAjIik7CisgICAgICAgICAgICByZWdleCArPSBzdGQ6
OnRvX3N0cmluZyhhbW91bnQpICsgIi4qIjsKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0
aW9uKCpjb2RlLCByZWdleC5jX3N0cigpLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gaW52b2tlPHVpbnQzMl90PigqY29kZSwgbiwgbSk7CisgICAgfTsKIAotICAgIENIRUNLX0VR
KGNvbXBpbGVBbmRSdW48aW50NjRfdD4ocHJvYywgYSwgYiksICh+YSAmIH5iKSk7CisgICAgZm9y
IChhdXRvIG5PcGVyYW5kIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBt
T3BlcmFuZCA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3Vu
dCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBuID0gbk9wZXJhbmQudmFs
dWU7CisgICAgICAgICAgICAgICAgdWludDMyX3QgbSA9IG1PcGVyYW5kLnZhbHVlOworICAgICAg
ICAgICAgICAgIENIRUNLX0VRKHRlc3QobiwgbSwgYW1vdW50KSwgbiAmIChtID4+IGFtb3VudCkp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQogfQogCi1zdGF0aWMgdm9pZCB0ZXN0
Qml0QW5kTm90Tm90MzIoaW50MzJfdCBhLCBpbnQzMl90IGIpCit2b2lkIHRlc3RBbmRMZWZ0U2hp
ZnQ2NCgpCiB7Ci0gICAgUHJvY2VkdXJlIHByb2M7Ci0gICAgQmFzaWNCbG9jayogcm9vdCA9IHBy
b2MuYWRkQmxvY2soKTsKLSAgICBWYWx1ZSogYXJnQSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgVHJ1bmMsIE9yaWdpbigpLCByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOwotICAgIFZhbHVlKiBhcmdC
ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBUcnVuYywgT3JpZ2luKCksIHJvb3QtPmFw
cGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIxKSk7Ci0gICAgVmFsdWUqIG5vdEEgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2Ms
IEJpdFhvciwgT3JpZ2luKCksIGFyZ0EsIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCAtMSkpOwotICAgIFZhbHVlKiBub3RCID0gcm9vdC0+YXBwZW5kTmV3PFZh
bHVlPihwcm9jLCBCaXRYb3IsIE9yaWdpbigpLCBhcmdCLCByb290LT5hcHBlbmROZXc8Q29uc3Qz
MlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgLTEpKTsKLSAgICByb290LT5hcHBlbmROZXdDb250cm9s
VmFsdWUoCi0gICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCi0gICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4oCi0gICAgICAgICAgICBwcm9jLCBCaXRBbmQsIE9yaWdpbigpLAotICAg
ICAgICAgICAgbm90QSwKLSAgICAgICAgICAgIG5vdEIpKTsKKyAgICBpZiAoSlNDOjpPcHRpb25z
OjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIFZlY3Rvcjxp
bnQzMl90PiBhbW91bnRzID0geyAxLCAzNCwgNjMgfTsKIAotICAgIENIRUNLX0VRKGNvbXBpbGVB
bmRSdW48aW50MzJfdD4ocHJvYywgYSwgYiksICh+YSAmIH5iKSk7Ci19CisgICAgLy8gVGVzdCBQ
YXR0ZXJuOiBkID0gbiAmIChtIDw8IGFtb3VudCkKKyAgICBhdXRvIHRlc3QgPSBbJl0gKGludDY0
X3QgbiwgaW50NjRfdCBtLCBpbnQzMl90IGFtb3VudCkgLT4gaW50NjRfdCB7CisgICAgICAgIFBy
b2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygp
OwogCi1zdGF0aWMgdm9pZCB0ZXN0Qml0QW5kTm90SW1tKGludDY0X3QgYSwgaW50NjRfdCBiKQot
ewotICAgIFByb2NlZHVyZSBwcm9jOwotICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJs
b2NrKCk7Ci0gICAgVmFsdWUqIGFyZ0EgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgVmFsdWUqIG5v
dEEgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIGFyZ0Es
IHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCAtMSkpOwotICAg
IFZhbHVlKiBjc3RCID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIGIpOwotICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKLSAgICAgICAgcHJvYywg
UmV0dXJuLCBPcmlnaW4oKSwKLSAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKLSAgICAg
ICAgICAgIHByb2MsIEJpdEFuZCwgT3JpZ2luKCksCi0gICAgICAgICAgICBub3RBLAotICAgICAg
ICAgICAgY3N0QikpOworICAgICAgICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFy
Z3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwor
ICAgICAgICBWYWx1ZSogbVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBWYWx1ZSog
YW1vdW50VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgYW1vdW50KTsKIAotICAgIENIRUNLX0VRKGNvbXBpbGVBbmRSdW48aW50NjRfdD4ocHJvYywg
YSksICh+YSAmIGIpKTsKKyAgICAgICAgVmFsdWUqIHNoaWZ0VmFsdWUgPSByb290LT5hcHBlbmRO
ZXc8VmFsdWU+KHByb2MsIFNobCwgT3JpZ2luKCksIG1WYWx1ZSwgYW1vdW50VmFsdWUpOworICAg
ICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgICAgICBwcm9jLCBSZXR1
cm4sIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
Qml0QW5kLCBPcmlnaW4oKSwgblZhbHVlLCBzaGlmdFZhbHVlKSk7CisKKyAgICAgICAgYXV0byBj
b2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkpIHsKKyAgICAg
ICAgICAgIHN0ZDo6c3RyaW5nIHJlZ2V4KCIuKmFuZC4qLC4qLC4qLC4qbHNsICMiKTsKKyAgICAg
ICAgICAgIHJlZ2V4ICs9IHN0ZDo6dG9fc3RyaW5nKGFtb3VudCkgKyAiLioiOworICAgICAgICAg
ICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsIHJlZ2V4LmNfc3RyKCksIHRydWUpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBpbnZva2U8aW50NjRfdD4oKmNvZGUsIG4sIG0pOworICAg
IH07CisKKyAgICBmb3IgKGF1dG8gbk9wZXJhbmQgOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAg
ICAgZm9yIChhdXRvIG1PcGVyYW5kIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAgICAgICAgICBm
b3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAgICAgIGludDY0X3QgbiA9
IG5PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIGludDY0X3QgbSA9IG1PcGVyYW5kLnZh
bHVlOworICAgICAgICAgICAgICAgIENIRUNLX0VRKHRlc3QobiwgbSwgYW1vdW50KSwgbiAmICht
IDw8IGFtb3VudCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQogfQogCi1zdGF0
aWMgdm9pZCB0ZXN0Qml0QW5kTm90SW1tMzIoaW50MzJfdCBhLCBpbnQzMl90IGIpCit2b2lkIHRl
c3RBbmRSaWdodFNoaWZ0NjQoKQogewotICAgIFByb2NlZHVyZSBwcm9jOwotICAgIEJhc2ljQmxv
Y2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7Ci0gICAgVmFsdWUqIGFyZ0EgPSByb290LT5hcHBl
bmROZXc8VmFsdWU+KHByb2MsIFRydW5jLCBPcmlnaW4oKSwgcm9vdC0+YXBwZW5kTmV3PEFyZ3Vt
ZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKLSAg
ICBWYWx1ZSogbm90QSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0WG9yLCBPcmln
aW4oKSwgYXJnQSwgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IC0xKSk7Ci0gICAgVmFsdWUqIGNzdEIgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgYik7Ci0gICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAotICAg
ICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRlZmF1
bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisgICAgVmVjdG9yPGludDMyX3Q+
IGFtb3VudHMgPSB7IDEsIDM0LCA2MyB9OworCisgICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0gbiAm
IChtID4+IGFtb3VudCkKKyAgICBhdXRvIHRlc3QgPSBbJl0gKGludDY0X3QgbiwgaW50NjRfdCBt
LCBpbnQzMl90IGFtb3VudCkgLT4gaW50NjRfdCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOwor
ICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIFZh
bHVlKiBuVmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIFZhbHVlKiBtVmFsdWUgPSBy
b290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86
OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIFZhbHVlKiBhbW91bnRWYWx1ZSA9IHJvb3QtPmFwcGVu
ZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBhbW91bnQpOworCisgICAgICAgIFZh
bHVlKiBzaGlmdFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTU2hyLCBPcmln
aW4oKSwgbVZhbHVlLCBhbW91bnRWYWx1ZSk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRy
b2xWYWx1ZSgKKyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksIAorICAgICAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRBbmQsIE9yaWdpbigpLCBuVmFsdWUs
IHNoaWZ0VmFsdWUpKTsKKworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsK
KyAgICAgICAgaWYgKGlzQVJNNjQoKSkgeworICAgICAgICAgICAgc3RkOjpzdHJpbmcgcmVnZXgo
Ii4qYW5kLiosLiosLiosLiphc3IgIyIpOworICAgICAgICAgICAgcmVnZXggKz0gc3RkOjp0b19z
dHJpbmcoYW1vdW50KSArICIuKiI7CisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigq
Y29kZSwgcmVnZXguY19zdHIoKSwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGlu
dm9rZTxpbnQ2NF90PigqY29kZSwgbiwgbSk7CisgICAgfTsKKworICAgIGZvciAoYXV0byBuT3Bl
cmFuZCA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbU9wZXJhbmQgOiBp
bnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRz
KSB7CisgICAgICAgICAgICAgICAgaW50NjRfdCBuID0gbk9wZXJhbmQudmFsdWU7CisgICAgICAg
ICAgICAgICAgaW50NjRfdCBtID0gbU9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgQ0hF
Q0tfRVEodGVzdChuLCBtLCBhbW91bnQpLCBuICYgKG0gPj4gYW1vdW50KSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdEFuZFVuc2lnbmVkUmlnaHRTaGlm
dDY0KCkKK3sKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikK
KyAgICAgICAgcmV0dXJuOworICAgIFZlY3Rvcjx1aW50MzJfdD4gYW1vdW50cyA9IHsgMSwgMTcs
IDMxIH07CisKKyAgICAvLyBUZXN0IFBhdHRlcm46IGQgPSBuICYgKG0gPj4gYW1vdW50KQorICAg
IGF1dG8gdGVzdCA9IFsmXSAodWludDY0X3QgbiwgdWludDY0X3QgbSwgdWludDMyX3QgYW1vdW50
KSAtPiB1aW50NjRfdCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Js
b2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBuVmFsdWUgPSBy
b290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86
OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIFZhbHVlKiBtVmFsdWUgPSByb290LT5hcHBlbmROZXc8
QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7
CisgICAgICAgIFZhbHVlKiBhbW91bnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBhbW91bnQpOworCisgICAgICAgIFZhbHVlKiBzaGlmdFZhbHVl
ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBaU2hyLCBPcmlnaW4oKSwgbVZhbHVlLCBh
bW91bnRWYWx1ZSk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAg
ICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPihwcm9jLCBCaXRBbmQsIE9yaWdpbigpLCBuVmFsdWUsIHNoaWZ0VmFsdWUpKTsK
KworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlz
QVJNNjQoKSkgeworICAgICAgICAgICAgc3RkOjpzdHJpbmcgcmVnZXgoIi4qYW5kLiosLiosLios
Lipsc3IgIyIpOworICAgICAgICAgICAgcmVnZXggKz0gc3RkOjp0b19zdHJpbmcoYW1vdW50KSAr
ICIuKiI7CisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgcmVnZXguY19z
dHIoKSwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGludm9rZTx1aW50NjRfdD4o
KmNvZGUsIG4sIG0pOworICAgIH07CisKKyAgICBmb3IgKGF1dG8gbk9wZXJhbmQgOiBpbnQ2NE9w
ZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG1PcGVyYW5kIDogaW50NjRPcGVyYW5kcygp
KSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAg
ICAgICAgIHVpbnQ2NF90IG4gPSBuT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICB1aW50
NjRfdCBtID0gbU9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEodGVzdChu
LCBtLCBhbW91bnQpLCBuICYgKG0gPj4gYW1vdW50KSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdFhvckxlZnRTaGlmdDMyKCkKK3sKKyAgICBpZiAoSlND
OjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAg
IFZlY3RvcjxpbnQzMl90PiBhbW91bnRzID0geyAxLCAxNywgMzEgfTsKKworICAgIC8vIFRlc3Qg
UGF0dGVybjogZCA9IG4gXiAobSA8PCBhbW91bnQpCisgICAgYXV0byB0ZXN0ID0gWyZdIChpbnQz
Ml90IG4sIGludDMyX3QgbSwgaW50MzJfdCBhbW91bnQpIC0+IGludDMyX3QgeworICAgICAgICBQ
cm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2so
KTsKKworICAgICAgICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAg
ICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBl
bmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50
R1BSMCkpOworICAgICAgICBWYWx1ZSogbVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigK
KyAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5h
cHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSkpOworICAgICAgICBWYWx1ZSogYW1vdW50VmFsdWUgPSByb290LT5hcHBlbmROZXc8
Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYW1vdW50KTsKKworICAgICAgICBWYWx1ZSog
c2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU2hsLCBPcmlnaW4oKSwg
bVZhbHVlLCBhbW91bnRWYWx1ZSk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1
ZSgKKyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9yaWdpbigpLCBuVmFsdWUsIHNoaWZ0
VmFsdWUpKTsKKworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAg
ICAgaWYgKGlzQVJNNjQoKSkgeworICAgICAgICAgICAgc3RkOjpzdHJpbmcgcmVnZXgoIi4qZW9y
LiosLiosLiosLipsc2wgIyIpOworICAgICAgICAgICAgcmVnZXggKz0gc3RkOjp0b19zdHJpbmco
YW1vdW50KSArICIuKiI7CisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwg
cmVnZXguY19zdHIoKSwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGludm9rZTxp
bnQzMl90PigqY29kZSwgbiwgbSk7CisgICAgfTsKKworICAgIGZvciAoYXV0byBuT3BlcmFuZCA6
IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbU9wZXJhbmQgOiBpbnQzMk9w
ZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7Cisg
ICAgICAgICAgICAgICAgaW50MzJfdCBuID0gbk9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAg
ICAgaW50MzJfdCBtID0gbU9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEo
dGVzdChuLCBtLCBhbW91bnQpLCBuIF4gKG0gPDwgYW1vdW50KSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdFhvclJpZ2h0U2hpZnQzMigpCit7CisgICAg
aWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVy
bjsKKyAgICBWZWN0b3I8aW50MzJfdD4gYW1vdW50cyA9IHsgMSwgMTcsIDMxIH07CisKKyAgICAv
LyBUZXN0IFBhdHRlcm46IGQgPSBuIF4gKG0gPj4gYW1vdW50KQorICAgIGF1dG8gdGVzdCA9IFsm
XSAoaW50MzJfdCBuLCBpbnQzMl90IG0sIGludDMyX3QgYW1vdW50KSAtPiBpbnQzMl90IHsKKyAg
ICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFk
ZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjApKTsKKyAgICAgICAgVmFsdWUqIG1WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAorICAgICAgICAgICAg
cm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjEpKTsKKyAgICAgICAgVmFsdWUqIGFtb3VudFZhbHVlID0gcm9vdC0+YXBw
ZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGFtb3VudCk7CisKKyAgICAgICAg
VmFsdWUqIHNoaWZ0VmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNTaHIsIE9y
aWdpbigpLCBtVmFsdWUsIGFtb3VudFZhbHVlKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29u
dHJvbFZhbHVlKAorICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgCisgICAgICAg
ICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIG5WYWx1
ZSwgc2hpZnRWYWx1ZSkpOworCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2Mp
OworICAgICAgICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyByZWdl
eCgiLiplb3IuKiwuKiwuKiwuKmFzciAjIik7CisgICAgICAgICAgICByZWdleCArPSBzdGQ6OnRv
X3N0cmluZyhhbW91bnQpICsgIi4qIjsKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9u
KCpjb2RlLCByZWdleC5jX3N0cigpLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
aW52b2tlPGludDMyX3Q+KCpjb2RlLCBuLCBtKTsKKyAgICB9OworCisgICAgZm9yIChhdXRvIG5P
cGVyYW5kIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtT3BlcmFuZCA6
IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3Vu
dHMpIHsKKyAgICAgICAgICAgICAgICBpbnQzMl90IG4gPSBuT3BlcmFuZC52YWx1ZTsKKyAgICAg
ICAgICAgICAgICBpbnQzMl90IG0gPSBtT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBD
SEVDS19FUSh0ZXN0KG4sIG0sIGFtb3VudCksIG4gXiAobSA+PiBhbW91bnQpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0WG9yVW5zaWduZWRSaWdodFNo
aWZ0MzIoKQoreworICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAy
KQorICAgICAgICByZXR1cm47CisgICAgVmVjdG9yPHVpbnQzMl90PiBhbW91bnRzID0geyAxLCAx
NywgMzEgfTsKKworICAgIC8vIFRlc3QgUGF0dGVybjogZCA9IG4gXiAobSA+PiBhbW91bnQpCisg
ICAgYXV0byB0ZXN0ID0gWyZdICh1aW50MzJfdCBuLCB1aW50MzJfdCBtLCB1aW50MzJfdCBhbW91
bnQpIC0+IHVpbnQzMl90IHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2lj
QmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2lu
KCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgVmFsdWUqIG1WYWx1
ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3Jp
Z2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKTsKKyAgICAgICAgVmFsdWUqIGFt
b3VudFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IGFtb3VudCk7CisKKyAgICAgICAgVmFsdWUqIHNoaWZ0VmFsdWUgPSByb290LT5hcHBlbmROZXc8
VmFsdWU+KHByb2MsIFpTaHIsIE9yaWdpbigpLCBtVmFsdWUsIGFtb3VudFZhbHVlKTsKKyAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICAgICAgcHJvYywgUmV0dXJu
LCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJp
dFhvciwgT3JpZ2luKCksIG5WYWx1ZSwgc2hpZnRWYWx1ZSkpOworCisgICAgICAgIGF1dG8gY29k
ZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAg
ICAgICBzdGQ6OnN0cmluZyByZWdleCgiLiplb3IuKiwuKiwuKiwuKmxzciAjIik7CisgICAgICAg
ICAgICByZWdleCArPSBzdGQ6OnRvX3N0cmluZyhhbW91bnQpICsgIi4qIjsKKyAgICAgICAgICAg
IGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCByZWdleC5jX3N0cigpLCB0cnVlKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gaW52b2tlPHVpbnQzMl90PigqY29kZSwgbiwgbSk7CisgICAg
fTsKKworICAgIGZvciAoYXV0byBuT3BlcmFuZCA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAg
ICBmb3IgKGF1dG8gbU9wZXJhbmQgOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZv
ciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgdWludDMyX3QgbiA9
IG5PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIHVpbnQzMl90IG0gPSBtT3BlcmFuZC52
YWx1ZTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUSh0ZXN0KG4sIG0sIGFtb3VudCksIG4gXiAo
bSA+PiBhbW91bnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9p
ZCB0ZXN0WG9yTGVmdFNoaWZ0NjQoKQoreworICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRC
M09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisgICAgVmVjdG9yPGludDMyX3Q+IGFt
b3VudHMgPSB7IDEsIDM0LCA2MyB9OworCisgICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0gbiBeICht
IDw8IGFtb3VudCkKKyAgICBhdXRvIHRlc3QgPSBbJl0gKGludDY0X3QgbiwgaW50NjRfdCBtLCBp
bnQzMl90IGFtb3VudCkgLT4gaW50NjRfdCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAg
ICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVl
KiBuVmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIFZhbHVlKiBtVmFsdWUgPSByb290
LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFy
Z3VtZW50R1BSMSk7CisgICAgICAgIFZhbHVlKiBhbW91bnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5l
dzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBhbW91bnQpOworCisgICAgICAgIFZhbHVl
KiBzaGlmdFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTaGwsIE9yaWdpbigp
LCBtVmFsdWUsIGFtb3VudFZhbHVlKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZh
bHVlKAorICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgCisgICAgICAgICAgICBy
b290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIG5WYWx1ZSwgc2hp
ZnRWYWx1ZSkpOworCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAg
ICAgICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyByZWdleCgiLipl
b3IuKiwuKiwuKiwuKmxzbCAjIik7CisgICAgICAgICAgICByZWdleCArPSBzdGQ6OnRvX3N0cmlu
ZyhhbW91bnQpICsgIi4qIjsKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2Rl
LCByZWdleC5jX3N0cigpLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW52b2tl
PGludDY0X3Q+KCpjb2RlLCBuLCBtKTsKKyAgICB9OworCisgICAgZm9yIChhdXRvIG5PcGVyYW5k
IDogaW50NjRPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtT3BlcmFuZCA6IGludDY0
T3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsK
KyAgICAgICAgICAgICAgICBpbnQ2NF90IG4gPSBuT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAg
ICAgICBpbnQ2NF90IG0gPSBtT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBDSEVDS19F
USh0ZXN0KG4sIG0sIGFtb3VudCksIG4gXiAobSA8PCBhbW91bnQpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0WG9yUmlnaHRTaGlmdDY0KCkKK3sKKyAg
ICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0
dXJuOworICAgIFZlY3RvcjxpbnQzMl90PiBhbW91bnRzID0geyAxLCAzNCwgNjMgfTsKKworICAg
IC8vIFRlc3QgUGF0dGVybjogZCA9IG4gXiAobSA+PiBhbW91bnQpCisgICAgYXV0byB0ZXN0ID0g
WyZdIChpbnQ2NF90IG4sIGludDY0X3QgbSwgaW50MzJfdCBhbW91bnQpIC0+IGludDY0X3Qgewor
ICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2Mu
YWRkQmxvY2soKTsKKworICAgICAgICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFy
Z3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwor
ICAgICAgICBWYWx1ZSogbVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBWYWx1ZSog
YW1vdW50VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgYW1vdW50KTsKKworICAgICAgICBWYWx1ZSogc2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5l
dzxWYWx1ZT4ocHJvYywgU1NociwgT3JpZ2luKCksIG1WYWx1ZSwgYW1vdW50VmFsdWUpOworICAg
ICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgICAgICBwcm9jLCBSZXR1
cm4sIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
Qml0WG9yLCBPcmlnaW4oKSwgblZhbHVlLCBzaGlmdFZhbHVlKSk7CisKKyAgICAgICAgYXV0byBj
b2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkpIHsKKyAgICAg
ICAgICAgIHN0ZDo6c3RyaW5nIHJlZ2V4KCIuKmVvci4qLC4qLC4qLC4qYXNyICMiKTsKKyAgICAg
ICAgICAgIHJlZ2V4ICs9IHN0ZDo6dG9fc3RyaW5nKGFtb3VudCkgKyAiLioiOworICAgICAgICAg
ICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsIHJlZ2V4LmNfc3RyKCksIHRydWUpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBpbnZva2U8aW50NjRfdD4oKmNvZGUsIG4sIG0pOworICAg
IH07CisKKyAgICBmb3IgKGF1dG8gbk9wZXJhbmQgOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAg
ICAgZm9yIChhdXRvIG1PcGVyYW5kIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAgICAgICAgICBm
b3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAgICAgIGludDY0X3QgbiA9
IG5PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIGludDY0X3QgbSA9IG1PcGVyYW5kLnZh
bHVlOworICAgICAgICAgICAgICAgIENIRUNLX0VRKHRlc3QobiwgbSwgYW1vdW50KSwgbiBeICht
ID4+IGFtb3VudCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lk
IHRlc3RYb3JVbnNpZ25lZFJpZ2h0U2hpZnQ2NCgpCit7CisgICAgaWYgKEpTQzo6T3B0aW9uczo6
ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8dWlu
dDMyX3Q+IGFtb3VudHMgPSB7IDEsIDE3LCAzMSB9OworCisgICAgLy8gVGVzdCBQYXR0ZXJuOiBk
ID0gbiBeIChtID4+IGFtb3VudCkKKyAgICBhdXRvIHRlc3QgPSBbJl0gKHVpbnQ2NF90IG4sIHVp
bnQ2NF90IG0sIHVpbnQzMl90IGFtb3VudCkgLT4gdWludDY0X3QgeworICAgICAgICBQcm9jZWR1
cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKwor
ICAgICAgICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBWYWx1ZSog
bVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBWYWx1ZSogYW1vdW50VmFsdWUgPSBy
b290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYW1vdW50KTsKKwor
ICAgICAgICBWYWx1ZSogc2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
WlNociwgT3JpZ2luKCksIG1WYWx1ZSwgYW1vdW50VmFsdWUpOworICAgICAgICByb290LT5hcHBl
bmROZXdDb250cm9sVmFsdWUoCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCAK
KyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0WG9yLCBPcmlnaW4o
KSwgblZhbHVlLCBzaGlmdFZhbHVlKSk7CisKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVBy
b2MocHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkpIHsKKyAgICAgICAgICAgIHN0ZDo6c3Ry
aW5nIHJlZ2V4KCIuKmVvci4qLC4qLC4qLC4qbHNyICMiKTsKKyAgICAgICAgICAgIHJlZ2V4ICs9
IHN0ZDo6dG9fc3RyaW5nKGFtb3VudCkgKyAiLioiOworICAgICAgICAgICAgY2hlY2tVc2VzSW5z
dHJ1Y3Rpb24oKmNvZGUsIHJlZ2V4LmNfc3RyKCksIHRydWUpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBpbnZva2U8dWludDY0X3Q+KCpjb2RlLCBuLCBtKTsKKyAgICB9OworCisgICAgZm9y
IChhdXRvIG5PcGVyYW5kIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBt
T3BlcmFuZCA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3Vu
dCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBuID0gbk9wZXJhbmQudmFs
dWU7CisgICAgICAgICAgICAgICAgdWludDY0X3QgbSA9IG1PcGVyYW5kLnZhbHVlOworICAgICAg
ICAgICAgICAgIENIRUNLX0VRKHRlc3QobiwgbSwgYW1vdW50KSwgbiBeIChtID4+IGFtb3VudCkp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RPckxlZnRT
aGlmdDMyKCkKK3sKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwg
MikKKyAgICAgICAgcmV0dXJuOworICAgIFZlY3RvcjxpbnQzMl90PiBhbW91bnRzID0geyAxLCAx
NywgMzEgfTsKKworICAgIC8vIFRlc3QgUGF0dGVybjogZCA9IG4gfCAobSA8PCBhbW91bnQpCisg
ICAgYXV0byB0ZXN0ID0gWyZdIChpbnQzMl90IG4sIGludDMyX3QgbSwgaW50MzJfdCBhbW91bnQp
IC0+IGludDMyX3QgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9j
ayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgICAgICBWYWx1ZSogblZhbHVlID0gcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwg
CisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICBWYWx1ZSogbVZhbHVlID0g
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4o
KSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkpOworICAgICAgICBWYWx1ZSogYW1vdW50
VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYW1v
dW50KTsKKworICAgICAgICBWYWx1ZSogc2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgU2hsLCBPcmlnaW4oKSwgbVZhbHVlLCBhbW91bnRWYWx1ZSk7CisgICAgICAgIHJv
b3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3Jp
Z2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRPciwg
T3JpZ2luKCksIG5WYWx1ZSwgc2hpZnRWYWx1ZSkpOworCisgICAgICAgIGF1dG8gY29kZSA9IGNv
bXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAgICAgICBz
dGQ6OnN0cmluZyByZWdleCgiLipvcnIuKiwuKiwuKiwuKmxzbCAjIik7CisgICAgICAgICAgICBy
ZWdleCArPSBzdGQ6OnRvX3N0cmluZyhhbW91bnQpICsgIi4qIjsKKyAgICAgICAgICAgIGNoZWNr
VXNlc0luc3RydWN0aW9uKCpjb2RlLCByZWdleC5jX3N0cigpLCB0cnVlKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gaW52b2tlPGludDMyX3Q+KCpjb2RlLCBuLCBtKTsKKyAgICB9OworCisg
ICAgZm9yIChhdXRvIG5PcGVyYW5kIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAo
YXV0byBtT3BlcmFuZCA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRv
IGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBpbnQzMl90IG4gPSBuT3BlcmFu
ZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBpbnQzMl90IG0gPSBtT3BlcmFuZC52YWx1ZTsKKyAg
ICAgICAgICAgICAgICBDSEVDS19FUSh0ZXN0KG4sIG0sIGFtb3VudCksIG4gfCAobSA8PCBhbW91
bnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0T3JS
aWdodFNoaWZ0MzIoKQoreworICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVs
KCkgPCAyKQorICAgICAgICByZXR1cm47CisgICAgVmVjdG9yPGludDMyX3Q+IGFtb3VudHMgPSB7
IDEsIDE3LCAzMSB9OworCisgICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0gbiB8IChtID4+IGFtb3Vu
dCkKKyAgICBhdXRvIHRlc3QgPSBbJl0gKGludDMyX3QgbiwgaW50MzJfdCBtLCBpbnQzMl90IGFt
b3VudCkgLT4gaW50MzJfdCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNp
Y0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBuVmFsdWUg
PSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdp
bigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgIFZhbHVlKiBtVmFs
dWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9y
aWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSk7CisgICAgICAgIFZhbHVlKiBh
bW91bnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBhbW91bnQpOworCisgICAgICAgIFZhbHVlKiBzaGlmdFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPihwcm9jLCBTU2hyLCBPcmlnaW4oKSwgbVZhbHVlLCBhbW91bnRWYWx1ZSk7CisgICAg
ICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgICAgIHByb2MsIFJldHVy
biwgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBC
aXRPciwgT3JpZ2luKCksIG5WYWx1ZSwgc2hpZnRWYWx1ZSkpOworCisgICAgICAgIGF1dG8gY29k
ZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAg
ICAgICBzdGQ6OnN0cmluZyByZWdleCgiLipvcnIuKiwuKiwuKiwuKmFzciAjIik7CisgICAgICAg
ICAgICByZWdleCArPSBzdGQ6OnRvX3N0cmluZyhhbW91bnQpICsgIi4qIjsKKyAgICAgICAgICAg
IGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCByZWdleC5jX3N0cigpLCB0cnVlKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gaW52b2tlPGludDMyX3Q+KCpjb2RlLCBuLCBtKTsKKyAgICB9
OworCisgICAgZm9yIChhdXRvIG5PcGVyYW5kIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAg
IGZvciAoYXV0byBtT3BlcmFuZCA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9y
IChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBpbnQzMl90IG4gPSBu
T3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBpbnQzMl90IG0gPSBtT3BlcmFuZC52YWx1
ZTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUSh0ZXN0KG4sIG0sIGFtb3VudCksIG4gfCAobSA+
PiBhbW91bnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0
ZXN0T3JVbnNpZ25lZFJpZ2h0U2hpZnQzMigpCit7CisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVm
YXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8dWludDMy
X3Q+IGFtb3VudHMgPSB7IDEsIDE3LCAzMSB9OworCisgICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0g
biB8IChtID4+IGFtb3VudCkKKyAgICBhdXRvIHRlc3QgPSBbJl0gKHVpbnQzMl90IG4sIHVpbnQz
Ml90IG0sIHVpbnQzMl90IGFtb3VudCkgLT4gdWludDMyX3QgeworICAgICAgICBQcm9jZWR1cmUg
cHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAg
ICAgICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAg
IHByb2MsIFRydW5jLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJn
dW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOwor
ICAgICAgICBWYWx1ZSogbVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAg
ICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8
QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkp
OworICAgICAgICBWYWx1ZSogYW1vdW50VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgYW1vdW50KTsKKworICAgICAgICBWYWx1ZSogc2hpZnRWYWx1
ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgWlNociwgT3JpZ2luKCksIG1WYWx1ZSwg
YW1vdW50VmFsdWUpOworICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAg
ICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4ocHJvYywgQml0T3IsIE9yaWdpbigpLCBuVmFsdWUsIHNoaWZ0VmFsdWUpKTsK
KworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlz
QVJNNjQoKSkgeworICAgICAgICAgICAgc3RkOjpzdHJpbmcgcmVnZXgoIi4qb3JyLiosLiosLios
Lipsc3IgIyIpOworICAgICAgICAgICAgcmVnZXggKz0gc3RkOjp0b19zdHJpbmcoYW1vdW50KSAr
ICIuKiI7CisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgcmVnZXguY19z
dHIoKSwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGludm9rZTx1aW50MzJfdD4o
KmNvZGUsIG4sIG0pOworICAgIH07CisKKyAgICBmb3IgKGF1dG8gbk9wZXJhbmQgOiBpbnQzMk9w
ZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG1PcGVyYW5kIDogaW50MzJPcGVyYW5kcygp
KSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAg
ICAgICAgIHVpbnQzMl90IG4gPSBuT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICB1aW50
MzJfdCBtID0gbU9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEodGVzdChu
LCBtLCBhbW91bnQpLCBuIHwgKG0gPj4gYW1vdW50KSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdE9yTGVmdFNoaWZ0NjQoKQoreworICAgIGlmIChKU0M6
Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisgICAg
VmVjdG9yPGludDMyX3Q+IGFtb3VudHMgPSB7IDEsIDM0LCA2MyB9OworCisgICAgLy8gVGVzdCBQ
YXR0ZXJuOiBkID0gbiB8IChtIDw8IGFtb3VudCkKKyAgICBhdXRvIHRlc3QgPSBbJl0gKGludDY0
X3QgbiwgaW50NjRfdCBtLCBpbnQzMl90IGFtb3VudCkgLT4gaW50NjRfdCB7CisgICAgICAgIFBy
b2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygp
OworCisgICAgICAgIFZhbHVlKiBuVmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIFZh
bHVlKiBtVmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIFZhbHVlKiBhbW91bnRWYWx1
ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBhbW91bnQp
OworCisgICAgICAgIFZhbHVlKiBzaGlmdFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihw
cm9jLCBTaGwsIE9yaWdpbigpLCBtVmFsdWUsIGFtb3VudFZhbHVlKTsKKyAgICAgICAgcm9vdC0+
YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4o
KSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdE9yLCBPcmln
aW4oKSwgblZhbHVlLCBzaGlmdFZhbHVlKSk7CisKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGls
ZVByb2MocHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkpIHsKKyAgICAgICAgICAgIHN0ZDo6
c3RyaW5nIHJlZ2V4KCIuKm9yci4qLC4qLC4qLC4qbHNsICMiKTsKKyAgICAgICAgICAgIHJlZ2V4
ICs9IHN0ZDo6dG9fc3RyaW5nKGFtb3VudCkgKyAiLioiOworICAgICAgICAgICAgY2hlY2tVc2Vz
SW5zdHJ1Y3Rpb24oKmNvZGUsIHJlZ2V4LmNfc3RyKCksIHRydWUpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBpbnZva2U8aW50NjRfdD4oKmNvZGUsIG4sIG0pOworICAgIH07CisKKyAgICBm
b3IgKGF1dG8gbk9wZXJhbmQgOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRv
IG1PcGVyYW5kIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1v
dW50IDogYW1vdW50cykgeworICAgICAgICAgICAgICAgIGludDY0X3QgbiA9IG5PcGVyYW5kLnZh
bHVlOworICAgICAgICAgICAgICAgIGludDY0X3QgbSA9IG1PcGVyYW5kLnZhbHVlOworICAgICAg
ICAgICAgICAgIENIRUNLX0VRKHRlc3QobiwgbSwgYW1vdW50KSwgbiB8IChtIDw8IGFtb3VudCkp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RPclJpZ2h0
U2hpZnQ2NCgpCit7CisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8
IDIpCisgICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8aW50MzJfdD4gYW1vdW50cyA9IHsgMSwg
MzQsIDYzIH07CisKKyAgICAvLyBUZXN0IFBhdHRlcm46IGQgPSBuIHwgKG0gPj4gYW1vdW50KQor
ICAgIGF1dG8gdGVzdCA9IFsmXSAoaW50NjRfdCBuLCBpbnQ2NF90IG0sIGludDMyX3QgYW1vdW50
KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxv
Y2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJv
b3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIwKTsKKyAgICAgICAgVmFsdWUqIG1WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxB
cmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsK
KyAgICAgICAgVmFsdWUqIGFtb3VudFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIGFtb3VudCk7CisKKyAgICAgICAgVmFsdWUqIHNoaWZ0VmFsdWUg
PSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNTaHIsIE9yaWdpbigpLCBtVmFsdWUsIGFt
b3VudFZhbHVlKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAg
ICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmRO
ZXc8VmFsdWU+KHByb2MsIEJpdE9yLCBPcmlnaW4oKSwgblZhbHVlLCBzaGlmdFZhbHVlKSk7CisK
KyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgICAgIGlmIChpc0FS
TTY0KCkpIHsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHJlZ2V4KCIuKm9yci4qLC4qLC4qLC4q
YXNyICMiKTsKKyAgICAgICAgICAgIHJlZ2V4ICs9IHN0ZDo6dG9fc3RyaW5nKGFtb3VudCkgKyAi
LioiOworICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsIHJlZ2V4LmNfc3Ry
KCksIHRydWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBpbnZva2U8aW50NjRfdD4oKmNv
ZGUsIG4sIG0pOworICAgIH07CisKKyAgICBmb3IgKGF1dG8gbk9wZXJhbmQgOiBpbnQ2NE9wZXJh
bmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG1PcGVyYW5kIDogaW50NjRPcGVyYW5kcygpKSB7
CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAg
ICAgIGludDY0X3QgbiA9IG5PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIGludDY0X3Qg
bSA9IG1PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIENIRUNLX0VRKHRlc3QobiwgbSwg
YW1vdW50KSwgbiB8IChtID4+IGFtb3VudCkpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorfQorCit2b2lkIHRlc3RPclVuc2lnbmVkUmlnaHRTaGlmdDY0KCkKK3sKKyAgICBpZiAo
SlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOwor
ICAgIFZlY3Rvcjx1aW50MzJfdD4gYW1vdW50cyA9IHsgMSwgMTcsIDMxIH07CisKKyAgICAvLyBU
ZXN0IFBhdHRlcm46IGQgPSBuIHwgKG0gPj4gYW1vdW50KQorICAgIGF1dG8gdGVzdCA9IFsmXSAo
dWludDY0X3QgbiwgdWludDY0X3QgbSwgdWludDMyX3QgYW1vdW50KSAtPiB1aW50NjRfdCB7Cisg
ICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5h
ZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBuVmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJn
dW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Cisg
ICAgICAgIFZhbHVlKiBtVmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIFZhbHVlKiBh
bW91bnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBhbW91bnQpOworCisgICAgICAgIFZhbHVlKiBzaGlmdFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPihwcm9jLCBaU2hyLCBPcmlnaW4oKSwgbVZhbHVlLCBhbW91bnRWYWx1ZSk7CisgICAg
ICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgICAgIHByb2MsIFJldHVy
biwgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBC
aXRPciwgT3JpZ2luKCksIG5WYWx1ZSwgc2hpZnRWYWx1ZSkpOworCisgICAgICAgIGF1dG8gY29k
ZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAg
ICAgICBzdGQ6OnN0cmluZyByZWdleCgiLipvcnIuKiwuKiwuKiwuKmxzciAjIik7CisgICAgICAg
ICAgICByZWdleCArPSBzdGQ6OnRvX3N0cmluZyhhbW91bnQpICsgIi4qIjsKKyAgICAgICAgICAg
IGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCByZWdleC5jX3N0cigpLCB0cnVlKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gaW52b2tlPHVpbnQ2NF90PigqY29kZSwgbiwgbSk7CisgICAg
fTsKKworICAgIGZvciAoYXV0byBuT3BlcmFuZCA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAg
ICBmb3IgKGF1dG8gbU9wZXJhbmQgOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZv
ciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgdWludDY0X3QgbiA9
IG5PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IG0gPSBtT3BlcmFuZC52
YWx1ZTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUSh0ZXN0KG4sIG0sIGFtb3VudCksIG4gfCAo
bSA+PiBhbW91bnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9p
ZCB0ZXN0Qml0QW5kWmVyb1NoaWZ0UmlnaHRBcmdJbW1NYXNrMzIoKQoreworICAgIC8vIFR1cm4g
dGhpczogKHRtcCA+PiBpbW0pICYgbWFzayAKKyAgICAvLyBJbnRvIHRoaXM6IHRtcCA+PiBpbW0K
KyAgICB1aW50MzJfdCB0bXAgPSAweGZmZmZmZmZmOworICAgIFZlY3Rvcjx1aW50MzJfdD4gaW1t
cyA9IHsgNCwgMjgsIDMxIH07CisgICAgVmVjdG9yPHVpbnQzMl90PiBtYXNrcyA9IHsgMHgwZmZm
ZmZmZiwgMHhmLCAweGZmZmYgfTsKKworICAgIGF1dG8gdGVzdCA9IFsmXSAodWludDMyX3QgaW1t
LCB1aW50MzJfdCBtYXNrKSB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNp
Y0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiB0bXBWYWx1
ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3Jp
Z2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgVmFsdWUqIGlt
bVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGlt
bSk7CisgICAgICAgIFZhbHVlKiBsZWZ0VmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHBy
b2MsIFpTaHIsIE9yaWdpbigpLCB0bXBWYWx1ZSwgaW1tVmFsdWUpOworICAgICAgICBWYWx1ZSog
cmlnaHRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBtYXNrKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICAg
ICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgbGVmdFZhbHVlLCByaWdodFZhbHVlKSk7CisK
KyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgICAgIGlmIChpc0FS
TTY0KCkpCisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgImxzciIpOwor
ICAgICAgICB1aW50MzJfdCBsaHMgPSBpbnZva2U8dWludDMyX3Q+KCpjb2RlLCB0bXApOworICAg
ICAgICB1aW50MzJfdCByaHMgPSB0bXAgPj4gaW1tOworICAgICAgICBDSEVDSyhsaHMgPT0gcmhz
KTsKKyAgICB9OworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbW1zLnNpemUoKTsgKytp
KQorICAgICAgICB0ZXN0KGltbXMuYXQoaSksIG1hc2tzLmF0KGkpKTsKK30KKwordm9pZCB0ZXN0
Qml0QW5kWmVyb1NoaWZ0UmlnaHRBcmdJbW1NYXNrNjQoKQoreworICAgIC8vIFR1cm4gdGhpczog
KHRtcCA+PiBpbW0pICYgbWFzayAKKyAgICAvLyBJbnRvIHRoaXM6IHRtcCA+PiBpbW0KKyAgICB1
aW50NjRfdCB0bXAgPSAweGZmZmZmZmZmZmZmZmZmZmY7CisgICAgVmVjdG9yPHVpbnQ2NF90PiBp
bW1zID0geyA0LCA2MCwgNjMgfTsKKyAgICBWZWN0b3I8dWludDY0X3Q+IG1hc2tzID0geyAweDBm
ZmZmZmZmZmZmZmZmZmYsIDB4ZiwgMHhmZmZmIH07CisKKyAgICBhdXRvIHRlc3QgPSBbJl0gKHVp
bnQ2NF90IGltbSwgdWludDY0X3QgbWFzaykgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAg
ICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgICAgICBWYWx1
ZSogdG1wVmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIFZhbHVlKiBpbW1WYWx1ZSA9
IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBpbW0pOworICAg
ICAgICBWYWx1ZSogbGVmdFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBaU2hy
LCBPcmlnaW4oKSwgdG1wVmFsdWUsIGltbVZhbHVlKTsKKyAgICAgICAgVmFsdWUqIHJpZ2h0VmFs
dWUgPSByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbWFzayk7
CisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgICAgIHByb2Ms
IFJldHVybiwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHBy
b2MsIEJpdEFuZCwgT3JpZ2luKCksIGxlZnRWYWx1ZSwgcmlnaHRWYWx1ZSkpOworCisgICAgICAg
IGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKQor
ICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJsc3IiKTsKKyAgICAgICAg
dWludDY0X3QgbGhzID0gaW52b2tlPHVpbnQ2NF90PigqY29kZSwgdG1wKTsKKyAgICAgICAgdWlu
dDY0X3QgcmhzID0gdG1wID4+IGltbTsKKyAgICAgICAgQ0hFQ0sobGhzID09IHJocyk7CisgICAg
fTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW1tcy5zaXplKCk7ICsraSkKKyAgICAg
ICAgdGVzdChpbW1zLmF0KGkpLCBtYXNrcy5hdChpKSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RC
aXRBbmRBcmdzKGludDY0X3QgYSwgaW50NjRfdCBiKQoreworICAgIFByb2NlZHVyZSBwcm9jOwor
ICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgcm9vdC0+YXBwZW5k
TmV3Q29udHJvbFZhbHVlKAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAg
ICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgQml0QW5kLCBPcmln
aW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSwKKyAgICAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIxKSkpOworCisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ2NF90Pihwcm9jLCBhLCBi
KSA9PSAoYSAmIGIpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEJpdEFuZFNhbWVBcmcoaW50NjRf
dCBhKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9j
LmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIGFyZ3VtZW50ID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3Vt
ZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAg
IHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmln
aW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2Ms
IEJpdEFuZCwgT3JpZ2luKCksCisgICAgICAgICAgICBhcmd1bWVudCwKKyAgICAgICAgICAgIGFy
Z3VtZW50KSk7CisKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludDY0X3Q+KHByb2MsIGEpID09
IGEpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0Qml0QW5kTm90Tm90KGludDY0X3QgYSwgaW50NjRf
dCBiKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9j
LmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIGFyZ0EgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRS
ZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgVmFs
dWUqIGFyZ0IgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgVmFsdWUqIG5vdEEgPSByb290LT5hcHBl
bmROZXc8VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIGFyZ0EsIHJvb3QtPmFwcGVuZE5l
dzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCAtMSkpOworICAgIFZhbHVlKiBub3RCID0g
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9yaWdpbigpLCBhcmdCLCByb290
LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgLTEpKTsKKyAgICByb290
LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCks
CisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBCaXRB
bmQsIE9yaWdpbigpLAorICAgICAgICAgICAgbm90QSwKKyAgICAgICAgICAgIG5vdEIpKTsKKwor
ICAgIENIRUNLX0VRKGNvbXBpbGVBbmRSdW48aW50NjRfdD4ocHJvYywgYSwgYiksICh+YSAmIH5i
KSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RCaXRBbmROb3ROb3QzMihpbnQzMl90IGEsIGludDMy
X3QgYikKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJv
Yy5hZGRCbG9jaygpOworICAgIFZhbHVlKiBhcmdBID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihw
cm9jLCBUcnVuYywgT3JpZ2luKCksIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgVmFsdWUqIGFyZ0Ig
PSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFRydW5jLCBPcmlnaW4oKSwgcm9vdC0+YXBw
ZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjEpKTsKKyAgICBWYWx1ZSogbm90QSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
Qml0WG9yLCBPcmlnaW4oKSwgYXJnQSwgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIC0xKSk7CisgICAgVmFsdWUqIG5vdEIgPSByb290LT5hcHBlbmROZXc8VmFs
dWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIGFyZ0IsIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMy
VmFsdWU+KHByb2MsIE9yaWdpbigpLCAtMSkpOworICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xW
YWx1ZSgKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIEJpdEFuZCwgT3JpZ2luKCksCisgICAg
ICAgICAgICBub3RBLAorICAgICAgICAgICAgbm90QikpOworCisgICAgQ0hFQ0tfRVEoY29tcGls
ZUFuZFJ1bjxpbnQzMl90Pihwcm9jLCBhLCBiKSwgKH5hICYgfmIpKTsKK30KKworc3RhdGljIHZv
aWQgdGVzdEJpdEFuZE5vdEltbShpbnQ2NF90IGEsIGludDY0X3QgYikKK3sKKyAgICBQcm9jZWR1
cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZh
bHVlKiBhcmdBID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIFZhbHVlKiBub3RBID0gcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9yaWdpbigpLCBhcmdBLCByb290LT5hcHBlbmRO
ZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgLTEpKTsKKyAgICBWYWx1ZSogY3N0QiA9
IHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCBiKTsKKyAgICBy
b290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2lu
KCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBC
aXRBbmQsIE9yaWdpbigpLAorICAgICAgICAgICAgbm90QSwKKyAgICAgICAgICAgIGNzdEIpKTsK
KworICAgIENIRUNLX0VRKGNvbXBpbGVBbmRSdW48aW50NjRfdD4ocHJvYywgYSksICh+YSAmIGIp
KTsKK30KKworc3RhdGljIHZvaWQgdGVzdEJpdEFuZE5vdEltbTMyKGludDMyX3QgYSwgaW50MzJf
dCBiKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9j
LmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIGFyZ0EgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHBy
b2MsIFRydW5jLCBPcmlnaW4oKSwgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICBWYWx1ZSogbm90QSA9
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0WG9yLCBPcmlnaW4oKSwgYXJnQSwgcm9v
dC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIC0xKSk7CisgICAgVmFs
dWUqIGNzdEIgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
Yik7CisgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICBwcm9jLCBSZXR1
cm4sIE9yaWdpbigpLAogICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAogICAgICAgICAg
ICAgcHJvYywgQml0QW5kLCBPcmlnaW4oKSwKICAgICAgICAgICAgIG5vdEEsCkBAIC02Mzg5LDYg
KzcxODMsMjggQEAgdm9pZCBhZGRCaXRUZXN0cyhjb25zdCBjaGFyKiBmaWx0ZXIsIERlcXVlPFJl
ZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+PiYgdGFza3MpCiAgICAgUlVOKHRlc3RTdWJXaXRoTGVm
dFNoaWZ0NjQoKSk7CiAgICAgUlVOKHRlc3RTdWJXaXRoUmlnaHRTaGlmdDY0KCkpOwogICAgIFJV
Tih0ZXN0U3ViV2l0aFVuc2lnbmVkUmlnaHRTaGlmdDY0KCkpOworCisgICAgUlVOKHRlc3RBbmRM
ZWZ0U2hpZnQzMigpKTsKKyAgICBSVU4odGVzdEFuZFJpZ2h0U2hpZnQzMigpKTsKKyAgICBSVU4o
dGVzdEFuZFVuc2lnbmVkUmlnaHRTaGlmdDMyKCkpOworICAgIFJVTih0ZXN0QW5kTGVmdFNoaWZ0
NjQoKSk7CisgICAgUlVOKHRlc3RBbmRSaWdodFNoaWZ0NjQoKSk7CisgICAgUlVOKHRlc3RBbmRV
bnNpZ25lZFJpZ2h0U2hpZnQ2NCgpKTsKKworICAgIFJVTih0ZXN0WG9yTGVmdFNoaWZ0MzIoKSk7
CisgICAgUlVOKHRlc3RYb3JSaWdodFNoaWZ0MzIoKSk7CisgICAgUlVOKHRlc3RYb3JVbnNpZ25l
ZFJpZ2h0U2hpZnQzMigpKTsKKyAgICBSVU4odGVzdFhvckxlZnRTaGlmdDY0KCkpOworICAgIFJV
Tih0ZXN0WG9yUmlnaHRTaGlmdDY0KCkpOworICAgIFJVTih0ZXN0WG9yVW5zaWduZWRSaWdodFNo
aWZ0NjQoKSk7CisKKyAgICBSVU4odGVzdE9yTGVmdFNoaWZ0MzIoKSk7CisgICAgUlVOKHRlc3RP
clJpZ2h0U2hpZnQzMigpKTsKKyAgICBSVU4odGVzdE9yVW5zaWduZWRSaWdodFNoaWZ0MzIoKSk7
CisgICAgUlVOKHRlc3RPckxlZnRTaGlmdDY0KCkpOworICAgIFJVTih0ZXN0T3JSaWdodFNoaWZ0
NjQoKSk7CisgICAgUlVOKHRlc3RPclVuc2lnbmVkUmlnaHRTaGlmdDY0KCkpOworCiAgICAgUlVO
KHRlc3RCaXRBbmRaZXJvU2hpZnRSaWdodEFyZ0ltbU1hc2szMigpKTsKICAgICBSVU4odGVzdEJp
dEFuZFplcm9TaGlmdFJpZ2h0QXJnSW1tTWFzazY0KCkpOwogICAgIFJVTih0ZXN0Qml0QW5kQXJn
cyg0MywgNDMpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNf
My5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzMuY3BwCmluZGV4IGI4OWIw
MTlmZDhiZjVmMDcxMmY0NjY4NjUwZjYxY2RmODFkYTRjODMuLjUwNWZkNjM5MDNjZThmMjI0MmRl
NjAzNjMyODkyOTBjYTg4MTlhNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My90ZXN0YjNfMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18zLmNw
cApAQCAtMzczMCwxMCArMzczMCw4IEBAIHZvaWQgYWRkQXJnVGVzdHMoY29uc3QgY2hhciogZmls
dGVyLCBEZXF1ZTxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+Pj4mIHRhc2tzKQogICAgIFJVTih0
ZXN0TXVsQXJnczMyKDEsIDIpKTsKICAgICBSVU4odGVzdE11bEFyZ3MzMigweEZGRkZGRkZGLCAw
eEZGRkZGRkZGKSk7CiAgICAgUlVOKHRlc3RNdWxBcmdzMzIoMHhGRkZGRkZGRSwgMHhGRkZGRkZG
RikpOwotICAgIFJVTih0ZXN0TXVsQXJnczMyU2lnbkV4dGVuZCgxLCAxKSk7Ci0gICAgUlVOKHRl
c3RNdWxBcmdzMzJTaWduRXh0ZW5kKDEsIDIpKTsKLSAgICBSVU4odGVzdE11bEFyZ3MzMlNpZ25F
eHRlbmQoMHhGRkZGRkZGRiwgMHhGRkZGRkZGRikpOwotICAgIFJVTih0ZXN0TXVsQXJnczMyU2ln
bkV4dGVuZCgweEZGRkZGRkZFLCAweEZGRkZGRkZGKSk7CisgICAgUlVOKHRlc3RNdWxBcmdzMzJT
aWduRXh0ZW5kKCkpOworICAgIFJVTih0ZXN0TXVsQXJnczMyWmVyb0V4dGVuZCgpKTsKICAgICBS
VU4odGVzdE11bExvYWRUd2ljZSgpKTsKICAgICBSVU4odGVzdE11bEFkZEFyZ3NMZWZ0KCkpOwog
ICAgIFJVTih0ZXN0TXVsQWRkQXJnc1JpZ2h0KCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434806</attachid>
            <date>2021-08-02 17:15:27 -0700</date>
            <delta_ts>2021-08-02 21:46:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228675-20210802191525.patch</filename>
            <type>text/plain</type>
            <size>66422</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwNDk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
N2M5NTU4ZWFiZGIxNjY0YzU2YWQyZGU0YWQzNGQ3ZDA3Y2UxNzI1Li5lNjVhMmIzNTRkZGMxNWZh
MmRhYjJjYTFmZDVmYWRjZjg5MDE5ZjRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNDQgQEAKKzIwMjEtMDgtMDIgIFlpamlhIEh1YW5nICA8eWlqaWFfaHVhbmdAYXBwbGUu
Y29tPgorCisgICAgICAgIEFkZCBuZXcgcGF0dGVybnMgdG8gaW5zdHJ1Y3Rpb24gc2VsZWN0b3Ig
dG8gdXRpbGl6ZSBBTkQvRU9SL09SUi13aXRoLXNoaWZ0IHN1cHBvcnRlZCBieSBBUk02NAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI4Njc1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQml0d2lzZSBBTkQg
KHNoaWZ0ZWQgcmVnaXN0ZXIpIHBlcmZvcm1zIGEgYml0d2lzZSBBTkQgb2YgYSByZWdpc3RlciB2
YWx1ZSBhbmQgYW4gb3B0aW9uYWxseS1zaGlmdGVkIAorICAgICAgICByZWdpc3RlciB2YWx1ZSwg
YW5kIHdyaXRlcyB0aGUgcmVzdWx0IHRvIHRoZSBkZXN0aW5hdGlvbiByZWdpc3Rlci4KKworICAg
ICAgICAgICAgYW5kIHdkIHduIHdtIFNoaWZ0VHlwZSAjYW1vdW50CisKKyAgICAgICAgVGhlIGVx
dWl2YWxlbnQgcGF0dGVybiBpczogbiAmIChtIFNoaWZ0VHlwZSBhbW91bnQpCisKKyAgICAgICAg
R2l2ZW4gQjMgSVI6CisgICAgICAgIEludCBAMCA9IEFyZ3VtZW50UmVnKCV4MCkKKyAgICAgICAg
SW50IEAxID0gQXJndW1lbnRSZWcoJXgxKQorICAgICAgICBJbnQgQDIgPSBDb25zdDMyKDYzKQor
ICAgICAgICBJbnQgQDMgPSBTaGwoQDEsICQ2MyhAMikpCisgICAgICAgIEludCBANCA9IEJpdEFu
ZChAMCwgQDMpCisgICAgICAgIFZvaWRANSA9IFJldHVybihANCwgVGVybWluYWwpCisKKyAgICAg
ICAgLy8gT2xkIG9wdGltaXplZCBBSVIKKyAgICAgICAgTHNoaWZ0ICV4MSwgJDYzLCAleDEsIEAz
CisgICAgICAgIEFuZCAgICAleDAsICV4MSwgJXgwLCBANAorICAgICAgICBSZXQgICAgJXgwLCAg
ICAgICAgICAgQDUKKworICAgICAgICAvLyBOZXcgb3B0aW1pemVkIEFJUgorICAgICAgICBBbmRM
ZWZ0U2hpZnQgJXgwLCAleDEsICQ2MywgJXgwLCBANAorICAgICAgICBSZXQgICAgICAgICAgJXgw
LCAgICAgICAgICAgICAgICBANQorCisgICAgICAgIEJpdHdpc2UgRXhjbHVzaXZlIE9SIChzaGlm
dGVkIHJlZ2lzdGVyKSBwZXJmb3JtcyBhIGJpdHdpc2UgRXhjbHVzaXZlIE9SIG9mIGEgcmVnaXN0
ZXIgdmFsdWUgYW5kIGFuIAorICAgICAgICBvcHRpb25hbGx5LXNoaWZ0ZWQgcmVnaXN0ZXIgdmFs
dWUsIGFuZCB3cml0ZXMgdGhlIHJlc3VsdCB0byB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIuCisK
KyAgICAgICAgICAgIGVvciB3ZCB3biB3bSBTaGlmdFR5cGUgI2Ftb3VudAorCisgICAgICAgIFRo
ZSBlcXVpdmFsZW50IHBhdHRlcm4gaXM6IG4gXiAobSBTaGlmdFR5cGUgYW1vdW50KQorCisgICAg
ICAgIEdpdmVuIEIzIElSOgorICAgICAgICBJbnQgQDAgPSBBcmd1bWVudFJlZygleDApCisgICAg
ICAgIEludCBAMSA9IEFyZ3VtZW50UmVnKCV4MSkKKyAgICAgICAgSW50IEAyID0gQ29uc3QzMig2
MykKKyAgICAgICAgSW50IEAzID0gU2hsKEAxLCAkNjMoQDIpKQorICAgICAgICBJbnQgQDQgPSBC
aXRYb3IoQDAsIEAzKQorICAgICAgICBWb2lkQDUgPSBSZXR1cm4oQDQsIFRlcm1pbmFsKQorCisg
ICAgICAgIC8vIE9sZCBvcHRpbWl6ZWQgQUlSCisgICAgICAgIExzaGlmdCAleDEsICQ2MywgJXgx
LCBAMworICAgICAgICBYb3IgICAgJXgwLCAleDEsICV4MCwgQDQKKyAgICAgICAgUmV0ICAgICV4
MCwgICAgICAgICAgIEA1CisKKyAgICAgICAgLy8gTmV3IG9wdGltaXplZCBBSVIKKyAgICAgICAg
WG9yTGVmdFNoaWZ0ICV4MCwgJXgxLCAkNjMsICV4MCwgQDQKKyAgICAgICAgUmV0ICAgICAgICAg
ICV4MCwgICAgICAgICAgICAgICAgQDUKKworICAgICAgICBCaXR3aXNlIE9SIChzaGlmdGVkIHJl
Z2lzdGVyKSBwZXJmb3JtcyBhIGJpdHdpc2UgKGluY2x1c2l2ZSkgT1Igb2YgYSByZWdpc3RlciB2
YWx1ZSBhbmQgYW4gCisgICAgICAgIG9wdGlvbmFsbHktc2hpZnRlZCByZWdpc3RlciB2YWx1ZSwg
YW5kIHdyaXRlcyB0aGUgcmVzdWx0IHRvIHRoZSBkZXN0aW5hdGlvbiByZWdpc3Rlci4KKworICAg
ICAgICAgICAgb3JyIHdkIHduIHdtIFNoaWZ0VHlwZSAjYW1vdW50CisKKyAgICAgICAgVGhlIGVx
dWl2YWxlbnQgcGF0dGVybiBpczogbiB8IChtIFNoaWZ0VHlwZSBhbW91bnQpCisKKyAgICAgICAg
R2l2ZW4gQjMgSVI6CisgICAgICAgIEludCBAMCA9IEFyZ3VtZW50UmVnKCV4MCkKKyAgICAgICAg
SW50IEAxID0gQXJndW1lbnRSZWcoJXgxKQorICAgICAgICBJbnQgQDIgPSBDb25zdDMyKDYzKQor
ICAgICAgICBJbnQgQDMgPSBTaGwoQDEsICQ2MyhAMikpCisgICAgICAgIEludCBANCA9IEJpdE9y
KEAwLCBAMykKKyAgICAgICAgVm9pZEA1ID0gUmV0dXJuKEA0LCBUZXJtaW5hbCkKKworICAgICAg
ICAvLyBPbGQgb3B0aW1pemVkIEFJUgorICAgICAgICBMc2hpZnQgJXgxLCAkNjMsICV4MSwgQDMK
KyAgICAgICAgT3IgICAgICV4MCwgJXgxLCAleDAsIEA0CisgICAgICAgIFJldCAgICAleDAsICAg
ICAgICAgICBANQorCisgICAgICAgIC8vIE5ldyBvcHRpbWl6ZWQgQUlSCisgICAgICAgIE9yTGVm
dFNoaWZ0ICV4MCwgJXgxLCAkNjMsICV4MCwgQDQKKyAgICAgICAgUmV0ICAgICAgICAgJXgwLCAg
ICAgICAgICAgICAgICBANQorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJN
NjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6YW5kTGVmdFNoaWZ0MzIp
OgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjphbmRSaWdodFNoaWZ0MzIpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjphbmRVbnNpZ25lZFJpZ2h0U2hpZnQz
Mik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OmFuZExlZnRTaGlmdDY0KToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6YW5kUmlnaHRTaGlmdDY0KToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6YW5kVW5zaWduZWRSaWdodFNoaWZ0NjQp
OgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojp4b3JMZWZ0U2hpZnQzMik6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnhvclJpZ2h0U2hpZnQzMik6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnhvclVuc2lnbmVkUmlnaHRTaGlmdDMyKToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6eG9yTGVmdFNoaWZ0NjQpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojp4b3JSaWdodFNoaWZ0NjQpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojp4b3JVbnNpZ25lZFJpZ2h0U2hpZnQ2NCk6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Om9yTGVmdFNoaWZ0MzIpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpvclJpZ2h0U2hpZnQzMik6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Om9yVW5zaWduZWRSaWdodFNoaWZ0MzIpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpvckxlZnRTaGlmdDY0KToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6b3JSaWdodFNoaWZ0NjQpOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlckFSTTY0OjpvclVuc2lnbmVkUmlnaHRTaGlmdDY0KToKKyAgICAgICAgKiBh
c3NlbWJsZXIvdGVzdG1hc20uY3BwOgorICAgICAgICAoSlNDOjp0ZXN0QW5kTGVmdFNoaWZ0MzIp
OgorICAgICAgICAoSlNDOjp0ZXN0QW5kUmlnaHRTaGlmdDMyKToKKyAgICAgICAgKEpTQzo6dGVz
dEFuZFVuc2lnbmVkUmlnaHRTaGlmdDMyKToKKyAgICAgICAgKEpTQzo6dGVzdEFuZExlZnRTaGlm
dDY0KToKKyAgICAgICAgKEpTQzo6dGVzdEFuZFJpZ2h0U2hpZnQ2NCk6CisgICAgICAgIChKU0M6
OnRlc3RBbmRVbnNpZ25lZFJpZ2h0U2hpZnQ2NCk6CisgICAgICAgIChKU0M6OnRlc3RYb3JMZWZ0
U2hpZnQzMik6CisgICAgICAgIChKU0M6OnRlc3RYb3JSaWdodFNoaWZ0MzIpOgorICAgICAgICAo
SlNDOjp0ZXN0WG9yVW5zaWduZWRSaWdodFNoaWZ0MzIpOgorICAgICAgICAoSlNDOjp0ZXN0WG9y
TGVmdFNoaWZ0NjQpOgorICAgICAgICAoSlNDOjp0ZXN0WG9yUmlnaHRTaGlmdDY0KToKKyAgICAg
ICAgKEpTQzo6dGVzdFhvclVuc2lnbmVkUmlnaHRTaGlmdDY0KToKKyAgICAgICAgKEpTQzo6dGVz
dE9yTGVmdFNoaWZ0MzIpOgorICAgICAgICAoSlNDOjp0ZXN0T3JSaWdodFNoaWZ0MzIpOgorICAg
ICAgICAoSlNDOjp0ZXN0T3JVbnNpZ25lZFJpZ2h0U2hpZnQzMik6CisgICAgICAgIChKU0M6OnRl
c3RPckxlZnRTaGlmdDY0KToKKyAgICAgICAgKEpTQzo6dGVzdE9yUmlnaHRTaGlmdDY0KToKKyAg
ICAgICAgKEpTQzo6dGVzdE9yVW5zaWduZWRSaWdodFNoaWZ0NjQpOgorICAgICAgICAqIGIzL0Iz
TG93ZXJUb0Fpci5jcHA6CisgICAgICAgICogYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzOgorICAg
ICAgICAqIGIzL3Rlc3RiMy5oOgorICAgICAgICAqIGIzL3Rlc3RiM18yLmNwcDoKKyAgICAgICAg
KHRlc3RBbmRMZWZ0U2hpZnQzMik6CisgICAgICAgICh0ZXN0QW5kUmlnaHRTaGlmdDMyKToKKyAg
ICAgICAgKHRlc3RBbmRVbnNpZ25lZFJpZ2h0U2hpZnQzMik6CisgICAgICAgICh0ZXN0QW5kTGVm
dFNoaWZ0NjQpOgorICAgICAgICAodGVzdEFuZFJpZ2h0U2hpZnQ2NCk6CisgICAgICAgICh0ZXN0
QW5kVW5zaWduZWRSaWdodFNoaWZ0NjQpOgorICAgICAgICAodGVzdFhvckxlZnRTaGlmdDMyKToK
KyAgICAgICAgKHRlc3RYb3JSaWdodFNoaWZ0MzIpOgorICAgICAgICAodGVzdFhvclVuc2lnbmVk
UmlnaHRTaGlmdDMyKToKKyAgICAgICAgKHRlc3RYb3JMZWZ0U2hpZnQ2NCk6CisgICAgICAgICh0
ZXN0WG9yUmlnaHRTaGlmdDY0KToKKyAgICAgICAgKHRlc3RYb3JVbnNpZ25lZFJpZ2h0U2hpZnQ2
NCk6CisgICAgICAgICh0ZXN0T3JMZWZ0U2hpZnQzMik6CisgICAgICAgICh0ZXN0T3JSaWdodFNo
aWZ0MzIpOgorICAgICAgICAodGVzdE9yVW5zaWduZWRSaWdodFNoaWZ0MzIpOgorICAgICAgICAo
dGVzdE9yTGVmdFNoaWZ0NjQpOgorICAgICAgICAodGVzdE9yUmlnaHRTaGlmdDY0KToKKyAgICAg
ICAgKHRlc3RPclVuc2lnbmVkUmlnaHRTaGlmdDY0KToKKyAgICAgICAgKGFkZEJpdFRlc3RzKToK
KwogMjAyMS0wNy0zMCAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5jb20+CiAKICAg
ICAgICAgQWRkIFByZS9Qb3N0LUluZGV4ZWQgQWRkcmVzcyBNb2RlIHRvIEFpciBmb3IgQVJNNjQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJBUk02NC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ckFSTTY0LmgKaW5kZXggZTZiZmJlYzYwMDFjMTBjNjFlOWYyNjZlZmYyN2FkNmYxMGU4OWY4Zi4u
NmNhYTM1YjdjNzU2YjgwY2VhNTZlOTJjYWVhYTYwN2ViOTg5Njc4YiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKQEAg
LTY0OSw2ICs2NDksOTYgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5zdWI8NjQ+KGQs
IG4sIG0sIEFzc2VtYmxlcjo6TFNSLCBhbW91bnQubV92YWx1ZSk7CiAgICAgfQogCisgICAgdm9p
ZCBhbmRMZWZ0U2hpZnQzMihSZWdpc3RlcklEIG4sIFJlZ2lzdGVySUQgbSwgVHJ1c3RlZEltbTMy
IGFtb3VudCwgUmVnaXN0ZXJJRCBkKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kXzwz
Mj4oZCwgbiwgbSwgQXNzZW1ibGVyOjpMU0wsIGFtb3VudC5tX3ZhbHVlKTsKKyAgICB9CisKKyAg
ICB2b2lkIGFuZFJpZ2h0U2hpZnQzMihSZWdpc3RlcklEIG4sIFJlZ2lzdGVySUQgbSwgVHJ1c3Rl
ZEltbTMyIGFtb3VudCwgUmVnaXN0ZXJJRCBkKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
YW5kXzwzMj4oZCwgbiwgbSwgQXNzZW1ibGVyOjpBU1IsIGFtb3VudC5tX3ZhbHVlKTsKKyAgICB9
CisKKyAgICB2b2lkIGFuZFVuc2lnbmVkUmlnaHRTaGlmdDMyKFJlZ2lzdGVySUQgbiwgUmVnaXN0
ZXJJRCBtLCBUcnVzdGVkSW1tMzIgYW1vdW50LCBSZWdpc3RlcklEIGQpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5hbmRfPDMyPihkLCBuLCBtLCBBc3NlbWJsZXI6OkxTUiwgYW1vdW50Lm1f
dmFsdWUpOworICAgIH0KKworICAgIHZvaWQgYW5kTGVmdFNoaWZ0NjQoUmVnaXN0ZXJJRCBuLCBS
ZWdpc3RlcklEIG0sIFRydXN0ZWRJbW0zMiBhbW91bnQsIFJlZ2lzdGVySUQgZCkKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmFuZF88NjQ+KGQsIG4sIG0sIEFzc2VtYmxlcjo6TFNMLCBhbW91
bnQubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBhbmRSaWdodFNoaWZ0NjQoUmVnaXN0ZXJJ
RCBuLCBSZWdpc3RlcklEIG0sIFRydXN0ZWRJbW0zMiBhbW91bnQsIFJlZ2lzdGVySUQgZCkKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZF88NjQ+KGQsIG4sIG0sIEFzc2VtYmxlcjo6QVNS
LCBhbW91bnQubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBhbmRVbnNpZ25lZFJpZ2h0U2hp
ZnQ2NChSZWdpc3RlcklEIG4sIFJlZ2lzdGVySUQgbSwgVHJ1c3RlZEltbTMyIGFtb3VudCwgUmVn
aXN0ZXJJRCBkKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kXzw2ND4oZCwgbiwgbSwg
QXNzZW1ibGVyOjpMU1IsIGFtb3VudC5tX3ZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvckxl
ZnRTaGlmdDMyKFJlZ2lzdGVySUQgbiwgUmVnaXN0ZXJJRCBtLCBUcnVzdGVkSW1tMzIgYW1vdW50
LCBSZWdpc3RlcklEIGQpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5lb3I8MzI+KGQsIG4s
IG0sIEFzc2VtYmxlcjo6TFNMLCBhbW91bnQubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCB4
b3JSaWdodFNoaWZ0MzIoUmVnaXN0ZXJJRCBuLCBSZWdpc3RlcklEIG0sIFRydXN0ZWRJbW0zMiBh
bW91bnQsIFJlZ2lzdGVySUQgZCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmVvcjwzMj4o
ZCwgbiwgbSwgQXNzZW1ibGVyOjpBU1IsIGFtb3VudC5tX3ZhbHVlKTsKKyAgICB9CisKKyAgICB2
b2lkIHhvclVuc2lnbmVkUmlnaHRTaGlmdDMyKFJlZ2lzdGVySUQgbiwgUmVnaXN0ZXJJRCBtLCBU
cnVzdGVkSW1tMzIgYW1vdW50LCBSZWdpc3RlcklEIGQpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5lb3I8MzI+KGQsIG4sIG0sIEFzc2VtYmxlcjo6TFNSLCBhbW91bnQubV92YWx1ZSk7Cisg
ICAgfQorCisgICAgdm9pZCB4b3JMZWZ0U2hpZnQ2NChSZWdpc3RlcklEIG4sIFJlZ2lzdGVySUQg
bSwgVHJ1c3RlZEltbTMyIGFtb3VudCwgUmVnaXN0ZXJJRCBkKQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIuZW9yPDY0PihkLCBuLCBtLCBBc3NlbWJsZXI6OkxTTCwgYW1vdW50Lm1fdmFsdWUp
OworICAgIH0KKworICAgIHZvaWQgeG9yUmlnaHRTaGlmdDY0KFJlZ2lzdGVySUQgbiwgUmVnaXN0
ZXJJRCBtLCBUcnVzdGVkSW1tMzIgYW1vdW50LCBSZWdpc3RlcklEIGQpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5lb3I8NjQ+KGQsIG4sIG0sIEFzc2VtYmxlcjo6QVNSLCBhbW91bnQubV92
YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCB4b3JVbnNpZ25lZFJpZ2h0U2hpZnQ2NChSZWdpc3Rl
cklEIG4sIFJlZ2lzdGVySUQgbSwgVHJ1c3RlZEltbTMyIGFtb3VudCwgUmVnaXN0ZXJJRCBkKQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuZW9yPDY0PihkLCBuLCBtLCBBc3NlbWJsZXI6OkxT
UiwgYW1vdW50Lm1fdmFsdWUpOworICAgIH0KKworICAgIHZvaWQgb3JMZWZ0U2hpZnQzMihSZWdp
c3RlcklEIG4sIFJlZ2lzdGVySUQgbSwgVHJ1c3RlZEltbTMyIGFtb3VudCwgUmVnaXN0ZXJJRCBk
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3JyPDMyPihkLCBuLCBtLCBBc3NlbWJsZXI6
OkxTTCwgYW1vdW50Lm1fdmFsdWUpOworICAgIH0KKworICAgIHZvaWQgb3JSaWdodFNoaWZ0MzIo
UmVnaXN0ZXJJRCBuLCBSZWdpc3RlcklEIG0sIFRydXN0ZWRJbW0zMiBhbW91bnQsIFJlZ2lzdGVy
SUQgZCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ycjwzMj4oZCwgbiwgbSwgQXNzZW1i
bGVyOjpBU1IsIGFtb3VudC5tX3ZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIG9yVW5zaWduZWRS
aWdodFNoaWZ0MzIoUmVnaXN0ZXJJRCBuLCBSZWdpc3RlcklEIG0sIFRydXN0ZWRJbW0zMiBhbW91
bnQsIFJlZ2lzdGVySUQgZCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ycjwzMj4oZCwg
biwgbSwgQXNzZW1ibGVyOjpMU1IsIGFtb3VudC5tX3ZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lk
IG9yTGVmdFNoaWZ0NjQoUmVnaXN0ZXJJRCBuLCBSZWdpc3RlcklEIG0sIFRydXN0ZWRJbW0zMiBh
bW91bnQsIFJlZ2lzdGVySUQgZCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ycjw2ND4o
ZCwgbiwgbSwgQXNzZW1ibGVyOjpMU0wsIGFtb3VudC5tX3ZhbHVlKTsKKyAgICB9CisKKyAgICB2
b2lkIG9yUmlnaHRTaGlmdDY0KFJlZ2lzdGVySUQgbiwgUmVnaXN0ZXJJRCBtLCBUcnVzdGVkSW1t
MzIgYW1vdW50LCBSZWdpc3RlcklEIGQpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5vcnI8
NjQ+KGQsIG4sIG0sIEFzc2VtYmxlcjo6QVNSLCBhbW91bnQubV92YWx1ZSk7CisgICAgfQorCisg
ICAgdm9pZCBvclVuc2lnbmVkUmlnaHRTaGlmdDY0KFJlZ2lzdGVySUQgbiwgUmVnaXN0ZXJJRCBt
LCBUcnVzdGVkSW1tMzIgYW1vdW50LCBSZWdpc3RlcklEIGQpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5vcnI8NjQ+KGQsIG4sIG0sIEFzc2VtYmxlcjo6TFNSLCBhbW91bnQubV92YWx1ZSk7
CisgICAgfQorCiAgICAgdm9pZCBjbGVhckJpdDY0KFJlZ2lzdGVySUQgYml0VG9DbGVhciwgUmVn
aXN0ZXJJRCBkZXN0LCBSZWdpc3RlcklEIHNjcmF0Y2hGb3JNYXNrID0gSW52YWxpZEdQUlJlZykK
ICAgICB7CiAgICAgICAgIGlmIChzY3JhdGNoRm9yTWFzayA9PSBJbnZhbGlkR1BSUmVnKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcAppbmRleCAxY2E2OTgz
ZWI3MGQ5NjQwYmU0ZmIyZjExMGUyZjhlMDFmMzhmODM4Li5mNGM2MDk3MGM2MGYxOGZiYWY2MGY5
ZDU2NGI5ZDM1ZWJjOTRmNDBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL3Rlc3RtYXNtLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L3Rlc3RtYXNtLmNwcApAQCAtMjM4Miw2ICsyMzgyLDQ3NCBAQCB2b2lkIHRlc3RMb2FkUHJlUG9z
dEluZGV4NjQoKQogICAgIENIRUNLX0VRKHRlc3QyKDUpLCAyKTsKICAgICBDSEVDS19FUShudW1z
WzJdLCA1KTsKIH0KKwordm9pZCB0ZXN0QW5kTGVmdFNoaWZ0MzIoKQoreworICAgIFZlY3Rvcjxp
bnQzMl90PiBhbW91bnRzID0geyAwLCAxNywgMzEgfTsKKyAgICBmb3IgKGF1dG8gbiA6IGludDMy
T3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbSA6IGludDMyT3BlcmFuZHMoKSkgewor
ICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAg
ICBhdXRvIGFuZDMyID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAg
ICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgICAg
ICAgICAgaml0LmFuZExlZnRTaGlmdDMyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BSMSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFtb3VudCksCisgICAgICAgICAgICAg
ICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAgICAg
ICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgICAgICAgICAgaml0LnJl
dCgpOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgaW50MzJfdCBsaHMg
PSBpbnZva2U8aW50MzJfdD4oYW5kMzIsIG4sIG0pOworICAgICAgICAgICAgICAgIGludDMyX3Qg
cmhzID0gbiAmIChtIDw8IGFtb3VudCk7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEobGhzLCBy
aHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RBbmRS
aWdodFNoaWZ0MzIoKQoreworICAgIFZlY3RvcjxpbnQzMl90PiBhbW91bnRzID0geyAwLCAxNywg
MzEgfTsKKyAgICBmb3IgKGF1dG8gbiA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICBmb3Ig
KGF1dG8gbSA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3Vu
dCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGFuZDMyID0gY29tcGlsZShbPV0g
KENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvblBy
b2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgICAgICAgICAgaml0LmFuZFJpZ2h0U2hpZnQzMihH
UFJJbmZvOjphcmd1bWVudEdQUjAsCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjph
cmd1bWVudEdQUjEsCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihhbW91bnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpOworCisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGpp
dCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAgICAgICB9KTsK
KworICAgICAgICAgICAgICAgIGludDMyX3QgbGhzID0gaW52b2tlPGludDMyX3Q+KGFuZDMyLCBu
LCBtKTsKKyAgICAgICAgICAgICAgICBpbnQzMl90IHJocyA9IG4gJiAobSA+PiBhbW91bnQpOwor
ICAgICAgICAgICAgICAgIENIRUNLX0VRKGxocywgcmhzKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0QW5kVW5zaWduZWRSaWdodFNoaWZ0MzIoKQorewor
ICAgIFZlY3Rvcjx1aW50MzJfdD4gYW1vdW50cyA9IHsgMCwgMTcsIDMxIH07CisgICAgZm9yIChh
dXRvIG4gOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG0gOiBpbnQzMk9w
ZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7Cisg
ICAgICAgICAgICAgICAgYXV0byBhbmQzMiA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCkgeworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisg
ICAgICAgICAgICAgICAgICAgIGppdC5hbmRVbnNpZ25lZFJpZ2h0U2hpZnQzMihHUFJJbmZvOjph
cmd1bWVudEdQUjAsCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjphcmd1bWVudEdQ
UjEsCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihh
bW91bnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
OworCisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAg
ICAgICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAg
ICAgICAgICAgIHVpbnQzMl90IGxocyA9IGludm9rZTx1aW50MzJfdD4oYW5kMzIsIG4sIG0pOwor
ICAgICAgICAgICAgICAgIHVpbnQzMl90IHJocyA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihuKSAm
IChzdGF0aWNfY2FzdDx1aW50MzJfdD4obSkgPj4gYW1vdW50KTsKKyAgICAgICAgICAgICAgICBD
SEVDS19FUShsaHMsIHJocyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisK
K3ZvaWQgdGVzdEFuZExlZnRTaGlmdDY0KCkKK3sKKyAgICBWZWN0b3I8aW50MzJfdD4gYW1vdW50
cyA9IHsgMCwgMzQsIDYzIH07CisgICAgZm9yIChhdXRvIG4gOiBpbnQ2NE9wZXJhbmRzKCkpIHsK
KyAgICAgICAgZm9yIChhdXRvIG0gOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZv
ciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgYXV0byBhbmQ2NCA9
IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgICAgICAgICBl
bWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAgICAgICAgIGppdC5hbmRM
ZWZ0U2hpZnQ2NChHUFJJbmZvOjphcmd1bWVudEdQUjAsCisgICAgICAgICAgICAgICAgICAgICAg
ICBHUFJJbmZvOjphcmd1bWVudEdQUjEsCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihhbW91bnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlv
bkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAg
ICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIGludDY0X3QgbGhzID0gaW52b2tlPGludDY0
X3Q+KGFuZDY0LCBuLCBtKTsKKyAgICAgICAgICAgICAgICBpbnQ2NF90IHJocyA9IG4gJiAobSA8
PCBhbW91bnQpOworICAgICAgICAgICAgICAgIENIRUNLX0VRKGxocywgcmhzKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0QW5kUmlnaHRTaGlmdDY0KCkK
K3sKKyAgICBWZWN0b3I8aW50MzJfdD4gYW1vdW50cyA9IHsgMCwgMzQsIDYzIH07CisgICAgZm9y
IChhdXRvIG4gOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG0gOiBpbnQ2
NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7
CisgICAgICAgICAgICAgICAgYXV0byBhbmQ2NCA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMm
IGppdCkgeworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOwor
CisgICAgICAgICAgICAgICAgICAgIGppdC5hbmRSaWdodFNoaWZ0NjQoR1BSSW5mbzo6YXJndW1l
bnRHUFIwLAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6YXJndW1lbnRHUFIxLAor
ICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYW1vdW50
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKwor
ICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAg
ICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAg
ICAgICBpbnQ2NF90IGxocyA9IGludm9rZTxpbnQ2NF90PihhbmQ2NCwgbiwgbSk7CisgICAgICAg
ICAgICAgICAgaW50NjRfdCByaHMgPSBuICYgKG0gPj4gYW1vdW50KTsKKyAgICAgICAgICAgICAg
ICBDSEVDS19FUShsaHMsIHJocyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9
CisKK3ZvaWQgdGVzdEFuZFVuc2lnbmVkUmlnaHRTaGlmdDY0KCkKK3sKKyAgICBWZWN0b3I8dWlu
dDMyX3Q+IGFtb3VudHMgPSB7IDAsIDM0LCA2MyB9OworICAgIGZvciAoYXV0byBuIDogaW50NjRP
cGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtIDogaW50NjRPcGVyYW5kcygpKSB7Cisg
ICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAgICAg
IGF1dG8gYW5kNjQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgICAg
ICAgICBqaXQuYW5kVW5zaWduZWRSaWdodFNoaWZ0NjQoR1BSSW5mbzo6YXJndW1lbnRHUFIwLAor
ICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6YXJndW1lbnRHUFIxLAorICAgICAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYW1vdW50KSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAg
ICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgICAgICAg
ICBqaXQucmV0KCk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICB1aW50
NjRfdCBsaHMgPSBpbnZva2U8dWludDY0X3Q+KGFuZDY0LCBuLCBtKTsKKyAgICAgICAgICAgICAg
ICB1aW50NjRfdCByaHMgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4obikgJiAoc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KG0pID4+IGFtb3VudCk7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEobGhzLCBy
aHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RYb3JM
ZWZ0U2hpZnQzMigpCit7CisgICAgVmVjdG9yPGludDMyX3Q+IGFtb3VudHMgPSB7IDAsIDE3LCAz
MSB9OworICAgIGZvciAoYXV0byBuIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAo
YXV0byBtIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50
IDogYW1vdW50cykgeworICAgICAgICAgICAgICAgIGF1dG8geG9yMzIgPSBjb21waWxlKFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJv
bG9ndWUoaml0KTsKKworICAgICAgICAgICAgICAgICAgICBqaXQueG9yTGVmdFNoaWZ0MzIoR1BS
SW5mbzo6YXJndW1lbnRHUFIwLAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6YXJn
dW1lbnRHUFIxLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoYW1vdW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZh
bHVlR1BSKTsKKworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQp
OworICAgICAgICAgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICAgICAgfSk7CisK
KyAgICAgICAgICAgICAgICBpbnQzMl90IGxocyA9IGludm9rZTxpbnQzMl90Pih4b3IzMiwgbiwg
bSk7CisgICAgICAgICAgICAgICAgaW50MzJfdCByaHMgPSBuIF4gKG0gPDwgYW1vdW50KTsKKyAg
ICAgICAgICAgICAgICBDSEVDS19FUShsaHMsIHJocyk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdFhvclJpZ2h0U2hpZnQzMigpCit7CisgICAgVmVjdG9y
PGludDMyX3Q+IGFtb3VudHMgPSB7IDAsIDE3LCAzMSB9OworICAgIGZvciAoYXV0byBuIDogaW50
MzJPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtIDogaW50MzJPcGVyYW5kcygpKSB7
CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAg
ICAgIGF1dG8geG9yMzIgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAg
ICAgICAgICBqaXQueG9yUmlnaHRTaGlmdDMyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BSMSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFtb3VudCksCisgICAgICAgICAg
ICAgICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAg
ICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgICAgICAgICAgaml0
LnJldCgpOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgaW50MzJfdCBs
aHMgPSBpbnZva2U8aW50MzJfdD4oeG9yMzIsIG4sIG0pOworICAgICAgICAgICAgICAgIGludDMy
X3QgcmhzID0gbiBeIChtID4+IGFtb3VudCk7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEobGhz
LCByaHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RY
b3JVbnNpZ25lZFJpZ2h0U2hpZnQzMigpCit7CisgICAgVmVjdG9yPHVpbnQzMl90PiBhbW91bnRz
ID0geyAwLCAxNywgMzEgfTsKKyAgICBmb3IgKGF1dG8gbiA6IGludDMyT3BlcmFuZHMoKSkgewor
ICAgICAgICBmb3IgKGF1dG8gbSA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9y
IChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHhvcjMyID0g
Y29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAgICAgIGVt
aXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgICAgICAgICAgaml0LnhvclVu
c2lnbmVkUmlnaHRTaGlmdDMyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BSMSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFtb3VudCksCisgICAgICAgICAgICAgICAgICAg
ICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAgICAgICAgZW1p
dEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgICAgICAgICAgaml0LnJldCgpOwor
ICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgdWludDMyX3QgbGhzID0gaW52
b2tlPHVpbnQzMl90Pih4b3IzMiwgbiwgbSk7CisgICAgICAgICAgICAgICAgdWludDMyX3Qgcmhz
ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG4pIF4gKHN0YXRpY19jYXN0PHVpbnQzMl90PihtKSA+
PiBhbW91bnQpOworICAgICAgICAgICAgICAgIENIRUNLX0VRKGxocywgcmhzKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0WG9yTGVmdFNoaWZ0NjQoKQor
eworICAgIFZlY3RvcjxpbnQzMl90PiBhbW91bnRzID0geyAwLCAzNCwgNjMgfTsKKyAgICBmb3Ig
KGF1dG8gbiA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbSA6IGludDY0
T3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsK
KyAgICAgICAgICAgICAgICBhdXRvIHhvcjY0ID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYg
aml0KSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisK
KyAgICAgICAgICAgICAgICAgICAgaml0LnhvckxlZnRTaGlmdDY0KEdQUkluZm86OmFyZ3VtZW50
R1BSMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BSMSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFtb3VudCks
CisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAg
ICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAg
ICAgICAgICAgaml0LnJldCgpOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAg
ICAgaW50NjRfdCBsaHMgPSBpbnZva2U8aW50NjRfdD4oeG9yNjQsIG4sIG0pOworICAgICAgICAg
ICAgICAgIGludDY0X3QgcmhzID0gbiBeIChtIDw8IGFtb3VudCk7CisgICAgICAgICAgICAgICAg
Q0hFQ0tfRVEobGhzLCByaHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQor
Cit2b2lkIHRlc3RYb3JSaWdodFNoaWZ0NjQoKQoreworICAgIFZlY3RvcjxpbnQzMl90PiBhbW91
bnRzID0geyAwLCAzNCwgNjMgfTsKKyAgICBmb3IgKGF1dG8gbiA6IGludDY0T3BlcmFuZHMoKSkg
eworICAgICAgICBmb3IgKGF1dG8gbSA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICAgICAg
Zm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHhvcjY0
ID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAgICAg
IGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgICAgICAgICAgaml0Lnhv
clJpZ2h0U2hpZnQ2NChHUFJJbmZvOjphcmd1bWVudEdQUjAsCisgICAgICAgICAgICAgICAgICAg
ICAgICBHUFJJbmZvOjphcmd1bWVudEdQUjEsCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbW91bnQpLAorICAgICAgICAgICAgICAgICAgICAgICAg
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5j
dGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAg
ICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIGludDY0X3QgbGhzID0gaW52b2tlPGlu
dDY0X3Q+KHhvcjY0LCBuLCBtKTsKKyAgICAgICAgICAgICAgICBpbnQ2NF90IHJocyA9IG4gXiAo
bSA+PiBhbW91bnQpOworICAgICAgICAgICAgICAgIENIRUNLX0VRKGxocywgcmhzKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0WG9yVW5zaWduZWRSaWdo
dFNoaWZ0NjQoKQoreworICAgIFZlY3Rvcjx1aW50MzJfdD4gYW1vdW50cyA9IHsgMCwgMzQsIDYz
IH07CisgICAgZm9yIChhdXRvIG4gOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChh
dXRvIG0gOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQg
OiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgYXV0byB4b3I2NCA9IGNvbXBpbGUoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9s
b2d1ZShqaXQpOworCisgICAgICAgICAgICAgICAgICAgIGppdC54b3JVbnNpZ25lZFJpZ2h0U2hp
ZnQ2NChHUFJJbmZvOjphcmd1bWVudEdQUjAsCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJ
bmZvOjphcmd1bWVudEdQUjEsCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihhbW91bnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxv
Z3VlKGppdCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAgICAg
ICB9KTsKKworICAgICAgICAgICAgICAgIHVpbnQ2NF90IGxocyA9IGludm9rZTx1aW50NjRfdD4o
eG9yNjQsIG4sIG0pOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IHJocyA9IHN0YXRpY19jYXN0
PHVpbnQ2NF90PihuKSBeIChzdGF0aWNfY2FzdDx1aW50NjRfdD4obSkgPj4gYW1vdW50KTsKKyAg
ICAgICAgICAgICAgICBDSEVDS19FUShsaHMsIHJocyk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdE9yTGVmdFNoaWZ0MzIoKQoreworICAgIFZlY3Rvcjxp
bnQzMl90PiBhbW91bnRzID0geyAwLCAxNywgMzEgfTsKKyAgICBmb3IgKGF1dG8gbiA6IGludDMy
T3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbSA6IGludDMyT3BlcmFuZHMoKSkgewor
ICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAg
ICBhdXRvIG9yMzIgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgICAg
ICAgICBqaXQub3JMZWZ0U2hpZnQzMihHUFJJbmZvOjphcmd1bWVudEdQUjAsCisgICAgICAgICAg
ICAgICAgICAgICAgICBHUFJJbmZvOjphcmd1bWVudEdQUjEsCisgICAgICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbW91bnQpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICAgICAgICAg
IGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5yZXQo
KTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIGludDMyX3QgbGhzID0g
aW52b2tlPGludDMyX3Q+KG9yMzIsIG4sIG0pOworICAgICAgICAgICAgICAgIGludDMyX3Qgcmhz
ID0gbiB8IChtIDw8IGFtb3VudCk7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEobGhzLCByaHMp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RPclJpZ2h0
U2hpZnQzMigpCit7CisgICAgVmVjdG9yPGludDMyX3Q+IGFtb3VudHMgPSB7IDAsIDE3LCAzMSB9
OworICAgIGZvciAoYXV0byBuIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0
byBtIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDog
YW1vdW50cykgeworICAgICAgICAgICAgICAgIGF1dG8gb3IzMiA9IGNvbXBpbGUoWz1dIChDQ2Fs
bEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1
ZShqaXQpOworCisgICAgICAgICAgICAgICAgICAgIGppdC5vclJpZ2h0U2hpZnQzMihHUFJJbmZv
Ojphcmd1bWVudEdQUjAsCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjphcmd1bWVu
dEdQUjEsCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihhbW91bnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpOworCisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7Cisg
ICAgICAgICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAg
ICAgICAgICAgICAgIGludDMyX3QgbGhzID0gaW52b2tlPGludDMyX3Q+KG9yMzIsIG4sIG0pOwor
ICAgICAgICAgICAgICAgIGludDMyX3QgcmhzID0gbiB8IChtID4+IGFtb3VudCk7CisgICAgICAg
ICAgICAgICAgQ0hFQ0tfRVEobGhzLCByaHMpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorfQorCit2b2lkIHRlc3RPclVuc2lnbmVkUmlnaHRTaGlmdDMyKCkKK3sKKyAgICBWZWN0
b3I8dWludDMyX3Q+IGFtb3VudHMgPSB7IDAsIDE3LCAzMSB9OworICAgIGZvciAoYXV0byBuIDog
aW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtIDogaW50MzJPcGVyYW5kcygp
KSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAg
ICAgICAgIGF1dG8gb3IzMiA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAg
ICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAg
ICAgICAgICAgIGppdC5vclVuc2lnbmVkUmlnaHRTaGlmdDMyKEdQUkluZm86OmFyZ3VtZW50R1BS
MCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BSMSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFtb3VudCksCisg
ICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAg
ICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgICAg
ICAgICAgaml0LnJldCgpOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAg
dWludDMyX3QgbGhzID0gaW52b2tlPHVpbnQzMl90PihvcjMyLCBuLCBtKTsKKyAgICAgICAgICAg
ICAgICB1aW50MzJfdCByaHMgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4obikgfCAoc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KG0pID4+IGFtb3VudCk7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEobGhz
LCByaHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RP
ckxlZnRTaGlmdDY0KCkKK3sKKyAgICBWZWN0b3I8aW50MzJfdD4gYW1vdW50cyA9IHsgMCwgMzQs
IDYzIH07CisgICAgZm9yIChhdXRvIG4gOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9y
IChhdXRvIG0gOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91
bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgYXV0byBvcjY0ID0gY29tcGlsZShbPV0g
KENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvblBy
b2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgICAgICAgICAgaml0Lm9yTGVmdFNoaWZ0NjQoR1BS
SW5mbzo6YXJndW1lbnRHUFIwLAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6YXJn
dW1lbnRHUFIxLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoYW1vdW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZh
bHVlR1BSKTsKKworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQp
OworICAgICAgICAgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICAgICAgfSk7CisK
KyAgICAgICAgICAgICAgICBpbnQ2NF90IGxocyA9IGludm9rZTxpbnQ2NF90PihvcjY0LCBuLCBt
KTsKKyAgICAgICAgICAgICAgICBpbnQ2NF90IHJocyA9IG4gfCAobSA8PCBhbW91bnQpOworICAg
ICAgICAgICAgICAgIENIRUNLX0VRKGxocywgcmhzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KK30KKwordm9pZCB0ZXN0T3JSaWdodFNoaWZ0NjQoKQoreworICAgIFZlY3Rvcjxp
bnQzMl90PiBhbW91bnRzID0geyAwLCAzNCwgNjMgfTsKKyAgICBmb3IgKGF1dG8gbiA6IGludDY0
T3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbSA6IGludDY0T3BlcmFuZHMoKSkgewor
ICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAg
ICBhdXRvIG9yNjQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgICAg
ICAgICBqaXQub3JSaWdodFNoaWZ0NjQoR1BSSW5mbzo6YXJndW1lbnRHUFIwLAorICAgICAgICAg
ICAgICAgICAgICAgICAgR1BSSW5mbzo6YXJndW1lbnRHUFIxLAorICAgICAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYW1vdW50KSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgICAgICAg
ICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgICAgICAgICBqaXQucmV0
KCk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICBpbnQ2NF90IGxocyA9
IGludm9rZTxpbnQ2NF90PihvcjY0LCBuLCBtKTsKKyAgICAgICAgICAgICAgICBpbnQ2NF90IHJo
cyA9IG4gfCAobSA+PiBhbW91bnQpOworICAgICAgICAgICAgICAgIENIRUNLX0VRKGxocywgcmhz
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0T3JVbnNp
Z25lZFJpZ2h0U2hpZnQ2NCgpCit7CisgICAgVmVjdG9yPHVpbnQzMl90PiBhbW91bnRzID0geyAw
LCAzNCwgNjMgfTsKKyAgICBmb3IgKGF1dG8gbiA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAg
ICBmb3IgKGF1dG8gbSA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRv
IGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBhdXRvIG9yNjQgPSBjb21waWxl
KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0
aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgICAgICAgICBqaXQub3JVbnNpZ25lZFJp
Z2h0U2hpZnQ2NChHUFJJbmZvOjphcmd1bWVudEdQUjAsCisgICAgICAgICAgICAgICAgICAgICAg
ICBHUFJJbmZvOjphcmd1bWVudEdQUjEsCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihhbW91bnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlv
bkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAg
ICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIHVpbnQ2NF90IGxocyA9IGludm9rZTx1aW50
NjRfdD4ob3I2NCwgbiwgbSk7CisgICAgICAgICAgICAgICAgdWludDY0X3QgcmhzID0gc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KG4pIHwgKHN0YXRpY19jYXN0PHVpbnQ2NF90PihtKSA+PiBhbW91bnQp
OworICAgICAgICAgICAgICAgIENIRUNLX0VRKGxocywgcmhzKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KK30KICNlbmRpZgogCiAjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkg
fHwgQ1BVKEFSTTY0KQpAQCAtNDk4MCw2ICs1NDQ4LDI2IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIq
IGZpbHRlcikgV1RGX0lHTk9SRVNfVEhSRUFEX1NBRkVUWV9BTkFMWVNJUwogICAgIFJVTih0ZXN0
U3RvcmVQcmVQb3N0SW5kZXg2NCgpKTsKICAgICBSVU4odGVzdExvYWRQcmVQb3N0SW5kZXgzMigp
KTsKICAgICBSVU4odGVzdExvYWRQcmVQb3N0SW5kZXg2NCgpKTsKKyAgICBSVU4odGVzdEFuZExl
ZnRTaGlmdDMyKCkpOworICAgIFJVTih0ZXN0QW5kUmlnaHRTaGlmdDMyKCkpOworICAgIFJVTih0
ZXN0QW5kVW5zaWduZWRSaWdodFNoaWZ0MzIoKSk7CisgICAgUlVOKHRlc3RBbmRMZWZ0U2hpZnQ2
NCgpKTsKKyAgICBSVU4odGVzdEFuZFJpZ2h0U2hpZnQ2NCgpKTsKKyAgICBSVU4odGVzdEFuZFVu
c2lnbmVkUmlnaHRTaGlmdDY0KCkpOworCisgICAgUlVOKHRlc3RYb3JMZWZ0U2hpZnQzMigpKTsK
KyAgICBSVU4odGVzdFhvclJpZ2h0U2hpZnQzMigpKTsKKyAgICBSVU4odGVzdFhvclVuc2lnbmVk
UmlnaHRTaGlmdDMyKCkpOworICAgIFJVTih0ZXN0WG9yTGVmdFNoaWZ0NjQoKSk7CisgICAgUlVO
KHRlc3RYb3JSaWdodFNoaWZ0NjQoKSk7CisgICAgUlVOKHRlc3RYb3JVbnNpZ25lZFJpZ2h0U2hp
ZnQ2NCgpKTsKKworICAgIFJVTih0ZXN0T3JMZWZ0U2hpZnQzMigpKTsKKyAgICBSVU4odGVzdE9y
UmlnaHRTaGlmdDMyKCkpOworICAgIFJVTih0ZXN0T3JVbnNpZ25lZFJpZ2h0U2hpZnQzMigpKTsK
KyAgICBSVU4odGVzdE9yTGVmdFNoaWZ0NjQoKSk7CisgICAgUlVOKHRlc3RPclJpZ2h0U2hpZnQ2
NCgpKTsKKyAgICBSVU4odGVzdE9yVW5zaWduZWRSaWdodFNoaWZ0NjQoKSk7CiAjZW5kaWYKIAog
I2lmIENQVShBUk02NEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNM
b3dlclRvQWlyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3Bw
CmluZGV4IGViYjAzNTJjYjMwODAzZGJjMWZlODE4ZTM5OTBiYTM3NDU3MDY2MzcuLjc1Mjc1ODNi
N2M5YmI2NmUzOTg0YmZjNzMxODg3ZWEzNGQzYzJmOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0xvd2VyVG9BaXIuY3BwCkBAIC0yNTMyLDYgKzI1MzIsMjMgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIGxvd2VyKCkKICAgICB7CiAgICAgICAgIHVzaW5nIG5hbWVzcGFjZSBBaXI7CisKKyAg
ICAgICAgYXV0byB0cnlBcHBlbmRCaXRPcFdpdGhTaGlmdCA9IFsmXSAoVmFsdWUqIGxlZnQsIFZh
bHVlKiByaWdodCwgQWlyOjpPcGNvZGUgb3Bjb2RlKSAtPiBib29sIHsKKyAgICAgICAgICAgIGlm
ICghaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFyZzo6SW1tLCBBcmc6
OlRtcCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFj
YW5CZUludGVybmFsKHJpZ2h0KSB8fCAhaW1tKHJpZ2h0LT5jaGlsZCgxKSkgfHwgcmlnaHQtPmNo
aWxkKDEpLT5hc0ludCgpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgICAgIHVpbnQ2NF90IGFtb3VudCA9IHJpZ2h0LT5jaGlsZCgxKS0+YXNJbnQoKTsKKyAg
ICAgICAgICAgIHVpbnQ2NF90IGRhdGFzaXplID0gbV92YWx1ZS0+dHlwZSgpID09IEludDMyID8g
MzIgOiA2NDsKKyAgICAgICAgICAgIGlmIChhbW91bnQgPj0gZGF0YXNpemUpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAobGVm
dCksIHRtcChyaWdodC0+Y2hpbGQoMCkpLCBpbW0ocmlnaHQtPmNoaWxkKDEpKSwgdG1wKG1fdmFs
dWUpKTsKKyAgICAgICAgICAgIGNvbW1pdEludGVybmFsKHJpZ2h0KTsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9OworCiAgICAgICAgIHN3aXRjaCAobV92YWx1ZS0+b3Bjb2Rl
KCkpIHsKICAgICAgICAgY2FzZSBCMzo6Tm9wOiB7CiAgICAgICAgICAgICAvLyBZZXMsIHdlIHdp
bGwgdG90YWxseSBzZWUgTm9wJ3MgYmVjYXVzZSBzb21lIHBoYXNlcyB3aWxsIHJlcGxhY2VXaXRo
Tm9wKCkgaW5zdGVhZCBvZgpAQCAtMjcwNCwyNSArMjcyMSwxMyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgaWYgKHRyeU11bHRpcGx5QWRkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0g
ICAgICAgICAgICAvLyBhZGQtd2l0aC1zaGlmdCBQYXR0ZXJuOiBuICsgKG0gU2hpZnRUeXBlIGFt
b3VudCkKKyAgICAgICAgICAgIC8vIGFkZC13aXRoLXNoaWZ0IFBhdHRlcm46IGxlZnQgKyAocmln
aHQgU2hpZnRUeXBlIGFtb3VudCkKICAgICAgICAgICAgIGF1dG8gdHJ5QXBwZW5kQWRkV2l0aFNo
aWZ0ID0gWyZdIChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KSAtPiBib29sIHsKLSAgICAgICAg
ICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBvcGNvZGVCYXNlZE9uU2hpZnRLaW5kKHJpZ2h0
LT5vcGNvZGUoKSwgCi0gICAgICAgICAgICAgICAgICAgIEFkZExlZnRTaGlmdDMyLCBBZGRMZWZ0
U2hpZnQ2NCwgCi0gICAgICAgICAgICAgICAgICAgIEFkZFJpZ2h0U2hpZnQzMiwgQWRkUmlnaHRT
aGlmdDY0LCAKKyAgICAgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBvcGNvZGVCYXNl
ZE9uU2hpZnRLaW5kKHJpZ2h0LT5vcGNvZGUoKSwKKyAgICAgICAgICAgICAgICAgICAgQWRkTGVm
dFNoaWZ0MzIsIEFkZExlZnRTaGlmdDY0LAorICAgICAgICAgICAgICAgICAgICBBZGRSaWdodFNo
aWZ0MzIsIEFkZFJpZ2h0U2hpZnQ2NCwKICAgICAgICAgICAgICAgICAgICAgQWRkVW5zaWduZWRS
aWdodFNoaWZ0MzIsIEFkZFVuc2lnbmVkUmlnaHRTaGlmdDY0KTsKLSAgICAgICAgICAgICAgICBp
ZiAoIWlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OkltbSwgQXJn
OjpUbXApKSAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
ICAgIGlmICghY2FuQmVJbnRlcm5hbChyaWdodCkgfHwgIWltbShyaWdodC0+Y2hpbGQoMSkpIHx8
IHJpZ2h0LT5jaGlsZCgxKS0+YXNJbnQoKSA8IDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgICAgICAgICAgICAgIHVpbnQ2NF90IGFtb3VudCA9IHJpZ2h0LT5jaGls
ZCgxKS0+YXNJbnQoKTsKLSAgICAgICAgICAgICAgICB1aW50NjRfdCBkYXRhc2l6ZSA9IG1fdmFs
dWUtPnR5cGUoKSA9PSBJbnQzMiA/IDMyIDogNjQ7Ci0gICAgICAgICAgICAgICAgaWYgKGFtb3Vu
dCA+PSBkYXRhc2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
ICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKGxlZnQpLCB0bXAocmlnaHQtPmNoaWxkKDAp
KSwgaW1tKHJpZ2h0LT5jaGlsZCgxKSksIHRtcChtX3ZhbHVlKSk7Ci0gICAgICAgICAgICAgICAg
Y29tbWl0SW50ZXJuYWwocmlnaHQpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgICAgIHJldHVybiB0cnlBcHBlbmRCaXRPcFdpdGhTaGlmdChsZWZ0LCByaWdodCwg
b3Bjb2RlKTsKICAgICAgICAgICAgIH07CiAKICAgICAgICAgICAgIGlmICh0cnlBcHBlbmRBZGRX
aXRoU2hpZnQobGVmdCwgcmlnaHQpIHx8IHRyeUFwcGVuZEFkZFdpdGhTaGlmdChyaWdodCwgbGVm
dCkpCkBAIC0yNzc5LDI4ICsyNzg0LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAodHJ5
QXBwZW5kTXVsdGlwbHlTdWIoKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAg
ICAgIC8vIHN1Yi13aXRoLXNoaWZ0IFBhdHRlcm46IG4gLSAobSBTaGlmdFR5cGUgYW1vdW50KQot
ICAgICAgICAgICAgYXV0byB0cnlBcHBlbmRTdWJBbmRTaGlmdCA9IFsmXSAoKSAtPiBib29sIHsK
LSAgICAgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBvcGNvZGVCYXNlZE9uU2hpZnRL
aW5kKHJpZ2h0LT5vcGNvZGUoKSwgCi0gICAgICAgICAgICAgICAgICAgIFN1YkxlZnRTaGlmdDMy
LCBTdWJMZWZ0U2hpZnQ2NCwgCi0gICAgICAgICAgICAgICAgICAgIFN1YlJpZ2h0U2hpZnQzMiwg
U3ViUmlnaHRTaGlmdDY0LCAKLSAgICAgICAgICAgICAgICAgICAgU3ViVW5zaWduZWRSaWdodFNo
aWZ0MzIsIFN1YlVuc2lnbmVkUmlnaHRTaGlmdDY0KTsKLSAgICAgICAgICAgICAgICBpZiAoIWlz
VmFsaWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OkltbSwgQXJnOjpUbXAp
KSAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGlm
ICghY2FuQmVJbnRlcm5hbChyaWdodCkgfHwgIWltbShyaWdodC0+Y2hpbGQoMSkpIHx8IHJpZ2h0
LT5jaGlsZCgxKS0+YXNJbnQoKSA8IDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgICAgICAgICAgICAgIHVpbnQ2NF90IGFtb3VudCA9IHJpZ2h0LT5jaGlsZCgxKS0+
YXNJbnQoKTsKLSAgICAgICAgICAgICAgICB1aW50NjRfdCBkYXRhc2l6ZSA9IG1fdmFsdWUtPnR5
cGUoKSA9PSBJbnQzMiA/IDMyIDogNjQ7Ci0gICAgICAgICAgICAgICAgaWYgKGFtb3VudCA+PSBk
YXRhc2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAg
ICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKGxlZnQpLCB0bXAocmlnaHQtPmNoaWxkKDApKSwgaW1t
KHJpZ2h0LT5jaGlsZCgxKSksIHRtcChtX3ZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgY29tbWl0
SW50ZXJuYWwocmlnaHQpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAg
ICAgfTsKLQotICAgICAgICAgICAgaWYgKHRyeUFwcGVuZFN1YkFuZFNoaWZ0KCkpCisgICAgICAg
ICAgICAvLyBzdWItd2l0aC1zaGlmdCBQYXR0ZXJuOiBsZWZ0IC0gKHJpZ2h0IFNoaWZ0VHlwZSBh
bW91bnQpCisgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBvcGNvZGVCYXNlZE9uU2hp
ZnRLaW5kKHJpZ2h0LT5vcGNvZGUoKSwKKyAgICAgICAgICAgICAgICBTdWJMZWZ0U2hpZnQzMiwg
U3ViTGVmdFNoaWZ0NjQsCisgICAgICAgICAgICAgICAgU3ViUmlnaHRTaGlmdDMyLCBTdWJSaWdo
dFNoaWZ0NjQsCisgICAgICAgICAgICAgICAgU3ViVW5zaWduZWRSaWdodFNoaWZ0MzIsIFN1YlVu
c2lnbmVkUmlnaHRTaGlmdDY0KTsKKyAgICAgICAgICAgIGlmICh0cnlBcHBlbmRCaXRPcFdpdGhT
aGlmdChsZWZ0LCByaWdodCwgb3Bjb2RlKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAg
ICAgICAgICAgIGFwcGVuZEJpbk9wPFN1YjMyLCBTdWI2NCwgU3ViRG91YmxlLCBTdWJGbG9hdD4o
bGVmdCwgcmlnaHQpOwpAQCAtMjk4OCw2ICsyOTc3LDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBpZiAodHJ5QXBwZW5kQklDKGxlZnQsIHJpZ2h0KSB8fCB0cnlBcHBlbmRCSUMocmlnaHQsIGxl
ZnQpKQogICAgICAgICAgICAgICAgIHJldHVybjsKIAorICAgICAgICAgICAgLy8gYW5kLXdpdGgt
c2hpZnQgUGF0dGVybjogbGVmdCAmIChyaWdodCBTaGlmdFR5cGUgYW1vdW50KQorICAgICAgICAg
ICAgYXV0byB0cnlBcHBlbmRBbmRXaXRoU2hpZnQgPSBbJl0gKFZhbHVlKiBsZWZ0LCBWYWx1ZSog
cmlnaHQpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IG9w
Y29kZUJhc2VkT25TaGlmdEtpbmQocmlnaHQtPm9wY29kZSgpLAorICAgICAgICAgICAgICAgICAg
ICBBbmRMZWZ0U2hpZnQzMiwgQW5kTGVmdFNoaWZ0NjQsCisgICAgICAgICAgICAgICAgICAgIEFu
ZFJpZ2h0U2hpZnQzMiwgQW5kUmlnaHRTaGlmdDY0LAorICAgICAgICAgICAgICAgICAgICBBbmRV
bnNpZ25lZFJpZ2h0U2hpZnQzMiwgQW5kVW5zaWduZWRSaWdodFNoaWZ0NjQpOworICAgICAgICAg
ICAgICAgIHJldHVybiB0cnlBcHBlbmRCaXRPcFdpdGhTaGlmdChsZWZ0LCByaWdodCwgb3Bjb2Rl
KTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGlmICh0cnlBcHBlbmRBbmRXaXRoU2hp
ZnQobGVmdCwgcmlnaHQpIHx8IHRyeUFwcGVuZEFuZFdpdGhTaGlmdChyaWdodCwgbGVmdCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgICAgICBhcHBlbmRCaW5PcDxBbmQzMiwg
QW5kNjQsIEFuZERvdWJsZSwgQW5kRmxvYXQsIENvbW11dGF0aXZlPihsZWZ0LCByaWdodCk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTMxNTUsNiArMzE1NiwxOCBAQCBwcml2
YXRlOgogICAgICAgICAgICAgaWYgKHRyeUFwcGVuZE9STihsZWZ0LCByaWdodCkgfHwgdHJ5QXBw
ZW5kT1JOKHJpZ2h0LCBsZWZ0KSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKKyAgICAgICAg
ICAgIC8vIG9yci13aXRoLXNoaWZ0IFBhdHRlcm46IGxlZnQgfCAocmlnaHQgU2hpZnRUeXBlIGFt
b3VudCkKKyAgICAgICAgICAgIGF1dG8gdHJ5QXBwZW5kT3JXaXRoU2hpZnQgPSBbJl0gKFZhbHVl
KiBsZWZ0LCBWYWx1ZSogcmlnaHQpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIEFpcjo6T3Bj
b2RlIG9wY29kZSA9IG9wY29kZUJhc2VkT25TaGlmdEtpbmQocmlnaHQtPm9wY29kZSgpLAorICAg
ICAgICAgICAgICAgICAgICBPckxlZnRTaGlmdDMyLCBPckxlZnRTaGlmdDY0LAorICAgICAgICAg
ICAgICAgICAgICBPclJpZ2h0U2hpZnQzMiwgT3JSaWdodFNoaWZ0NjQsCisgICAgICAgICAgICAg
ICAgICAgIE9yVW5zaWduZWRSaWdodFNoaWZ0MzIsIE9yVW5zaWduZWRSaWdodFNoaWZ0NjQpOwor
ICAgICAgICAgICAgICAgIHJldHVybiB0cnlBcHBlbmRCaXRPcFdpdGhTaGlmdChsZWZ0LCByaWdo
dCwgb3Bjb2RlKTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGlmICh0cnlBcHBlbmRP
cldpdGhTaGlmdChsZWZ0LCByaWdodCkgfHwgdHJ5QXBwZW5kT3JXaXRoU2hpZnQocmlnaHQsIGxl
ZnQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICAgICAgYXBwZW5kQmluT3A8
T3IzMiwgT3I2NCwgT3JEb3VibGUsIE9yRmxvYXQsIENvbW11dGF0aXZlPihsZWZ0LCByaWdodCk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTMyMjUsNiArMzIzOCwxOCBAQCBw
cml2YXRlOgogICAgICAgICAgICAgaWYgKHRyeUFwcGVuZEVPTihsZWZ0LCByaWdodCkgfHwgdHJ5
QXBwZW5kRU9OKHJpZ2h0LCBsZWZ0KSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKKyAgICAg
ICAgICAgIC8vIGVvci13aXRoLXNoaWZ0IFBhdHRlcm46IGxlZnQgXiAocmlnaHQgU2hpZnRUeXBl
IGFtb3VudCkKKyAgICAgICAgICAgIGF1dG8gdHJ5QXBwZW5kWG9yV2l0aFNoaWZ0ID0gWyZdIChW
YWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICBBaXI6
Ok9wY29kZSBvcGNvZGUgPSBvcGNvZGVCYXNlZE9uU2hpZnRLaW5kKHJpZ2h0LT5vcGNvZGUoKSwK
KyAgICAgICAgICAgICAgICAgICAgWG9yTGVmdFNoaWZ0MzIsIFhvckxlZnRTaGlmdDY0LAorICAg
ICAgICAgICAgICAgICAgICBYb3JSaWdodFNoaWZ0MzIsIFhvclJpZ2h0U2hpZnQ2NCwKKyAgICAg
ICAgICAgICAgICAgICAgWG9yVW5zaWduZWRSaWdodFNoaWZ0MzIsIFhvclVuc2lnbmVkUmlnaHRT
aGlmdDY0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ5QXBwZW5kQml0T3BXaXRoU2hpZnQo
bGVmdCwgcmlnaHQsIG9wY29kZSk7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBpZiAo
dHJ5QXBwZW5kWG9yV2l0aFNoaWZ0KGxlZnQsIHJpZ2h0KSB8fCB0cnlBcHBlbmRYb3JXaXRoU2hp
ZnQocmlnaHQsIGxlZnQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICAgICAg
YXBwZW5kQmluT3A8WG9yMzIsIFhvcjY0LCBYb3JEb3VibGUsIFhvckZsb2F0LCBDb21tdXRhdGl2
ZT4obGVmdCwgcmlnaHQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwppbmRleCA0OWZlZDFh
YWExOWFmNmRkY2Q5MmMzMzlmNzBiNTc2ZDBkMzk1ZGRlLi45YzhmZTQ4ZGIwM2JhMzFhMzU4ZDRk
OTZlNzljYzNlZjU2N2FlMGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpck9wY29kZS5vcGNvZGVzCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyT3Bjb2RlLm9wY29kZXMKQEAgLTk1NSw2ICs5NTUsNjAgQEAgYXJtNjQ6IFN1YlJpZ2h0U2hp
ZnQ2NCBVOkc6NjQsIFU6Rzo2NCwgVTpHOjY0LCBEOkc6NjQKIGFybTY0OiBTdWJVbnNpZ25lZFJp
Z2h0U2hpZnQ2NCBVOkc6NjQsIFU6Rzo2NCwgVTpHOjY0LCBEOkc6NjQKICAgICBUbXAsIFRtcCwg
SW1tLCBUbXAKIAorYXJtNjQ6IEFuZExlZnRTaGlmdDMyIFU6RzozMiwgVTpHOjMyLCBVOkc6MzIs
IFpEOkc6MzIKKyAgICBUbXAsIFRtcCwgSW1tLCBUbXAKKworYXJtNjQ6IEFuZFJpZ2h0U2hpZnQz
MiBVOkc6MzIsIFU6RzozMiwgVTpHOjMyLCBaRDpHOjMyCisgICAgVG1wLCBUbXAsIEltbSwgVG1w
CisKK2FybTY0OiBBbmRVbnNpZ25lZFJpZ2h0U2hpZnQzMiBVOkc6MzIsIFU6RzozMiwgVTpHOjMy
LCBaRDpHOjMyCisgICAgVG1wLCBUbXAsIEltbSwgVG1wCisKK2FybTY0OiBBbmRMZWZ0U2hpZnQ2
NCBVOkc6NjQsIFU6Rzo2NCwgVTpHOjY0LCBEOkc6NjQKKyAgICBUbXAsIFRtcCwgSW1tLCBUbXAK
KworYXJtNjQ6IEFuZFJpZ2h0U2hpZnQ2NCBVOkc6NjQsIFU6Rzo2NCwgVTpHOjY0LCBEOkc6NjQK
KyAgICBUbXAsIFRtcCwgSW1tLCBUbXAKKworYXJtNjQ6IEFuZFVuc2lnbmVkUmlnaHRTaGlmdDY0
IFU6Rzo2NCwgVTpHOjY0LCBVOkc6NjQsIEQ6Rzo2NAorICAgIFRtcCwgVG1wLCBJbW0sIFRtcAor
Cithcm02NDogWG9yTGVmdFNoaWZ0MzIgVTpHOjMyLCBVOkc6MzIsIFU6RzozMiwgWkQ6RzozMgor
ICAgIFRtcCwgVG1wLCBJbW0sIFRtcAorCithcm02NDogWG9yUmlnaHRTaGlmdDMyIFU6RzozMiwg
VTpHOjMyLCBVOkc6MzIsIFpEOkc6MzIKKyAgICBUbXAsIFRtcCwgSW1tLCBUbXAKKworYXJtNjQ6
IFhvclVuc2lnbmVkUmlnaHRTaGlmdDMyIFU6RzozMiwgVTpHOjMyLCBVOkc6MzIsIFpEOkc6MzIK
KyAgICBUbXAsIFRtcCwgSW1tLCBUbXAKKworYXJtNjQ6IFhvckxlZnRTaGlmdDY0IFU6Rzo2NCwg
VTpHOjY0LCBVOkc6NjQsIEQ6Rzo2NAorICAgIFRtcCwgVG1wLCBJbW0sIFRtcAorCithcm02NDog
WG9yUmlnaHRTaGlmdDY0IFU6Rzo2NCwgVTpHOjY0LCBVOkc6NjQsIEQ6Rzo2NAorICAgIFRtcCwg
VG1wLCBJbW0sIFRtcAorCithcm02NDogWG9yVW5zaWduZWRSaWdodFNoaWZ0NjQgVTpHOjY0LCBV
Okc6NjQsIFU6Rzo2NCwgRDpHOjY0CisgICAgVG1wLCBUbXAsIEltbSwgVG1wCisKK2FybTY0OiBP
ckxlZnRTaGlmdDMyIFU6RzozMiwgVTpHOjMyLCBVOkc6MzIsIFpEOkc6MzIKKyAgICBUbXAsIFRt
cCwgSW1tLCBUbXAKKworYXJtNjQ6IE9yUmlnaHRTaGlmdDMyIFU6RzozMiwgVTpHOjMyLCBVOkc6
MzIsIFpEOkc6MzIKKyAgICBUbXAsIFRtcCwgSW1tLCBUbXAKKworYXJtNjQ6IE9yVW5zaWduZWRS
aWdodFNoaWZ0MzIgVTpHOjMyLCBVOkc6MzIsIFU6RzozMiwgWkQ6RzozMgorICAgIFRtcCwgVG1w
LCBJbW0sIFRtcAorCithcm02NDogT3JMZWZ0U2hpZnQ2NCBVOkc6NjQsIFU6Rzo2NCwgVTpHOjY0
LCBEOkc6NjQKKyAgICBUbXAsIFRtcCwgSW1tLCBUbXAKKworYXJtNjQ6IE9yUmlnaHRTaGlmdDY0
IFU6Rzo2NCwgVTpHOjY0LCBVOkc6NjQsIEQ6Rzo2NAorICAgIFRtcCwgVG1wLCBJbW0sIFRtcAor
Cithcm02NDogT3JVbnNpZ25lZFJpZ2h0U2hpZnQ2NCBVOkc6NjQsIFU6Rzo2NCwgVTpHOjY0LCBE
Okc6NjQKKyAgICBUbXAsIFRtcCwgSW1tLCBUbXAKKwogIyBUaGUgZmlyc3Qgb3BlcmFuZCBpcyBy
YXguCiAjIEZJWE1FOiBUaGlzIGZvcm11bGF0aW9uIG1lYW5zIHRoYXQgdGhlIGJvb2xlYW4gcmVz
dWx0IGNhbm5vdCBiZSBwdXQgaW4gZWF4LCBldmVuIHRob3VnaCBhbGwgdXNlcnMKICMgb2YgdGhp
cyB3b3VsZCBiZSBPSyB3aXRoIHRoYXQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvdGVzdGIzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKaW5kZXgg
NzIxZWIzYWRkNjI3NDhlMmZiMDJkZGY0MjU1N2NjNTlkNWQ4ODBlYi4uMGEyY2YyMzY0NzM3Y2Mz
YzMwN2IwOGY0ODU4ZDY1YjExZmNiOGFmMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL3Rlc3RiMy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaApA
QCAtNDcxLDYgKzQ3MSwyOCBAQCB2b2lkIHRlc3RTdWJXaXRoVW5zaWduZWRSaWdodFNoaWZ0MzIo
KTsKIHZvaWQgdGVzdFN1YldpdGhMZWZ0U2hpZnQ2NCgpOwogdm9pZCB0ZXN0U3ViV2l0aFJpZ2h0
U2hpZnQ2NCgpOwogdm9pZCB0ZXN0U3ViV2l0aFVuc2lnbmVkUmlnaHRTaGlmdDY0KCk7CisKK3Zv
aWQgdGVzdEFuZExlZnRTaGlmdDMyKCk7Cit2b2lkIHRlc3RBbmRSaWdodFNoaWZ0MzIoKTsKK3Zv
aWQgdGVzdEFuZFVuc2lnbmVkUmlnaHRTaGlmdDMyKCk7Cit2b2lkIHRlc3RBbmRMZWZ0U2hpZnQ2
NCgpOwordm9pZCB0ZXN0QW5kUmlnaHRTaGlmdDY0KCk7Cit2b2lkIHRlc3RBbmRVbnNpZ25lZFJp
Z2h0U2hpZnQ2NCgpOworCit2b2lkIHRlc3RYb3JMZWZ0U2hpZnQzMigpOwordm9pZCB0ZXN0WG9y
UmlnaHRTaGlmdDMyKCk7Cit2b2lkIHRlc3RYb3JVbnNpZ25lZFJpZ2h0U2hpZnQzMigpOwordm9p
ZCB0ZXN0WG9yTGVmdFNoaWZ0NjQoKTsKK3ZvaWQgdGVzdFhvclJpZ2h0U2hpZnQ2NCgpOwordm9p
ZCB0ZXN0WG9yVW5zaWduZWRSaWdodFNoaWZ0NjQoKTsKKwordm9pZCB0ZXN0T3JMZWZ0U2hpZnQz
MigpOwordm9pZCB0ZXN0T3JSaWdodFNoaWZ0MzIoKTsKK3ZvaWQgdGVzdE9yVW5zaWduZWRSaWdo
dFNoaWZ0MzIoKTsKK3ZvaWQgdGVzdE9yTGVmdFNoaWZ0NjQoKTsKK3ZvaWQgdGVzdE9yUmlnaHRT
aGlmdDY0KCk7Cit2b2lkIHRlc3RPclVuc2lnbmVkUmlnaHRTaGlmdDY0KCk7CisKIHZvaWQgdGVz
dFNlbGVjdENvbXBhcmVEb3VibGUoKTsKIHZvaWQgdGVzdFNlbGVjdENvbXBhcmVGbG9hdChmbG9h
dCwgZmxvYXQpOwogdm9pZCB0ZXN0U2VsZWN0Q29tcGFyZUZsb2F0VG9Eb3VibGUoZmxvYXQsIGZs
b2F0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMi5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzIuY3BwCmluZGV4IDI0YjNmODM4NzJh
MGZjYmU2OTM0ZjNiYTBjOTEwN2FjYTcxNDAxNTQuLmZhNjRjOGIzYzI2ZjJlYTdjOTA3OTU5ODE2
ZDFmNjBlNjk5YjEzMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0
YjNfMi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18yLmNwcApAQCAt
NTQ2MSw2ICs1NDYxLDc2MiBAQCB2b2lkIHRlc3RTdWJXaXRoVW5zaWduZWRSaWdodFNoaWZ0NjQo
KQogICAgIH0KIH0KIAordm9pZCB0ZXN0QW5kTGVmdFNoaWZ0MzIoKQoreworICAgIGlmIChKU0M6
Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisgICAg
VmVjdG9yPGludDMyX3Q+IGFtb3VudHMgPSB7IDEsIDE3LCAzMSB9OworCisgICAgLy8gVGVzdCBQ
YXR0ZXJuOiBkID0gbiAmIChtIDw8IGFtb3VudCkKKyAgICBhdXRvIHRlc3QgPSBbJl0gKGludDMy
X3QgbiwgaW50MzJfdCBtLCBpbnQzMl90IGFtb3VudCkgLT4gaW50MzJfdCB7CisgICAgICAgIFBy
b2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygp
OworCisgICAgICAgIFZhbHVlKiBuVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAg
ICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKSk7CisgICAgICAgIFZhbHVlKiBtVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAor
ICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIxKSk7CisgICAgICAgIFZhbHVlKiBhbW91bnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxD
b25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBhbW91bnQpOworCisgICAgICAgIFZhbHVlKiBz
aGlmdFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTaGwsIE9yaWdpbigpLCBt
VmFsdWUsIGFtb3VudFZhbHVlKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVl
KAorICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdEFuZCwgT3JpZ2luKCksIG5WYWx1ZSwgc2hpZnRW
YWx1ZSkpOworCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAg
ICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyByZWdleCgiLiphbmQu
KiwuKiwuKiwuKmxzbCAjIik7CisgICAgICAgICAgICByZWdleCArPSBzdGQ6OnRvX3N0cmluZyhh
bW91bnQpICsgIi4qIjsKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCBy
ZWdleC5jX3N0cigpLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW52b2tlPGlu
dDMyX3Q+KCpjb2RlLCBuLCBtKTsKKyAgICB9OworCisgICAgZm9yIChhdXRvIG5PcGVyYW5kIDog
aW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtT3BlcmFuZCA6IGludDMyT3Bl
cmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAg
ICAgICAgICAgICAgICBpbnQzMl90IG4gPSBuT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAg
ICBpbnQzMl90IG0gPSBtT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUSh0
ZXN0KG4sIG0sIGFtb3VudCksIG4gJiAobSA8PCBhbW91bnQpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0QW5kUmlnaHRTaGlmdDMyKCkKK3sKKyAgICBp
ZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJu
OworICAgIFZlY3RvcjxpbnQzMl90PiBhbW91bnRzID0geyAxLCAxNywgMzEgfTsKKworICAgIC8v
IFRlc3QgUGF0dGVybjogZCA9IG4gJiAobSA+PiBhbW91bnQpCisgICAgYXV0byB0ZXN0ID0gWyZd
IChpbnQzMl90IG4sIGludDMyX3QgbSwgaW50MzJfdCBhbW91bnQpIC0+IGludDMyX3QgeworICAg
ICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRk
QmxvY2soKTsKKworICAgICAgICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVl
PigKKyAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290
LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFy
Z3VtZW50R1BSMCkpOworICAgICAgICBWYWx1ZSogbVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZh
bHVlPigKKyAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwgCisgICAgICAgICAgICBy
b290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86
OmFyZ3VtZW50R1BSMSkpOworICAgICAgICBWYWx1ZSogYW1vdW50VmFsdWUgPSByb290LT5hcHBl
bmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYW1vdW50KTsKKworICAgICAgICBW
YWx1ZSogc2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU1NociwgT3Jp
Z2luKCksIG1WYWx1ZSwgYW1vdW50VmFsdWUpOworICAgICAgICByb290LT5hcHBlbmROZXdDb250
cm9sVmFsdWUoCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCAKKyAgICAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgblZhbHVl
LCBzaGlmdFZhbHVlKSk7CisKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7
CisgICAgICAgIGlmIChpc0FSTTY0KCkpIHsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHJlZ2V4
KCIuKmFuZC4qLC4qLC4qLC4qYXNyICMiKTsKKyAgICAgICAgICAgIHJlZ2V4ICs9IHN0ZDo6dG9f
c3RyaW5nKGFtb3VudCkgKyAiLioiOworICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24o
KmNvZGUsIHJlZ2V4LmNfc3RyKCksIHRydWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBp
bnZva2U8aW50MzJfdD4oKmNvZGUsIG4sIG0pOworICAgIH07CisKKyAgICBmb3IgKGF1dG8gbk9w
ZXJhbmQgOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG1PcGVyYW5kIDog
aW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50
cykgeworICAgICAgICAgICAgICAgIGludDMyX3QgbiA9IG5PcGVyYW5kLnZhbHVlOworICAgICAg
ICAgICAgICAgIGludDMyX3QgbSA9IG1PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIENI
RUNLX0VRKHRlc3QobiwgbSwgYW1vdW50KSwgbiAmIChtID4+IGFtb3VudCkpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RBbmRVbnNpZ25lZFJpZ2h0U2hp
ZnQzMigpCit7CisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIp
CisgICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8dWludDMyX3Q+IGFtb3VudHMgPSB7IDEsIDE3
LCAzMSB9OworCisgICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0gbiAmIChtID4+IGFtb3VudCkKKyAg
ICBhdXRvIHRlc3QgPSBbJl0gKHVpbnQzMl90IG4sIHVpbnQzMl90IG0sIHVpbnQzMl90IGFtb3Vu
dCkgLT4gdWludDMyX3QgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNC
bG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgICAgICBWYWx1ZSogblZhbHVlID0g
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4o
KSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICBWYWx1ZSogbVZhbHVl
ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmln
aW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkpOworICAgICAgICBWYWx1ZSogYW1v
dW50VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
YW1vdW50KTsKKworICAgICAgICBWYWx1ZSogc2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4ocHJvYywgWlNociwgT3JpZ2luKCksIG1WYWx1ZSwgYW1vdW50VmFsdWUpOworICAgICAg
ICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4s
IE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0
QW5kLCBPcmlnaW4oKSwgblZhbHVlLCBzaGlmdFZhbHVlKSk7CisKKyAgICAgICAgYXV0byBjb2Rl
ID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkpIHsKKyAgICAgICAg
ICAgIHN0ZDo6c3RyaW5nIHJlZ2V4KCIuKmFuZC4qLC4qLC4qLC4qbHNyICMiKTsKKyAgICAgICAg
ICAgIHJlZ2V4ICs9IHN0ZDo6dG9fc3RyaW5nKGFtb3VudCkgKyAiLioiOworICAgICAgICAgICAg
Y2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsIHJlZ2V4LmNfc3RyKCksIHRydWUpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBpbnZva2U8dWludDMyX3Q+KCpjb2RlLCBuLCBtKTsKKyAgICB9
OworCisgICAgZm9yIChhdXRvIG5PcGVyYW5kIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAg
IGZvciAoYXV0byBtT3BlcmFuZCA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9y
IChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBuID0g
bk9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgdWludDMyX3QgbSA9IG1PcGVyYW5kLnZh
bHVlOworICAgICAgICAgICAgICAgIENIRUNLX0VRKHRlc3QobiwgbSwgYW1vdW50KSwgbiAmICht
ID4+IGFtb3VudCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lk
IHRlc3RBbmRMZWZ0U2hpZnQ2NCgpCit7CisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIz
T3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8aW50MzJfdD4gYW1v
dW50cyA9IHsgMSwgMzQsIDYzIH07CisKKyAgICAvLyBUZXN0IFBhdHRlcm46IGQgPSBuICYgKG0g
PDwgYW1vdW50KQorICAgIGF1dG8gdGVzdCA9IFsmXSAoaW50NjRfdCBuLCBpbnQ2NF90IG0sIGlu
dDMyX3QgYW1vdW50KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAg
ICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUq
IG5WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgVmFsdWUqIG1WYWx1ZSA9IHJvb3Qt
PmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIxKTsKKyAgICAgICAgVmFsdWUqIGFtb3VudFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3
PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGFtb3VudCk7CisKKyAgICAgICAgVmFsdWUq
IHNoaWZ0VmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNobCwgT3JpZ2luKCks
IG1WYWx1ZSwgYW1vdW50VmFsdWUpOworICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFs
dWUoCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgblZhbHVlLCBzaGlm
dFZhbHVlKSk7CisKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAg
ICAgIGlmIChpc0FSTTY0KCkpIHsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHJlZ2V4KCIuKmFu
ZC4qLC4qLC4qLC4qbHNsICMiKTsKKyAgICAgICAgICAgIHJlZ2V4ICs9IHN0ZDo6dG9fc3RyaW5n
KGFtb3VudCkgKyAiLioiOworICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUs
IHJlZ2V4LmNfc3RyKCksIHRydWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBpbnZva2U8
aW50NjRfdD4oKmNvZGUsIG4sIG0pOworICAgIH07CisKKyAgICBmb3IgKGF1dG8gbk9wZXJhbmQg
OiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG1PcGVyYW5kIDogaW50NjRP
cGVyYW5kcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgewor
ICAgICAgICAgICAgICAgIGludDY0X3QgbiA9IG5PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAg
ICAgIGludDY0X3QgbSA9IG1PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIENIRUNLX0VR
KHRlc3QobiwgbSwgYW1vdW50KSwgbiAmIChtIDw8IGFtb3VudCkpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RBbmRSaWdodFNoaWZ0NjQoKQoreworICAg
IGlmIChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1
cm47CisgICAgVmVjdG9yPGludDMyX3Q+IGFtb3VudHMgPSB7IDEsIDM0LCA2MyB9OworCisgICAg
Ly8gVGVzdCBQYXR0ZXJuOiBkID0gbiAmIChtID4+IGFtb3VudCkKKyAgICBhdXRvIHRlc3QgPSBb
Jl0gKGludDY0X3QgbiwgaW50NjRfdCBtLCBpbnQzMl90IGFtb3VudCkgLT4gaW50NjRfdCB7Cisg
ICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5h
ZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBuVmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJn
dW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Cisg
ICAgICAgIFZhbHVlKiBtVmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIFZhbHVlKiBh
bW91bnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBhbW91bnQpOworCisgICAgICAgIFZhbHVlKiBzaGlmdFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPihwcm9jLCBTU2hyLCBPcmlnaW4oKSwgbVZhbHVlLCBhbW91bnRWYWx1ZSk7CisgICAg
ICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgICAgIHByb2MsIFJldHVy
biwgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBC
aXRBbmQsIE9yaWdpbigpLCBuVmFsdWUsIHNoaWZ0VmFsdWUpKTsKKworICAgICAgICBhdXRvIGNv
ZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkgeworICAgICAg
ICAgICAgc3RkOjpzdHJpbmcgcmVnZXgoIi4qYW5kLiosLiosLiosLiphc3IgIyIpOworICAgICAg
ICAgICAgcmVnZXggKz0gc3RkOjp0b19zdHJpbmcoYW1vdW50KSArICIuKiI7CisgICAgICAgICAg
ICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgcmVnZXguY19zdHIoKSwgdHJ1ZSk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQ2NF90PigqY29kZSwgbiwgbSk7CisgICAg
fTsKKworICAgIGZvciAoYXV0byBuT3BlcmFuZCA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAg
ICBmb3IgKGF1dG8gbU9wZXJhbmQgOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZv
ciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgaW50NjRfdCBuID0g
bk9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgaW50NjRfdCBtID0gbU9wZXJhbmQudmFs
dWU7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEodGVzdChuLCBtLCBhbW91bnQpLCBuICYgKG0g
Pj4gYW1vdW50KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQg
dGVzdEFuZFVuc2lnbmVkUmlnaHRTaGlmdDY0KCkKK3sKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpk
ZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIFZlY3Rvcjx1aW50
MzJfdD4gYW1vdW50cyA9IHsgMSwgMTcsIDMxIH07CisKKyAgICAvLyBUZXN0IFBhdHRlcm46IGQg
PSBuICYgKG0gPj4gYW1vdW50KQorICAgIGF1dG8gdGVzdCA9IFsmXSAodWludDY0X3QgbiwgdWlu
dDY0X3QgbSwgdWludDMyX3QgYW1vdW50KSAtPiB1aW50NjRfdCB7CisgICAgICAgIFByb2NlZHVy
ZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisg
ICAgICAgIFZhbHVlKiBuVmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIFZhbHVlKiBt
VmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIFZhbHVlKiBhbW91bnRWYWx1ZSA9IHJv
b3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBhbW91bnQpOworCisg
ICAgICAgIFZhbHVlKiBzaGlmdFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBa
U2hyLCBPcmlnaW4oKSwgbVZhbHVlLCBhbW91bnRWYWx1ZSk7CisgICAgICAgIHJvb3QtPmFwcGVu
ZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksIAor
ICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRBbmQsIE9yaWdpbigp
LCBuVmFsdWUsIHNoaWZ0VmFsdWUpKTsKKworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJv
Yyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkgeworICAgICAgICAgICAgc3RkOjpzdHJp
bmcgcmVnZXgoIi4qYW5kLiosLiosLiosLipsc3IgIyIpOworICAgICAgICAgICAgcmVnZXggKz0g
c3RkOjp0b19zdHJpbmcoYW1vdW50KSArICIuKiI7CisgICAgICAgICAgICBjaGVja1VzZXNJbnN0
cnVjdGlvbigqY29kZSwgcmVnZXguY19zdHIoKSwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIGludm9rZTx1aW50NjRfdD4oKmNvZGUsIG4sIG0pOworICAgIH07CisKKyAgICBmb3Ig
KGF1dG8gbk9wZXJhbmQgOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG1P
cGVyYW5kIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50
IDogYW1vdW50cykgeworICAgICAgICAgICAgICAgIHVpbnQ2NF90IG4gPSBuT3BlcmFuZC52YWx1
ZTsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBtID0gbU9wZXJhbmQudmFsdWU7CisgICAgICAg
ICAgICAgICAgQ0hFQ0tfRVEodGVzdChuLCBtLCBhbW91bnQpLCBuICYgKG0gPj4gYW1vdW50KSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdFhvckxlZnRT
aGlmdDMyKCkKK3sKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwg
MikKKyAgICAgICAgcmV0dXJuOworICAgIFZlY3RvcjxpbnQzMl90PiBhbW91bnRzID0geyAxLCAx
NywgMzEgfTsKKworICAgIC8vIFRlc3QgUGF0dGVybjogZCA9IG4gXiAobSA8PCBhbW91bnQpCisg
ICAgYXV0byB0ZXN0ID0gWyZdIChpbnQzMl90IG4sIGludDMyX3QgbSwgaW50MzJfdCBhbW91bnQp
IC0+IGludDMyX3QgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9j
ayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgICAgICBWYWx1ZSogblZhbHVlID0gcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwg
CisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICBWYWx1ZSogbVZhbHVlID0g
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4o
KSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkpOworICAgICAgICBWYWx1ZSogYW1vdW50
VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYW1v
dW50KTsKKworICAgICAgICBWYWx1ZSogc2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgU2hsLCBPcmlnaW4oKSwgbVZhbHVlLCBhbW91bnRWYWx1ZSk7CisgICAgICAgIHJv
b3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3Jp
Z2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3Is
IE9yaWdpbigpLCBuVmFsdWUsIHNoaWZ0VmFsdWUpKTsKKworICAgICAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkgeworICAgICAgICAgICAg
c3RkOjpzdHJpbmcgcmVnZXgoIi4qZW9yLiosLiosLiosLipsc2wgIyIpOworICAgICAgICAgICAg
cmVnZXggKz0gc3RkOjp0b19zdHJpbmcoYW1vdW50KSArICIuKiI7CisgICAgICAgICAgICBjaGVj
a1VzZXNJbnN0cnVjdGlvbigqY29kZSwgcmVnZXguY19zdHIoKSwgdHJ1ZSk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQzMl90PigqY29kZSwgbiwgbSk7CisgICAgfTsKKwor
ICAgIGZvciAoYXV0byBuT3BlcmFuZCA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICBmb3Ig
KGF1dG8gbU9wZXJhbmQgOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0
byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgaW50MzJfdCBuID0gbk9wZXJh
bmQudmFsdWU7CisgICAgICAgICAgICAgICAgaW50MzJfdCBtID0gbU9wZXJhbmQudmFsdWU7Cisg
ICAgICAgICAgICAgICAgQ0hFQ0tfRVEodGVzdChuLCBtLCBhbW91bnQpLCBuIF4gKG0gPDwgYW1v
dW50KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdFhv
clJpZ2h0U2hpZnQzMigpCit7CisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2
ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8aW50MzJfdD4gYW1vdW50cyA9
IHsgMSwgMTcsIDMxIH07CisKKyAgICAvLyBUZXN0IFBhdHRlcm46IGQgPSBuIF4gKG0gPj4gYW1v
dW50KQorICAgIGF1dG8gdGVzdCA9IFsmXSAoaW50MzJfdCBuLCBpbnQzMl90IG0sIGludDMyX3Qg
YW1vdW50KSAtPiBpbnQzMl90IHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJh
c2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUqIG5WYWx1
ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3Jp
Z2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgVmFsdWUqIG1W
YWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywg
T3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKTsKKyAgICAgICAgVmFsdWUq
IGFtb3VudFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIGFtb3VudCk7CisKKyAgICAgICAgVmFsdWUqIHNoaWZ0VmFsdWUgPSByb290LT5hcHBlbmRO
ZXc8VmFsdWU+KHByb2MsIFNTaHIsIE9yaWdpbigpLCBtVmFsdWUsIGFtb3VudFZhbHVlKTsKKyAg
ICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICAgICAgcHJvYywgUmV0
dXJuLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2Ms
IEJpdFhvciwgT3JpZ2luKCksIG5WYWx1ZSwgc2hpZnRWYWx1ZSkpOworCisgICAgICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKSB7CisgICAg
ICAgICAgICBzdGQ6OnN0cmluZyByZWdleCgiLiplb3IuKiwuKiwuKiwuKmFzciAjIik7CisgICAg
ICAgICAgICByZWdleCArPSBzdGQ6OnRvX3N0cmluZyhhbW91bnQpICsgIi4qIjsKKyAgICAgICAg
ICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCByZWdleC5jX3N0cigpLCB0cnVlKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gaW52b2tlPGludDMyX3Q+KCpjb2RlLCBuLCBtKTsKKyAg
ICB9OworCisgICAgZm9yIChhdXRvIG5PcGVyYW5kIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAg
ICAgIGZvciAoYXV0byBtT3BlcmFuZCA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICAgICAg
Zm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBpbnQzMl90IG4g
PSBuT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBpbnQzMl90IG0gPSBtT3BlcmFuZC52
YWx1ZTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUSh0ZXN0KG4sIG0sIGFtb3VudCksIG4gXiAo
bSA+PiBhbW91bnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9p
ZCB0ZXN0WG9yVW5zaWduZWRSaWdodFNoaWZ0MzIoKQoreworICAgIGlmIChKU0M6Ok9wdGlvbnM6
OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisgICAgVmVjdG9yPHVp
bnQzMl90PiBhbW91bnRzID0geyAxLCAxNywgMzEgfTsKKworICAgIC8vIFRlc3QgUGF0dGVybjog
ZCA9IG4gXiAobSA+PiBhbW91bnQpCisgICAgYXV0byB0ZXN0ID0gWyZdICh1aW50MzJfdCBuLCB1
aW50MzJfdCBtLCB1aW50MzJfdCBhbW91bnQpIC0+IHVpbnQzMl90IHsKKyAgICAgICAgUHJvY2Vk
dXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisK
KyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAg
ICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
KTsKKyAgICAgICAgVmFsdWUqIG1WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAg
ICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjEpKTsKKyAgICAgICAgVmFsdWUqIGFtb3VudFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0
MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGFtb3VudCk7CisKKyAgICAgICAgVmFsdWUqIHNoaWZ0
VmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFpTaHIsIE9yaWdpbigpLCBtVmFs
dWUsIGFtb3VudFZhbHVlKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAor
ICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5h
cHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIG5WYWx1ZSwgc2hpZnRWYWx1
ZSkpOworCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBp
ZiAoaXNBUk02NCgpKSB7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyByZWdleCgiLiplb3IuKiwu
KiwuKiwuKmxzciAjIik7CisgICAgICAgICAgICByZWdleCArPSBzdGQ6OnRvX3N0cmluZyhhbW91
bnQpICsgIi4qIjsKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCByZWdl
eC5jX3N0cigpLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW52b2tlPHVpbnQz
Ml90PigqY29kZSwgbiwgbSk7CisgICAgfTsKKworICAgIGZvciAoYXV0byBuT3BlcmFuZCA6IGlu
dDMyT3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbU9wZXJhbmQgOiBpbnQzMk9wZXJh
bmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAg
ICAgICAgICAgICAgdWludDMyX3QgbiA9IG5PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAg
IHVpbnQzMl90IG0gPSBtT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUSh0
ZXN0KG4sIG0sIGFtb3VudCksIG4gXiAobSA+PiBhbW91bnQpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0WG9yTGVmdFNoaWZ0NjQoKQoreworICAgIGlm
IChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47
CisgICAgVmVjdG9yPGludDMyX3Q+IGFtb3VudHMgPSB7IDEsIDM0LCA2MyB9OworCisgICAgLy8g
VGVzdCBQYXR0ZXJuOiBkID0gbiBeIChtIDw8IGFtb3VudCkKKyAgICBhdXRvIHRlc3QgPSBbJl0g
KGludDY0X3QgbiwgaW50NjRfdCBtLCBpbnQzMl90IGFtb3VudCkgLT4gaW50NjRfdCB7CisgICAg
ICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRC
bG9jaygpOworCisgICAgICAgIFZhbHVlKiBuVmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJndW1l
bnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAg
ICAgIFZhbHVlKiBtVmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIFZhbHVlKiBhbW91
bnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBh
bW91bnQpOworCisgICAgICAgIFZhbHVlKiBzaGlmdFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZh
bHVlPihwcm9jLCBTaGwsIE9yaWdpbigpLCBtVmFsdWUsIGFtb3VudFZhbHVlKTsKKyAgICAgICAg
cm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBP
cmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdFhv
ciwgT3JpZ2luKCksIG5WYWx1ZSwgc2hpZnRWYWx1ZSkpOworCisgICAgICAgIGF1dG8gY29kZSA9
IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAgICAg
ICBzdGQ6OnN0cmluZyByZWdleCgiLiplb3IuKiwuKiwuKiwuKmxzbCAjIik7CisgICAgICAgICAg
ICByZWdleCArPSBzdGQ6OnRvX3N0cmluZyhhbW91bnQpICsgIi4qIjsKKyAgICAgICAgICAgIGNo
ZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCByZWdleC5jX3N0cigpLCB0cnVlKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gaW52b2tlPGludDY0X3Q+KCpjb2RlLCBuLCBtKTsKKyAgICB9Owor
CisgICAgZm9yIChhdXRvIG5PcGVyYW5kIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAgICAgIGZv
ciAoYXV0byBtT3BlcmFuZCA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChh
dXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBpbnQ2NF90IG4gPSBuT3Bl
cmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBpbnQ2NF90IG0gPSBtT3BlcmFuZC52YWx1ZTsK
KyAgICAgICAgICAgICAgICBDSEVDS19FUSh0ZXN0KG4sIG0sIGFtb3VudCksIG4gXiAobSA8PCBh
bW91bnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0
WG9yUmlnaHRTaGlmdDY0KCkKK3sKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRM
ZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIFZlY3RvcjxpbnQzMl90PiBhbW91bnRz
ID0geyAxLCAzNCwgNjMgfTsKKworICAgIC8vIFRlc3QgUGF0dGVybjogZCA9IG4gXiAobSA+PiBh
bW91bnQpCisgICAgYXV0byB0ZXN0ID0gWyZdIChpbnQ2NF90IG4sIGludDY0X3QgbSwgaW50MzJf
dCBhbW91bnQpIC0+IGludDY0X3QgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAg
QmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgICAgICBWYWx1ZSogblZh
bHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBWYWx1ZSogbVZhbHVlID0gcm9vdC0+YXBw
ZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjEpOworICAgICAgICBWYWx1ZSogYW1vdW50VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29u
c3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYW1vdW50KTsKKworICAgICAgICBWYWx1ZSogc2hp
ZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU1NociwgT3JpZ2luKCksIG1W
YWx1ZSwgYW1vdW50VmFsdWUpOworICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUo
CisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0WG9yLCBPcmlnaW4oKSwgblZhbHVlLCBzaGlmdFZh
bHVlKSk7CisKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgICAg
IGlmIChpc0FSTTY0KCkpIHsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHJlZ2V4KCIuKmVvci4q
LC4qLC4qLC4qYXNyICMiKTsKKyAgICAgICAgICAgIHJlZ2V4ICs9IHN0ZDo6dG9fc3RyaW5nKGFt
b3VudCkgKyAiLioiOworICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsIHJl
Z2V4LmNfc3RyKCksIHRydWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBpbnZva2U8aW50
NjRfdD4oKmNvZGUsIG4sIG0pOworICAgIH07CisKKyAgICBmb3IgKGF1dG8gbk9wZXJhbmQgOiBp
bnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG1PcGVyYW5kIDogaW50NjRPcGVy
YW5kcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAg
ICAgICAgICAgICAgIGludDY0X3QgbiA9IG5PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAg
IGludDY0X3QgbSA9IG1PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIENIRUNLX0VRKHRl
c3QobiwgbSwgYW1vdW50KSwgbiBeIChtID4+IGFtb3VudCkpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RYb3JVbnNpZ25lZFJpZ2h0U2hpZnQ2NCgpCit7
CisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAg
IHJldHVybjsKKyAgICBWZWN0b3I8dWludDMyX3Q+IGFtb3VudHMgPSB7IDEsIDE3LCAzMSB9Owor
CisgICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0gbiBeIChtID4+IGFtb3VudCkKKyAgICBhdXRvIHRl
c3QgPSBbJl0gKHVpbnQ2NF90IG4sIHVpbnQ2NF90IG0sIHVpbnQzMl90IGFtb3VudCkgLT4gdWlu
dDY0X3QgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9v
dCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgICAgICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBw
ZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApOworICAgICAgICBWYWx1ZSogbVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50
UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAg
ICBWYWx1ZSogYW1vdW50VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgYW1vdW50KTsKKworICAgICAgICBWYWx1ZSogc2hpZnRWYWx1ZSA9IHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgWlNociwgT3JpZ2luKCksIG1WYWx1ZSwgYW1vdW50VmFs
dWUpOworICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgICAgICBw
cm9jLCBSZXR1cm4sIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgQml0WG9yLCBPcmlnaW4oKSwgblZhbHVlLCBzaGlmdFZhbHVlKSk7CisKKyAgICAg
ICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkp
IHsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHJlZ2V4KCIuKmVvci4qLC4qLC4qLC4qbHNyICMi
KTsKKyAgICAgICAgICAgIHJlZ2V4ICs9IHN0ZDo6dG9fc3RyaW5nKGFtb3VudCkgKyAiLioiOwor
ICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsIHJlZ2V4LmNfc3RyKCksIHRy
dWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBpbnZva2U8dWludDY0X3Q+KCpjb2RlLCBu
LCBtKTsKKyAgICB9OworCisgICAgZm9yIChhdXRvIG5PcGVyYW5kIDogaW50NjRPcGVyYW5kcygp
KSB7CisgICAgICAgIGZvciAoYXV0byBtT3BlcmFuZCA6IGludDY0T3BlcmFuZHMoKSkgeworICAg
ICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICB1
aW50NjRfdCBuID0gbk9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgdWludDY0X3QgbSA9
IG1PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIENIRUNLX0VRKHRlc3QobiwgbSwgYW1v
dW50KSwgbiBeIChtID4+IGFtb3VudCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorfQorCit2b2lkIHRlc3RPckxlZnRTaGlmdDMyKCkKK3sKKyAgICBpZiAoSlNDOjpPcHRpb25z
OjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIFZlY3Rvcjxp
bnQzMl90PiBhbW91bnRzID0geyAxLCAxNywgMzEgfTsKKworICAgIC8vIFRlc3QgUGF0dGVybjog
ZCA9IG4gfCAobSA8PCBhbW91bnQpCisgICAgYXV0byB0ZXN0ID0gWyZdIChpbnQzMl90IG4sIGlu
dDMyX3QgbSwgaW50MzJfdCBhbW91bnQpIC0+IGludDMyX3QgeworICAgICAgICBQcm9jZWR1cmUg
cHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAg
ICAgICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAg
IHByb2MsIFRydW5jLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJn
dW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOwor
ICAgICAgICBWYWx1ZSogbVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAg
ICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8
QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkp
OworICAgICAgICBWYWx1ZSogYW1vdW50VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgYW1vdW50KTsKKworICAgICAgICBWYWx1ZSogc2hpZnRWYWx1
ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU2hsLCBPcmlnaW4oKSwgbVZhbHVlLCBh
bW91bnRWYWx1ZSk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAg
ICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPihwcm9jLCBCaXRPciwgT3JpZ2luKCksIG5WYWx1ZSwgc2hpZnRWYWx1ZSkpOwor
CisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNB
Uk02NCgpKSB7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyByZWdleCgiLipvcnIuKiwuKiwuKiwu
KmxzbCAjIik7CisgICAgICAgICAgICByZWdleCArPSBzdGQ6OnRvX3N0cmluZyhhbW91bnQpICsg
Ii4qIjsKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCByZWdleC5jX3N0
cigpLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW52b2tlPGludDMyX3Q+KCpj
b2RlLCBuLCBtKTsKKyAgICB9OworCisgICAgZm9yIChhdXRvIG5PcGVyYW5kIDogaW50MzJPcGVy
YW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtT3BlcmFuZCA6IGludDMyT3BlcmFuZHMoKSkg
eworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAg
ICAgICBpbnQzMl90IG4gPSBuT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBpbnQzMl90
IG0gPSBtT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUSh0ZXN0KG4sIG0s
IGFtb3VudCksIG4gfCAobSA8PCBhbW91bnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KK30KKwordm9pZCB0ZXN0T3JSaWdodFNoaWZ0MzIoKQoreworICAgIGlmIChKU0M6Ok9w
dGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisgICAgVmVj
dG9yPGludDMyX3Q+IGFtb3VudHMgPSB7IDEsIDE3LCAzMSB9OworCisgICAgLy8gVGVzdCBQYXR0
ZXJuOiBkID0gbiB8IChtID4+IGFtb3VudCkKKyAgICBhdXRvIHRlc3QgPSBbJl0gKGludDMyX3Qg
biwgaW50MzJfdCBtLCBpbnQzMl90IGFtb3VudCkgLT4gaW50MzJfdCB7CisgICAgICAgIFByb2Nl
ZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOwor
CisgICAgICAgIFZhbHVlKiBuVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAg
ICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5l
dzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIw
KSk7CisgICAgICAgIFZhbHVlKiBtVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAg
ICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIxKSk7CisgICAgICAgIFZhbHVlKiBhbW91bnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25z
dDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBhbW91bnQpOworCisgICAgICAgIFZhbHVlKiBzaGlm
dFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTU2hyLCBPcmlnaW4oKSwgbVZh
bHVlLCBhbW91bnRWYWx1ZSk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgK
KyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRPciwgT3JpZ2luKCksIG5WYWx1ZSwgc2hpZnRWYWx1
ZSkpOworCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBp
ZiAoaXNBUk02NCgpKSB7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyByZWdleCgiLipvcnIuKiwu
KiwuKiwuKmFzciAjIik7CisgICAgICAgICAgICByZWdleCArPSBzdGQ6OnRvX3N0cmluZyhhbW91
bnQpICsgIi4qIjsKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCByZWdl
eC5jX3N0cigpLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW52b2tlPGludDMy
X3Q+KCpjb2RlLCBuLCBtKTsKKyAgICB9OworCisgICAgZm9yIChhdXRvIG5PcGVyYW5kIDogaW50
MzJPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtT3BlcmFuZCA6IGludDMyT3BlcmFu
ZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAg
ICAgICAgICAgICBpbnQzMl90IG4gPSBuT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBp
bnQzMl90IG0gPSBtT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUSh0ZXN0
KG4sIG0sIGFtb3VudCksIG4gfCAobSA+PiBhbW91bnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0T3JVbnNpZ25lZFJpZ2h0U2hpZnQzMigpCit7Cisg
ICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJl
dHVybjsKKyAgICBWZWN0b3I8dWludDMyX3Q+IGFtb3VudHMgPSB7IDEsIDE3LCAzMSB9OworCisg
ICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0gbiB8IChtID4+IGFtb3VudCkKKyAgICBhdXRvIHRlc3Qg
PSBbJl0gKHVpbnQzMl90IG4sIHVpbnQzMl90IG0sIHVpbnQzMl90IGFtb3VudCkgLT4gdWludDMy
X3QgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9
IHByb2MuYWRkQmxvY2soKTsKKworICAgICAgICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwgCisgICAgICAg
ICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICBWYWx1ZSogbVZhbHVlID0gcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwgCisgICAg
ICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IEdQUkluZm86OmFyZ3VtZW50R1BSMSkpOworICAgICAgICBWYWx1ZSogYW1vdW50VmFsdWUgPSBy
b290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYW1vdW50KTsKKwor
ICAgICAgICBWYWx1ZSogc2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
WlNociwgT3JpZ2luKCksIG1WYWx1ZSwgYW1vdW50VmFsdWUpOworICAgICAgICByb290LT5hcHBl
bmROZXdDb250cm9sVmFsdWUoCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCAK
KyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0T3IsIE9yaWdpbigp
LCBuVmFsdWUsIHNoaWZ0VmFsdWUpKTsKKworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJv
Yyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkgeworICAgICAgICAgICAgc3RkOjpzdHJp
bmcgcmVnZXgoIi4qb3JyLiosLiosLiosLipsc3IgIyIpOworICAgICAgICAgICAgcmVnZXggKz0g
c3RkOjp0b19zdHJpbmcoYW1vdW50KSArICIuKiI7CisgICAgICAgICAgICBjaGVja1VzZXNJbnN0
cnVjdGlvbigqY29kZSwgcmVnZXguY19zdHIoKSwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIGludm9rZTx1aW50MzJfdD4oKmNvZGUsIG4sIG0pOworICAgIH07CisKKyAgICBmb3Ig
KGF1dG8gbk9wZXJhbmQgOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG1P
cGVyYW5kIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50
IDogYW1vdW50cykgeworICAgICAgICAgICAgICAgIHVpbnQzMl90IG4gPSBuT3BlcmFuZC52YWx1
ZTsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBtID0gbU9wZXJhbmQudmFsdWU7CisgICAgICAg
ICAgICAgICAgQ0hFQ0tfRVEodGVzdChuLCBtLCBhbW91bnQpLCBuIHwgKG0gPj4gYW1vdW50KSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdE9yTGVmdFNo
aWZ0NjQoKQoreworICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAy
KQorICAgICAgICByZXR1cm47CisgICAgVmVjdG9yPGludDMyX3Q+IGFtb3VudHMgPSB7IDEsIDM0
LCA2MyB9OworCisgICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0gbiB8IChtIDw8IGFtb3VudCkKKyAg
ICBhdXRvIHRlc3QgPSBbJl0gKGludDY0X3QgbiwgaW50NjRfdCBtLCBpbnQzMl90IGFtb3VudCkg
LT4gaW50NjRfdCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2Nr
KiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBuVmFsdWUgPSByb290
LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFy
Z3VtZW50R1BSMCk7CisgICAgICAgIFZhbHVlKiBtVmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJn
dW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7Cisg
ICAgICAgIFZhbHVlKiBhbW91bnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBhbW91bnQpOworCisgICAgICAgIFZhbHVlKiBzaGlmdFZhbHVlID0g
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTaGwsIE9yaWdpbigpLCBtVmFsdWUsIGFtb3Vu
dFZhbHVlKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICAg
ICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8
VmFsdWU+KHByb2MsIEJpdE9yLCBPcmlnaW4oKSwgblZhbHVlLCBzaGlmdFZhbHVlKSk7CisKKyAg
ICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0
KCkpIHsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHJlZ2V4KCIuKm9yci4qLC4qLC4qLC4qbHNs
ICMiKTsKKyAgICAgICAgICAgIHJlZ2V4ICs9IHN0ZDo6dG9fc3RyaW5nKGFtb3VudCkgKyAiLioi
OworICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsIHJlZ2V4LmNfc3RyKCks
IHRydWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBpbnZva2U8aW50NjRfdD4oKmNvZGUs
IG4sIG0pOworICAgIH07CisKKyAgICBmb3IgKGF1dG8gbk9wZXJhbmQgOiBpbnQ2NE9wZXJhbmRz
KCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG1PcGVyYW5kIDogaW50NjRPcGVyYW5kcygpKSB7Cisg
ICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAgICAg
IGludDY0X3QgbiA9IG5PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIGludDY0X3QgbSA9
IG1PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIENIRUNLX0VRKHRlc3QobiwgbSwgYW1v
dW50KSwgbiB8IChtIDw8IGFtb3VudCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorfQorCit2b2lkIHRlc3RPclJpZ2h0U2hpZnQ2NCgpCit7CisgICAgaWYgKEpTQzo6T3B0aW9u
czo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8
aW50MzJfdD4gYW1vdW50cyA9IHsgMSwgMzQsIDYzIH07CisKKyAgICAvLyBUZXN0IFBhdHRlcm46
IGQgPSBuIHwgKG0gPj4gYW1vdW50KQorICAgIGF1dG8gdGVzdCA9IFsmXSAoaW50NjRfdCBuLCBp
bnQ2NF90IG0sIGludDMyX3QgYW1vdW50KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgUHJvY2VkdXJl
IHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAg
ICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgVmFsdWUqIG1W
YWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgVmFsdWUqIGFtb3VudFZhbHVlID0gcm9v
dC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGFtb3VudCk7CisKKyAg
ICAgICAgVmFsdWUqIHNoaWZ0VmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNT
aHIsIE9yaWdpbigpLCBtVmFsdWUsIGFtb3VudFZhbHVlKTsKKyAgICAgICAgcm9vdC0+YXBwZW5k
TmV3Q29udHJvbFZhbHVlKAorICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgCisg
ICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdE9yLCBPcmlnaW4oKSwg
blZhbHVlLCBzaGlmdFZhbHVlKSk7CisKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2Mo
cHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkpIHsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5n
IHJlZ2V4KCIuKm9yci4qLC4qLC4qLC4qYXNyICMiKTsKKyAgICAgICAgICAgIHJlZ2V4ICs9IHN0
ZDo6dG9fc3RyaW5nKGFtb3VudCkgKyAiLioiOworICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1
Y3Rpb24oKmNvZGUsIHJlZ2V4LmNfc3RyKCksIHRydWUpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBpbnZva2U8aW50NjRfdD4oKmNvZGUsIG4sIG0pOworICAgIH07CisKKyAgICBmb3IgKGF1
dG8gbk9wZXJhbmQgOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG1PcGVy
YW5kIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDog
YW1vdW50cykgeworICAgICAgICAgICAgICAgIGludDY0X3QgbiA9IG5PcGVyYW5kLnZhbHVlOwor
ICAgICAgICAgICAgICAgIGludDY0X3QgbSA9IG1PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAg
ICAgIENIRUNLX0VRKHRlc3QobiwgbSwgYW1vdW50KSwgbiB8IChtID4+IGFtb3VudCkpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RPclVuc2lnbmVkUmln
aHRTaGlmdDY0KCkKK3sKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgp
IDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIFZlY3Rvcjx1aW50MzJfdD4gYW1vdW50cyA9IHsg
MSwgMTcsIDMxIH07CisKKyAgICAvLyBUZXN0IFBhdHRlcm46IGQgPSBuIHwgKG0gPj4gYW1vdW50
KQorICAgIGF1dG8gdGVzdCA9IFsmXSAodWludDY0X3QgbiwgdWludDY0X3QgbSwgdWludDMyX3Qg
YW1vdW50KSAtPiB1aW50NjRfdCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBC
YXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBuVmFs
dWUgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIFZhbHVlKiBtVmFsdWUgPSByb290LT5hcHBl
bmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50
R1BSMSk7CisgICAgICAgIFZhbHVlKiBhbW91bnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25z
dDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBhbW91bnQpOworCisgICAgICAgIFZhbHVlKiBzaGlm
dFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBaU2hyLCBPcmlnaW4oKSwgbVZh
bHVlLCBhbW91bnRWYWx1ZSk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgK
KyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRPciwgT3JpZ2luKCksIG5WYWx1ZSwgc2hpZnRWYWx1
ZSkpOworCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBp
ZiAoaXNBUk02NCgpKSB7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyByZWdleCgiLipvcnIuKiwu
KiwuKiwuKmxzciAjIik7CisgICAgICAgICAgICByZWdleCArPSBzdGQ6OnRvX3N0cmluZyhhbW91
bnQpICsgIi4qIjsKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCByZWdl
eC5jX3N0cigpLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW52b2tlPHVpbnQ2
NF90PigqY29kZSwgbiwgbSk7CisgICAgfTsKKworICAgIGZvciAoYXV0byBuT3BlcmFuZCA6IGlu
dDY0T3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbU9wZXJhbmQgOiBpbnQ2NE9wZXJh
bmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAg
ICAgICAgICAgICAgdWludDY0X3QgbiA9IG5PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAg
IHVpbnQ2NF90IG0gPSBtT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUSh0
ZXN0KG4sIG0sIGFtb3VudCksIG4gfCAobSA+PiBhbW91bnQpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KK30KKwogdm9pZCB0ZXN0Qml0QW5kWmVyb1NoaWZ0UmlnaHRBcmdJbW1N
YXNrMzIoKQogewogICAgIC8vIFR1cm4gdGhpczogKHRtcCA+PiBpbW0pICYgbWFzayAKQEAgLTYz
ODksNiArNzE0NSwyOCBAQCB2b2lkIGFkZEJpdFRlc3RzKGNvbnN0IGNoYXIqIGZpbHRlciwgRGVx
dWU8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4+JiB0YXNrcykKICAgICBSVU4odGVzdFN1Yldp
dGhMZWZ0U2hpZnQ2NCgpKTsKICAgICBSVU4odGVzdFN1YldpdGhSaWdodFNoaWZ0NjQoKSk7CiAg
ICAgUlVOKHRlc3RTdWJXaXRoVW5zaWduZWRSaWdodFNoaWZ0NjQoKSk7CisKKyAgICBSVU4odGVz
dEFuZExlZnRTaGlmdDMyKCkpOworICAgIFJVTih0ZXN0QW5kUmlnaHRTaGlmdDMyKCkpOworICAg
IFJVTih0ZXN0QW5kVW5zaWduZWRSaWdodFNoaWZ0MzIoKSk7CisgICAgUlVOKHRlc3RBbmRMZWZ0
U2hpZnQ2NCgpKTsKKyAgICBSVU4odGVzdEFuZFJpZ2h0U2hpZnQ2NCgpKTsKKyAgICBSVU4odGVz
dEFuZFVuc2lnbmVkUmlnaHRTaGlmdDY0KCkpOworCisgICAgUlVOKHRlc3RYb3JMZWZ0U2hpZnQz
MigpKTsKKyAgICBSVU4odGVzdFhvclJpZ2h0U2hpZnQzMigpKTsKKyAgICBSVU4odGVzdFhvclVu
c2lnbmVkUmlnaHRTaGlmdDMyKCkpOworICAgIFJVTih0ZXN0WG9yTGVmdFNoaWZ0NjQoKSk7Cisg
ICAgUlVOKHRlc3RYb3JSaWdodFNoaWZ0NjQoKSk7CisgICAgUlVOKHRlc3RYb3JVbnNpZ25lZFJp
Z2h0U2hpZnQ2NCgpKTsKKworICAgIFJVTih0ZXN0T3JMZWZ0U2hpZnQzMigpKTsKKyAgICBSVU4o
dGVzdE9yUmlnaHRTaGlmdDMyKCkpOworICAgIFJVTih0ZXN0T3JVbnNpZ25lZFJpZ2h0U2hpZnQz
MigpKTsKKyAgICBSVU4odGVzdE9yTGVmdFNoaWZ0NjQoKSk7CisgICAgUlVOKHRlc3RPclJpZ2h0
U2hpZnQ2NCgpKTsKKyAgICBSVU4odGVzdE9yVW5zaWduZWRSaWdodFNoaWZ0NjQoKSk7CisKICAg
ICBSVU4odGVzdEJpdEFuZFplcm9TaGlmdFJpZ2h0QXJnSW1tTWFzazMyKCkpOwogICAgIFJVTih0
ZXN0Qml0QW5kWmVyb1NoaWZ0UmlnaHRBcmdJbW1NYXNrNjQoKSk7CiAgICAgUlVOKHRlc3RCaXRB
bmRBcmdzKDQzLCA0MykpOwo=
</data>
<flag name="review"
          id="457397"
          type_id="1"
          status="+"
          setter="saam"
    />
    <flag name="commit-queue"
          id="457422"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434809</attachid>
            <date>2021-08-02 19:17:56 -0700</date>
            <delta_ts>2021-08-02 22:42:27 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-228675-20210802211755.patch</filename>
            <type>text/plain</type>
            <size>66285</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwNDk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
N2M5NTU4ZWFiZGIxNjY0YzU2YWQyZGU0YWQzNGQ3ZDA3Y2UxNzI1Li5lNjVhMmIzNTRkZGMxNWZh
MmRhYjJjYTFmZDVmYWRjZjg5MDE5ZjRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNDQgQEAKKzIwMjEtMDgtMDIgIFlpamlhIEh1YW5nICA8eWlqaWFfaHVhbmdAYXBwbGUu
Y29tPgorCisgICAgICAgIEFkZCBuZXcgcGF0dGVybnMgdG8gaW5zdHJ1Y3Rpb24gc2VsZWN0b3Ig
dG8gdXRpbGl6ZSBBTkQvRU9SL09SUi13aXRoLXNoaWZ0IHN1cHBvcnRlZCBieSBBUk02NAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI4Njc1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQml0d2lzZSBBTkQg
KHNoaWZ0ZWQgcmVnaXN0ZXIpIHBlcmZvcm1zIGEgYml0d2lzZSBBTkQgb2YgYSByZWdpc3RlciB2
YWx1ZSBhbmQgYW4gb3B0aW9uYWxseS1zaGlmdGVkIAorICAgICAgICByZWdpc3RlciB2YWx1ZSwg
YW5kIHdyaXRlcyB0aGUgcmVzdWx0IHRvIHRoZSBkZXN0aW5hdGlvbiByZWdpc3Rlci4KKworICAg
ICAgICAgICAgYW5kIHdkIHduIHdtIFNoaWZ0VHlwZSAjYW1vdW50CisKKyAgICAgICAgVGhlIGVx
dWl2YWxlbnQgcGF0dGVybiBpczogbiAmIChtIFNoaWZ0VHlwZSBhbW91bnQpCisKKyAgICAgICAg
R2l2ZW4gQjMgSVI6CisgICAgICAgIEludCBAMCA9IEFyZ3VtZW50UmVnKCV4MCkKKyAgICAgICAg
SW50IEAxID0gQXJndW1lbnRSZWcoJXgxKQorICAgICAgICBJbnQgQDIgPSBDb25zdDMyKDYzKQor
ICAgICAgICBJbnQgQDMgPSBTaGwoQDEsICQ2MyhAMikpCisgICAgICAgIEludCBANCA9IEJpdEFu
ZChAMCwgQDMpCisgICAgICAgIFZvaWRANSA9IFJldHVybihANCwgVGVybWluYWwpCisKKyAgICAg
ICAgLy8gT2xkIG9wdGltaXplZCBBSVIKKyAgICAgICAgTHNoaWZ0ICV4MSwgJDYzLCAleDEsIEAz
CisgICAgICAgIEFuZCAgICAleDAsICV4MSwgJXgwLCBANAorICAgICAgICBSZXQgICAgJXgwLCAg
ICAgICAgICAgQDUKKworICAgICAgICAvLyBOZXcgb3B0aW1pemVkIEFJUgorICAgICAgICBBbmRM
ZWZ0U2hpZnQgJXgwLCAleDEsICQ2MywgJXgwLCBANAorICAgICAgICBSZXQgICAgICAgICAgJXgw
LCAgICAgICAgICAgICAgICBANQorCisgICAgICAgIEJpdHdpc2UgRXhjbHVzaXZlIE9SIChzaGlm
dGVkIHJlZ2lzdGVyKSBwZXJmb3JtcyBhIGJpdHdpc2UgRXhjbHVzaXZlIE9SIG9mIGEgcmVnaXN0
ZXIgdmFsdWUgYW5kIGFuIAorICAgICAgICBvcHRpb25hbGx5LXNoaWZ0ZWQgcmVnaXN0ZXIgdmFs
dWUsIGFuZCB3cml0ZXMgdGhlIHJlc3VsdCB0byB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIuCisK
KyAgICAgICAgICAgIGVvciB3ZCB3biB3bSBTaGlmdFR5cGUgI2Ftb3VudAorCisgICAgICAgIFRo
ZSBlcXVpdmFsZW50IHBhdHRlcm4gaXM6IG4gXiAobSBTaGlmdFR5cGUgYW1vdW50KQorCisgICAg
ICAgIEdpdmVuIEIzIElSOgorICAgICAgICBJbnQgQDAgPSBBcmd1bWVudFJlZygleDApCisgICAg
ICAgIEludCBAMSA9IEFyZ3VtZW50UmVnKCV4MSkKKyAgICAgICAgSW50IEAyID0gQ29uc3QzMig2
MykKKyAgICAgICAgSW50IEAzID0gU2hsKEAxLCAkNjMoQDIpKQorICAgICAgICBJbnQgQDQgPSBC
aXRYb3IoQDAsIEAzKQorICAgICAgICBWb2lkQDUgPSBSZXR1cm4oQDQsIFRlcm1pbmFsKQorCisg
ICAgICAgIC8vIE9sZCBvcHRpbWl6ZWQgQUlSCisgICAgICAgIExzaGlmdCAleDEsICQ2MywgJXgx
LCBAMworICAgICAgICBYb3IgICAgJXgwLCAleDEsICV4MCwgQDQKKyAgICAgICAgUmV0ICAgICV4
MCwgICAgICAgICAgIEA1CisKKyAgICAgICAgLy8gTmV3IG9wdGltaXplZCBBSVIKKyAgICAgICAg
WG9yTGVmdFNoaWZ0ICV4MCwgJXgxLCAkNjMsICV4MCwgQDQKKyAgICAgICAgUmV0ICAgICAgICAg
ICV4MCwgICAgICAgICAgICAgICAgQDUKKworICAgICAgICBCaXR3aXNlIE9SIChzaGlmdGVkIHJl
Z2lzdGVyKSBwZXJmb3JtcyBhIGJpdHdpc2UgKGluY2x1c2l2ZSkgT1Igb2YgYSByZWdpc3RlciB2
YWx1ZSBhbmQgYW4gCisgICAgICAgIG9wdGlvbmFsbHktc2hpZnRlZCByZWdpc3RlciB2YWx1ZSwg
YW5kIHdyaXRlcyB0aGUgcmVzdWx0IHRvIHRoZSBkZXN0aW5hdGlvbiByZWdpc3Rlci4KKworICAg
ICAgICAgICAgb3JyIHdkIHduIHdtIFNoaWZ0VHlwZSAjYW1vdW50CisKKyAgICAgICAgVGhlIGVx
dWl2YWxlbnQgcGF0dGVybiBpczogbiB8IChtIFNoaWZ0VHlwZSBhbW91bnQpCisKKyAgICAgICAg
R2l2ZW4gQjMgSVI6CisgICAgICAgIEludCBAMCA9IEFyZ3VtZW50UmVnKCV4MCkKKyAgICAgICAg
SW50IEAxID0gQXJndW1lbnRSZWcoJXgxKQorICAgICAgICBJbnQgQDIgPSBDb25zdDMyKDYzKQor
ICAgICAgICBJbnQgQDMgPSBTaGwoQDEsICQ2MyhAMikpCisgICAgICAgIEludCBANCA9IEJpdE9y
KEAwLCBAMykKKyAgICAgICAgVm9pZEA1ID0gUmV0dXJuKEA0LCBUZXJtaW5hbCkKKworICAgICAg
ICAvLyBPbGQgb3B0aW1pemVkIEFJUgorICAgICAgICBMc2hpZnQgJXgxLCAkNjMsICV4MSwgQDMK
KyAgICAgICAgT3IgICAgICV4MCwgJXgxLCAleDAsIEA0CisgICAgICAgIFJldCAgICAleDAsICAg
ICAgICAgICBANQorCisgICAgICAgIC8vIE5ldyBvcHRpbWl6ZWQgQUlSCisgICAgICAgIE9yTGVm
dFNoaWZ0ICV4MCwgJXgxLCAkNjMsICV4MCwgQDQKKyAgICAgICAgUmV0ICAgICAgICAgJXgwLCAg
ICAgICAgICAgICAgICBANQorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJN
NjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6YW5kTGVmdFNoaWZ0MzIp
OgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjphbmRSaWdodFNoaWZ0MzIpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjphbmRVbnNpZ25lZFJpZ2h0U2hpZnQz
Mik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OmFuZExlZnRTaGlmdDY0KToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6YW5kUmlnaHRTaGlmdDY0KToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6YW5kVW5zaWduZWRSaWdodFNoaWZ0NjQp
OgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojp4b3JMZWZ0U2hpZnQzMik6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnhvclJpZ2h0U2hpZnQzMik6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnhvclVuc2lnbmVkUmlnaHRTaGlmdDMyKToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6eG9yTGVmdFNoaWZ0NjQpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojp4b3JSaWdodFNoaWZ0NjQpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojp4b3JVbnNpZ25lZFJpZ2h0U2hpZnQ2NCk6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Om9yTGVmdFNoaWZ0MzIpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpvclJpZ2h0U2hpZnQzMik6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Om9yVW5zaWduZWRSaWdodFNoaWZ0MzIpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpvckxlZnRTaGlmdDY0KToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6b3JSaWdodFNoaWZ0NjQpOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlckFSTTY0OjpvclVuc2lnbmVkUmlnaHRTaGlmdDY0KToKKyAgICAgICAgKiBh
c3NlbWJsZXIvdGVzdG1hc20uY3BwOgorICAgICAgICAoSlNDOjp0ZXN0QW5kTGVmdFNoaWZ0MzIp
OgorICAgICAgICAoSlNDOjp0ZXN0QW5kUmlnaHRTaGlmdDMyKToKKyAgICAgICAgKEpTQzo6dGVz
dEFuZFVuc2lnbmVkUmlnaHRTaGlmdDMyKToKKyAgICAgICAgKEpTQzo6dGVzdEFuZExlZnRTaGlm
dDY0KToKKyAgICAgICAgKEpTQzo6dGVzdEFuZFJpZ2h0U2hpZnQ2NCk6CisgICAgICAgIChKU0M6
OnRlc3RBbmRVbnNpZ25lZFJpZ2h0U2hpZnQ2NCk6CisgICAgICAgIChKU0M6OnRlc3RYb3JMZWZ0
U2hpZnQzMik6CisgICAgICAgIChKU0M6OnRlc3RYb3JSaWdodFNoaWZ0MzIpOgorICAgICAgICAo
SlNDOjp0ZXN0WG9yVW5zaWduZWRSaWdodFNoaWZ0MzIpOgorICAgICAgICAoSlNDOjp0ZXN0WG9y
TGVmdFNoaWZ0NjQpOgorICAgICAgICAoSlNDOjp0ZXN0WG9yUmlnaHRTaGlmdDY0KToKKyAgICAg
ICAgKEpTQzo6dGVzdFhvclVuc2lnbmVkUmlnaHRTaGlmdDY0KToKKyAgICAgICAgKEpTQzo6dGVz
dE9yTGVmdFNoaWZ0MzIpOgorICAgICAgICAoSlNDOjp0ZXN0T3JSaWdodFNoaWZ0MzIpOgorICAg
ICAgICAoSlNDOjp0ZXN0T3JVbnNpZ25lZFJpZ2h0U2hpZnQzMik6CisgICAgICAgIChKU0M6OnRl
c3RPckxlZnRTaGlmdDY0KToKKyAgICAgICAgKEpTQzo6dGVzdE9yUmlnaHRTaGlmdDY0KToKKyAg
ICAgICAgKEpTQzo6dGVzdE9yVW5zaWduZWRSaWdodFNoaWZ0NjQpOgorICAgICAgICAqIGIzL0Iz
TG93ZXJUb0Fpci5jcHA6CisgICAgICAgICogYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzOgorICAg
ICAgICAqIGIzL3Rlc3RiMy5oOgorICAgICAgICAqIGIzL3Rlc3RiM18yLmNwcDoKKyAgICAgICAg
KHRlc3RBbmRMZWZ0U2hpZnQzMik6CisgICAgICAgICh0ZXN0QW5kUmlnaHRTaGlmdDMyKToKKyAg
ICAgICAgKHRlc3RBbmRVbnNpZ25lZFJpZ2h0U2hpZnQzMik6CisgICAgICAgICh0ZXN0QW5kTGVm
dFNoaWZ0NjQpOgorICAgICAgICAodGVzdEFuZFJpZ2h0U2hpZnQ2NCk6CisgICAgICAgICh0ZXN0
QW5kVW5zaWduZWRSaWdodFNoaWZ0NjQpOgorICAgICAgICAodGVzdFhvckxlZnRTaGlmdDMyKToK
KyAgICAgICAgKHRlc3RYb3JSaWdodFNoaWZ0MzIpOgorICAgICAgICAodGVzdFhvclVuc2lnbmVk
UmlnaHRTaGlmdDMyKToKKyAgICAgICAgKHRlc3RYb3JMZWZ0U2hpZnQ2NCk6CisgICAgICAgICh0
ZXN0WG9yUmlnaHRTaGlmdDY0KToKKyAgICAgICAgKHRlc3RYb3JVbnNpZ25lZFJpZ2h0U2hpZnQ2
NCk6CisgICAgICAgICh0ZXN0T3JMZWZ0U2hpZnQzMik6CisgICAgICAgICh0ZXN0T3JSaWdodFNo
aWZ0MzIpOgorICAgICAgICAodGVzdE9yVW5zaWduZWRSaWdodFNoaWZ0MzIpOgorICAgICAgICAo
dGVzdE9yTGVmdFNoaWZ0NjQpOgorICAgICAgICAodGVzdE9yUmlnaHRTaGlmdDY0KToKKyAgICAg
ICAgKHRlc3RPclVuc2lnbmVkUmlnaHRTaGlmdDY0KToKKyAgICAgICAgKGFkZEJpdFRlc3RzKToK
KwogMjAyMS0wNy0zMCAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5jb20+CiAKICAg
ICAgICAgQWRkIFByZS9Qb3N0LUluZGV4ZWQgQWRkcmVzcyBNb2RlIHRvIEFpciBmb3IgQVJNNjQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJBUk02NC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ckFSTTY0LmgKaW5kZXggZTZiZmJlYzYwMDFjMTBjNjFlOWYyNjZlZmYyN2FkNmYxMGU4OWY4Zi4u
NmNhYTM1YjdjNzU2YjgwY2VhNTZlOTJjYWVhYTYwN2ViOTg5Njc4YiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKQEAg
LTY0OSw2ICs2NDksOTYgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5zdWI8NjQ+KGQs
IG4sIG0sIEFzc2VtYmxlcjo6TFNSLCBhbW91bnQubV92YWx1ZSk7CiAgICAgfQogCisgICAgdm9p
ZCBhbmRMZWZ0U2hpZnQzMihSZWdpc3RlcklEIG4sIFJlZ2lzdGVySUQgbSwgVHJ1c3RlZEltbTMy
IGFtb3VudCwgUmVnaXN0ZXJJRCBkKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kXzwz
Mj4oZCwgbiwgbSwgQXNzZW1ibGVyOjpMU0wsIGFtb3VudC5tX3ZhbHVlKTsKKyAgICB9CisKKyAg
ICB2b2lkIGFuZFJpZ2h0U2hpZnQzMihSZWdpc3RlcklEIG4sIFJlZ2lzdGVySUQgbSwgVHJ1c3Rl
ZEltbTMyIGFtb3VudCwgUmVnaXN0ZXJJRCBkKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
YW5kXzwzMj4oZCwgbiwgbSwgQXNzZW1ibGVyOjpBU1IsIGFtb3VudC5tX3ZhbHVlKTsKKyAgICB9
CisKKyAgICB2b2lkIGFuZFVuc2lnbmVkUmlnaHRTaGlmdDMyKFJlZ2lzdGVySUQgbiwgUmVnaXN0
ZXJJRCBtLCBUcnVzdGVkSW1tMzIgYW1vdW50LCBSZWdpc3RlcklEIGQpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5hbmRfPDMyPihkLCBuLCBtLCBBc3NlbWJsZXI6OkxTUiwgYW1vdW50Lm1f
dmFsdWUpOworICAgIH0KKworICAgIHZvaWQgYW5kTGVmdFNoaWZ0NjQoUmVnaXN0ZXJJRCBuLCBS
ZWdpc3RlcklEIG0sIFRydXN0ZWRJbW0zMiBhbW91bnQsIFJlZ2lzdGVySUQgZCkKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmFuZF88NjQ+KGQsIG4sIG0sIEFzc2VtYmxlcjo6TFNMLCBhbW91
bnQubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBhbmRSaWdodFNoaWZ0NjQoUmVnaXN0ZXJJ
RCBuLCBSZWdpc3RlcklEIG0sIFRydXN0ZWRJbW0zMiBhbW91bnQsIFJlZ2lzdGVySUQgZCkKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZF88NjQ+KGQsIG4sIG0sIEFzc2VtYmxlcjo6QVNS
LCBhbW91bnQubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBhbmRVbnNpZ25lZFJpZ2h0U2hp
ZnQ2NChSZWdpc3RlcklEIG4sIFJlZ2lzdGVySUQgbSwgVHJ1c3RlZEltbTMyIGFtb3VudCwgUmVn
aXN0ZXJJRCBkKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kXzw2ND4oZCwgbiwgbSwg
QXNzZW1ibGVyOjpMU1IsIGFtb3VudC5tX3ZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvckxl
ZnRTaGlmdDMyKFJlZ2lzdGVySUQgbiwgUmVnaXN0ZXJJRCBtLCBUcnVzdGVkSW1tMzIgYW1vdW50
LCBSZWdpc3RlcklEIGQpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5lb3I8MzI+KGQsIG4s
IG0sIEFzc2VtYmxlcjo6TFNMLCBhbW91bnQubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCB4
b3JSaWdodFNoaWZ0MzIoUmVnaXN0ZXJJRCBuLCBSZWdpc3RlcklEIG0sIFRydXN0ZWRJbW0zMiBh
bW91bnQsIFJlZ2lzdGVySUQgZCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmVvcjwzMj4o
ZCwgbiwgbSwgQXNzZW1ibGVyOjpBU1IsIGFtb3VudC5tX3ZhbHVlKTsKKyAgICB9CisKKyAgICB2
b2lkIHhvclVuc2lnbmVkUmlnaHRTaGlmdDMyKFJlZ2lzdGVySUQgbiwgUmVnaXN0ZXJJRCBtLCBU
cnVzdGVkSW1tMzIgYW1vdW50LCBSZWdpc3RlcklEIGQpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5lb3I8MzI+KGQsIG4sIG0sIEFzc2VtYmxlcjo6TFNSLCBhbW91bnQubV92YWx1ZSk7Cisg
ICAgfQorCisgICAgdm9pZCB4b3JMZWZ0U2hpZnQ2NChSZWdpc3RlcklEIG4sIFJlZ2lzdGVySUQg
bSwgVHJ1c3RlZEltbTMyIGFtb3VudCwgUmVnaXN0ZXJJRCBkKQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIuZW9yPDY0PihkLCBuLCBtLCBBc3NlbWJsZXI6OkxTTCwgYW1vdW50Lm1fdmFsdWUp
OworICAgIH0KKworICAgIHZvaWQgeG9yUmlnaHRTaGlmdDY0KFJlZ2lzdGVySUQgbiwgUmVnaXN0
ZXJJRCBtLCBUcnVzdGVkSW1tMzIgYW1vdW50LCBSZWdpc3RlcklEIGQpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5lb3I8NjQ+KGQsIG4sIG0sIEFzc2VtYmxlcjo6QVNSLCBhbW91bnQubV92
YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCB4b3JVbnNpZ25lZFJpZ2h0U2hpZnQ2NChSZWdpc3Rl
cklEIG4sIFJlZ2lzdGVySUQgbSwgVHJ1c3RlZEltbTMyIGFtb3VudCwgUmVnaXN0ZXJJRCBkKQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuZW9yPDY0PihkLCBuLCBtLCBBc3NlbWJsZXI6OkxT
UiwgYW1vdW50Lm1fdmFsdWUpOworICAgIH0KKworICAgIHZvaWQgb3JMZWZ0U2hpZnQzMihSZWdp
c3RlcklEIG4sIFJlZ2lzdGVySUQgbSwgVHJ1c3RlZEltbTMyIGFtb3VudCwgUmVnaXN0ZXJJRCBk
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3JyPDMyPihkLCBuLCBtLCBBc3NlbWJsZXI6
OkxTTCwgYW1vdW50Lm1fdmFsdWUpOworICAgIH0KKworICAgIHZvaWQgb3JSaWdodFNoaWZ0MzIo
UmVnaXN0ZXJJRCBuLCBSZWdpc3RlcklEIG0sIFRydXN0ZWRJbW0zMiBhbW91bnQsIFJlZ2lzdGVy
SUQgZCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ycjwzMj4oZCwgbiwgbSwgQXNzZW1i
bGVyOjpBU1IsIGFtb3VudC5tX3ZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIG9yVW5zaWduZWRS
aWdodFNoaWZ0MzIoUmVnaXN0ZXJJRCBuLCBSZWdpc3RlcklEIG0sIFRydXN0ZWRJbW0zMiBhbW91
bnQsIFJlZ2lzdGVySUQgZCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ycjwzMj4oZCwg
biwgbSwgQXNzZW1ibGVyOjpMU1IsIGFtb3VudC5tX3ZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lk
IG9yTGVmdFNoaWZ0NjQoUmVnaXN0ZXJJRCBuLCBSZWdpc3RlcklEIG0sIFRydXN0ZWRJbW0zMiBh
bW91bnQsIFJlZ2lzdGVySUQgZCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ycjw2ND4o
ZCwgbiwgbSwgQXNzZW1ibGVyOjpMU0wsIGFtb3VudC5tX3ZhbHVlKTsKKyAgICB9CisKKyAgICB2
b2lkIG9yUmlnaHRTaGlmdDY0KFJlZ2lzdGVySUQgbiwgUmVnaXN0ZXJJRCBtLCBUcnVzdGVkSW1t
MzIgYW1vdW50LCBSZWdpc3RlcklEIGQpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5vcnI8
NjQ+KGQsIG4sIG0sIEFzc2VtYmxlcjo6QVNSLCBhbW91bnQubV92YWx1ZSk7CisgICAgfQorCisg
ICAgdm9pZCBvclVuc2lnbmVkUmlnaHRTaGlmdDY0KFJlZ2lzdGVySUQgbiwgUmVnaXN0ZXJJRCBt
LCBUcnVzdGVkSW1tMzIgYW1vdW50LCBSZWdpc3RlcklEIGQpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5vcnI8NjQ+KGQsIG4sIG0sIEFzc2VtYmxlcjo6TFNSLCBhbW91bnQubV92YWx1ZSk7
CisgICAgfQorCiAgICAgdm9pZCBjbGVhckJpdDY0KFJlZ2lzdGVySUQgYml0VG9DbGVhciwgUmVn
aXN0ZXJJRCBkZXN0LCBSZWdpc3RlcklEIHNjcmF0Y2hGb3JNYXNrID0gSW52YWxpZEdQUlJlZykK
ICAgICB7CiAgICAgICAgIGlmIChzY3JhdGNoRm9yTWFzayA9PSBJbnZhbGlkR1BSUmVnKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcAppbmRleCAxY2E2OTgz
ZWI3MGQ5NjQwYmU0ZmIyZjExMGUyZjhlMDFmMzhmODM4Li5mNGM2MDk3MGM2MGYxOGZiYWY2MGY5
ZDU2NGI5ZDM1ZWJjOTRmNDBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL3Rlc3RtYXNtLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L3Rlc3RtYXNtLmNwcApAQCAtMjM4Miw2ICsyMzgyLDQ3NCBAQCB2b2lkIHRlc3RMb2FkUHJlUG9z
dEluZGV4NjQoKQogICAgIENIRUNLX0VRKHRlc3QyKDUpLCAyKTsKICAgICBDSEVDS19FUShudW1z
WzJdLCA1KTsKIH0KKwordm9pZCB0ZXN0QW5kTGVmdFNoaWZ0MzIoKQoreworICAgIFZlY3Rvcjxp
bnQzMl90PiBhbW91bnRzID0geyAwLCAxNywgMzEgfTsKKyAgICBmb3IgKGF1dG8gbiA6IGludDMy
T3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbSA6IGludDMyT3BlcmFuZHMoKSkgewor
ICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAg
ICBhdXRvIGFuZDMyID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAg
ICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgICAg
ICAgICAgaml0LmFuZExlZnRTaGlmdDMyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BSMSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFtb3VudCksCisgICAgICAgICAgICAg
ICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAgICAg
ICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgICAgICAgICAgaml0LnJl
dCgpOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgaW50MzJfdCBsaHMg
PSBpbnZva2U8aW50MzJfdD4oYW5kMzIsIG4sIG0pOworICAgICAgICAgICAgICAgIGludDMyX3Qg
cmhzID0gbiAmIChtIDw8IGFtb3VudCk7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEobGhzLCBy
aHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RBbmRS
aWdodFNoaWZ0MzIoKQoreworICAgIFZlY3RvcjxpbnQzMl90PiBhbW91bnRzID0geyAwLCAxNywg
MzEgfTsKKyAgICBmb3IgKGF1dG8gbiA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICBmb3Ig
KGF1dG8gbSA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3Vu
dCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGFuZDMyID0gY29tcGlsZShbPV0g
KENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvblBy
b2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgICAgICAgICAgaml0LmFuZFJpZ2h0U2hpZnQzMihH
UFJJbmZvOjphcmd1bWVudEdQUjAsCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjph
cmd1bWVudEdQUjEsCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihhbW91bnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpOworCisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGpp
dCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAgICAgICB9KTsK
KworICAgICAgICAgICAgICAgIGludDMyX3QgbGhzID0gaW52b2tlPGludDMyX3Q+KGFuZDMyLCBu
LCBtKTsKKyAgICAgICAgICAgICAgICBpbnQzMl90IHJocyA9IG4gJiAobSA+PiBhbW91bnQpOwor
ICAgICAgICAgICAgICAgIENIRUNLX0VRKGxocywgcmhzKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0QW5kVW5zaWduZWRSaWdodFNoaWZ0MzIoKQorewor
ICAgIFZlY3Rvcjx1aW50MzJfdD4gYW1vdW50cyA9IHsgMCwgMTcsIDMxIH07CisgICAgZm9yIChh
dXRvIG4gOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG0gOiBpbnQzMk9w
ZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7Cisg
ICAgICAgICAgICAgICAgYXV0byBhbmQzMiA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCkgeworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisg
ICAgICAgICAgICAgICAgICAgIGppdC5hbmRVbnNpZ25lZFJpZ2h0U2hpZnQzMihHUFJJbmZvOjph
cmd1bWVudEdQUjAsCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjphcmd1bWVudEdQ
UjEsCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihh
bW91bnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
OworCisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAg
ICAgICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAg
ICAgICAgICAgIHVpbnQzMl90IGxocyA9IGludm9rZTx1aW50MzJfdD4oYW5kMzIsIG4sIG0pOwor
ICAgICAgICAgICAgICAgIHVpbnQzMl90IHJocyA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihuKSAm
IChzdGF0aWNfY2FzdDx1aW50MzJfdD4obSkgPj4gYW1vdW50KTsKKyAgICAgICAgICAgICAgICBD
SEVDS19FUShsaHMsIHJocyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisK
K3ZvaWQgdGVzdEFuZExlZnRTaGlmdDY0KCkKK3sKKyAgICBWZWN0b3I8aW50MzJfdD4gYW1vdW50
cyA9IHsgMCwgMzQsIDYzIH07CisgICAgZm9yIChhdXRvIG4gOiBpbnQ2NE9wZXJhbmRzKCkpIHsK
KyAgICAgICAgZm9yIChhdXRvIG0gOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZv
ciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgYXV0byBhbmQ2NCA9
IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgICAgICAgICBl
bWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAgICAgICAgIGppdC5hbmRM
ZWZ0U2hpZnQ2NChHUFJJbmZvOjphcmd1bWVudEdQUjAsCisgICAgICAgICAgICAgICAgICAgICAg
ICBHUFJJbmZvOjphcmd1bWVudEdQUjEsCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihhbW91bnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlv
bkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAg
ICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIGludDY0X3QgbGhzID0gaW52b2tlPGludDY0
X3Q+KGFuZDY0LCBuLCBtKTsKKyAgICAgICAgICAgICAgICBpbnQ2NF90IHJocyA9IG4gJiAobSA8
PCBhbW91bnQpOworICAgICAgICAgICAgICAgIENIRUNLX0VRKGxocywgcmhzKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0QW5kUmlnaHRTaGlmdDY0KCkK
K3sKKyAgICBWZWN0b3I8aW50MzJfdD4gYW1vdW50cyA9IHsgMCwgMzQsIDYzIH07CisgICAgZm9y
IChhdXRvIG4gOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG0gOiBpbnQ2
NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7
CisgICAgICAgICAgICAgICAgYXV0byBhbmQ2NCA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMm
IGppdCkgeworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOwor
CisgICAgICAgICAgICAgICAgICAgIGppdC5hbmRSaWdodFNoaWZ0NjQoR1BSSW5mbzo6YXJndW1l
bnRHUFIwLAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6YXJndW1lbnRHUFIxLAor
ICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYW1vdW50
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKwor
ICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAg
ICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAg
ICAgICBpbnQ2NF90IGxocyA9IGludm9rZTxpbnQ2NF90PihhbmQ2NCwgbiwgbSk7CisgICAgICAg
ICAgICAgICAgaW50NjRfdCByaHMgPSBuICYgKG0gPj4gYW1vdW50KTsKKyAgICAgICAgICAgICAg
ICBDSEVDS19FUShsaHMsIHJocyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9
CisKK3ZvaWQgdGVzdEFuZFVuc2lnbmVkUmlnaHRTaGlmdDY0KCkKK3sKKyAgICBWZWN0b3I8dWlu
dDMyX3Q+IGFtb3VudHMgPSB7IDAsIDM0LCA2MyB9OworICAgIGZvciAoYXV0byBuIDogaW50NjRP
cGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtIDogaW50NjRPcGVyYW5kcygpKSB7Cisg
ICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAgICAg
IGF1dG8gYW5kNjQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgICAg
ICAgICBqaXQuYW5kVW5zaWduZWRSaWdodFNoaWZ0NjQoR1BSSW5mbzo6YXJndW1lbnRHUFIwLAor
ICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6YXJndW1lbnRHUFIxLAorICAgICAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYW1vdW50KSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAg
ICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgICAgICAg
ICBqaXQucmV0KCk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICB1aW50
NjRfdCBsaHMgPSBpbnZva2U8dWludDY0X3Q+KGFuZDY0LCBuLCBtKTsKKyAgICAgICAgICAgICAg
ICB1aW50NjRfdCByaHMgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4obikgJiAoc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KG0pID4+IGFtb3VudCk7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEobGhzLCBy
aHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RYb3JM
ZWZ0U2hpZnQzMigpCit7CisgICAgVmVjdG9yPGludDMyX3Q+IGFtb3VudHMgPSB7IDAsIDE3LCAz
MSB9OworICAgIGZvciAoYXV0byBuIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAo
YXV0byBtIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50
IDogYW1vdW50cykgeworICAgICAgICAgICAgICAgIGF1dG8geG9yMzIgPSBjb21waWxlKFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJv
bG9ndWUoaml0KTsKKworICAgICAgICAgICAgICAgICAgICBqaXQueG9yTGVmdFNoaWZ0MzIoR1BS
SW5mbzo6YXJndW1lbnRHUFIwLAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6YXJn
dW1lbnRHUFIxLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoYW1vdW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZh
bHVlR1BSKTsKKworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQp
OworICAgICAgICAgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICAgICAgfSk7CisK
KyAgICAgICAgICAgICAgICBpbnQzMl90IGxocyA9IGludm9rZTxpbnQzMl90Pih4b3IzMiwgbiwg
bSk7CisgICAgICAgICAgICAgICAgaW50MzJfdCByaHMgPSBuIF4gKG0gPDwgYW1vdW50KTsKKyAg
ICAgICAgICAgICAgICBDSEVDS19FUShsaHMsIHJocyk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdFhvclJpZ2h0U2hpZnQzMigpCit7CisgICAgVmVjdG9y
PGludDMyX3Q+IGFtb3VudHMgPSB7IDAsIDE3LCAzMSB9OworICAgIGZvciAoYXV0byBuIDogaW50
MzJPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtIDogaW50MzJPcGVyYW5kcygpKSB7
CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAg
ICAgIGF1dG8geG9yMzIgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAg
ICAgICAgICBqaXQueG9yUmlnaHRTaGlmdDMyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BSMSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFtb3VudCksCisgICAgICAgICAg
ICAgICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAg
ICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgICAgICAgICAgaml0
LnJldCgpOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgaW50MzJfdCBs
aHMgPSBpbnZva2U8aW50MzJfdD4oeG9yMzIsIG4sIG0pOworICAgICAgICAgICAgICAgIGludDMy
X3QgcmhzID0gbiBeIChtID4+IGFtb3VudCk7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEobGhz
LCByaHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RY
b3JVbnNpZ25lZFJpZ2h0U2hpZnQzMigpCit7CisgICAgVmVjdG9yPHVpbnQzMl90PiBhbW91bnRz
ID0geyAwLCAxNywgMzEgfTsKKyAgICBmb3IgKGF1dG8gbiA6IGludDMyT3BlcmFuZHMoKSkgewor
ICAgICAgICBmb3IgKGF1dG8gbSA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9y
IChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHhvcjMyID0g
Y29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAgICAgIGVt
aXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgICAgICAgICAgaml0LnhvclVu
c2lnbmVkUmlnaHRTaGlmdDMyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BSMSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFtb3VudCksCisgICAgICAgICAgICAgICAgICAg
ICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAgICAgICAgZW1p
dEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgICAgICAgICAgaml0LnJldCgpOwor
ICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgdWludDMyX3QgbGhzID0gaW52
b2tlPHVpbnQzMl90Pih4b3IzMiwgbiwgbSk7CisgICAgICAgICAgICAgICAgdWludDMyX3Qgcmhz
ID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG4pIF4gKHN0YXRpY19jYXN0PHVpbnQzMl90PihtKSA+
PiBhbW91bnQpOworICAgICAgICAgICAgICAgIENIRUNLX0VRKGxocywgcmhzKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0WG9yTGVmdFNoaWZ0NjQoKQor
eworICAgIFZlY3RvcjxpbnQzMl90PiBhbW91bnRzID0geyAwLCAzNCwgNjMgfTsKKyAgICBmb3Ig
KGF1dG8gbiA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbSA6IGludDY0
T3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsK
KyAgICAgICAgICAgICAgICBhdXRvIHhvcjY0ID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYg
aml0KSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisK
KyAgICAgICAgICAgICAgICAgICAgaml0LnhvckxlZnRTaGlmdDY0KEdQUkluZm86OmFyZ3VtZW50
R1BSMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BSMSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFtb3VudCks
CisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAg
ICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAg
ICAgICAgICAgaml0LnJldCgpOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAg
ICAgaW50NjRfdCBsaHMgPSBpbnZva2U8aW50NjRfdD4oeG9yNjQsIG4sIG0pOworICAgICAgICAg
ICAgICAgIGludDY0X3QgcmhzID0gbiBeIChtIDw8IGFtb3VudCk7CisgICAgICAgICAgICAgICAg
Q0hFQ0tfRVEobGhzLCByaHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQor
Cit2b2lkIHRlc3RYb3JSaWdodFNoaWZ0NjQoKQoreworICAgIFZlY3RvcjxpbnQzMl90PiBhbW91
bnRzID0geyAwLCAzNCwgNjMgfTsKKyAgICBmb3IgKGF1dG8gbiA6IGludDY0T3BlcmFuZHMoKSkg
eworICAgICAgICBmb3IgKGF1dG8gbSA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICAgICAg
Zm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHhvcjY0
ID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAgICAg
IGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgICAgICAgICAgaml0Lnhv
clJpZ2h0U2hpZnQ2NChHUFJJbmZvOjphcmd1bWVudEdQUjAsCisgICAgICAgICAgICAgICAgICAg
ICAgICBHUFJJbmZvOjphcmd1bWVudEdQUjEsCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbW91bnQpLAorICAgICAgICAgICAgICAgICAgICAgICAg
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5j
dGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAg
ICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIGludDY0X3QgbGhzID0gaW52b2tlPGlu
dDY0X3Q+KHhvcjY0LCBuLCBtKTsKKyAgICAgICAgICAgICAgICBpbnQ2NF90IHJocyA9IG4gXiAo
bSA+PiBhbW91bnQpOworICAgICAgICAgICAgICAgIENIRUNLX0VRKGxocywgcmhzKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0WG9yVW5zaWduZWRSaWdo
dFNoaWZ0NjQoKQoreworICAgIFZlY3Rvcjx1aW50MzJfdD4gYW1vdW50cyA9IHsgMCwgMzQsIDYz
IH07CisgICAgZm9yIChhdXRvIG4gOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChh
dXRvIG0gOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQg
OiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgYXV0byB4b3I2NCA9IGNvbXBpbGUoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9s
b2d1ZShqaXQpOworCisgICAgICAgICAgICAgICAgICAgIGppdC54b3JVbnNpZ25lZFJpZ2h0U2hp
ZnQ2NChHUFJJbmZvOjphcmd1bWVudEdQUjAsCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJ
bmZvOjphcmd1bWVudEdQUjEsCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihhbW91bnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxv
Z3VlKGppdCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAgICAg
ICB9KTsKKworICAgICAgICAgICAgICAgIHVpbnQ2NF90IGxocyA9IGludm9rZTx1aW50NjRfdD4o
eG9yNjQsIG4sIG0pOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IHJocyA9IHN0YXRpY19jYXN0
PHVpbnQ2NF90PihuKSBeIChzdGF0aWNfY2FzdDx1aW50NjRfdD4obSkgPj4gYW1vdW50KTsKKyAg
ICAgICAgICAgICAgICBDSEVDS19FUShsaHMsIHJocyk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdE9yTGVmdFNoaWZ0MzIoKQoreworICAgIFZlY3Rvcjxp
bnQzMl90PiBhbW91bnRzID0geyAwLCAxNywgMzEgfTsKKyAgICBmb3IgKGF1dG8gbiA6IGludDMy
T3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbSA6IGludDMyT3BlcmFuZHMoKSkgewor
ICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAg
ICBhdXRvIG9yMzIgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgICAg
ICAgICBqaXQub3JMZWZ0U2hpZnQzMihHUFJJbmZvOjphcmd1bWVudEdQUjAsCisgICAgICAgICAg
ICAgICAgICAgICAgICBHUFJJbmZvOjphcmd1bWVudEdQUjEsCisgICAgICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbW91bnQpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICAgICAgICAg
IGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5yZXQo
KTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIGludDMyX3QgbGhzID0g
aW52b2tlPGludDMyX3Q+KG9yMzIsIG4sIG0pOworICAgICAgICAgICAgICAgIGludDMyX3Qgcmhz
ID0gbiB8IChtIDw8IGFtb3VudCk7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEobGhzLCByaHMp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RPclJpZ2h0
U2hpZnQzMigpCit7CisgICAgVmVjdG9yPGludDMyX3Q+IGFtb3VudHMgPSB7IDAsIDE3LCAzMSB9
OworICAgIGZvciAoYXV0byBuIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0
byBtIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDog
YW1vdW50cykgeworICAgICAgICAgICAgICAgIGF1dG8gb3IzMiA9IGNvbXBpbGUoWz1dIChDQ2Fs
bEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1
ZShqaXQpOworCisgICAgICAgICAgICAgICAgICAgIGppdC5vclJpZ2h0U2hpZnQzMihHUFJJbmZv
Ojphcmd1bWVudEdQUjAsCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjphcmd1bWVu
dEdQUjEsCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihhbW91bnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpOworCisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7Cisg
ICAgICAgICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAg
ICAgICAgICAgICAgIGludDMyX3QgbGhzID0gaW52b2tlPGludDMyX3Q+KG9yMzIsIG4sIG0pOwor
ICAgICAgICAgICAgICAgIGludDMyX3QgcmhzID0gbiB8IChtID4+IGFtb3VudCk7CisgICAgICAg
ICAgICAgICAgQ0hFQ0tfRVEobGhzLCByaHMpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorfQorCit2b2lkIHRlc3RPclVuc2lnbmVkUmlnaHRTaGlmdDMyKCkKK3sKKyAgICBWZWN0
b3I8dWludDMyX3Q+IGFtb3VudHMgPSB7IDAsIDE3LCAzMSB9OworICAgIGZvciAoYXV0byBuIDog
aW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtIDogaW50MzJPcGVyYW5kcygp
KSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAg
ICAgICAgIGF1dG8gb3IzMiA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAg
ICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAg
ICAgICAgICAgIGppdC5vclVuc2lnbmVkUmlnaHRTaGlmdDMyKEdQUkluZm86OmFyZ3VtZW50R1BS
MCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BSMSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFtb3VudCksCisg
ICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAg
ICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgICAg
ICAgICAgaml0LnJldCgpOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAg
dWludDMyX3QgbGhzID0gaW52b2tlPHVpbnQzMl90PihvcjMyLCBuLCBtKTsKKyAgICAgICAgICAg
ICAgICB1aW50MzJfdCByaHMgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4obikgfCAoc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KG0pID4+IGFtb3VudCk7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEobGhz
LCByaHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RP
ckxlZnRTaGlmdDY0KCkKK3sKKyAgICBWZWN0b3I8aW50MzJfdD4gYW1vdW50cyA9IHsgMCwgMzQs
IDYzIH07CisgICAgZm9yIChhdXRvIG4gOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9y
IChhdXRvIG0gOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91
bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgYXV0byBvcjY0ID0gY29tcGlsZShbPV0g
KENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvblBy
b2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgICAgICAgICAgaml0Lm9yTGVmdFNoaWZ0NjQoR1BS
SW5mbzo6YXJndW1lbnRHUFIwLAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6YXJn
dW1lbnRHUFIxLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoYW1vdW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZh
bHVlR1BSKTsKKworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQp
OworICAgICAgICAgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICAgICAgfSk7CisK
KyAgICAgICAgICAgICAgICBpbnQ2NF90IGxocyA9IGludm9rZTxpbnQ2NF90PihvcjY0LCBuLCBt
KTsKKyAgICAgICAgICAgICAgICBpbnQ2NF90IHJocyA9IG4gfCAobSA8PCBhbW91bnQpOworICAg
ICAgICAgICAgICAgIENIRUNLX0VRKGxocywgcmhzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KK30KKwordm9pZCB0ZXN0T3JSaWdodFNoaWZ0NjQoKQoreworICAgIFZlY3Rvcjxp
bnQzMl90PiBhbW91bnRzID0geyAwLCAzNCwgNjMgfTsKKyAgICBmb3IgKGF1dG8gbiA6IGludDY0
T3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbSA6IGludDY0T3BlcmFuZHMoKSkgewor
ICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAg
ICBhdXRvIG9yNjQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgICAg
ICAgICBqaXQub3JSaWdodFNoaWZ0NjQoR1BSSW5mbzo6YXJndW1lbnRHUFIwLAorICAgICAgICAg
ICAgICAgICAgICAgICAgR1BSSW5mbzo6YXJndW1lbnRHUFIxLAorICAgICAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYW1vdW50KSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgICAgICAg
ICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgICAgICAgICBqaXQucmV0
KCk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICBpbnQ2NF90IGxocyA9
IGludm9rZTxpbnQ2NF90PihvcjY0LCBuLCBtKTsKKyAgICAgICAgICAgICAgICBpbnQ2NF90IHJo
cyA9IG4gfCAobSA+PiBhbW91bnQpOworICAgICAgICAgICAgICAgIENIRUNLX0VRKGxocywgcmhz
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0T3JVbnNp
Z25lZFJpZ2h0U2hpZnQ2NCgpCit7CisgICAgVmVjdG9yPHVpbnQzMl90PiBhbW91bnRzID0geyAw
LCAzNCwgNjMgfTsKKyAgICBmb3IgKGF1dG8gbiA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAg
ICBmb3IgKGF1dG8gbSA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRv
IGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBhdXRvIG9yNjQgPSBjb21waWxl
KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0
aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgICAgICAgICBqaXQub3JVbnNpZ25lZFJp
Z2h0U2hpZnQ2NChHUFJJbmZvOjphcmd1bWVudEdQUjAsCisgICAgICAgICAgICAgICAgICAgICAg
ICBHUFJJbmZvOjphcmd1bWVudEdQUjEsCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihhbW91bnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlv
bkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAg
ICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIHVpbnQ2NF90IGxocyA9IGludm9rZTx1aW50
NjRfdD4ob3I2NCwgbiwgbSk7CisgICAgICAgICAgICAgICAgdWludDY0X3QgcmhzID0gc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KG4pIHwgKHN0YXRpY19jYXN0PHVpbnQ2NF90PihtKSA+PiBhbW91bnQp
OworICAgICAgICAgICAgICAgIENIRUNLX0VRKGxocywgcmhzKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KK30KICNlbmRpZgogCiAjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkg
fHwgQ1BVKEFSTTY0KQpAQCAtNDk4MCw2ICs1NDQ4LDI2IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIq
IGZpbHRlcikgV1RGX0lHTk9SRVNfVEhSRUFEX1NBRkVUWV9BTkFMWVNJUwogICAgIFJVTih0ZXN0
U3RvcmVQcmVQb3N0SW5kZXg2NCgpKTsKICAgICBSVU4odGVzdExvYWRQcmVQb3N0SW5kZXgzMigp
KTsKICAgICBSVU4odGVzdExvYWRQcmVQb3N0SW5kZXg2NCgpKTsKKyAgICBSVU4odGVzdEFuZExl
ZnRTaGlmdDMyKCkpOworICAgIFJVTih0ZXN0QW5kUmlnaHRTaGlmdDMyKCkpOworICAgIFJVTih0
ZXN0QW5kVW5zaWduZWRSaWdodFNoaWZ0MzIoKSk7CisgICAgUlVOKHRlc3RBbmRMZWZ0U2hpZnQ2
NCgpKTsKKyAgICBSVU4odGVzdEFuZFJpZ2h0U2hpZnQ2NCgpKTsKKyAgICBSVU4odGVzdEFuZFVu
c2lnbmVkUmlnaHRTaGlmdDY0KCkpOworCisgICAgUlVOKHRlc3RYb3JMZWZ0U2hpZnQzMigpKTsK
KyAgICBSVU4odGVzdFhvclJpZ2h0U2hpZnQzMigpKTsKKyAgICBSVU4odGVzdFhvclVuc2lnbmVk
UmlnaHRTaGlmdDMyKCkpOworICAgIFJVTih0ZXN0WG9yTGVmdFNoaWZ0NjQoKSk7CisgICAgUlVO
KHRlc3RYb3JSaWdodFNoaWZ0NjQoKSk7CisgICAgUlVOKHRlc3RYb3JVbnNpZ25lZFJpZ2h0U2hp
ZnQ2NCgpKTsKKworICAgIFJVTih0ZXN0T3JMZWZ0U2hpZnQzMigpKTsKKyAgICBSVU4odGVzdE9y
UmlnaHRTaGlmdDMyKCkpOworICAgIFJVTih0ZXN0T3JVbnNpZ25lZFJpZ2h0U2hpZnQzMigpKTsK
KyAgICBSVU4odGVzdE9yTGVmdFNoaWZ0NjQoKSk7CisgICAgUlVOKHRlc3RPclJpZ2h0U2hpZnQ2
NCgpKTsKKyAgICBSVU4odGVzdE9yVW5zaWduZWRSaWdodFNoaWZ0NjQoKSk7CiAjZW5kaWYKIAog
I2lmIENQVShBUk02NEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNM
b3dlclRvQWlyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3Bw
CmluZGV4IGViYjAzNTJjYjMwODAzZGJjMWZlODE4ZTM5OTBiYTM3NDU3MDY2MzcuLjFkN2NiMDEz
NjA1ZDNmZWZjZGZjY2M0YzNiYTM4MDEyNTI1ODJhY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0xvd2VyVG9BaXIuY3BwCkBAIC0yNTI4LDcgKzI1MjgsMjQgQEAgcHJpdmF0ZToKICAg
ICAgICAgfQogICAgICAgICByZWxvb3BCbG9jay0+c2V0U3VjY2Vzc29ycyhkb25lQmxvY2ssIHJl
bG9vcEJsb2NrKTsKICAgICB9Ci0gICAgCisKKyAgICBib29sIHRyeUFwcGVuZEJpdE9wV2l0aFNo
aWZ0KFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIEFpcjo6T3Bjb2RlIG9wY29kZSkKKyAgICB7
CisgICAgICAgIGlmICghaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFy
Zzo6SW1tLCBBcmc6OlRtcCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBpZiAoIWNhbkJlSW50ZXJuYWwocmlnaHQpIHx8ICFpbW0ocmlnaHQtPmNoaWxkKDEpKSB8fCBy
aWdodC0+Y2hpbGQoMSktPmFzSW50KCkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIHVpbnQ2NF90IGFtb3VudCA9IHJpZ2h0LT5jaGlsZCgxKS0+YXNJbnQoKTsKKyAg
ICAgICAgdWludDY0X3QgZGF0YXNpemUgPSBtX3ZhbHVlLT50eXBlKCkgPT0gSW50MzIgPyAzMiA6
IDY0OworICAgICAgICBpZiAoYW1vdW50ID49IGRhdGFzaXplKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgIGFwcGVuZChvcGNvZGUsIHRtcChsZWZ0KSwgdG1wKHJpZ2h0LT5j
aGlsZCgwKSksIGltbShyaWdodC0+Y2hpbGQoMSkpLCB0bXAobV92YWx1ZSkpOworICAgICAgICBj
b21taXRJbnRlcm5hbChyaWdodCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAg
IHZvaWQgbG93ZXIoKQogICAgIHsKICAgICAgICAgdXNpbmcgbmFtZXNwYWNlIEFpcjsKQEAgLTI3
MDQsMjUgKzI3MjEsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmICh0cnlNdWx0aXBseUFk
ZCgpKQogICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgLy8gYWRkLXdpdGgt
c2hpZnQgUGF0dGVybjogbiArIChtIFNoaWZ0VHlwZSBhbW91bnQpCisgICAgICAgICAgICAvLyBh
ZGQtd2l0aC1zaGlmdCBQYXR0ZXJuOiBsZWZ0ICsgKHJpZ2h0IFNoaWZ0VHlwZSBhbW91bnQpCiAg
ICAgICAgICAgICBhdXRvIHRyeUFwcGVuZEFkZFdpdGhTaGlmdCA9IFsmXSAoVmFsdWUqIGxlZnQs
IFZhbHVlKiByaWdodCkgLT4gYm9vbCB7Ci0gICAgICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bj
b2RlID0gb3Bjb2RlQmFzZWRPblNoaWZ0S2luZChyaWdodC0+b3Bjb2RlKCksIAotICAgICAgICAg
ICAgICAgICAgICBBZGRMZWZ0U2hpZnQzMiwgQWRkTGVmdFNoaWZ0NjQsIAotICAgICAgICAgICAg
ICAgICAgICBBZGRSaWdodFNoaWZ0MzIsIEFkZFJpZ2h0U2hpZnQ2NCwgCisgICAgICAgICAgICAg
ICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gb3Bjb2RlQmFzZWRPblNoaWZ0S2luZChyaWdodC0+b3Bj
b2RlKCksCisgICAgICAgICAgICAgICAgICAgIEFkZExlZnRTaGlmdDMyLCBBZGRMZWZ0U2hpZnQ2
NCwKKyAgICAgICAgICAgICAgICAgICAgQWRkUmlnaHRTaGlmdDMyLCBBZGRSaWdodFNoaWZ0NjQs
CiAgICAgICAgICAgICAgICAgICAgIEFkZFVuc2lnbmVkUmlnaHRTaGlmdDMyLCBBZGRVbnNpZ25l
ZFJpZ2h0U2hpZnQ2NCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkRm9ybShvcGNvZGUs
IEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJnOjpJbW0sIEFyZzo6VG1wKSkgCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBpZiAoIWNhbkJlSW50ZXJuYWwo
cmlnaHQpIHx8ICFpbW0ocmlnaHQtPmNoaWxkKDEpKSB8fCByaWdodC0+Y2hpbGQoMSktPmFzSW50
KCkgPCAwKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAg
ICAgICB1aW50NjRfdCBhbW91bnQgPSByaWdodC0+Y2hpbGQoMSktPmFzSW50KCk7Ci0gICAgICAg
ICAgICAgICAgdWludDY0X3QgZGF0YXNpemUgPSBtX3ZhbHVlLT50eXBlKCkgPT0gSW50MzIgPyAz
MiA6IDY0OwotICAgICAgICAgICAgICAgIGlmIChhbW91bnQgPj0gZGF0YXNpemUpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgICAgIGFwcGVuZChvcGNv
ZGUsIHRtcChsZWZ0KSwgdG1wKHJpZ2h0LT5jaGlsZCgwKSksIGltbShyaWdodC0+Y2hpbGQoMSkp
LCB0bXAobV92YWx1ZSkpOwotICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKHJpZ2h0KTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ5
QXBwZW5kQml0T3BXaXRoU2hpZnQobGVmdCwgcmlnaHQsIG9wY29kZSk7CiAgICAgICAgICAgICB9
OwogCiAgICAgICAgICAgICBpZiAodHJ5QXBwZW5kQWRkV2l0aFNoaWZ0KGxlZnQsIHJpZ2h0KSB8
fCB0cnlBcHBlbmRBZGRXaXRoU2hpZnQocmlnaHQsIGxlZnQpKQpAQCAtMjc3OSwyOCArMjc4NCwx
MiBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKHRyeUFwcGVuZE11bHRpcGx5U3ViKCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICAvLyBzdWItd2l0aC1zaGlmdCBQ
YXR0ZXJuOiBuIC0gKG0gU2hpZnRUeXBlIGFtb3VudCkKLSAgICAgICAgICAgIGF1dG8gdHJ5QXBw
ZW5kU3ViQW5kU2hpZnQgPSBbJl0gKCkgLT4gYm9vbCB7Ci0gICAgICAgICAgICAgICAgQWlyOjpP
cGNvZGUgb3Bjb2RlID0gb3Bjb2RlQmFzZWRPblNoaWZ0S2luZChyaWdodC0+b3Bjb2RlKCksIAot
ICAgICAgICAgICAgICAgICAgICBTdWJMZWZ0U2hpZnQzMiwgU3ViTGVmdFNoaWZ0NjQsIAotICAg
ICAgICAgICAgICAgICAgICBTdWJSaWdodFNoaWZ0MzIsIFN1YlJpZ2h0U2hpZnQ2NCwgCi0gICAg
ICAgICAgICAgICAgICAgIFN1YlVuc2lnbmVkUmlnaHRTaGlmdDMyLCBTdWJVbnNpZ25lZFJpZ2h0
U2hpZnQ2NCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6
VG1wLCBBcmc6OlRtcCwgQXJnOjpJbW0sIEFyZzo6VG1wKSkgCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBpZiAoIWNhbkJlSW50ZXJuYWwocmlnaHQp
IHx8ICFpbW0ocmlnaHQtPmNoaWxkKDEpKSB8fCByaWdodC0+Y2hpbGQoMSktPmFzSW50KCkgPCAw
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgICAgICB1
aW50NjRfdCBhbW91bnQgPSByaWdodC0+Y2hpbGQoMSktPmFzSW50KCk7Ci0gICAgICAgICAgICAg
ICAgdWludDY0X3QgZGF0YXNpemUgPSBtX3ZhbHVlLT50eXBlKCkgPT0gSW50MzIgPyAzMiA6IDY0
OwotICAgICAgICAgICAgICAgIGlmIChhbW91bnQgPj0gZGF0YXNpemUpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIHRt
cChsZWZ0KSwgdG1wKHJpZ2h0LT5jaGlsZCgwKSksIGltbShyaWdodC0+Y2hpbGQoMSkpLCB0bXAo
bV92YWx1ZSkpOwotICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKHJpZ2h0KTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIGlm
ICh0cnlBcHBlbmRTdWJBbmRTaGlmdCgpKQorICAgICAgICAgICAgLy8gc3ViLXdpdGgtc2hpZnQg
UGF0dGVybjogbGVmdCAtIChyaWdodCBTaGlmdFR5cGUgYW1vdW50KQorICAgICAgICAgICAgQWly
OjpPcGNvZGUgb3Bjb2RlID0gb3Bjb2RlQmFzZWRPblNoaWZ0S2luZChyaWdodC0+b3Bjb2RlKCks
CisgICAgICAgICAgICAgICAgU3ViTGVmdFNoaWZ0MzIsIFN1YkxlZnRTaGlmdDY0LAorICAgICAg
ICAgICAgICAgIFN1YlJpZ2h0U2hpZnQzMiwgU3ViUmlnaHRTaGlmdDY0LAorICAgICAgICAgICAg
ICAgIFN1YlVuc2lnbmVkUmlnaHRTaGlmdDMyLCBTdWJVbnNpZ25lZFJpZ2h0U2hpZnQ2NCk7Cisg
ICAgICAgICAgICBpZiAodHJ5QXBwZW5kQml0T3BXaXRoU2hpZnQobGVmdCwgcmlnaHQsIG9wY29k
ZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICBhcHBlbmRCaW5PcDxT
dWIzMiwgU3ViNjQsIFN1YkRvdWJsZSwgU3ViRmxvYXQ+KGxlZnQsIHJpZ2h0KTsKQEAgLTI5ODgs
NiArMjk3NywxOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKHRyeUFwcGVuZEJJQyhsZWZ0
LCByaWdodCkgfHwgdHJ5QXBwZW5kQklDKHJpZ2h0LCBsZWZ0KSkKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAKKyAgICAgICAgICAgIC8vIGFuZC13aXRoLXNoaWZ0IFBhdHRlcm46IGxlZnQgJiAo
cmlnaHQgU2hpZnRUeXBlIGFtb3VudCkKKyAgICAgICAgICAgIGF1dG8gdHJ5QXBwZW5kQW5kV2l0
aFNoaWZ0ID0gWyZdIChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KSAtPiBib29sIHsKKyAgICAg
ICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBvcGNvZGVCYXNlZE9uU2hpZnRLaW5kKHJp
Z2h0LT5vcGNvZGUoKSwKKyAgICAgICAgICAgICAgICAgICAgQW5kTGVmdFNoaWZ0MzIsIEFuZExl
ZnRTaGlmdDY0LAorICAgICAgICAgICAgICAgICAgICBBbmRSaWdodFNoaWZ0MzIsIEFuZFJpZ2h0
U2hpZnQ2NCwKKyAgICAgICAgICAgICAgICAgICAgQW5kVW5zaWduZWRSaWdodFNoaWZ0MzIsIEFu
ZFVuc2lnbmVkUmlnaHRTaGlmdDY0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ5QXBwZW5k
Qml0T3BXaXRoU2hpZnQobGVmdCwgcmlnaHQsIG9wY29kZSk7CisgICAgICAgICAgICB9OworCisg
ICAgICAgICAgICBpZiAodHJ5QXBwZW5kQW5kV2l0aFNoaWZ0KGxlZnQsIHJpZ2h0KSB8fCB0cnlB
cHBlbmRBbmRXaXRoU2hpZnQocmlnaHQsIGxlZnQpKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KwogICAgICAgICAgICAgYXBwZW5kQmluT3A8QW5kMzIsIEFuZDY0LCBBbmREb3VibGUsIEFuZEZs
b2F0LCBDb21tdXRhdGl2ZT4obGVmdCwgcmlnaHQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CkBAIC0zMTU1LDYgKzMxNTYsMTggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmICh0
cnlBcHBlbmRPUk4obGVmdCwgcmlnaHQpIHx8IHRyeUFwcGVuZE9STihyaWdodCwgbGVmdCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogCisgICAgICAgICAgICAvLyBvcnItd2l0aC1zaGlmdCBQ
YXR0ZXJuOiBsZWZ0IHwgKHJpZ2h0IFNoaWZ0VHlwZSBhbW91bnQpCisgICAgICAgICAgICBhdXRv
IHRyeUFwcGVuZE9yV2l0aFNoaWZ0ID0gWyZdIChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KSAt
PiBib29sIHsKKyAgICAgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBvcGNvZGVCYXNl
ZE9uU2hpZnRLaW5kKHJpZ2h0LT5vcGNvZGUoKSwKKyAgICAgICAgICAgICAgICAgICAgT3JMZWZ0
U2hpZnQzMiwgT3JMZWZ0U2hpZnQ2NCwKKyAgICAgICAgICAgICAgICAgICAgT3JSaWdodFNoaWZ0
MzIsIE9yUmlnaHRTaGlmdDY0LAorICAgICAgICAgICAgICAgICAgICBPclVuc2lnbmVkUmlnaHRT
aGlmdDMyLCBPclVuc2lnbmVkUmlnaHRTaGlmdDY0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ5QXBwZW5kQml0T3BXaXRoU2hpZnQobGVmdCwgcmlnaHQsIG9wY29kZSk7CisgICAgICAgICAg
ICB9OworCisgICAgICAgICAgICBpZiAodHJ5QXBwZW5kT3JXaXRoU2hpZnQobGVmdCwgcmlnaHQp
IHx8IHRyeUFwcGVuZE9yV2l0aFNoaWZ0KHJpZ2h0LCBsZWZ0KSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisKICAgICAgICAgICAgIGFwcGVuZEJpbk9wPE9yMzIsIE9yNjQsIE9yRG91YmxlLCBP
ckZsb2F0LCBDb21tdXRhdGl2ZT4obGVmdCwgcmlnaHQpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CkBAIC0zMjI1LDYgKzMyMzgsMTggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlm
ICh0cnlBcHBlbmRFT04obGVmdCwgcmlnaHQpIHx8IHRyeUFwcGVuZEVPTihyaWdodCwgbGVmdCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCisgICAgICAgICAgICAvLyBlb3Itd2l0aC1zaGlm
dCBQYXR0ZXJuOiBsZWZ0IF4gKHJpZ2h0IFNoaWZ0VHlwZSBhbW91bnQpCisgICAgICAgICAgICBh
dXRvIHRyeUFwcGVuZFhvcldpdGhTaGlmdCA9IFsmXSAoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdo
dCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gb3Bjb2Rl
QmFzZWRPblNoaWZ0S2luZChyaWdodC0+b3Bjb2RlKCksCisgICAgICAgICAgICAgICAgICAgIFhv
ckxlZnRTaGlmdDMyLCBYb3JMZWZ0U2hpZnQ2NCwKKyAgICAgICAgICAgICAgICAgICAgWG9yUmln
aHRTaGlmdDMyLCBYb3JSaWdodFNoaWZ0NjQsCisgICAgICAgICAgICAgICAgICAgIFhvclVuc2ln
bmVkUmlnaHRTaGlmdDMyLCBYb3JVbnNpZ25lZFJpZ2h0U2hpZnQ2NCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRyeUFwcGVuZEJpdE9wV2l0aFNoaWZ0KGxlZnQsIHJpZ2h0LCBvcGNvZGUpOwor
ICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgaWYgKHRyeUFwcGVuZFhvcldpdGhTaGlmdChs
ZWZ0LCByaWdodCkgfHwgdHJ5QXBwZW5kWG9yV2l0aFNoaWZ0KHJpZ2h0LCBsZWZ0KSkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgICAgIGFwcGVuZEJpbk9wPFhvcjMyLCBYb3I2
NCwgWG9yRG91YmxlLCBYb3JGbG9hdCwgQ29tbXV0YXRpdmU+KGxlZnQsIHJpZ2h0KTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyT3Bjb2RlLm9wY29kZXMKaW5kZXggNDlmZWQxYWFhMTlhZjZkZGNkOTJjMzM5ZjcwYjU3
NmQwZDM5NWRkZS4uOWM4ZmU0OGRiMDNiYTMxYTM1OGQ0ZDk2ZTc5Y2MzZWY1NjdhZTBhNSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCkBAIC05
NTUsNiArOTU1LDYwIEBAIGFybTY0OiBTdWJSaWdodFNoaWZ0NjQgVTpHOjY0LCBVOkc6NjQsIFU6
Rzo2NCwgRDpHOjY0CiBhcm02NDogU3ViVW5zaWduZWRSaWdodFNoaWZ0NjQgVTpHOjY0LCBVOkc6
NjQsIFU6Rzo2NCwgRDpHOjY0CiAgICAgVG1wLCBUbXAsIEltbSwgVG1wCiAKK2FybTY0OiBBbmRM
ZWZ0U2hpZnQzMiBVOkc6MzIsIFU6RzozMiwgVTpHOjMyLCBaRDpHOjMyCisgICAgVG1wLCBUbXAs
IEltbSwgVG1wCisKK2FybTY0OiBBbmRSaWdodFNoaWZ0MzIgVTpHOjMyLCBVOkc6MzIsIFU6Rzoz
MiwgWkQ6RzozMgorICAgIFRtcCwgVG1wLCBJbW0sIFRtcAorCithcm02NDogQW5kVW5zaWduZWRS
aWdodFNoaWZ0MzIgVTpHOjMyLCBVOkc6MzIsIFU6RzozMiwgWkQ6RzozMgorICAgIFRtcCwgVG1w
LCBJbW0sIFRtcAorCithcm02NDogQW5kTGVmdFNoaWZ0NjQgVTpHOjY0LCBVOkc6NjQsIFU6Rzo2
NCwgRDpHOjY0CisgICAgVG1wLCBUbXAsIEltbSwgVG1wCisKK2FybTY0OiBBbmRSaWdodFNoaWZ0
NjQgVTpHOjY0LCBVOkc6NjQsIFU6Rzo2NCwgRDpHOjY0CisgICAgVG1wLCBUbXAsIEltbSwgVG1w
CisKK2FybTY0OiBBbmRVbnNpZ25lZFJpZ2h0U2hpZnQ2NCBVOkc6NjQsIFU6Rzo2NCwgVTpHOjY0
LCBEOkc6NjQKKyAgICBUbXAsIFRtcCwgSW1tLCBUbXAKKworYXJtNjQ6IFhvckxlZnRTaGlmdDMy
IFU6RzozMiwgVTpHOjMyLCBVOkc6MzIsIFpEOkc6MzIKKyAgICBUbXAsIFRtcCwgSW1tLCBUbXAK
KworYXJtNjQ6IFhvclJpZ2h0U2hpZnQzMiBVOkc6MzIsIFU6RzozMiwgVTpHOjMyLCBaRDpHOjMy
CisgICAgVG1wLCBUbXAsIEltbSwgVG1wCisKK2FybTY0OiBYb3JVbnNpZ25lZFJpZ2h0U2hpZnQz
MiBVOkc6MzIsIFU6RzozMiwgVTpHOjMyLCBaRDpHOjMyCisgICAgVG1wLCBUbXAsIEltbSwgVG1w
CisKK2FybTY0OiBYb3JMZWZ0U2hpZnQ2NCBVOkc6NjQsIFU6Rzo2NCwgVTpHOjY0LCBEOkc6NjQK
KyAgICBUbXAsIFRtcCwgSW1tLCBUbXAKKworYXJtNjQ6IFhvclJpZ2h0U2hpZnQ2NCBVOkc6NjQs
IFU6Rzo2NCwgVTpHOjY0LCBEOkc6NjQKKyAgICBUbXAsIFRtcCwgSW1tLCBUbXAKKworYXJtNjQ6
IFhvclVuc2lnbmVkUmlnaHRTaGlmdDY0IFU6Rzo2NCwgVTpHOjY0LCBVOkc6NjQsIEQ6Rzo2NAor
ICAgIFRtcCwgVG1wLCBJbW0sIFRtcAorCithcm02NDogT3JMZWZ0U2hpZnQzMiBVOkc6MzIsIFU6
RzozMiwgVTpHOjMyLCBaRDpHOjMyCisgICAgVG1wLCBUbXAsIEltbSwgVG1wCisKK2FybTY0OiBP
clJpZ2h0U2hpZnQzMiBVOkc6MzIsIFU6RzozMiwgVTpHOjMyLCBaRDpHOjMyCisgICAgVG1wLCBU
bXAsIEltbSwgVG1wCisKK2FybTY0OiBPclVuc2lnbmVkUmlnaHRTaGlmdDMyIFU6RzozMiwgVTpH
OjMyLCBVOkc6MzIsIFpEOkc6MzIKKyAgICBUbXAsIFRtcCwgSW1tLCBUbXAKKworYXJtNjQ6IE9y
TGVmdFNoaWZ0NjQgVTpHOjY0LCBVOkc6NjQsIFU6Rzo2NCwgRDpHOjY0CisgICAgVG1wLCBUbXAs
IEltbSwgVG1wCisKK2FybTY0OiBPclJpZ2h0U2hpZnQ2NCBVOkc6NjQsIFU6Rzo2NCwgVTpHOjY0
LCBEOkc6NjQKKyAgICBUbXAsIFRtcCwgSW1tLCBUbXAKKworYXJtNjQ6IE9yVW5zaWduZWRSaWdo
dFNoaWZ0NjQgVTpHOjY0LCBVOkc6NjQsIFU6Rzo2NCwgRDpHOjY0CisgICAgVG1wLCBUbXAsIElt
bSwgVG1wCisKICMgVGhlIGZpcnN0IG9wZXJhbmQgaXMgcmF4LgogIyBGSVhNRTogVGhpcyBmb3Jt
dWxhdGlvbiBtZWFucyB0aGF0IHRoZSBib29sZWFuIHJlc3VsdCBjYW5ub3QgYmUgcHV0IGluIGVh
eCwgZXZlbiB0aG91Z2ggYWxsIHVzZXJzCiAjIG9mIHRoaXMgd291bGQgYmUgT0sgd2l0aCB0aGF0
LgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCmluZGV4IDcyMWViM2FkZDYyNzQ4ZTJmYjAyZGRm
NDI1NTdjYzU5ZDVkODgwZWIuLjBhMmNmMjM2NDczN2NjM2MzMDdiMDhmNDg1OGQ2NWIxMWZjYjhh
ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKQEAgLTQ3MSw2ICs0NzEsMjggQEAgdm9p
ZCB0ZXN0U3ViV2l0aFVuc2lnbmVkUmlnaHRTaGlmdDMyKCk7CiB2b2lkIHRlc3RTdWJXaXRoTGVm
dFNoaWZ0NjQoKTsKIHZvaWQgdGVzdFN1YldpdGhSaWdodFNoaWZ0NjQoKTsKIHZvaWQgdGVzdFN1
YldpdGhVbnNpZ25lZFJpZ2h0U2hpZnQ2NCgpOworCit2b2lkIHRlc3RBbmRMZWZ0U2hpZnQzMigp
Owordm9pZCB0ZXN0QW5kUmlnaHRTaGlmdDMyKCk7Cit2b2lkIHRlc3RBbmRVbnNpZ25lZFJpZ2h0
U2hpZnQzMigpOwordm9pZCB0ZXN0QW5kTGVmdFNoaWZ0NjQoKTsKK3ZvaWQgdGVzdEFuZFJpZ2h0
U2hpZnQ2NCgpOwordm9pZCB0ZXN0QW5kVW5zaWduZWRSaWdodFNoaWZ0NjQoKTsKKwordm9pZCB0
ZXN0WG9yTGVmdFNoaWZ0MzIoKTsKK3ZvaWQgdGVzdFhvclJpZ2h0U2hpZnQzMigpOwordm9pZCB0
ZXN0WG9yVW5zaWduZWRSaWdodFNoaWZ0MzIoKTsKK3ZvaWQgdGVzdFhvckxlZnRTaGlmdDY0KCk7
Cit2b2lkIHRlc3RYb3JSaWdodFNoaWZ0NjQoKTsKK3ZvaWQgdGVzdFhvclVuc2lnbmVkUmlnaHRT
aGlmdDY0KCk7CisKK3ZvaWQgdGVzdE9yTGVmdFNoaWZ0MzIoKTsKK3ZvaWQgdGVzdE9yUmlnaHRT
aGlmdDMyKCk7Cit2b2lkIHRlc3RPclVuc2lnbmVkUmlnaHRTaGlmdDMyKCk7Cit2b2lkIHRlc3RP
ckxlZnRTaGlmdDY0KCk7Cit2b2lkIHRlc3RPclJpZ2h0U2hpZnQ2NCgpOwordm9pZCB0ZXN0T3JV
bnNpZ25lZFJpZ2h0U2hpZnQ2NCgpOworCiB2b2lkIHRlc3RTZWxlY3RDb21wYXJlRG91YmxlKCk7
CiB2b2lkIHRlc3RTZWxlY3RDb21wYXJlRmxvYXQoZmxvYXQsIGZsb2F0KTsKIHZvaWQgdGVzdFNl
bGVjdENvbXBhcmVGbG9hdFRvRG91YmxlKGZsb2F0LCBmbG9hdCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL3Rlc3RiM18yLmNwcAppbmRleCAyNGIzZjgzODcyYTBmY2JlNjkzNGYzYmEwYzkxMDdhY2E3
MTQwMTU0Li5mYTY0YzhiM2MyNmYyZWE3YzkwNzk1OTgxNmQxZjYwZTY5OWIxMzJmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzIuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMi5jcHAKQEAgLTU0NjEsNiArNTQ2MSw3NjIgQEAgdm9p
ZCB0ZXN0U3ViV2l0aFVuc2lnbmVkUmlnaHRTaGlmdDY0KCkKICAgICB9CiB9CiAKK3ZvaWQgdGVz
dEFuZExlZnRTaGlmdDMyKCkKK3sKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRM
ZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIFZlY3RvcjxpbnQzMl90PiBhbW91bnRz
ID0geyAxLCAxNywgMzEgfTsKKworICAgIC8vIFRlc3QgUGF0dGVybjogZCA9IG4gJiAobSA8PCBh
bW91bnQpCisgICAgYXV0byB0ZXN0ID0gWyZdIChpbnQzMl90IG4sIGludDMyX3QgbSwgaW50MzJf
dCBhbW91bnQpIC0+IGludDMyX3QgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAg
QmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgICAgICBWYWx1ZSogblZh
bHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFRydW5jLCBP
cmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICBWYWx1ZSog
bVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFRydW5j
LCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkpOworICAgICAgICBWYWx1
ZSogYW1vdW50VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmln
aW4oKSwgYW1vdW50KTsKKworICAgICAgICBWYWx1ZSogc2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4ocHJvYywgU2hsLCBPcmlnaW4oKSwgbVZhbHVlLCBhbW91bnRWYWx1ZSk7Cisg
ICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgICAgIHByb2MsIFJl
dHVybiwgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9j
LCBCaXRBbmQsIE9yaWdpbigpLCBuVmFsdWUsIHNoaWZ0VmFsdWUpKTsKKworICAgICAgICBhdXRv
IGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkgeworICAg
ICAgICAgICAgc3RkOjpzdHJpbmcgcmVnZXgoIi4qYW5kLiosLiosLiosLipsc2wgIyIpOworICAg
ICAgICAgICAgcmVnZXggKz0gc3RkOjp0b19zdHJpbmcoYW1vdW50KSArICIuKiI7CisgICAgICAg
ICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgcmVnZXguY19zdHIoKSwgdHJ1ZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQzMl90PigqY29kZSwgbiwgbSk7Cisg
ICAgfTsKKworICAgIGZvciAoYXV0byBuT3BlcmFuZCA6IGludDMyT3BlcmFuZHMoKSkgeworICAg
ICAgICBmb3IgKGF1dG8gbU9wZXJhbmQgOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAg
IGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgaW50MzJfdCBu
ID0gbk9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgaW50MzJfdCBtID0gbU9wZXJhbmQu
dmFsdWU7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEodGVzdChuLCBtLCBhbW91bnQpLCBuICYg
KG0gPDwgYW1vdW50KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3Zv
aWQgdGVzdEFuZFJpZ2h0U2hpZnQzMigpCit7CisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVs
dEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8aW50MzJfdD4g
YW1vdW50cyA9IHsgMSwgMTcsIDMxIH07CisKKyAgICAvLyBUZXN0IFBhdHRlcm46IGQgPSBuICYg
KG0gPj4gYW1vdW50KQorICAgIGF1dG8gdGVzdCA9IFsmXSAoaW50MzJfdCBuLCBpbnQzMl90IG0s
IGludDMyX3QgYW1vdW50KSAtPiBpbnQzMl90IHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7Cisg
ICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICAgICAgVmFs
dWUqIG5WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBU
cnVuYywgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVn
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAg
VmFsdWUqIG1WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9j
LCBUcnVuYywgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50
UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKTsKKyAgICAg
ICAgVmFsdWUqIGFtb3VudFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIGFtb3VudCk7CisKKyAgICAgICAgVmFsdWUqIHNoaWZ0VmFsdWUgPSByb290
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNTaHIsIE9yaWdpbigpLCBtVmFsdWUsIGFtb3VudFZh
bHVlKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICAgICAg
cHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFs
dWU+KHByb2MsIEJpdEFuZCwgT3JpZ2luKCksIG5WYWx1ZSwgc2hpZnRWYWx1ZSkpOworCisgICAg
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgp
KSB7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyByZWdleCgiLiphbmQuKiwuKiwuKiwuKmFzciAj
Iik7CisgICAgICAgICAgICByZWdleCArPSBzdGQ6OnRvX3N0cmluZyhhbW91bnQpICsgIi4qIjsK
KyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCByZWdleC5jX3N0cigpLCB0
cnVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW52b2tlPGludDMyX3Q+KCpjb2RlLCBu
LCBtKTsKKyAgICB9OworCisgICAgZm9yIChhdXRvIG5PcGVyYW5kIDogaW50MzJPcGVyYW5kcygp
KSB7CisgICAgICAgIGZvciAoYXV0byBtT3BlcmFuZCA6IGludDMyT3BlcmFuZHMoKSkgeworICAg
ICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBp
bnQzMl90IG4gPSBuT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBpbnQzMl90IG0gPSBt
T3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUSh0ZXN0KG4sIG0sIGFtb3Vu
dCksIG4gJiAobSA+PiBhbW91bnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
K30KKwordm9pZCB0ZXN0QW5kVW5zaWduZWRSaWdodFNoaWZ0MzIoKQoreworICAgIGlmIChKU0M6
Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisgICAg
VmVjdG9yPHVpbnQzMl90PiBhbW91bnRzID0geyAxLCAxNywgMzEgfTsKKworICAgIC8vIFRlc3Qg
UGF0dGVybjogZCA9IG4gJiAobSA+PiBhbW91bnQpCisgICAgYXV0byB0ZXN0ID0gWyZdICh1aW50
MzJfdCBuLCB1aW50MzJfdCBtLCB1aW50MzJfdCBhbW91bnQpIC0+IHVpbnQzMl90IHsKKyAgICAg
ICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJs
b2NrKCk7CisKKyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
CisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjApKTsKKyAgICAgICAgVmFsdWUqIG1WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjEpKTsKKyAgICAgICAgVmFsdWUqIGFtb3VudFZhbHVlID0gcm9vdC0+YXBwZW5k
TmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGFtb3VudCk7CisKKyAgICAgICAgVmFs
dWUqIHNoaWZ0VmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFpTaHIsIE9yaWdp
bigpLCBtVmFsdWUsIGFtb3VudFZhbHVlKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJv
bFZhbHVlKAorICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgCisgICAgICAgICAg
ICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdEFuZCwgT3JpZ2luKCksIG5WYWx1ZSwg
c2hpZnRWYWx1ZSkpOworCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOwor
ICAgICAgICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyByZWdleCgi
LiphbmQuKiwuKiwuKiwuKmxzciAjIik7CisgICAgICAgICAgICByZWdleCArPSBzdGQ6OnRvX3N0
cmluZyhhbW91bnQpICsgIi4qIjsKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpj
b2RlLCByZWdleC5jX3N0cigpLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW52
b2tlPHVpbnQzMl90PigqY29kZSwgbiwgbSk7CisgICAgfTsKKworICAgIGZvciAoYXV0byBuT3Bl
cmFuZCA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbU9wZXJhbmQgOiBp
bnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRz
KSB7CisgICAgICAgICAgICAgICAgdWludDMyX3QgbiA9IG5PcGVyYW5kLnZhbHVlOworICAgICAg
ICAgICAgICAgIHVpbnQzMl90IG0gPSBtT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBD
SEVDS19FUSh0ZXN0KG4sIG0sIGFtb3VudCksIG4gJiAobSA+PiBhbW91bnQpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0QW5kTGVmdFNoaWZ0NjQoKQor
eworICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAg
ICByZXR1cm47CisgICAgVmVjdG9yPGludDMyX3Q+IGFtb3VudHMgPSB7IDEsIDM0LCA2MyB9Owor
CisgICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0gbiAmIChtIDw8IGFtb3VudCkKKyAgICBhdXRvIHRl
c3QgPSBbJl0gKGludDY0X3QgbiwgaW50NjRfdCBtLCBpbnQzMl90IGFtb3VudCkgLT4gaW50NjRf
dCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0g
cHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBuVmFsdWUgPSByb290LT5hcHBlbmRO
ZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BS
MCk7CisgICAgICAgIFZhbHVlKiBtVmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIFZh
bHVlKiBhbW91bnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9y
aWdpbigpLCBhbW91bnQpOworCisgICAgICAgIFZhbHVlKiBzaGlmdFZhbHVlID0gcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBTaGwsIE9yaWdpbigpLCBtVmFsdWUsIGFtb3VudFZhbHVlKTsK
KyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICAgICAgcHJvYywg
UmV0dXJuLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHBy
b2MsIEJpdEFuZCwgT3JpZ2luKCksIG5WYWx1ZSwgc2hpZnRWYWx1ZSkpOworCisgICAgICAgIGF1
dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKSB7Cisg
ICAgICAgICAgICBzdGQ6OnN0cmluZyByZWdleCgiLiphbmQuKiwuKiwuKiwuKmxzbCAjIik7Cisg
ICAgICAgICAgICByZWdleCArPSBzdGQ6OnRvX3N0cmluZyhhbW91bnQpICsgIi4qIjsKKyAgICAg
ICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCByZWdleC5jX3N0cigpLCB0cnVlKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW52b2tlPGludDY0X3Q+KCpjb2RlLCBuLCBtKTsK
KyAgICB9OworCisgICAgZm9yIChhdXRvIG5PcGVyYW5kIDogaW50NjRPcGVyYW5kcygpKSB7Cisg
ICAgICAgIGZvciAoYXV0byBtT3BlcmFuZCA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICAg
ICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBpbnQ2NF90
IG4gPSBuT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBpbnQ2NF90IG0gPSBtT3BlcmFu
ZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUSh0ZXN0KG4sIG0sIGFtb3VudCksIG4g
JiAobSA8PCBhbW91bnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwor
dm9pZCB0ZXN0QW5kUmlnaHRTaGlmdDY0KCkKK3sKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZh
dWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIFZlY3RvcjxpbnQzMl90
PiBhbW91bnRzID0geyAxLCAzNCwgNjMgfTsKKworICAgIC8vIFRlc3QgUGF0dGVybjogZCA9IG4g
JiAobSA+PiBhbW91bnQpCisgICAgYXV0byB0ZXN0ID0gWyZdIChpbnQ2NF90IG4sIGludDY0X3Qg
bSwgaW50MzJfdCBhbW91bnQpIC0+IGludDY0X3QgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsK
KyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgICAgICBW
YWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9y
aWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBWYWx1ZSogbVZhbHVlID0g
cm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjEpOworICAgICAgICBWYWx1ZSogYW1vdW50VmFsdWUgPSByb290LT5hcHBl
bmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYW1vdW50KTsKKworICAgICAgICBW
YWx1ZSogc2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU1NociwgT3Jp
Z2luKCksIG1WYWx1ZSwgYW1vdW50VmFsdWUpOworICAgICAgICByb290LT5hcHBlbmROZXdDb250
cm9sVmFsdWUoCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCAKKyAgICAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgblZhbHVl
LCBzaGlmdFZhbHVlKSk7CisKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7
CisgICAgICAgIGlmIChpc0FSTTY0KCkpIHsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHJlZ2V4
KCIuKmFuZC4qLC4qLC4qLC4qYXNyICMiKTsKKyAgICAgICAgICAgIHJlZ2V4ICs9IHN0ZDo6dG9f
c3RyaW5nKGFtb3VudCkgKyAiLioiOworICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24o
KmNvZGUsIHJlZ2V4LmNfc3RyKCksIHRydWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBp
bnZva2U8aW50NjRfdD4oKmNvZGUsIG4sIG0pOworICAgIH07CisKKyAgICBmb3IgKGF1dG8gbk9w
ZXJhbmQgOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG1PcGVyYW5kIDog
aW50NjRPcGVyYW5kcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50
cykgeworICAgICAgICAgICAgICAgIGludDY0X3QgbiA9IG5PcGVyYW5kLnZhbHVlOworICAgICAg
ICAgICAgICAgIGludDY0X3QgbSA9IG1PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIENI
RUNLX0VRKHRlc3QobiwgbSwgYW1vdW50KSwgbiAmIChtID4+IGFtb3VudCkpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RBbmRVbnNpZ25lZFJpZ2h0U2hp
ZnQ2NCgpCit7CisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIp
CisgICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8dWludDMyX3Q+IGFtb3VudHMgPSB7IDEsIDE3
LCAzMSB9OworCisgICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0gbiAmIChtID4+IGFtb3VudCkKKyAg
ICBhdXRvIHRlc3QgPSBbJl0gKHVpbnQ2NF90IG4sIHVpbnQ2NF90IG0sIHVpbnQzMl90IGFtb3Vu
dCkgLT4gdWludDY0X3QgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNC
bG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgICAgICBWYWx1ZSogblZhbHVlID0g
cm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApOworICAgICAgICBWYWx1ZSogbVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3
PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEp
OworICAgICAgICBWYWx1ZSogYW1vdW50VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgYW1vdW50KTsKKworICAgICAgICBWYWx1ZSogc2hpZnRWYWx1
ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgWlNociwgT3JpZ2luKCksIG1WYWx1ZSwg
YW1vdW50VmFsdWUpOworICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAg
ICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgblZhbHVlLCBzaGlmdFZhbHVlKSk7
CisKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgICAgIGlmIChp
c0FSTTY0KCkpIHsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHJlZ2V4KCIuKmFuZC4qLC4qLC4q
LC4qbHNyICMiKTsKKyAgICAgICAgICAgIHJlZ2V4ICs9IHN0ZDo6dG9fc3RyaW5nKGFtb3VudCkg
KyAiLioiOworICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsIHJlZ2V4LmNf
c3RyKCksIHRydWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBpbnZva2U8dWludDY0X3Q+
KCpjb2RlLCBuLCBtKTsKKyAgICB9OworCisgICAgZm9yIChhdXRvIG5PcGVyYW5kIDogaW50NjRP
cGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtT3BlcmFuZCA6IGludDY0T3BlcmFuZHMo
KSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAg
ICAgICAgICB1aW50NjRfdCBuID0gbk9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgdWlu
dDY0X3QgbSA9IG1PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIENIRUNLX0VRKHRlc3Qo
biwgbSwgYW1vdW50KSwgbiAmIChtID4+IGFtb3VudCkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorfQorCit2b2lkIHRlc3RYb3JMZWZ0U2hpZnQzMigpCit7CisgICAgaWYgKEpT
Qzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKyAg
ICBWZWN0b3I8aW50MzJfdD4gYW1vdW50cyA9IHsgMSwgMTcsIDMxIH07CisKKyAgICAvLyBUZXN0
IFBhdHRlcm46IGQgPSBuIF4gKG0gPDwgYW1vdW50KQorICAgIGF1dG8gdGVzdCA9IFsmXSAoaW50
MzJfdCBuLCBpbnQzMl90IG0sIGludDMyX3QgYW1vdW50KSAtPiBpbnQzMl90IHsKKyAgICAgICAg
UHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2Nr
KCk7CisKKyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisg
ICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApKTsKKyAgICAgICAgVmFsdWUqIG1WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
CisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjEpKTsKKyAgICAgICAgVmFsdWUqIGFtb3VudFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3
PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGFtb3VudCk7CisKKyAgICAgICAgVmFsdWUq
IHNoaWZ0VmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNobCwgT3JpZ2luKCks
IG1WYWx1ZSwgYW1vdW50VmFsdWUpOworICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFs
dWUoCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0WG9yLCBPcmlnaW4oKSwgblZhbHVlLCBzaGlm
dFZhbHVlKSk7CisKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAg
ICAgIGlmIChpc0FSTTY0KCkpIHsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHJlZ2V4KCIuKmVv
ci4qLC4qLC4qLC4qbHNsICMiKTsKKyAgICAgICAgICAgIHJlZ2V4ICs9IHN0ZDo6dG9fc3RyaW5n
KGFtb3VudCkgKyAiLioiOworICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUs
IHJlZ2V4LmNfc3RyKCksIHRydWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBpbnZva2U8
aW50MzJfdD4oKmNvZGUsIG4sIG0pOworICAgIH07CisKKyAgICBmb3IgKGF1dG8gbk9wZXJhbmQg
OiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG1PcGVyYW5kIDogaW50MzJP
cGVyYW5kcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgewor
ICAgICAgICAgICAgICAgIGludDMyX3QgbiA9IG5PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAg
ICAgIGludDMyX3QgbSA9IG1PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIENIRUNLX0VR
KHRlc3QobiwgbSwgYW1vdW50KSwgbiBeIChtIDw8IGFtb3VudCkpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RYb3JSaWdodFNoaWZ0MzIoKQoreworICAg
IGlmIChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1
cm47CisgICAgVmVjdG9yPGludDMyX3Q+IGFtb3VudHMgPSB7IDEsIDE3LCAzMSB9OworCisgICAg
Ly8gVGVzdCBQYXR0ZXJuOiBkID0gbiBeIChtID4+IGFtb3VudCkKKyAgICBhdXRvIHRlc3QgPSBb
Jl0gKGludDMyX3QgbiwgaW50MzJfdCBtLCBpbnQzMl90IGFtb3VudCkgLT4gaW50MzJfdCB7Cisg
ICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5h
ZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBuVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFs
dWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIwKSk7CisgICAgICAgIFZhbHVlKiBtVmFsdWUgPSByb290LT5hcHBlbmROZXc8
VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLCAKKyAgICAgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIxKSk7CisgICAgICAgIFZhbHVlKiBhbW91bnRWYWx1ZSA9IHJvb3QtPmFw
cGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBhbW91bnQpOworCisgICAgICAg
IFZhbHVlKiBzaGlmdFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTU2hyLCBP
cmlnaW4oKSwgbVZhbHVlLCBhbW91bnRWYWx1ZSk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0Nv
bnRyb2xWYWx1ZSgKKyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksIAorICAgICAg
ICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9yaWdpbigpLCBuVmFs
dWUsIHNoaWZ0VmFsdWUpKTsKKworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9j
KTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkgeworICAgICAgICAgICAgc3RkOjpzdHJpbmcgcmVn
ZXgoIi4qZW9yLiosLiosLiosLiphc3IgIyIpOworICAgICAgICAgICAgcmVnZXggKz0gc3RkOjp0
b19zdHJpbmcoYW1vdW50KSArICIuKiI7CisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlv
bigqY29kZSwgcmVnZXguY19zdHIoKSwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IGludm9rZTxpbnQzMl90PigqY29kZSwgbiwgbSk7CisgICAgfTsKKworICAgIGZvciAoYXV0byBu
T3BlcmFuZCA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbU9wZXJhbmQg
OiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91
bnRzKSB7CisgICAgICAgICAgICAgICAgaW50MzJfdCBuID0gbk9wZXJhbmQudmFsdWU7CisgICAg
ICAgICAgICAgICAgaW50MzJfdCBtID0gbU9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAg
Q0hFQ0tfRVEodGVzdChuLCBtLCBhbW91bnQpLCBuIF4gKG0gPj4gYW1vdW50KSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdFhvclVuc2lnbmVkUmlnaHRT
aGlmdDMyKCkKK3sKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwg
MikKKyAgICAgICAgcmV0dXJuOworICAgIFZlY3Rvcjx1aW50MzJfdD4gYW1vdW50cyA9IHsgMSwg
MTcsIDMxIH07CisKKyAgICAvLyBUZXN0IFBhdHRlcm46IGQgPSBuIF4gKG0gPj4gYW1vdW50KQor
ICAgIGF1dG8gdGVzdCA9IFsmXSAodWludDMyX3QgbiwgdWludDMyX3QgbSwgdWludDMyX3QgYW1v
dW50KSAtPiB1aW50MzJfdCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNp
Y0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBuVmFsdWUg
PSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdp
bigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgIFZhbHVlKiBtVmFs
dWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9y
aWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSk7CisgICAgICAgIFZhbHVlKiBh
bW91bnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBhbW91bnQpOworCisgICAgICAgIFZhbHVlKiBzaGlmdFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPihwcm9jLCBaU2hyLCBPcmlnaW4oKSwgbVZhbHVlLCBhbW91bnRWYWx1ZSk7CisgICAg
ICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgICAgIHByb2MsIFJldHVy
biwgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBC
aXRYb3IsIE9yaWdpbigpLCBuVmFsdWUsIHNoaWZ0VmFsdWUpKTsKKworICAgICAgICBhdXRvIGNv
ZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkgeworICAgICAg
ICAgICAgc3RkOjpzdHJpbmcgcmVnZXgoIi4qZW9yLiosLiosLiosLipsc3IgIyIpOworICAgICAg
ICAgICAgcmVnZXggKz0gc3RkOjp0b19zdHJpbmcoYW1vdW50KSArICIuKiI7CisgICAgICAgICAg
ICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgcmVnZXguY19zdHIoKSwgdHJ1ZSk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGludm9rZTx1aW50MzJfdD4oKmNvZGUsIG4sIG0pOworICAg
IH07CisKKyAgICBmb3IgKGF1dG8gbk9wZXJhbmQgOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAg
ICAgZm9yIChhdXRvIG1PcGVyYW5kIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgICAgICBm
b3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAgICAgIHVpbnQzMl90IG4g
PSBuT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBtID0gbU9wZXJhbmQu
dmFsdWU7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEodGVzdChuLCBtLCBhbW91bnQpLCBuIF4g
KG0gPj4gYW1vdW50KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3Zv
aWQgdGVzdFhvckxlZnRTaGlmdDY0KCkKK3sKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0
QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIFZlY3RvcjxpbnQzMl90PiBh
bW91bnRzID0geyAxLCAzNCwgNjMgfTsKKworICAgIC8vIFRlc3QgUGF0dGVybjogZCA9IG4gXiAo
bSA8PCBhbW91bnQpCisgICAgYXV0byB0ZXN0ID0gWyZdIChpbnQ2NF90IG4sIGludDY0X3QgbSwg
aW50MzJfdCBhbW91bnQpIC0+IGludDY0X3QgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAg
ICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgICAgICBWYWx1
ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBWYWx1ZSogbVZhbHVlID0gcm9v
dC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjEpOworICAgICAgICBWYWx1ZSogYW1vdW50VmFsdWUgPSByb290LT5hcHBlbmRO
ZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYW1vdW50KTsKKworICAgICAgICBWYWx1
ZSogc2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU2hsLCBPcmlnaW4o
KSwgbVZhbHVlLCBhbW91bnRWYWx1ZSk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xW
YWx1ZSgKKyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksIAorICAgICAgICAgICAg
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9yaWdpbigpLCBuVmFsdWUsIHNo
aWZ0VmFsdWUpKTsKKworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAg
ICAgICAgaWYgKGlzQVJNNjQoKSkgeworICAgICAgICAgICAgc3RkOjpzdHJpbmcgcmVnZXgoIi4q
ZW9yLiosLiosLiosLipsc2wgIyIpOworICAgICAgICAgICAgcmVnZXggKz0gc3RkOjp0b19zdHJp
bmcoYW1vdW50KSArICIuKiI7CisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29k
ZSwgcmVnZXguY19zdHIoKSwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGludm9r
ZTxpbnQ2NF90PigqY29kZSwgbiwgbSk7CisgICAgfTsKKworICAgIGZvciAoYXV0byBuT3BlcmFu
ZCA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbU9wZXJhbmQgOiBpbnQ2
NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7
CisgICAgICAgICAgICAgICAgaW50NjRfdCBuID0gbk9wZXJhbmQudmFsdWU7CisgICAgICAgICAg
ICAgICAgaW50NjRfdCBtID0gbU9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgQ0hFQ0tf
RVEodGVzdChuLCBtLCBhbW91bnQpLCBuIF4gKG0gPDwgYW1vdW50KSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdFhvclJpZ2h0U2hpZnQ2NCgpCit7Cisg
ICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJl
dHVybjsKKyAgICBWZWN0b3I8aW50MzJfdD4gYW1vdW50cyA9IHsgMSwgMzQsIDYzIH07CisKKyAg
ICAvLyBUZXN0IFBhdHRlcm46IGQgPSBuIF4gKG0gPj4gYW1vdW50KQorICAgIGF1dG8gdGVzdCA9
IFsmXSAoaW50NjRfdCBuLCBpbnQ2NF90IG0sIGludDMyX3QgYW1vdW50KSAtPiBpbnQ2NF90IHsK
KyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9j
LmFkZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxB
cmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsK
KyAgICAgICAgVmFsdWUqIG1WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgVmFsdWUq
IGFtb3VudFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIGFtb3VudCk7CisKKyAgICAgICAgVmFsdWUqIHNoaWZ0VmFsdWUgPSByb290LT5hcHBlbmRO
ZXc8VmFsdWU+KHByb2MsIFNTaHIsIE9yaWdpbigpLCBtVmFsdWUsIGFtb3VudFZhbHVlKTsKKyAg
ICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICAgICAgcHJvYywgUmV0
dXJuLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2Ms
IEJpdFhvciwgT3JpZ2luKCksIG5WYWx1ZSwgc2hpZnRWYWx1ZSkpOworCisgICAgICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKSB7CisgICAg
ICAgICAgICBzdGQ6OnN0cmluZyByZWdleCgiLiplb3IuKiwuKiwuKiwuKmFzciAjIik7CisgICAg
ICAgICAgICByZWdleCArPSBzdGQ6OnRvX3N0cmluZyhhbW91bnQpICsgIi4qIjsKKyAgICAgICAg
ICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCByZWdleC5jX3N0cigpLCB0cnVlKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gaW52b2tlPGludDY0X3Q+KCpjb2RlLCBuLCBtKTsKKyAg
ICB9OworCisgICAgZm9yIChhdXRvIG5PcGVyYW5kIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAg
ICAgIGZvciAoYXV0byBtT3BlcmFuZCA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICAgICAg
Zm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBpbnQ2NF90IG4g
PSBuT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBpbnQ2NF90IG0gPSBtT3BlcmFuZC52
YWx1ZTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUSh0ZXN0KG4sIG0sIGFtb3VudCksIG4gXiAo
bSA+PiBhbW91bnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9p
ZCB0ZXN0WG9yVW5zaWduZWRSaWdodFNoaWZ0NjQoKQoreworICAgIGlmIChKU0M6Ok9wdGlvbnM6
OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisgICAgVmVjdG9yPHVp
bnQzMl90PiBhbW91bnRzID0geyAxLCAxNywgMzEgfTsKKworICAgIC8vIFRlc3QgUGF0dGVybjog
ZCA9IG4gXiAobSA+PiBhbW91bnQpCisgICAgYXV0byB0ZXN0ID0gWyZdICh1aW50NjRfdCBuLCB1
aW50NjRfdCBtLCB1aW50MzJfdCBhbW91bnQpIC0+IHVpbnQ2NF90IHsKKyAgICAgICAgUHJvY2Vk
dXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisK
KyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgVmFsdWUq
IG1WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgVmFsdWUqIGFtb3VudFZhbHVlID0g
cm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGFtb3VudCk7CisK
KyAgICAgICAgVmFsdWUqIHNoaWZ0VmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2Ms
IFpTaHIsIE9yaWdpbigpLCBtVmFsdWUsIGFtb3VudFZhbHVlKTsKKyAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwg
CisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2lu
KCksIG5WYWx1ZSwgc2hpZnRWYWx1ZSkpOworCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQ
cm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAgICAgICBzdGQ6OnN0
cmluZyByZWdleCgiLiplb3IuKiwuKiwuKiwuKmxzciAjIik7CisgICAgICAgICAgICByZWdleCAr
PSBzdGQ6OnRvX3N0cmluZyhhbW91bnQpICsgIi4qIjsKKyAgICAgICAgICAgIGNoZWNrVXNlc0lu
c3RydWN0aW9uKCpjb2RlLCByZWdleC5jX3N0cigpLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gaW52b2tlPHVpbnQ2NF90PigqY29kZSwgbiwgbSk7CisgICAgfTsKKworICAgIGZv
ciAoYXV0byBuT3BlcmFuZCA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8g
bU9wZXJhbmQgOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91
bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgdWludDY0X3QgbiA9IG5PcGVyYW5kLnZh
bHVlOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IG0gPSBtT3BlcmFuZC52YWx1ZTsKKyAgICAg
ICAgICAgICAgICBDSEVDS19FUSh0ZXN0KG4sIG0sIGFtb3VudCksIG4gXiAobSA+PiBhbW91bnQp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0T3JMZWZ0
U2hpZnQzMigpCit7CisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8
IDIpCisgICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8aW50MzJfdD4gYW1vdW50cyA9IHsgMSwg
MTcsIDMxIH07CisKKyAgICAvLyBUZXN0IFBhdHRlcm46IGQgPSBuIHwgKG0gPDwgYW1vdW50KQor
ICAgIGF1dG8gdGVzdCA9IFsmXSAoaW50MzJfdCBuLCBpbnQzMl90IG0sIGludDMyX3QgYW1vdW50
KSAtPiBpbnQzMl90IHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxv
Y2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCks
IAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9y
aWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgVmFsdWUqIG1WYWx1ZSA9
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2lu
KCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKTsKKyAgICAgICAgVmFsdWUqIGFtb3Vu
dFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGFt
b3VudCk7CisKKyAgICAgICAgVmFsdWUqIHNoaWZ0VmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFs
dWU+KHByb2MsIFNobCwgT3JpZ2luKCksIG1WYWx1ZSwgYW1vdW50VmFsdWUpOworICAgICAgICBy
b290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9y
aWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0T3Is
IE9yaWdpbigpLCBuVmFsdWUsIHNoaWZ0VmFsdWUpKTsKKworICAgICAgICBhdXRvIGNvZGUgPSBj
b21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkgeworICAgICAgICAgICAg
c3RkOjpzdHJpbmcgcmVnZXgoIi4qb3JyLiosLiosLiosLipsc2wgIyIpOworICAgICAgICAgICAg
cmVnZXggKz0gc3RkOjp0b19zdHJpbmcoYW1vdW50KSArICIuKiI7CisgICAgICAgICAgICBjaGVj
a1VzZXNJbnN0cnVjdGlvbigqY29kZSwgcmVnZXguY19zdHIoKSwgdHJ1ZSk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQzMl90PigqY29kZSwgbiwgbSk7CisgICAgfTsKKwor
ICAgIGZvciAoYXV0byBuT3BlcmFuZCA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICBmb3Ig
KGF1dG8gbU9wZXJhbmQgOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0
byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgaW50MzJfdCBuID0gbk9wZXJh
bmQudmFsdWU7CisgICAgICAgICAgICAgICAgaW50MzJfdCBtID0gbU9wZXJhbmQudmFsdWU7Cisg
ICAgICAgICAgICAgICAgQ0hFQ0tfRVEodGVzdChuLCBtLCBhbW91bnQpLCBuIHwgKG0gPDwgYW1v
dW50KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdE9y
UmlnaHRTaGlmdDMyKCkKK3sKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZl
bCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIFZlY3RvcjxpbnQzMl90PiBhbW91bnRzID0g
eyAxLCAxNywgMzEgfTsKKworICAgIC8vIFRlc3QgUGF0dGVybjogZCA9IG4gfCAobSA+PiBhbW91
bnQpCisgICAgYXV0byB0ZXN0ID0gWyZdIChpbnQzMl90IG4sIGludDMyX3QgbSwgaW50MzJfdCBh
bW91bnQpIC0+IGludDMyX3QgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFz
aWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgICAgICBWYWx1ZSogblZhbHVl
ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmln
aW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICBWYWx1ZSogbVZh
bHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFRydW5jLCBP
cmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkpOworICAgICAgICBWYWx1ZSog
YW1vdW50VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgYW1vdW50KTsKKworICAgICAgICBWYWx1ZSogc2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5l
dzxWYWx1ZT4ocHJvYywgU1NociwgT3JpZ2luKCksIG1WYWx1ZSwgYW1vdW50VmFsdWUpOworICAg
ICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgICAgICBwcm9jLCBSZXR1
cm4sIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
Qml0T3IsIE9yaWdpbigpLCBuVmFsdWUsIHNoaWZ0VmFsdWUpKTsKKworICAgICAgICBhdXRvIGNv
ZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkgeworICAgICAg
ICAgICAgc3RkOjpzdHJpbmcgcmVnZXgoIi4qb3JyLiosLiosLiosLiphc3IgIyIpOworICAgICAg
ICAgICAgcmVnZXggKz0gc3RkOjp0b19zdHJpbmcoYW1vdW50KSArICIuKiI7CisgICAgICAgICAg
ICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgcmVnZXguY19zdHIoKSwgdHJ1ZSk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQzMl90PigqY29kZSwgbiwgbSk7CisgICAg
fTsKKworICAgIGZvciAoYXV0byBuT3BlcmFuZCA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAg
ICBmb3IgKGF1dG8gbU9wZXJhbmQgOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZv
ciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgaW50MzJfdCBuID0g
bk9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgaW50MzJfdCBtID0gbU9wZXJhbmQudmFs
dWU7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEodGVzdChuLCBtLCBhbW91bnQpLCBuIHwgKG0g
Pj4gYW1vdW50KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQg
dGVzdE9yVW5zaWduZWRSaWdodFNoaWZ0MzIoKQoreworICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRl
ZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisgICAgVmVjdG9yPHVpbnQz
Ml90PiBhbW91bnRzID0geyAxLCAxNywgMzEgfTsKKworICAgIC8vIFRlc3QgUGF0dGVybjogZCA9
IG4gfCAobSA+PiBhbW91bnQpCisgICAgYXV0byB0ZXN0ID0gWyZdICh1aW50MzJfdCBuLCB1aW50
MzJfdCBtLCB1aW50MzJfdCBhbW91bnQpIC0+IHVpbnQzMl90IHsKKyAgICAgICAgUHJvY2VkdXJl
IHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAg
ICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAg
ICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFy
Z3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsK
KyAgICAgICAgVmFsdWUqIG1WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAg
ICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEp
KTsKKyAgICAgICAgVmFsdWUqIGFtb3VudFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIGFtb3VudCk7CisKKyAgICAgICAgVmFsdWUqIHNoaWZ0VmFs
dWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFpTaHIsIE9yaWdpbigpLCBtVmFsdWUs
IGFtb3VudFZhbHVlKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAg
ICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBl
bmROZXc8VmFsdWU+KHByb2MsIEJpdE9yLCBPcmlnaW4oKSwgblZhbHVlLCBzaGlmdFZhbHVlKSk7
CisKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgICAgIGlmIChp
c0FSTTY0KCkpIHsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHJlZ2V4KCIuKm9yci4qLC4qLC4q
LC4qbHNyICMiKTsKKyAgICAgICAgICAgIHJlZ2V4ICs9IHN0ZDo6dG9fc3RyaW5nKGFtb3VudCkg
KyAiLioiOworICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsIHJlZ2V4LmNf
c3RyKCksIHRydWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBpbnZva2U8dWludDMyX3Q+
KCpjb2RlLCBuLCBtKTsKKyAgICB9OworCisgICAgZm9yIChhdXRvIG5PcGVyYW5kIDogaW50MzJP
cGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtT3BlcmFuZCA6IGludDMyT3BlcmFuZHMo
KSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAg
ICAgICAgICB1aW50MzJfdCBuID0gbk9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgdWlu
dDMyX3QgbSA9IG1PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIENIRUNLX0VRKHRlc3Qo
biwgbSwgYW1vdW50KSwgbiB8IChtID4+IGFtb3VudCkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorfQorCit2b2lkIHRlc3RPckxlZnRTaGlmdDY0KCkKK3sKKyAgICBpZiAoSlND
OjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAg
IFZlY3RvcjxpbnQzMl90PiBhbW91bnRzID0geyAxLCAzNCwgNjMgfTsKKworICAgIC8vIFRlc3Qg
UGF0dGVybjogZCA9IG4gfCAobSA8PCBhbW91bnQpCisgICAgYXV0byB0ZXN0ID0gWyZdIChpbnQ2
NF90IG4sIGludDY0X3QgbSwgaW50MzJfdCBhbW91bnQpIC0+IGludDY0X3QgeworICAgICAgICBQ
cm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2so
KTsKKworICAgICAgICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVn
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBW
YWx1ZSogbVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9y
aWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBWYWx1ZSogYW1vdW50VmFs
dWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYW1vdW50
KTsKKworICAgICAgICBWYWx1ZSogc2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgU2hsLCBPcmlnaW4oKSwgbVZhbHVlLCBhbW91bnRWYWx1ZSk7CisgICAgICAgIHJvb3Qt
PmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2lu
KCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRPciwgT3Jp
Z2luKCksIG5WYWx1ZSwgc2hpZnRWYWx1ZSkpOworCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBp
bGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAgICAgICBzdGQ6
OnN0cmluZyByZWdleCgiLipvcnIuKiwuKiwuKiwuKmxzbCAjIik7CisgICAgICAgICAgICByZWdl
eCArPSBzdGQ6OnRvX3N0cmluZyhhbW91bnQpICsgIi4qIjsKKyAgICAgICAgICAgIGNoZWNrVXNl
c0luc3RydWN0aW9uKCpjb2RlLCByZWdleC5jX3N0cigpLCB0cnVlKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gaW52b2tlPGludDY0X3Q+KCpjb2RlLCBuLCBtKTsKKyAgICB9OworCisgICAg
Zm9yIChhdXRvIG5PcGVyYW5kIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0
byBtT3BlcmFuZCA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFt
b3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBpbnQ2NF90IG4gPSBuT3BlcmFuZC52
YWx1ZTsKKyAgICAgICAgICAgICAgICBpbnQ2NF90IG0gPSBtT3BlcmFuZC52YWx1ZTsKKyAgICAg
ICAgICAgICAgICBDSEVDS19FUSh0ZXN0KG4sIG0sIGFtb3VudCksIG4gfCAobSA8PCBhbW91bnQp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0T3JSaWdo
dFNoaWZ0NjQoKQoreworICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkg
PCAyKQorICAgICAgICByZXR1cm47CisgICAgVmVjdG9yPGludDMyX3Q+IGFtb3VudHMgPSB7IDEs
IDM0LCA2MyB9OworCisgICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0gbiB8IChtID4+IGFtb3VudCkK
KyAgICBhdXRvIHRlc3QgPSBbJl0gKGludDY0X3QgbiwgaW50NjRfdCBtLCBpbnQzMl90IGFtb3Vu
dCkgLT4gaW50NjRfdCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Js
b2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBuVmFsdWUgPSBy
b290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86
OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIFZhbHVlKiBtVmFsdWUgPSByb290LT5hcHBlbmROZXc8
QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7
CisgICAgICAgIFZhbHVlKiBhbW91bnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBhbW91bnQpOworCisgICAgICAgIFZhbHVlKiBzaGlmdFZhbHVl
ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTU2hyLCBPcmlnaW4oKSwgbVZhbHVlLCBh
bW91bnRWYWx1ZSk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAg
ICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPihwcm9jLCBCaXRPciwgT3JpZ2luKCksIG5WYWx1ZSwgc2hpZnRWYWx1ZSkpOwor
CisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNB
Uk02NCgpKSB7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyByZWdleCgiLipvcnIuKiwuKiwuKiwu
KmFzciAjIik7CisgICAgICAgICAgICByZWdleCArPSBzdGQ6OnRvX3N0cmluZyhhbW91bnQpICsg
Ii4qIjsKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCByZWdleC5jX3N0
cigpLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW52b2tlPGludDY0X3Q+KCpj
b2RlLCBuLCBtKTsKKyAgICB9OworCisgICAgZm9yIChhdXRvIG5PcGVyYW5kIDogaW50NjRPcGVy
YW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtT3BlcmFuZCA6IGludDY0T3BlcmFuZHMoKSkg
eworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAg
ICAgICBpbnQ2NF90IG4gPSBuT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBpbnQ2NF90
IG0gPSBtT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUSh0ZXN0KG4sIG0s
IGFtb3VudCksIG4gfCAobSA+PiBhbW91bnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KK30KKwordm9pZCB0ZXN0T3JVbnNpZ25lZFJpZ2h0U2hpZnQ2NCgpCit7CisgICAgaWYg
KEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsK
KyAgICBWZWN0b3I8dWludDMyX3Q+IGFtb3VudHMgPSB7IDEsIDE3LCAzMSB9OworCisgICAgLy8g
VGVzdCBQYXR0ZXJuOiBkID0gbiB8IChtID4+IGFtb3VudCkKKyAgICBhdXRvIHRlc3QgPSBbJl0g
KHVpbnQ2NF90IG4sIHVpbnQ2NF90IG0sIHVpbnQzMl90IGFtb3VudCkgLT4gdWludDY0X3Qgewor
ICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2Mu
YWRkQmxvY2soKTsKKworICAgICAgICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFy
Z3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwor
ICAgICAgICBWYWx1ZSogbVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBWYWx1ZSog
YW1vdW50VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgYW1vdW50KTsKKworICAgICAgICBWYWx1ZSogc2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5l
dzxWYWx1ZT4ocHJvYywgWlNociwgT3JpZ2luKCksIG1WYWx1ZSwgYW1vdW50VmFsdWUpOworICAg
ICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgICAgICBwcm9jLCBSZXR1
cm4sIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
Qml0T3IsIE9yaWdpbigpLCBuVmFsdWUsIHNoaWZ0VmFsdWUpKTsKKworICAgICAgICBhdXRvIGNv
ZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkgeworICAgICAg
ICAgICAgc3RkOjpzdHJpbmcgcmVnZXgoIi4qb3JyLiosLiosLiosLipsc3IgIyIpOworICAgICAg
ICAgICAgcmVnZXggKz0gc3RkOjp0b19zdHJpbmcoYW1vdW50KSArICIuKiI7CisgICAgICAgICAg
ICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgcmVnZXguY19zdHIoKSwgdHJ1ZSk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGludm9rZTx1aW50NjRfdD4oKmNvZGUsIG4sIG0pOworICAg
IH07CisKKyAgICBmb3IgKGF1dG8gbk9wZXJhbmQgOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAg
ICAgZm9yIChhdXRvIG1PcGVyYW5kIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAgICAgICAgICBm
b3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAgICAgIHVpbnQ2NF90IG4g
PSBuT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBtID0gbU9wZXJhbmQu
dmFsdWU7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEodGVzdChuLCBtLCBhbW91bnQpLCBuIHwg
KG0gPj4gYW1vdW50KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKIHZv
aWQgdGVzdEJpdEFuZFplcm9TaGlmdFJpZ2h0QXJnSW1tTWFzazMyKCkKIHsKICAgICAvLyBUdXJu
IHRoaXM6ICh0bXAgPj4gaW1tKSAmIG1hc2sgCkBAIC02Mzg5LDYgKzcxNDUsMjggQEAgdm9pZCBh
ZGRCaXRUZXN0cyhjb25zdCBjaGFyKiBmaWx0ZXIsIERlcXVlPFJlZlB0cjxTaGFyZWRUYXNrPHZv
aWQoKT4+PiYgdGFza3MpCiAgICAgUlVOKHRlc3RTdWJXaXRoTGVmdFNoaWZ0NjQoKSk7CiAgICAg
UlVOKHRlc3RTdWJXaXRoUmlnaHRTaGlmdDY0KCkpOwogICAgIFJVTih0ZXN0U3ViV2l0aFVuc2ln
bmVkUmlnaHRTaGlmdDY0KCkpOworCisgICAgUlVOKHRlc3RBbmRMZWZ0U2hpZnQzMigpKTsKKyAg
ICBSVU4odGVzdEFuZFJpZ2h0U2hpZnQzMigpKTsKKyAgICBSVU4odGVzdEFuZFVuc2lnbmVkUmln
aHRTaGlmdDMyKCkpOworICAgIFJVTih0ZXN0QW5kTGVmdFNoaWZ0NjQoKSk7CisgICAgUlVOKHRl
c3RBbmRSaWdodFNoaWZ0NjQoKSk7CisgICAgUlVOKHRlc3RBbmRVbnNpZ25lZFJpZ2h0U2hpZnQ2
NCgpKTsKKworICAgIFJVTih0ZXN0WG9yTGVmdFNoaWZ0MzIoKSk7CisgICAgUlVOKHRlc3RYb3JS
aWdodFNoaWZ0MzIoKSk7CisgICAgUlVOKHRlc3RYb3JVbnNpZ25lZFJpZ2h0U2hpZnQzMigpKTsK
KyAgICBSVU4odGVzdFhvckxlZnRTaGlmdDY0KCkpOworICAgIFJVTih0ZXN0WG9yUmlnaHRTaGlm
dDY0KCkpOworICAgIFJVTih0ZXN0WG9yVW5zaWduZWRSaWdodFNoaWZ0NjQoKSk7CisKKyAgICBS
VU4odGVzdE9yTGVmdFNoaWZ0MzIoKSk7CisgICAgUlVOKHRlc3RPclJpZ2h0U2hpZnQzMigpKTsK
KyAgICBSVU4odGVzdE9yVW5zaWduZWRSaWdodFNoaWZ0MzIoKSk7CisgICAgUlVOKHRlc3RPckxl
ZnRTaGlmdDY0KCkpOworICAgIFJVTih0ZXN0T3JSaWdodFNoaWZ0NjQoKSk7CisgICAgUlVOKHRl
c3RPclVuc2lnbmVkUmlnaHRTaGlmdDY0KCkpOworCiAgICAgUlVOKHRlc3RCaXRBbmRaZXJvU2hp
ZnRSaWdodEFyZ0ltbU1hc2szMigpKTsKICAgICBSVU4odGVzdEJpdEFuZFplcm9TaGlmdFJpZ2h0
QXJnSW1tTWFzazY0KCkpOwogICAgIFJVTih0ZXN0Qml0QW5kQXJncyg0MywgNDMpKTsK
</data>
<flag name="commit-queue"
          id="457425"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434810</attachid>
            <date>2021-08-02 19:21:24 -0700</date>
            <delta_ts>2021-08-02 20:11:46 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-228675-20210802212123.patch</filename>
            <type>text/plain</type>
            <size>66278</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwNDk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
N2M5NTU4ZWFiZGIxNjY0YzU2YWQyZGU0YWQzNGQ3ZDA3Y2UxNzI1Li5mOTZkZGNjNjg0ZTQyYTNm
MTI2YTU3ZDUzMzBiMmRiOWZiM2Q3NDQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNDQgQEAKKzIwMjEtMDgtMDIgIFlpamlhIEh1YW5nICA8eWlqaWFfaHVhbmdAYXBwbGUu
Y29tPgorCisgICAgICAgIEFkZCBuZXcgcGF0dGVybnMgdG8gaW5zdHJ1Y3Rpb24gc2VsZWN0b3Ig
dG8gdXRpbGl6ZSBBTkQvRU9SL09SUi13aXRoLXNoaWZ0IHN1cHBvcnRlZCBieSBBUk02NAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI4Njc1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgU2FhbSBCYXJhdGkuCisKKyAgICAgICAgQml0d2lzZSBBTkQgKHNo
aWZ0ZWQgcmVnaXN0ZXIpIHBlcmZvcm1zIGEgYml0d2lzZSBBTkQgb2YgYSByZWdpc3RlciB2YWx1
ZSBhbmQgYW4gb3B0aW9uYWxseS1zaGlmdGVkIAorICAgICAgICByZWdpc3RlciB2YWx1ZSwgYW5k
IHdyaXRlcyB0aGUgcmVzdWx0IHRvIHRoZSBkZXN0aW5hdGlvbiByZWdpc3Rlci4KKworICAgICAg
ICAgICAgYW5kIHdkIHduIHdtIFNoaWZ0VHlwZSAjYW1vdW50CisKKyAgICAgICAgVGhlIGVxdWl2
YWxlbnQgcGF0dGVybiBpczogbiAmIChtIFNoaWZ0VHlwZSBhbW91bnQpCisKKyAgICAgICAgR2l2
ZW4gQjMgSVI6CisgICAgICAgIEludCBAMCA9IEFyZ3VtZW50UmVnKCV4MCkKKyAgICAgICAgSW50
IEAxID0gQXJndW1lbnRSZWcoJXgxKQorICAgICAgICBJbnQgQDIgPSBDb25zdDMyKDYzKQorICAg
ICAgICBJbnQgQDMgPSBTaGwoQDEsICQ2MyhAMikpCisgICAgICAgIEludCBANCA9IEJpdEFuZChA
MCwgQDMpCisgICAgICAgIFZvaWRANSA9IFJldHVybihANCwgVGVybWluYWwpCisKKyAgICAgICAg
Ly8gT2xkIG9wdGltaXplZCBBSVIKKyAgICAgICAgTHNoaWZ0ICV4MSwgJDYzLCAleDEsIEAzCisg
ICAgICAgIEFuZCAgICAleDAsICV4MSwgJXgwLCBANAorICAgICAgICBSZXQgICAgJXgwLCAgICAg
ICAgICAgQDUKKworICAgICAgICAvLyBOZXcgb3B0aW1pemVkIEFJUgorICAgICAgICBBbmRMZWZ0
U2hpZnQgJXgwLCAleDEsICQ2MywgJXgwLCBANAorICAgICAgICBSZXQgICAgICAgICAgJXgwLCAg
ICAgICAgICAgICAgICBANQorCisgICAgICAgIEJpdHdpc2UgRXhjbHVzaXZlIE9SIChzaGlmdGVk
IHJlZ2lzdGVyKSBwZXJmb3JtcyBhIGJpdHdpc2UgRXhjbHVzaXZlIE9SIG9mIGEgcmVnaXN0ZXIg
dmFsdWUgYW5kIGFuIAorICAgICAgICBvcHRpb25hbGx5LXNoaWZ0ZWQgcmVnaXN0ZXIgdmFsdWUs
IGFuZCB3cml0ZXMgdGhlIHJlc3VsdCB0byB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIuCisKKyAg
ICAgICAgICAgIGVvciB3ZCB3biB3bSBTaGlmdFR5cGUgI2Ftb3VudAorCisgICAgICAgIFRoZSBl
cXVpdmFsZW50IHBhdHRlcm4gaXM6IG4gXiAobSBTaGlmdFR5cGUgYW1vdW50KQorCisgICAgICAg
IEdpdmVuIEIzIElSOgorICAgICAgICBJbnQgQDAgPSBBcmd1bWVudFJlZygleDApCisgICAgICAg
IEludCBAMSA9IEFyZ3VtZW50UmVnKCV4MSkKKyAgICAgICAgSW50IEAyID0gQ29uc3QzMig2MykK
KyAgICAgICAgSW50IEAzID0gU2hsKEAxLCAkNjMoQDIpKQorICAgICAgICBJbnQgQDQgPSBCaXRY
b3IoQDAsIEAzKQorICAgICAgICBWb2lkQDUgPSBSZXR1cm4oQDQsIFRlcm1pbmFsKQorCisgICAg
ICAgIC8vIE9sZCBvcHRpbWl6ZWQgQUlSCisgICAgICAgIExzaGlmdCAleDEsICQ2MywgJXgxLCBA
MworICAgICAgICBYb3IgICAgJXgwLCAleDEsICV4MCwgQDQKKyAgICAgICAgUmV0ICAgICV4MCwg
ICAgICAgICAgIEA1CisKKyAgICAgICAgLy8gTmV3IG9wdGltaXplZCBBSVIKKyAgICAgICAgWG9y
TGVmdFNoaWZ0ICV4MCwgJXgxLCAkNjMsICV4MCwgQDQKKyAgICAgICAgUmV0ICAgICAgICAgICV4
MCwgICAgICAgICAgICAgICAgQDUKKworICAgICAgICBCaXR3aXNlIE9SIChzaGlmdGVkIHJlZ2lz
dGVyKSBwZXJmb3JtcyBhIGJpdHdpc2UgKGluY2x1c2l2ZSkgT1Igb2YgYSByZWdpc3RlciB2YWx1
ZSBhbmQgYW4gCisgICAgICAgIG9wdGlvbmFsbHktc2hpZnRlZCByZWdpc3RlciB2YWx1ZSwgYW5k
IHdyaXRlcyB0aGUgcmVzdWx0IHRvIHRoZSBkZXN0aW5hdGlvbiByZWdpc3Rlci4KKworICAgICAg
ICAgICAgb3JyIHdkIHduIHdtIFNoaWZ0VHlwZSAjYW1vdW50CisKKyAgICAgICAgVGhlIGVxdWl2
YWxlbnQgcGF0dGVybiBpczogbiB8IChtIFNoaWZ0VHlwZSBhbW91bnQpCisKKyAgICAgICAgR2l2
ZW4gQjMgSVI6CisgICAgICAgIEludCBAMCA9IEFyZ3VtZW50UmVnKCV4MCkKKyAgICAgICAgSW50
IEAxID0gQXJndW1lbnRSZWcoJXgxKQorICAgICAgICBJbnQgQDIgPSBDb25zdDMyKDYzKQorICAg
ICAgICBJbnQgQDMgPSBTaGwoQDEsICQ2MyhAMikpCisgICAgICAgIEludCBANCA9IEJpdE9yKEAw
LCBAMykKKyAgICAgICAgVm9pZEA1ID0gUmV0dXJuKEA0LCBUZXJtaW5hbCkKKworICAgICAgICAv
LyBPbGQgb3B0aW1pemVkIEFJUgorICAgICAgICBMc2hpZnQgJXgxLCAkNjMsICV4MSwgQDMKKyAg
ICAgICAgT3IgICAgICV4MCwgJXgxLCAleDAsIEA0CisgICAgICAgIFJldCAgICAleDAsICAgICAg
ICAgICBANQorCisgICAgICAgIC8vIE5ldyBvcHRpbWl6ZWQgQUlSCisgICAgICAgIE9yTGVmdFNo
aWZ0ICV4MCwgJXgxLCAkNjMsICV4MCwgQDQKKyAgICAgICAgUmV0ICAgICAgICAgJXgwLCAgICAg
ICAgICAgICAgICBANQorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQu
aDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6YW5kTGVmdFNoaWZ0MzIpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjphbmRSaWdodFNoaWZ0MzIpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjphbmRVbnNpZ25lZFJpZ2h0U2hpZnQzMik6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OmFuZExlZnRTaGlmdDY0KToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6YW5kUmlnaHRTaGlmdDY0KToKKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6YW5kVW5zaWduZWRSaWdodFNoaWZ0NjQpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojp4b3JMZWZ0U2hpZnQzMik6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnhvclJpZ2h0U2hpZnQzMik6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnhvclVuc2lnbmVkUmlnaHRTaGlmdDMyKToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6eG9yTGVmdFNoaWZ0NjQpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojp4b3JSaWdodFNoaWZ0NjQpOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojp4b3JVbnNpZ25lZFJpZ2h0U2hpZnQ2NCk6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Om9yTGVmdFNoaWZ0MzIpOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpvclJpZ2h0U2hpZnQzMik6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Om9yVW5zaWduZWRSaWdodFNoaWZ0MzIpOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpvckxlZnRTaGlmdDY0KToKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJBUk02NDo6b3JSaWdodFNoaWZ0NjQpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlckFSTTY0OjpvclVuc2lnbmVkUmlnaHRTaGlmdDY0KToKKyAgICAgICAgKiBhc3Nl
bWJsZXIvdGVzdG1hc20uY3BwOgorICAgICAgICAoSlNDOjp0ZXN0QW5kTGVmdFNoaWZ0MzIpOgor
ICAgICAgICAoSlNDOjp0ZXN0QW5kUmlnaHRTaGlmdDMyKToKKyAgICAgICAgKEpTQzo6dGVzdEFu
ZFVuc2lnbmVkUmlnaHRTaGlmdDMyKToKKyAgICAgICAgKEpTQzo6dGVzdEFuZExlZnRTaGlmdDY0
KToKKyAgICAgICAgKEpTQzo6dGVzdEFuZFJpZ2h0U2hpZnQ2NCk6CisgICAgICAgIChKU0M6OnRl
c3RBbmRVbnNpZ25lZFJpZ2h0U2hpZnQ2NCk6CisgICAgICAgIChKU0M6OnRlc3RYb3JMZWZ0U2hp
ZnQzMik6CisgICAgICAgIChKU0M6OnRlc3RYb3JSaWdodFNoaWZ0MzIpOgorICAgICAgICAoSlND
Ojp0ZXN0WG9yVW5zaWduZWRSaWdodFNoaWZ0MzIpOgorICAgICAgICAoSlNDOjp0ZXN0WG9yTGVm
dFNoaWZ0NjQpOgorICAgICAgICAoSlNDOjp0ZXN0WG9yUmlnaHRTaGlmdDY0KToKKyAgICAgICAg
KEpTQzo6dGVzdFhvclVuc2lnbmVkUmlnaHRTaGlmdDY0KToKKyAgICAgICAgKEpTQzo6dGVzdE9y
TGVmdFNoaWZ0MzIpOgorICAgICAgICAoSlNDOjp0ZXN0T3JSaWdodFNoaWZ0MzIpOgorICAgICAg
ICAoSlNDOjp0ZXN0T3JVbnNpZ25lZFJpZ2h0U2hpZnQzMik6CisgICAgICAgIChKU0M6OnRlc3RP
ckxlZnRTaGlmdDY0KToKKyAgICAgICAgKEpTQzo6dGVzdE9yUmlnaHRTaGlmdDY0KToKKyAgICAg
ICAgKEpTQzo6dGVzdE9yVW5zaWduZWRSaWdodFNoaWZ0NjQpOgorICAgICAgICAqIGIzL0IzTG93
ZXJUb0Fpci5jcHA6CisgICAgICAgICogYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzOgorICAgICAg
ICAqIGIzL3Rlc3RiMy5oOgorICAgICAgICAqIGIzL3Rlc3RiM18yLmNwcDoKKyAgICAgICAgKHRl
c3RBbmRMZWZ0U2hpZnQzMik6CisgICAgICAgICh0ZXN0QW5kUmlnaHRTaGlmdDMyKToKKyAgICAg
ICAgKHRlc3RBbmRVbnNpZ25lZFJpZ2h0U2hpZnQzMik6CisgICAgICAgICh0ZXN0QW5kTGVmdFNo
aWZ0NjQpOgorICAgICAgICAodGVzdEFuZFJpZ2h0U2hpZnQ2NCk6CisgICAgICAgICh0ZXN0QW5k
VW5zaWduZWRSaWdodFNoaWZ0NjQpOgorICAgICAgICAodGVzdFhvckxlZnRTaGlmdDMyKToKKyAg
ICAgICAgKHRlc3RYb3JSaWdodFNoaWZ0MzIpOgorICAgICAgICAodGVzdFhvclVuc2lnbmVkUmln
aHRTaGlmdDMyKToKKyAgICAgICAgKHRlc3RYb3JMZWZ0U2hpZnQ2NCk6CisgICAgICAgICh0ZXN0
WG9yUmlnaHRTaGlmdDY0KToKKyAgICAgICAgKHRlc3RYb3JVbnNpZ25lZFJpZ2h0U2hpZnQ2NCk6
CisgICAgICAgICh0ZXN0T3JMZWZ0U2hpZnQzMik6CisgICAgICAgICh0ZXN0T3JSaWdodFNoaWZ0
MzIpOgorICAgICAgICAodGVzdE9yVW5zaWduZWRSaWdodFNoaWZ0MzIpOgorICAgICAgICAodGVz
dE9yTGVmdFNoaWZ0NjQpOgorICAgICAgICAodGVzdE9yUmlnaHRTaGlmdDY0KToKKyAgICAgICAg
KHRlc3RPclVuc2lnbmVkUmlnaHRTaGlmdDY0KToKKyAgICAgICAgKGFkZEJpdFRlc3RzKToKKwog
MjAyMS0wNy0zMCAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5jb20+CiAKICAgICAg
ICAgQWRkIFByZS9Qb3N0LUluZGV4ZWQgQWRkcmVzcyBNb2RlIHRvIEFpciBmb3IgQVJNNjQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJB
Uk02NC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFS
TTY0LmgKaW5kZXggZTZiZmJlYzYwMDFjMTBjNjFlOWYyNjZlZmYyN2FkNmYxMGU4OWY4Zi4uNmNh
YTM1YjdjNzU2YjgwY2VhNTZlOTJjYWVhYTYwN2ViOTg5Njc4YiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKQEAgLTY0
OSw2ICs2NDksOTYgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5zdWI8NjQ+KGQsIG4s
IG0sIEFzc2VtYmxlcjo6TFNSLCBhbW91bnQubV92YWx1ZSk7CiAgICAgfQogCisgICAgdm9pZCBh
bmRMZWZ0U2hpZnQzMihSZWdpc3RlcklEIG4sIFJlZ2lzdGVySUQgbSwgVHJ1c3RlZEltbTMyIGFt
b3VudCwgUmVnaXN0ZXJJRCBkKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kXzwzMj4o
ZCwgbiwgbSwgQXNzZW1ibGVyOjpMU0wsIGFtb3VudC5tX3ZhbHVlKTsKKyAgICB9CisKKyAgICB2
b2lkIGFuZFJpZ2h0U2hpZnQzMihSZWdpc3RlcklEIG4sIFJlZ2lzdGVySUQgbSwgVHJ1c3RlZElt
bTMyIGFtb3VudCwgUmVnaXN0ZXJJRCBkKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5k
XzwzMj4oZCwgbiwgbSwgQXNzZW1ibGVyOjpBU1IsIGFtb3VudC5tX3ZhbHVlKTsKKyAgICB9CisK
KyAgICB2b2lkIGFuZFVuc2lnbmVkUmlnaHRTaGlmdDMyKFJlZ2lzdGVySUQgbiwgUmVnaXN0ZXJJ
RCBtLCBUcnVzdGVkSW1tMzIgYW1vdW50LCBSZWdpc3RlcklEIGQpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5hbmRfPDMyPihkLCBuLCBtLCBBc3NlbWJsZXI6OkxTUiwgYW1vdW50Lm1fdmFs
dWUpOworICAgIH0KKworICAgIHZvaWQgYW5kTGVmdFNoaWZ0NjQoUmVnaXN0ZXJJRCBuLCBSZWdp
c3RlcklEIG0sIFRydXN0ZWRJbW0zMiBhbW91bnQsIFJlZ2lzdGVySUQgZCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmFuZF88NjQ+KGQsIG4sIG0sIEFzc2VtYmxlcjo6TFNMLCBhbW91bnQu
bV92YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBhbmRSaWdodFNoaWZ0NjQoUmVnaXN0ZXJJRCBu
LCBSZWdpc3RlcklEIG0sIFRydXN0ZWRJbW0zMiBhbW91bnQsIFJlZ2lzdGVySUQgZCkKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLmFuZF88NjQ+KGQsIG4sIG0sIEFzc2VtYmxlcjo6QVNSLCBh
bW91bnQubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBhbmRVbnNpZ25lZFJpZ2h0U2hpZnQ2
NChSZWdpc3RlcklEIG4sIFJlZ2lzdGVySUQgbSwgVHJ1c3RlZEltbTMyIGFtb3VudCwgUmVnaXN0
ZXJJRCBkKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYW5kXzw2ND4oZCwgbiwgbSwgQXNz
ZW1ibGVyOjpMU1IsIGFtb3VudC5tX3ZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvckxlZnRT
aGlmdDMyKFJlZ2lzdGVySUQgbiwgUmVnaXN0ZXJJRCBtLCBUcnVzdGVkSW1tMzIgYW1vdW50LCBS
ZWdpc3RlcklEIGQpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5lb3I8MzI+KGQsIG4sIG0s
IEFzc2VtYmxlcjo6TFNMLCBhbW91bnQubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCB4b3JS
aWdodFNoaWZ0MzIoUmVnaXN0ZXJJRCBuLCBSZWdpc3RlcklEIG0sIFRydXN0ZWRJbW0zMiBhbW91
bnQsIFJlZ2lzdGVySUQgZCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmVvcjwzMj4oZCwg
biwgbSwgQXNzZW1ibGVyOjpBU1IsIGFtb3VudC5tX3ZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lk
IHhvclVuc2lnbmVkUmlnaHRTaGlmdDMyKFJlZ2lzdGVySUQgbiwgUmVnaXN0ZXJJRCBtLCBUcnVz
dGVkSW1tMzIgYW1vdW50LCBSZWdpc3RlcklEIGQpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5lb3I8MzI+KGQsIG4sIG0sIEFzc2VtYmxlcjo6TFNSLCBhbW91bnQubV92YWx1ZSk7CisgICAg
fQorCisgICAgdm9pZCB4b3JMZWZ0U2hpZnQ2NChSZWdpc3RlcklEIG4sIFJlZ2lzdGVySUQgbSwg
VHJ1c3RlZEltbTMyIGFtb3VudCwgUmVnaXN0ZXJJRCBkKQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuZW9yPDY0PihkLCBuLCBtLCBBc3NlbWJsZXI6OkxTTCwgYW1vdW50Lm1fdmFsdWUpOwor
ICAgIH0KKworICAgIHZvaWQgeG9yUmlnaHRTaGlmdDY0KFJlZ2lzdGVySUQgbiwgUmVnaXN0ZXJJ
RCBtLCBUcnVzdGVkSW1tMzIgYW1vdW50LCBSZWdpc3RlcklEIGQpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5lb3I8NjQ+KGQsIG4sIG0sIEFzc2VtYmxlcjo6QVNSLCBhbW91bnQubV92YWx1
ZSk7CisgICAgfQorCisgICAgdm9pZCB4b3JVbnNpZ25lZFJpZ2h0U2hpZnQ2NChSZWdpc3RlcklE
IG4sIFJlZ2lzdGVySUQgbSwgVHJ1c3RlZEltbTMyIGFtb3VudCwgUmVnaXN0ZXJJRCBkKQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIuZW9yPDY0PihkLCBuLCBtLCBBc3NlbWJsZXI6OkxTUiwg
YW1vdW50Lm1fdmFsdWUpOworICAgIH0KKworICAgIHZvaWQgb3JMZWZ0U2hpZnQzMihSZWdpc3Rl
cklEIG4sIFJlZ2lzdGVySUQgbSwgVHJ1c3RlZEltbTMyIGFtb3VudCwgUmVnaXN0ZXJJRCBkKQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3JyPDMyPihkLCBuLCBtLCBBc3NlbWJsZXI6OkxT
TCwgYW1vdW50Lm1fdmFsdWUpOworICAgIH0KKworICAgIHZvaWQgb3JSaWdodFNoaWZ0MzIoUmVn
aXN0ZXJJRCBuLCBSZWdpc3RlcklEIG0sIFRydXN0ZWRJbW0zMiBhbW91bnQsIFJlZ2lzdGVySUQg
ZCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ycjwzMj4oZCwgbiwgbSwgQXNzZW1ibGVy
OjpBU1IsIGFtb3VudC5tX3ZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIG9yVW5zaWduZWRSaWdo
dFNoaWZ0MzIoUmVnaXN0ZXJJRCBuLCBSZWdpc3RlcklEIG0sIFRydXN0ZWRJbW0zMiBhbW91bnQs
IFJlZ2lzdGVySUQgZCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ycjwzMj4oZCwgbiwg
bSwgQXNzZW1ibGVyOjpMU1IsIGFtb3VudC5tX3ZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIG9y
TGVmdFNoaWZ0NjQoUmVnaXN0ZXJJRCBuLCBSZWdpc3RlcklEIG0sIFRydXN0ZWRJbW0zMiBhbW91
bnQsIFJlZ2lzdGVySUQgZCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ycjw2ND4oZCwg
biwgbSwgQXNzZW1ibGVyOjpMU0wsIGFtb3VudC5tX3ZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lk
IG9yUmlnaHRTaGlmdDY0KFJlZ2lzdGVySUQgbiwgUmVnaXN0ZXJJRCBtLCBUcnVzdGVkSW1tMzIg
YW1vdW50LCBSZWdpc3RlcklEIGQpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5vcnI8NjQ+
KGQsIG4sIG0sIEFzc2VtYmxlcjo6QVNSLCBhbW91bnQubV92YWx1ZSk7CisgICAgfQorCisgICAg
dm9pZCBvclVuc2lnbmVkUmlnaHRTaGlmdDY0KFJlZ2lzdGVySUQgbiwgUmVnaXN0ZXJJRCBtLCBU
cnVzdGVkSW1tMzIgYW1vdW50LCBSZWdpc3RlcklEIGQpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5vcnI8NjQ+KGQsIG4sIG0sIEFzc2VtYmxlcjo6TFNSLCBhbW91bnQubV92YWx1ZSk7Cisg
ICAgfQorCiAgICAgdm9pZCBjbGVhckJpdDY0KFJlZ2lzdGVySUQgYml0VG9DbGVhciwgUmVnaXN0
ZXJJRCBkZXN0LCBSZWdpc3RlcklEIHNjcmF0Y2hGb3JNYXNrID0gSW52YWxpZEdQUlJlZykKICAg
ICB7CiAgICAgICAgIGlmIChzY3JhdGNoRm9yTWFzayA9PSBJbnZhbGlkR1BSUmVnKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcAppbmRleCAxY2E2OTgzZWI3
MGQ5NjQwYmU0ZmIyZjExMGUyZjhlMDFmMzhmODM4Li5mNGM2MDk3MGM2MGYxOGZiYWY2MGY5ZDU2
NGI5ZDM1ZWJjOTRmNDBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL3Rlc3RtYXNtLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rl
c3RtYXNtLmNwcApAQCAtMjM4Miw2ICsyMzgyLDQ3NCBAQCB2b2lkIHRlc3RMb2FkUHJlUG9zdElu
ZGV4NjQoKQogICAgIENIRUNLX0VRKHRlc3QyKDUpLCAyKTsKICAgICBDSEVDS19FUShudW1zWzJd
LCA1KTsKIH0KKwordm9pZCB0ZXN0QW5kTGVmdFNoaWZ0MzIoKQoreworICAgIFZlY3RvcjxpbnQz
Ml90PiBhbW91bnRzID0geyAwLCAxNywgMzEgfTsKKyAgICBmb3IgKGF1dG8gbiA6IGludDMyT3Bl
cmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbSA6IGludDMyT3BlcmFuZHMoKSkgeworICAg
ICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBh
dXRvIGFuZDMyID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAg
ICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgICAgICAg
ICAgaml0LmFuZExlZnRTaGlmdDMyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BSMSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFtb3VudCksCisgICAgICAgICAgICAgICAg
ICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAgICAgICAg
ZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgICAgICAgICAgaml0LnJldCgp
OworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgaW50MzJfdCBsaHMgPSBp
bnZva2U8aW50MzJfdD4oYW5kMzIsIG4sIG0pOworICAgICAgICAgICAgICAgIGludDMyX3Qgcmhz
ID0gbiAmIChtIDw8IGFtb3VudCk7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEobGhzLCByaHMp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RBbmRSaWdo
dFNoaWZ0MzIoKQoreworICAgIFZlY3RvcjxpbnQzMl90PiBhbW91bnRzID0geyAwLCAxNywgMzEg
fTsKKyAgICBmb3IgKGF1dG8gbiA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1
dG8gbSA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6
IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGFuZDMyID0gY29tcGlsZShbPV0gKEND
YWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xv
Z3VlKGppdCk7CisKKyAgICAgICAgICAgICAgICAgICAgaml0LmFuZFJpZ2h0U2hpZnQzMihHUFJJ
bmZvOjphcmd1bWVudEdQUjAsCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjphcmd1
bWVudEdQUjEsCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihhbW91bnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpOworCisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7
CisgICAgICAgICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAgICAgICB9KTsKKwor
ICAgICAgICAgICAgICAgIGludDMyX3QgbGhzID0gaW52b2tlPGludDMyX3Q+KGFuZDMyLCBuLCBt
KTsKKyAgICAgICAgICAgICAgICBpbnQzMl90IHJocyA9IG4gJiAobSA+PiBhbW91bnQpOworICAg
ICAgICAgICAgICAgIENIRUNLX0VRKGxocywgcmhzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KK30KKwordm9pZCB0ZXN0QW5kVW5zaWduZWRSaWdodFNoaWZ0MzIoKQoreworICAg
IFZlY3Rvcjx1aW50MzJfdD4gYW1vdW50cyA9IHsgMCwgMTcsIDMxIH07CisgICAgZm9yIChhdXRv
IG4gOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG0gOiBpbnQzMk9wZXJh
bmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAg
ICAgICAgICAgICAgYXV0byBhbmQzMiA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkg
eworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAg
ICAgICAgICAgICAgICAgIGppdC5hbmRVbnNpZ25lZFJpZ2h0U2hpZnQzMihHUFJJbmZvOjphcmd1
bWVudEdQUjAsCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjphcmd1bWVudEdQUjEs
CisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbW91
bnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwor
CisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAg
ICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAg
ICAgICAgIHVpbnQzMl90IGxocyA9IGludm9rZTx1aW50MzJfdD4oYW5kMzIsIG4sIG0pOworICAg
ICAgICAgICAgICAgIHVpbnQzMl90IHJocyA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihuKSAmIChz
dGF0aWNfY2FzdDx1aW50MzJfdD4obSkgPj4gYW1vdW50KTsKKyAgICAgICAgICAgICAgICBDSEVD
S19FUShsaHMsIHJocyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3Zv
aWQgdGVzdEFuZExlZnRTaGlmdDY0KCkKK3sKKyAgICBWZWN0b3I8aW50MzJfdD4gYW1vdW50cyA9
IHsgMCwgMzQsIDYzIH07CisgICAgZm9yIChhdXRvIG4gOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAg
ICAgICAgZm9yIChhdXRvIG0gOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAo
YXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgYXV0byBhbmQ2NCA9IGNv
bXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgICAgICAgICBlbWl0
RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAgICAgICAgIGppdC5hbmRMZWZ0
U2hpZnQ2NChHUFJJbmZvOjphcmd1bWVudEdQUjAsCisgICAgICAgICAgICAgICAgICAgICAgICBH
UFJJbmZvOjphcmd1bWVudEdQUjEsCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihhbW91bnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVw
aWxvZ3VlKGppdCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAg
ICAgICB9KTsKKworICAgICAgICAgICAgICAgIGludDY0X3QgbGhzID0gaW52b2tlPGludDY0X3Q+
KGFuZDY0LCBuLCBtKTsKKyAgICAgICAgICAgICAgICBpbnQ2NF90IHJocyA9IG4gJiAobSA8PCBh
bW91bnQpOworICAgICAgICAgICAgICAgIENIRUNLX0VRKGxocywgcmhzKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0QW5kUmlnaHRTaGlmdDY0KCkKK3sK
KyAgICBWZWN0b3I8aW50MzJfdD4gYW1vdW50cyA9IHsgMCwgMzQsIDYzIH07CisgICAgZm9yIChh
dXRvIG4gOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG0gOiBpbnQ2NE9w
ZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7Cisg
ICAgICAgICAgICAgICAgYXV0byBhbmQ2NCA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCkgeworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisg
ICAgICAgICAgICAgICAgICAgIGppdC5hbmRSaWdodFNoaWZ0NjQoR1BSSW5mbzo6YXJndW1lbnRH
UFIwLAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6YXJndW1lbnRHUFIxLAorICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYW1vdW50KSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAg
ICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAg
ICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAg
ICBpbnQ2NF90IGxocyA9IGludm9rZTxpbnQ2NF90PihhbmQ2NCwgbiwgbSk7CisgICAgICAgICAg
ICAgICAgaW50NjRfdCByaHMgPSBuICYgKG0gPj4gYW1vdW50KTsKKyAgICAgICAgICAgICAgICBD
SEVDS19FUShsaHMsIHJocyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisK
K3ZvaWQgdGVzdEFuZFVuc2lnbmVkUmlnaHRTaGlmdDY0KCkKK3sKKyAgICBWZWN0b3I8dWludDMy
X3Q+IGFtb3VudHMgPSB7IDAsIDM0LCA2MyB9OworICAgIGZvciAoYXV0byBuIDogaW50NjRPcGVy
YW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAg
ICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAgICAgIGF1
dG8gYW5kNjQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgICAgICAg
ICBqaXQuYW5kVW5zaWduZWRSaWdodFNoaWZ0NjQoR1BSSW5mbzo6YXJndW1lbnRHUFIwLAorICAg
ICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6YXJndW1lbnRHUFIxLAorICAgICAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYW1vdW50KSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAg
ICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgICAgICAgICBq
aXQucmV0KCk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICB1aW50NjRf
dCBsaHMgPSBpbnZva2U8dWludDY0X3Q+KGFuZDY0LCBuLCBtKTsKKyAgICAgICAgICAgICAgICB1
aW50NjRfdCByaHMgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4obikgJiAoc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KG0pID4+IGFtb3VudCk7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEobGhzLCByaHMp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RYb3JMZWZ0
U2hpZnQzMigpCit7CisgICAgVmVjdG9yPGludDMyX3Q+IGFtb3VudHMgPSB7IDAsIDE3LCAzMSB9
OworICAgIGZvciAoYXV0byBuIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0
byBtIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDog
YW1vdW50cykgeworICAgICAgICAgICAgICAgIGF1dG8geG9yMzIgPSBjb21waWxlKFs9XSAoQ0Nh
bGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9n
dWUoaml0KTsKKworICAgICAgICAgICAgICAgICAgICBqaXQueG9yTGVmdFNoaWZ0MzIoR1BSSW5m
bzo6YXJndW1lbnRHUFIwLAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6YXJndW1l
bnRHUFIxLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoYW1vdW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVl
R1BSKTsKKworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOwor
ICAgICAgICAgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAg
ICAgICAgICAgICAgICBpbnQzMl90IGxocyA9IGludm9rZTxpbnQzMl90Pih4b3IzMiwgbiwgbSk7
CisgICAgICAgICAgICAgICAgaW50MzJfdCByaHMgPSBuIF4gKG0gPDwgYW1vdW50KTsKKyAgICAg
ICAgICAgICAgICBDSEVDS19FUShsaHMsIHJocyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9Cit9CisKK3ZvaWQgdGVzdFhvclJpZ2h0U2hpZnQzMigpCit7CisgICAgVmVjdG9yPGlu
dDMyX3Q+IGFtb3VudHMgPSB7IDAsIDE3LCAzMSB9OworICAgIGZvciAoYXV0byBuIDogaW50MzJP
cGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtIDogaW50MzJPcGVyYW5kcygpKSB7Cisg
ICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAgICAg
IGF1dG8geG9yMzIgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgICAg
ICAgICBqaXQueG9yUmlnaHRTaGlmdDMyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BSMSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFtb3VudCksCisgICAgICAgICAgICAg
ICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAgICAg
ICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgICAgICAgICAgaml0LnJl
dCgpOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgaW50MzJfdCBsaHMg
PSBpbnZva2U8aW50MzJfdD4oeG9yMzIsIG4sIG0pOworICAgICAgICAgICAgICAgIGludDMyX3Qg
cmhzID0gbiBeIChtID4+IGFtb3VudCk7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEobGhzLCBy
aHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RYb3JV
bnNpZ25lZFJpZ2h0U2hpZnQzMigpCit7CisgICAgVmVjdG9yPHVpbnQzMl90PiBhbW91bnRzID0g
eyAwLCAxNywgMzEgfTsKKyAgICBmb3IgKGF1dG8gbiA6IGludDMyT3BlcmFuZHMoKSkgeworICAg
ICAgICBmb3IgKGF1dG8gbSA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChh
dXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHhvcjMyID0gY29t
cGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRG
dW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgICAgICAgICAgaml0LnhvclVuc2ln
bmVkUmlnaHRTaGlmdDMyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BSMSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFtb3VudCksCisgICAgICAgICAgICAgICAgICAgICAg
ICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1
bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgICAgICAgICAgaml0LnJldCgpOworICAg
ICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgdWludDMyX3QgbGhzID0gaW52b2tl
PHVpbnQzMl90Pih4b3IzMiwgbiwgbSk7CisgICAgICAgICAgICAgICAgdWludDMyX3QgcmhzID0g
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KG4pIF4gKHN0YXRpY19jYXN0PHVpbnQzMl90PihtKSA+PiBh
bW91bnQpOworICAgICAgICAgICAgICAgIENIRUNLX0VRKGxocywgcmhzKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0WG9yTGVmdFNoaWZ0NjQoKQorewor
ICAgIFZlY3RvcjxpbnQzMl90PiBhbW91bnRzID0geyAwLCAzNCwgNjMgfTsKKyAgICBmb3IgKGF1
dG8gbiA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbSA6IGludDY0T3Bl
cmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAg
ICAgICAgICAgICAgICBhdXRvIHhvcjY0ID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0
KSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAg
ICAgICAgICAgICAgICAgICAgaml0LnhvckxlZnRTaGlmdDY0KEdQUkluZm86OmFyZ3VtZW50R1BS
MCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BSMSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFtb3VudCksCisg
ICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAg
ICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgICAg
ICAgICAgaml0LnJldCgpOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAg
aW50NjRfdCBsaHMgPSBpbnZva2U8aW50NjRfdD4oeG9yNjQsIG4sIG0pOworICAgICAgICAgICAg
ICAgIGludDY0X3QgcmhzID0gbiBeIChtIDw8IGFtb3VudCk7CisgICAgICAgICAgICAgICAgQ0hF
Q0tfRVEobGhzLCByaHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2
b2lkIHRlc3RYb3JSaWdodFNoaWZ0NjQoKQoreworICAgIFZlY3RvcjxpbnQzMl90PiBhbW91bnRz
ID0geyAwLCAzNCwgNjMgfTsKKyAgICBmb3IgKGF1dG8gbiA6IGludDY0T3BlcmFuZHMoKSkgewor
ICAgICAgICBmb3IgKGF1dG8gbSA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9y
IChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHhvcjY0ID0g
Y29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAgICAgIGVt
aXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgICAgICAgICAgaml0LnhvclJp
Z2h0U2hpZnQ2NChHUFJJbmZvOjphcmd1bWVudEdQUjAsCisgICAgICAgICAgICAgICAgICAgICAg
ICBHUFJJbmZvOjphcmd1bWVudEdQUjEsCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihhbW91bnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlv
bkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAg
ICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIGludDY0X3QgbGhzID0gaW52b2tlPGludDY0
X3Q+KHhvcjY0LCBuLCBtKTsKKyAgICAgICAgICAgICAgICBpbnQ2NF90IHJocyA9IG4gXiAobSA+
PiBhbW91bnQpOworICAgICAgICAgICAgICAgIENIRUNLX0VRKGxocywgcmhzKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0WG9yVW5zaWduZWRSaWdodFNo
aWZ0NjQoKQoreworICAgIFZlY3Rvcjx1aW50MzJfdD4gYW1vdW50cyA9IHsgMCwgMzQsIDYzIH07
CisgICAgZm9yIChhdXRvIG4gOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRv
IG0gOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBh
bW91bnRzKSB7CisgICAgICAgICAgICAgICAgYXV0byB4b3I2NCA9IGNvbXBpbGUoWz1dIChDQ2Fs
bEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1
ZShqaXQpOworCisgICAgICAgICAgICAgICAgICAgIGppdC54b3JVbnNpZ25lZFJpZ2h0U2hpZnQ2
NChHUFJJbmZvOjphcmd1bWVudEdQUjAsCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZv
Ojphcmd1bWVudEdQUjEsCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihhbW91bnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3Vl
KGppdCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAgICAgICB9
KTsKKworICAgICAgICAgICAgICAgIHVpbnQ2NF90IGxocyA9IGludm9rZTx1aW50NjRfdD4oeG9y
NjQsIG4sIG0pOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IHJocyA9IHN0YXRpY19jYXN0PHVp
bnQ2NF90PihuKSBeIChzdGF0aWNfY2FzdDx1aW50NjRfdD4obSkgPj4gYW1vdW50KTsKKyAgICAg
ICAgICAgICAgICBDSEVDS19FUShsaHMsIHJocyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9Cit9CisKK3ZvaWQgdGVzdE9yTGVmdFNoaWZ0MzIoKQoreworICAgIFZlY3RvcjxpbnQz
Ml90PiBhbW91bnRzID0geyAwLCAxNywgMzEgfTsKKyAgICBmb3IgKGF1dG8gbiA6IGludDMyT3Bl
cmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbSA6IGludDMyT3BlcmFuZHMoKSkgeworICAg
ICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBh
dXRvIG9yMzIgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgICAgICAg
ICBqaXQub3JMZWZ0U2hpZnQzMihHUFJJbmZvOjphcmd1bWVudEdQUjAsCisgICAgICAgICAgICAg
ICAgICAgICAgICBHUFJJbmZvOjphcmd1bWVudEdQUjEsCisgICAgICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbW91bnQpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICAgICAgICAgIGVt
aXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5yZXQoKTsK
KyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIGludDMyX3QgbGhzID0gaW52
b2tlPGludDMyX3Q+KG9yMzIsIG4sIG0pOworICAgICAgICAgICAgICAgIGludDMyX3QgcmhzID0g
biB8IChtIDw8IGFtb3VudCk7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEobGhzLCByaHMpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RPclJpZ2h0U2hp
ZnQzMigpCit7CisgICAgVmVjdG9yPGludDMyX3Q+IGFtb3VudHMgPSB7IDAsIDE3LCAzMSB9Owor
ICAgIGZvciAoYXV0byBuIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBt
IDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1v
dW50cykgeworICAgICAgICAgICAgICAgIGF1dG8gb3IzMiA9IGNvbXBpbGUoWz1dIChDQ2FsbEhl
bHBlcnMmIGppdCkgeworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShq
aXQpOworCisgICAgICAgICAgICAgICAgICAgIGppdC5vclJpZ2h0U2hpZnQzMihHUFJJbmZvOjph
cmd1bWVudEdQUjAsCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjphcmd1bWVudEdQ
UjEsCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihh
bW91bnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
OworCisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAg
ICAgICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAg
ICAgICAgICAgIGludDMyX3QgbGhzID0gaW52b2tlPGludDMyX3Q+KG9yMzIsIG4sIG0pOworICAg
ICAgICAgICAgICAgIGludDMyX3QgcmhzID0gbiB8IChtID4+IGFtb3VudCk7CisgICAgICAgICAg
ICAgICAgQ0hFQ0tfRVEobGhzLCByaHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorfQorCit2b2lkIHRlc3RPclVuc2lnbmVkUmlnaHRTaGlmdDMyKCkKK3sKKyAgICBWZWN0b3I8
dWludDMyX3Q+IGFtb3VudHMgPSB7IDAsIDE3LCAzMSB9OworICAgIGZvciAoYXV0byBuIDogaW50
MzJPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtIDogaW50MzJPcGVyYW5kcygpKSB7
CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAg
ICAgIGF1dG8gb3IzMiA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAg
ICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAg
ICAgICAgIGppdC5vclVuc2lnbmVkUmlnaHRTaGlmdDMyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwK
KyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BSMSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFtb3VudCksCisgICAg
ICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAg
ICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgICAgICAg
ICAgaml0LnJldCgpOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgdWlu
dDMyX3QgbGhzID0gaW52b2tlPHVpbnQzMl90PihvcjMyLCBuLCBtKTsKKyAgICAgICAgICAgICAg
ICB1aW50MzJfdCByaHMgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4obikgfCAoc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KG0pID4+IGFtb3VudCk7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEobGhzLCBy
aHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RPckxl
ZnRTaGlmdDY0KCkKK3sKKyAgICBWZWN0b3I8aW50MzJfdD4gYW1vdW50cyA9IHsgMCwgMzQsIDYz
IH07CisgICAgZm9yIChhdXRvIG4gOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChh
dXRvIG0gOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQg
OiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgYXV0byBvcjY0ID0gY29tcGlsZShbPV0gKEND
YWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xv
Z3VlKGppdCk7CisKKyAgICAgICAgICAgICAgICAgICAgaml0Lm9yTGVmdFNoaWZ0NjQoR1BSSW5m
bzo6YXJndW1lbnRHUFIwLAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6YXJndW1l
bnRHUFIxLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoYW1vdW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVl
R1BSKTsKKworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOwor
ICAgICAgICAgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAg
ICAgICAgICAgICAgICBpbnQ2NF90IGxocyA9IGludm9rZTxpbnQ2NF90PihvcjY0LCBuLCBtKTsK
KyAgICAgICAgICAgICAgICBpbnQ2NF90IHJocyA9IG4gfCAobSA8PCBhbW91bnQpOworICAgICAg
ICAgICAgICAgIENIRUNLX0VRKGxocywgcmhzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KK30KKwordm9pZCB0ZXN0T3JSaWdodFNoaWZ0NjQoKQoreworICAgIFZlY3RvcjxpbnQz
Ml90PiBhbW91bnRzID0geyAwLCAzNCwgNjMgfTsKKyAgICBmb3IgKGF1dG8gbiA6IGludDY0T3Bl
cmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbSA6IGludDY0T3BlcmFuZHMoKSkgeworICAg
ICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBh
dXRvIG9yNjQgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgICAgICAg
ICBqaXQub3JSaWdodFNoaWZ0NjQoR1BSSW5mbzo6YXJndW1lbnRHUFIwLAorICAgICAgICAgICAg
ICAgICAgICAgICAgR1BSSW5mbzo6YXJndW1lbnRHUFIxLAorICAgICAgICAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYW1vdW50KSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgICAgICAgICBl
bWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgICAgICAgICBqaXQucmV0KCk7
CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICBpbnQ2NF90IGxocyA9IGlu
dm9rZTxpbnQ2NF90PihvcjY0LCBuLCBtKTsKKyAgICAgICAgICAgICAgICBpbnQ2NF90IHJocyA9
IG4gfCAobSA+PiBhbW91bnQpOworICAgICAgICAgICAgICAgIENIRUNLX0VRKGxocywgcmhzKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0T3JVbnNpZ25l
ZFJpZ2h0U2hpZnQ2NCgpCit7CisgICAgVmVjdG9yPHVpbnQzMl90PiBhbW91bnRzID0geyAwLCAz
NCwgNjMgfTsKKyAgICBmb3IgKGF1dG8gbiA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICBm
b3IgKGF1dG8gbSA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFt
b3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBhdXRvIG9yNjQgPSBjb21waWxlKFs9
XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9u
UHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgICAgICAgICBqaXQub3JVbnNpZ25lZFJpZ2h0
U2hpZnQ2NChHUFJJbmZvOjphcmd1bWVudEdQUjAsCisgICAgICAgICAgICAgICAgICAgICAgICBH
UFJJbmZvOjphcmd1bWVudEdQUjEsCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihhbW91bnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVw
aWxvZ3VlKGppdCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAg
ICAgICB9KTsKKworICAgICAgICAgICAgICAgIHVpbnQ2NF90IGxocyA9IGludm9rZTx1aW50NjRf
dD4ob3I2NCwgbiwgbSk7CisgICAgICAgICAgICAgICAgdWludDY0X3QgcmhzID0gc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KG4pIHwgKHN0YXRpY19jYXN0PHVpbnQ2NF90PihtKSA+PiBhbW91bnQpOwor
ICAgICAgICAgICAgICAgIENIRUNLX0VRKGxocywgcmhzKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KK30KICNlbmRpZgogCiAjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkgfHwg
Q1BVKEFSTTY0KQpAQCAtNDk4MCw2ICs1NDQ4LDI2IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZp
bHRlcikgV1RGX0lHTk9SRVNfVEhSRUFEX1NBRkVUWV9BTkFMWVNJUwogICAgIFJVTih0ZXN0U3Rv
cmVQcmVQb3N0SW5kZXg2NCgpKTsKICAgICBSVU4odGVzdExvYWRQcmVQb3N0SW5kZXgzMigpKTsK
ICAgICBSVU4odGVzdExvYWRQcmVQb3N0SW5kZXg2NCgpKTsKKyAgICBSVU4odGVzdEFuZExlZnRT
aGlmdDMyKCkpOworICAgIFJVTih0ZXN0QW5kUmlnaHRTaGlmdDMyKCkpOworICAgIFJVTih0ZXN0
QW5kVW5zaWduZWRSaWdodFNoaWZ0MzIoKSk7CisgICAgUlVOKHRlc3RBbmRMZWZ0U2hpZnQ2NCgp
KTsKKyAgICBSVU4odGVzdEFuZFJpZ2h0U2hpZnQ2NCgpKTsKKyAgICBSVU4odGVzdEFuZFVuc2ln
bmVkUmlnaHRTaGlmdDY0KCkpOworCisgICAgUlVOKHRlc3RYb3JMZWZ0U2hpZnQzMigpKTsKKyAg
ICBSVU4odGVzdFhvclJpZ2h0U2hpZnQzMigpKTsKKyAgICBSVU4odGVzdFhvclVuc2lnbmVkUmln
aHRTaGlmdDMyKCkpOworICAgIFJVTih0ZXN0WG9yTGVmdFNoaWZ0NjQoKSk7CisgICAgUlVOKHRl
c3RYb3JSaWdodFNoaWZ0NjQoKSk7CisgICAgUlVOKHRlc3RYb3JVbnNpZ25lZFJpZ2h0U2hpZnQ2
NCgpKTsKKworICAgIFJVTih0ZXN0T3JMZWZ0U2hpZnQzMigpKTsKKyAgICBSVU4odGVzdE9yUmln
aHRTaGlmdDMyKCkpOworICAgIFJVTih0ZXN0T3JVbnNpZ25lZFJpZ2h0U2hpZnQzMigpKTsKKyAg
ICBSVU4odGVzdE9yTGVmdFNoaWZ0NjQoKSk7CisgICAgUlVOKHRlc3RPclJpZ2h0U2hpZnQ2NCgp
KTsKKyAgICBSVU4odGVzdE9yVW5zaWduZWRSaWdodFNoaWZ0NjQoKSk7CiAjZW5kaWYKIAogI2lm
IENQVShBUk02NEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dl
clRvQWlyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCmlu
ZGV4IGViYjAzNTJjYjMwODAzZGJjMWZlODE4ZTM5OTBiYTM3NDU3MDY2MzcuLmQzMGRkYTkwMjEz
ZGEzOGVmZmU3MWM3OTllYTNmZTgyMjYzZGVhZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0xvd2VyVG9BaXIuY3BwCkBAIC0yNTI4LDcgKzI1MjgsMjQgQEAgcHJpdmF0ZToKICAgICAg
ICAgfQogICAgICAgICByZWxvb3BCbG9jay0+c2V0U3VjY2Vzc29ycyhkb25lQmxvY2ssIHJlbG9v
cEJsb2NrKTsKICAgICB9Ci0gICAgCisKKyAgICBib29sIHRyeUFwcGVuZEJpdE9wV2l0aFNoaWZ0
KFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIEFpcjo6T3Bjb2RlIG9wY29kZSkKKyAgICB7Cisg
ICAgICAgIGlmICghaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFyZzo6
SW1tLCBBcmc6OlRtcCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICgh
Y2FuQmVJbnRlcm5hbChyaWdodCkgfHwgIWltbShyaWdodC0+Y2hpbGQoMSkpIHx8IHJpZ2h0LT5j
aGlsZCgxKS0+YXNJbnQoKSA8IDApCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAg
ICAgdWludDY0X3QgYW1vdW50ID0gcmlnaHQtPmNoaWxkKDEpLT5hc0ludCgpOworICAgICAgICB1
aW50NjRfdCBkYXRhc2l6ZSA9IG1fdmFsdWUtPnR5cGUoKSA9PSBJbnQzMiA/IDMyIDogNjQ7Cisg
ICAgICAgIGlmIChhbW91bnQgPj0gZGF0YXNpemUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKGxlZnQpLCB0bXAocmlnaHQtPmNoaWxkKDAp
KSwgaW1tKHJpZ2h0LT5jaGlsZCgxKSksIHRtcChtX3ZhbHVlKSk7CisgICAgICAgIGNvbW1pdElu
dGVybmFsKHJpZ2h0KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgdm9pZCBs
b3dlcigpCiAgICAgewogICAgICAgICB1c2luZyBuYW1lc3BhY2UgQWlyOwpAQCAtMjcwNCwyNSAr
MjcyMSwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKHRyeU11bHRpcGx5QWRkKCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICAvLyBhZGQtd2l0aC1zaGlmdCBQ
YXR0ZXJuOiBuICsgKG0gU2hpZnRUeXBlIGFtb3VudCkKKyAgICAgICAgICAgIC8vIGFkZC13aXRo
LXNoaWZ0IFBhdHRlcm46IGxlZnQgKyAocmlnaHQgU2hpZnRUeXBlIGFtb3VudCkKICAgICAgICAg
ICAgIGF1dG8gdHJ5QXBwZW5kQWRkV2l0aFNoaWZ0ID0gWyZdIChWYWx1ZSogbGVmdCwgVmFsdWUq
IHJpZ2h0KSAtPiBib29sIHsKLSAgICAgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBv
cGNvZGVCYXNlZE9uU2hpZnRLaW5kKHJpZ2h0LT5vcGNvZGUoKSwgCi0gICAgICAgICAgICAgICAg
ICAgIEFkZExlZnRTaGlmdDMyLCBBZGRMZWZ0U2hpZnQ2NCwgCi0gICAgICAgICAgICAgICAgICAg
IEFkZFJpZ2h0U2hpZnQzMiwgQWRkUmlnaHRTaGlmdDY0LCAKKyAgICAgICAgICAgICAgICBBaXI6
Ok9wY29kZSBvcGNvZGUgPSBvcGNvZGVCYXNlZE9uU2hpZnRLaW5kKHJpZ2h0LT5vcGNvZGUoKSwK
KyAgICAgICAgICAgICAgICAgICAgQWRkTGVmdFNoaWZ0MzIsIEFkZExlZnRTaGlmdDY0LAorICAg
ICAgICAgICAgICAgICAgICBBZGRSaWdodFNoaWZ0MzIsIEFkZFJpZ2h0U2hpZnQ2NCwKICAgICAg
ICAgICAgICAgICAgICAgQWRkVW5zaWduZWRSaWdodFNoaWZ0MzIsIEFkZFVuc2lnbmVkUmlnaHRT
aGlmdDY0KTsKLSAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpU
bXAsIEFyZzo6VG1wLCBBcmc6OkltbSwgQXJnOjpUbXApKSAKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGlmICghY2FuQmVJbnRlcm5hbChyaWdodCkg
fHwgIWltbShyaWdodC0+Y2hpbGQoMSkpIHx8IHJpZ2h0LT5jaGlsZCgxKS0+YXNJbnQoKSA8IDAp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgICAgIHVp
bnQ2NF90IGFtb3VudCA9IHJpZ2h0LT5jaGlsZCgxKS0+YXNJbnQoKTsKLSAgICAgICAgICAgICAg
ICB1aW50NjRfdCBkYXRhc2l6ZSA9IG1fdmFsdWUtPnR5cGUoKSA9PSBJbnQzMiA/IDMyIDogNjQ7
Ci0gICAgICAgICAgICAgICAgaWYgKGFtb3VudCA+PSBkYXRhc2l6ZSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1w
KGxlZnQpLCB0bXAocmlnaHQtPmNoaWxkKDApKSwgaW1tKHJpZ2h0LT5jaGlsZCgxKSksIHRtcCht
X3ZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwocmlnaHQpOwotICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybiB0cnlBcHBlbmRC
aXRPcFdpdGhTaGlmdChsZWZ0LCByaWdodCwgb3Bjb2RlKTsKICAgICAgICAgICAgIH07CiAKICAg
ICAgICAgICAgIGlmICh0cnlBcHBlbmRBZGRXaXRoU2hpZnQobGVmdCwgcmlnaHQpIHx8IHRyeUFw
cGVuZEFkZFdpdGhTaGlmdChyaWdodCwgbGVmdCkpCkBAIC0yNzc5LDI4ICsyNzg0LDEyIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBpZiAodHJ5QXBwZW5kTXVsdGlwbHlTdWIoKSkKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIC8vIHN1Yi13aXRoLXNoaWZ0IFBhdHRlcm46
IG4gLSAobSBTaGlmdFR5cGUgYW1vdW50KQotICAgICAgICAgICAgYXV0byB0cnlBcHBlbmRTdWJB
bmRTaGlmdCA9IFsmXSAoKSAtPiBib29sIHsKLSAgICAgICAgICAgICAgICBBaXI6Ok9wY29kZSBv
cGNvZGUgPSBvcGNvZGVCYXNlZE9uU2hpZnRLaW5kKHJpZ2h0LT5vcGNvZGUoKSwgCi0gICAgICAg
ICAgICAgICAgICAgIFN1YkxlZnRTaGlmdDMyLCBTdWJMZWZ0U2hpZnQ2NCwgCi0gICAgICAgICAg
ICAgICAgICAgIFN1YlJpZ2h0U2hpZnQzMiwgU3ViUmlnaHRTaGlmdDY0LCAKLSAgICAgICAgICAg
ICAgICAgICAgU3ViVW5zaWduZWRSaWdodFNoaWZ0MzIsIFN1YlVuc2lnbmVkUmlnaHRTaGlmdDY0
KTsKLSAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIEFy
Zzo6VG1wLCBBcmc6OkltbSwgQXJnOjpUbXApKSAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgICAgIGlmICghY2FuQmVJbnRlcm5hbChyaWdodCkgfHwgIWlt
bShyaWdodC0+Y2hpbGQoMSkpIHx8IHJpZ2h0LT5jaGlsZCgxKS0+YXNJbnQoKSA8IDApCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgICAgIHVpbnQ2NF90
IGFtb3VudCA9IHJpZ2h0LT5jaGlsZCgxKS0+YXNJbnQoKTsKLSAgICAgICAgICAgICAgICB1aW50
NjRfdCBkYXRhc2l6ZSA9IG1fdmFsdWUtPnR5cGUoKSA9PSBJbnQzMiA/IDMyIDogNjQ7Ci0gICAg
ICAgICAgICAgICAgaWYgKGFtb3VudCA+PSBkYXRhc2l6ZSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKGxlZnQp
LCB0bXAocmlnaHQtPmNoaWxkKDApKSwgaW1tKHJpZ2h0LT5jaGlsZCgxKSksIHRtcChtX3ZhbHVl
KSk7Ci0gICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwocmlnaHQpOwotICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgaWYgKHRyeUFw
cGVuZFN1YkFuZFNoaWZ0KCkpCisgICAgICAgICAgICAvLyBzdWItd2l0aC1zaGlmdCBQYXR0ZXJu
OiBsZWZ0IC0gKHJpZ2h0IFNoaWZ0VHlwZSBhbW91bnQpCisgICAgICAgICAgICBBaXI6Ok9wY29k
ZSBvcGNvZGUgPSBvcGNvZGVCYXNlZE9uU2hpZnRLaW5kKHJpZ2h0LT5vcGNvZGUoKSwKKyAgICAg
ICAgICAgICAgICBTdWJMZWZ0U2hpZnQzMiwgU3ViTGVmdFNoaWZ0NjQsCisgICAgICAgICAgICAg
ICAgU3ViUmlnaHRTaGlmdDMyLCBTdWJSaWdodFNoaWZ0NjQsCisgICAgICAgICAgICAgICAgU3Vi
VW5zaWduZWRSaWdodFNoaWZ0MzIsIFN1YlVuc2lnbmVkUmlnaHRTaGlmdDY0KTsKKyAgICAgICAg
ICAgIGlmICh0cnlBcHBlbmRCaXRPcFdpdGhTaGlmdChsZWZ0LCByaWdodCwgb3Bjb2RlKSkKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgIGFwcGVuZEJpbk9wPFN1YjMyLCBT
dWI2NCwgU3ViRG91YmxlLCBTdWJGbG9hdD4obGVmdCwgcmlnaHQpOwpAQCAtMjk4OCw2ICsyOTc3
LDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAodHJ5QXBwZW5kQklDKGxlZnQsIHJpZ2h0
KSB8fCB0cnlBcHBlbmRCSUMocmlnaHQsIGxlZnQpKQogICAgICAgICAgICAgICAgIHJldHVybjsK
IAorICAgICAgICAgICAgLy8gYW5kLXdpdGgtc2hpZnQgUGF0dGVybjogbGVmdCAmIChyaWdodCBT
aGlmdFR5cGUgYW1vdW50KQorICAgICAgICAgICAgYXV0byB0cnlBcHBlbmRBbmRXaXRoU2hpZnQg
PSBbJl0gKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpIC0+IGJvb2wgeworICAgICAgICAgICAg
ICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IG9wY29kZUJhc2VkT25TaGlmdEtpbmQocmlnaHQtPm9w
Y29kZSgpLAorICAgICAgICAgICAgICAgICAgICBBbmRMZWZ0U2hpZnQzMiwgQW5kTGVmdFNoaWZ0
NjQsCisgICAgICAgICAgICAgICAgICAgIEFuZFJpZ2h0U2hpZnQzMiwgQW5kUmlnaHRTaGlmdDY0
LAorICAgICAgICAgICAgICAgICAgICBBbmRVbnNpZ25lZFJpZ2h0U2hpZnQzMiwgQW5kVW5zaWdu
ZWRSaWdodFNoaWZ0NjQpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnlBcHBlbmRCaXRPcFdp
dGhTaGlmdChsZWZ0LCByaWdodCwgb3Bjb2RlKTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAg
ICAgIGlmICh0cnlBcHBlbmRBbmRXaXRoU2hpZnQobGVmdCwgcmlnaHQpIHx8IHRyeUFwcGVuZEFu
ZFdpdGhTaGlmdChyaWdodCwgbGVmdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCiAgICAg
ICAgICAgICBhcHBlbmRCaW5PcDxBbmQzMiwgQW5kNjQsIEFuZERvdWJsZSwgQW5kRmxvYXQsIENv
bW11dGF0aXZlPihsZWZ0LCByaWdodCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
QEAgLTMxNTUsNiArMzE1NiwxOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKHRyeUFwcGVu
ZE9STihsZWZ0LCByaWdodCkgfHwgdHJ5QXBwZW5kT1JOKHJpZ2h0LCBsZWZ0KSkKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAKKyAgICAgICAgICAgIC8vIG9yci13aXRoLXNoaWZ0IFBhdHRlcm46
IGxlZnQgfCAocmlnaHQgU2hpZnRUeXBlIGFtb3VudCkKKyAgICAgICAgICAgIGF1dG8gdHJ5QXBw
ZW5kT3JXaXRoU2hpZnQgPSBbJl0gKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpIC0+IGJvb2wg
eworICAgICAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IG9wY29kZUJhc2VkT25TaGlm
dEtpbmQocmlnaHQtPm9wY29kZSgpLAorICAgICAgICAgICAgICAgICAgICBPckxlZnRTaGlmdDMy
LCBPckxlZnRTaGlmdDY0LAorICAgICAgICAgICAgICAgICAgICBPclJpZ2h0U2hpZnQzMiwgT3JS
aWdodFNoaWZ0NjQsCisgICAgICAgICAgICAgICAgICAgIE9yVW5zaWduZWRSaWdodFNoaWZ0MzIs
IE9yVW5zaWduZWRSaWdodFNoaWZ0NjQpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnlBcHBl
bmRCaXRPcFdpdGhTaGlmdChsZWZ0LCByaWdodCwgb3Bjb2RlKTsKKyAgICAgICAgICAgIH07CisK
KyAgICAgICAgICAgIGlmICh0cnlBcHBlbmRPcldpdGhTaGlmdChsZWZ0LCByaWdodCkgfHwgdHJ5
QXBwZW5kT3JXaXRoU2hpZnQocmlnaHQsIGxlZnQpKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KwogICAgICAgICAgICAgYXBwZW5kQmluT3A8T3IzMiwgT3I2NCwgT3JEb3VibGUsIE9yRmxvYXQs
IENvbW11dGF0aXZlPihsZWZ0LCByaWdodCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KQEAgLTMyMjUsNiArMzIzOCwxOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKHRyeUFw
cGVuZEVPTihsZWZ0LCByaWdodCkgfHwgdHJ5QXBwZW5kRU9OKHJpZ2h0LCBsZWZ0KSkKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAKKyAgICAgICAgICAgIC8vIGVvci13aXRoLXNoaWZ0IFBhdHRl
cm46IGxlZnQgXiAocmlnaHQgU2hpZnRUeXBlIGFtb3VudCkKKyAgICAgICAgICAgIGF1dG8gdHJ5
QXBwZW5kWG9yV2l0aFNoaWZ0ID0gWyZdIChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KSAtPiBi
b29sIHsKKyAgICAgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBvcGNvZGVCYXNlZE9u
U2hpZnRLaW5kKHJpZ2h0LT5vcGNvZGUoKSwKKyAgICAgICAgICAgICAgICAgICAgWG9yTGVmdFNo
aWZ0MzIsIFhvckxlZnRTaGlmdDY0LAorICAgICAgICAgICAgICAgICAgICBYb3JSaWdodFNoaWZ0
MzIsIFhvclJpZ2h0U2hpZnQ2NCwKKyAgICAgICAgICAgICAgICAgICAgWG9yVW5zaWduZWRSaWdo
dFNoaWZ0MzIsIFhvclVuc2lnbmVkUmlnaHRTaGlmdDY0KTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gdHJ5QXBwZW5kQml0T3BXaXRoU2hpZnQobGVmdCwgcmlnaHQsIG9wY29kZSk7CisgICAgICAg
ICAgICB9OworCisgICAgICAgICAgICBpZiAodHJ5QXBwZW5kWG9yV2l0aFNoaWZ0KGxlZnQsIHJp
Z2h0KSB8fCB0cnlBcHBlbmRYb3JXaXRoU2hpZnQocmlnaHQsIGxlZnQpKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKwogICAgICAgICAgICAgYXBwZW5kQmluT3A8WG9yMzIsIFhvcjY0LCBYb3JE
b3VibGUsIFhvckZsb2F0LCBDb21tdXRhdGl2ZT4obGVmdCwgcmlnaHQpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpck9wY29kZS5vcGNvZGVzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJP
cGNvZGUub3Bjb2RlcwppbmRleCA0OWZlZDFhYWExOWFmNmRkY2Q5MmMzMzlmNzBiNTc2ZDBkMzk1
ZGRlLi45YzhmZTQ4ZGIwM2JhMzFhMzU4ZDRkOTZlNzljYzNlZjU2N2FlMGE1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKQEAgLTk1NSw2ICs5
NTUsNjAgQEAgYXJtNjQ6IFN1YlJpZ2h0U2hpZnQ2NCBVOkc6NjQsIFU6Rzo2NCwgVTpHOjY0LCBE
Okc6NjQKIGFybTY0OiBTdWJVbnNpZ25lZFJpZ2h0U2hpZnQ2NCBVOkc6NjQsIFU6Rzo2NCwgVTpH
OjY0LCBEOkc6NjQKICAgICBUbXAsIFRtcCwgSW1tLCBUbXAKIAorYXJtNjQ6IEFuZExlZnRTaGlm
dDMyIFU6RzozMiwgVTpHOjMyLCBVOkc6MzIsIFpEOkc6MzIKKyAgICBUbXAsIFRtcCwgSW1tLCBU
bXAKKworYXJtNjQ6IEFuZFJpZ2h0U2hpZnQzMiBVOkc6MzIsIFU6RzozMiwgVTpHOjMyLCBaRDpH
OjMyCisgICAgVG1wLCBUbXAsIEltbSwgVG1wCisKK2FybTY0OiBBbmRVbnNpZ25lZFJpZ2h0U2hp
ZnQzMiBVOkc6MzIsIFU6RzozMiwgVTpHOjMyLCBaRDpHOjMyCisgICAgVG1wLCBUbXAsIEltbSwg
VG1wCisKK2FybTY0OiBBbmRMZWZ0U2hpZnQ2NCBVOkc6NjQsIFU6Rzo2NCwgVTpHOjY0LCBEOkc6
NjQKKyAgICBUbXAsIFRtcCwgSW1tLCBUbXAKKworYXJtNjQ6IEFuZFJpZ2h0U2hpZnQ2NCBVOkc6
NjQsIFU6Rzo2NCwgVTpHOjY0LCBEOkc6NjQKKyAgICBUbXAsIFRtcCwgSW1tLCBUbXAKKworYXJt
NjQ6IEFuZFVuc2lnbmVkUmlnaHRTaGlmdDY0IFU6Rzo2NCwgVTpHOjY0LCBVOkc6NjQsIEQ6Rzo2
NAorICAgIFRtcCwgVG1wLCBJbW0sIFRtcAorCithcm02NDogWG9yTGVmdFNoaWZ0MzIgVTpHOjMy
LCBVOkc6MzIsIFU6RzozMiwgWkQ6RzozMgorICAgIFRtcCwgVG1wLCBJbW0sIFRtcAorCithcm02
NDogWG9yUmlnaHRTaGlmdDMyIFU6RzozMiwgVTpHOjMyLCBVOkc6MzIsIFpEOkc6MzIKKyAgICBU
bXAsIFRtcCwgSW1tLCBUbXAKKworYXJtNjQ6IFhvclVuc2lnbmVkUmlnaHRTaGlmdDMyIFU6Rzoz
MiwgVTpHOjMyLCBVOkc6MzIsIFpEOkc6MzIKKyAgICBUbXAsIFRtcCwgSW1tLCBUbXAKKworYXJt
NjQ6IFhvckxlZnRTaGlmdDY0IFU6Rzo2NCwgVTpHOjY0LCBVOkc6NjQsIEQ6Rzo2NAorICAgIFRt
cCwgVG1wLCBJbW0sIFRtcAorCithcm02NDogWG9yUmlnaHRTaGlmdDY0IFU6Rzo2NCwgVTpHOjY0
LCBVOkc6NjQsIEQ6Rzo2NAorICAgIFRtcCwgVG1wLCBJbW0sIFRtcAorCithcm02NDogWG9yVW5z
aWduZWRSaWdodFNoaWZ0NjQgVTpHOjY0LCBVOkc6NjQsIFU6Rzo2NCwgRDpHOjY0CisgICAgVG1w
LCBUbXAsIEltbSwgVG1wCisKK2FybTY0OiBPckxlZnRTaGlmdDMyIFU6RzozMiwgVTpHOjMyLCBV
Okc6MzIsIFpEOkc6MzIKKyAgICBUbXAsIFRtcCwgSW1tLCBUbXAKKworYXJtNjQ6IE9yUmlnaHRT
aGlmdDMyIFU6RzozMiwgVTpHOjMyLCBVOkc6MzIsIFpEOkc6MzIKKyAgICBUbXAsIFRtcCwgSW1t
LCBUbXAKKworYXJtNjQ6IE9yVW5zaWduZWRSaWdodFNoaWZ0MzIgVTpHOjMyLCBVOkc6MzIsIFU6
RzozMiwgWkQ6RzozMgorICAgIFRtcCwgVG1wLCBJbW0sIFRtcAorCithcm02NDogT3JMZWZ0U2hp
ZnQ2NCBVOkc6NjQsIFU6Rzo2NCwgVTpHOjY0LCBEOkc6NjQKKyAgICBUbXAsIFRtcCwgSW1tLCBU
bXAKKworYXJtNjQ6IE9yUmlnaHRTaGlmdDY0IFU6Rzo2NCwgVTpHOjY0LCBVOkc6NjQsIEQ6Rzo2
NAorICAgIFRtcCwgVG1wLCBJbW0sIFRtcAorCithcm02NDogT3JVbnNpZ25lZFJpZ2h0U2hpZnQ2
NCBVOkc6NjQsIFU6Rzo2NCwgVTpHOjY0LCBEOkc6NjQKKyAgICBUbXAsIFRtcCwgSW1tLCBUbXAK
KwogIyBUaGUgZmlyc3Qgb3BlcmFuZCBpcyByYXguCiAjIEZJWE1FOiBUaGlzIGZvcm11bGF0aW9u
IG1lYW5zIHRoYXQgdGhlIGJvb2xlYW4gcmVzdWx0IGNhbm5vdCBiZSBwdXQgaW4gZWF4LCBldmVu
IHRob3VnaCBhbGwgdXNlcnMKICMgb2YgdGhpcyB3b3VsZCBiZSBPSyB3aXRoIHRoYXQuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvdGVzdGIzLmgKaW5kZXggNzIxZWIzYWRkNjI3NDhlMmZiMDJkZGY0MjU1N2Nj
NTlkNWQ4ODBlYi4uMGEyY2YyMzY0NzM3Y2MzYzMwN2IwOGY0ODU4ZDY1YjExZmNiOGFmMSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaApAQCAtNDcxLDYgKzQ3MSwyOCBAQCB2b2lkIHRlc3RT
dWJXaXRoVW5zaWduZWRSaWdodFNoaWZ0MzIoKTsKIHZvaWQgdGVzdFN1YldpdGhMZWZ0U2hpZnQ2
NCgpOwogdm9pZCB0ZXN0U3ViV2l0aFJpZ2h0U2hpZnQ2NCgpOwogdm9pZCB0ZXN0U3ViV2l0aFVu
c2lnbmVkUmlnaHRTaGlmdDY0KCk7CisKK3ZvaWQgdGVzdEFuZExlZnRTaGlmdDMyKCk7Cit2b2lk
IHRlc3RBbmRSaWdodFNoaWZ0MzIoKTsKK3ZvaWQgdGVzdEFuZFVuc2lnbmVkUmlnaHRTaGlmdDMy
KCk7Cit2b2lkIHRlc3RBbmRMZWZ0U2hpZnQ2NCgpOwordm9pZCB0ZXN0QW5kUmlnaHRTaGlmdDY0
KCk7Cit2b2lkIHRlc3RBbmRVbnNpZ25lZFJpZ2h0U2hpZnQ2NCgpOworCit2b2lkIHRlc3RYb3JM
ZWZ0U2hpZnQzMigpOwordm9pZCB0ZXN0WG9yUmlnaHRTaGlmdDMyKCk7Cit2b2lkIHRlc3RYb3JV
bnNpZ25lZFJpZ2h0U2hpZnQzMigpOwordm9pZCB0ZXN0WG9yTGVmdFNoaWZ0NjQoKTsKK3ZvaWQg
dGVzdFhvclJpZ2h0U2hpZnQ2NCgpOwordm9pZCB0ZXN0WG9yVW5zaWduZWRSaWdodFNoaWZ0NjQo
KTsKKwordm9pZCB0ZXN0T3JMZWZ0U2hpZnQzMigpOwordm9pZCB0ZXN0T3JSaWdodFNoaWZ0MzIo
KTsKK3ZvaWQgdGVzdE9yVW5zaWduZWRSaWdodFNoaWZ0MzIoKTsKK3ZvaWQgdGVzdE9yTGVmdFNo
aWZ0NjQoKTsKK3ZvaWQgdGVzdE9yUmlnaHRTaGlmdDY0KCk7Cit2b2lkIHRlc3RPclVuc2lnbmVk
UmlnaHRTaGlmdDY0KCk7CisKIHZvaWQgdGVzdFNlbGVjdENvbXBhcmVEb3VibGUoKTsKIHZvaWQg
dGVzdFNlbGVjdENvbXBhcmVGbG9hdChmbG9hdCwgZmxvYXQpOwogdm9pZCB0ZXN0U2VsZWN0Q29t
cGFyZUZsb2F0VG9Eb3VibGUoZmxvYXQsIGZsb2F0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy90ZXN0YjNfMi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVz
dGIzXzIuY3BwCmluZGV4IDI0YjNmODM4NzJhMGZjYmU2OTM0ZjNiYTBjOTEwN2FjYTcxNDAxNTQu
LmZhNjRjOGIzYzI2ZjJlYTdjOTA3OTU5ODE2ZDFmNjBlNjk5YjEzMmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMi5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL3Rlc3RiM18yLmNwcApAQCAtNTQ2MSw2ICs1NDYxLDc2MiBAQCB2b2lkIHRlc3RT
dWJXaXRoVW5zaWduZWRSaWdodFNoaWZ0NjQoKQogICAgIH0KIH0KIAordm9pZCB0ZXN0QW5kTGVm
dFNoaWZ0MzIoKQoreworICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkg
PCAyKQorICAgICAgICByZXR1cm47CisgICAgVmVjdG9yPGludDMyX3Q+IGFtb3VudHMgPSB7IDEs
IDE3LCAzMSB9OworCisgICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0gbiAmIChtIDw8IGFtb3VudCkK
KyAgICBhdXRvIHRlc3QgPSBbJl0gKGludDMyX3QgbiwgaW50MzJfdCBtLCBpbnQzMl90IGFtb3Vu
dCkgLT4gaW50MzJfdCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Js
b2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBuVmFsdWUgPSBy
b290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigp
LCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgIFZhbHVlKiBtVmFsdWUg
PSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdp
bigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSk7CisgICAgICAgIFZhbHVlKiBhbW91
bnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBh
bW91bnQpOworCisgICAgICAgIFZhbHVlKiBzaGlmdFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZh
bHVlPihwcm9jLCBTaGwsIE9yaWdpbigpLCBtVmFsdWUsIGFtb3VudFZhbHVlKTsKKyAgICAgICAg
cm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBP
cmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdEFu
ZCwgT3JpZ2luKCksIG5WYWx1ZSwgc2hpZnRWYWx1ZSkpOworCisgICAgICAgIGF1dG8gY29kZSA9
IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAgICAg
ICBzdGQ6OnN0cmluZyByZWdleCgiLiphbmQuKiwuKiwuKiwuKmxzbCAjIik7CisgICAgICAgICAg
ICByZWdleCArPSBzdGQ6OnRvX3N0cmluZyhhbW91bnQpICsgIi4qIjsKKyAgICAgICAgICAgIGNo
ZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCByZWdleC5jX3N0cigpLCB0cnVlKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gaW52b2tlPGludDMyX3Q+KCpjb2RlLCBuLCBtKTsKKyAgICB9Owor
CisgICAgZm9yIChhdXRvIG5PcGVyYW5kIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgIGZv
ciAoYXV0byBtT3BlcmFuZCA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChh
dXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBpbnQzMl90IG4gPSBuT3Bl
cmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBpbnQzMl90IG0gPSBtT3BlcmFuZC52YWx1ZTsK
KyAgICAgICAgICAgICAgICBDSEVDS19FUSh0ZXN0KG4sIG0sIGFtb3VudCksIG4gJiAobSA8PCBh
bW91bnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0
QW5kUmlnaHRTaGlmdDMyKCkKK3sKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRM
ZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIFZlY3RvcjxpbnQzMl90PiBhbW91bnRz
ID0geyAxLCAxNywgMzEgfTsKKworICAgIC8vIFRlc3QgUGF0dGVybjogZCA9IG4gJiAobSA+PiBh
bW91bnQpCisgICAgYXV0byB0ZXN0ID0gWyZdIChpbnQzMl90IG4sIGludDMyX3QgbSwgaW50MzJf
dCBhbW91bnQpIC0+IGludDMyX3QgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAg
QmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgICAgICBWYWx1ZSogblZh
bHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFRydW5jLCBP
cmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICBWYWx1ZSog
bVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFRydW5j
LCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkpOworICAgICAgICBWYWx1
ZSogYW1vdW50VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmln
aW4oKSwgYW1vdW50KTsKKworICAgICAgICBWYWx1ZSogc2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4ocHJvYywgU1NociwgT3JpZ2luKCksIG1WYWx1ZSwgYW1vdW50VmFsdWUpOwor
ICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgICAgICBwcm9jLCBS
ZXR1cm4sIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJv
YywgQml0QW5kLCBPcmlnaW4oKSwgblZhbHVlLCBzaGlmdFZhbHVlKSk7CisKKyAgICAgICAgYXV0
byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkpIHsKKyAg
ICAgICAgICAgIHN0ZDo6c3RyaW5nIHJlZ2V4KCIuKmFuZC4qLC4qLC4qLC4qYXNyICMiKTsKKyAg
ICAgICAgICAgIHJlZ2V4ICs9IHN0ZDo6dG9fc3RyaW5nKGFtb3VudCkgKyAiLioiOworICAgICAg
ICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsIHJlZ2V4LmNfc3RyKCksIHRydWUpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBpbnZva2U8aW50MzJfdD4oKmNvZGUsIG4sIG0pOwor
ICAgIH07CisKKyAgICBmb3IgKGF1dG8gbk9wZXJhbmQgOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAg
ICAgICAgZm9yIChhdXRvIG1PcGVyYW5kIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgICAg
ICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAgICAgIGludDMyX3Qg
biA9IG5PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIGludDMyX3QgbSA9IG1PcGVyYW5k
LnZhbHVlOworICAgICAgICAgICAgICAgIENIRUNLX0VRKHRlc3QobiwgbSwgYW1vdW50KSwgbiAm
IChtID4+IGFtb3VudCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2
b2lkIHRlc3RBbmRVbnNpZ25lZFJpZ2h0U2hpZnQzMigpCit7CisgICAgaWYgKEpTQzo6T3B0aW9u
czo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8
dWludDMyX3Q+IGFtb3VudHMgPSB7IDEsIDE3LCAzMSB9OworCisgICAgLy8gVGVzdCBQYXR0ZXJu
OiBkID0gbiAmIChtID4+IGFtb3VudCkKKyAgICBhdXRvIHRlc3QgPSBbJl0gKHVpbnQzMl90IG4s
IHVpbnQzMl90IG0sIHVpbnQzMl90IGFtb3VudCkgLT4gdWludDMyX3QgeworICAgICAgICBQcm9j
ZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsK
KworICAgICAgICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAg
ICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmRO
ZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BS
MCkpOworICAgICAgICBWYWx1ZSogbVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAg
ICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBl
bmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50
R1BSMSkpOworICAgICAgICBWYWx1ZSogYW1vdW50VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29u
c3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYW1vdW50KTsKKworICAgICAgICBWYWx1ZSogc2hp
ZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgWlNociwgT3JpZ2luKCksIG1W
YWx1ZSwgYW1vdW50VmFsdWUpOworICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUo
CisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgblZhbHVlLCBzaGlmdFZh
bHVlKSk7CisKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgICAg
IGlmIChpc0FSTTY0KCkpIHsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHJlZ2V4KCIuKmFuZC4q
LC4qLC4qLC4qbHNyICMiKTsKKyAgICAgICAgICAgIHJlZ2V4ICs9IHN0ZDo6dG9fc3RyaW5nKGFt
b3VudCkgKyAiLioiOworICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsIHJl
Z2V4LmNfc3RyKCksIHRydWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBpbnZva2U8dWlu
dDMyX3Q+KCpjb2RlLCBuLCBtKTsKKyAgICB9OworCisgICAgZm9yIChhdXRvIG5PcGVyYW5kIDog
aW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtT3BlcmFuZCA6IGludDMyT3Bl
cmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAg
ICAgICAgICAgICAgICB1aW50MzJfdCBuID0gbk9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAg
ICAgdWludDMyX3QgbSA9IG1PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIENIRUNLX0VR
KHRlc3QobiwgbSwgYW1vdW50KSwgbiAmIChtID4+IGFtb3VudCkpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RBbmRMZWZ0U2hpZnQ2NCgpCit7CisgICAg
aWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVy
bjsKKyAgICBWZWN0b3I8aW50MzJfdD4gYW1vdW50cyA9IHsgMSwgMzQsIDYzIH07CisKKyAgICAv
LyBUZXN0IFBhdHRlcm46IGQgPSBuICYgKG0gPDwgYW1vdW50KQorICAgIGF1dG8gdGVzdCA9IFsm
XSAoaW50NjRfdCBuLCBpbnQ2NF90IG0sIGludDMyX3QgYW1vdW50KSAtPiBpbnQ2NF90IHsKKyAg
ICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFk
ZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1
bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAg
ICAgICAgVmFsdWUqIG1WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgVmFsdWUqIGFt
b3VudFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IGFtb3VudCk7CisKKyAgICAgICAgVmFsdWUqIHNoaWZ0VmFsdWUgPSByb290LT5hcHBlbmROZXc8
VmFsdWU+KHByb2MsIFNobCwgT3JpZ2luKCksIG1WYWx1ZSwgYW1vdW50VmFsdWUpOworICAgICAg
ICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4s
IE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0
QW5kLCBPcmlnaW4oKSwgblZhbHVlLCBzaGlmdFZhbHVlKSk7CisKKyAgICAgICAgYXV0byBjb2Rl
ID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkpIHsKKyAgICAgICAg
ICAgIHN0ZDo6c3RyaW5nIHJlZ2V4KCIuKmFuZC4qLC4qLC4qLC4qbHNsICMiKTsKKyAgICAgICAg
ICAgIHJlZ2V4ICs9IHN0ZDo6dG9fc3RyaW5nKGFtb3VudCkgKyAiLioiOworICAgICAgICAgICAg
Y2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsIHJlZ2V4LmNfc3RyKCksIHRydWUpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBpbnZva2U8aW50NjRfdD4oKmNvZGUsIG4sIG0pOworICAgIH07
CisKKyAgICBmb3IgKGF1dG8gbk9wZXJhbmQgOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAg
Zm9yIChhdXRvIG1PcGVyYW5kIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAgICAgICAgICBmb3Ig
KGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAgICAgIGludDY0X3QgbiA9IG5P
cGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIGludDY0X3QgbSA9IG1PcGVyYW5kLnZhbHVl
OworICAgICAgICAgICAgICAgIENIRUNLX0VRKHRlc3QobiwgbSwgYW1vdW50KSwgbiAmIChtIDw8
IGFtb3VudCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRl
c3RBbmRSaWdodFNoaWZ0NjQoKQoreworICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRCM09w
dExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisgICAgVmVjdG9yPGludDMyX3Q+IGFtb3Vu
dHMgPSB7IDEsIDM0LCA2MyB9OworCisgICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0gbiAmIChtID4+
IGFtb3VudCkKKyAgICBhdXRvIHRlc3QgPSBbJl0gKGludDY0X3QgbiwgaW50NjRfdCBtLCBpbnQz
Ml90IGFtb3VudCkgLT4gaW50NjRfdCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAg
ICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBu
VmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIFZhbHVlKiBtVmFsdWUgPSByb290LT5h
cHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSk7CisgICAgICAgIFZhbHVlKiBhbW91bnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxD
b25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBhbW91bnQpOworCisgICAgICAgIFZhbHVlKiBz
aGlmdFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTU2hyLCBPcmlnaW4oKSwg
bVZhbHVlLCBhbW91bnRWYWx1ZSk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1
ZSgKKyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRBbmQsIE9yaWdpbigpLCBuVmFsdWUsIHNoaWZ0
VmFsdWUpKTsKKworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAg
ICAgaWYgKGlzQVJNNjQoKSkgeworICAgICAgICAgICAgc3RkOjpzdHJpbmcgcmVnZXgoIi4qYW5k
LiosLiosLiosLiphc3IgIyIpOworICAgICAgICAgICAgcmVnZXggKz0gc3RkOjp0b19zdHJpbmco
YW1vdW50KSArICIuKiI7CisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwg
cmVnZXguY19zdHIoKSwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGludm9rZTxp
bnQ2NF90PigqY29kZSwgbiwgbSk7CisgICAgfTsKKworICAgIGZvciAoYXV0byBuT3BlcmFuZCA6
IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbU9wZXJhbmQgOiBpbnQ2NE9w
ZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7Cisg
ICAgICAgICAgICAgICAgaW50NjRfdCBuID0gbk9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAg
ICAgaW50NjRfdCBtID0gbU9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEo
dGVzdChuLCBtLCBhbW91bnQpLCBuICYgKG0gPj4gYW1vdW50KSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdEFuZFVuc2lnbmVkUmlnaHRTaGlmdDY0KCkK
K3sKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAg
ICAgcmV0dXJuOworICAgIFZlY3Rvcjx1aW50MzJfdD4gYW1vdW50cyA9IHsgMSwgMTcsIDMxIH07
CisKKyAgICAvLyBUZXN0IFBhdHRlcm46IGQgPSBuICYgKG0gPj4gYW1vdW50KQorICAgIGF1dG8g
dGVzdCA9IFsmXSAodWludDY0X3QgbiwgdWludDY0X3QgbSwgdWludDMyX3QgYW1vdW50KSAtPiB1
aW50NjRfdCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiBy
b290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBuVmFsdWUgPSByb290LT5h
cHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7CisgICAgICAgIFZhbHVlKiBtVmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJndW1l
bnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAg
ICAgIFZhbHVlKiBhbW91bnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBhbW91bnQpOworCisgICAgICAgIFZhbHVlKiBzaGlmdFZhbHVlID0gcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBaU2hyLCBPcmlnaW4oKSwgbVZhbHVlLCBhbW91bnRW
YWx1ZSk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgICAg
IHByb2MsIFJldHVybiwgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZh
bHVlPihwcm9jLCBCaXRBbmQsIE9yaWdpbigpLCBuVmFsdWUsIHNoaWZ0VmFsdWUpKTsKKworICAg
ICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQo
KSkgeworICAgICAgICAgICAgc3RkOjpzdHJpbmcgcmVnZXgoIi4qYW5kLiosLiosLiosLipsc3Ig
IyIpOworICAgICAgICAgICAgcmVnZXggKz0gc3RkOjp0b19zdHJpbmcoYW1vdW50KSArICIuKiI7
CisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgcmVnZXguY19zdHIoKSwg
dHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGludm9rZTx1aW50NjRfdD4oKmNvZGUs
IG4sIG0pOworICAgIH07CisKKyAgICBmb3IgKGF1dG8gbk9wZXJhbmQgOiBpbnQ2NE9wZXJhbmRz
KCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG1PcGVyYW5kIDogaW50NjRPcGVyYW5kcygpKSB7Cisg
ICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAgICAg
IHVpbnQ2NF90IG4gPSBuT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBt
ID0gbU9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEodGVzdChuLCBtLCBh
bW91bnQpLCBuICYgKG0gPj4gYW1vdW50KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK3ZvaWQgdGVzdFhvckxlZnRTaGlmdDMyKCkKK3sKKyAgICBpZiAoSlNDOjpPcHRp
b25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIFZlY3Rv
cjxpbnQzMl90PiBhbW91bnRzID0geyAxLCAxNywgMzEgfTsKKworICAgIC8vIFRlc3QgUGF0dGVy
bjogZCA9IG4gXiAobSA8PCBhbW91bnQpCisgICAgYXV0byB0ZXN0ID0gWyZdIChpbnQzMl90IG4s
IGludDMyX3QgbSwgaW50MzJfdCBhbW91bnQpIC0+IGludDMyX3QgeworICAgICAgICBQcm9jZWR1
cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKwor
ICAgICAgICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAg
ICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8
QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkp
OworICAgICAgICBWYWx1ZSogbVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAg
ICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmRO
ZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BS
MSkpOworICAgICAgICBWYWx1ZSogYW1vdW50VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3Qz
MlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYW1vdW50KTsKKworICAgICAgICBWYWx1ZSogc2hpZnRW
YWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU2hsLCBPcmlnaW4oKSwgbVZhbHVl
LCBhbW91bnRWYWx1ZSk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAg
ICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9yaWdpbigpLCBuVmFsdWUsIHNoaWZ0VmFsdWUp
KTsKKworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYg
KGlzQVJNNjQoKSkgeworICAgICAgICAgICAgc3RkOjpzdHJpbmcgcmVnZXgoIi4qZW9yLiosLios
LiosLipsc2wgIyIpOworICAgICAgICAgICAgcmVnZXggKz0gc3RkOjp0b19zdHJpbmcoYW1vdW50
KSArICIuKiI7CisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgcmVnZXgu
Y19zdHIoKSwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQzMl90
PigqY29kZSwgbiwgbSk7CisgICAgfTsKKworICAgIGZvciAoYXV0byBuT3BlcmFuZCA6IGludDMy
T3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbU9wZXJhbmQgOiBpbnQzMk9wZXJhbmRz
KCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAg
ICAgICAgICAgaW50MzJfdCBuID0gbk9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgaW50
MzJfdCBtID0gbU9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEodGVzdChu
LCBtLCBhbW91bnQpLCBuIF4gKG0gPDwgYW1vdW50KSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdFhvclJpZ2h0U2hpZnQzMigpCit7CisgICAgaWYgKEpT
Qzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKyAg
ICBWZWN0b3I8aW50MzJfdD4gYW1vdW50cyA9IHsgMSwgMTcsIDMxIH07CisKKyAgICAvLyBUZXN0
IFBhdHRlcm46IGQgPSBuIF4gKG0gPj4gYW1vdW50KQorICAgIGF1dG8gdGVzdCA9IFsmXSAoaW50
MzJfdCBuLCBpbnQzMl90IG0sIGludDMyX3QgYW1vdW50KSAtPiBpbnQzMl90IHsKKyAgICAgICAg
UHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2Nr
KCk7CisKKyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisg
ICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApKTsKKyAgICAgICAgVmFsdWUqIG1WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
CisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjEpKTsKKyAgICAgICAgVmFsdWUqIGFtb3VudFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3
PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGFtb3VudCk7CisKKyAgICAgICAgVmFsdWUq
IHNoaWZ0VmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNTaHIsIE9yaWdpbigp
LCBtVmFsdWUsIGFtb3VudFZhbHVlKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZh
bHVlKAorICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgCisgICAgICAgICAgICBy
b290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIG5WYWx1ZSwgc2hp
ZnRWYWx1ZSkpOworCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAg
ICAgICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyByZWdleCgiLipl
b3IuKiwuKiwuKiwuKmFzciAjIik7CisgICAgICAgICAgICByZWdleCArPSBzdGQ6OnRvX3N0cmlu
ZyhhbW91bnQpICsgIi4qIjsKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2Rl
LCByZWdleC5jX3N0cigpLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW52b2tl
PGludDMyX3Q+KCpjb2RlLCBuLCBtKTsKKyAgICB9OworCisgICAgZm9yIChhdXRvIG5PcGVyYW5k
IDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtT3BlcmFuZCA6IGludDMy
T3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsK
KyAgICAgICAgICAgICAgICBpbnQzMl90IG4gPSBuT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAg
ICAgICBpbnQzMl90IG0gPSBtT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBDSEVDS19F
USh0ZXN0KG4sIG0sIGFtb3VudCksIG4gXiAobSA+PiBhbW91bnQpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0WG9yVW5zaWduZWRSaWdodFNoaWZ0MzIo
KQoreworICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAg
ICAgICByZXR1cm47CisgICAgVmVjdG9yPHVpbnQzMl90PiBhbW91bnRzID0geyAxLCAxNywgMzEg
fTsKKworICAgIC8vIFRlc3QgUGF0dGVybjogZCA9IG4gXiAobSA+PiBhbW91bnQpCisgICAgYXV0
byB0ZXN0ID0gWyZdICh1aW50MzJfdCBuLCB1aW50MzJfdCBtLCB1aW50MzJfdCBhbW91bnQpIC0+
IHVpbnQzMl90IHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sq
IHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAor
ICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgVmFsdWUqIG1WYWx1ZSA9IHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCks
IAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9y
aWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKTsKKyAgICAgICAgVmFsdWUqIGFtb3VudFZh
bHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGFtb3Vu
dCk7CisKKyAgICAgICAgVmFsdWUqIHNoaWZ0VmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIFpTaHIsIE9yaWdpbigpLCBtVmFsdWUsIGFtb3VudFZhbHVlKTsKKyAgICAgICAgcm9v
dC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmln
aW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdFhvciwg
T3JpZ2luKCksIG5WYWx1ZSwgc2hpZnRWYWx1ZSkpOworCisgICAgICAgIGF1dG8gY29kZSA9IGNv
bXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAgICAgICBz
dGQ6OnN0cmluZyByZWdleCgiLiplb3IuKiwuKiwuKiwuKmxzciAjIik7CisgICAgICAgICAgICBy
ZWdleCArPSBzdGQ6OnRvX3N0cmluZyhhbW91bnQpICsgIi4qIjsKKyAgICAgICAgICAgIGNoZWNr
VXNlc0luc3RydWN0aW9uKCpjb2RlLCByZWdleC5jX3N0cigpLCB0cnVlKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gaW52b2tlPHVpbnQzMl90PigqY29kZSwgbiwgbSk7CisgICAgfTsKKwor
ICAgIGZvciAoYXV0byBuT3BlcmFuZCA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICBmb3Ig
KGF1dG8gbU9wZXJhbmQgOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0
byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgdWludDMyX3QgbiA9IG5PcGVy
YW5kLnZhbHVlOworICAgICAgICAgICAgICAgIHVpbnQzMl90IG0gPSBtT3BlcmFuZC52YWx1ZTsK
KyAgICAgICAgICAgICAgICBDSEVDS19FUSh0ZXN0KG4sIG0sIGFtb3VudCksIG4gXiAobSA+PiBh
bW91bnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0
WG9yTGVmdFNoaWZ0NjQoKQoreworICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExl
dmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisgICAgVmVjdG9yPGludDMyX3Q+IGFtb3VudHMg
PSB7IDEsIDM0LCA2MyB9OworCisgICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0gbiBeIChtIDw8IGFt
b3VudCkKKyAgICBhdXRvIHRlc3QgPSBbJl0gKGludDY0X3QgbiwgaW50NjRfdCBtLCBpbnQzMl90
IGFtb3VudCkgLT4gaW50NjRfdCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBC
YXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBuVmFs
dWUgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIFZhbHVlKiBtVmFsdWUgPSByb290LT5hcHBl
bmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50
R1BSMSk7CisgICAgICAgIFZhbHVlKiBhbW91bnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25z
dDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBhbW91bnQpOworCisgICAgICAgIFZhbHVlKiBzaGlm
dFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTaGwsIE9yaWdpbigpLCBtVmFs
dWUsIGFtb3VudFZhbHVlKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAor
ICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5h
cHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIG5WYWx1ZSwgc2hpZnRWYWx1
ZSkpOworCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBp
ZiAoaXNBUk02NCgpKSB7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyByZWdleCgiLiplb3IuKiwu
KiwuKiwuKmxzbCAjIik7CisgICAgICAgICAgICByZWdleCArPSBzdGQ6OnRvX3N0cmluZyhhbW91
bnQpICsgIi4qIjsKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCByZWdl
eC5jX3N0cigpLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW52b2tlPGludDY0
X3Q+KCpjb2RlLCBuLCBtKTsKKyAgICB9OworCisgICAgZm9yIChhdXRvIG5PcGVyYW5kIDogaW50
NjRPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtT3BlcmFuZCA6IGludDY0T3BlcmFu
ZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAg
ICAgICAgICAgICBpbnQ2NF90IG4gPSBuT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBp
bnQ2NF90IG0gPSBtT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUSh0ZXN0
KG4sIG0sIGFtb3VudCksIG4gXiAobSA8PCBhbW91bnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0WG9yUmlnaHRTaGlmdDY0KCkKK3sKKyAgICBpZiAo
SlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOwor
ICAgIFZlY3RvcjxpbnQzMl90PiBhbW91bnRzID0geyAxLCAzNCwgNjMgfTsKKworICAgIC8vIFRl
c3QgUGF0dGVybjogZCA9IG4gXiAobSA+PiBhbW91bnQpCisgICAgYXV0byB0ZXN0ID0gWyZdIChp
bnQ2NF90IG4sIGludDY0X3QgbSwgaW50MzJfdCBhbW91bnQpIC0+IGludDY0X3QgeworICAgICAg
ICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxv
Y2soKTsKKworICAgICAgICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50
UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAg
ICBWYWx1ZSogbVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBWYWx1ZSogYW1vdW50
VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYW1v
dW50KTsKKworICAgICAgICBWYWx1ZSogc2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgU1NociwgT3JpZ2luKCksIG1WYWx1ZSwgYW1vdW50VmFsdWUpOworICAgICAgICBy
b290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9y
aWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0WG9y
LCBPcmlnaW4oKSwgblZhbHVlLCBzaGlmdFZhbHVlKSk7CisKKyAgICAgICAgYXV0byBjb2RlID0g
Y29tcGlsZVByb2MocHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkpIHsKKyAgICAgICAgICAg
IHN0ZDo6c3RyaW5nIHJlZ2V4KCIuKmVvci4qLC4qLC4qLC4qYXNyICMiKTsKKyAgICAgICAgICAg
IHJlZ2V4ICs9IHN0ZDo6dG9fc3RyaW5nKGFtb3VudCkgKyAiLioiOworICAgICAgICAgICAgY2hl
Y2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsIHJlZ2V4LmNfc3RyKCksIHRydWUpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBpbnZva2U8aW50NjRfdD4oKmNvZGUsIG4sIG0pOworICAgIH07CisK
KyAgICBmb3IgKGF1dG8gbk9wZXJhbmQgOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9y
IChhdXRvIG1PcGVyYW5kIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1
dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAgICAgIGludDY0X3QgbiA9IG5PcGVy
YW5kLnZhbHVlOworICAgICAgICAgICAgICAgIGludDY0X3QgbSA9IG1PcGVyYW5kLnZhbHVlOwor
ICAgICAgICAgICAgICAgIENIRUNLX0VRKHRlc3QobiwgbSwgYW1vdW50KSwgbiBeIChtID4+IGFt
b3VudCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RY
b3JVbnNpZ25lZFJpZ2h0U2hpZnQ2NCgpCit7CisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVs
dEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8dWludDMyX3Q+
IGFtb3VudHMgPSB7IDEsIDE3LCAzMSB9OworCisgICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0gbiBe
IChtID4+IGFtb3VudCkKKyAgICBhdXRvIHRlc3QgPSBbJl0gKHVpbnQ2NF90IG4sIHVpbnQ2NF90
IG0sIHVpbnQzMl90IGFtb3VudCkgLT4gdWludDY0X3QgeworICAgICAgICBQcm9jZWR1cmUgcHJv
YzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgICAg
ICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBWYWx1ZSogbVZhbHVl
ID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBWYWx1ZSogYW1vdW50VmFsdWUgPSByb290LT5h
cHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYW1vdW50KTsKKworICAgICAg
ICBWYWx1ZSogc2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgWlNociwg
T3JpZ2luKCksIG1WYWx1ZSwgYW1vdW50VmFsdWUpOworICAgICAgICByb290LT5hcHBlbmROZXdD
b250cm9sVmFsdWUoCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCAKKyAgICAg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0WG9yLCBPcmlnaW4oKSwgblZh
bHVlLCBzaGlmdFZhbHVlKSk7CisKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJv
Yyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkpIHsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHJl
Z2V4KCIuKmVvci4qLC4qLC4qLC4qbHNyICMiKTsKKyAgICAgICAgICAgIHJlZ2V4ICs9IHN0ZDo6
dG9fc3RyaW5nKGFtb3VudCkgKyAiLioiOworICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rp
b24oKmNvZGUsIHJlZ2V4LmNfc3RyKCksIHRydWUpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBpbnZva2U8dWludDY0X3Q+KCpjb2RlLCBuLCBtKTsKKyAgICB9OworCisgICAgZm9yIChhdXRv
IG5PcGVyYW5kIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtT3BlcmFu
ZCA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFt
b3VudHMpIHsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBuID0gbk9wZXJhbmQudmFsdWU7Cisg
ICAgICAgICAgICAgICAgdWludDY0X3QgbSA9IG1PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAg
ICAgIENIRUNLX0VRKHRlc3QobiwgbSwgYW1vdW50KSwgbiBeIChtID4+IGFtb3VudCkpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RPckxlZnRTaGlmdDMy
KCkKK3sKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAg
ICAgICAgcmV0dXJuOworICAgIFZlY3RvcjxpbnQzMl90PiBhbW91bnRzID0geyAxLCAxNywgMzEg
fTsKKworICAgIC8vIFRlc3QgUGF0dGVybjogZCA9IG4gfCAobSA8PCBhbW91bnQpCisgICAgYXV0
byB0ZXN0ID0gWyZdIChpbnQzMl90IG4sIGludDMyX3QgbSwgaW50MzJfdCBhbW91bnQpIC0+IGlu
dDMyX3QgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9v
dCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgICAgICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwgCisgICAg
ICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICBWYWx1ZSogbVZhbHVlID0gcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwgCisg
ICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkpOworICAgICAgICBWYWx1ZSogYW1vdW50VmFsdWUg
PSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYW1vdW50KTsK
KworICAgICAgICBWYWx1ZSogc2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJv
YywgU2hsLCBPcmlnaW4oKSwgbVZhbHVlLCBhbW91bnRWYWx1ZSk7CisgICAgICAgIHJvb3QtPmFw
cGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCks
IAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRPciwgT3JpZ2lu
KCksIG5WYWx1ZSwgc2hpZnRWYWx1ZSkpOworCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQ
cm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAgICAgICBzdGQ6OnN0
cmluZyByZWdleCgiLipvcnIuKiwuKiwuKiwuKmxzbCAjIik7CisgICAgICAgICAgICByZWdleCAr
PSBzdGQ6OnRvX3N0cmluZyhhbW91bnQpICsgIi4qIjsKKyAgICAgICAgICAgIGNoZWNrVXNlc0lu
c3RydWN0aW9uKCpjb2RlLCByZWdleC5jX3N0cigpLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gaW52b2tlPGludDMyX3Q+KCpjb2RlLCBuLCBtKTsKKyAgICB9OworCisgICAgZm9y
IChhdXRvIG5PcGVyYW5kIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBt
T3BlcmFuZCA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3Vu
dCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBpbnQzMl90IG4gPSBuT3BlcmFuZC52YWx1
ZTsKKyAgICAgICAgICAgICAgICBpbnQzMl90IG0gPSBtT3BlcmFuZC52YWx1ZTsKKyAgICAgICAg
ICAgICAgICBDSEVDS19FUSh0ZXN0KG4sIG0sIGFtb3VudCksIG4gfCAobSA8PCBhbW91bnQpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0T3JSaWdodFNo
aWZ0MzIoKQoreworICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAy
KQorICAgICAgICByZXR1cm47CisgICAgVmVjdG9yPGludDMyX3Q+IGFtb3VudHMgPSB7IDEsIDE3
LCAzMSB9OworCisgICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0gbiB8IChtID4+IGFtb3VudCkKKyAg
ICBhdXRvIHRlc3QgPSBbJl0gKGludDMyX3QgbiwgaW50MzJfdCBtLCBpbnQzMl90IGFtb3VudCkg
LT4gaW50MzJfdCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2Nr
KiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBuVmFsdWUgPSByb290
LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLCAK
KyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmln
aW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgIFZhbHVlKiBtVmFsdWUgPSBy
b290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigp
LCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSk7CisgICAgICAgIFZhbHVlKiBhbW91bnRW
YWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBhbW91
bnQpOworCisgICAgICAgIFZhbHVlKiBzaGlmdFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBTU2hyLCBPcmlnaW4oKSwgbVZhbHVlLCBhbW91bnRWYWx1ZSk7CisgICAgICAgIHJv
b3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3Jp
Z2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRPciwg
T3JpZ2luKCksIG5WYWx1ZSwgc2hpZnRWYWx1ZSkpOworCisgICAgICAgIGF1dG8gY29kZSA9IGNv
bXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAgICAgICBz
dGQ6OnN0cmluZyByZWdleCgiLipvcnIuKiwuKiwuKiwuKmFzciAjIik7CisgICAgICAgICAgICBy
ZWdleCArPSBzdGQ6OnRvX3N0cmluZyhhbW91bnQpICsgIi4qIjsKKyAgICAgICAgICAgIGNoZWNr
VXNlc0luc3RydWN0aW9uKCpjb2RlLCByZWdleC5jX3N0cigpLCB0cnVlKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gaW52b2tlPGludDMyX3Q+KCpjb2RlLCBuLCBtKTsKKyAgICB9OworCisg
ICAgZm9yIChhdXRvIG5PcGVyYW5kIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAo
YXV0byBtT3BlcmFuZCA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRv
IGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBpbnQzMl90IG4gPSBuT3BlcmFu
ZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBpbnQzMl90IG0gPSBtT3BlcmFuZC52YWx1ZTsKKyAg
ICAgICAgICAgICAgICBDSEVDS19FUSh0ZXN0KG4sIG0sIGFtb3VudCksIG4gfCAobSA+PiBhbW91
bnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0T3JV
bnNpZ25lZFJpZ2h0U2hpZnQzMigpCit7CisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIz
T3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8dWludDMyX3Q+IGFt
b3VudHMgPSB7IDEsIDE3LCAzMSB9OworCisgICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0gbiB8ICht
ID4+IGFtb3VudCkKKyAgICBhdXRvIHRlc3QgPSBbJl0gKHVpbnQzMl90IG4sIHVpbnQzMl90IG0s
IHVpbnQzMl90IGFtb3VudCkgLT4gdWludDMyX3QgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsK
KyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgICAgICBW
YWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2Ms
IFRydW5jLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRS
ZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAg
ICBWYWx1ZSogbVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHBy
b2MsIFRydW5jLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1l
bnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkpOworICAg
ICAgICBWYWx1ZSogYW1vdW50VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgYW1vdW50KTsKKworICAgICAgICBWYWx1ZSogc2hpZnRWYWx1ZSA9IHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgWlNociwgT3JpZ2luKCksIG1WYWx1ZSwgYW1vdW50
VmFsdWUpOworICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgICAg
ICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4ocHJvYywgQml0T3IsIE9yaWdpbigpLCBuVmFsdWUsIHNoaWZ0VmFsdWUpKTsKKworICAg
ICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQo
KSkgeworICAgICAgICAgICAgc3RkOjpzdHJpbmcgcmVnZXgoIi4qb3JyLiosLiosLiosLipsc3Ig
IyIpOworICAgICAgICAgICAgcmVnZXggKz0gc3RkOjp0b19zdHJpbmcoYW1vdW50KSArICIuKiI7
CisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgcmVnZXguY19zdHIoKSwg
dHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGludm9rZTx1aW50MzJfdD4oKmNvZGUs
IG4sIG0pOworICAgIH07CisKKyAgICBmb3IgKGF1dG8gbk9wZXJhbmQgOiBpbnQzMk9wZXJhbmRz
KCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG1PcGVyYW5kIDogaW50MzJPcGVyYW5kcygpKSB7Cisg
ICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAgICAg
IHVpbnQzMl90IG4gPSBuT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBt
ID0gbU9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEodGVzdChuLCBtLCBh
bW91bnQpLCBuIHwgKG0gPj4gYW1vdW50KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK3ZvaWQgdGVzdE9yTGVmdFNoaWZ0NjQoKQoreworICAgIGlmIChKU0M6Ok9wdGlv
bnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisgICAgVmVjdG9y
PGludDMyX3Q+IGFtb3VudHMgPSB7IDEsIDM0LCA2MyB9OworCisgICAgLy8gVGVzdCBQYXR0ZXJu
OiBkID0gbiB8IChtIDw8IGFtb3VudCkKKyAgICBhdXRvIHRlc3QgPSBbJl0gKGludDY0X3Qgbiwg
aW50NjRfdCBtLCBpbnQzMl90IGFtb3VudCkgLT4gaW50NjRfdCB7CisgICAgICAgIFByb2NlZHVy
ZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisg
ICAgICAgIFZhbHVlKiBuVmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIFZhbHVlKiBt
VmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIFZhbHVlKiBhbW91bnRWYWx1ZSA9IHJv
b3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBhbW91bnQpOworCisg
ICAgICAgIFZhbHVlKiBzaGlmdFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBT
aGwsIE9yaWdpbigpLCBtVmFsdWUsIGFtb3VudFZhbHVlKTsKKyAgICAgICAgcm9vdC0+YXBwZW5k
TmV3Q29udHJvbFZhbHVlKAorICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgCisg
ICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdE9yLCBPcmlnaW4oKSwg
blZhbHVlLCBzaGlmdFZhbHVlKSk7CisKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2Mo
cHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkpIHsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5n
IHJlZ2V4KCIuKm9yci4qLC4qLC4qLC4qbHNsICMiKTsKKyAgICAgICAgICAgIHJlZ2V4ICs9IHN0
ZDo6dG9fc3RyaW5nKGFtb3VudCkgKyAiLioiOworICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1
Y3Rpb24oKmNvZGUsIHJlZ2V4LmNfc3RyKCksIHRydWUpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBpbnZva2U8aW50NjRfdD4oKmNvZGUsIG4sIG0pOworICAgIH07CisKKyAgICBmb3IgKGF1
dG8gbk9wZXJhbmQgOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG1PcGVy
YW5kIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDog
YW1vdW50cykgeworICAgICAgICAgICAgICAgIGludDY0X3QgbiA9IG5PcGVyYW5kLnZhbHVlOwor
ICAgICAgICAgICAgICAgIGludDY0X3QgbSA9IG1PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAg
ICAgIENIRUNLX0VRKHRlc3QobiwgbSwgYW1vdW50KSwgbiB8IChtIDw8IGFtb3VudCkpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RPclJpZ2h0U2hpZnQ2
NCgpCit7CisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisg
ICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8aW50MzJfdD4gYW1vdW50cyA9IHsgMSwgMzQsIDYz
IH07CisKKyAgICAvLyBUZXN0IFBhdHRlcm46IGQgPSBuIHwgKG0gPj4gYW1vdW50KQorICAgIGF1
dG8gdGVzdCA9IFsmXSAoaW50NjRfdCBuLCBpbnQ2NF90IG0sIGludDMyX3QgYW1vdW50KSAtPiBp
bnQ2NF90IHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJv
b3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJvb3QtPmFw
cGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKKyAgICAgICAgVmFsdWUqIG1WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVu
dFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAg
ICAgVmFsdWUqIGFtb3VudFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIGFtb3VudCk7CisKKyAgICAgICAgVmFsdWUqIHNoaWZ0VmFsdWUgPSByb290
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNTaHIsIE9yaWdpbigpLCBtVmFsdWUsIGFtb3VudFZh
bHVlKTsKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICAgICAg
cHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFs
dWU+KHByb2MsIEJpdE9yLCBPcmlnaW4oKSwgblZhbHVlLCBzaGlmdFZhbHVlKSk7CisKKyAgICAg
ICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkp
IHsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHJlZ2V4KCIuKm9yci4qLC4qLC4qLC4qYXNyICMi
KTsKKyAgICAgICAgICAgIHJlZ2V4ICs9IHN0ZDo6dG9fc3RyaW5nKGFtb3VudCkgKyAiLioiOwor
ICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsIHJlZ2V4LmNfc3RyKCksIHRy
dWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBpbnZva2U8aW50NjRfdD4oKmNvZGUsIG4s
IG0pOworICAgIH07CisKKyAgICBmb3IgKGF1dG8gbk9wZXJhbmQgOiBpbnQ2NE9wZXJhbmRzKCkp
IHsKKyAgICAgICAgZm9yIChhdXRvIG1PcGVyYW5kIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAg
ICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAgICAgIGlu
dDY0X3QgbiA9IG5PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIGludDY0X3QgbSA9IG1P
cGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIENIRUNLX0VRKHRlc3QobiwgbSwgYW1vdW50
KSwgbiB8IChtID4+IGFtb3VudCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
fQorCit2b2lkIHRlc3RPclVuc2lnbmVkUmlnaHRTaGlmdDY0KCkKK3sKKyAgICBpZiAoSlNDOjpP
cHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIFZl
Y3Rvcjx1aW50MzJfdD4gYW1vdW50cyA9IHsgMSwgMTcsIDMxIH07CisKKyAgICAvLyBUZXN0IFBh
dHRlcm46IGQgPSBuIHwgKG0gPj4gYW1vdW50KQorICAgIGF1dG8gdGVzdCA9IFsmXSAodWludDY0
X3QgbiwgdWludDY0X3QgbSwgdWludDMyX3QgYW1vdW50KSAtPiB1aW50NjRfdCB7CisgICAgICAg
IFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9j
aygpOworCisgICAgICAgIFZhbHVlKiBuVmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRS
ZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAg
IFZhbHVlKiBtVmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIFZhbHVlKiBhbW91bnRW
YWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBhbW91
bnQpOworCisgICAgICAgIFZhbHVlKiBzaGlmdFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBaU2hyLCBPcmlnaW4oKSwgbVZhbHVlLCBhbW91bnRWYWx1ZSk7CisgICAgICAgIHJv
b3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3Jp
Z2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRPciwg
T3JpZ2luKCksIG5WYWx1ZSwgc2hpZnRWYWx1ZSkpOworCisgICAgICAgIGF1dG8gY29kZSA9IGNv
bXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAgICAgICBz
dGQ6OnN0cmluZyByZWdleCgiLipvcnIuKiwuKiwuKiwuKmxzciAjIik7CisgICAgICAgICAgICBy
ZWdleCArPSBzdGQ6OnRvX3N0cmluZyhhbW91bnQpICsgIi4qIjsKKyAgICAgICAgICAgIGNoZWNr
VXNlc0luc3RydWN0aW9uKCpjb2RlLCByZWdleC5jX3N0cigpLCB0cnVlKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gaW52b2tlPHVpbnQ2NF90PigqY29kZSwgbiwgbSk7CisgICAgfTsKKwor
ICAgIGZvciAoYXV0byBuT3BlcmFuZCA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICBmb3Ig
KGF1dG8gbU9wZXJhbmQgOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0
byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgdWludDY0X3QgbiA9IG5PcGVy
YW5kLnZhbHVlOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IG0gPSBtT3BlcmFuZC52YWx1ZTsK
KyAgICAgICAgICAgICAgICBDSEVDS19FUSh0ZXN0KG4sIG0sIGFtb3VudCksIG4gfCAobSA+PiBh
bW91bnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwogdm9pZCB0ZXN0
Qml0QW5kWmVyb1NoaWZ0UmlnaHRBcmdJbW1NYXNrMzIoKQogewogICAgIC8vIFR1cm4gdGhpczog
KHRtcCA+PiBpbW0pICYgbWFzayAKQEAgLTYzODksNiArNzE0NSwyOCBAQCB2b2lkIGFkZEJpdFRl
c3RzKGNvbnN0IGNoYXIqIGZpbHRlciwgRGVxdWU8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4+
JiB0YXNrcykKICAgICBSVU4odGVzdFN1YldpdGhMZWZ0U2hpZnQ2NCgpKTsKICAgICBSVU4odGVz
dFN1YldpdGhSaWdodFNoaWZ0NjQoKSk7CiAgICAgUlVOKHRlc3RTdWJXaXRoVW5zaWduZWRSaWdo
dFNoaWZ0NjQoKSk7CisKKyAgICBSVU4odGVzdEFuZExlZnRTaGlmdDMyKCkpOworICAgIFJVTih0
ZXN0QW5kUmlnaHRTaGlmdDMyKCkpOworICAgIFJVTih0ZXN0QW5kVW5zaWduZWRSaWdodFNoaWZ0
MzIoKSk7CisgICAgUlVOKHRlc3RBbmRMZWZ0U2hpZnQ2NCgpKTsKKyAgICBSVU4odGVzdEFuZFJp
Z2h0U2hpZnQ2NCgpKTsKKyAgICBSVU4odGVzdEFuZFVuc2lnbmVkUmlnaHRTaGlmdDY0KCkpOwor
CisgICAgUlVOKHRlc3RYb3JMZWZ0U2hpZnQzMigpKTsKKyAgICBSVU4odGVzdFhvclJpZ2h0U2hp
ZnQzMigpKTsKKyAgICBSVU4odGVzdFhvclVuc2lnbmVkUmlnaHRTaGlmdDMyKCkpOworICAgIFJV
Tih0ZXN0WG9yTGVmdFNoaWZ0NjQoKSk7CisgICAgUlVOKHRlc3RYb3JSaWdodFNoaWZ0NjQoKSk7
CisgICAgUlVOKHRlc3RYb3JVbnNpZ25lZFJpZ2h0U2hpZnQ2NCgpKTsKKworICAgIFJVTih0ZXN0
T3JMZWZ0U2hpZnQzMigpKTsKKyAgICBSVU4odGVzdE9yUmlnaHRTaGlmdDMyKCkpOworICAgIFJV
Tih0ZXN0T3JVbnNpZ25lZFJpZ2h0U2hpZnQzMigpKTsKKyAgICBSVU4odGVzdE9yTGVmdFNoaWZ0
NjQoKSk7CisgICAgUlVOKHRlc3RPclJpZ2h0U2hpZnQ2NCgpKTsKKyAgICBSVU4odGVzdE9yVW5z
aWduZWRSaWdodFNoaWZ0NjQoKSk7CisKICAgICBSVU4odGVzdEJpdEFuZFplcm9TaGlmdFJpZ2h0
QXJnSW1tTWFzazMyKCkpOwogICAgIFJVTih0ZXN0Qml0QW5kWmVyb1NoaWZ0UmlnaHRBcmdJbW1N
YXNrNjQoKSk7CiAgICAgUlVOKHRlc3RCaXRBbmRBcmdzKDQzLCA0MykpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>